diff --git a/bower.json b/bower.json index a049a64..cf8039f 100644 --- a/bower.json +++ b/bower.json @@ -1,6 +1,6 @@ { "name": "ml", - "version": "4.0.0", + "version": "5.0.0", "main": [ "dist/ml.js", "dist/ml.min.js" diff --git a/dist/ml.js b/dist/ml.js index 7716fa4..62b4fbd 100644 --- a/dist/ml.js +++ b/dist/ml.js @@ -1,6 +1,6 @@ /** * ml - Machine learning tools - * @version v4.0.0 + * @version v5.0.0 * @link https://github.com/mljs/ml * @license MIT */ @@ -120,7 +120,7 @@ * @param {boolean} [outer] */ function checkRowIndex(matrix, index, outer) { - var max = outer ? matrix.rows : matrix.rows - 1; + let max = outer ? matrix.rows : matrix.rows - 1; if (index < 0 || index > max) { throw new RangeError('Row index out of range'); @@ -135,7 +135,7 @@ */ function checkColumnIndex(matrix, index, outer) { - var max = outer ? matrix.columns : matrix.columns - 1; + let max = outer ? matrix.columns : matrix.columns - 1; if (index < 0 || index > max) { throw new RangeError('Column index out of range'); @@ -192,7 +192,7 @@ throw new TypeError('unexpected type for row indices'); } - var rowOut = rowIndices.some(r => { + let rowOut = rowIndices.some(r => { return r < 0 || r >= matrix.rows; }); @@ -208,7 +208,7 @@ throw new TypeError('unexpected type for column indices'); } - var columnOut = columnIndices.some(c => { + let columnOut = columnIndices.some(c => { return c < 0 || c >= matrix.columns; }); @@ -235,9 +235,9 @@ } function newArray(length) { let value = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; - var array = []; + let array = []; - for (var i = 0; i < length; i++) { + for (let i = 0; i < length; i++) { array.push(value); } @@ -251,10 +251,10 @@ } function sumByRow(matrix) { - var sum = newArray(matrix.rows); + let sum = newArray(matrix.rows); - for (var i = 0; i < matrix.rows; ++i) { - for (var j = 0; j < matrix.columns; ++j) { + for (let i = 0; i < matrix.rows; ++i) { + for (let j = 0; j < matrix.columns; ++j) { sum[i] += matrix.get(i, j); } } @@ -262,10 +262,10 @@ return sum; } function sumByColumn(matrix) { - var sum = newArray(matrix.columns); + let sum = newArray(matrix.columns); - for (var i = 0; i < matrix.rows; ++i) { - for (var j = 0; j < matrix.columns; ++j) { + for (let i = 0; i < matrix.rows; ++i) { + for (let j = 0; j < matrix.columns; ++j) { sum[j] += matrix.get(i, j); } } @@ -273,10 +273,10 @@ return sum; } function sumAll(matrix) { - var v = 0; + let v = 0; - for (var i = 0; i < matrix.rows; i++) { - for (var j = 0; j < matrix.columns; j++) { + for (let i = 0; i < matrix.rows; i++) { + for (let j = 0; j < matrix.columns; j++) { v += matrix.get(i, j); } } @@ -284,10 +284,10 @@ return v; } function productByRow(matrix) { - var sum = newArray(matrix.rows, 1); + let sum = newArray(matrix.rows, 1); - for (var i = 0; i < matrix.rows; ++i) { - for (var j = 0; j < matrix.columns; ++j) { + for (let i = 0; i < matrix.rows; ++i) { + for (let j = 0; j < matrix.columns; ++j) { sum[i] *= matrix.get(i, j); } } @@ -295,10 +295,10 @@ return sum; } function productByColumn(matrix) { - var sum = newArray(matrix.columns, 1); + let sum = newArray(matrix.columns, 1); - for (var i = 0; i < matrix.rows; ++i) { - for (var j = 0; j < matrix.columns; ++j) { + for (let i = 0; i < matrix.rows; ++i) { + for (let j = 0; j < matrix.columns; ++j) { sum[j] *= matrix.get(i, j); } } @@ -306,10 +306,10 @@ return sum; } function productAll(matrix) { - var v = 1; + let v = 1; - for (var i = 0; i < matrix.rows; i++) { - for (var j = 0; j < matrix.columns; j++) { + for (let i = 0; i < matrix.rows; i++) { + for (let j = 0; j < matrix.columns; j++) { v *= matrix.get(i, j); } } @@ -321,12 +321,12 @@ const cols = matrix.columns; const variance = []; - for (var i = 0; i < rows; i++) { - var sum1 = 0; - var sum2 = 0; - var x = 0; + for (let i = 0; i < rows; i++) { + let sum1 = 0; + let sum2 = 0; + let x = 0; - for (var j = 0; j < cols; j++) { + for (let j = 0; j < cols; j++) { x = matrix.get(i, j) - mean[i]; sum1 += x; sum2 += x * x; @@ -346,12 +346,12 @@ const cols = matrix.columns; const variance = []; - for (var j = 0; j < cols; j++) { - var sum1 = 0; - var sum2 = 0; - var x = 0; + for (let j = 0; j < cols; j++) { + let sum1 = 0; + let sum2 = 0; + let x = 0; - for (var i = 0; i < rows; i++) { + for (let i = 0; i < rows; i++) { x = matrix.get(i, j) - mean[j]; sum1 += x; sum2 += x * x; @@ -370,12 +370,12 @@ const rows = matrix.rows; const cols = matrix.columns; const size = rows * cols; - var sum1 = 0; - var sum2 = 0; - var x = 0; + let sum1 = 0; + let sum2 = 0; + let x = 0; - for (var i = 0; i < rows; i++) { - for (var j = 0; j < cols; j++) { + for (let i = 0; i < rows; i++) { + for (let j = 0; j < cols; j++) { x = matrix.get(i, j) - mean; sum1 += x; sum2 += x * x; @@ -491,10 +491,10 @@ const maxJ = Math.min(columns, maxColumns); const result = []; - for (var i = 0; i < maxI; i++) { + for (let i = 0; i < maxI; i++) { let line = []; - for (var j = 0; j < maxJ; j++) { + for (let j = 0; j < maxJ; j++) { line.push(formatNumber(matrix.get(i, j))); } @@ -538,8 +538,8 @@ }; AbstractMatrix.prototype.addS = function addS(value) { - for (var i = 0; i < this.rows; i++) { - for (var j = 0; j < this.columns; j++) { + for (let i = 0; i < this.rows; i++) { + for (let j = 0; j < this.columns; j++) { this.set(i, j, this.get(i, j) + value); } } @@ -554,8 +554,8 @@ throw new RangeError('Matrices dimensions must be equal'); } - for (var i = 0; i < this.rows; i++) { - for (var j = 0; j < this.columns; j++) { + for (let i = 0; i < this.rows; i++) { + for (let j = 0; j < this.columns; j++) { this.set(i, j, this.get(i, j) + matrix.get(i, j)); } } @@ -564,7 +564,7 @@ }; AbstractMatrix.add = function add(matrix, value) { - var newMatrix = new Matrix(matrix); + const newMatrix = new Matrix(matrix); return newMatrix.add(value); }; @@ -574,8 +574,8 @@ }; AbstractMatrix.prototype.subS = function subS(value) { - for (var i = 0; i < this.rows; i++) { - for (var j = 0; j < this.columns; j++) { + for (let i = 0; i < this.rows; i++) { + for (let j = 0; j < this.columns; j++) { this.set(i, j, this.get(i, j) - value); } } @@ -590,8 +590,8 @@ throw new RangeError('Matrices dimensions must be equal'); } - for (var i = 0; i < this.rows; i++) { - for (var j = 0; j < this.columns; j++) { + for (let i = 0; i < this.rows; i++) { + for (let j = 0; j < this.columns; j++) { this.set(i, j, this.get(i, j) - matrix.get(i, j)); } } @@ -600,7 +600,7 @@ }; AbstractMatrix.sub = function sub(matrix, value) { - var newMatrix = new Matrix(matrix); + const newMatrix = new Matrix(matrix); return newMatrix.sub(value); }; @@ -615,8 +615,8 @@ }; AbstractMatrix.prototype.mulS = function mulS(value) { - for (var i = 0; i < this.rows; i++) { - for (var j = 0; j < this.columns; j++) { + for (let i = 0; i < this.rows; i++) { + for (let j = 0; j < this.columns; j++) { this.set(i, j, this.get(i, j) * value); } } @@ -631,8 +631,8 @@ throw new RangeError('Matrices dimensions must be equal'); } - for (var i = 0; i < this.rows; i++) { - for (var j = 0; j < this.columns; j++) { + for (let i = 0; i < this.rows; i++) { + for (let j = 0; j < this.columns; j++) { this.set(i, j, this.get(i, j) * matrix.get(i, j)); } } @@ -641,7 +641,7 @@ }; AbstractMatrix.mul = function mul(matrix, value) { - var newMatrix = new Matrix(matrix); + const newMatrix = new Matrix(matrix); return newMatrix.mul(value); }; @@ -656,8 +656,8 @@ }; AbstractMatrix.prototype.divS = function divS(value) { - for (var i = 0; i < this.rows; i++) { - for (var j = 0; j < this.columns; j++) { + for (let i = 0; i < this.rows; i++) { + for (let j = 0; j < this.columns; j++) { this.set(i, j, this.get(i, j) / value); } } @@ -672,8 +672,8 @@ throw new RangeError('Matrices dimensions must be equal'); } - for (var i = 0; i < this.rows; i++) { - for (var j = 0; j < this.columns; j++) { + for (let i = 0; i < this.rows; i++) { + for (let j = 0; j < this.columns; j++) { this.set(i, j, this.get(i, j) / matrix.get(i, j)); } } @@ -682,7 +682,7 @@ }; AbstractMatrix.div = function div(matrix, value) { - var newMatrix = new Matrix(matrix); + const newMatrix = new Matrix(matrix); return newMatrix.div(value); }; @@ -697,8 +697,8 @@ }; AbstractMatrix.prototype.modS = function modS(value) { - for (var i = 0; i < this.rows; i++) { - for (var j = 0; j < this.columns; j++) { + for (let i = 0; i < this.rows; i++) { + for (let j = 0; j < this.columns; j++) { this.set(i, j, this.get(i, j) % value); } } @@ -713,8 +713,8 @@ throw new RangeError('Matrices dimensions must be equal'); } - for (var i = 0; i < this.rows; i++) { - for (var j = 0; j < this.columns; j++) { + for (let i = 0; i < this.rows; i++) { + for (let j = 0; j < this.columns; j++) { this.set(i, j, this.get(i, j) % matrix.get(i, j)); } } @@ -723,7 +723,7 @@ }; AbstractMatrix.mod = function mod(matrix, value) { - var newMatrix = new Matrix(matrix); + const newMatrix = new Matrix(matrix); return newMatrix.mod(value); }; @@ -738,8 +738,8 @@ }; AbstractMatrix.prototype.andS = function andS(value) { - for (var i = 0; i < this.rows; i++) { - for (var j = 0; j < this.columns; j++) { + for (let i = 0; i < this.rows; i++) { + for (let j = 0; j < this.columns; j++) { this.set(i, j, this.get(i, j) & value); } } @@ -754,8 +754,8 @@ throw new RangeError('Matrices dimensions must be equal'); } - for (var i = 0; i < this.rows; i++) { - for (var j = 0; j < this.columns; j++) { + for (let i = 0; i < this.rows; i++) { + for (let j = 0; j < this.columns; j++) { this.set(i, j, this.get(i, j) & matrix.get(i, j)); } } @@ -764,7 +764,7 @@ }; AbstractMatrix.and = function and(matrix, value) { - var newMatrix = new Matrix(matrix); + const newMatrix = new Matrix(matrix); return newMatrix.and(value); }; @@ -774,8 +774,8 @@ }; AbstractMatrix.prototype.orS = function orS(value) { - for (var i = 0; i < this.rows; i++) { - for (var j = 0; j < this.columns; j++) { + for (let i = 0; i < this.rows; i++) { + for (let j = 0; j < this.columns; j++) { this.set(i, j, this.get(i, j) | value); } } @@ -790,8 +790,8 @@ throw new RangeError('Matrices dimensions must be equal'); } - for (var i = 0; i < this.rows; i++) { - for (var j = 0; j < this.columns; j++) { + for (let i = 0; i < this.rows; i++) { + for (let j = 0; j < this.columns; j++) { this.set(i, j, this.get(i, j) | matrix.get(i, j)); } } @@ -800,7 +800,7 @@ }; AbstractMatrix.or = function or(matrix, value) { - var newMatrix = new Matrix(matrix); + const newMatrix = new Matrix(matrix); return newMatrix.or(value); }; @@ -810,8 +810,8 @@ }; AbstractMatrix.prototype.xorS = function xorS(value) { - for (var i = 0; i < this.rows; i++) { - for (var j = 0; j < this.columns; j++) { + for (let i = 0; i < this.rows; i++) { + for (let j = 0; j < this.columns; j++) { this.set(i, j, this.get(i, j) ^ value); } } @@ -826,8 +826,8 @@ throw new RangeError('Matrices dimensions must be equal'); } - for (var i = 0; i < this.rows; i++) { - for (var j = 0; j < this.columns; j++) { + for (let i = 0; i < this.rows; i++) { + for (let j = 0; j < this.columns; j++) { this.set(i, j, this.get(i, j) ^ matrix.get(i, j)); } } @@ -836,7 +836,7 @@ }; AbstractMatrix.xor = function xor(matrix, value) { - var newMatrix = new Matrix(matrix); + const newMatrix = new Matrix(matrix); return newMatrix.xor(value); }; @@ -846,8 +846,8 @@ }; AbstractMatrix.prototype.leftShiftS = function leftShiftS(value) { - for (var i = 0; i < this.rows; i++) { - for (var j = 0; j < this.columns; j++) { + for (let i = 0; i < this.rows; i++) { + for (let j = 0; j < this.columns; j++) { this.set(i, j, this.get(i, j) << value); } } @@ -862,8 +862,8 @@ throw new RangeError('Matrices dimensions must be equal'); } - for (var i = 0; i < this.rows; i++) { - for (var j = 0; j < this.columns; j++) { + for (let i = 0; i < this.rows; i++) { + for (let j = 0; j < this.columns; j++) { this.set(i, j, this.get(i, j) << matrix.get(i, j)); } } @@ -872,7 +872,7 @@ }; AbstractMatrix.leftShift = function leftShift(matrix, value) { - var newMatrix = new Matrix(matrix); + const newMatrix = new Matrix(matrix); return newMatrix.leftShift(value); }; @@ -882,8 +882,8 @@ }; AbstractMatrix.prototype.signPropagatingRightShiftS = function signPropagatingRightShiftS(value) { - for (var i = 0; i < this.rows; i++) { - for (var j = 0; j < this.columns; j++) { + for (let i = 0; i < this.rows; i++) { + for (let j = 0; j < this.columns; j++) { this.set(i, j, this.get(i, j) >> value); } } @@ -898,8 +898,8 @@ throw new RangeError('Matrices dimensions must be equal'); } - for (var i = 0; i < this.rows; i++) { - for (var j = 0; j < this.columns; j++) { + for (let i = 0; i < this.rows; i++) { + for (let j = 0; j < this.columns; j++) { this.set(i, j, this.get(i, j) >> matrix.get(i, j)); } } @@ -908,7 +908,7 @@ }; AbstractMatrix.signPropagatingRightShift = function signPropagatingRightShift(matrix, value) { - var newMatrix = new Matrix(matrix); + const newMatrix = new Matrix(matrix); return newMatrix.signPropagatingRightShift(value); }; @@ -918,8 +918,8 @@ }; AbstractMatrix.prototype.rightShiftS = function rightShiftS(value) { - for (var i = 0; i < this.rows; i++) { - for (var j = 0; j < this.columns; j++) { + for (let i = 0; i < this.rows; i++) { + for (let j = 0; j < this.columns; j++) { this.set(i, j, this.get(i, j) >>> value); } } @@ -934,8 +934,8 @@ throw new RangeError('Matrices dimensions must be equal'); } - for (var i = 0; i < this.rows; i++) { - for (var j = 0; j < this.columns; j++) { + for (let i = 0; i < this.rows; i++) { + for (let j = 0; j < this.columns; j++) { this.set(i, j, this.get(i, j) >>> matrix.get(i, j)); } } @@ -944,7 +944,7 @@ }; AbstractMatrix.rightShift = function rightShift(matrix, value) { - var newMatrix = new Matrix(matrix); + const newMatrix = new Matrix(matrix); return newMatrix.rightShift(value); }; @@ -954,8 +954,8 @@ AbstractMatrix.zeroFillRightShift = AbstractMatrix.rightShift; AbstractMatrix.prototype.not = function not() { - for (var i = 0; i < this.rows; i++) { - for (var j = 0; j < this.columns; j++) { + for (let i = 0; i < this.rows; i++) { + for (let j = 0; j < this.columns; j++) { this.set(i, j, ~this.get(i, j)); } } @@ -964,13 +964,13 @@ }; AbstractMatrix.not = function not(matrix) { - var newMatrix = new Matrix(matrix); + const newMatrix = new Matrix(matrix); return newMatrix.not(); }; AbstractMatrix.prototype.abs = function abs() { - for (var i = 0; i < this.rows; i++) { - for (var j = 0; j < this.columns; j++) { + for (let i = 0; i < this.rows; i++) { + for (let j = 0; j < this.columns; j++) { this.set(i, j, Math.abs(this.get(i, j))); } } @@ -979,13 +979,13 @@ }; AbstractMatrix.abs = function abs(matrix) { - var newMatrix = new Matrix(matrix); + const newMatrix = new Matrix(matrix); return newMatrix.abs(); }; AbstractMatrix.prototype.acos = function acos() { - for (var i = 0; i < this.rows; i++) { - for (var j = 0; j < this.columns; j++) { + for (let i = 0; i < this.rows; i++) { + for (let j = 0; j < this.columns; j++) { this.set(i, j, Math.acos(this.get(i, j))); } } @@ -994,13 +994,13 @@ }; AbstractMatrix.acos = function acos(matrix) { - var newMatrix = new Matrix(matrix); + const newMatrix = new Matrix(matrix); return newMatrix.acos(); }; AbstractMatrix.prototype.acosh = function acosh() { - for (var i = 0; i < this.rows; i++) { - for (var j = 0; j < this.columns; j++) { + for (let i = 0; i < this.rows; i++) { + for (let j = 0; j < this.columns; j++) { this.set(i, j, Math.acosh(this.get(i, j))); } } @@ -1009,13 +1009,13 @@ }; AbstractMatrix.acosh = function acosh(matrix) { - var newMatrix = new Matrix(matrix); + const newMatrix = new Matrix(matrix); return newMatrix.acosh(); }; AbstractMatrix.prototype.asin = function asin() { - for (var i = 0; i < this.rows; i++) { - for (var j = 0; j < this.columns; j++) { + for (let i = 0; i < this.rows; i++) { + for (let j = 0; j < this.columns; j++) { this.set(i, j, Math.asin(this.get(i, j))); } } @@ -1024,13 +1024,13 @@ }; AbstractMatrix.asin = function asin(matrix) { - var newMatrix = new Matrix(matrix); + const newMatrix = new Matrix(matrix); return newMatrix.asin(); }; AbstractMatrix.prototype.asinh = function asinh() { - for (var i = 0; i < this.rows; i++) { - for (var j = 0; j < this.columns; j++) { + for (let i = 0; i < this.rows; i++) { + for (let j = 0; j < this.columns; j++) { this.set(i, j, Math.asinh(this.get(i, j))); } } @@ -1039,13 +1039,13 @@ }; AbstractMatrix.asinh = function asinh(matrix) { - var newMatrix = new Matrix(matrix); + const newMatrix = new Matrix(matrix); return newMatrix.asinh(); }; AbstractMatrix.prototype.atan = function atan() { - for (var i = 0; i < this.rows; i++) { - for (var j = 0; j < this.columns; j++) { + for (let i = 0; i < this.rows; i++) { + for (let j = 0; j < this.columns; j++) { this.set(i, j, Math.atan(this.get(i, j))); } } @@ -1054,13 +1054,13 @@ }; AbstractMatrix.atan = function atan(matrix) { - var newMatrix = new Matrix(matrix); + const newMatrix = new Matrix(matrix); return newMatrix.atan(); }; AbstractMatrix.prototype.atanh = function atanh() { - for (var i = 0; i < this.rows; i++) { - for (var j = 0; j < this.columns; j++) { + for (let i = 0; i < this.rows; i++) { + for (let j = 0; j < this.columns; j++) { this.set(i, j, Math.atanh(this.get(i, j))); } } @@ -1069,13 +1069,13 @@ }; AbstractMatrix.atanh = function atanh(matrix) { - var newMatrix = new Matrix(matrix); + const newMatrix = new Matrix(matrix); return newMatrix.atanh(); }; AbstractMatrix.prototype.cbrt = function cbrt() { - for (var i = 0; i < this.rows; i++) { - for (var j = 0; j < this.columns; j++) { + for (let i = 0; i < this.rows; i++) { + for (let j = 0; j < this.columns; j++) { this.set(i, j, Math.cbrt(this.get(i, j))); } } @@ -1084,13 +1084,13 @@ }; AbstractMatrix.cbrt = function cbrt(matrix) { - var newMatrix = new Matrix(matrix); + const newMatrix = new Matrix(matrix); return newMatrix.cbrt(); }; AbstractMatrix.prototype.ceil = function ceil() { - for (var i = 0; i < this.rows; i++) { - for (var j = 0; j < this.columns; j++) { + for (let i = 0; i < this.rows; i++) { + for (let j = 0; j < this.columns; j++) { this.set(i, j, Math.ceil(this.get(i, j))); } } @@ -1099,13 +1099,13 @@ }; AbstractMatrix.ceil = function ceil(matrix) { - var newMatrix = new Matrix(matrix); + const newMatrix = new Matrix(matrix); return newMatrix.ceil(); }; AbstractMatrix.prototype.clz32 = function clz32() { - for (var i = 0; i < this.rows; i++) { - for (var j = 0; j < this.columns; j++) { + for (let i = 0; i < this.rows; i++) { + for (let j = 0; j < this.columns; j++) { this.set(i, j, Math.clz32(this.get(i, j))); } } @@ -1114,13 +1114,13 @@ }; AbstractMatrix.clz32 = function clz32(matrix) { - var newMatrix = new Matrix(matrix); + const newMatrix = new Matrix(matrix); return newMatrix.clz32(); }; AbstractMatrix.prototype.cos = function cos() { - for (var i = 0; i < this.rows; i++) { - for (var j = 0; j < this.columns; j++) { + for (let i = 0; i < this.rows; i++) { + for (let j = 0; j < this.columns; j++) { this.set(i, j, Math.cos(this.get(i, j))); } } @@ -1129,13 +1129,13 @@ }; AbstractMatrix.cos = function cos(matrix) { - var newMatrix = new Matrix(matrix); + const newMatrix = new Matrix(matrix); return newMatrix.cos(); }; AbstractMatrix.prototype.cosh = function cosh() { - for (var i = 0; i < this.rows; i++) { - for (var j = 0; j < this.columns; j++) { + for (let i = 0; i < this.rows; i++) { + for (let j = 0; j < this.columns; j++) { this.set(i, j, Math.cosh(this.get(i, j))); } } @@ -1144,13 +1144,13 @@ }; AbstractMatrix.cosh = function cosh(matrix) { - var newMatrix = new Matrix(matrix); + const newMatrix = new Matrix(matrix); return newMatrix.cosh(); }; AbstractMatrix.prototype.exp = function exp() { - for (var i = 0; i < this.rows; i++) { - for (var j = 0; j < this.columns; j++) { + for (let i = 0; i < this.rows; i++) { + for (let j = 0; j < this.columns; j++) { this.set(i, j, Math.exp(this.get(i, j))); } } @@ -1159,13 +1159,13 @@ }; AbstractMatrix.exp = function exp(matrix) { - var newMatrix = new Matrix(matrix); + const newMatrix = new Matrix(matrix); return newMatrix.exp(); }; AbstractMatrix.prototype.expm1 = function expm1() { - for (var i = 0; i < this.rows; i++) { - for (var j = 0; j < this.columns; j++) { + for (let i = 0; i < this.rows; i++) { + for (let j = 0; j < this.columns; j++) { this.set(i, j, Math.expm1(this.get(i, j))); } } @@ -1174,13 +1174,13 @@ }; AbstractMatrix.expm1 = function expm1(matrix) { - var newMatrix = new Matrix(matrix); + const newMatrix = new Matrix(matrix); return newMatrix.expm1(); }; AbstractMatrix.prototype.floor = function floor() { - for (var i = 0; i < this.rows; i++) { - for (var j = 0; j < this.columns; j++) { + for (let i = 0; i < this.rows; i++) { + for (let j = 0; j < this.columns; j++) { this.set(i, j, Math.floor(this.get(i, j))); } } @@ -1189,13 +1189,13 @@ }; AbstractMatrix.floor = function floor(matrix) { - var newMatrix = new Matrix(matrix); + const newMatrix = new Matrix(matrix); return newMatrix.floor(); }; AbstractMatrix.prototype.fround = function fround() { - for (var i = 0; i < this.rows; i++) { - for (var j = 0; j < this.columns; j++) { + for (let i = 0; i < this.rows; i++) { + for (let j = 0; j < this.columns; j++) { this.set(i, j, Math.fround(this.get(i, j))); } } @@ -1204,13 +1204,13 @@ }; AbstractMatrix.fround = function fround(matrix) { - var newMatrix = new Matrix(matrix); + const newMatrix = new Matrix(matrix); return newMatrix.fround(); }; AbstractMatrix.prototype.log = function log() { - for (var i = 0; i < this.rows; i++) { - for (var j = 0; j < this.columns; j++) { + for (let i = 0; i < this.rows; i++) { + for (let j = 0; j < this.columns; j++) { this.set(i, j, Math.log(this.get(i, j))); } } @@ -1219,13 +1219,13 @@ }; AbstractMatrix.log = function log(matrix) { - var newMatrix = new Matrix(matrix); + const newMatrix = new Matrix(matrix); return newMatrix.log(); }; AbstractMatrix.prototype.log1p = function log1p() { - for (var i = 0; i < this.rows; i++) { - for (var j = 0; j < this.columns; j++) { + for (let i = 0; i < this.rows; i++) { + for (let j = 0; j < this.columns; j++) { this.set(i, j, Math.log1p(this.get(i, j))); } } @@ -1234,13 +1234,13 @@ }; AbstractMatrix.log1p = function log1p(matrix) { - var newMatrix = new Matrix(matrix); + const newMatrix = new Matrix(matrix); return newMatrix.log1p(); }; AbstractMatrix.prototype.log10 = function log10() { - for (var i = 0; i < this.rows; i++) { - for (var j = 0; j < this.columns; j++) { + for (let i = 0; i < this.rows; i++) { + for (let j = 0; j < this.columns; j++) { this.set(i, j, Math.log10(this.get(i, j))); } } @@ -1249,13 +1249,13 @@ }; AbstractMatrix.log10 = function log10(matrix) { - var newMatrix = new Matrix(matrix); + const newMatrix = new Matrix(matrix); return newMatrix.log10(); }; AbstractMatrix.prototype.log2 = function log2() { - for (var i = 0; i < this.rows; i++) { - for (var j = 0; j < this.columns; j++) { + for (let i = 0; i < this.rows; i++) { + for (let j = 0; j < this.columns; j++) { this.set(i, j, Math.log2(this.get(i, j))); } } @@ -1264,13 +1264,13 @@ }; AbstractMatrix.log2 = function log2(matrix) { - var newMatrix = new Matrix(matrix); + const newMatrix = new Matrix(matrix); return newMatrix.log2(); }; AbstractMatrix.prototype.round = function round() { - for (var i = 0; i < this.rows; i++) { - for (var j = 0; j < this.columns; j++) { + for (let i = 0; i < this.rows; i++) { + for (let j = 0; j < this.columns; j++) { this.set(i, j, Math.round(this.get(i, j))); } } @@ -1279,13 +1279,13 @@ }; AbstractMatrix.round = function round(matrix) { - var newMatrix = new Matrix(matrix); + const newMatrix = new Matrix(matrix); return newMatrix.round(); }; AbstractMatrix.prototype.sign = function sign() { - for (var i = 0; i < this.rows; i++) { - for (var j = 0; j < this.columns; j++) { + for (let i = 0; i < this.rows; i++) { + for (let j = 0; j < this.columns; j++) { this.set(i, j, Math.sign(this.get(i, j))); } } @@ -1294,13 +1294,13 @@ }; AbstractMatrix.sign = function sign(matrix) { - var newMatrix = new Matrix(matrix); + const newMatrix = new Matrix(matrix); return newMatrix.sign(); }; AbstractMatrix.prototype.sin = function sin() { - for (var i = 0; i < this.rows; i++) { - for (var j = 0; j < this.columns; j++) { + for (let i = 0; i < this.rows; i++) { + for (let j = 0; j < this.columns; j++) { this.set(i, j, Math.sin(this.get(i, j))); } } @@ -1309,13 +1309,13 @@ }; AbstractMatrix.sin = function sin(matrix) { - var newMatrix = new Matrix(matrix); + const newMatrix = new Matrix(matrix); return newMatrix.sin(); }; AbstractMatrix.prototype.sinh = function sinh() { - for (var i = 0; i < this.rows; i++) { - for (var j = 0; j < this.columns; j++) { + for (let i = 0; i < this.rows; i++) { + for (let j = 0; j < this.columns; j++) { this.set(i, j, Math.sinh(this.get(i, j))); } } @@ -1324,13 +1324,13 @@ }; AbstractMatrix.sinh = function sinh(matrix) { - var newMatrix = new Matrix(matrix); + const newMatrix = new Matrix(matrix); return newMatrix.sinh(); }; AbstractMatrix.prototype.sqrt = function sqrt() { - for (var i = 0; i < this.rows; i++) { - for (var j = 0; j < this.columns; j++) { + for (let i = 0; i < this.rows; i++) { + for (let j = 0; j < this.columns; j++) { this.set(i, j, Math.sqrt(this.get(i, j))); } } @@ -1339,13 +1339,13 @@ }; AbstractMatrix.sqrt = function sqrt(matrix) { - var newMatrix = new Matrix(matrix); + const newMatrix = new Matrix(matrix); return newMatrix.sqrt(); }; AbstractMatrix.prototype.tan = function tan() { - for (var i = 0; i < this.rows; i++) { - for (var j = 0; j < this.columns; j++) { + for (let i = 0; i < this.rows; i++) { + for (let j = 0; j < this.columns; j++) { this.set(i, j, Math.tan(this.get(i, j))); } } @@ -1354,13 +1354,13 @@ }; AbstractMatrix.tan = function tan(matrix) { - var newMatrix = new Matrix(matrix); + const newMatrix = new Matrix(matrix); return newMatrix.tan(); }; AbstractMatrix.prototype.tanh = function tanh() { - for (var i = 0; i < this.rows; i++) { - for (var j = 0; j < this.columns; j++) { + for (let i = 0; i < this.rows; i++) { + for (let j = 0; j < this.columns; j++) { this.set(i, j, Math.tanh(this.get(i, j))); } } @@ -1369,13 +1369,13 @@ }; AbstractMatrix.tanh = function tanh(matrix) { - var newMatrix = new Matrix(matrix); + const newMatrix = new Matrix(matrix); return newMatrix.tanh(); }; AbstractMatrix.prototype.trunc = function trunc() { - for (var i = 0; i < this.rows; i++) { - for (var j = 0; j < this.columns; j++) { + for (let i = 0; i < this.rows; i++) { + for (let j = 0; j < this.columns; j++) { this.set(i, j, Math.trunc(this.get(i, j))); } } @@ -1384,12 +1384,12 @@ }; AbstractMatrix.trunc = function trunc(matrix) { - var newMatrix = new Matrix(matrix); + const newMatrix = new Matrix(matrix); return newMatrix.trunc(); }; AbstractMatrix.pow = function pow(matrix, arg0) { - var newMatrix = new Matrix(matrix); + const newMatrix = new Matrix(matrix); return newMatrix.pow(arg0); }; @@ -1399,8 +1399,8 @@ }; AbstractMatrix.prototype.powS = function powS(value) { - for (var i = 0; i < this.rows; i++) { - for (var j = 0; j < this.columns; j++) { + for (let i = 0; i < this.rows; i++) { + for (let j = 0; j < this.columns; j++) { this.set(i, j, Math.pow(this.get(i, j), value)); } } @@ -1415,8 +1415,8 @@ throw new RangeError('Matrices dimensions must be equal'); } - for (var i = 0; i < this.rows; i++) { - for (var j = 0; j < this.columns; j++) { + for (let i = 0; i < this.rows; i++) { + for (let j = 0; j < this.columns; j++) { this.set(i, j, Math.pow(this.get(i, j), matrix.get(i, j))); } } @@ -1427,16 +1427,16 @@ class AbstractMatrix { static from1DArray(newRows, newColumns, newData) { - var length = newRows * newColumns; + let length = newRows * newColumns; if (length !== newData.length) { throw new RangeError('data length does not match given dimensions'); } - var newMatrix = new Matrix(newRows, newColumns); + let newMatrix = new Matrix(newRows, newColumns); - for (var row = 0; row < newRows; row++) { - for (var column = 0; column < newColumns; column++) { + for (let row = 0; row < newRows; row++) { + for (let column = 0; column < newColumns; column++) { newMatrix.set(row, column, newData[row * newColumns + column]); } } @@ -1445,9 +1445,9 @@ } static rowVector(newData) { - var vector = new Matrix(1, newData.length); + let vector = new Matrix(1, newData.length); - for (var i = 0; i < newData.length; i++) { + for (let i = 0; i < newData.length; i++) { vector.set(0, i, newData[i]); } @@ -1455,9 +1455,9 @@ } static columnVector(newData) { - var vector = new Matrix(newData.length, 1); + let vector = new Matrix(newData.length, 1); - for (var i = 0; i < newData.length; i++) { + for (let i = 0; i < newData.length; i++) { vector.set(i, 0, newData[i]); } @@ -1482,10 +1482,10 @@ const { random = Math.random } = options; - var matrix = new Matrix(rows, columns); + let matrix = new Matrix(rows, columns); - for (var i = 0; i < rows; i++) { - for (var j = 0; j < columns; j++) { + for (let i = 0; i < rows; i++) { + for (let j = 0; j < columns; j++) { matrix.set(i, j, random()); } } @@ -1508,12 +1508,12 @@ if (!Number.isInteger(min)) throw new TypeError('min must be an integer'); if (!Number.isInteger(max)) throw new TypeError('max must be an integer'); if (min >= max) throw new RangeError('min must be smaller than max'); - var interval = max - min; - var matrix = new Matrix(rows, columns); + let interval = max - min; + let matrix = new Matrix(rows, columns); - for (var i = 0; i < rows; i++) { - for (var j = 0; j < columns; j++) { - var value = min + Math.round(random() * interval); + for (let i = 0; i < rows; i++) { + for (let j = 0; j < columns; j++) { + let value = min + Math.round(random() * interval); matrix.set(i, j, value); } } @@ -1524,10 +1524,10 @@ static eye(rows, columns, value) { if (columns === undefined) columns = rows; if (value === undefined) value = 1; - var min = Math.min(rows, columns); - var matrix = this.zeros(rows, columns); + let min = Math.min(rows, columns); + let matrix = this.zeros(rows, columns); - for (var i = 0; i < min; i++) { + for (let i = 0; i < min; i++) { matrix.set(i, i, value); } @@ -1535,13 +1535,13 @@ } static diag(data, rows, columns) { - var l = data.length; + let l = data.length; if (rows === undefined) rows = l; if (columns === undefined) columns = rows; - var min = Math.min(l, rows, columns); - var matrix = this.zeros(rows, columns); + let min = Math.min(l, rows, columns); + let matrix = this.zeros(rows, columns); - for (var i = 0; i < min; i++) { + for (let i = 0; i < min; i++) { matrix.set(i, i, data[i]); } @@ -1551,12 +1551,12 @@ static min(matrix1, matrix2) { matrix1 = this.checkMatrix(matrix1); matrix2 = this.checkMatrix(matrix2); - var rows = matrix1.rows; - var columns = matrix1.columns; - var result = new Matrix(rows, columns); + let rows = matrix1.rows; + let columns = matrix1.columns; + let result = new Matrix(rows, columns); - for (var i = 0; i < rows; i++) { - for (var j = 0; j < columns; j++) { + for (let i = 0; i < rows; i++) { + for (let j = 0; j < columns; j++) { result.set(i, j, Math.min(matrix1.get(i, j), matrix2.get(i, j))); } } @@ -1567,12 +1567,12 @@ static max(matrix1, matrix2) { matrix1 = this.checkMatrix(matrix1); matrix2 = this.checkMatrix(matrix2); - var rows = matrix1.rows; - var columns = matrix1.columns; - var result = new this(rows, columns); + let rows = matrix1.rows; + let columns = matrix1.columns; + let result = new this(rows, columns); - for (var i = 0; i < rows; i++) { - for (var j = 0; j < columns; j++) { + for (let i = 0; i < rows; i++) { + for (let j = 0; j < columns; j++) { result.set(i, j, Math.max(matrix1.get(i, j), matrix2.get(i, j))); } } @@ -1597,8 +1597,8 @@ throw new TypeError('callback must be a function'); } - for (var i = 0; i < this.rows; i++) { - for (var j = 0; j < this.columns; j++) { + for (let i = 0; i < this.rows; i++) { + for (let j = 0; j < this.columns; j++) { callback.call(this, i, j); } } @@ -1607,10 +1607,10 @@ } to1DArray() { - var array = []; + let array = []; - for (var i = 0; i < this.rows; i++) { - for (var j = 0; j < this.columns; j++) { + for (let i = 0; i < this.rows; i++) { + for (let j = 0; j < this.columns; j++) { array.push(this.get(i, j)); } } @@ -1619,12 +1619,12 @@ } to2DArray() { - var copy = []; + let copy = []; - for (var i = 0; i < this.rows; i++) { + for (let i = 0; i < this.rows; i++) { copy.push([]); - for (var j = 0; j < this.columns; j++) { + for (let j = 0; j < this.columns; j++) { copy[i].push(this.get(i, j)); } } @@ -1654,8 +1654,8 @@ isSymmetric() { if (this.isSquare()) { - for (var i = 0; i < this.rows; i++) { - for (var j = 0; j <= i; j++) { + for (let i = 0; i < this.rows; i++) { + for (let j = 0; j <= i; j++) { if (this.get(i, j) !== this.get(j, i)) { return false; } @@ -1838,10 +1838,10 @@ throw new TypeError('columns must be a positive integer'); } - var matrix = new Matrix(this.rows * rows, this.columns * columns); + let matrix = new Matrix(this.rows * rows, this.columns * columns); - for (var i = 0; i < rows; i++) { - for (var j = 0; j < columns; j++) { + for (let i = 0; i < rows; i++) { + for (let j = 0; j < columns; j++) { matrix.setSubMatrix(this, this.rows * i, this.columns * j); } } @@ -1850,8 +1850,8 @@ } fill(value) { - for (var i = 0; i < this.rows; i++) { - for (var j = 0; j < this.columns; j++) { + for (let i = 0; i < this.rows; i++) { + for (let j = 0; j < this.columns; j++) { this.set(i, j, value); } } @@ -1865,9 +1865,9 @@ getRow(index) { checkRowIndex(this, index); - var row = []; + let row = []; - for (var i = 0; i < this.columns; i++) { + for (let i = 0; i < this.columns; i++) { row.push(this.get(index, i)); } @@ -1882,7 +1882,7 @@ checkRowIndex(this, index); array = checkRowVector(this, array); - for (var i = 0; i < this.columns; i++) { + for (let i = 0; i < this.columns; i++) { this.set(index, i, array[i]); } @@ -1893,8 +1893,8 @@ checkRowIndex(this, row1); checkRowIndex(this, row2); - for (var i = 0; i < this.columns; i++) { - var temp = this.get(row1, i); + for (let i = 0; i < this.columns; i++) { + let temp = this.get(row1, i); this.set(row1, i, this.get(row2, i)); this.set(row2, i, temp); } @@ -1904,9 +1904,9 @@ getColumn(index) { checkColumnIndex(this, index); - var column = []; + let column = []; - for (var i = 0; i < this.rows; i++) { + for (let i = 0; i < this.rows; i++) { column.push(this.get(i, index)); } @@ -1921,7 +1921,7 @@ checkColumnIndex(this, index); array = checkColumnVector(this, array); - for (var i = 0; i < this.rows; i++) { + for (let i = 0; i < this.rows; i++) { this.set(i, index, array[i]); } @@ -1932,8 +1932,8 @@ checkColumnIndex(this, column1); checkColumnIndex(this, column2); - for (var i = 0; i < this.rows; i++) { - var temp = this.get(i, column1); + for (let i = 0; i < this.rows; i++) { + let temp = this.get(i, column1); this.set(i, column1, this.get(i, column2)); this.set(i, column2, temp); } @@ -1944,8 +1944,8 @@ addRowVector(vector) { vector = checkRowVector(this, vector); - for (var i = 0; i < this.rows; i++) { - for (var j = 0; j < this.columns; j++) { + for (let i = 0; i < this.rows; i++) { + for (let j = 0; j < this.columns; j++) { this.set(i, j, this.get(i, j) + vector[j]); } } @@ -1956,8 +1956,8 @@ subRowVector(vector) { vector = checkRowVector(this, vector); - for (var i = 0; i < this.rows; i++) { - for (var j = 0; j < this.columns; j++) { + for (let i = 0; i < this.rows; i++) { + for (let j = 0; j < this.columns; j++) { this.set(i, j, this.get(i, j) - vector[j]); } } @@ -1968,8 +1968,8 @@ mulRowVector(vector) { vector = checkRowVector(this, vector); - for (var i = 0; i < this.rows; i++) { - for (var j = 0; j < this.columns; j++) { + for (let i = 0; i < this.rows; i++) { + for (let j = 0; j < this.columns; j++) { this.set(i, j, this.get(i, j) * vector[j]); } } @@ -1980,8 +1980,8 @@ divRowVector(vector) { vector = checkRowVector(this, vector); - for (var i = 0; i < this.rows; i++) { - for (var j = 0; j < this.columns; j++) { + for (let i = 0; i < this.rows; i++) { + for (let j = 0; j < this.columns; j++) { this.set(i, j, this.get(i, j) / vector[j]); } } @@ -1992,8 +1992,8 @@ addColumnVector(vector) { vector = checkColumnVector(this, vector); - for (var i = 0; i < this.rows; i++) { - for (var j = 0; j < this.columns; j++) { + for (let i = 0; i < this.rows; i++) { + for (let j = 0; j < this.columns; j++) { this.set(i, j, this.get(i, j) + vector[i]); } } @@ -2004,8 +2004,8 @@ subColumnVector(vector) { vector = checkColumnVector(this, vector); - for (var i = 0; i < this.rows; i++) { - for (var j = 0; j < this.columns; j++) { + for (let i = 0; i < this.rows; i++) { + for (let j = 0; j < this.columns; j++) { this.set(i, j, this.get(i, j) - vector[i]); } } @@ -2016,8 +2016,8 @@ mulColumnVector(vector) { vector = checkColumnVector(this, vector); - for (var i = 0; i < this.rows; i++) { - for (var j = 0; j < this.columns; j++) { + for (let i = 0; i < this.rows; i++) { + for (let j = 0; j < this.columns; j++) { this.set(i, j, this.get(i, j) * vector[i]); } } @@ -2028,8 +2028,8 @@ divColumnVector(vector) { vector = checkColumnVector(this, vector); - for (var i = 0; i < this.rows; i++) { - for (var j = 0; j < this.columns; j++) { + for (let i = 0; i < this.rows; i++) { + for (let j = 0; j < this.columns; j++) { this.set(i, j, this.get(i, j) / vector[i]); } } @@ -2040,7 +2040,7 @@ mulRow(index, value) { checkRowIndex(this, index); - for (var i = 0; i < this.columns; i++) { + for (let i = 0; i < this.columns; i++) { this.set(index, i, this.get(index, i) * value); } @@ -2050,7 +2050,7 @@ mulColumn(index, value) { checkColumnIndex(this, index); - for (var i = 0; i < this.rows; i++) { + for (let i = 0; i < this.rows; i++) { this.set(i, index, this.get(i, index) * value); } @@ -2058,10 +2058,10 @@ } max() { - var v = this.get(0, 0); + let v = this.get(0, 0); - for (var i = 0; i < this.rows; i++) { - for (var j = 0; j < this.columns; j++) { + for (let i = 0; i < this.rows; i++) { + for (let j = 0; j < this.columns; j++) { if (this.get(i, j) > v) { v = this.get(i, j); } @@ -2072,11 +2072,11 @@ } maxIndex() { - var v = this.get(0, 0); - var idx = [0, 0]; + let v = this.get(0, 0); + let idx = [0, 0]; - for (var i = 0; i < this.rows; i++) { - for (var j = 0; j < this.columns; j++) { + for (let i = 0; i < this.rows; i++) { + for (let j = 0; j < this.columns; j++) { if (this.get(i, j) > v) { v = this.get(i, j); idx[0] = i; @@ -2089,10 +2089,10 @@ } min() { - var v = this.get(0, 0); + let v = this.get(0, 0); - for (var i = 0; i < this.rows; i++) { - for (var j = 0; j < this.columns; j++) { + for (let i = 0; i < this.rows; i++) { + for (let j = 0; j < this.columns; j++) { if (this.get(i, j) < v) { v = this.get(i, j); } @@ -2103,11 +2103,11 @@ } minIndex() { - var v = this.get(0, 0); - var idx = [0, 0]; + let v = this.get(0, 0); + let idx = [0, 0]; - for (var i = 0; i < this.rows; i++) { - for (var j = 0; j < this.columns; j++) { + for (let i = 0; i < this.rows; i++) { + for (let j = 0; j < this.columns; j++) { if (this.get(i, j) < v) { v = this.get(i, j); idx[0] = i; @@ -2121,9 +2121,9 @@ maxRow(row) { checkRowIndex(this, row); - var v = this.get(row, 0); + let v = this.get(row, 0); - for (var i = 1; i < this.columns; i++) { + for (let i = 1; i < this.columns; i++) { if (this.get(row, i) > v) { v = this.get(row, i); } @@ -2134,10 +2134,10 @@ maxRowIndex(row) { checkRowIndex(this, row); - var v = this.get(row, 0); - var idx = [row, 0]; + let v = this.get(row, 0); + let idx = [row, 0]; - for (var i = 1; i < this.columns; i++) { + for (let i = 1; i < this.columns; i++) { if (this.get(row, i) > v) { v = this.get(row, i); idx[1] = i; @@ -2149,9 +2149,9 @@ minRow(row) { checkRowIndex(this, row); - var v = this.get(row, 0); + let v = this.get(row, 0); - for (var i = 1; i < this.columns; i++) { + for (let i = 1; i < this.columns; i++) { if (this.get(row, i) < v) { v = this.get(row, i); } @@ -2162,10 +2162,10 @@ minRowIndex(row) { checkRowIndex(this, row); - var v = this.get(row, 0); - var idx = [row, 0]; + let v = this.get(row, 0); + let idx = [row, 0]; - for (var i = 1; i < this.columns; i++) { + for (let i = 1; i < this.columns; i++) { if (this.get(row, i) < v) { v = this.get(row, i); idx[1] = i; @@ -2177,9 +2177,9 @@ maxColumn(column) { checkColumnIndex(this, column); - var v = this.get(0, column); + let v = this.get(0, column); - for (var i = 1; i < this.rows; i++) { + for (let i = 1; i < this.rows; i++) { if (this.get(i, column) > v) { v = this.get(i, column); } @@ -2190,10 +2190,10 @@ maxColumnIndex(column) { checkColumnIndex(this, column); - var v = this.get(0, column); - var idx = [0, column]; + let v = this.get(0, column); + let idx = [0, column]; - for (var i = 1; i < this.rows; i++) { + for (let i = 1; i < this.rows; i++) { if (this.get(i, column) > v) { v = this.get(i, column); idx[0] = i; @@ -2205,9 +2205,9 @@ minColumn(column) { checkColumnIndex(this, column); - var v = this.get(0, column); + let v = this.get(0, column); - for (var i = 1; i < this.rows; i++) { + for (let i = 1; i < this.rows; i++) { if (this.get(i, column) < v) { v = this.get(i, column); } @@ -2218,10 +2218,10 @@ minColumnIndex(column) { checkColumnIndex(this, column); - var v = this.get(0, column); - var idx = [0, column]; + let v = this.get(0, column); + let idx = [0, column]; - for (var i = 1; i < this.rows; i++) { + for (let i = 1; i < this.rows; i++) { if (this.get(i, column) < v) { v = this.get(i, column); idx[0] = i; @@ -2232,10 +2232,10 @@ } diag() { - var min = Math.min(this.rows, this.columns); - var diag = []; + let min = Math.min(this.rows, this.columns); + let diag = []; - for (var i = 0; i < min; i++) { + for (let i = 0; i < min; i++) { diag.push(this.get(i, i)); } @@ -2244,13 +2244,13 @@ norm() { let type = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'frobenius'; - var result = 0; + let result = 0; if (type === 'max') { return this.max(); } else if (type === 'frobenius') { - for (var i = 0; i < this.rows; i++) { - for (var j = 0; j < this.columns; j++) { + for (let i = 0; i < this.rows; i++) { + for (let j = 0; j < this.columns; j++) { result = result + this.get(i, j) * this.get(i, j); } } @@ -2262,10 +2262,10 @@ } cumulativeSum() { - var sum = 0; + let sum = 0; - for (var i = 0; i < this.rows; i++) { - for (var j = 0; j < this.columns; j++) { + for (let i = 0; i < this.rows; i++) { + for (let j = 0; j < this.columns; j++) { sum += this.get(i, j); this.set(i, j, sum); } @@ -2276,15 +2276,15 @@ dot(vector2) { if (AbstractMatrix.isMatrix(vector2)) vector2 = vector2.to1DArray(); - var vector1 = this.to1DArray(); + let vector1 = this.to1DArray(); if (vector1.length !== vector2.length) { throw new RangeError('vectors do not have the same size'); } - var dot = 0; + let dot = 0; - for (var i = 0; i < vector1.length; i++) { + for (let i = 0; i < vector1.length; i++) { dot += vector1[i] * vector2[i]; } @@ -2293,21 +2293,21 @@ mmul(other) { other = Matrix.checkMatrix(other); - var m = this.rows; - var n = this.columns; - var p = other.columns; - var result = new Matrix(m, p); - var Bcolj = new Float64Array(n); - - for (var j = 0; j < p; j++) { - for (var k = 0; k < n; k++) { + let m = this.rows; + let n = this.columns; + let p = other.columns; + let result = new Matrix(m, p); + let Bcolj = new Float64Array(n); + + for (let j = 0; j < p; j++) { + for (let k = 0; k < n; k++) { Bcolj[k] = other.get(k, j); } - for (var i = 0; i < m; i++) { - var s = 0; + for (let i = 0; i < m; i++) { + let s = 0; - for (k = 0; k < n; k++) { + for (let k = 0; k < n; k++) { s += this.get(i, k) * Bcolj[k]; } @@ -2320,7 +2320,7 @@ strassen2x2(other) { other = Matrix.checkMatrix(other); - var result = new Matrix(2, 2); + let result = new Matrix(2, 2); const a11 = this.get(0, 0); const b11 = other.get(0, 0); const a12 = this.get(0, 1); @@ -2351,7 +2351,7 @@ strassen3x3(other) { other = Matrix.checkMatrix(other); - var result = new Matrix(3, 3); + let result = new Matrix(3, 3); const a00 = this.get(0, 0); const a01 = this.get(0, 1); const a02 = this.get(0, 2); @@ -2416,11 +2416,11 @@ mmulStrassen(y) { y = Matrix.checkMatrix(y); - var x = this.clone(); - var r1 = x.rows; - var c1 = x.columns; - var r2 = y.rows; - var c2 = y.columns; + let x = this.clone(); + let r1 = x.rows; + let c1 = x.columns; + let r2 = y.rows; + let c2 = y.columns; if (c1 !== r2) { // eslint-disable-next-line no-console @@ -2430,13 +2430,13 @@ function embed(mat, rows, cols) { - var r = mat.rows; - var c = mat.columns; + let r = mat.rows; + let c = mat.columns; if (r === rows && c === cols) { return mat; } else { - var resultat = AbstractMatrix.zeros(rows, cols); + let resultat = AbstractMatrix.zeros(rows, cols); resultat = resultat.setSubMatrix(mat, 0, 0); return resultat; } @@ -2445,8 +2445,8 @@ // this algorithm can be implemented with matrices of different sizes. - var r = Math.max(r1, r2); - var c = Math.max(c1, c2); + let r = Math.max(r1, r2); + let c = Math.max(c1, c2); x = embed(x, r, c); y = embed(y, r, c); // Our recursive multiplication function. @@ -2468,36 +2468,36 @@ b = embed(b, rows, cols + 1); } - var halfRows = parseInt(a.rows / 2, 10); - var halfCols = parseInt(a.columns / 2, 10); // Subdivide input matrices. + let halfRows = parseInt(a.rows / 2, 10); + let halfCols = parseInt(a.columns / 2, 10); // Subdivide input matrices. - var a11 = a.subMatrix(0, halfRows - 1, 0, halfCols - 1); - var b11 = b.subMatrix(0, halfRows - 1, 0, halfCols - 1); - var a12 = a.subMatrix(0, halfRows - 1, halfCols, a.columns - 1); - var b12 = b.subMatrix(0, halfRows - 1, halfCols, b.columns - 1); - var a21 = a.subMatrix(halfRows, a.rows - 1, 0, halfCols - 1); - var b21 = b.subMatrix(halfRows, b.rows - 1, 0, halfCols - 1); - var a22 = a.subMatrix(halfRows, a.rows - 1, halfCols, a.columns - 1); - var b22 = b.subMatrix(halfRows, b.rows - 1, halfCols, b.columns - 1); // Compute intermediate values. + let a11 = a.subMatrix(0, halfRows - 1, 0, halfCols - 1); + let b11 = b.subMatrix(0, halfRows - 1, 0, halfCols - 1); + let a12 = a.subMatrix(0, halfRows - 1, halfCols, a.columns - 1); + let b12 = b.subMatrix(0, halfRows - 1, halfCols, b.columns - 1); + let a21 = a.subMatrix(halfRows, a.rows - 1, 0, halfCols - 1); + let b21 = b.subMatrix(halfRows, b.rows - 1, 0, halfCols - 1); + let a22 = a.subMatrix(halfRows, a.rows - 1, halfCols, a.columns - 1); + let b22 = b.subMatrix(halfRows, b.rows - 1, halfCols, b.columns - 1); // Compute intermediate values. - var m1 = blockMult(AbstractMatrix.add(a11, a22), AbstractMatrix.add(b11, b22), halfRows, halfCols); - var m2 = blockMult(AbstractMatrix.add(a21, a22), b11, halfRows, halfCols); - var m3 = blockMult(a11, AbstractMatrix.sub(b12, b22), halfRows, halfCols); - var m4 = blockMult(a22, AbstractMatrix.sub(b21, b11), halfRows, halfCols); - var m5 = blockMult(AbstractMatrix.add(a11, a12), b22, halfRows, halfCols); - var m6 = blockMult(AbstractMatrix.sub(a21, a11), AbstractMatrix.add(b11, b12), halfRows, halfCols); - var m7 = blockMult(AbstractMatrix.sub(a12, a22), AbstractMatrix.add(b21, b22), halfRows, halfCols); // Combine intermediate values into the output. + let m1 = blockMult(AbstractMatrix.add(a11, a22), AbstractMatrix.add(b11, b22), halfRows, halfCols); + let m2 = blockMult(AbstractMatrix.add(a21, a22), b11, halfRows, halfCols); + let m3 = blockMult(a11, AbstractMatrix.sub(b12, b22), halfRows, halfCols); + let m4 = blockMult(a22, AbstractMatrix.sub(b21, b11), halfRows, halfCols); + let m5 = blockMult(AbstractMatrix.add(a11, a12), b22, halfRows, halfCols); + let m6 = blockMult(AbstractMatrix.sub(a21, a11), AbstractMatrix.add(b11, b12), halfRows, halfCols); + let m7 = blockMult(AbstractMatrix.sub(a12, a22), AbstractMatrix.add(b21, b22), halfRows, halfCols); // Combine intermediate values into the output. - var c11 = AbstractMatrix.add(m1, m4); + let c11 = AbstractMatrix.add(m1, m4); c11.sub(m5); c11.add(m7); - var c12 = AbstractMatrix.add(m3, m5); - var c21 = AbstractMatrix.add(m2, m4); - var c22 = AbstractMatrix.sub(m1, m2); + let c12 = AbstractMatrix.add(m3, m5); + let c21 = AbstractMatrix.add(m2, m4); + let c22 = AbstractMatrix.sub(m1, m2); c22.add(m3); c22.add(m6); // Crop output to the desired size (undo dynamic padding). - var resultat = AbstractMatrix.zeros(2 * c11.rows, 2 * c11.columns); + let resultat = AbstractMatrix.zeros(2 * c11.rows, 2 * c11.columns); resultat = resultat.setSubMatrix(c11, 0, 0); resultat = resultat.setSubMatrix(c12, c11.rows, 0); resultat = resultat.setSubMatrix(c21, 0, c11.columns); @@ -2522,9 +2522,9 @@ if (!Number.isFinite(min)) throw new TypeError('min must be a number'); if (!Number.isFinite(max)) throw new TypeError('max must be a number'); if (min >= max) throw new RangeError('min must be smaller than max'); - var newMatrix = new Matrix(this.rows, this.columns); + let newMatrix = new Matrix(this.rows, this.columns); - for (var i = 0; i < this.rows; i++) { + for (let i = 0; i < this.rows; i++) { const row = this.getRow(i); rescale(row, { min, @@ -2551,9 +2551,9 @@ if (!Number.isFinite(min)) throw new TypeError('min must be a number'); if (!Number.isFinite(max)) throw new TypeError('max must be a number'); if (min >= max) throw new RangeError('min must be smaller than max'); - var newMatrix = new Matrix(this.rows, this.columns); + let newMatrix = new Matrix(this.rows, this.columns); - for (var i = 0; i < this.columns; i++) { + for (let i = 0; i < this.columns; i++) { const column = this.getColumn(i); rescale(column, { min: min, @@ -2569,10 +2569,10 @@ flipRows() { const middle = Math.ceil(this.columns / 2); - for (var i = 0; i < this.rows; i++) { - for (var j = 0; j < middle; j++) { - var first = this.get(i, j); - var last = this.get(i, this.columns - 1 - j); + for (let i = 0; i < this.rows; i++) { + for (let j = 0; j < middle; j++) { + let first = this.get(i, j); + let last = this.get(i, this.columns - 1 - j); this.set(i, j, last); this.set(i, this.columns - 1 - j, first); } @@ -2584,10 +2584,10 @@ flipColumns() { const middle = Math.ceil(this.rows / 2); - for (var j = 0; j < this.columns; j++) { - for (var i = 0; i < middle; i++) { - var first = this.get(i, j); - var last = this.get(this.rows - 1 - i, j); + for (let j = 0; j < this.columns; j++) { + for (let i = 0; i < middle; i++) { + let first = this.get(i, j); + let last = this.get(this.rows - 1 - i, j); this.set(i, j, last); this.set(this.rows - 1 - i, j, first); } @@ -2598,16 +2598,16 @@ kroneckerProduct(other) { other = Matrix.checkMatrix(other); - var m = this.rows; - var n = this.columns; - var p = other.rows; - var q = other.columns; - var result = new Matrix(m * p, n * q); - - for (var i = 0; i < m; i++) { - for (var j = 0; j < n; j++) { - for (var k = 0; k < p; k++) { - for (var l = 0; l < q; l++) { + let m = this.rows; + let n = this.columns; + let p = other.rows; + let q = other.columns; + let result = new Matrix(m * p, n * q); + + for (let i = 0; i < m; i++) { + for (let j = 0; j < n; j++) { + for (let k = 0; k < p; k++) { + for (let l = 0; l < q; l++) { result.set(p * i + k, q * j + l, this.get(i, j) * other.get(k, l)); } } @@ -2618,10 +2618,10 @@ } transpose() { - var result = new Matrix(this.columns, this.rows); + let result = new Matrix(this.columns, this.rows); - for (var i = 0; i < this.rows; i++) { - for (var j = 0; j < this.columns; j++) { + for (let i = 0; i < this.rows; i++) { + for (let j = 0; j < this.columns; j++) { result.set(j, i, this.get(i, j)); } } @@ -2632,7 +2632,7 @@ sortRows() { let compareFunction = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : compareNumbers; - for (var i = 0; i < this.rows; i++) { + for (let i = 0; i < this.rows; i++) { this.setRow(i, this.getRow(i).sort(compareFunction)); } @@ -2642,7 +2642,7 @@ sortColumns() { let compareFunction = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : compareNumbers; - for (var i = 0; i < this.columns; i++) { + for (let i = 0; i < this.columns; i++) { this.setColumn(i, this.getColumn(i).sort(compareFunction)); } @@ -2651,10 +2651,10 @@ subMatrix(startRow, endRow, startColumn, endColumn) { checkRange(this, startRow, endRow, startColumn, endColumn); - var newMatrix = new Matrix(endRow - startRow + 1, endColumn - startColumn + 1); + let newMatrix = new Matrix(endRow - startRow + 1, endColumn - startColumn + 1); - for (var i = startRow; i <= endRow; i++) { - for (var j = startColumn; j <= endColumn; j++) { + for (let i = startRow; i <= endRow; i++) { + for (let j = startColumn; j <= endColumn; j++) { newMatrix.set(i - startRow, j - startColumn, this.get(i, j)); } } @@ -2670,10 +2670,10 @@ throw new RangeError('Argument out of range'); } - var newMatrix = new Matrix(indices.length, endColumn - startColumn + 1); + let newMatrix = new Matrix(indices.length, endColumn - startColumn + 1); - for (var i = 0; i < indices.length; i++) { - for (var j = startColumn; j <= endColumn; j++) { + for (let i = 0; i < indices.length; i++) { + for (let j = startColumn; j <= endColumn; j++) { if (indices[i] < 0 || indices[i] >= this.rows) { throw new RangeError("Row index out of range: ".concat(indices[i])); } @@ -2693,10 +2693,10 @@ throw new RangeError('Argument out of range'); } - var newMatrix = new Matrix(endRow - startRow + 1, indices.length); + let newMatrix = new Matrix(endRow - startRow + 1, indices.length); - for (var i = 0; i < indices.length; i++) { - for (var j = startRow; j <= endRow; j++) { + for (let i = 0; i < indices.length; i++) { + for (let j = startRow; j <= endRow; j++) { if (indices[i] < 0 || indices[i] >= this.columns) { throw new RangeError("Column index out of range: ".concat(indices[i])); } @@ -2710,12 +2710,12 @@ setSubMatrix(matrix, startRow, startColumn) { matrix = Matrix.checkMatrix(matrix); - var endRow = startRow + matrix.rows - 1; - var endColumn = startColumn + matrix.columns - 1; + let endRow = startRow + matrix.rows - 1; + let endColumn = startColumn + matrix.columns - 1; checkRange(this, startRow, endRow, startColumn, endColumn); - for (var i = 0; i < matrix.rows; i++) { - for (var j = 0; j < matrix.columns; j++) { + for (let i = 0; i < matrix.rows; i++) { + for (let j = 0; j < matrix.columns; j++) { this.set(startRow + i, startColumn + j, matrix.get(i, j)); } } @@ -2724,14 +2724,14 @@ } selection(rowIndices, columnIndices) { - var indices = checkIndices(this, rowIndices, columnIndices); - var newMatrix = new Matrix(rowIndices.length, columnIndices.length); + let indices = checkIndices(this, rowIndices, columnIndices); + let newMatrix = new Matrix(rowIndices.length, columnIndices.length); - for (var i = 0; i < indices.row.length; i++) { - var rowIndex = indices.row[i]; + for (let i = 0; i < indices.row.length; i++) { + let rowIndex = indices.row[i]; - for (var j = 0; j < indices.column.length; j++) { - var columnIndex = indices.column[j]; + for (let j = 0; j < indices.column.length; j++) { + let columnIndex = indices.column[j]; newMatrix.set(i, j, this.get(rowIndex, columnIndex)); } } @@ -2740,10 +2740,10 @@ } trace() { - var min = Math.min(this.rows, this.columns); - var trace = 0; + let min = Math.min(this.rows, this.columns); + let trace = 0; - for (var i = 0; i < min; i++) { + for (let i = 0; i < min; i++) { trace += this.get(i, i); } @@ -2751,10 +2751,10 @@ } clone() { - var newMatrix = new Matrix(this.rows, this.columns); + let newMatrix = new Matrix(this.rows, this.columns); - for (var row = 0; row < this.rows; row++) { - for (var column = 0; column < this.columns; column++) { + for (let row = 0; row < this.rows; row++) { + for (let column = 0; column < this.columns; column++) { newMatrix.set(row, column, this.get(row, column)); } } @@ -2889,7 +2889,7 @@ if (by === undefined) { return Math.sqrt(variance); } else { - for (var i = 0; i < variance.length; i++) { + for (let i = 0; i < variance.length; i++) { variance[i] = Math.sqrt(variance[i]); } @@ -3110,7 +3110,7 @@ throw new RangeError('A matrix cannot have less than one column'); } - for (var i = 0; i < this.rows; i++) { + for (let i = 0; i < this.rows; i++) { const newRow = new Float64Array(this.columns - 1); for (let j = 0; j < index; j++) { @@ -3137,7 +3137,7 @@ checkColumnIndex(this, index, true); array = checkColumnVector(this, array); - for (var i = 0; i < this.rows; i++) { + for (let i = 0; i < this.rows; i++) { const newRow = new Float64Array(this.columns + 1); let j = 0; @@ -3277,7 +3277,7 @@ class MatrixSelectionView extends BaseView { constructor(matrix, rowIndices, columnIndices) { - var indices = checkIndices(matrix, rowIndices, columnIndices); + let indices = checkIndices(matrix, rowIndices, columnIndices); super(matrix, indices.row.length, indices.column.length); this.rowIndices = indices.row; this.columnIndices = indices.column; @@ -3347,14 +3347,14 @@ } set(rowIndex, columnIndex, value) { - var index = this._calculateIndex(rowIndex, columnIndex); + let index = this._calculateIndex(rowIndex, columnIndex); this.data[index] = value; return this; } get(rowIndex, columnIndex) { - var index = this._calculateIndex(rowIndex, columnIndex); + let index = this._calculateIndex(rowIndex, columnIndex); return this.data[index]; } @@ -3399,13 +3399,13 @@ class LuDecomposition { constructor(matrix) { matrix = WrapperMatrix2D.checkMatrix(matrix); - var lu = matrix.clone(); - var rows = lu.rows; - var columns = lu.columns; - var pivotVector = new Float64Array(rows); - var pivotSign = 1; - var i, j, k, p, s, t, v; - var LUcolj, kmax; + let lu = matrix.clone(); + let rows = lu.rows; + let columns = lu.columns; + let pivotVector = new Float64Array(rows); + let pivotSign = 1; + let i, j, k, p, s, t, v; + let LUcolj, kmax; for (i = 0; i < rows; i++) { pivotVector[i] = i; @@ -3464,10 +3464,10 @@ } isSingular() { - var data = this.LU; - var col = data.columns; + let data = this.LU; + let col = data.columns; - for (var j = 0; j < col; j++) { + for (let j = 0; j < col; j++) { if (data.get(j, j) === 0) { return true; } @@ -3478,8 +3478,8 @@ solve(value) { value = Matrix.checkMatrix(value); - var lu = this.LU; - var rows = lu.rows; + let lu = this.LU; + let rows = lu.rows; if (rows !== value.rows) { throw new Error('Invalid matrix dimensions'); @@ -3489,10 +3489,10 @@ throw new Error('LU matrix is singular'); } - var count = value.columns; - var X = value.subMatrixRow(this.pivotVector, 0, count - 1); - var columns = lu.columns; - var i, j, k; + let count = value.columns; + let X = value.subMatrixRow(this.pivotVector, 0, count - 1); + let columns = lu.columns; + let i, j, k; for (k = 0; k < columns; k++) { for (i = k + 1; i < columns; i++) { @@ -3518,16 +3518,16 @@ } get determinant() { - var data = this.LU; + let data = this.LU; if (!data.isSquare()) { throw new Error('Matrix must be square'); } - var determinant = this.pivotSign; - var col = data.columns; + let determinant = this.pivotSign; + let col = data.columns; - for (var j = 0; j < col; j++) { + for (let j = 0; j < col; j++) { determinant *= data.get(j, j); } @@ -3535,13 +3535,13 @@ } get lowerTriangularMatrix() { - var data = this.LU; - var rows = data.rows; - var columns = data.columns; - var X = new Matrix(rows, columns); + let data = this.LU; + let rows = data.rows; + let columns = data.columns; + let X = new Matrix(rows, columns); - for (var i = 0; i < rows; i++) { - for (var j = 0; j < columns; j++) { + for (let i = 0; i < rows; i++) { + for (let j = 0; j < columns; j++) { if (i > j) { X.set(i, j, data.get(i, j)); } else if (i === j) { @@ -3556,13 +3556,13 @@ } get upperTriangularMatrix() { - var data = this.LU; - var rows = data.rows; - var columns = data.columns; - var X = new Matrix(rows, columns); + let data = this.LU; + let rows = data.rows; + let columns = data.columns; + let X = new Matrix(rows, columns); - for (var i = 0; i < rows; i++) { - for (var j = 0; j < columns; j++) { + for (let i = 0; i < rows; i++) { + for (let j = 0; j < columns; j++) { if (i <= j) { X.set(i, j, data.get(i, j)); } else { @@ -3581,7 +3581,7 @@ } function hypotenuse(a, b) { - var r = 0; + let r = 0; if (Math.abs(a) > Math.abs(b)) { r = b / a; @@ -3599,14 +3599,14 @@ class QrDecomposition { constructor(value) { value = WrapperMatrix2D.checkMatrix(value); - var qr = value.clone(); - var m = value.rows; - var n = value.columns; - var rdiag = new Float64Array(n); - var i, j, k, s; + let qr = value.clone(); + let m = value.rows; + let n = value.columns; + let rdiag = new Float64Array(n); + let i, j, k, s; for (k = 0; k < n; k++) { - var nrm = 0; + let nrm = 0; for (i = k; i < m; i++) { nrm = hypotenuse(nrm, qr.get(i, k)); @@ -3647,8 +3647,8 @@ solve(value) { value = Matrix.checkMatrix(value); - var qr = this.QR; - var m = qr.rows; + let qr = this.QR; + let m = qr.rows; if (value.rows !== m) { throw new Error('Matrix row dimensions must agree'); @@ -3658,10 +3658,10 @@ throw new Error('Matrix is rank deficient'); } - var count = value.columns; - var X = value.clone(); - var n = qr.columns; - var i, j, k, s; + let count = value.columns; + let X = value.clone(); + let n = qr.columns; + let i, j, k, s; for (k = 0; k < n; k++) { for (j = 0; j < count; j++) { @@ -3695,9 +3695,9 @@ } isFullRank() { - var columns = this.QR.columns; + let columns = this.QR.columns; - for (var i = 0; i < columns; i++) { + for (let i = 0; i < columns; i++) { if (this.Rdiag[i] === 0) { return false; } @@ -3707,10 +3707,10 @@ } get upperTriangularMatrix() { - var qr = this.QR; - var n = qr.columns; - var X = new Matrix(n, n); - var i, j; + let qr = this.QR; + let n = qr.columns; + let X = new Matrix(n, n); + let i, j; for (i = 0; i < n; i++) { for (j = 0; j < n; j++) { @@ -3728,11 +3728,11 @@ } get orthogonalMatrix() { - var qr = this.QR; - var rows = qr.rows; - var columns = qr.columns; - var X = new Matrix(rows, columns); - var i, j, k, s; + let qr = this.QR; + let rows = qr.rows; + let columns = qr.columns; + let X = new Matrix(rows, columns); + let i, j, k, s; for (k = columns - 1; k >= 0; k--) { for (i = 0; i < rows; i++) { @@ -3767,17 +3767,17 @@ constructor(value) { let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; value = WrapperMatrix2D.checkMatrix(value); - var m = value.rows; - var n = value.columns; + let m = value.rows; + let n = value.columns; const { computeLeftSingularVectors = true, computeRightSingularVectors = true, autoTranspose = false } = options; - var wantu = Boolean(computeLeftSingularVectors); - var wantv = Boolean(computeRightSingularVectors); - var swapped = false; - var a; + let wantu = Boolean(computeLeftSingularVectors); + let wantv = Boolean(computeRightSingularVectors); + let swapped = false; + let a; if (m < n) { if (!autoTranspose) { @@ -3789,7 +3789,7 @@ m = a.rows; n = a.columns; swapped = true; - var aux = wantu; + let aux = wantu; wantu = wantv; wantv = aux; } @@ -3797,20 +3797,20 @@ a = value.clone(); } - var nu = Math.min(m, n); - var ni = Math.min(m + 1, n); - var s = new Float64Array(ni); - var U = new Matrix(m, nu); - var V = new Matrix(n, n); - var e = new Float64Array(n); - var work = new Float64Array(m); - var si = new Float64Array(ni); + let nu = Math.min(m, n); + let ni = Math.min(m + 1, n); + let s = new Float64Array(ni); + let U = new Matrix(m, nu); + let V = new Matrix(n, n); + let e = new Float64Array(n); + let work = new Float64Array(m); + let si = new Float64Array(ni); for (let i = 0; i < ni; i++) si[i] = i; - var nct = Math.min(m - 1, n); - var nrt = Math.max(0, Math.min(n - 2, m)); - var mrc = Math.max(nct, nrt); + let nct = Math.min(m - 1, n); + let nrt = Math.max(0, Math.min(n - 2, m)); + let mrc = Math.max(nct, nrt); for (let k = 0; k < mrc; k++) { if (k < nct) { @@ -3994,8 +3994,8 @@ } } - var pp = p - 1; - var eps = Number.EPSILON; + let pp = p - 1; + let eps = Number.EPSILON; while (p > 0) { let k, kase; @@ -4215,7 +4215,7 @@ } if (swapped) { - var tmp = V; + let tmp = V; V = U; U = tmp; } @@ -4228,10 +4228,10 @@ } solve(value) { - var Y = value; - var e = this.threshold; - var scols = this.s.length; - var Ls = Matrix.zeros(scols, scols); + let Y = value; + let e = this.threshold; + let scols = this.s.length; + let Ls = Matrix.zeros(scols, scols); for (let i = 0; i < scols; i++) { if (Math.abs(this.s[i]) <= e) { @@ -4241,12 +4241,12 @@ } } - var U = this.U; - var V = this.rightSingularVectors; - var VL = V.mmul(Ls); - var vrows = V.rows; - var urows = U.rows; - var VLU = Matrix.zeros(vrows, urows); + let U = this.U; + let V = this.rightSingularVectors; + let VL = V.mmul(Ls); + let vrows = V.rows; + let urows = U.rows; + let VLU = Matrix.zeros(vrows, urows); for (let i = 0; i < vrows; i++) { for (let j = 0; j < urows; j++) { @@ -4268,11 +4268,11 @@ } inverse() { - var V = this.V; - var e = this.threshold; - var vrows = V.rows; - var vcols = V.columns; - var X = new Matrix(vrows, this.s.length); + let V = this.V; + let e = this.threshold; + let vrows = V.rows; + let vcols = V.columns; + let X = new Matrix(vrows, this.s.length); for (let i = 0; i < vrows; i++) { for (let j = 0; j < vcols; j++) { @@ -4282,10 +4282,10 @@ } } - var U = this.U; - var urows = U.rows; - var ucols = U.columns; - var Y = new Matrix(vrows, urows); + let U = this.U; + let urows = U.rows; + let ucols = U.columns; + let Y = new Matrix(vrows, urows); for (let i = 0; i < vrows; i++) { for (let j = 0; j < urows; j++) { @@ -4311,11 +4311,11 @@ } get rank() { - var tol = Math.max(this.m, this.n) * this.s[0] * Number.EPSILON; - var r = 0; - var s = this.s; + let tol = Math.max(this.m, this.n) * this.s[0] * Number.EPSILON; + let r = 0; + let s = this.s; - for (var i = 0, ii = s.length; i < ii; i++) { + for (let i = 0, ii = s.length; i < ii; i++) { if (s[i] > tol) { r++; } @@ -4372,7 +4372,7 @@ matrix = Matrix.checkMatrix(matrix); if (matrix.isSquare()) { - var a, b, c, d; + let a, b, c, d; if (matrix.columns === 2) { // 2 x 2 matrix @@ -4383,7 +4383,7 @@ return a * d - b * c; } else if (matrix.columns === 3) { // 3 x 3 matrix - var subMatrix0, subMatrix1, subMatrix2; + let subMatrix0, subMatrix1, subMatrix2; subMatrix0 = new MatrixSelectionView(matrix, [1, 2], [1, 2]); subMatrix1 = new MatrixSelectionView(matrix, [1, 2], [0, 2]); subMatrix2 = new MatrixSelectionView(matrix, [1, 2], [0, 1]); @@ -4401,9 +4401,9 @@ } function xrange(n, exception) { - var range = []; + let range = []; - for (var i = 0; i < n; i++) { + for (let i = 0; i < n; i++) { if (i !== exception) { range.push(i); } @@ -4419,9 +4419,9 @@ if (error > thresholdError) { return new Array(matrix.rows + 1).fill(0); } else { - var returnArray = matrix.addRow(index, [0]); + let returnArray = matrix.addRow(index, [0]); - for (var i = 0; i < returnArray.rows; i++) { + for (let i = 0; i < returnArray.rows; i++) { if (Math.abs(returnArray.get(i, 0)) < thresholdValue) { returnArray.set(i, 0, 0); } @@ -4438,15 +4438,15 @@ thresholdError = 10e-10 } = options; matrix = Matrix.checkMatrix(matrix); - var n = matrix.rows; - var results = new Matrix(n, n); - - for (var i = 0; i < n; i++) { - var b = Matrix.columnVector(matrix.getRow(i)); - var Abis = matrix.subMatrixRow(xrange(n, i)).transpose(); - var svd = new SingularValueDecomposition(Abis); - var x = svd.solve(b); - var error = Matrix.sub(b, Abis.mmul(x)).abs().max(); + let n = matrix.rows; + let results = new Matrix(n, n); + + for (let i = 0; i < n; i++) { + let b = Matrix.columnVector(matrix.getRow(i)); + let Abis = matrix.subMatrixRow(xrange(n, i)).transpose(); + let svd = new SingularValueDecomposition(Abis); + let x = svd.solve(b); + let error = Matrix.sub(b, Abis.mmul(x)).abs().max(); results.setRow(i, dependenciesOneRow(error, x, i, thresholdValue, thresholdError)); } @@ -4456,14 +4456,14 @@ function pseudoInverse(matrix) { let threshold = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : Number.EPSILON; matrix = Matrix.checkMatrix(matrix); - var svdSolution = new SingularValueDecomposition(matrix, { + let svdSolution = new SingularValueDecomposition(matrix, { autoTranspose: true }); - var U = svdSolution.leftSingularVectors; - var V = svdSolution.rightSingularVectors; - var s = svdSolution.diagonal; + let U = svdSolution.leftSingularVectors; + let V = svdSolution.rightSingularVectors; + let s = svdSolution.diagonal; - for (var i = 0; i < s.length; i++) { + for (let i = 0; i < s.length; i++) { if (Math.abs(s[i]) > threshold) { s[i] = 1.0 / s[i]; } else { @@ -4504,15 +4504,15 @@ } } - const covariance = xMatrix.transpose().mmul(yMatrix); + const cov = xMatrix.transpose().mmul(yMatrix); - for (let i = 0; i < covariance.rows; i++) { - for (let j = 0; j < covariance.columns; j++) { - covariance.set(i, j, covariance.get(i, j) * (1 / (xMatrix.rows - 1))); + for (let i = 0; i < cov.rows; i++) { + for (let j = 0; j < cov.columns; j++) { + cov.set(i, j, cov.get(i, j) * (1 / (xMatrix.rows - 1))); } } - return covariance; + return cov; } function correlation(xMatrix) { @@ -4560,15 +4560,15 @@ const sdy = yIsSame ? sdx : yMatrix.standardDeviation('column', { unbiased: true }); - const correlation = xMatrix.transpose().mmul(yMatrix); + const corr = xMatrix.transpose().mmul(yMatrix); - for (let i = 0; i < correlation.rows; i++) { - for (let j = 0; j < correlation.columns; j++) { - correlation.set(i, j, correlation.get(i, j) * (1 / (sdx[i] * sdy[j])) * (1 / (xMatrix.rows - 1))); + for (let i = 0; i < corr.rows; i++) { + for (let j = 0; j < corr.columns; j++) { + corr.set(i, j, corr.get(i, j) * (1 / (sdx[i] * sdy[j])) * (1 / (xMatrix.rows - 1))); } } - return correlation; + return corr; } class EigenvalueDecomposition { @@ -4583,13 +4583,13 @@ throw new Error('Matrix is not a square matrix'); } - var n = matrix.columns; - var V = new Matrix(n, n); - var d = new Float64Array(n); - var e = new Float64Array(n); - var value = matrix; - var i, j; - var isSymmetric = false; + let n = matrix.columns; + let V = new Matrix(n, n); + let d = new Float64Array(n); + let e = new Float64Array(n); + let value = matrix; + let i, j; + let isSymmetric = false; if (assumeSymmetric) { isSymmetric = true; @@ -4607,8 +4607,8 @@ tred2(n, e, d, V); tql2(n, e, d, V); } else { - var H = new Matrix(n, n); - var ort = new Float64Array(n); + let H = new Matrix(n, n); + let ort = new Float64Array(n); for (j = 0; j < n; j++) { for (i = 0; i < n; i++) { @@ -4639,11 +4639,11 @@ } get diagonalMatrix() { - var n = this.n; - var e = this.e; - var d = this.d; - var X = new Matrix(n, n); - var i, j; + let n = this.n; + let e = this.e; + let d = this.d; + let X = new Matrix(n, n); + let i, j; for (i = 0; i < n; i++) { for (j = 0; j < n; j++) { @@ -4665,7 +4665,7 @@ } function tred2(n, e, d, V) { - var f, g, h, i, j, k, hh, scale; + let f, g, h, i, j, k, hh, scale; for (j = 0; j < n; j++) { d[j] = V.get(n - 1, j); @@ -4788,16 +4788,16 @@ } function tql2(n, e, d, V) { - var g, h, i, j, k, l, m, p, r, dl1, c, c2, c3, el1, s, s2; + let g, h, i, j, k, l, m, p, r, dl1, c, c2, c3, el1, s, s2; for (i = 1; i < n; i++) { e[i - 1] = e[i]; } e[n - 1] = 0; - var f = 0; - var tst1 = 0; - var eps = Number.EPSILON; + let f = 0; + let tst1 = 0; + let eps = Number.EPSILON; for (l = 0; l < n; l++) { tst1 = Math.max(tst1, Math.abs(d[l]) + Math.abs(e[l])); @@ -4895,10 +4895,10 @@ } function orthes(n, H, ort, V) { - var low = 0; - var high = n - 1; - var f, g, h, i, j, m; - var scale; + let low = 0; + let high = n - 1; + let f, g, h, i, j, m; + let scale; for (m = low + 1; m <= high - 1; m++) { scale = 0; @@ -4987,21 +4987,21 @@ } function hqr2(nn, e, d, V, H) { - var n = nn - 1; - var low = 0; - var high = nn - 1; - var eps = Number.EPSILON; - var exshift = 0; - var norm = 0; - var p = 0; - var q = 0; - var r = 0; - var s = 0; - var z = 0; - var iter = 0; - var i, j, k, l, m, t, w, x, y; - var ra, sa, vr, vi; - var notlast, cdivres; + let n = nn - 1; + let low = 0; + let high = nn - 1; + let eps = Number.EPSILON; + let exshift = 0; + let norm = 0; + let p = 0; + let q = 0; + let r = 0; + let s = 0; + let z = 0; + let iter = 0; + let i, j, k, l, m, t, w, x, y; + let ra, sa, vr, vi; + let notlast, cdivres; for (i = 0; i < nn; i++) { if (i < low || i > high) { @@ -5391,7 +5391,7 @@ } function cdiv(xr, xi, yr, yi) { - var r, d; + let r, d; if (Math.abs(yr) > Math.abs(yi)) { r = yi / yr; @@ -5412,17 +5412,17 @@ throw new Error('Matrix is not symmetric'); } - var a = value; - var dimension = a.rows; - var l = new Matrix(dimension, dimension); - var positiveDefinite = true; - var i, j, k; + let a = value; + let dimension = a.rows; + let l = new Matrix(dimension, dimension); + let positiveDefinite = true; + let i, j, k; for (j = 0; j < dimension; j++) { - var d = 0; + let d = 0; for (k = 0; k < j; k++) { - var s = 0; + let s = 0; for (i = 0; i < k; i++) { s += l.get(k, i) * l.get(j, i); @@ -5442,25 +5442,30 @@ } } - if (!positiveDefinite) { - throw new Error('Matrix is not positive definite'); - } - this.L = l; + this.positiveDefinite = Boolean(positiveDefinite); + } + + isPositiveDefinite() { + return this.positiveDefinite; } solve(value) { value = WrapperMatrix2D.checkMatrix(value); - var l = this.L; - var dimension = l.rows; + let l = this.L; + let dimension = l.rows; if (value.rows !== dimension) { throw new Error('Matrix dimensions do not match'); } - var count = value.columns; - var B = value.clone(); - var i, j, k; + if (this.isPositiveDefinite() === false) { + throw new Error('Matrix is not positive definite'); + } + + let count = value.columns; + let B = value.clone(); + let i, j, k; for (k = 0; k < dimension; k++) { for (j = 0; j < count; j++) { @@ -5491,6 +5496,90 @@ } + class nipals { + constructor(X) { + let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + X = WrapperMatrix2D.checkMatrix(X); + let { + Y + } = options; + const { + scaleScores = false, + maxIterations = 1000, + terminationCriteria = 1e-10 + } = options; + let u; + + if (Y) { + if (Array.isArray(Y) && typeof Y[0] === 'number') { + Y = Matrix.columnVector(Y); + } else { + Y = WrapperMatrix2D.checkMatrix(Y); + } + + if (!Y.isColumnVector() || Y.rows !== X.rows) { + throw new Error('Y must be a column vector of length X.rows'); + } + + u = Y; + } else { + u = X.getColumnVector(0); + } + + let diff = 1; + let t, q, w, tOld; + + for (let counter = 0; counter < maxIterations && diff > terminationCriteria; counter++) { + w = X.transpose().mmul(u).div(u.transpose().mmul(u).get(0, 0)); + w = w.div(w.norm()); + t = X.mmul(w).div(w.transpose().mmul(w).get(0, 0)); + + if (counter > 0) { + diff = t.clone().sub(tOld).pow(2).sum(); + } + + tOld = t.clone(); + + if (Y) { + q = Y.transpose().mmul(t).div(t.transpose().mmul(t).get(0, 0)); + q = q.div(q.norm()); + u = Y.mmul(q).div(q.transpose().mmul(q).get(0, 0)); + } else { + u = t; + } + } + + if (Y) { + let p = X.transpose().mmul(t).div(t.transpose().mmul(t).get(0, 0)); + p = p.div(p.norm()); + let xResidual = X.clone().sub(t.clone().mmul(p.transpose())); + let residual = u.transpose().mmul(t).div(t.transpose().mmul(t).get(0, 0)); + let yResidual = Y.clone().sub(t.clone().mulS(residual.get(0, 0)).mmul(q.transpose())); + this.t = t; + this.p = p.transpose(); + this.w = w.transpose(); + this.q = q; + this.u = u; + this.s = t.transpose().mmul(t); + this.xResidual = xResidual; + this.yResidual = yResidual; + this.betas = residual; + } else { + this.w = w.transpose(); + this.s = t.transpose().mmul(t).sqrt(); + + if (scaleScores) { + this.t = t.clone().div(this.s.get(0, 0)); + } else { + this.t = t; + } + + this.xResidual = X.sub(t.mmul(w.transpose())); + } + } + + } + var MatrixLib = /*#__PURE__*/Object.freeze({ @@ -5517,6 +5606,8 @@ LU: LuDecomposition, QrDecomposition: QrDecomposition, QR: QrDecomposition, + Nipals: nipals, + NIPALS: nipals, MatrixColumnView: MatrixColumnView, MatrixColumnSelectionView: MatrixColumnSelectionView, MatrixFlipColumnView: MatrixFlipColumnView, @@ -7143,12 +7234,14 @@ /** * Creates new PCA (Principal Component Analysis) from the dataset - * @param {Matrix} dataset - dataset or covariance matrix + * @param {Matrix} dataset - dataset or covariance matrix. * @param {Object} [options] - * @param {boolean} [options.isCovarianceMatrix=false] - true if the dataset is a covariance matrix - * @param {boolean} [options.useCovarianceMatrix=false] - force the use of the covariance matrix instead of singular value decomposition. - * @param {boolean} [options.center=true] - should the data be centered (subtract the mean) - * @param {boolean} [options.scale=false] - should the data be scaled (divide by the standard deviation) + * @param {boolean} [options.isCovarianceMatrix=false] - true if the dataset is a covariance matrix. + * @param {boolean} [options.method='SVD'] - select which method to use: SVD (default), covarianceMatrirx or NIPALS. + * @param {boolean} [options.nCompNIPALS=2] - number of components to be computed with NIPALS. + * @param {boolean} [options.center=true] - should the data be centered (subtract the mean). + * @param {boolean} [options.scale=false] - should the data be scaled (divide by the standard deviation). + * @param {boolean} [options.ignoreZeroVariance=false] - ignore columns with zero variance if `scale` is `true`. * */ class PCA { @@ -7163,59 +7256,76 @@ this.stdevs = model.stdevs; this.U = Matrix.checkMatrix(model.U); this.S = model.S; + this.R = model.R; + this.excludedFeatures = model.excludedFeatures; return; } dataset = new Matrix(dataset); const { isCovarianceMatrix = false, + method = 'SVD', + nCompNIPALS = 2, center = true, - scale = false + scale = false, + ignoreZeroVariance = false } = options; this.center = center; this.scale = scale; this.means = null; this.stdevs = null; + this.excludedFeatures = []; if (isCovarianceMatrix) { - // user provided a covariance matrix instead of dataset + // User provided a covariance matrix instead of dataset. this._computeFromCovarianceMatrix(dataset); return; } - var useCovarianceMatrix; + this._adjust(dataset, ignoreZeroVariance); - if (typeof options.useCovarianceMatrix === 'boolean') { - useCovarianceMatrix = options.useCovarianceMatrix; - } else { - useCovarianceMatrix = dataset.rows > dataset.columns; - } + switch (method) { + case 'covarianceMatrix': + { + // User provided a dataset but wants us to compute and use the covariance matrix. + const covarianceMatrix = new MatrixTransposeView(dataset).mmul(dataset).div(dataset.rows - 1); - if (useCovarianceMatrix) { - // user provided a dataset but wants us to compute and use the covariance matrix - this._adjust(dataset); + this._computeFromCovarianceMatrix(covarianceMatrix); - const covarianceMatrix = new MatrixTransposeView(dataset).mmul(dataset).div(dataset.rows - 1); + break; + } - this._computeFromCovarianceMatrix(covarianceMatrix); - } else { - this._adjust(dataset); + case 'NIPALS': + { + this._computeWithNIPALS(dataset, nCompNIPALS); - var svd = new SingularValueDecomposition(dataset, { - computeLeftSingularVectors: false, - computeRightSingularVectors: true, - autoTranspose: true - }); - this.U = svd.rightSingularVectors; - const singularValues = svd.diagonal; - const eigenvalues = []; + break; + } - for (const singularValue of singularValues) { - eigenvalues.push(singularValue * singularValue / (dataset.rows - 1)); - } + case 'SVD': + { + const svd = new SingularValueDecomposition(dataset, { + computeLeftSingularVectors: false, + computeRightSingularVectors: true, + autoTranspose: true + }); + this.U = svd.rightSingularVectors; + const singularValues = svd.diagonal; + const eigenvalues = []; - this.S = eigenvalues; + for (const singularValue of singularValues) { + eigenvalues.push(singularValue * singularValue / (dataset.rows - 1)); + } + + this.S = eigenvalues; + break; + } + + default: + { + throw new Error("unknown method: ".concat(method)); + } } } /** @@ -7255,6 +7365,10 @@ dataset.subRowVector(this.means); if (this.scale) { + for (let i of this.excludedFeatures) { + dataset.removeColumn(i); + } + dataset.divRowVector(this.stdevs); } } @@ -7262,6 +7376,27 @@ var predictions = dataset.mmul(this.U); return predictions.subMatrix(0, predictions.rows - 1, 0, nComponents - 1); } + /** + * Calculates the inverse PCA transform + * @param {Matrix} dataset + * @return {Matrix} dataset projected in the PCA space + */ + + + invert(dataset) { + dataset = Matrix.checkMatrix(dataset); + var inverse = dataset.mmul(this.U.transpose()); + + if (this.center) { + if (this.scale) { + inverse.mulRowVector(this.stdevs); + } + + inverse.addRowVector(this.means); + } + + return inverse; + } /** * Returns the proportion of variance for each component * @return {[number]} @@ -7346,7 +7481,7 @@ }; } - _adjust(dataset) { + _adjust(dataset, ignoreZeroVariance) { if (this.center) { const mean = dataset.mean('column'); const stdevs = this.scale ? dataset.standardDeviation('column', { @@ -7356,9 +7491,16 @@ dataset.subRowVector(mean); if (this.scale) { - for (var i = 0; i < stdevs.length; i++) { + for (let i = 0; i < stdevs.length; i++) { if (stdevs[i] === 0) { - throw new RangeError("Cannot scale the dataset (standard deviation is zero at index ".concat(i)); + if (ignoreZeroVariance) { + dataset.removeColumn(i); + stdevs.splice(i, 1); + this.excludedFeatures.push(i); + i--; + } else { + throw new RangeError("Cannot scale the dataset (standard deviation is zero at index ".concat(i)); + } } } @@ -7378,6 +7520,21 @@ this.S.reverse(); } + _computeWithNIPALS(dataset, nCompNIPALS) { + this.U = new Matrix(nCompNIPALS, dataset.columns); + this.S = []; + let x = dataset; + + for (let i = 0; i < nCompNIPALS; i++) { + let dc = new nipals(x); + this.U.setRow(i, dc.w.transpose()); + this.S.push(Math.pow(dc.s.get(0, 0), 2)); + x = dc.xResidual; + } + + this.U = this.U.transpose(); // to be compatible with API + } + } function squaredEuclidean(p, q) { @@ -7402,36 +7559,37 @@ * Computes a distance/similarity matrix given an array of data and a distance/similarity function. * @param {Array} data An array of data * @param {function} distanceFn A function that accepts two arguments and computes a distance/similarity between them - * @return {Array} The similarity matrix. The similarity matrix is square and has a size equal to the length of + * @return {Array} The distance/similarity matrix. The matrix is square and has a size equal to the length of * the data array */ - function distanceMatrix(data, distanceFn) { - const length = data.length; - let result = Array.from({ - length - }).map(() => Array.from({ - length - })); // Compute upper distance matrix + const result = getMatrix(data.length); // Compute upper distance matrix - for (let i = 0; i < length; i++) { + for (let i = 0; i < data.length; i++) { for (let j = 0; j <= i; j++) { result[i][j] = distanceFn(data[i], data[j]); + result[j][i] = result[i][j]; } - } // Copy to lower distance matrix + } + return result; + } - for (let i = 0; i < length; i++) { - for (let j = i + 1; j < length; j++) { - result[i][j] = result[j][i]; + function getMatrix(size) { + const matrix = []; + + for (let i = 0; i < size; i++) { + const row = []; + matrix.push(row); + + for (let j = 0; j < size; j++) { + row.push(0); } } - return result; + return matrix; } - var src$1 = distanceMatrix; - var heap = createCommonjsModule(function (module, exports) { // Generated by CoffeeScript 1.8.0 (function () { @@ -7852,29 +8010,34 @@ class Cluster { constructor() { this.children = []; - this.distance = -1; - this.index = []; + this.height = 0; + this.size = 1; + this.index = -1; + this.isLeaf = false; } /** - * Creates an array of values where maximum distance smaller than the threshold + * Creates an array of clusters where the maximum height is smaller than the threshold * @param {number} threshold - * @return {Array } + * @return {Array} */ cut(threshold) { - if (threshold < 0) throw new RangeError('Threshold too small'); - var root = new Cluster(); - root.children = this.children; - root.distance = this.distance; - root.index = this.index; - var list = [root]; - var ans = []; + if (typeof threshold !== 'number') { + throw new TypeError('threshold must be a number'); + } + + if (threshold < 0) { + throw new RangeError('threshold must be a positive number'); + } + + let list = [this]; + const ans = []; while (list.length > 0) { - var aux = list.shift(); + const aux = list.shift(); - if (threshold >= aux.distance) { + if (threshold >= aux.height) { ans.push(aux); } else { list = list.concat(aux.children); @@ -7884,23 +8047,23 @@ return ans; } /** - * Merge the leaves in the minimum way to have 'minGroups' number of clusters - * @param {number} minGroups - Them minimum number of children the first level of the tree should have + * Merge the leaves in the minimum way to have `groups` number of clusters. + * @param {number} groups - Them number of children the first level of the tree should have. * @return {Cluster} */ - group(minGroups) { - if (!Number.isInteger(minGroups) || minGroups < 1) { - throw new RangeError('Number of groups must be a positive integer'); + group(groups) { + if (!Number.isInteger(groups) || groups < 1) { + throw new RangeError('groups must be a positive integer'); } - const heap = new heap$1(function (a, b) { - return b.distance - a.distance; + const heap = new heap$1((a, b) => { + return b.height - a.height; }); heap.push(this); - while (heap.size() < minGroups) { + while (heap.size() < groups) { var first = heap.pop(); if (first.children.length === 0) { @@ -7912,13 +8075,12 @@ var root = new Cluster(); root.children = heap.toArray(); - root.distance = this.distance; + root.height = this.height; return root; } /** - * Traverses the tree depth-first and provide callback to be called on each individual node + * Traverses the tree depth-first and calls the provided callback with each individual node * @param {function} cb - The callback to be called on each node encounter - * @type {Cluster} */ @@ -7927,511 +8089,227 @@ callback(root); if (root.children) { - for (var i = root.children.length - 1; i >= 0; i--) { - visit(root.children[i], callback); + for (const child of root.children) { + visit(child, callback); } } } visit(this, cb); } + /** + * Returns a list of indices for all the leaves of this cluster. + * The list is ordered in such a way that a dendrogram could be drawn without crossing branches. + * @returns {Array} + */ - } - - class ClusterLeaf extends Cluster { - constructor(index) { - super(); - this.index = index; - this.distance = 0; - this.children = []; - } - - } - - /** - * @private - * @param cluster1 - * @param cluster2 - * @param disFun - * @returns {number} - */ - - function simpleLink(cluster1, cluster2, disFun) { - var m = 10e100; - - for (var i = 0; i < cluster1.length; i++) { - for (var j = 0; j < cluster2.length; j++) { - var d = disFun[cluster1[i]][cluster2[j]]; - m = Math.min(d, m); - } - } - - return m; - } - /** - * @private - * @param cluster1 - * @param cluster2 - * @param disFun - * @returns {number} - */ - - - function completeLink(cluster1, cluster2, disFun) { - var m = -1; - - for (var i = 0; i < cluster1.length; i++) { - for (var j = 0; j < cluster2.length; j++) { - var d = disFun[cluster1[i]][cluster2[j]]; - m = Math.max(d, m); - } - } - - return m; - } - /** - * @private - * @param cluster1 - * @param cluster2 - * @param disFun - * @returns {number} - */ - - - function averageLink(cluster1, cluster2, disFun) { - var m = 0; - - for (var i = 0; i < cluster1.length; i++) { - for (var j = 0; j < cluster2.length; j++) { - m += disFun[cluster1[i]][cluster2[j]]; - } - } - - return m / (cluster1.length * cluster2.length); - } - /** - * @private - * @param cluster1 - * @param cluster2 - * @param disFun - * @returns {*} - */ - - - function centroidLink(cluster1, cluster2, disFun) { - var dist = new Array(cluster1.length * cluster2.length); - - for (var i = 0; i < cluster1.length; i++) { - for (var j = 0; j < cluster2.length; j++) { - dist[i * cluster2.length + j] = disFun[cluster1[i]][cluster2[j]]; - } - } - - return median$1(dist); - } - /** - * @private - * @param cluster1 - * @param cluster2 - * @param disFun - * @returns {number} - */ - - - function wardLink(cluster1, cluster2, disFun) { - return centroidLink(cluster1, cluster2, disFun) * cluster1.length * cluster2.length / (cluster1.length + cluster2.length); - } - - function compareNumbers$1(a, b) { - return a - b; - } - - function median$1(values, alreadySorted) { - if (alreadySorted === undefined) alreadySorted = false; - - if (!alreadySorted) { - values = [].concat(values).sort(compareNumbers$1); - } - - var l = values.length; - var half = Math.floor(l / 2); - - if (l % 2 === 0) { - return (values[half - 1] + values[half]) * 0.5; - } else { - return values[half]; - } - } - /** - * Continuously merge nodes that have the least dissimilarity - * @param {Array>} distance - Array of points to be clustered - * @param {object} [options] - * @param {Function} [options.distanceFunction] - * @param {string} [options.method] - * @param {boolean} [options.isDistanceMatrix] - * @option isDistanceMatrix: Is the input a distance matrix? - * @constructor - */ - - - function agnes(data) { - let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - const { - distanceFunction = euclidean, - method = 'single', - isDistanceMatrix = false - } = options; - let methodFunc; - var len = data.length; - var distance = data; // If source - - if (!isDistanceMatrix) { - distance = src$1(data, distanceFunction); - } // allows to use a string or a given function - - - if (typeof method === 'string') { - switch (method) { - case 'single': - methodFunc = simpleLink; - break; - - case 'complete': - methodFunc = completeLink; - break; - - case 'average': - methodFunc = averageLink; - break; - - case 'centroid': - methodFunc = centroidLink; - break; - - case 'ward': - methodFunc = wardLink; - break; - - default: - throw new RangeError("unknown clustering method: ".concat(method)); - } - } else if (typeof method !== 'function') { - throw new TypeError('method must be a string or function'); - } - - var list = new Array(len); - - for (var i = 0; i < distance.length; i++) { - list[i] = new ClusterLeaf(i); - } - - var min = 10e5; - var d = {}; - var dis = 0; - - while (list.length > 1) { - // calculates the minimum distance - d = {}; - min = 10e5; - - for (var j = 0; j < list.length; j++) { - for (var k = j + 1; k < list.length; k++) { - var fdistance, sdistance; - - if (list[j] instanceof ClusterLeaf) { - fdistance = [list[j].index]; - } else { - fdistance = new Array(list[j].index.length); - - for (var e = 0; e < fdistance.length; e++) { - fdistance[e] = list[j].index[e].index; - } - } - - if (list[k] instanceof ClusterLeaf) { - sdistance = [list[k].index]; - } else { - sdistance = new Array(list[k].index.length); - - for (var f = 0; f < sdistance.length; f++) { - sdistance[f] = list[k].index[f].index; - } - } - - dis = methodFunc(fdistance, sdistance, distance).toFixed(4); - - if (dis in d) { - d[dis].push([list[j], list[k]]); - } else { - d[dis] = [[list[j], list[k]]]; - } - - min = Math.min(dis, min); - } - } // cluster dots - - - var dmin = d[min.toFixed(4)]; - var clustered = new Array(dmin.length); - var count = 0; - - while (dmin.length > 0) { - let aux = dmin.shift(); - - const filterInt = function filterInt(n) { - return aux.indexOf(n) !== -1; - }; - - const filterDiff = function filterDiff(n) { - return aux.indexOf(n) === -1; - }; - - for (var q = 0; q < dmin.length; q++) { - var int = dmin[q].filter(filterInt); - - if (int.length > 0) { - var diff = dmin[q].filter(filterDiff); - aux = aux.concat(diff); - dmin.splice(q--, 1); - } - } - - clustered[count++] = aux; - } - - clustered.length = count; - - for (var ii = 0; ii < clustered.length; ii++) { - var obj = new Cluster(); - obj.children = clustered[ii].concat(); - obj.distance = min; - obj.index = new Array(len); - var indCount = 0; - - for (var jj = 0; jj < clustered[ii].length; jj++) { - if (clustered[ii][jj] instanceof ClusterLeaf) { - obj.index[indCount++] = clustered[ii][jj]; - } else { - indCount += clustered[ii][jj].index.length; - obj.index = clustered[ii][jj].index.concat(obj.index); - } - list.splice(list.indexOf(clustered[ii][jj]), 1); + indices() { + const result = []; + this.traverse(cluster => { + if (cluster.isLeaf) { + result.push(cluster.index); } - - obj.index.length = indCount; - list.push(obj); - } - } - - return list[0]; - } - - /** - * @private - * Returns the most distant point and his distance - * @param {Array >} splitting - Clusters to split - * @param {Array >} data - Original data - * @param {function} disFun - Distance function - * @returns {{d: number, p: number}} - d: maximum difference between points, p: the point more distant - */ - - function diff(splitting, data, disFun) { - var ans = { - d: 0, - p: 0 - }; - var Ci = new Array(splitting[0].length); - - for (var e = 0; e < splitting[0].length; e++) { - Ci[e] = data[splitting[0][e]]; - } - - var Cj = new Array(splitting[1].length); - - for (var f = 0; f < splitting[1].length; f++) { - Cj[f] = data[splitting[1][f]]; + }); + return result; } - var dist, ndist; - - for (var i = 0; i < Ci.length; i++) { - dist = 0; - - for (var j = 0; j < Ci.length; j++) { - if (i !== j) { - dist += disFun(Ci[i], Ci[j]); - } - } - - dist /= Ci.length - 1; - ndist = 0; + } - for (var k = 0; k < Cj.length; k++) { - ndist += disFun(Ci[i], Cj[k]); - } + function singleLink(dKI, dKJ) { + return Math.min(dKI, dKJ); + } - ndist /= Cj.length; + function completeLink(dKI, dKJ) { + return Math.max(dKI, dKJ); + } - if (dist - ndist > ans.d) { - ans.d = dist - ndist; - ans.p = i; - } - } + function averageLink(dKI, dKJ, dIJ, ni, nj) { + const ai = ni / (ni + nj); + const aj = nj / (ni + nj); + return ai * dKI + aj * dKJ; + } - return ans; + function weightedAverageLink(dKI, dKJ) { + return (dKI + dKJ) / 2; } - /** - * @private - * Intra-cluster distance - * @param {Array} index - * @param {Array} data - * @param {function} disFun - * @returns {number} - */ + function centroidLink(dKI, dKJ, dIJ, ni, nj) { + const ai = ni / (ni + nj); + const aj = nj / (ni + nj); + const b = -(ni * nj) / (ni + nj) ** 2; + return ai * dKI + aj * dKJ + b * dIJ; + } - function intrDist(index, data, disFun) { - var dist = 0; - var count = 0; + function medianLink(dKI, dKJ, dIJ) { + return dKI / 2 + dKJ / 2 - dIJ / 4; + } - for (var i = 0; i < index.length; i++) { - for (var j = i; j < index.length; j++) { - dist += disFun(data[index[i].index], data[index[j].index]); - count++; - } - } + function wardLink(dKI, dKJ, dIJ, ni, nj, nk) { + const ai = (ni + nk) / (ni + nj + nk); + const aj = (nj + nk) / (ni + nj + nk); + const b = -nk / (ni + nj + nk); + return ai * dKI + aj * dKJ + b * dIJ; + } - return dist / count; + function wardLink2(dKI, dKJ, dIJ, ni, nj, nk) { + const ai = (ni + nk) / (ni + nj + nk); + const aj = (nj + nk) / (ni + nj + nk); + const b = -nk / (ni + nj + nk); + return Math.sqrt(ai * dKI * dKI + aj * dKJ * dKJ + b * dIJ * dIJ); } /** - * Splits the higher level clusters - * @param {Array >} data - Array of points to be clustered + * Continuously merge nodes that have the least dissimilarity + * @param {Array>} data - Array of points to be clustered * @param {object} [options] * @param {Function} [options.distanceFunction] + * @param {string} [options.method] - Default: `'complete'` + * @param {boolean} [options.isDistanceMatrix] - Is the input already a distance matrix? * @constructor */ - function diana(data) { + function agnes(data) { let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; const { - distanceFunction = euclidean + distanceFunction = euclidean, + method = 'complete', + isDistanceMatrix = false } = options; - var tree = new Cluster(); - tree.children = new Array(data.length); - tree.index = new Array(data.length); + let updateFunc; - for (var ind = 0; ind < data.length; ind++) { - tree.children[ind] = new ClusterLeaf(ind); - tree.index[ind] = new ClusterLeaf(ind); + if (!isDistanceMatrix) { + data = distanceMatrix(data, distanceFunction); } - tree.distance = intrDist(tree.index, data, distanceFunction); - var m, M, clId, dist, rebel; - var list = [tree]; - - while (list.length > 0) { - M = 0; - clId = 0; + let distanceMatrix$1 = new Matrix(data); + const numLeaves = distanceMatrix$1.rows; // allows to use a string or a given function - for (var i = 0; i < list.length; i++) { - m = 0; + if (typeof method === 'string') { + switch (method.toLowerCase()) { + case 'single': + updateFunc = singleLink; + break; - for (var j = 0; j < list[i].length; j++) { - for (var l = j + 1; l < list[i].length; l++) { - m = Math.max(distanceFunction(data[list[i].index[j].index], data[list[i].index[l].index]), m); - } - } + case 'complete': + updateFunc = completeLink; + break; - if (m > M) { - M = m; - clId = i; - } - } + case 'average': + case 'upgma': + updateFunc = averageLink; + break; - M = 0; + case 'wpgma': + updateFunc = weightedAverageLink; + break; - if (list[clId].index.length === 2) { - list[clId].children = [list[clId].index[0], list[clId].index[1]]; - list[clId].distance = distanceFunction(data[list[clId].index[0].index], data[list[clId].index[1].index]); - } else if (list[clId].index.length === 3) { - list[clId].children = [list[clId].index[0], list[clId].index[1], list[clId].index[2]]; - var d = [distanceFunction(data[list[clId].index[0].index], data[list[clId].index[1].index]), distanceFunction(data[list[clId].index[1].index], data[list[clId].index[2].index])]; - list[clId].distance = (d[0] + d[1]) / 2; - } else { - var C = new Cluster(); - var sG = new Cluster(); - var splitting = [new Array(list[clId].index.length), []]; + case 'centroid': + case 'upgmc': + updateFunc = centroidLink; + break; - for (var spl = 0; spl < splitting[0].length; spl++) { - splitting[0][spl] = spl; - } + case 'median': + case 'wpgmc': + updateFunc = medianLink; + break; - for (var ii = 0; ii < splitting[0].length; ii++) { - dist = 0; + case 'ward': + updateFunc = wardLink; + break; - for (var jj = 0; jj < splitting[0].length; jj++) { - if (ii !== jj) { - dist += distanceFunction(data[list[clId].index[splitting[0][jj]].index], data[list[clId].index[splitting[0][ii]].index]); - } - } + case 'ward2': + updateFunc = wardLink2; + break; - dist /= splitting[0].length - 1; + default: + throw new RangeError("unknown clustering method: ".concat(method)); + } + } else if (typeof method !== 'function') { + throw new TypeError('method must be a string or function'); + } - if (dist > M) { - M = dist; - rebel = ii; + let clusters = []; + + for (let i = 0; i < numLeaves; i++) { + const cluster = new Cluster(); + cluster.isLeaf = true; + cluster.index = i; + clusters.push(cluster); + } + + for (let n = 0; n < numLeaves - 1; n++) { + const [row, column, distance] = getSmallestDistance(distanceMatrix$1); + const cluster1 = clusters[row]; + const cluster2 = clusters[column]; + const newCluster = new Cluster(); + newCluster.size = cluster1.size + cluster2.size; + newCluster.children.push(cluster1, cluster2); + newCluster.height = distance; + const newClusters = [newCluster]; + const newDistanceMatrix = new Matrix(distanceMatrix$1.rows - 1, distanceMatrix$1.rows - 1); + + const previous = newIndex => getPreviousIndex(newIndex, Math.min(row, column), Math.max(row, column)); + + for (let i = 1; i < newDistanceMatrix.rows; i++) { + const prevI = previous(i); + const prevICluster = clusters[prevI]; + newClusters.push(prevICluster); + + for (let j = 0; j < i; j++) { + if (j === 0) { + const dKI = distanceMatrix$1.get(row, prevI); + const dKJ = distanceMatrix$1.get(prevI, column); + const val = updateFunc(dKI, dKJ, distance, cluster1.size, cluster2.size, prevICluster.size); + newDistanceMatrix.set(i, j, val); + newDistanceMatrix.set(j, i, val); + } else { + // Just copy distance from previous matrix + const val = distanceMatrix$1.get(prevI, previous(j)); + newDistanceMatrix.set(i, j, val); + newDistanceMatrix.set(j, i, val); } } + } - splitting[1] = [rebel]; - splitting[0].splice(rebel, 1); - dist = diff(splitting, data, distanceFunction); - - while (dist.d > 0) { - splitting[1].push(splitting[0][dist.p]); - splitting[0].splice(dist.p, 1); - dist = diff(splitting, data, distanceFunction); - } - - var fData = new Array(splitting[0].length); - C.index = new Array(splitting[0].length); + clusters = newClusters; + distanceMatrix$1 = newDistanceMatrix; + } - for (var e = 0; e < fData.length; e++) { - fData[e] = data[list[clId].index[splitting[0][e]].index]; - C.index[e] = list[clId].index[splitting[0][e]]; - C.children[e] = list[clId].index[splitting[0][e]]; - } + return clusters[0]; + } - var sData = new Array(splitting[1].length); - sG.index = new Array(splitting[1].length); + function getSmallestDistance(distance) { + let smallest = Infinity; + let smallestI = 0; + let smallestJ = 0; - for (var f = 0; f < sData.length; f++) { - sData[f] = data[list[clId].index[splitting[1][f]].index]; - sG.index[f] = list[clId].index[splitting[1][f]]; - sG.children[f] = list[clId].index[splitting[1][f]]; + for (let i = 1; i < distance.rows; i++) { + for (let j = 0; j < i; j++) { + if (distance.get(i, j) < smallest) { + smallest = distance.get(i, j); + smallestI = i; + smallestJ = j; } - - C.distance = intrDist(C.index, data, distanceFunction); - sG.distance = intrDist(sG.index, data, distanceFunction); - list.push(C); - list.push(sG); - list[clId].children = [C, sG]; } - - list.splice(clId, 1); } - return tree; + return [smallestI, smallestJ, smallest]; + } + + function getPreviousIndex(newIndex, prev1, prev2) { + newIndex -= 1; + if (newIndex >= prev1) newIndex++; + if (newIndex >= prev2) newIndex++; + return newIndex; } + // export * from './birch'; // export * './cure'; // export * from './chameleon'; var index = /*#__PURE__*/Object.freeze({ - agnes: agnes, - diana: diana + agnes: agnes }); const defaultOptions$4 = { @@ -10840,13 +10718,13 @@ } - var src$2 = ConfusionMatrix; + var src$1 = ConfusionMatrix; const defaultOptions$6 = { mode: 'index' }; - var src$3 = function* src(M, N, options) { + var src$2 = function* src(M, N, options) { options = Object.assign({}, defaultOptions$6, options); var a = new Array(N); var c = new Array(M); @@ -10994,7 +10872,7 @@ const distinct = getDistinct(labels); const confusionMatrix = initMatrix(distinct.length, distinct.length); var N = features.length; - var gen = src$3(p, N); + var gen = src$2(p, N); var allIdx = new Array(N); for (let i = 0; i < N; i++) { @@ -11015,7 +10893,7 @@ } } - return new src$2(confusionMatrix, distinct); + return new src$1(confusionMatrix, distinct); }; /** * Performs k-fold cross-validation (KF-CV). KF-CV separates the data-set into k random equally sized partitions, and @@ -11082,7 +10960,7 @@ } } - return new src$2(confusionMatrix, distinct); + return new src$1(confusionMatrix, distinct); }; function check(features, labels) { @@ -11167,7 +11045,7 @@ }; } - var src$4 = CV; + var src$3 = CV; function logistic(val) { return 1 / (1 + Math.exp(-val)); @@ -12239,7 +12117,7 @@ return distance(zero, one); } - var src$5 = SOM; + var src$4 = SOM; function maybeToPrecision(value, digits) { if (value < 0) { @@ -13632,6 +13510,445 @@ }; } + /** + * Returns a new array based on extraction of specific indices of an array + * @private + * @param {Array} vector + * @param {Array} indices + */ + function selection(vector, indices) { + let u = []; //new Float64Array(indices.length); + + for (let i = 0; i < indices.length; i++) { + u[i] = vector[indices[i]]; + } + + return u; + } + + /** + * + * @private + * @param {Array of arrays} collection + */ + function sortCollectionSet(collection) { + let objectCollection = collection.map((value, index) => { + let key = BigInt(0); + value.forEach(item => key |= BigInt(1) << BigInt(item)); + return { + value, + index, + key + }; + }).sort((a, b) => { + if (a.key - b.key < 0) return -1; + return 1; + }); + let sorted = []; + let indices = []; + let key; + + for (let set of objectCollection) { + if (set.key !== key) { + key = set.key; + indices.push([]); + sorted.push(set.value); + } + + indices[indices.length - 1].push(set.index); + } + + let result = { + values: sorted, + indices: indices + }; + return result; + } + + /** + * (Combinatorial Subspace Least Squares) - subfunction for the FC-NNLS + * @private + * @param {Matrix} XtX + * @param {Matrix} XtY + * @param {Array} Pset + * @param {Numbers} l + * @param {Numbers} p + */ + + function cssls(XtX, XtY, Pset, l, p) { + // Solves the set of equation XtX*K = XtY for the variables in Pset + // if XtX (or XtX(vars,vars)) is singular, performs the svd and find pseudoinverse, otherwise (even if ill-conditioned) finds inverse with LU decomposition and solves the set of equation + // it is consistent with matlab results for ill-conditioned matrices (at least consistent with test 'ill-conditionned square X rank 2, Y 3x1' in cssls.test) + let K = Matrix.zeros(l, p); + + if (Pset === null) { + let choXtX = new CholeskyDecomposition(XtX); + + if (choXtX.isPositiveDefinite() === true) { + K = choXtX.solve(XtY); + } else { + let luXtX = new LuDecomposition(XtX); + + if (luXtX.isSingular() === false) { + K = luXtX.solve(Matrix.eye(l)).mmul(XtY); + } else { + K = solve(XtX, XtY, { + useSVD: true + }); + } + } + } else { + let sortedPset = sortCollectionSet(Pset).values; + let sortedEset = sortCollectionSet(Pset).indices; + + if (sortedPset.length === 1 && sortedPset[0].length === 0 && sortedEset[0].length === p) { + return K; + } else if (sortedPset.length === 1 && sortedPset[0].length === l && sortedEset[0].length === p) { + let choXtX = new CholeskyDecomposition(XtX); + + if (choXtX.isPositiveDefinite() === true) { + K = choXtX.solve(XtY); + } else { + let luXtX = new LuDecomposition(XtX); + + if (luXtX.isSingular() === false) { + K = luXtX.solve(Matrix.eye(l)).mmul(XtY); + } else { + K = solve(XtX, XtY, { + useSVD: true + }); + } + } + } else { + for (let k = 0; k < sortedPset.length; k++) { + let cols2Solve = sortedEset[k]; + let vars = sortedPset[k]; + let L; + let choXtX = new CholeskyDecomposition(XtX.selection(vars, vars)); + + if (choXtX.isPositiveDefinite() === true) { + L = choXtX.solve(XtY.selection(vars, cols2Solve)); + } else { + let luXtX = new LuDecomposition(XtX.selection(vars, vars)); + + if (luXtX.isSingular() === false) { + L = luXtX.solve(Matrix.eye(vars.length)).mmul(XtY.selection(vars, cols2Solve)); + } else { + L = solve(XtX.selection(vars, vars), XtY.selection(vars, cols2Solve), { + useSVD: true + }); + } + } + + for (let i = 0; i < L.rows; i++) { + for (let j = 0; j < L.columns; j++) { + K.set(vars[i], cols2Solve[j], L.get(i, j)); + } + } + } + } + } + + return K; + } + + function initialisation(X, Y) { + let n = X.rows; + let l = X.columns; + let p = Y.columns; + let iter = 0; + if (Y.rows !== n) throw new Error('ERROR: matrix size not compatible'); + let W = Matrix.zeros(l, p); // precomputes part of pseudoinverse + + let XtX = X.transpose().mmul(X); + let XtY = X.transpose().mmul(Y); + let K = cssls(XtX, XtY, null, l, p); // K is lxp + + let Pset = []; + + for (let j = 0; j < p; j++) { + Pset[j] = []; + + for (let i = 0; i < l; i++) { + if (K.get(i, j) > 0) { + Pset[j].push(i); + } else { + K.set(i, j, 0); + } //This is our initial solution, it's the solution found by overwriting the unconstrained least square solution + + } + } + + let Fset = []; + + for (let j = 0; j < p; j++) { + if (Pset[j].length !== l) { + Fset.push(j); + } + } + + let D = K.clone(); + return { + n, + l, + p, + iter, + W, + XtX, + XtY, + K, + Pset, + Fset, + D + }; + } + + /** + * Computes the set difference A\B + * @private + * @param {A} set A as an array + * @param {B} set B as an array + */ + function setDifference(A, B) { + let C = []; + + for (let i of A) { + if (!B.includes(i)) C.push(i); + } + + return C; + } + + function optimality(iter, maxIter, XtX, XtY, Fset, Pset, W, K, l, p, D) { + if (iter === maxIter) { + throw new Error('Maximum number of iterations exceeded'); + } // Check solution for optimality + + + let V = XtY.subMatrixColumn(Fset).subtract(XtX.mmul(K.subMatrixColumn(Fset))); + + for (let j = 0; j < Fset.length; j++) { + W.setColumn(Fset[j], V.subMatrixColumn([j])); + } + + let Jset = []; + let fullSet = []; + + for (let i = 0; i < l; i++) { + fullSet.push(i); + } + + for (let j = 0; j < Fset.length; j++) { + let notPset = setDifference(fullSet, Pset[Fset[j]]); + + if (notPset.length === 0) { + Jset.push(Fset[j]); + } else if (W.selection(notPset, [Fset[j]]).max() <= 0) { + Jset.push(Fset[j]); + } + } + + Fset = setDifference(Fset, Jset); // For non-optimal solutions, add the appropriate variables to Pset + + if (Fset.length !== 0) { + for (let j = 0; j < Fset.length; j++) { + for (let i = 0; i < l; i++) { + if (Pset[Fset[j]].includes(i)) W.set(i, Fset[j], -Infinity); + } + + Pset[Fset[j]].push(W.subMatrixColumn(Fset).maxColumnIndex(j)[0]); + } + + for (let j = 0; j < Fset.length; j++) { + D.setColumn(Fset[j], K.getColumn(Fset[j])); + } + } + + for (let j = 0; j < p; j++) { + Pset[j].sort((a, b) => a - b); + } + + return { + Pset, + Fset, + W + }; + } + + /** + * Fast Combinatorial Non-negative Least Squares with multiple Right Hand Side + * @param {Matrix|number[][]} X + * @param {Matrix|number[][]} Y + * @param {object} [options={}] + * @param {number} [options.maxIterations] if empty maxIterations is set at 3 times the number of columns of X + * @returns {Matrix} K + */ + + function fcnnls(X, Y) { + let options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; + X = Matrix.checkMatrix(X); + Y = Matrix.checkMatrix(Y); + let { + l, + p, + iter, + W, + XtX, + XtY, + K, + Pset, + Fset, + D + } = initialisation(X, Y); + const { + maxIterations = X.columns * 3 + } = options; // Active set algorithm for NNLS main loop + + while (Fset.length > 0) { + // Solves for the passive variables (uses subroutine below) + let L = cssls(XtX, XtY.subMatrixColumn(Fset), selection(Pset, Fset), l, Fset.length); + + for (let i = 0; i < l; i++) { + for (let j = 0; j < Fset.length; j++) { + K.set(i, Fset[j], L.get(i, j)); + } + } // Finds any infeasible solutions + + + let infeasIndex = []; + + for (let j = 0; j < Fset.length; j++) { + for (let i = 0; i < l; i++) { + if (L.get(i, j) < 0) { + infeasIndex.push(j); + break; + } + } + } + + let Hset = selection(Fset, infeasIndex); // Makes infeasible solutions feasible (standard NNLS inner loop) + + if (Hset.length > 0) { + let m = Hset.length; + let alpha = Matrix.ones(l, m); + + while (m > 0 && iter < maxIterations) { + iter++; + alpha.mul(Infinity); // Finds indices of negative variables in passive set + + let hRowColIdx = [[], []]; // Indexes work in pairs, each pair reprensents a single element, first array is row index, second array is column index + + let negRowColIdx = [[], []]; // Same as before + + for (let j = 0; j < m; j++) { + for (let i = 0; i < Pset[Hset[j]].length; i++) { + if (K.get(Pset[Hset[j]][i], Hset[j]) < 0) { + hRowColIdx[0].push(Pset[Hset[j]][i]); // i + + hRowColIdx[1].push(j); + negRowColIdx[0].push(Pset[Hset[j]][i]); // i + + negRowColIdx[1].push(Hset[j]); + } // Compared to matlab, here we keep the row/column indexing (we are not taking the linear indexing) + + } + } + + for (let k = 0; k < hRowColIdx[0].length; k++) { + // could be hRowColIdx[1].length as well + alpha.set(hRowColIdx[0][k], hRowColIdx[1][k], D.get(negRowColIdx[0][k], negRowColIdx[1][k]) / (D.get(negRowColIdx[0][k], negRowColIdx[1][k]) - K.get(negRowColIdx[0][k], negRowColIdx[1][k]))); + } + + let alphaMin = []; + let minIdx = []; + + for (let j = 0; j < m; j++) { + alphaMin[j] = alpha.minColumn(j); + minIdx[j] = alpha.minColumnIndex(j)[0]; + } + + alphaMin = Matrix.rowVector(alphaMin); + + for (let i = 0; i < l; i++) { + alpha.setSubMatrix(alphaMin, i, 0); + } + + let E = new Matrix(l, m); + E = D.subMatrixColumn(Hset).subtract(alpha.subMatrix(0, l - 1, 0, m - 1).mul(D.subMatrixColumn(Hset).subtract(K.subMatrixColumn(Hset)))); + + for (let j = 0; j < m; j++) { + D.setColumn(Hset[j], E.subMatrixColumn([j])); + } + + let idx2zero = [minIdx, Hset]; + + for (let k = 0; k < m; k++) { + D.set(idx2zero[0][k], idx2zero[1][k], 0); + } + + for (let j = 0; j < m; j++) { + Pset[Hset[j]].splice(Pset[Hset[j]].findIndex(item => item === minIdx[j]), 1); + } + + L = cssls(XtX, XtY.subMatrixColumn(Hset), selection(Pset, Hset), l, m); + + for (let j = 0; j < m; j++) { + K.setColumn(Hset[j], L.subMatrixColumn([j])); + } + + Hset = []; + + for (let j = 0; j < K.columns; j++) { + for (let i = 0; i < l; i++) { + if (K.get(i, j) < 0) { + Hset.push(j); + break; + } + } + } + + m = Hset.length; + } + } + + let newParam = optimality(iter, maxIterations, XtX, XtY, Fset, Pset, W, K, l, p, D); + Pset = newParam.Pset; + Fset = newParam.Fset; + W = newParam.W; + } + + return K; + } + + /** + * Fast Combinatorial Non-negative Least Squares with single Right Hand Side + * @param {Matrix|number[][]} X + * @param {number[]} y + * @param {object} [options={}] + * @param {boolean} [maxIterations] if true or empty maxIterations is set at 3 times the number of columns of X + * @returns {Array} k + */ + + function fcnnlsVector(X, y) { + let options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; + + if (Array.isArray(y) === false) { + throw new TypeError('y must be a 1D Array'); + } + + let Y = Matrix.columnVector(y); + let K = fcnnls(X, Y, options); + let k = K.to1DArray(); + return k; + } + + + + var index$2 = /*#__PURE__*/Object.freeze({ + fcnnls: fcnnls, + fcnnlsVector: fcnnlsVector + }); + var binarySearch = function binarySearch(haystack, needle, comparator, low, high) { var mid, cmp; if (low === undefined) low = 0;else { @@ -13644,19 +13961,17 @@ } while (low <= high) { - /* Note that "(low + high) >>> 1" may overflow, and results in a typecast - * to double (which gives the wrong results). */ - mid = low + (high - low >> 1); - cmp = +comparator(haystack[mid], needle, mid, haystack); - /* Too low. */ - - if (cmp < 0.0) low = mid + 1; - /* Too high. */ - else if (cmp > 0.0) high = mid - 1; - /* Key found. */ + // The naive `low + high >>> 1` could fail for array lengths > 2**31 + // because `>>>` converts its operands to int32. `low + (high - low >>> 1)` + // works for array lengths <= 2**32-1 which is also Javascript's max array + // length. + mid = low + (high - low >>> 1); + cmp = +comparator(haystack[mid], needle, mid, haystack); // Too low. + + if (cmp < 0.0) low = mid + 1; // Too high. + else if (cmp > 0.0) high = mid - 1; // Key found. else return mid; - } - /* Key not found. */ + } // Key not found. return ~low; @@ -13685,7 +14000,7 @@ descending: descending }; - var index$2 = /*#__PURE__*/Object.freeze({ + var index$3 = /*#__PURE__*/Object.freeze({ 'default': numSort, __moduleExports: numSort, ascending: ascending, @@ -15037,7 +15352,7 @@ return (A, B) => getSimilarity(A, B, options); } - var index$3 = /*#__PURE__*/Object.freeze({ + var index$4 = /*#__PURE__*/Object.freeze({ treeSimilarity: treeSimilarity, getFunction: getFunction, createTree: createTree @@ -15099,7 +15414,7 @@ var similarities = /*#__PURE__*/Object.freeze({ - tree: index$3, + tree: index$4, cosine: cosine, czekanowski: czekanowskiSimilarity, dice: dice$1, @@ -15524,7 +15839,7 @@ rnp: 'Rate of negative predictions', threshold: 'Threshold' }; - var src$6 = Performance; + var src$5 = Performance; var defaultOptions$h = { size: 1, @@ -15623,7 +15938,7 @@ } } - var src$7 = padArray; + var src$6 = padArray; const { Matrix: Matrix$2, @@ -15664,7 +15979,7 @@ var step = Math.floor(options.windowSize / 2); if (options.pad === 'pre') { - data = src$7(data, { + data = src$6(data, { size: step, value: options.padValue }); @@ -15708,7 +16023,7 @@ } if (options.pad === 'post') { - ans = src$7(ans, { + ans = src$6(ans, { size: step, value: options.padValue }); @@ -15717,7 +16032,7 @@ return ans; } - var src$8 = SavitzkyGolay; + var src$7 = SavitzkyGolay; // auxiliary file to create the 256 look at table elements var ans = new Array(256); @@ -15933,7 +16248,7 @@ return str; } - var src$9 = { + var src$8 = { count: count, and: and, or: or, @@ -17012,15 +17327,16 @@ exports.Array = Array$1; exports.ArrayXY = ArrayXY; - exports.BitArray = src$9; + exports.BitArray = src$8; exports.CholeskyDecomposition = CholeskyDecomposition$1; - exports.ConfusionMatrix = src$2; - exports.CrossValidation = src$4; + exports.ConfusionMatrix = src$1; + exports.CrossValidation = src$3; exports.DecisionTreeClassifier = DecisionTreeClassifier; exports.DecisionTreeRegression = DecisionTreeRegression; exports.Distance = distances; exports.EVD = EVD; exports.ExponentialRegression = ExponentialRegression; + exports.FCNNLS = index$2; exports.FNN = FeedForwardNeuralNetwork; exports.HClust = index; exports.HashTable = HashTable; @@ -17035,7 +17351,7 @@ exports.NaiveBayes = index$1; exports.PCA = PCA; exports.PLS = PLS; - exports.Performance = src$6; + exports.Performance = src$5; exports.PolynomialRegression = PolynomialRegression; exports.PowerRegression = PowerRegression; exports.QrDecomposition = QrDecomposition$1; @@ -17043,7 +17359,7 @@ exports.RandomForestClassifier = RandomForestClassifier; exports.RandomForestRegression = RandomForestRegression; exports.RobustPolynomialRegression = RobustPolynomialRegression; - exports.SOM = src$5; + exports.SOM = src$4; exports.SVD = SVD; exports.Similarity = similarities; exports.SimpleLinearRegression = SimpleLinearRegression; @@ -17051,11 +17367,11 @@ exports.TheilSenRegression = TheilSenRegression; exports.XSadd = XSadd; exports.binarySearch = binarySearch; - exports.distanceMatrix = src$1; + exports.distanceMatrix = distanceMatrix; exports.levenbergMarquardt = levenbergMarquardt; - exports.numSort = index$2; - exports.padArray = src$7; - exports.savitzkyGolay = src$8; + exports.numSort = index$3; + exports.padArray = src$6; + exports.savitzkyGolay = src$7; Object.defineProperty(exports, '__esModule', { value: true }); diff --git a/dist/ml.js.map b/dist/ml.js.map index 51b05d0..8114881 100644 --- a/dist/ml.js.map +++ b/dist/ml.js.map @@ -1 +1 @@ -{"version":3,"file":"ml.js","sources":["../node_modules/is-any-array/src/index.js","../node_modules/ml-array-max/lib-es6/index.js","../node_modules/ml-array-min/lib-es6/index.js","../node_modules/ml-array-rescale/lib-es6/index.js","../node_modules/ml-matrix/src/util.js","../node_modules/ml-matrix/src/stat.js","../node_modules/ml-matrix/src/inspect.js","../node_modules/ml-matrix/src/mathOperations.js","../node_modules/ml-matrix/src/matrix.js","../node_modules/ml-matrix/src/views/base.js","../node_modules/ml-matrix/src/views/column.js","../node_modules/ml-matrix/src/views/columnSelection.js","../node_modules/ml-matrix/src/views/flipColumn.js","../node_modules/ml-matrix/src/views/flipRow.js","../node_modules/ml-matrix/src/views/row.js","../node_modules/ml-matrix/src/views/rowSelection.js","../node_modules/ml-matrix/src/views/selection.js","../node_modules/ml-matrix/src/views/sub.js","../node_modules/ml-matrix/src/views/transpose.js","../node_modules/ml-matrix/src/wrap/WrapperMatrix1D.js","../node_modules/ml-matrix/src/wrap/WrapperMatrix2D.js","../node_modules/ml-matrix/src/wrap/wrap.js","../node_modules/ml-matrix/src/dc/lu.js","../node_modules/ml-matrix/src/dc/util.js","../node_modules/ml-matrix/src/dc/qr.js","../node_modules/ml-matrix/src/dc/svd.js","../node_modules/ml-matrix/src/decompositions.js","../node_modules/ml-matrix/src/determinant.js","../node_modules/ml-matrix/src/linearDependencies.js","../node_modules/ml-matrix/src/pseudoInverse.js","../node_modules/ml-matrix/src/covariance.js","../node_modules/ml-matrix/src/correlation.js","../node_modules/ml-matrix/src/dc/evd.js","../node_modules/ml-matrix/src/dc/cholesky.js","../node_modules/ml-array-mean/lib-es6/index.js","../node_modules/ml-cart/src/utils.js","../node_modules/ml-cart/src/TreeNode.js","../node_modules/ml-cart/src/DecisionTreeClassifier.js","../node_modules/ml-cart/src/DecisionTreeRegression.js","../node_modules/random-js/dist/random-js.esm.js","../node_modules/ml-random-forest/src/utils.js","../node_modules/ml-random-forest/src/RandomForestBase.js","../node_modules/ml-random-forest/src/RandomForestClassifier.js","../node_modules/median-quickselect/lib/median-quickselect.min.js","../node_modules/ml-array-median/lib-es6/index.js","../node_modules/ml-random-forest/src/RandomForestRegression.js","../node_modules/ml-pca/src/pca.js","../node_modules/ml-distance-euclidean/lib-es6/euclidean.js","../node_modules/ml-distance-matrix/src/index.js","../node_modules/heap/lib/heap.js","../node_modules/heap/index.js","../node_modules/ml-hclust/src/Cluster.js","../node_modules/ml-hclust/src/ClusterLeaf.js","../node_modules/ml-hclust/src/agnes.js","../node_modules/ml-hclust/src/diana.js","../node_modules/ml-hclust/src/index.js","../node_modules/ml-nearest-vector/lib-es6/index.js","../node_modules/ml-kmeans/src/utils.js","../node_modules/ml-xsadd/lib-es6/xsadd.js","../node_modules/ml-random/lib-es6/choice.js","../node_modules/ml-random/lib-es6/index.js","../node_modules/ml-kmeans/src/initialization.js","../node_modules/ml-kmeans/src/KMeansResult.js","../node_modules/ml-kmeans/src/kmeans.js","../node_modules/ml-naivebayes/src/utils.js","../node_modules/ml-naivebayes/src/GaussianNB.js","../node_modules/ml-naivebayes/src/MultinomialNB.js","../node_modules/ml-knn/src/KDTree.js","../node_modules/ml-knn/src/index.js","../node_modules/ml-pls/src/utils.js","../node_modules/ml-pls/src/pls.js","../node_modules/ml-pls/src/kopls.js","../node_modules/ml-confusion-matrix/src/index.js","../node_modules/ml-combinations/src/index.js","../node_modules/ml-cross-validation/src/index.js","../node_modules/ml-fnn/FeedForwardNeuralNetwork.js","../node_modules/ml-som/src/node-square.js","../node_modules/ml-som/src/node-hexagonal.js","../node_modules/ml-som/src/index.js","../node_modules/ml-regression-base/src/maybeToPrecision.js","../node_modules/ml-regression-base/src/checkArrayLength.js","../node_modules/ml-regression-base/src/index.js","../node_modules/ml-regression-polynomial/src/index.js","../node_modules/ml-regression-simple-linear/src/index.js","../node_modules/ml-regression-exponential/src/index.js","../node_modules/ml-regression-power/src/index.js","../node_modules/ml-regression-multivariate-linear/src/index.js","../node_modules/ml-kernel-gaussian/gaussian-kernel.js","../node_modules/ml-kernel-polynomial/polynomial-kernel.js","../node_modules/ml-kernel-sigmoid/sigmoid-kernel.js","../node_modules/ml-kernel/src/kernels/anova-kernel.js","../node_modules/ml-kernel/src/kernels/cauchy-kernel.js","../node_modules/ml-kernel/src/kernels/exponential-kernel.js","../node_modules/ml-kernel/src/kernels/histogram-intersection-kernel.js","../node_modules/ml-kernel/src/kernels/laplacian-kernel.js","../node_modules/ml-kernel/src/kernels/multiquadratic-kernel.js","../node_modules/ml-kernel/src/kernels/rational-quadratic-kernel.js","../node_modules/ml-kernel/src/kernel.js","../node_modules/ml-regression-theil-sen/src/index.js","../node_modules/ml-regression-robust-polynomial/src/index.js","../node_modules/ml-levenberg-marquardt/src/errorCalculation.js","../node_modules/ml-levenberg-marquardt/src/step.js","../node_modules/ml-levenberg-marquardt/src/index.js","../node_modules/binary-search/index.js","../node_modules/num-sort/index.js","../node_modules/ml-hash-table/src/primeFinder.js","../node_modules/ml-hash-table/src/HashTable.js","../node_modules/ml-sparse-matrix/src/index.js","../node_modules/ml-distance/src/distances/additiveSymmetric.js","../node_modules/ml-distance/src/distances/avg.js","../node_modules/ml-distance/src/distances/bhattacharyya.js","../node_modules/ml-distance/src/distances/canberra.js","../node_modules/ml-distance/src/distances/chebyshev.js","../node_modules/ml-distance/src/distances/clark.js","../node_modules/ml-distance/src/similarities/czekanowski.js","../node_modules/ml-distance/src/distances/czekanowski.js","../node_modules/ml-distance/src/distances/dice.js","../node_modules/ml-distance/src/distances/divergence.js","../node_modules/ml-distance/src/distances/fidelity.js","../node_modules/ml-distance/src/distances/gower.js","../node_modules/ml-distance/src/distances/harmonicMean.js","../node_modules/ml-distance/src/distances/hellinger.js","../node_modules/ml-distance/src/distances/innerProduct.js","../node_modules/ml-distance/src/distances/intersection.js","../node_modules/ml-distance/src/distances/jaccard.js","../node_modules/ml-distance/src/distances/jeffreys.js","../node_modules/ml-distance/src/distances/jensenDifference.js","../node_modules/ml-distance/src/distances/jensenShannon.js","../node_modules/ml-distance/src/distances/kdivergence.js","../node_modules/ml-distance/src/distances/kulczynski.js","../node_modules/ml-distance/src/distances/kullbackLeibler.js","../node_modules/ml-distance/src/distances/kumarHassebrook.js","../node_modules/ml-distance/src/distances/kumarJohnson.js","../node_modules/ml-distance/src/distances/lorentzian.js","../node_modules/ml-distance/src/distances/manhattan.js","../node_modules/ml-distance/src/distances/matusita.js","../node_modules/ml-distance/src/distances/minkowski.js","../node_modules/ml-distance/src/distances/motyka.js","../node_modules/ml-distance/src/distances/neyman.js","../node_modules/ml-distance/src/distances/pearson.js","../node_modules/ml-distance/src/distances/probabilisticSymmetric.js","../node_modules/ml-distance/src/distances/ruzicka.js","../node_modules/ml-distance/src/distances/soergel.js","../node_modules/ml-distance/src/distances/sorensen.js","../node_modules/ml-distance/src/distances/squared.js","../node_modules/ml-distance/src/distances/squaredChord.js","../node_modules/ml-distance/src/distances/taneja.js","../node_modules/ml-distance/src/similarities/tanimoto.js","../node_modules/ml-distance/src/distances/tanimoto.js","../node_modules/ml-distance/src/distances/topsoe.js","../node_modules/ml-distance/src/distances/waveHedges.js","../node_modules/ml-tree-similarity/src/createTree.js","../node_modules/ml-tree-similarity/src/getSimilarity.js","../node_modules/ml-tree-similarity/src/index.js","../node_modules/ml-distance/src/similarities/cosine.js","../node_modules/ml-distance/src/similarities/dice.js","../node_modules/ml-distance/src/similarities/intersection.js","../node_modules/ml-distance/src/similarities/jaccard.js","../node_modules/ml-distance/src/similarities/kulczynski.js","../node_modules/ml-distance/src/similarities/motyka.js","../node_modules/ml-distance/src/similarities/pearson.js","../node_modules/ml-distance/src/similarities/squaredChord.js","../node_modules/ml-performance/src/measures.js","../node_modules/ml-performance/src/index.js","../node_modules/ml-pad-array/src/index.js","../node_modules/ml-savitzky-golay/src/index.js","../node_modules/ml-bit-array/src/creator.js","../node_modules/ml-bit-array/src/index.js","../node_modules/ml-array-mode/lib-es6/index.js","../node_modules/ml-array-normed/lib-es6/index.js","../node_modules/ml-array-sequential-fill/lib-es6/index.js","../node_modules/ml-array-variance/lib-es6/index.js","../node_modules/ml-array-standard-deviation/lib-es6/index.js","../node_modules/ml-array-xy-centroids-merge/src/index.js","../node_modules/ml-arrayxy-closestx/src/index.js","../node_modules/ml-array-xy-max-merge/src/index.js","../node_modules/ml-array-xy-max-y/src/index.js","../node_modules/ml-array-xy-sort-x/src/index.js","../node_modules/ml-arrayxy-uniquex/src/index.js","../node_modules/ml-array-xy-weighted-merge/src/index.js","../node_modules/ml-array-xy-equally-spaced/src/integral.js","../node_modules/ml-array-xy-equally-spaced/src/equallySpacedSmooth.js","../node_modules/ml-array-xy-equally-spaced/src/equallySpacedSlot.js","../node_modules/ml-array-xy-equally-spaced/src/getZones.js","../node_modules/ml-array-xy-equally-spaced/src/index.js","../node_modules/ml-array-xy-filter-x/src/getZones.js","../node_modules/ml-array-xy-filter-x/src/index.js","../src/index.js"],"sourcesContent":["'use strict';\n\nconst toString = Object.prototype.toString;\n\nfunction isAnyArray(object) {\n return toString.call(object).endsWith('Array]');\n}\n\nmodule.exports = isAnyArray;\n","import isArray from 'is-any-array';\n\n/**\n * Computes the maximum of the given values\n * @param {Array} input\n * @return {number}\n */\n\nfunction max(input) {\n if (!isArray(input)) {\n throw new TypeError('input must be an array');\n }\n\n if (input.length === 0) {\n throw new TypeError('input must not be empty');\n }\n\n var max = input[0];\n\n for (var i = 1; i < input.length; i++) {\n if (input[i] > max) max = input[i];\n }\n\n return max;\n}\n\nexport default max;\n","import isArray from 'is-any-array';\n\n/**\n * Computes the minimum of the given values\n * @param {Array} input\n * @return {number}\n */\n\nfunction min(input) {\n if (!isArray(input)) {\n throw new TypeError('input must be an array');\n }\n\n if (input.length === 0) {\n throw new TypeError('input must not be empty');\n }\n\n var min = input[0];\n\n for (var i = 1; i < input.length; i++) {\n if (input[i] < min) min = input[i];\n }\n\n return min;\n}\n\nexport default min;\n","import max from 'ml-array-max';\nimport min from 'ml-array-min';\nimport isArray from 'is-any-array';\n\nfunction rescale(input) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n if (!isArray(input)) {\n throw new TypeError('input must be an array');\n } else if (input.length === 0) {\n throw new TypeError('input must not be empty');\n }\n\n var output;\n\n if (options.output !== undefined) {\n if (!isArray(options.output)) {\n throw new TypeError('output option must be an array if specified');\n }\n\n output = options.output;\n } else {\n output = new Array(input.length);\n }\n\n var currentMin = min(input);\n var currentMax = max(input);\n\n if (currentMin === currentMax) {\n throw new RangeError('minimum and maximum input values are equal. Cannot rescale a constant array');\n }\n\n var _options$min = options.min,\n minValue = _options$min === void 0 ? options.autoMinMax ? currentMin : 0 : _options$min,\n _options$max = options.max,\n maxValue = _options$max === void 0 ? options.autoMinMax ? currentMax : 1 : _options$max;\n\n if (minValue >= maxValue) {\n throw new RangeError('min option must be smaller than max option');\n }\n\n var factor = (maxValue - minValue) / (currentMax - currentMin);\n\n for (var i = 0; i < input.length; i++) {\n output[i] = (input[i] - currentMin) * factor + minValue;\n }\n\n return output;\n}\n\nexport default rescale;\n","/**\n * @private\n * Check that a row index is not out of bounds\n * @param {Matrix} matrix\n * @param {number} index\n * @param {boolean} [outer]\n */\nexport function checkRowIndex(matrix, index, outer) {\n var 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 var 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 var 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 var 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 var array = [];\n for (var i = 0; i < length; i++) {\n array.push(value);\n }\n return array;\n}\n\nfunction checkNumber(name, value) {\n if (typeof value !== 'number') {\n throw new TypeError(`${name} must be a number`);\n }\n}\n","import { newArray } from './util';\n\nexport function sumByRow(matrix) {\n var sum = newArray(matrix.rows);\n for (var i = 0; i < matrix.rows; ++i) {\n for (var 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 var sum = newArray(matrix.columns);\n for (var i = 0; i < matrix.rows; ++i) {\n for (var 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 var v = 0;\n for (var i = 0; i < matrix.rows; i++) {\n for (var j = 0; j < matrix.columns; j++) {\n v += matrix.get(i, j);\n }\n }\n return v;\n}\n\nexport function productByRow(matrix) {\n var sum = newArray(matrix.rows, 1);\n for (var i = 0; i < matrix.rows; ++i) {\n for (var 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 var sum = newArray(matrix.columns, 1);\n for (var i = 0; i < matrix.rows; ++i) {\n for (var 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 var v = 1;\n for (var i = 0; i < matrix.rows; i++) {\n for (var 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 (var i = 0; i < rows; i++) {\n var sum1 = 0;\n var sum2 = 0;\n var x = 0;\n for (var 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 (var j = 0; j < cols; j++) {\n var sum1 = 0;\n var sum2 = 0;\n var x = 0;\n for (var 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 var sum1 = 0;\n var sum2 = 0;\n var x = 0;\n for (var i = 0; i < rows; i++) {\n for (var j = 0; j < cols; j++) {\n x = matrix.get(i, j) - mean;\n sum1 += x;\n sum2 += x * x;\n }\n }\n if (unbiased) {\n return (sum2 - (sum1 * sum1) / size) / (size - 1);\n } else {\n return (sum2 - (sum1 * sum1) / size) / size;\n }\n}\n\nexport function centerByRow(matrix, mean) {\n for (let i = 0; i < matrix.rows; i++) {\n for (let j = 0; j < matrix.columns; j++) {\n matrix.set(i, j, matrix.get(i, j) - mean[i]);\n }\n }\n}\n\nexport function centerByColumn(matrix, mean) {\n for (let i = 0; i < matrix.rows; i++) {\n for (let j = 0; j < matrix.columns; j++) {\n matrix.set(i, j, matrix.get(i, j) - mean[j]);\n }\n }\n}\n\nexport function centerAll(matrix, mean) {\n for (let i = 0; i < matrix.rows; i++) {\n for (let j = 0; j < matrix.columns; j++) {\n matrix.set(i, j, matrix.get(i, j) - mean);\n }\n }\n}\n\nexport function getScaleByRow(matrix) {\n const scale = [];\n for (let i = 0; i < matrix.rows; i++) {\n let sum = 0;\n for (let j = 0; j < matrix.columns; j++) {\n sum += Math.pow(matrix.get(i, j), 2) / (matrix.columns - 1);\n }\n scale.push(Math.sqrt(sum));\n }\n return scale;\n}\n\nexport function scaleByRow(matrix, scale) {\n for (let i = 0; i < matrix.rows; i++) {\n for (let j = 0; j < matrix.columns; j++) {\n matrix.set(i, j, matrix.get(i, j) / scale[i]);\n }\n }\n}\n\nexport function getScaleByColumn(matrix) {\n const scale = [];\n for (let j = 0; j < matrix.columns; j++) {\n let sum = 0;\n for (let i = 0; i < matrix.rows; i++) {\n sum += Math.pow(matrix.get(i, j), 2) / (matrix.rows - 1);\n }\n scale.push(Math.sqrt(sum));\n }\n return scale;\n}\n\nexport function scaleByColumn(matrix, scale) {\n for (let i = 0; i < matrix.rows; i++) {\n for (let j = 0; j < matrix.columns; j++) {\n matrix.set(i, j, matrix.get(i, j) / scale[j]);\n }\n }\n}\n\nexport function getScaleAll(matrix) {\n const divider = matrix.size - 1;\n let sum = 0;\n for (let j = 0; j < matrix.columns; j++) {\n for (let i = 0; i < matrix.rows; i++) {\n sum += Math.pow(matrix.get(i, j), 2) / divider;\n }\n }\n return Math.sqrt(sum);\n}\n\nexport function scaleAll(matrix, scale) {\n for (let i = 0; i < matrix.rows; i++) {\n for (let j = 0; j < matrix.columns; j++) {\n matrix.set(i, j, matrix.get(i, j) / scale);\n }\n }\n}\n","export function inspectMatrix() {\n const indent = ' '.repeat(2);\n const indentData = ' '.repeat(4);\n return `${this.constructor.name} {\n${indent}[\n${indentData}${inspectData(this, indentData)}\n${indent}]\n${indent}rows: ${this.rows}\n${indent}columns: ${this.columns}\n}`;\n}\n\nconst maxRows = 15;\nconst maxColumns = 10;\nconst maxNumSize = 8;\n\nfunction inspectData(matrix, indent) {\n const { rows, columns } = matrix;\n const maxI = Math.min(rows, maxRows);\n const maxJ = Math.min(columns, maxColumns);\n const result = [];\n for (var i = 0; i < maxI; i++) {\n let line = [];\n for (var j = 0; j < maxJ; j++) {\n line.push(formatNumber(matrix.get(i, j)));\n }\n result.push(`${line.join(' ')}`);\n }\n if (maxJ !== columns) {\n result[result.length - 1] += ` ... ${columns - maxColumns} more columns`;\n }\n if (maxI !== rows) {\n result.push(`... ${rows - maxRows} more rows`);\n }\n return result.join(`\\n${indent}`);\n}\n\nfunction formatNumber(num) {\n const numStr = String(num);\n if (numStr.length <= maxNumSize) {\n return numStr.padEnd(maxNumSize, ' ');\n }\n const precise = num.toPrecision(maxNumSize - 2);\n if (precise.length <= maxNumSize) {\n return precise;\n }\n const exponential = num.toExponential(maxNumSize - 2);\n const eIndex = exponential.indexOf('e');\n const e = exponential.substring(eIndex);\n return exponential.substring(0, maxNumSize - e.length) + e;\n}\n","export function installMathOperations(AbstractMatrix, Matrix) {\n AbstractMatrix.prototype.add = function add(value) {\n if (typeof value === 'number') return this.addS(value);\n return this.addM(value);\n };\n\n AbstractMatrix.prototype.addS = function addS(value) {\n for (var i = 0; i < this.rows; i++) {\n for (var 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 (var i = 0; i < this.rows; i++) {\n for (var 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 var 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 (var i = 0; i < this.rows; i++) {\n for (var 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 (var i = 0; i < this.rows; i++) {\n for (var 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 var 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 (var i = 0; i < this.rows; i++) {\n for (var 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 (var i = 0; i < this.rows; i++) {\n for (var 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 var 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 (var i = 0; i < this.rows; i++) {\n for (var 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 (var i = 0; i < this.rows; i++) {\n for (var 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 var 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 (var i = 0; i < this.rows; i++) {\n for (var 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 (var i = 0; i < this.rows; i++) {\n for (var 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 var 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 (var i = 0; i < this.rows; i++) {\n for (var 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 (var i = 0; i < this.rows; i++) {\n for (var 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 var 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 (var i = 0; i < this.rows; i++) {\n for (var 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 (var i = 0; i < this.rows; i++) {\n for (var 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 var 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 (var i = 0; i < this.rows; i++) {\n for (var 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 (var i = 0; i < this.rows; i++) {\n for (var 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 var 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 (var i = 0; i < this.rows; i++) {\n for (var 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 (var i = 0; i < this.rows; i++) {\n for (var 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 var 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 (var i = 0; i < this.rows; i++) {\n for (var 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 (var i = 0; i < this.rows; i++) {\n for (var 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 var 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 (var i = 0; i < this.rows; i++) {\n for (var 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 (var i = 0; i < this.rows; i++) {\n for (var 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 var 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 (var i = 0; i < this.rows; i++) {\n for (var 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 var newMatrix = new Matrix(matrix);\n return newMatrix.not();\n };\n\n AbstractMatrix.prototype.abs = function abs() {\n for (var i = 0; i < this.rows; i++) {\n for (var 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 var newMatrix = new Matrix(matrix);\n return newMatrix.abs();\n };\n\n AbstractMatrix.prototype.acos = function acos() {\n for (var i = 0; i < this.rows; i++) {\n for (var 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 var newMatrix = new Matrix(matrix);\n return newMatrix.acos();\n };\n\n AbstractMatrix.prototype.acosh = function acosh() {\n for (var i = 0; i < this.rows; i++) {\n for (var 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 var newMatrix = new Matrix(matrix);\n return newMatrix.acosh();\n };\n\n AbstractMatrix.prototype.asin = function asin() {\n for (var i = 0; i < this.rows; i++) {\n for (var 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 var newMatrix = new Matrix(matrix);\n return newMatrix.asin();\n };\n\n AbstractMatrix.prototype.asinh = function asinh() {\n for (var i = 0; i < this.rows; i++) {\n for (var 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 var newMatrix = new Matrix(matrix);\n return newMatrix.asinh();\n };\n\n AbstractMatrix.prototype.atan = function atan() {\n for (var i = 0; i < this.rows; i++) {\n for (var 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 var newMatrix = new Matrix(matrix);\n return newMatrix.atan();\n };\n\n AbstractMatrix.prototype.atanh = function atanh() {\n for (var i = 0; i < this.rows; i++) {\n for (var 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 var newMatrix = new Matrix(matrix);\n return newMatrix.atanh();\n };\n\n AbstractMatrix.prototype.cbrt = function cbrt() {\n for (var i = 0; i < this.rows; i++) {\n for (var 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 var newMatrix = new Matrix(matrix);\n return newMatrix.cbrt();\n };\n\n AbstractMatrix.prototype.ceil = function ceil() {\n for (var i = 0; i < this.rows; i++) {\n for (var 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 var newMatrix = new Matrix(matrix);\n return newMatrix.ceil();\n };\n\n AbstractMatrix.prototype.clz32 = function clz32() {\n for (var i = 0; i < this.rows; i++) {\n for (var 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 var newMatrix = new Matrix(matrix);\n return newMatrix.clz32();\n };\n\n AbstractMatrix.prototype.cos = function cos() {\n for (var i = 0; i < this.rows; i++) {\n for (var 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 var newMatrix = new Matrix(matrix);\n return newMatrix.cos();\n };\n\n AbstractMatrix.prototype.cosh = function cosh() {\n for (var i = 0; i < this.rows; i++) {\n for (var 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 var newMatrix = new Matrix(matrix);\n return newMatrix.cosh();\n };\n\n AbstractMatrix.prototype.exp = function exp() {\n for (var i = 0; i < this.rows; i++) {\n for (var 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 var newMatrix = new Matrix(matrix);\n return newMatrix.exp();\n };\n\n AbstractMatrix.prototype.expm1 = function expm1() {\n for (var i = 0; i < this.rows; i++) {\n for (var 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 var newMatrix = new Matrix(matrix);\n return newMatrix.expm1();\n };\n\n AbstractMatrix.prototype.floor = function floor() {\n for (var i = 0; i < this.rows; i++) {\n for (var 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 var newMatrix = new Matrix(matrix);\n return newMatrix.floor();\n };\n\n AbstractMatrix.prototype.fround = function fround() {\n for (var i = 0; i < this.rows; i++) {\n for (var 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 var newMatrix = new Matrix(matrix);\n return newMatrix.fround();\n };\n\n AbstractMatrix.prototype.log = function log() {\n for (var i = 0; i < this.rows; i++) {\n for (var 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 var newMatrix = new Matrix(matrix);\n return newMatrix.log();\n };\n\n AbstractMatrix.prototype.log1p = function log1p() {\n for (var i = 0; i < this.rows; i++) {\n for (var 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 var newMatrix = new Matrix(matrix);\n return newMatrix.log1p();\n };\n\n AbstractMatrix.prototype.log10 = function log10() {\n for (var i = 0; i < this.rows; i++) {\n for (var 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 var newMatrix = new Matrix(matrix);\n return newMatrix.log10();\n };\n\n AbstractMatrix.prototype.log2 = function log2() {\n for (var i = 0; i < this.rows; i++) {\n for (var 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 var newMatrix = new Matrix(matrix);\n return newMatrix.log2();\n };\n\n AbstractMatrix.prototype.round = function round() {\n for (var i = 0; i < this.rows; i++) {\n for (var 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 var newMatrix = new Matrix(matrix);\n return newMatrix.round();\n };\n\n AbstractMatrix.prototype.sign = function sign() {\n for (var i = 0; i < this.rows; i++) {\n for (var 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 var newMatrix = new Matrix(matrix);\n return newMatrix.sign();\n };\n\n AbstractMatrix.prototype.sin = function sin() {\n for (var i = 0; i < this.rows; i++) {\n for (var 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 var newMatrix = new Matrix(matrix);\n return newMatrix.sin();\n };\n\n AbstractMatrix.prototype.sinh = function sinh() {\n for (var i = 0; i < this.rows; i++) {\n for (var 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 var newMatrix = new Matrix(matrix);\n return newMatrix.sinh();\n };\n\n AbstractMatrix.prototype.sqrt = function sqrt() {\n for (var i = 0; i < this.rows; i++) {\n for (var 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 var newMatrix = new Matrix(matrix);\n return newMatrix.sqrt();\n };\n\n AbstractMatrix.prototype.tan = function tan() {\n for (var i = 0; i < this.rows; i++) {\n for (var 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 var newMatrix = new Matrix(matrix);\n return newMatrix.tan();\n };\n\n AbstractMatrix.prototype.tanh = function tanh() {\n for (var i = 0; i < this.rows; i++) {\n for (var 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 var newMatrix = new Matrix(matrix);\n return newMatrix.tanh();\n };\n\n AbstractMatrix.prototype.trunc = function trunc() {\n for (var i = 0; i < this.rows; i++) {\n for (var 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 var newMatrix = new Matrix(matrix);\n return newMatrix.trunc();\n };\n\n AbstractMatrix.pow = function pow(matrix, arg0) {\n var 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 (var i = 0; i < this.rows; i++) {\n for (var 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 (var i = 0; i < this.rows; i++) {\n for (var j = 0; j < this.columns; j++) {\n this.set(i, j, Math.pow(this.get(i, j), matrix.get(i, j)));\n }\n }\n return this;\n };\n}\n","import rescale from 'ml-array-rescale';\n\nimport {\n checkRowVector,\n checkRowIndex,\n checkColumnIndex,\n checkColumnVector,\n checkRange,\n checkIndices\n} from './util';\nimport {\n sumByRow,\n sumByColumn,\n sumAll,\n productByRow,\n productByColumn,\n productAll,\n varianceByRow,\n varianceByColumn,\n varianceAll,\n centerByRow,\n centerByColumn,\n centerAll,\n scaleByRow,\n scaleByColumn,\n scaleAll,\n getScaleByRow,\n getScaleByColumn,\n getScaleAll\n} from './stat';\nimport { inspectMatrix } from './inspect';\nimport { installMathOperations } from './mathOperations';\n\nexport class AbstractMatrix {\n static from1DArray(newRows, newColumns, newData) {\n var length = newRows * newColumns;\n if (length !== newData.length) {\n throw new RangeError('data length does not match given dimensions');\n }\n var newMatrix = new Matrix(newRows, newColumns);\n for (var row = 0; row < newRows; row++) {\n for (var 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 var vector = new Matrix(1, newData.length);\n for (var i = 0; i < newData.length; i++) {\n vector.set(0, i, newData[i]);\n }\n return vector;\n }\n\n static columnVector(newData) {\n var vector = new Matrix(newData.length, 1);\n for (var 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 var matrix = new Matrix(rows, columns);\n for (var i = 0; i < rows; i++) {\n for (var 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 var interval = max - min;\n var matrix = new Matrix(rows, columns);\n for (var i = 0; i < rows; i++) {\n for (var j = 0; j < columns; j++) {\n var 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 var min = Math.min(rows, columns);\n var matrix = this.zeros(rows, columns);\n for (var i = 0; i < min; i++) {\n matrix.set(i, i, value);\n }\n return matrix;\n }\n\n static diag(data, rows, columns) {\n var l = data.length;\n if (rows === undefined) rows = l;\n if (columns === undefined) columns = rows;\n var min = Math.min(l, rows, columns);\n var matrix = this.zeros(rows, columns);\n for (var 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 var rows = matrix1.rows;\n var columns = matrix1.columns;\n var result = new Matrix(rows, columns);\n for (var i = 0; i < rows; i++) {\n for (var 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 var rows = matrix1.rows;\n var columns = matrix1.columns;\n var result = new this(rows, columns);\n for (var i = 0; i < rows; i++) {\n for (var 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 (var i = 0; i < this.rows; i++) {\n for (var j = 0; j < this.columns; j++) {\n callback.call(this, i, j);\n }\n }\n return this;\n }\n\n to1DArray() {\n var array = [];\n for (var i = 0; i < this.rows; i++) {\n for (var j = 0; j < this.columns; j++) {\n array.push(this.get(i, j));\n }\n }\n return array;\n }\n\n to2DArray() {\n var copy = [];\n for (var i = 0; i < this.rows; i++) {\n copy.push([]);\n for (var j = 0; j < this.columns; j++) {\n copy[i].push(this.get(i, j));\n }\n }\n return copy;\n }\n\n toJSON() {\n return this.to2DArray();\n }\n\n isRowVector() {\n return this.rows === 1;\n }\n\n isColumnVector() {\n return this.columns === 1;\n }\n\n isVector() {\n return this.rows === 1 || this.columns === 1;\n }\n\n isSquare() {\n return this.rows === this.columns;\n }\n\n isSymmetric() {\n if (this.isSquare()) {\n for (var i = 0; i < this.rows; i++) {\n for (var 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 var matrix = new Matrix(this.rows * rows, this.columns * columns);\n for (var i = 0; i < rows; i++) {\n for (var 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 (var i = 0; i < this.rows; i++) {\n for (var 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 var row = [];\n for (var 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 (var 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 (var i = 0; i < this.columns; i++) {\n var 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 var column = [];\n for (var 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 (var 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 (var i = 0; i < this.rows; i++) {\n var 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 (var i = 0; i < this.rows; i++) {\n for (var 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 (var i = 0; i < this.rows; i++) {\n for (var 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 (var i = 0; i < this.rows; i++) {\n for (var 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 (var i = 0; i < this.rows; i++) {\n for (var 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 (var i = 0; i < this.rows; i++) {\n for (var 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 (var i = 0; i < this.rows; i++) {\n for (var 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 (var i = 0; i < this.rows; i++) {\n for (var 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 (var i = 0; i < this.rows; i++) {\n for (var 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 (var 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 (var 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 var v = this.get(0, 0);\n for (var i = 0; i < this.rows; i++) {\n for (var 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 var v = this.get(0, 0);\n var idx = [0, 0];\n for (var i = 0; i < this.rows; i++) {\n for (var 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 var v = this.get(0, 0);\n for (var i = 0; i < this.rows; i++) {\n for (var 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 var v = this.get(0, 0);\n var idx = [0, 0];\n for (var i = 0; i < this.rows; i++) {\n for (var 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 var v = this.get(row, 0);\n for (var 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 var v = this.get(row, 0);\n var idx = [row, 0];\n for (var 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 var v = this.get(row, 0);\n for (var 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 var v = this.get(row, 0);\n var idx = [row, 0];\n for (var 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 var v = this.get(0, column);\n for (var 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 var v = this.get(0, column);\n var idx = [0, column];\n for (var 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 var v = this.get(0, column);\n for (var 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 var v = this.get(0, column);\n var idx = [0, column];\n for (var 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 var min = Math.min(this.rows, this.columns);\n var diag = [];\n for (var i = 0; i < min; i++) {\n diag.push(this.get(i, i));\n }\n return diag;\n }\n\n norm(type = 'frobenius') {\n var result = 0;\n if (type === 'max') {\n return this.max();\n } else if (type === 'frobenius') {\n for (var i = 0; i < this.rows; i++) {\n for (var 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 var sum = 0;\n for (var i = 0; i < this.rows; i++) {\n for (var 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 var vector1 = this.to1DArray();\n if (vector1.length !== vector2.length) {\n throw new RangeError('vectors do not have the same size');\n }\n var dot = 0;\n for (var 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 var m = this.rows;\n var n = this.columns;\n var p = other.columns;\n\n var result = new Matrix(m, p);\n\n var Bcolj = new Float64Array(n);\n for (var j = 0; j < p; j++) {\n for (var k = 0; k < n; k++) {\n Bcolj[k] = other.get(k, j);\n }\n\n for (var i = 0; i < m; i++) {\n var s = 0;\n for (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 var 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 var 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 var x = this.clone();\n var r1 = x.rows;\n var c1 = x.columns;\n var r2 = y.rows;\n var 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 var r = mat.rows;\n var c = mat.columns;\n if (r === rows && c === cols) {\n return mat;\n } else {\n var 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 var r = Math.max(r1, r2);\n var 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 var halfRows = parseInt(a.rows / 2, 10);\n var halfCols = parseInt(a.columns / 2, 10);\n // Subdivide input matrices.\n var a11 = a.subMatrix(0, halfRows - 1, 0, halfCols - 1);\n var b11 = b.subMatrix(0, halfRows - 1, 0, halfCols - 1);\n\n var a12 = a.subMatrix(0, halfRows - 1, halfCols, a.columns - 1);\n var b12 = b.subMatrix(0, halfRows - 1, halfCols, b.columns - 1);\n\n var a21 = a.subMatrix(halfRows, a.rows - 1, 0, halfCols - 1);\n var b21 = b.subMatrix(halfRows, b.rows - 1, 0, halfCols - 1);\n\n var a22 = a.subMatrix(halfRows, a.rows - 1, halfCols, a.columns - 1);\n var b22 = b.subMatrix(halfRows, b.rows - 1, halfCols, b.columns - 1);\n\n // Compute intermediate values.\n var m1 = blockMult(\n AbstractMatrix.add(a11, a22),\n AbstractMatrix.add(b11, b22),\n halfRows,\n halfCols\n );\n var m2 = blockMult(AbstractMatrix.add(a21, a22), b11, halfRows, halfCols);\n var m3 = blockMult(a11, AbstractMatrix.sub(b12, b22), halfRows, halfCols);\n var m4 = blockMult(a22, AbstractMatrix.sub(b21, b11), halfRows, halfCols);\n var m5 = blockMult(AbstractMatrix.add(a11, a12), b22, halfRows, halfCols);\n var m6 = blockMult(\n AbstractMatrix.sub(a21, a11),\n AbstractMatrix.add(b11, b12),\n halfRows,\n halfCols\n );\n var 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 var c11 = AbstractMatrix.add(m1, m4);\n c11.sub(m5);\n c11.add(m7);\n var c12 = AbstractMatrix.add(m3, m5);\n var c21 = AbstractMatrix.add(m2, m4);\n var 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 var 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 var newMatrix = new Matrix(this.rows, this.columns);\n for (var i = 0; i < this.rows; i++) {\n const row = this.getRow(i);\n rescale(row, { min, max, output: row });\n newMatrix.setRow(i, row);\n }\n return newMatrix;\n }\n\n scaleColumns(options = {}) {\n if (typeof options !== 'object') {\n throw new TypeError('options must be an object');\n }\n const { min = 0, max = 1 } = options;\n if (!Number.isFinite(min)) throw new TypeError('min must be a number');\n if (!Number.isFinite(max)) throw new TypeError('max must be a number');\n if (min >= max) throw new RangeError('min must be smaller than max');\n var newMatrix = new Matrix(this.rows, this.columns);\n for (var i = 0; i < this.columns; i++) {\n const column = this.getColumn(i);\n rescale(column, {\n min: min,\n max: max,\n output: column\n });\n newMatrix.setColumn(i, column);\n }\n return newMatrix;\n }\n\n flipRows() {\n const middle = Math.ceil(this.columns / 2);\n for (var i = 0; i < this.rows; i++) {\n for (var j = 0; j < middle; j++) {\n var first = this.get(i, j);\n var 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 (var j = 0; j < this.columns; j++) {\n for (var i = 0; i < middle; i++) {\n var first = this.get(i, j);\n var 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 var m = this.rows;\n var n = this.columns;\n var p = other.rows;\n var q = other.columns;\n\n var result = new Matrix(m * p, n * q);\n for (var i = 0; i < m; i++) {\n for (var j = 0; j < n; j++) {\n for (var k = 0; k < p; k++) {\n for (var 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 var result = new Matrix(this.columns, this.rows);\n for (var i = 0; i < this.rows; i++) {\n for (var 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 (var 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 (var 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 var newMatrix = new Matrix(\n endRow - startRow + 1,\n endColumn - startColumn + 1\n );\n for (var i = startRow; i <= endRow; i++) {\n for (var 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 var newMatrix = new Matrix(indices.length, endColumn - startColumn + 1);\n for (var i = 0; i < indices.length; i++) {\n for (var 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 var newMatrix = new Matrix(endRow - startRow + 1, indices.length);\n for (var i = 0; i < indices.length; i++) {\n for (var 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 var endRow = startRow + matrix.rows - 1;\n var endColumn = startColumn + matrix.columns - 1;\n checkRange(this, startRow, endRow, startColumn, endColumn);\n for (var i = 0; i < matrix.rows; i++) {\n for (var 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 var indices = checkIndices(this, rowIndices, columnIndices);\n var newMatrix = new Matrix(rowIndices.length, columnIndices.length);\n for (var i = 0; i < indices.row.length; i++) {\n var rowIndex = indices.row[i];\n for (var j = 0; j < indices.column.length; j++) {\n var columnIndex = indices.column[j];\n newMatrix.set(i, j, this.get(rowIndex, columnIndex));\n }\n }\n return newMatrix;\n }\n\n trace() {\n var min = Math.min(this.rows, this.columns);\n var trace = 0;\n for (var i = 0; i < min; i++) {\n trace += this.get(i, i);\n }\n return trace;\n }\n\n clone() {\n var newMatrix = new Matrix(this.rows, this.columns);\n for (var row = 0; row < this.rows; row++) {\n for (var 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 (var 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 } case undefined: {\n if (typeof center !== 'number') {\n throw new TypeError('center must be a number');\n }\n centerAll(this, center);\n return this;\n }\n default:\n throw new Error(`invalid option: ${by}`);\n }\n }\n\n scale(by, options = {}) {\n if (typeof by === 'object') {\n options = by;\n by = undefined;\n }\n if (typeof options !== 'object') {\n throw new TypeError('options must be an object');\n }\n let scale = options.scale;\n switch (by) {\n case 'row': {\n if (scale === undefined) {\n scale = getScaleByRow(this);\n } else if (!Array.isArray(scale)) {\n throw new TypeError('scale must be an array');\n }\n scaleByRow(this, scale);\n return this;\n }\n case 'column': {\n if (scale === undefined) {\n scale = getScaleByColumn(this);\n } else if (!Array.isArray(scale)) {\n throw new TypeError('scale must be an array');\n }\n scaleByColumn(this, scale);\n return this;\n }\n case undefined: {\n if (scale === undefined) {\n scale = getScaleAll(this);\n } else if (typeof scale !== 'number') {\n throw new TypeError('scale must be a number');\n }\n scaleAll(this, scale);\n return this;\n }\n default:\n throw new Error(`invalid option: ${by}`);\n }\n }\n}\n\nAbstractMatrix.prototype.klass = 'Matrix';\nif (typeof Symbol !== 'undefined') {\n AbstractMatrix.prototype[\n Symbol.for('nodejs.util.inspect.custom')\n ] = inspectMatrix;\n}\n\nfunction compareNumbers(a, b) {\n return a - b;\n}\n\n// Synonyms\nAbstractMatrix.random = AbstractMatrix.rand;\nAbstractMatrix.randomInt = AbstractMatrix.randInt;\nAbstractMatrix.diagonal = AbstractMatrix.diag;\nAbstractMatrix.prototype.diagonal = AbstractMatrix.prototype.diag;\nAbstractMatrix.identity = AbstractMatrix.eye;\nAbstractMatrix.prototype.negate = AbstractMatrix.prototype.neg;\nAbstractMatrix.prototype.tensorProduct =\n AbstractMatrix.prototype.kroneckerProduct;\n\nexport default class Matrix extends AbstractMatrix {\n constructor(nRows, nColumns) {\n super();\n if (Matrix.isMatrix(nRows)) {\n return nRows.clone();\n } else if (Number.isInteger(nRows) && nRows > 0) {\n // Create an empty matrix\n this.data = [];\n if (Number.isInteger(nColumns) && nColumns > 0) {\n for (let i = 0; i < nRows; i++) {\n this.data.push(new Float64Array(nColumns));\n }\n } else {\n throw new TypeError('nColumns must be a positive integer');\n }\n } else if (Array.isArray(nRows)) {\n // Copy the values from the 2D array\n const arrayData = nRows;\n nRows = arrayData.length;\n nColumns = arrayData[0].length;\n if (typeof nColumns !== 'number' || nColumns === 0) {\n throw new TypeError(\n 'Data must be a 2D array with at least one element'\n );\n }\n this.data = [];\n for (let i = 0; i < nRows; i++) {\n if (arrayData[i].length !== nColumns) {\n throw new RangeError('Inconsistent array dimensions');\n }\n this.data.push(Float64Array.from(arrayData[i]));\n }\n } else {\n throw new TypeError(\n 'First argument must be a positive number or an array'\n );\n }\n this.rows = nRows;\n this.columns = nColumns;\n return this;\n }\n\n set(rowIndex, columnIndex, value) {\n this.data[rowIndex][columnIndex] = value;\n return this;\n }\n\n get(rowIndex, columnIndex) {\n return this.data[rowIndex][columnIndex];\n }\n\n removeRow(index) {\n checkRowIndex(this, index);\n if (this.rows === 1) {\n throw new RangeError('A matrix cannot have less than one row');\n }\n this.data.splice(index, 1);\n this.rows -= 1;\n return this;\n }\n\n addRow(index, array) {\n if (array === undefined) {\n array = index;\n index = this.rows;\n }\n checkRowIndex(this, index, true);\n array = Float64Array.from(checkRowVector(this, array, true));\n this.data.splice(index, 0, array);\n this.rows += 1;\n return this;\n }\n\n removeColumn(index) {\n checkColumnIndex(this, index);\n if (this.columns === 1) {\n throw new RangeError('A matrix cannot have less than one column');\n }\n for (var 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 (var i = 0; i < this.rows; i++) {\n const newRow = new Float64Array(this.columns + 1);\n let j = 0;\n for (; j < index; j++) {\n newRow[j] = this.data[i][j];\n }\n newRow[j++] = array[i];\n for (; j < this.columns + 1; j++) {\n newRow[j] = this.data[i][j - 1];\n }\n this.data[i] = newRow;\n }\n this.columns += 1;\n return this;\n }\n}\n\ninstallMathOperations(AbstractMatrix, Matrix);\n","import { AbstractMatrix } from '../matrix';\n\nexport default class BaseView extends AbstractMatrix {\n constructor(matrix, rows, columns) {\n super();\n this.matrix = matrix;\n this.rows = rows;\n this.columns = columns;\n }\n}\n","import { checkColumnIndex } from '../util';\n\nimport BaseView from './base';\n\nexport default class MatrixColumnView extends BaseView {\n constructor(matrix, column) {\n checkColumnIndex(matrix, column);\n super(matrix, matrix.rows, 1);\n this.column = column;\n }\n\n set(rowIndex, columnIndex, value) {\n this.matrix.set(rowIndex, this.column, value);\n return this;\n }\n\n get(rowIndex) {\n return this.matrix.get(rowIndex, this.column);\n }\n}\n","import { checkColumnIndices } from '../util';\r\n\r\nimport BaseView from './base';\r\n\r\nexport default class MatrixColumnSelectionView extends BaseView {\r\n constructor(matrix, columnIndices) {\r\n columnIndices = checkColumnIndices(matrix, columnIndices);\r\n super(matrix, matrix.rows, columnIndices.length);\r\n this.columnIndices = columnIndices;\r\n }\r\n\r\n set(rowIndex, columnIndex, value) {\r\n this.matrix.set(rowIndex, this.columnIndices[columnIndex], value);\r\n return this;\r\n }\r\n\r\n get(rowIndex, columnIndex) {\r\n return this.matrix.get(rowIndex, this.columnIndices[columnIndex]);\r\n }\r\n}\r\n","import BaseView from './base';\r\n\r\nexport default class MatrixFlipColumnView extends BaseView {\r\n constructor(matrix) {\r\n super(matrix, matrix.rows, matrix.columns);\r\n }\r\n\r\n set(rowIndex, columnIndex, value) {\r\n this.matrix.set(rowIndex, this.columns - columnIndex - 1, value);\r\n return this;\r\n }\r\n\r\n get(rowIndex, columnIndex) {\r\n return this.matrix.get(rowIndex, this.columns - columnIndex - 1);\r\n }\r\n}\r\n","import BaseView from './base';\r\n\r\nexport default class MatrixFlipRowView extends BaseView {\r\n constructor(matrix) {\r\n super(matrix, matrix.rows, matrix.columns);\r\n }\r\n\r\n set(rowIndex, columnIndex, value) {\r\n this.matrix.set(this.rows - rowIndex - 1, columnIndex, value);\r\n return this;\r\n }\r\n\r\n get(rowIndex, columnIndex) {\r\n return this.matrix.get(this.rows - rowIndex - 1, columnIndex);\r\n }\r\n}\r\n","import { checkRowIndex } from '../util';\n\nimport BaseView from './base';\n\nexport default class MatrixRowView extends BaseView {\n constructor(matrix, row) {\n checkRowIndex(matrix, row);\n super(matrix, 1, matrix.columns);\n this.row = row;\n }\n\n set(rowIndex, columnIndex, value) {\n this.matrix.set(this.row, columnIndex, value);\n return this;\n }\n\n get(rowIndex, columnIndex) {\n return this.matrix.get(this.row, columnIndex);\n }\n}\n","import { checkRowIndices } from '../util';\r\n\r\nimport BaseView from './base';\r\n\r\nexport default class MatrixRowSelectionView extends BaseView {\r\n constructor(matrix, rowIndices) {\r\n rowIndices = checkRowIndices(matrix, rowIndices);\r\n super(matrix, rowIndices.length, matrix.columns);\r\n this.rowIndices = rowIndices;\r\n }\r\n\r\n set(rowIndex, columnIndex, value) {\r\n this.matrix.set(this.rowIndices[rowIndex], columnIndex, value);\r\n return this;\r\n }\r\n\r\n get(rowIndex, columnIndex) {\r\n return this.matrix.get(this.rowIndices[rowIndex], columnIndex);\r\n }\r\n}\r\n","import { checkIndices } from '../util';\r\n\r\nimport BaseView from './base';\r\n\r\nexport default class MatrixSelectionView extends BaseView {\r\n constructor(matrix, rowIndices, columnIndices) {\r\n var indices = checkIndices(matrix, rowIndices, columnIndices);\r\n super(matrix, indices.row.length, indices.column.length);\r\n this.rowIndices = indices.row;\r\n this.columnIndices = indices.column;\r\n }\r\n\r\n set(rowIndex, columnIndex, value) {\r\n this.matrix.set(\r\n this.rowIndices[rowIndex],\r\n this.columnIndices[columnIndex],\r\n value\r\n );\r\n return this;\r\n }\r\n\r\n get(rowIndex, columnIndex) {\r\n return this.matrix.get(\r\n this.rowIndices[rowIndex],\r\n this.columnIndices[columnIndex]\r\n );\r\n }\r\n}\r\n","import { checkRange } from '../util';\r\n\r\nimport BaseView from './base';\r\n\r\nexport default class MatrixSubView extends BaseView {\r\n constructor(matrix, startRow, endRow, startColumn, endColumn) {\r\n checkRange(matrix, startRow, endRow, startColumn, endColumn);\r\n super(matrix, endRow - startRow + 1, endColumn - startColumn + 1);\r\n this.startRow = startRow;\r\n this.startColumn = startColumn;\r\n }\r\n\r\n set(rowIndex, columnIndex, value) {\r\n this.matrix.set(\r\n this.startRow + rowIndex,\r\n this.startColumn + columnIndex,\r\n value\r\n );\r\n return this;\r\n }\r\n\r\n get(rowIndex, columnIndex) {\r\n return this.matrix.get(\r\n this.startRow + rowIndex,\r\n this.startColumn + columnIndex\r\n );\r\n }\r\n}\r\n","import BaseView from './base';\r\n\r\nexport default class MatrixTransposeView extends BaseView {\r\n constructor(matrix) {\r\n super(matrix, matrix.columns, matrix.rows);\r\n }\r\n\r\n set(rowIndex, columnIndex, value) {\r\n this.matrix.set(columnIndex, rowIndex, value);\r\n return this;\r\n }\r\n\r\n get(rowIndex, columnIndex) {\r\n return this.matrix.get(columnIndex, rowIndex);\r\n }\r\n}\r\n","import { AbstractMatrix } from '../matrix';\n\nexport default class WrapperMatrix1D extends AbstractMatrix {\n constructor(data, options = {}) {\n const { rows = 1 } = options;\n\n if (data.length % rows !== 0) {\n throw new Error('the data length is not divisible by the number of rows');\n }\n super();\n this.rows = rows;\n this.columns = data.length / rows;\n this.data = data;\n }\n\n set(rowIndex, columnIndex, value) {\n var index = this._calculateIndex(rowIndex, columnIndex);\n this.data[index] = value;\n return this;\n }\n\n get(rowIndex, columnIndex) {\n var index = this._calculateIndex(rowIndex, columnIndex);\n return this.data[index];\n }\n\n _calculateIndex(row, column) {\n return row * this.columns + column;\n }\n}\n","import { AbstractMatrix } from '../matrix';\n\nexport default class WrapperMatrix2D extends AbstractMatrix {\n constructor(data) {\n super();\n this.data = data;\n this.rows = data.length;\n this.columns = data[0].length;\n }\n\n set(rowIndex, columnIndex, value) {\n this.data[rowIndex][columnIndex] = value;\n return this;\n }\n\n get(rowIndex, columnIndex) {\n return this.data[rowIndex][columnIndex];\n }\n}\n","import WrapperMatrix1D from './WrapperMatrix1D';\nimport WrapperMatrix2D from './WrapperMatrix2D';\n\nexport function wrap(array, options) {\n if (Array.isArray(array)) {\n if (array[0] && Array.isArray(array[0])) {\n return new WrapperMatrix2D(array);\n } else {\n return new WrapperMatrix1D(array, options);\n }\n } else {\n throw new Error('the argument is not an array');\n }\n}\n","import Matrix from '../matrix';\nimport WrapperMatrix2D from '../wrap/WrapperMatrix2D';\n\nexport default class LuDecomposition {\n constructor(matrix) {\n matrix = WrapperMatrix2D.checkMatrix(matrix);\n\n var lu = matrix.clone();\n var rows = lu.rows;\n var columns = lu.columns;\n var pivotVector = new Float64Array(rows);\n var pivotSign = 1;\n var i, j, k, p, s, t, v;\n var 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 var data = this.LU;\n var col = data.columns;\n for (var 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 var lu = this.LU;\n var 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 var count = value.columns;\n var X = value.subMatrixRow(this.pivotVector, 0, count - 1);\n var columns = lu.columns;\n var 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 var data = this.LU;\n if (!data.isSquare()) {\n throw new Error('Matrix must be square');\n }\n var determinant = this.pivotSign;\n var col = data.columns;\n for (var j = 0; j < col; j++) {\n determinant *= data.get(j, j);\n }\n return determinant;\n }\n\n get lowerTriangularMatrix() {\n var data = this.LU;\n var rows = data.rows;\n var columns = data.columns;\n var X = new Matrix(rows, columns);\n for (var i = 0; i < rows; i++) {\n for (var 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 var data = this.LU;\n var rows = data.rows;\n var columns = data.columns;\n var X = new Matrix(rows, columns);\n for (var i = 0; i < rows; i++) {\n for (var 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 var 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 var qr = value.clone();\n var m = value.rows;\n var n = value.columns;\n var rdiag = new Float64Array(n);\n var i, j, k, s;\n\n for (k = 0; k < n; k++) {\n var 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 var qr = this.QR;\n var 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 var count = value.columns;\n var X = value.clone();\n var n = qr.columns;\n var 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 var columns = this.QR.columns;\n for (var 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 var qr = this.QR;\n var n = qr.columns;\n var X = new Matrix(n, n);\n var 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 var qr = this.QR;\n var rows = qr.rows;\n var columns = qr.columns;\n var X = new Matrix(rows, columns);\n var 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[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 var m = value.rows;\n var n = value.columns;\n\n const {\n computeLeftSingularVectors = true,\n computeRightSingularVectors = true,\n autoTranspose = false\n } = options;\n\n var wantu = Boolean(computeLeftSingularVectors);\n var wantv = Boolean(computeRightSingularVectors);\n\n var swapped = false;\n var 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 var aux = wantu;\n wantu = wantv;\n wantv = aux;\n }\n } else {\n a = value.clone();\n }\n\n var nu = Math.min(m, n);\n var ni = Math.min(m + 1, n);\n var s = new Float64Array(ni);\n var U = new Matrix(m, nu);\n var V = new Matrix(n, n);\n\n var e = new Float64Array(n);\n var work = new Float64Array(m);\n\n var si = new Float64Array(ni);\n for (let i = 0; i < ni; i++) si[i] = i;\n\n var nct = Math.min(m - 1, n);\n var nrt = Math.max(0, Math.min(n - 2, m));\n var 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 var pp = p - 1;\n var iter = 0;\n var 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 var 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 var Y = value;\n var e = this.threshold;\n var scols = this.s.length;\n var 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 var U = this.U;\n var V = this.rightSingularVectors;\n\n var VL = V.mmul(Ls);\n var vrows = V.rows;\n var urows = U.rows;\n var 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 var V = this.V;\n var e = this.threshold;\n var vrows = V.rows;\n var vcols = V.columns;\n var 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 var U = this.U;\n\n var urows = U.rows;\n var ucols = U.columns;\n var 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 var tol = Math.max(this.m, this.n) * this.s[0] * Number.EPSILON;\n var r = 0;\n var s = this.s;\n for (var i = 0, ii = s.length; i < ii; i++) {\n if (s[i] > tol) {\n r++;\n }\n }\n return r;\n }\n\n get diagonal() {\n return Array.from(this.s);\n }\n\n get threshold() {\n return (Number.EPSILON / 2) * Math.max(this.m, this.n) * this.s[0];\n }\n\n get leftSingularVectors() {\n return this.U;\n }\n\n get rightSingularVectors() {\n return this.V;\n }\n\n get diagonalMatrix() {\n return Matrix.diag(this.s);\n }\n}\n","import LuDecomposition from './dc/lu';\nimport QrDecomposition from './dc/qr';\nimport SingularValueDecomposition from './dc/svd';\nimport Matrix from './matrix';\nimport WrapperMatrix2D from './wrap/WrapperMatrix2D';\n\nexport function inverse(matrix, useSVD = false) {\n matrix = WrapperMatrix2D.checkMatrix(matrix);\n if (useSVD) {\n return new SingularValueDecomposition(matrix).inverse();\n } else {\n return solve(matrix, Matrix.eye(matrix.rows));\n }\n}\n\nexport function solve(leftHandSide, rightHandSide, useSVD = false) {\n leftHandSide = WrapperMatrix2D.checkMatrix(leftHandSide);\n rightHandSide = WrapperMatrix2D.checkMatrix(rightHandSide);\n if (useSVD) {\n return new SingularValueDecomposition(leftHandSide).solve(rightHandSide);\n } else {\n return leftHandSide.isSquare()\n ? new LuDecomposition(leftHandSide).solve(rightHandSide)\n : new QrDecomposition(leftHandSide).solve(rightHandSide);\n }\n}\n","import Matrix from './matrix';\nimport LuDecomposition from './dc/lu';\nimport MatrixSelectionView from './views/selection';\n\nexport function determinant(matrix) {\n matrix = Matrix.checkMatrix(matrix);\n if (matrix.isSquare()) {\n var a, b, c, d;\n if (matrix.columns === 2) {\n // 2 x 2 matrix\n a = matrix.get(0, 0);\n b = matrix.get(0, 1);\n c = matrix.get(1, 0);\n d = matrix.get(1, 1);\n\n return a * d - b * c;\n } else if (matrix.columns === 3) {\n // 3 x 3 matrix\n var subMatrix0, subMatrix1, subMatrix2;\n subMatrix0 = new MatrixSelectionView(matrix, [1, 2], [1, 2]);\n subMatrix1 = new MatrixSelectionView(matrix, [1, 2], [0, 2]);\n subMatrix2 = new MatrixSelectionView(matrix, [1, 2], [0, 1]);\n a = matrix.get(0, 0);\n b = matrix.get(0, 1);\n c = matrix.get(0, 2);\n\n return (\n a * determinant(subMatrix0) -\n b * determinant(subMatrix1) +\n c * determinant(subMatrix2)\n );\n } else {\n // general purpose determinant using the LU decomposition\n return new LuDecomposition(matrix).determinant;\n }\n } else {\n throw Error('determinant can only be calculated for a square matrix');\n }\n}\n","import Matrix from './matrix';\nimport SingularValueDecomposition from './dc/svd';\n\nfunction xrange(n, exception) {\n var range = [];\n for (var i = 0; i < n; i++) {\n if (i !== exception) {\n range.push(i);\n }\n }\n return range;\n}\n\nfunction dependenciesOneRow(\n error,\n matrix,\n index,\n thresholdValue = 10e-10,\n thresholdError = 10e-10\n) {\n if (error > thresholdError) {\n return new Array(matrix.rows + 1).fill(0);\n } else {\n var returnArray = matrix.addRow(index, [0]);\n for (var i = 0; i < returnArray.rows; i++) {\n if (Math.abs(returnArray.get(i, 0)) < thresholdValue) {\n returnArray.set(i, 0, 0);\n }\n }\n return returnArray.to1DArray();\n }\n}\n\nexport function linearDependencies(matrix, options = {}) {\n const { thresholdValue = 10e-10, thresholdError = 10e-10 } = options;\n matrix = Matrix.checkMatrix(matrix);\n\n var n = matrix.rows;\n var results = new Matrix(n, n);\n\n for (var i = 0; i < n; i++) {\n var b = Matrix.columnVector(matrix.getRow(i));\n var Abis = matrix.subMatrixRow(xrange(n, i)).transpose();\n var svd = new SingularValueDecomposition(Abis);\n var x = svd.solve(b);\n var error = Matrix.sub(b, Abis.mmul(x))\n .abs()\n .max();\n results.setRow(\n i,\n dependenciesOneRow(error, x, i, thresholdValue, thresholdError)\n );\n }\n return results;\n}\n","import SVD from './dc/svd';\nimport Matrix from './matrix';\n\nexport function pseudoInverse(matrix, threshold = Number.EPSILON) {\n matrix = Matrix.checkMatrix(matrix);\n var svdSolution = new SVD(matrix, { autoTranspose: true });\n\n var U = svdSolution.leftSingularVectors;\n var V = svdSolution.rightSingularVectors;\n var s = svdSolution.diagonal;\n\n for (var i = 0; i < s.length; i++) {\n if (Math.abs(s[i]) > threshold) {\n s[i] = 1.0 / s[i];\n } else {\n s[i] = 0.0;\n }\n }\n\n return V.mmul(Matrix.diag(s).mmul(U.transpose()));\n}\n","import Matrix from './matrix';\n\nexport function covariance(xMatrix, yMatrix = xMatrix, options = {}) {\n xMatrix = Matrix.checkMatrix(xMatrix);\n let yIsSame = false;\n if (typeof yMatrix === 'object' && !Matrix.isMatrix(yMatrix) && !Array.isArray(yMatrix)) {\n options = yMatrix;\n yMatrix = xMatrix;\n yIsSame = true;\n } else {\n yMatrix = Matrix.checkMatrix(yMatrix);\n }\n if (xMatrix.rows !== yMatrix.rows) {\n throw new TypeError('Both matrices must have the same number of rows');\n }\n const { center = true } = options;\n if (center) {\n xMatrix = xMatrix.center('column');\n if (!yIsSame) {\n yMatrix = yMatrix.center('column');\n }\n }\n const covariance = xMatrix.transpose().mmul(yMatrix);\n for (let i = 0; i < covariance.rows; i++) {\n for (let j = 0; j < covariance.columns; j++) {\n covariance.set(i, j, covariance.get(i, j) * (1 / (xMatrix.rows - 1)));\n }\n }\n return covariance;\n}\n","import Matrix from './matrix';\n\nexport function correlation(xMatrix, yMatrix = xMatrix, options = {}) {\n xMatrix = Matrix.checkMatrix(xMatrix);\n let yIsSame = false;\n if (typeof yMatrix === 'object' && !Matrix.isMatrix(yMatrix) && !Array.isArray(yMatrix)) {\n options = yMatrix;\n yMatrix = xMatrix;\n yIsSame = true;\n } else {\n yMatrix = Matrix.checkMatrix(yMatrix);\n }\n if (xMatrix.rows !== yMatrix.rows) {\n throw new TypeError('Both matrices must have the same number of rows');\n }\n\n const { center = true, scale = true } = options;\n if (center) {\n xMatrix.center('column');\n if (!yIsSame) {\n yMatrix.center('column');\n }\n }\n if (scale) {\n xMatrix.scale('column');\n if (!yIsSame) {\n yMatrix.scale('column');\n }\n }\n\n const sdx = xMatrix.standardDeviation('column', { unbiased: true });\n const sdy = yIsSame ? sdx : yMatrix.standardDeviation('column', { unbiased: true });\n\n const correlation = xMatrix.transpose().mmul(yMatrix);\n for (let i = 0; i < correlation.rows; i++) {\n for (let j = 0; j < correlation.columns; j++) {\n correlation.set(i, j, correlation.get(i, j) * (1 / (sdx[i] * sdy[j])) * (1 / (xMatrix.rows - 1)));\n }\n }\n return correlation;\n}\n","import Matrix from '../matrix';\nimport WrapperMatrix2D from '../wrap/WrapperMatrix2D';\n\nimport { hypotenuse } from './util';\n\nexport default class EigenvalueDecomposition {\n constructor(matrix, options = {}) {\n const { assumeSymmetric = false } = options;\n\n matrix = WrapperMatrix2D.checkMatrix(matrix);\n if (!matrix.isSquare()) {\n throw new Error('Matrix is not a square matrix');\n }\n\n var n = matrix.columns;\n var V = new Matrix(n, n);\n var d = new Float64Array(n);\n var e = new Float64Array(n);\n var value = matrix;\n var i, j;\n\n var isSymmetric = false;\n if (assumeSymmetric) {\n isSymmetric = true;\n } else {\n isSymmetric = matrix.isSymmetric();\n }\n\n if (isSymmetric) {\n for (i = 0; i < n; i++) {\n for (j = 0; j < n; j++) {\n V.set(i, j, value.get(i, j));\n }\n }\n tred2(n, e, d, V);\n tql2(n, e, d, V);\n } else {\n var H = new Matrix(n, n);\n var ort = new Float64Array(n);\n for (j = 0; j < n; j++) {\n for (i = 0; i < n; i++) {\n H.set(i, j, value.get(i, j));\n }\n }\n orthes(n, H, ort, V);\n hqr2(n, e, d, V, H);\n }\n\n this.n = n;\n this.e = e;\n this.d = d;\n this.V = V;\n }\n\n get realEigenvalues() {\n return Array.from(this.d);\n }\n\n get imaginaryEigenvalues() {\n return Array.from(this.e);\n }\n\n get eigenvectorMatrix() {\n return this.V;\n }\n\n get diagonalMatrix() {\n var n = this.n;\n var e = this.e;\n var d = this.d;\n var X = new Matrix(n, n);\n var i, j;\n for (i = 0; i < n; i++) {\n for (j = 0; j < n; j++) {\n X.set(i, j, 0);\n }\n X.set(i, i, d[i]);\n if (e[i] > 0) {\n X.set(i, i + 1, e[i]);\n } else if (e[i] < 0) {\n X.set(i, i - 1, e[i]);\n }\n }\n return X;\n }\n}\n\nfunction tred2(n, e, d, V) {\n var f, g, h, i, j, k, hh, scale;\n\n for (j = 0; j < n; j++) {\n d[j] = V.get(n - 1, j);\n }\n\n for (i = n - 1; i > 0; i--) {\n scale = 0;\n h = 0;\n for (k = 0; k < i; k++) {\n scale = scale + Math.abs(d[k]);\n }\n\n if (scale === 0) {\n e[i] = d[i - 1];\n for (j = 0; j < i; j++) {\n d[j] = V.get(i - 1, j);\n V.set(i, j, 0);\n V.set(j, i, 0);\n }\n } else {\n for (k = 0; k < i; k++) {\n d[k] /= scale;\n h += d[k] * d[k];\n }\n\n f = d[i - 1];\n g = Math.sqrt(h);\n if (f > 0) {\n g = -g;\n }\n\n e[i] = scale * g;\n h = h - f * g;\n d[i - 1] = f - g;\n for (j = 0; j < i; j++) {\n e[j] = 0;\n }\n\n for (j = 0; j < i; j++) {\n f = d[j];\n V.set(j, i, f);\n g = e[j] + V.get(j, j) * f;\n for (k = j + 1; k <= i - 1; k++) {\n g += V.get(k, j) * d[k];\n e[k] += V.get(k, j) * f;\n }\n e[j] = g;\n }\n\n f = 0;\n for (j = 0; j < i; j++) {\n e[j] /= h;\n f += e[j] * d[j];\n }\n\n hh = f / (h + h);\n for (j = 0; j < i; j++) {\n e[j] -= hh * d[j];\n }\n\n for (j = 0; j < i; j++) {\n f = d[j];\n g = e[j];\n for (k = j; k <= i - 1; k++) {\n V.set(k, j, V.get(k, j) - (f * e[k] + g * d[k]));\n }\n d[j] = V.get(i - 1, j);\n V.set(i, j, 0);\n }\n }\n d[i] = h;\n }\n\n for (i = 0; i < n - 1; i++) {\n V.set(n - 1, i, V.get(i, i));\n V.set(i, i, 1);\n h = d[i + 1];\n if (h !== 0) {\n for (k = 0; k <= i; k++) {\n d[k] = V.get(k, i + 1) / h;\n }\n\n for (j = 0; j <= i; j++) {\n g = 0;\n for (k = 0; k <= i; k++) {\n g += V.get(k, i + 1) * V.get(k, j);\n }\n for (k = 0; k <= i; k++) {\n V.set(k, j, V.get(k, j) - g * d[k]);\n }\n }\n }\n\n for (k = 0; k <= i; k++) {\n V.set(k, i + 1, 0);\n }\n }\n\n for (j = 0; j < n; j++) {\n d[j] = V.get(n - 1, j);\n V.set(n - 1, j, 0);\n }\n\n V.set(n - 1, n - 1, 1);\n e[0] = 0;\n}\n\nfunction tql2(n, e, d, V) {\n var g, h, i, j, k, l, m, p, r, dl1, c, c2, c3, el1, s, s2, iter;\n\n for (i = 1; i < n; i++) {\n e[i - 1] = e[i];\n }\n\n e[n - 1] = 0;\n\n var f = 0;\n var tst1 = 0;\n var eps = Number.EPSILON;\n\n for (l = 0; l < n; l++) {\n tst1 = Math.max(tst1, Math.abs(d[l]) + Math.abs(e[l]));\n m = l;\n while (m < n) {\n if (Math.abs(e[m]) <= eps * tst1) {\n break;\n }\n m++;\n }\n\n if (m > l) {\n iter = 0;\n do {\n iter = iter + 1;\n\n g = d[l];\n p = (d[l + 1] - g) / (2 * e[l]);\n r = hypotenuse(p, 1);\n if (p < 0) {\n r = -r;\n }\n\n d[l] = e[l] / (p + r);\n d[l + 1] = e[l] * (p + r);\n dl1 = d[l + 1];\n h = g - d[l];\n for (i = l + 2; i < n; i++) {\n d[i] -= h;\n }\n\n f = f + h;\n\n p = d[m];\n c = 1;\n c2 = c;\n c3 = c;\n el1 = e[l + 1];\n s = 0;\n s2 = 0;\n for (i = m - 1; i >= l; i--) {\n c3 = c2;\n c2 = c;\n s2 = s;\n g = c * e[i];\n h = c * p;\n r = hypotenuse(p, e[i]);\n e[i + 1] = s * r;\n s = e[i] / r;\n c = p / r;\n p = c * d[i] - s * g;\n d[i + 1] = h + s * (c * g + s * d[i]);\n\n for (k = 0; k < n; k++) {\n h = V.get(k, i + 1);\n V.set(k, i + 1, s * V.get(k, i) + c * h);\n V.set(k, i, c * V.get(k, i) - s * h);\n }\n }\n\n p = (-s * s2 * c3 * el1 * e[l]) / dl1;\n e[l] = s * p;\n d[l] = c * p;\n } while (Math.abs(e[l]) > eps * tst1);\n }\n d[l] = d[l] + f;\n e[l] = 0;\n }\n\n for (i = 0; i < n - 1; i++) {\n k = i;\n p = d[i];\n for (j = i + 1; j < n; j++) {\n if (d[j] < p) {\n k = j;\n p = d[j];\n }\n }\n\n if (k !== i) {\n d[k] = d[i];\n d[i] = p;\n for (j = 0; j < n; j++) {\n p = V.get(j, i);\n V.set(j, i, V.get(j, k));\n V.set(j, k, p);\n }\n }\n }\n}\n\nfunction orthes(n, H, ort, V) {\n var low = 0;\n var high = n - 1;\n var f, g, h, i, j, m;\n var scale;\n\n for (m = low + 1; m <= high - 1; m++) {\n scale = 0;\n for (i = m; i <= high; i++) {\n scale = scale + Math.abs(H.get(i, m - 1));\n }\n\n if (scale !== 0) {\n h = 0;\n for (i = high; i >= m; i--) {\n ort[i] = H.get(i, m - 1) / scale;\n h += ort[i] * ort[i];\n }\n\n g = Math.sqrt(h);\n if (ort[m] > 0) {\n g = -g;\n }\n\n h = h - ort[m] * g;\n ort[m] = ort[m] - g;\n\n for (j = m; j < n; j++) {\n f = 0;\n for (i = high; i >= m; i--) {\n f += ort[i] * H.get(i, j);\n }\n\n f = f / h;\n for (i = m; i <= high; i++) {\n H.set(i, j, H.get(i, j) - f * ort[i]);\n }\n }\n\n for (i = 0; i <= high; i++) {\n f = 0;\n for (j = high; j >= m; j--) {\n f += ort[j] * H.get(i, j);\n }\n\n f = f / h;\n for (j = m; j <= high; j++) {\n H.set(i, j, H.get(i, j) - f * ort[j]);\n }\n }\n\n ort[m] = scale * ort[m];\n H.set(m, m - 1, scale * g);\n }\n }\n\n for (i = 0; i < n; i++) {\n for (j = 0; j < n; j++) {\n V.set(i, j, i === j ? 1 : 0);\n }\n }\n\n for (m = high - 1; m >= low + 1; m--) {\n if (H.get(m, m - 1) !== 0) {\n for (i = m + 1; i <= high; i++) {\n ort[i] = H.get(i, m - 1);\n }\n\n for (j = m; j <= high; j++) {\n g = 0;\n for (i = m; i <= high; i++) {\n g += ort[i] * V.get(i, j);\n }\n\n g = g / ort[m] / H.get(m, m - 1);\n for (i = m; i <= high; i++) {\n V.set(i, j, V.get(i, j) + g * ort[i]);\n }\n }\n }\n }\n}\n\nfunction hqr2(nn, e, d, V, H) {\n var n = nn - 1;\n var low = 0;\n var high = nn - 1;\n var eps = Number.EPSILON;\n var exshift = 0;\n var norm = 0;\n var p = 0;\n var q = 0;\n var r = 0;\n var s = 0;\n var z = 0;\n var iter = 0;\n var i, j, k, l, m, t, w, x, y;\n var ra, sa, vr, vi;\n var notlast, cdivres;\n\n for (i = 0; i < nn; i++) {\n if (i < low || i > high) {\n d[i] = H.get(i, i);\n e[i] = 0;\n }\n\n for (j = Math.max(i - 1, 0); j < nn; j++) {\n norm = norm + Math.abs(H.get(i, j));\n }\n }\n\n while (n >= low) {\n l = n;\n while (l > low) {\n s = Math.abs(H.get(l - 1, l - 1)) + Math.abs(H.get(l, l));\n if (s === 0) {\n s = norm;\n }\n if (Math.abs(H.get(l, l - 1)) < eps * s) {\n break;\n }\n l--;\n }\n\n if (l === n) {\n H.set(n, n, H.get(n, n) + exshift);\n d[n] = H.get(n, n);\n e[n] = 0;\n n--;\n iter = 0;\n } else if (l === n - 1) {\n w = H.get(n, n - 1) * H.get(n - 1, n);\n p = (H.get(n - 1, n - 1) - H.get(n, n)) / 2;\n q = p * p + w;\n z = Math.sqrt(Math.abs(q));\n H.set(n, n, H.get(n, n) + exshift);\n H.set(n - 1, n - 1, H.get(n - 1, n - 1) + exshift);\n x = H.get(n, n);\n\n if (q >= 0) {\n z = p >= 0 ? p + z : p - z;\n d[n - 1] = x + z;\n d[n] = d[n - 1];\n if (z !== 0) {\n d[n] = x - w / z;\n }\n e[n - 1] = 0;\n e[n] = 0;\n x = H.get(n, n - 1);\n s = Math.abs(x) + Math.abs(z);\n p = x / s;\n q = z / s;\n r = Math.sqrt(p * p + q * q);\n p = p / r;\n q = q / r;\n\n for (j = n - 1; j < nn; j++) {\n z = H.get(n - 1, j);\n H.set(n - 1, j, q * z + p * H.get(n, j));\n H.set(n, j, q * H.get(n, j) - p * z);\n }\n\n for (i = 0; i <= n; i++) {\n z = H.get(i, n - 1);\n H.set(i, n - 1, q * z + p * H.get(i, n));\n H.set(i, n, q * H.get(i, n) - p * z);\n }\n\n for (i = low; i <= high; i++) {\n z = V.get(i, n - 1);\n V.set(i, n - 1, q * z + p * V.get(i, n));\n V.set(i, n, q * V.get(i, n) - p * z);\n }\n } else {\n d[n - 1] = x + p;\n d[n] = x + p;\n e[n - 1] = z;\n e[n] = -z;\n }\n\n n = n - 2;\n iter = 0;\n } else {\n x = H.get(n, n);\n y = 0;\n w = 0;\n if (l < n) {\n y = H.get(n - 1, n - 1);\n w = H.get(n, n - 1) * H.get(n - 1, n);\n }\n\n if (iter === 10) {\n exshift += x;\n for (i = low; i <= n; i++) {\n H.set(i, i, H.get(i, i) - x);\n }\n s = Math.abs(H.get(n, n - 1)) + Math.abs(H.get(n - 1, n - 2));\n x = y = 0.75 * s;\n w = -0.4375 * s * s;\n }\n\n if (iter === 30) {\n s = (y - x) / 2;\n s = s * s + w;\n if (s > 0) {\n s = Math.sqrt(s);\n if (y < x) {\n s = -s;\n }\n s = x - w / ((y - x) / 2 + s);\n for (i = low; i <= n; i++) {\n H.set(i, i, H.get(i, i) - s);\n }\n exshift += s;\n x = y = w = 0.964;\n }\n }\n\n iter = iter + 1;\n\n m = n - 2;\n while (m >= l) {\n z = H.get(m, m);\n r = x - z;\n s = y - z;\n p = (r * s - w) / H.get(m + 1, m) + H.get(m, m + 1);\n q = H.get(m + 1, m + 1) - z - r - s;\n r = H.get(m + 2, m + 1);\n s = Math.abs(p) + Math.abs(q) + Math.abs(r);\n p = p / s;\n q = q / s;\n r = r / s;\n if (m === l) {\n break;\n }\n if (\n Math.abs(H.get(m, m - 1)) * (Math.abs(q) + Math.abs(r)) <\n eps *\n (Math.abs(p) *\n (Math.abs(H.get(m - 1, m - 1)) +\n Math.abs(z) +\n Math.abs(H.get(m + 1, m + 1))))\n ) {\n break;\n }\n m--;\n }\n\n for (i = m + 2; i <= n; i++) {\n H.set(i, i - 2, 0);\n if (i > m + 2) {\n H.set(i, i - 3, 0);\n }\n }\n\n for (k = m; k <= n - 1; k++) {\n notlast = k !== n - 1;\n if (k !== m) {\n p = H.get(k, k - 1);\n q = H.get(k + 1, k - 1);\n r = notlast ? H.get(k + 2, k - 1) : 0;\n x = Math.abs(p) + Math.abs(q) + Math.abs(r);\n if (x !== 0) {\n p = p / x;\n q = q / x;\n r = r / x;\n }\n }\n\n if (x === 0) {\n break;\n }\n\n s = Math.sqrt(p * p + q * q + r * r);\n if (p < 0) {\n s = -s;\n }\n\n if (s !== 0) {\n if (k !== m) {\n H.set(k, k - 1, -s * x);\n } else if (l !== m) {\n H.set(k, k - 1, -H.get(k, k - 1));\n }\n\n p = p + s;\n x = p / s;\n y = q / s;\n z = r / s;\n q = q / p;\n r = r / p;\n\n for (j = k; j < nn; j++) {\n p = H.get(k, j) + q * H.get(k + 1, j);\n if (notlast) {\n p = p + r * H.get(k + 2, j);\n H.set(k + 2, j, H.get(k + 2, j) - p * z);\n }\n\n H.set(k, j, H.get(k, j) - p * x);\n H.set(k + 1, j, H.get(k + 1, j) - p * y);\n }\n\n for (i = 0; i <= Math.min(n, k + 3); i++) {\n p = x * H.get(i, k) + y * H.get(i, k + 1);\n if (notlast) {\n p = p + z * H.get(i, k + 2);\n H.set(i, k + 2, H.get(i, k + 2) - p * r);\n }\n\n H.set(i, k, H.get(i, k) - p);\n H.set(i, k + 1, H.get(i, k + 1) - p * q);\n }\n\n for (i = low; i <= high; i++) {\n p = x * V.get(i, k) + y * V.get(i, k + 1);\n if (notlast) {\n p = p + z * V.get(i, k + 2);\n V.set(i, k + 2, V.get(i, k + 2) - p * r);\n }\n\n V.set(i, k, V.get(i, k) - p);\n V.set(i, k + 1, V.get(i, k + 1) - p * q);\n }\n }\n }\n }\n }\n\n if (norm === 0) {\n return;\n }\n\n for (n = nn - 1; n >= 0; n--) {\n p = d[n];\n q = e[n];\n\n if (q === 0) {\n l = n;\n H.set(n, n, 1);\n for (i = n - 1; i >= 0; i--) {\n w = H.get(i, i) - p;\n r = 0;\n for (j = l; j <= n; j++) {\n r = r + H.get(i, j) * H.get(j, n);\n }\n\n if (e[i] < 0) {\n z = w;\n s = r;\n } else {\n l = i;\n if (e[i] === 0) {\n H.set(i, n, w !== 0 ? -r / w : -r / (eps * norm));\n } else {\n x = H.get(i, i + 1);\n y = H.get(i + 1, i);\n q = (d[i] - p) * (d[i] - p) + e[i] * e[i];\n t = (x * s - z * r) / q;\n H.set(i, n, t);\n H.set(\n i + 1,\n n,\n Math.abs(x) > Math.abs(z) ? (-r - w * t) / x : (-s - y * t) / z\n );\n }\n\n t = Math.abs(H.get(i, n));\n if (eps * t * t > 1) {\n for (j = i; j <= n; j++) {\n H.set(j, n, H.get(j, n) / t);\n }\n }\n }\n }\n } else if (q < 0) {\n l = n - 1;\n\n if (Math.abs(H.get(n, n - 1)) > Math.abs(H.get(n - 1, n))) {\n H.set(n - 1, n - 1, q / H.get(n, n - 1));\n H.set(n - 1, n, -(H.get(n, n) - p) / H.get(n, n - 1));\n } else {\n cdivres = cdiv(0, -H.get(n - 1, n), H.get(n - 1, n - 1) - p, q);\n H.set(n - 1, n - 1, cdivres[0]);\n H.set(n - 1, n, cdivres[1]);\n }\n\n H.set(n, n - 1, 0);\n H.set(n, n, 1);\n for (i = n - 2; i >= 0; i--) {\n ra = 0;\n sa = 0;\n for (j = l; j <= n; j++) {\n ra = ra + H.get(i, j) * H.get(j, n - 1);\n sa = sa + H.get(i, j) * H.get(j, n);\n }\n\n w = H.get(i, i) - p;\n\n if (e[i] < 0) {\n z = w;\n r = ra;\n s = sa;\n } else {\n l = i;\n if (e[i] === 0) {\n cdivres = cdiv(-ra, -sa, w, q);\n H.set(i, n - 1, cdivres[0]);\n H.set(i, n, cdivres[1]);\n } else {\n x = H.get(i, i + 1);\n y = H.get(i + 1, i);\n vr = (d[i] - p) * (d[i] - p) + e[i] * e[i] - q * q;\n vi = (d[i] - p) * 2 * q;\n if (vr === 0 && vi === 0) {\n vr =\n eps *\n norm *\n (Math.abs(w) +\n Math.abs(q) +\n Math.abs(x) +\n Math.abs(y) +\n Math.abs(z));\n }\n cdivres = cdiv(\n x * r - z * ra + q * sa,\n x * s - z * sa - q * ra,\n vr,\n vi\n );\n H.set(i, n - 1, cdivres[0]);\n H.set(i, n, cdivres[1]);\n if (Math.abs(x) > Math.abs(z) + Math.abs(q)) {\n H.set(\n i + 1,\n n - 1,\n (-ra - w * H.get(i, n - 1) + q * H.get(i, n)) / x\n );\n H.set(\n i + 1,\n n,\n (-sa - w * H.get(i, n) - q * H.get(i, n - 1)) / x\n );\n } else {\n cdivres = cdiv(\n -r - y * H.get(i, n - 1),\n -s - y * H.get(i, n),\n z,\n q\n );\n H.set(i + 1, n - 1, cdivres[0]);\n H.set(i + 1, n, cdivres[1]);\n }\n }\n\n t = Math.max(Math.abs(H.get(i, n - 1)), Math.abs(H.get(i, n)));\n if (eps * t * t > 1) {\n for (j = i; j <= n; j++) {\n H.set(j, n - 1, H.get(j, n - 1) / t);\n H.set(j, n, H.get(j, n) / t);\n }\n }\n }\n }\n }\n }\n\n for (i = 0; i < nn; i++) {\n if (i < low || i > high) {\n for (j = i; j < nn; j++) {\n V.set(i, j, H.get(i, j));\n }\n }\n }\n\n for (j = nn - 1; j >= low; j--) {\n for (i = low; i <= high; i++) {\n z = 0;\n for (k = low; k <= Math.min(j, high); k++) {\n z = z + V.get(i, k) * H.get(k, j);\n }\n V.set(i, j, z);\n }\n }\n}\n\nfunction cdiv(xr, xi, yr, yi) {\n var r, d;\n if (Math.abs(yr) > Math.abs(yi)) {\n r = yi / yr;\n d = yr + r * yi;\n return [(xr + r * xi) / d, (xi - r * xr) / d];\n } else {\n r = yr / yi;\n d = yi + r * yr;\n return [(r * xr + xi) / d, (r * xi - xr) / d];\n }\n}\n","import Matrix from '../matrix';\nimport WrapperMatrix2D from '../wrap/WrapperMatrix2D';\n\nexport default class CholeskyDecomposition {\n constructor(value) {\n value = WrapperMatrix2D.checkMatrix(value);\n if (!value.isSymmetric()) {\n throw new Error('Matrix is not symmetric');\n }\n\n var a = value;\n var dimension = a.rows;\n var l = new Matrix(dimension, dimension);\n var positiveDefinite = true;\n var i, j, k;\n\n for (j = 0; j < dimension; j++) {\n var d = 0;\n for (k = 0; k < j; k++) {\n var s = 0;\n for (i = 0; i < k; i++) {\n s += l.get(k, i) * l.get(j, i);\n }\n s = (a.get(j, k) - s) / l.get(k, k);\n l.set(j, k, s);\n d = d + s * s;\n }\n\n d = a.get(j, j) - d;\n\n positiveDefinite &= d > 0;\n l.set(j, j, Math.sqrt(Math.max(d, 0)));\n for (k = j + 1; k < dimension; k++) {\n l.set(j, k, 0);\n }\n }\n\n if (!positiveDefinite) {\n throw new Error('Matrix is not positive definite');\n }\n\n this.L = l;\n }\n\n solve(value) {\n value = WrapperMatrix2D.checkMatrix(value);\n\n var l = this.L;\n var dimension = l.rows;\n\n if (value.rows !== dimension) {\n throw new Error('Matrix dimensions do not match');\n }\n\n var count = value.columns;\n var B = value.clone();\n var i, j, k;\n\n for (k = 0; k < dimension; k++) {\n for (j = 0; j < count; j++) {\n for (i = 0; i < k; i++) {\n B.set(k, j, B.get(k, j) - B.get(i, j) * l.get(k, i));\n }\n B.set(k, j, B.get(k, j) / l.get(k, k));\n }\n }\n\n for (k = dimension - 1; k >= 0; k--) {\n for (j = 0; j < count; j++) {\n for (i = k + 1; i < dimension; i++) {\n B.set(k, j, B.get(k, j) - B.get(i, j) * l.get(i, k));\n }\n B.set(k, j, B.get(k, j) / l.get(k, k));\n }\n }\n\n return B;\n }\n\n get lowerTriangularMatrix() {\n return this.L;\n }\n}\n","import isArray from 'is-any-array';\n\n/**\n * Computes the mean of the given values\n * @param {Array} input\n * @return {number}\n */\n\nfunction mean(input) {\n if (!isArray(input)) {\n throw new TypeError('input must be an array');\n }\n\n if (input.length === 0) {\n throw new TypeError('input must not be empty');\n }\n\n var sum = 0;\n\n for (var i = 0; i < input.length; i++) {\n sum += input[i];\n }\n\n return sum / input.length;\n}\n\nexport default mean;\n","import Matrix from 'ml-matrix';\nimport meanArray from 'ml-array-mean';\n\n/**\n * @private\n * return an array of probabilities of each class\n * @param {Array} array - contains the classes\n * @param {number} numberOfClasses\n * @return {Matrix} - rowVector of probabilities.\n */\nexport function toDiscreteDistribution(array, numberOfClasses) {\n var counts = new Array(numberOfClasses).fill(0);\n for (var i = 0; i < array.length; ++i) {\n counts[array[i]] += 1 / array.length;\n }\n\n return Matrix.rowVector(counts);\n}\n\n/**\n * @private\n * Retrieves the impurity of array of predictions\n * @param {Array} array - predictions.\n * @return {number} Gini impurity\n */\nexport function giniImpurity(array) {\n if (array.length === 0) {\n return 0;\n }\n\n var probabilities = toDiscreteDistribution(\n array,\n getNumberOfClasses(array)\n ).getRow(0);\n\n var sum = 0.0;\n for (var i = 0; i < probabilities.length; ++i) {\n sum += probabilities[i] * probabilities[i];\n }\n\n return 1 - sum;\n}\n\n/**\n * @private\n * Return the number of classes given the array of predictions.\n * @param {Array} array - predictions.\n * @return {number} Number of classes.\n */\nexport function getNumberOfClasses(array) {\n return array.filter(function (val, i, arr) {\n return arr.indexOf(val) === i;\n }).length;\n}\n\n/**\n * @private\n * Calculates the Gini Gain of an array of predictions and those predictions splitted by a feature.\n * @para {Array} array - Predictions\n * @param {object} splitted - Object with elements \"greater\" and \"lesser\" that contains an array of predictions splitted.\n * @return {number} - Gini Gain.\n */\n\nexport function giniGain(array, splitted) {\n var splitsImpurity = 0.0;\n var splits = ['greater', 'lesser'];\n\n for (var i = 0; i < splits.length; ++i) {\n var currentSplit = splitted[splits[i]];\n splitsImpurity +=\n (giniImpurity(currentSplit) * currentSplit.length) / array.length;\n }\n\n return giniImpurity(array) - splitsImpurity;\n}\n\n/**\n * @private\n * Calculates the squared error of a predictions values.\n * @param {Array} array - predictions values\n * @return {number} squared error.\n */\nexport function squaredError(array) {\n var l = array.length;\n\n var m = meanArray(array);\n var squaredError = 0.0;\n\n for (var i = 0; i < l; ++i) {\n var currentElement = array[i];\n squaredError += (currentElement - m) * (currentElement - m);\n }\n\n return squaredError;\n}\n\n/**\n * @private\n * Calculates the sum of squared error of the two arrays that contains the splitted values.\n * @param {Array} array - this argument is no necessary but is used to fit with the main interface.\n * @param {object} splitted - Object with elements \"greater\" and \"lesser\" that contains an array of predictions splitted.\n * @return {number} - sum of squared errors.\n */\nexport function regressionError(array, splitted) {\n var error = 0.0;\n var splits = ['greater', 'lesser'];\n\n for (var i = 0; i < splits.length; ++i) {\n var currentSplit = splitted[splits[i]];\n error += squaredError(currentSplit);\n }\n return error;\n}\n\n/**\n * @private\n * Split the training set and values from a given column of the training set if is less than a value\n * @param {Matrix} X - Training set.\n * @param {Array} y - Training values.\n * @param {number} column - Column to split.\n * @param {number} value - value to split the Training set and values.\n * @return {object} - Object that contains the splitted values.\n */\nexport function matrixSplitter(X, y, column, value) {\n var lesserX = [];\n var greaterX = [];\n var lesserY = [];\n var greaterY = [];\n\n for (var i = 0; i < X.rows; ++i) {\n if (X.get(i, column) < value) {\n lesserX.push(X.getRow(i));\n lesserY.push(y[i]);\n } else {\n greaterX.push(X.getRow(i));\n greaterY.push(y[i]);\n }\n }\n\n return {\n greaterX: greaterX,\n greaterY: greaterY,\n lesserX: lesserX,\n lesserY: lesserY\n };\n}\n\n/**\n * @private\n * Calculates the mean between two values\n * @param {number} a\n * @param {number} b\n * @return {number}\n */\nexport function mean(a, b) {\n return (a + b) / 2;\n}\n\n/**\n * @private\n * Returns a list of tuples that contains the i-th element of each array.\n * @param {Array} a\n * @param {Array} b\n * @return {Array} list of tuples.\n */\nexport function zip(a, b) {\n if (a.length !== b.length) {\n throw new TypeError(\n `Error on zip: the size of a: ${a.length} is different from b: ${\n b.length\n }`\n );\n }\n\n var ret = new Array(a.length);\n for (var i = 0; i < a.length; ++i) {\n ret[i] = [a[i], b[i]];\n }\n\n return ret;\n}\n","import Matrix from 'ml-matrix';\nimport mean from 'ml-array-mean';\n\nimport * as Utils from './utils';\n\nconst gainFunctions = {\n gini: Utils.giniGain,\n regression: Utils.regressionError\n};\n\nconst splitFunctions = {\n mean: Utils.mean\n};\n\nexport default class TreeNode {\n /**\n * @private\n * Constructor for a tree node given the options received on the main classes (DecisionTreeClassifier, DecisionTreeRegression)\n * @param {object|TreeNode} options for loading\n * @constructor\n */\n constructor(options) {\n // options parameters\n this.kind = options.kind;\n this.gainFunction = options.gainFunction;\n this.splitFunction = options.splitFunction;\n this.minNumSamples = options.minNumSamples;\n this.maxDepth = options.maxDepth;\n }\n\n /**\n * @private\n * Function that retrieve the best feature to make the split.\n * @param {Matrix} XTranspose - Training set transposed\n * @param {Array} y - labels or values (depending of the decision tree)\n * @return {object} - return tree values, the best gain, column and the split value.\n */\n bestSplit(XTranspose, y) {\n // Depending in the node tree class, we set the variables to check information gain (to classify)\n // or error (for regression)\n\n var bestGain = this.kind === 'classifier' ? -Infinity : Infinity;\n var check = this.kind === 'classifier' ? (a, b) => a > b : (a, b) => a < b;\n\n var maxColumn;\n var maxValue;\n\n for (var i = 0; i < XTranspose.rows; ++i) {\n var currentFeature = XTranspose.getRow(i);\n var splitValues = this.featureSplit(currentFeature, y);\n for (var j = 0; j < splitValues.length; ++j) {\n var currentSplitVal = splitValues[j];\n var splitted = this.split(currentFeature, y, currentSplitVal);\n\n var gain = gainFunctions[this.gainFunction](y, splitted);\n if (check(gain, bestGain)) {\n maxColumn = i;\n maxValue = currentSplitVal;\n bestGain = gain;\n }\n }\n }\n\n return {\n maxGain: bestGain,\n maxColumn: maxColumn,\n maxValue: maxValue\n };\n }\n\n /**\n * @private\n * Makes the split of the training labels or values from the training set feature given a split value.\n * @param {Array} x - Training set feature\n * @param {Array} y - Training set value or label\n * @param {number} splitValue\n * @return {object}\n */\n split(x, y, splitValue) {\n var lesser = [];\n var greater = [];\n\n for (var i = 0; i < x.length; ++i) {\n if (x[i] < splitValue) {\n lesser.push(y[i]);\n } else {\n greater.push(y[i]);\n }\n }\n\n return {\n greater: greater,\n lesser: lesser\n };\n }\n\n /**\n * @private\n * Calculates the possible points to split over the tree given a training set feature and corresponding labels or values.\n * @param {Array} x - Training set feature\n * @param {Array} y - Training set value or label\n * @return {Array} possible split values.\n */\n featureSplit(x, y) {\n var splitValues = [];\n var arr = Utils.zip(x, y);\n arr.sort(function (a, b) {\n return a[0] - b[0];\n });\n\n for (var i = 1; i < arr.length; ++i) {\n if (arr[i - 1][1] !== arr[i][1]) {\n splitValues.push(\n splitFunctions[this.splitFunction](arr[i - 1][0], arr[i][0])\n );\n }\n }\n\n return splitValues;\n }\n\n /**\n * @private\n * Calculate the predictions of a leaf tree node given the training labels or values\n * @param {Array} y\n */\n calculatePrediction(y) {\n if (this.kind === 'classifier') {\n this.distribution = Utils.toDiscreteDistribution(\n y,\n Utils.getNumberOfClasses(y)\n );\n if (this.distribution.columns === 0) {\n throw new TypeError('Error on calculate the prediction');\n }\n } else {\n this.distribution = mean(y);\n }\n }\n\n /**\n * @private\n * Train a node given the training set and labels, because it trains recursively, it also receive\n * the current depth of the node, parent gain to avoid infinite recursion and boolean value to check if\n * the training set is transposed.\n * @param {Matrix} X - Training set (could be transposed or not given transposed).\n * @param {Array} y - Training labels or values.\n * @param {number} currentDepth - Current depth of the node.\n * @param {number} parentGain - parent node gain or error.\n */\n train(X, y, currentDepth, parentGain) {\n if (X.rows <= this.minNumSamples) {\n this.calculatePrediction(y);\n return;\n }\n if (parentGain === undefined) parentGain = 0.0;\n\n var XTranspose = X.transpose();\n var split = this.bestSplit(XTranspose, y);\n\n this.splitValue = split.maxValue;\n this.splitColumn = split.maxColumn;\n this.gain = split.maxGain;\n\n var splittedMatrix = Utils.matrixSplitter(\n X,\n y,\n this.splitColumn,\n this.splitValue\n );\n\n if (\n currentDepth < this.maxDepth &&\n (this.gain > 0.01 && this.gain !== parentGain) &&\n (splittedMatrix.lesserX.length > 0 && splittedMatrix.greaterX.length > 0)\n ) {\n this.left = new TreeNode(this);\n this.right = new TreeNode(this);\n\n var lesserX = new Matrix(splittedMatrix.lesserX);\n var greaterX = new Matrix(splittedMatrix.greaterX);\n\n this.left.train(\n lesserX,\n splittedMatrix.lesserY,\n currentDepth + 1,\n this.gain\n );\n this.right.train(\n greaterX,\n splittedMatrix.greaterY,\n currentDepth + 1,\n this.gain\n );\n } else {\n this.calculatePrediction(y);\n }\n }\n\n /**\n * @private\n * Calculates the prediction of a given element.\n * @param {Array} row\n * @return {number|Array} prediction\n * * if a node is a classifier returns an array of probabilities of each class.\n * * if a node is for regression returns a number with the prediction.\n */\n classify(row) {\n if (this.right && this.left) {\n if (row[this.splitColumn] < this.splitValue) {\n return this.left.classify(row);\n } else {\n return this.right.classify(row);\n }\n }\n\n return this.distribution;\n }\n\n /**\n * @private\n * Set the parameter of the current node and their children.\n * @param {object} node - parameters of the current node and the children.\n */\n setNodeParameters(node) {\n if (node.distribution !== undefined) {\n this.distribution =\n node.distribution.constructor === Array\n ? new Matrix(node.distribution)\n : node.distribution;\n } else {\n this.distribution = undefined;\n this.splitValue = node.splitValue;\n this.splitColumn = node.splitColumn;\n this.gain = node.gain;\n\n this.left = new TreeNode(this);\n this.right = new TreeNode(this);\n\n if (node.left !== {}) {\n this.left.setNodeParameters(node.left);\n }\n if (node.right !== {}) {\n this.right.setNodeParameters(node.right);\n }\n }\n }\n}\n","import Matrix from 'ml-matrix';\n\nimport Tree from './TreeNode';\n\nconst defaultOptions = {\n gainFunction: 'gini',\n splitFunction: 'mean',\n minNumSamples: 3,\n maxDepth: Infinity\n};\n\nexport class DecisionTreeClassifier {\n /**\n * Create new Decision Tree Classifier with CART implementation with the given options\n * @param {object} options\n * @param {string} [options.gainFunction=\"gini\"] - gain function to get the best split, \"gini\" the only one supported.\n * @param {string} [options.splitFunction=\"mean\"] - given two integers from a split feature, get the value to split, \"mean\" the only one supported.\n * @param {number} [options.minNumSamples=3] - minimum number of samples to create a leaf node to decide a class.\n * @param {number} [options.maxDepth=Infinity] - Max depth of the tree.\n * @param {object} model - for load purposes.\n * @constructor\n */\n constructor(options, model) {\n if (options === true) {\n this.options = model.options;\n this.root = new Tree(model.options);\n this.root.setNodeParameters(model.root);\n } else {\n this.options = Object.assign({}, defaultOptions, options);\n this.options.kind = 'classifier';\n }\n }\n\n /**\n * Train the decision tree with the given training set and labels.\n * @param {Matrix|MatrixTransposeView|Array} trainingSet\n * @param {Array} trainingLabels\n */\n train(trainingSet, trainingLabels) {\n this.root = new Tree(this.options);\n trainingSet = Matrix.checkMatrix(trainingSet);\n this.root.train(trainingSet, trainingLabels, 0, null);\n }\n\n /**\n * Predicts the output given the matrix to predict.\n * @param {Matrix|MatrixTransposeView|Array} toPredict\n * @return {Array} predictions\n */\n predict(toPredict) {\n toPredict = Matrix.checkMatrix(toPredict);\n var predictions = new Array(toPredict.rows);\n\n for (var i = 0; i < toPredict.rows; ++i) {\n predictions[i] = this.root\n .classify(toPredict.getRow(i))\n .maxRowIndex(0)[1];\n }\n\n return predictions;\n }\n\n /**\n * Export the current model to JSON.\n * @return {object} - Current model.\n */\n toJSON() {\n return {\n options: this.options,\n root: this.root,\n name: 'DTClassifier'\n };\n }\n\n /**\n * Load a Decision tree classifier with the given model.\n * @param {object} model\n * @return {DecisionTreeClassifier}\n */\n static load(model) {\n if (model.name !== 'DTClassifier') {\n throw new RangeError(`Invalid model: ${model.name}`);\n }\n\n return new DecisionTreeClassifier(true, model);\n }\n}\n","import Matrix from 'ml-matrix';\n\nimport Tree from './TreeNode';\n\nconst defaultOptions = {\n gainFunction: 'regression',\n splitFunction: 'mean',\n minNumSamples: 3,\n maxDepth: Infinity\n};\n\nexport class DecisionTreeRegression {\n /**\n * Create new Decision Tree Regression with CART implementation with the given options.\n * @param {object} options\n * @param {string} [options.gainFunction=\"regression\"] - gain function to get the best split, \"regression\" the only one supported.\n * @param {string} [options.splitFunction=\"mean\"] - given two integers from a split feature, get the value to split, \"mean\" the only one supported.\n * @param {number} [options.minNumSamples=3] - minimum number of samples to create a leaf node to decide a class.\n * @param {number} [options.maxDepth=Infinity] - Max depth of the tree.\n * @param {object} model - for load purposes.\n */\n constructor(options, model) {\n if (options === true) {\n this.options = model.options;\n this.root = new Tree(model.options);\n this.root.setNodeParameters(model.root);\n } else {\n this.options = Object.assign({}, defaultOptions, options);\n this.options.kind = 'regression';\n }\n }\n\n /**\n * Train the decision tree with the given training set and values.\n * @param {Matrix|MatrixTransposeView|Array} trainingSet\n * @param {Array} trainingValues\n */\n train(trainingSet, trainingValues) {\n this.root = new Tree(this.options);\n\n if (typeof trainingSet[0] !== 'undefined' && trainingSet[0].length === undefined) {\n trainingSet = Matrix.columnVector(trainingSet);\n } else {\n trainingSet = Matrix.checkMatrix(trainingSet);\n }\n this.root.train(trainingSet, trainingValues, 0);\n }\n\n /**\n * Predicts the values given the matrix to predict.\n * @param {Matrix|MatrixTransposeView|Array} toPredict\n * @return {Array} predictions\n */\n predict(toPredict) {\n if (typeof toPredict[0] !== 'undefined' && toPredict[0].length === undefined) {\n toPredict = Matrix.columnVector(toPredict);\n }\n toPredict = Matrix.checkMatrix(toPredict);\n\n var predictions = new Array(toPredict.rows);\n for (var i = 0; i < toPredict.rows; ++i) {\n predictions[i] = this.root.classify(toPredict.getRow(i));\n }\n\n return predictions;\n }\n\n /**\n * Export the current model to JSON.\n * @return {object} - Current model.\n */\n toJSON() {\n return {\n options: this.options,\n root: this.root,\n name: 'DTRegression'\n };\n }\n\n /**\n * Load a Decision tree regression with the given model.\n * @param {object} model\n * @return {DecisionTreeRegression}\n */\n static load(model) {\n if (model.name !== 'DTRegression') {\n throw new RangeError(`Invalid model:${model.name}`);\n }\n\n return new DecisionTreeRegression(true, model);\n }\n}\n","const SMALLEST_UNSAFE_INTEGER = 0x20000000000000;\r\nconst LARGEST_SAFE_INTEGER = SMALLEST_UNSAFE_INTEGER - 1;\r\nconst UINT32_MAX = -1 >>> 0;\r\nconst UINT32_SIZE = UINT32_MAX + 1;\r\nconst INT32_SIZE = UINT32_SIZE / 2;\r\nconst INT32_MAX = INT32_SIZE - 1;\r\nconst UINT21_SIZE = 1 << 21;\r\nconst UINT21_MAX = UINT21_SIZE - 1;\n\n/**\r\n * Returns a value within [-0x80000000, 0x7fffffff]\r\n */\r\nfunction int32(engine) {\r\n return engine.next() | 0;\r\n}\n\nfunction add(distribution, addend) {\r\n if (addend === 0) {\r\n return distribution;\r\n }\r\n else {\r\n return engine => distribution(engine) + addend;\r\n }\r\n}\n\n/**\r\n * Returns a value within [-0x20000000000000, 0x1fffffffffffff]\r\n */\r\nfunction int53(engine) {\r\n const high = engine.next() | 0;\r\n const low = engine.next() >>> 0;\r\n return ((high & UINT21_MAX) * UINT32_SIZE +\r\n low +\r\n (high & UINT21_SIZE ? -SMALLEST_UNSAFE_INTEGER : 0));\r\n}\n\n/**\r\n * Returns a value within [-0x20000000000000, 0x20000000000000]\r\n */\r\nfunction int53Full(engine) {\r\n while (true) {\r\n const high = engine.next() | 0;\r\n if (high & 0x400000) {\r\n if ((high & 0x7fffff) === 0x400000 && (engine.next() | 0) === 0) {\r\n return SMALLEST_UNSAFE_INTEGER;\r\n }\r\n }\r\n else {\r\n const low = engine.next() >>> 0;\r\n return ((high & UINT21_MAX) * UINT32_SIZE +\r\n low +\r\n (high & UINT21_SIZE ? -SMALLEST_UNSAFE_INTEGER : 0));\r\n }\r\n }\r\n}\n\n/**\r\n * Returns a value within [0, 0xffffffff]\r\n */\r\nfunction uint32(engine) {\r\n return engine.next() >>> 0;\r\n}\n\n/**\r\n * Returns a value within [0, 0x1fffffffffffff]\r\n */\r\nfunction uint53(engine) {\r\n const high = engine.next() & UINT21_MAX;\r\n const low = engine.next() >>> 0;\r\n return high * UINT32_SIZE + low;\r\n}\n\n/**\r\n * Returns a value within [0, 0x20000000000000]\r\n */\r\nfunction uint53Full(engine) {\r\n while (true) {\r\n const high = engine.next() | 0;\r\n if (high & UINT21_SIZE) {\r\n if ((high & UINT21_MAX) === 0 && (engine.next() | 0) === 0) {\r\n return SMALLEST_UNSAFE_INTEGER;\r\n }\r\n }\r\n else {\r\n const low = engine.next() >>> 0;\r\n return (high & UINT21_MAX) * UINT32_SIZE + low;\r\n }\r\n }\r\n}\n\nfunction isPowerOfTwoMinusOne(value) {\r\n return ((value + 1) & value) === 0;\r\n}\r\nfunction bitmask(masking) {\r\n return (engine) => engine.next() & masking;\r\n}\r\nfunction downscaleToLoopCheckedRange(range) {\r\n const extendedRange = range + 1;\r\n const maximum = extendedRange * Math.floor(UINT32_SIZE / extendedRange);\r\n return engine => {\r\n let value = 0;\r\n do {\r\n value = engine.next() >>> 0;\r\n } while (value >= maximum);\r\n return value % extendedRange;\r\n };\r\n}\r\nfunction downscaleToRange(range) {\r\n if (isPowerOfTwoMinusOne(range)) {\r\n return bitmask(range);\r\n }\r\n else {\r\n return downscaleToLoopCheckedRange(range);\r\n }\r\n}\r\nfunction isEvenlyDivisibleByMaxInt32(value) {\r\n return (value | 0) === 0;\r\n}\r\nfunction upscaleWithHighMasking(masking) {\r\n return engine => {\r\n const high = engine.next() & masking;\r\n const low = engine.next() >>> 0;\r\n return high * UINT32_SIZE + low;\r\n };\r\n}\r\nfunction upscaleToLoopCheckedRange(extendedRange) {\r\n const maximum = extendedRange * Math.floor(SMALLEST_UNSAFE_INTEGER / extendedRange);\r\n return engine => {\r\n let ret = 0;\r\n do {\r\n const high = engine.next() & UINT21_MAX;\r\n const low = engine.next() >>> 0;\r\n ret = high * UINT32_SIZE + low;\r\n } while (ret >= maximum);\r\n return ret % extendedRange;\r\n };\r\n}\r\nfunction upscaleWithinU53(range) {\r\n const extendedRange = range + 1;\r\n if (isEvenlyDivisibleByMaxInt32(extendedRange)) {\r\n const highRange = ((extendedRange / UINT32_SIZE) | 0) - 1;\r\n if (isPowerOfTwoMinusOne(highRange)) {\r\n return upscaleWithHighMasking(highRange);\r\n }\r\n }\r\n return upscaleToLoopCheckedRange(extendedRange);\r\n}\r\nfunction upscaleWithinI53AndLoopCheck(min, max) {\r\n return engine => {\r\n let ret = 0;\r\n do {\r\n const high = engine.next() | 0;\r\n const low = engine.next() >>> 0;\r\n ret =\r\n (high & UINT21_MAX) * UINT32_SIZE +\r\n low +\r\n (high & UINT21_SIZE ? -SMALLEST_UNSAFE_INTEGER : 0);\r\n } while (ret < min || ret > max);\r\n return ret;\r\n };\r\n}\r\n/**\r\n * Returns a Distribution to return a value within [min, max]\r\n * @param min The minimum integer value, inclusive. No less than -0x20000000000000.\r\n * @param max The maximum integer value, inclusive. No greater than 0x20000000000000.\r\n */\r\nfunction integer(min, max) {\r\n min = Math.floor(min);\r\n max = Math.floor(max);\r\n if (min < -SMALLEST_UNSAFE_INTEGER || !isFinite(min)) {\r\n throw new RangeError(`Expected min to be at least ${-SMALLEST_UNSAFE_INTEGER}`);\r\n }\r\n else if (max > SMALLEST_UNSAFE_INTEGER || !isFinite(max)) {\r\n throw new RangeError(`Expected max to be at most ${SMALLEST_UNSAFE_INTEGER}`);\r\n }\r\n const range = max - min;\r\n if (range <= 0 || !isFinite(range)) {\r\n return () => min;\r\n }\r\n else if (range === UINT32_MAX) {\r\n if (min === 0) {\r\n return uint32;\r\n }\r\n else {\r\n return add(int32, min + INT32_SIZE);\r\n }\r\n }\r\n else if (range < UINT32_MAX) {\r\n return add(downscaleToRange(range), min);\r\n }\r\n else if (range === LARGEST_SAFE_INTEGER) {\r\n return add(uint53, min);\r\n }\r\n else if (range < LARGEST_SAFE_INTEGER) {\r\n return add(upscaleWithinU53(range), min);\r\n }\r\n else if (max - 1 - min === LARGEST_SAFE_INTEGER) {\r\n return add(uint53Full, min);\r\n }\r\n else if (min === -SMALLEST_UNSAFE_INTEGER &&\r\n max === SMALLEST_UNSAFE_INTEGER) {\r\n return int53Full;\r\n }\r\n else if (min === -SMALLEST_UNSAFE_INTEGER && max === LARGEST_SAFE_INTEGER) {\r\n return int53;\r\n }\r\n else if (min === -LARGEST_SAFE_INTEGER && max === SMALLEST_UNSAFE_INTEGER) {\r\n return add(int53, 1);\r\n }\r\n else if (max === SMALLEST_UNSAFE_INTEGER) {\r\n return add(upscaleWithinI53AndLoopCheck(min - 1, max - 1), 1);\r\n }\r\n else {\r\n return upscaleWithinI53AndLoopCheck(min, max);\r\n }\r\n}\n\nfunction isLeastBitTrue(engine) {\r\n return (engine.next() & 1) === 1;\r\n}\r\nfunction lessThan(distribution, value) {\r\n return engine => distribution(engine) < value;\r\n}\r\nfunction probability(percentage) {\r\n if (percentage <= 0) {\r\n return () => false;\r\n }\r\n else if (percentage >= 1) {\r\n return () => true;\r\n }\r\n else {\r\n const scaled = percentage * UINT32_SIZE;\r\n if (scaled % 1 === 0) {\r\n return lessThan(int32, (scaled - INT32_SIZE) | 0);\r\n }\r\n else {\r\n return lessThan(uint53, Math.round(percentage * SMALLEST_UNSAFE_INTEGER));\r\n }\r\n }\r\n}\r\nfunction bool(numerator, denominator) {\r\n if (denominator == null) {\r\n if (numerator == null) {\r\n return isLeastBitTrue;\r\n }\r\n return probability(numerator);\r\n }\r\n else {\r\n if (numerator <= 0) {\r\n return () => false;\r\n }\r\n else if (numerator >= denominator) {\r\n return () => true;\r\n }\r\n return lessThan(integer(0, denominator - 1), numerator);\r\n }\r\n}\n\n/**\r\n * Returns a Distribution that returns a random `Date` within the inclusive\r\n * range of [`start`, `end`].\r\n * @param start The minimum `Date`\r\n * @param end The maximum `Date`\r\n */\r\nfunction date(start, end) {\r\n const distribution = integer(+start, +end);\r\n return engine => new Date(distribution(engine));\r\n}\n\n/**\r\n * Returns a Distribution to return a value within [1, sideCount]\r\n * @param sideCount The number of sides of the die\r\n */\r\nfunction die(sideCount) {\r\n return integer(1, sideCount);\r\n}\n\n/**\r\n * Returns a distribution that returns an array of length `dieCount` of values\r\n * within [1, `sideCount`]\r\n * @param sideCount The number of sides of each die\r\n * @param dieCount The number of dice\r\n */\r\nfunction dice(sideCount, dieCount) {\r\n const distribution = die(sideCount);\r\n return engine => {\r\n const result = [];\r\n for (let i = 0; i < dieCount; ++i) {\r\n result.push(distribution(engine));\r\n }\r\n return result;\r\n };\r\n}\n\n// tslint:disable:unified-signatures\r\n// has 2**x chars, for faster uniform distribution\r\nconst DEFAULT_STRING_POOL = \"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_-\";\r\nfunction string(pool = DEFAULT_STRING_POOL) {\r\n const poolLength = pool.length;\r\n if (!poolLength) {\r\n throw new Error(\"Expected pool not to be an empty string\");\r\n }\r\n const distribution = integer(0, poolLength - 1);\r\n return (engine, length) => {\r\n let result = \"\";\r\n for (let i = 0; i < length; ++i) {\r\n const j = distribution(engine);\r\n result += pool.charAt(j);\r\n }\r\n return result;\r\n };\r\n}\n\nconst LOWER_HEX_POOL = \"0123456789abcdef\";\r\nconst lowerHex = string(LOWER_HEX_POOL);\r\nconst upperHex = string(LOWER_HEX_POOL.toUpperCase());\r\n/**\r\n * Returns a Distribution that returns a random string comprised of numbers\r\n * or the characters `abcdef` (or `ABCDEF`) of length `length`.\r\n * @param length Length of the result string\r\n * @param uppercase Whether the string should use `ABCDEF` instead of `abcdef`\r\n */\r\nfunction hex(uppercase) {\r\n if (uppercase) {\r\n return upperHex;\r\n }\r\n else {\r\n return lowerHex;\r\n }\r\n}\n\nfunction convertSliceArgument(value, length) {\r\n if (value < 0) {\r\n return Math.max(value + length, 0);\r\n }\r\n else {\r\n return Math.min(value, length);\r\n }\r\n}\n\nfunction toInteger(value) {\r\n const num = +value;\r\n if (num < 0) {\r\n return Math.ceil(num);\r\n }\r\n else {\r\n return Math.floor(num);\r\n }\r\n}\n\n/**\r\n * Returns a random value within the provided `source` within the sliced\r\n * bounds of `begin` and `end`.\r\n * @param source an array of items to pick from\r\n * @param begin the beginning slice index (defaults to `0`)\r\n * @param end the ending slice index (defaults to `source.length`)\r\n */\r\nfunction pick(engine, source, begin, end) {\r\n const length = source.length;\r\n if (length === 0) {\r\n throw new RangeError(\"Cannot pick from an empty array\");\r\n }\r\n const start = begin == null ? 0 : convertSliceArgument(toInteger(begin), length);\r\n const finish = end === void 0 ? length : convertSliceArgument(toInteger(end), length);\r\n if (start >= finish) {\r\n throw new RangeError(`Cannot pick between bounds ${start} and ${finish}`);\r\n }\r\n const distribution = integer(start, finish - 1);\r\n return source[distribution(engine)];\r\n}\n\nfunction multiply(distribution, multiplier) {\r\n if (multiplier === 1) {\r\n return distribution;\r\n }\r\n else if (multiplier === 0) {\r\n return () => 0;\r\n }\r\n else {\r\n return engine => distribution(engine) * multiplier;\r\n }\r\n}\n\n/**\r\n * Returns a floating-point value within [0.0, 1.0)\r\n */\r\nfunction realZeroToOneExclusive(engine) {\r\n return uint53(engine) / SMALLEST_UNSAFE_INTEGER;\r\n}\n\n/**\r\n * Returns a floating-point value within [0.0, 1.0]\r\n */\r\nfunction realZeroToOneInclusive(engine) {\r\n return uint53Full(engine) / SMALLEST_UNSAFE_INTEGER;\r\n}\n\n/**\r\n * Returns a floating-point value within [min, max) or [min, max]\r\n * @param min The minimum floating-point value, inclusive.\r\n * @param max The maximum floating-point value.\r\n * @param inclusive If true, `max` will be inclusive.\r\n */\r\nfunction real(min, max, inclusive = false) {\r\n if (!isFinite(min)) {\r\n throw new RangeError(\"Expected min to be a finite number\");\r\n }\r\n else if (!isFinite(max)) {\r\n throw new RangeError(\"Expected max to be a finite number\");\r\n }\r\n return add(multiply(inclusive ? realZeroToOneInclusive : realZeroToOneExclusive, max - min), min);\r\n}\n\nconst sliceArray = Array.prototype.slice;\n\n/**\r\n * Shuffles an array in-place\r\n * @param engine The Engine to use when choosing random values\r\n * @param array The array to shuffle\r\n * @param downTo minimum index to shuffle. Only used internally.\r\n */\r\nfunction shuffle(engine, array, downTo = 0) {\r\n const length = array.length;\r\n if (length) {\r\n for (let i = (length - 1) >>> 0; i > downTo; --i) {\r\n const distribution = integer(0, i);\r\n const j = distribution(engine);\r\n if (i !== j) {\r\n const tmp = array[i];\r\n array[i] = array[j];\r\n array[j] = tmp;\r\n }\r\n }\r\n }\r\n return array;\r\n}\n\n/**\r\n * From the population array, produce an array with sampleSize elements that\r\n * are randomly chosen without repeats.\r\n * @param engine The Engine to use when choosing random values\r\n * @param population An array that has items to choose a sample from\r\n * @param sampleSize The size of the result array\r\n */\r\nfunction sample(engine, population, sampleSize) {\r\n if (sampleSize < 0 ||\r\n sampleSize > population.length ||\r\n !isFinite(sampleSize)) {\r\n throw new RangeError(\"Expected sampleSize to be within 0 and the length of the population\");\r\n }\r\n if (sampleSize === 0) {\r\n return [];\r\n }\r\n const clone = sliceArray.call(population);\r\n const length = clone.length;\r\n if (length === sampleSize) {\r\n return shuffle(engine, clone, 0);\r\n }\r\n const tailLength = length - sampleSize;\r\n return shuffle(engine, clone, tailLength - 1).slice(tailLength);\r\n}\n\nconst stringRepeat = (() => {\r\n try {\r\n if (\"x\".repeat(3) === \"xxx\") {\r\n return (pattern, count) => pattern.repeat(count);\r\n }\r\n }\r\n catch (_) {\r\n // nothing to do here\r\n }\r\n return (pattern, count) => {\r\n let result = \"\";\r\n while (count > 0) {\r\n if (count & 1) {\r\n result += pattern;\r\n }\r\n count >>= 1;\r\n pattern += pattern;\r\n }\r\n return result;\r\n };\r\n})();\n\nfunction zeroPad(text, zeroCount) {\r\n return stringRepeat(\"0\", zeroCount - text.length) + text;\r\n}\r\n/**\r\n * Returns a Universally Unique Identifier Version 4.\r\n *\r\n * See http://en.wikipedia.org/wiki/Universally_unique_identifier\r\n */\r\nfunction uuid4(engine) {\r\n const a = engine.next() >>> 0;\r\n const b = engine.next() | 0;\r\n const c = engine.next() | 0;\r\n const d = engine.next() >>> 0;\r\n return (zeroPad(a.toString(16), 8) +\r\n \"-\" +\r\n zeroPad((b & 0xffff).toString(16), 4) +\r\n \"-\" +\r\n zeroPad((((b >> 4) & 0x0fff) | 0x4000).toString(16), 4) +\r\n \"-\" +\r\n zeroPad(((c & 0x3fff) | 0x8000).toString(16), 4) +\r\n \"-\" +\r\n zeroPad(((c >> 4) & 0xffff).toString(16), 4) +\r\n zeroPad(d.toString(16), 8));\r\n}\n\n/**\r\n * An int32-producing Engine that uses `Math.random()`\r\n */\r\nconst nativeMath = {\r\n next() {\r\n return (Math.random() * UINT32_SIZE) | 0;\r\n }\r\n};\n\n// tslint:disable:unified-signatures\r\n/**\r\n * A wrapper around an Engine that provides easy-to-use methods for\r\n * producing values based on known distributions\r\n */\r\nclass Random {\r\n /**\r\n * Creates a new Random wrapper\r\n * @param engine The engine to use (defaults to a `Math.random`-based implementation)\r\n */\r\n constructor(engine = nativeMath) {\r\n this.engine = engine;\r\n }\r\n /**\r\n * Returns a value within [-0x80000000, 0x7fffffff]\r\n */\r\n int32() {\r\n return int32(this.engine);\r\n }\r\n /**\r\n * Returns a value within [0, 0xffffffff]\r\n */\r\n uint32() {\r\n return uint32(this.engine);\r\n }\r\n /**\r\n * Returns a value within [0, 0x1fffffffffffff]\r\n */\r\n uint53() {\r\n return uint53(this.engine);\r\n }\r\n /**\r\n * Returns a value within [0, 0x20000000000000]\r\n */\r\n uint53Full() {\r\n return uint53Full(this.engine);\r\n }\r\n /**\r\n * Returns a value within [-0x20000000000000, 0x1fffffffffffff]\r\n */\r\n int53() {\r\n return int53(this.engine);\r\n }\r\n /**\r\n * Returns a value within [-0x20000000000000, 0x20000000000000]\r\n */\r\n int53Full() {\r\n return int53Full(this.engine);\r\n }\r\n /**\r\n * Returns a value within [min, max]\r\n * @param min The minimum integer value, inclusive. No less than -0x20000000000000.\r\n * @param max The maximum integer value, inclusive. No greater than 0x20000000000000.\r\n */\r\n integer(min, max) {\r\n return integer(min, max)(this.engine);\r\n }\r\n /**\r\n * Returns a floating-point value within [0.0, 1.0]\r\n */\r\n realZeroToOneInclusive() {\r\n return realZeroToOneInclusive(this.engine);\r\n }\r\n /**\r\n * Returns a floating-point value within [0.0, 1.0)\r\n */\r\n realZeroToOneExclusive() {\r\n return realZeroToOneExclusive(this.engine);\r\n }\r\n /**\r\n * Returns a floating-point value within [min, max) or [min, max]\r\n * @param min The minimum floating-point value, inclusive.\r\n * @param max The maximum floating-point value.\r\n * @param inclusive If true, `max` will be inclusive.\r\n */\r\n real(min, max, inclusive = false) {\r\n return real(min, max, inclusive)(this.engine);\r\n }\r\n bool(numerator, denominator) {\r\n return bool(numerator, denominator)(this.engine);\r\n }\r\n /**\r\n * Return a random value within the provided `source` within the sliced\r\n * bounds of `begin` and `end`.\r\n * @param source an array of items to pick from\r\n * @param begin the beginning slice index (defaults to `0`)\r\n * @param end the ending slice index (defaults to `source.length`)\r\n */\r\n pick(source, begin, end) {\r\n return pick(this.engine, source, begin, end);\r\n }\r\n /**\r\n * Shuffles an array in-place\r\n * @param array The array to shuffle\r\n */\r\n shuffle(array) {\r\n return shuffle(this.engine, array);\r\n }\r\n /**\r\n * From the population array, returns an array with sampleSize elements that\r\n * are randomly chosen without repeats.\r\n * @param population An array that has items to choose a sample from\r\n * @param sampleSize The size of the result array\r\n */\r\n sample(population, sampleSize) {\r\n return sample(this.engine, population, sampleSize);\r\n }\r\n /**\r\n * Returns a value within [1, sideCount]\r\n * @param sideCount The number of sides of the die\r\n */\r\n die(sideCount) {\r\n return die(sideCount)(this.engine);\r\n }\r\n /**\r\n * Returns an array of length `dieCount` of values within [1, sideCount]\r\n * @param sideCount The number of sides of each die\r\n * @param dieCount The number of dice\r\n */\r\n dice(sideCount, dieCount) {\r\n return dice(sideCount, dieCount)(this.engine);\r\n }\r\n /**\r\n * Returns a Universally Unique Identifier Version 4.\r\n *\r\n * See http://en.wikipedia.org/wiki/Universally_unique_identifier\r\n */\r\n uuid4() {\r\n return uuid4(this.engine);\r\n }\r\n string(length, pool) {\r\n return string(pool)(this.engine, length);\r\n }\r\n /**\r\n * Returns a random string comprised of numbers or the characters `abcdef`\r\n * (or `ABCDEF`) of length `length`.\r\n * @param length Length of the result string\r\n * @param uppercase Whether the string should use `ABCDEF` instead of `abcdef`\r\n */\r\n hex(length, uppercase) {\r\n return hex(uppercase)(this.engine, length);\r\n }\r\n /**\r\n * Returns a random `Date` within the inclusive range of [`start`, `end`].\r\n * @param start The minimum `Date`\r\n * @param end The maximum `Date`\r\n */\r\n date(start, end) {\r\n return date(start, end)(this.engine);\r\n }\r\n}\n\n/**\r\n * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Int32Array\r\n */\r\nconst I32Array = (() => {\r\n try {\r\n const buffer = new ArrayBuffer(4);\r\n const view = new Int32Array(buffer);\r\n view[0] = INT32_SIZE;\r\n if (view[0] === -INT32_SIZE) {\r\n return Int32Array;\r\n }\r\n }\r\n catch (_) {\r\n // nothing to do here\r\n }\r\n return Array;\r\n})();\n\nlet data = null;\r\nconst COUNT = 128;\r\nlet index = COUNT;\r\n/**\r\n * An Engine that relies on the globally-available `crypto.getRandomValues`,\r\n * which is typically available in modern browsers.\r\n *\r\n * See https://developer.mozilla.org/en-US/docs/Web/API/Crypto/getRandomValues\r\n *\r\n * If unavailable or otherwise non-functioning, then `browserCrypto` will\r\n * likely `throw` on the first call to `next()`.\r\n */\r\nconst browserCrypto = {\r\n next() {\r\n if (index >= COUNT) {\r\n if (data === null) {\r\n data = new I32Array(COUNT);\r\n }\r\n crypto.getRandomValues(data);\r\n index = 0;\r\n }\r\n return data[index++] | 0;\r\n }\r\n};\n\n/**\r\n * Returns an array of random int32 values, based on current time\r\n * and a random number engine\r\n *\r\n * @param engine an Engine to pull random values from, default `nativeMath`\r\n * @param length the length of the Array, minimum 1, default 16\r\n */\r\nfunction createEntropy(engine = nativeMath, length = 16) {\r\n const array = [];\r\n array.push(new Date().getTime() | 0);\r\n for (let i = 1; i < length; ++i) {\r\n array[i] = engine.next() | 0;\r\n }\r\n return array;\r\n}\n\n/**\r\n * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/imul\r\n */\r\nconst imul = (() => {\r\n try {\r\n if (Math.imul(UINT32_MAX, 5) === -5) {\r\n return Math.imul;\r\n }\r\n }\r\n catch (_) {\r\n // nothing to do here\r\n }\r\n const UINT16_MAX = 0xffff;\r\n return (a, b) => {\r\n const ah = (a >>> 16) & UINT16_MAX;\r\n const al = a & UINT16_MAX;\r\n const bh = (b >>> 16) & UINT16_MAX;\r\n const bl = b & UINT16_MAX;\r\n // the shift by 0 fixes the sign on the high part\r\n // the final |0 converts the unsigned value into a signed value\r\n return (al * bl + (((ah * bl + al * bh) << 16) >>> 0)) | 0;\r\n };\r\n})();\n\nconst ARRAY_SIZE = 624;\r\nconst ARRAY_MAX = ARRAY_SIZE - 1;\r\nconst M = 397;\r\nconst ARRAY_SIZE_MINUS_M = ARRAY_SIZE - M;\r\nconst A = 0x9908b0df;\r\n/**\r\n * An Engine that is a pseudorandom number generator using the Mersenne\r\n * Twister algorithm based on the prime 2**19937 − 1\r\n *\r\n * See http://en.wikipedia.org/wiki/Mersenne_twister\r\n */\r\nclass MersenneTwister19937 {\r\n /**\r\n * MersenneTwister19937 should not be instantiated directly.\r\n * Instead, use the static methods `seed`, `seedWithArray`, or `autoSeed`.\r\n */\r\n constructor() {\r\n this.data = new I32Array(ARRAY_SIZE);\r\n this.index = 0; // integer within [0, 624]\r\n this.uses = 0;\r\n }\r\n /**\r\n * Returns a MersenneTwister19937 seeded with an initial int32 value\r\n * @param initial the initial seed value\r\n */\r\n static seed(initial) {\r\n return new MersenneTwister19937().seed(initial);\r\n }\r\n /**\r\n * Returns a MersenneTwister19937 seeded with zero or more int32 values\r\n * @param source A series of int32 values\r\n */\r\n static seedWithArray(source) {\r\n return new MersenneTwister19937().seedWithArray(source);\r\n }\r\n /**\r\n * Returns a MersenneTwister19937 seeded with the current time and\r\n * a series of natively-generated random values\r\n */\r\n static autoSeed() {\r\n return MersenneTwister19937.seedWithArray(createEntropy());\r\n }\r\n /**\r\n * Returns the next int32 value of the sequence\r\n */\r\n next() {\r\n if ((this.index | 0) >= ARRAY_SIZE) {\r\n refreshData(this.data);\r\n this.index = 0;\r\n }\r\n const value = this.data[this.index];\r\n this.index = (this.index + 1) | 0;\r\n this.uses += 1;\r\n return temper(value) | 0;\r\n }\r\n /**\r\n * Returns the number of times that the Engine has been used.\r\n *\r\n * This can be provided to an unused MersenneTwister19937 with the same\r\n * seed, bringing it to the exact point that was left off.\r\n */\r\n getUseCount() {\r\n return this.uses;\r\n }\r\n /**\r\n * Discards one or more items from the engine\r\n * @param count The count of items to discard\r\n */\r\n discard(count) {\r\n if (count <= 0) {\r\n return this;\r\n }\r\n this.uses += count;\r\n if ((this.index | 0) >= ARRAY_SIZE) {\r\n refreshData(this.data);\r\n this.index = 0;\r\n }\r\n while (count + this.index > ARRAY_SIZE) {\r\n count -= ARRAY_SIZE - this.index;\r\n refreshData(this.data);\r\n this.index = 0;\r\n }\r\n this.index = (this.index + count) | 0;\r\n return this;\r\n }\r\n seed(initial) {\r\n let previous = 0;\r\n this.data[0] = previous = initial | 0;\r\n for (let i = 1; i < ARRAY_SIZE; i = (i + 1) | 0) {\r\n this.data[i] = previous =\r\n (imul(previous ^ (previous >>> 30), 0x6c078965) + i) | 0;\r\n }\r\n this.index = ARRAY_SIZE;\r\n this.uses = 0;\r\n return this;\r\n }\r\n seedWithArray(source) {\r\n this.seed(0x012bd6aa);\r\n seedWithArray(this.data, source);\r\n return this;\r\n }\r\n}\r\nfunction refreshData(data) {\r\n let k = 0;\r\n let tmp = 0;\r\n for (; (k | 0) < ARRAY_SIZE_MINUS_M; k = (k + 1) | 0) {\r\n tmp = (data[k] & INT32_SIZE) | (data[(k + 1) | 0] & INT32_MAX);\r\n data[k] = data[(k + M) | 0] ^ (tmp >>> 1) ^ (tmp & 0x1 ? A : 0);\r\n }\r\n for (; (k | 0) < ARRAY_MAX; k = (k + 1) | 0) {\r\n tmp = (data[k] & INT32_SIZE) | (data[(k + 1) | 0] & INT32_MAX);\r\n data[k] =\r\n data[(k - ARRAY_SIZE_MINUS_M) | 0] ^ (tmp >>> 1) ^ (tmp & 0x1 ? A : 0);\r\n }\r\n tmp = (data[ARRAY_MAX] & INT32_SIZE) | (data[0] & INT32_MAX);\r\n data[ARRAY_MAX] = data[M - 1] ^ (tmp >>> 1) ^ (tmp & 0x1 ? A : 0);\r\n}\r\nfunction temper(value) {\r\n value ^= value >>> 11;\r\n value ^= (value << 7) & 0x9d2c5680;\r\n value ^= (value << 15) & 0xefc60000;\r\n return value ^ (value >>> 18);\r\n}\r\nfunction seedWithArray(data, source) {\r\n let i = 1;\r\n let j = 0;\r\n const sourceLength = source.length;\r\n let k = Math.max(sourceLength, ARRAY_SIZE) | 0;\r\n let previous = data[0] | 0;\r\n for (; (k | 0) > 0; --k) {\r\n data[i] = previous =\r\n ((data[i] ^ imul(previous ^ (previous >>> 30), 0x0019660d)) +\r\n (source[j] | 0) +\r\n (j | 0)) |\r\n 0;\r\n i = (i + 1) | 0;\r\n ++j;\r\n if ((i | 0) > ARRAY_MAX) {\r\n data[0] = data[ARRAY_MAX];\r\n i = 1;\r\n }\r\n if (j >= sourceLength) {\r\n j = 0;\r\n }\r\n }\r\n for (k = ARRAY_MAX; (k | 0) > 0; --k) {\r\n data[i] = previous =\r\n ((data[i] ^ imul(previous ^ (previous >>> 30), 0x5d588b65)) - i) | 0;\r\n i = (i + 1) | 0;\r\n if ((i | 0) > ARRAY_MAX) {\r\n data[0] = data[ARRAY_MAX];\r\n i = 1;\r\n }\r\n }\r\n data[0] = INT32_SIZE;\r\n}\n\nlet data$1 = null;\r\nconst COUNT$1 = 128;\r\nlet index$1 = COUNT$1;\r\n/**\r\n * An Engine that relies on the node-available\r\n * `require('crypto').randomBytes`, which has been available since 0.58.\r\n *\r\n * See https://nodejs.org/api/crypto.html#crypto_crypto_randombytes_size_callback\r\n *\r\n * If unavailable or otherwise non-functioning, then `nodeCrypto` will\r\n * likely `throw` on the first call to `next()`.\r\n */\r\nconst nodeCrypto = {\r\n next() {\r\n if (index$1 >= COUNT$1) {\r\n data$1 = new Int32Array(new Int8Array(require(\"crypto\").randomBytes(4 * COUNT$1)).buffer);\r\n index$1 = 0;\r\n }\r\n return data$1[index$1++] | 0;\r\n }\r\n};\n\n/**\r\n * Returns a Distribution to random value within the provided `source`\r\n * within the sliced bounds of `begin` and `end`.\r\n * @param source an array of items to pick from\r\n * @param begin the beginning slice index (defaults to `0`)\r\n * @param end the ending slice index (defaults to `source.length`)\r\n */\r\nfunction picker(source, begin, end) {\r\n const clone = sliceArray.call(source, begin, end);\r\n if (clone.length === 0) {\r\n throw new RangeError(`Cannot pick from a source with no items`);\r\n }\r\n const distribution = integer(0, clone.length - 1);\r\n return engine => clone[distribution(engine)];\r\n}\n\nexport { Random, browserCrypto, nativeMath, MersenneTwister19937, nodeCrypto, bool, date, dice, die, hex, int32, int53, int53Full, integer, pick, picker, real, realZeroToOneExclusive, realZeroToOneInclusive, sample, shuffle, string, uint32, uint53, uint53Full, uuid4, createEntropy };\n//# sourceMappingURL=random-js.esm.js.map\n","import * as Random from 'random-js';\nimport Matrix from 'ml-matrix';\n\nexport function checkFloat(n) {\n return n > 0.0 && n <= 1.0;\n}\n\n\n/**\n * Select n with replacement elements on the training set and values, where n is the size of the training set.\n * @ignore\n * @param {Matrix} trainingSet\n * @param {Array} trainingValue\n * @param {number} seed - seed for the random selection, must be a 32-bit integer.\n * @return {object} with new X and y.\n */\nexport function examplesBaggingWithReplacement(\n trainingSet,\n trainingValue,\n seed\n) {\n var engine;\n var distribution = Random.integer(0, trainingSet.rows - 1);\n if (seed === undefined) {\n engine = Random.MersenneTwister19937.autoSeed();\n } else if (Number.isInteger(seed)) {\n engine = Random.MersenneTwister19937.seed(seed);\n } else {\n throw new RangeError(\n `Expected seed must be undefined or integer not ${seed}`\n );\n }\n\n var Xr = new Array(trainingSet.rows);\n var yr = new Array(trainingSet.rows);\n\n for (var i = 0; i < trainingSet.rows; ++i) {\n var index = distribution(engine);\n Xr[i] = trainingSet.getRow(index);\n yr[i] = trainingValue[index];\n }\n\n return {\n X: new Matrix(Xr),\n y: yr\n };\n}\n\n/**\n * selects n features from the training set with or without replacement, returns the new training set and the indexes used.\n * @ignore\n * @param {Matrix} trainingSet\n * @param {number} n - features.\n * @param {boolean} replacement\n * @param {number} seed - seed for the random selection, must be a 32-bit integer.\n * @return {object}\n */\nexport function featureBagging(trainingSet, n, replacement, seed) {\n if (trainingSet.columns < n) {\n throw new RangeError(\n 'N should be less or equal to the number of columns of X'\n );\n }\n\n var distribution = Random.integer(0, trainingSet.columns - 1);\n var engine;\n if (seed === undefined) {\n engine = Random.MersenneTwister19937.autoSeed();\n } else if (Number.isInteger(seed)) {\n engine = Random.MersenneTwister19937.seed(seed);\n } else {\n throw new RangeError(\n `Expected seed must be undefined or integer not ${seed}`\n );\n }\n\n var toRet = new Matrix(trainingSet.rows, n);\n\n if (replacement) {\n var usedIndex = new Array(n);\n for (var i = 0; i < n; ++i) {\n var index = distribution(engine);\n usedIndex[i] = index;\n toRet.setColumn(i, trainingSet.getColumn(index));\n }\n } else {\n usedIndex = new Set();\n index = distribution(engine);\n for (i = 0; i < n; ++i) {\n while (usedIndex.has(index)) {\n index = distribution(engine);\n }\n toRet.setColumn(i, trainingSet.getColumn(index));\n usedIndex.add(index);\n }\n usedIndex = Array.from(usedIndex);\n }\n\n return {\n X: toRet,\n usedIndex: usedIndex\n };\n}\n","import {\n DecisionTreeClassifier as DTClassifier,\n DecisionTreeRegression as DTRegression\n} from 'ml-cart';\nimport { Matrix, WrapperMatrix2D, MatrixTransposeView, MatrixColumnSelectionView } from 'ml-matrix';\n\nimport * as Utils from './utils';\n\n/**\n * @class RandomForestBase\n */\nexport class RandomForestBase {\n /**\n * Create a new base random forest for a classifier or regression model.\n * @constructor\n * @param {object} options\n * @param {number|String} [options.maxFeatures] - the number of features used on each estimator.\n * * if is an integer it selects maxFeatures elements over the sample features.\n * * if is a float between (0, 1), it takes the percentage of features.\n * @param {boolean} [options.replacement] - use replacement over the sample features.\n * @param {number} [options.seed] - seed for feature and samples selection, must be a 32-bit integer.\n * @param {number} [options.nEstimators] - number of estimator to use.\n * @param {object} [options.treeOptions] - options for the tree classifier, see [ml-cart]{@link https://mljs.github.io/decision-tree-cart/}\n * @param {boolean} [options.isClassifier] - boolean to check if is a classifier or regression model (used by subclasses).\n * @param {boolean} [options.useSampleBagging] - use bagging over training samples.\n * @param {object} model - for load purposes.\n */\n constructor(options, model) {\n if (options === true) {\n this.replacement = model.replacement;\n this.maxFeatures = model.maxFeatures;\n this.nEstimators = model.nEstimators;\n this.treeOptions = model.treeOptions;\n this.isClassifier = model.isClassifier;\n this.seed = model.seed;\n this.n = model.n;\n this.indexes = model.indexes;\n this.useSampleBagging = model.useSampleBagging;\n\n var Estimator = this.isClassifier ? DTClassifier : DTRegression;\n this.estimators = model.estimators.map((est) => Estimator.load(est));\n } else {\n this.replacement = options.replacement;\n this.maxFeatures = options.maxFeatures;\n this.nEstimators = options.nEstimators;\n this.treeOptions = options.treeOptions;\n this.isClassifier = options.isClassifier;\n this.seed = options.seed;\n this.useSampleBagging = options.useSampleBagging;\n }\n }\n\n /**\n * Train the decision tree with the given training set and labels.\n * @param {Matrix|Array} trainingSet\n * @param {Array} trainingValues\n */\n train(trainingSet, trainingValues) {\n trainingSet = Matrix.checkMatrix(trainingSet);\n\n this.maxFeatures = this.maxFeatures || trainingSet.columns;\n\n if (Utils.checkFloat(this.maxFeatures)) {\n this.n = Math.floor(trainingSet.columns * this.maxFeatures);\n } else if (Number.isInteger(this.maxFeatures)) {\n if (this.maxFeatures > trainingSet.columns) {\n throw new RangeError(\n `The maxFeatures parameter should be less than ${trainingSet.columns}`\n );\n } else {\n this.n = this.maxFeatures;\n }\n } else {\n throw new RangeError(\n `Cannot process the maxFeatures parameter ${this.maxFeatures}`\n );\n }\n\n if (this.isClassifier) {\n var Estimator = DTClassifier;\n } else {\n Estimator = DTRegression;\n }\n\n this.estimators = new Array(this.nEstimators);\n this.indexes = new Array(this.nEstimators);\n\n for (var i = 0; i < this.nEstimators; ++i) {\n var res = this.useSampleBagging\n ? Utils.examplesBaggingWithReplacement(\n trainingSet,\n trainingValues,\n this.seed\n )\n : { X: trainingSet, y: trainingValues };\n var X = res.X;\n var y = res.y;\n\n res = Utils.featureBagging(X, this.n, this.replacement, this.seed);\n X = res.X;\n\n this.indexes[i] = res.usedIndex;\n this.estimators[i] = new Estimator(this.treeOptions);\n this.estimators[i].train(X, y);\n }\n }\n\n /**\n * Method that returns the way the algorithm generates the predictions, for example, in classification\n * you can return the mode of all predictions retrieved by the trees, or in case of regression you can\n * use the mean or the median.\n * @abstract\n * @param {Array} values - predictions of the estimators.\n * @return {number} prediction.\n */\n // eslint-disable-next-line no-unused-vars\n selection(values) {\n throw new Error(\"Abstract method 'selection' not implemented!\");\n }\n\n /**\n * Predicts the output given the matrix to predict.\n * @param {Matrix|Array} toPredict\n * @return {Array} predictions\n */\n predict(toPredict) {\n var predictionValues = new Array(this.nEstimators);\n toPredict = Matrix.checkMatrix(toPredict);\n for (var i = 0; i < this.nEstimators; ++i) {\n var X = new MatrixColumnSelectionView(toPredict, this.indexes[i]); // get features for estimator\n predictionValues[i] = this.estimators[i].predict(X);\n }\n\n predictionValues = new MatrixTransposeView(new WrapperMatrix2D(predictionValues));\n var predictions = new Array(predictionValues.rows);\n for (i = 0; i < predictionValues.rows; ++i) {\n predictions[i] = this.selection(predictionValues.getRow(i));\n }\n\n return predictions;\n }\n\n /**\n * Export the current model to JSON.\n * @return {object} - Current model.\n */\n toJSON() {\n return {\n indexes: this.indexes,\n n: this.n,\n replacement: this.replacement,\n maxFeatures: this.maxFeatures,\n nEstimators: this.nEstimators,\n treeOptions: this.treeOptions,\n isClassifier: this.isClassifier,\n seed: this.seed,\n estimators: this.estimators.map((est) => est.toJSON()),\n useSampleBagging: this.useSampleBagging\n };\n }\n}\n","import { RandomForestBase } from './RandomForestBase';\n\nconst defaultOptions = {\n maxFeatures: 1.0,\n replacement: true,\n nEstimators: 10,\n seed: 42,\n useSampleBagging: false\n};\n\n/**\n * @class RandomForestClassifier\n * @augments RandomForestBase\n */\nexport class RandomForestClassifier extends RandomForestBase {\n /**\n * Create a new base random forest for a classifier or regression model.\n * @constructor\n * @param {object} options\n * @param {number} [options.maxFeatures=1.0] - the number of features used on each estimator.\n * * if is an integer it selects maxFeatures elements over the sample features.\n * * if is a float between (0, 1), it takes the percentage of features.\n * @param {boolean} [options.replacement=true] - use replacement over the sample features.\n * @param {number} [options.seed=42] - seed for feature and samples selection, must be a 32-bit integer.\n * @param {number} [options.nEstimators=10] - number of estimator to use.\n * @param {object} [options.treeOptions={}] - options for the tree classifier, see [ml-cart]{@link https://mljs.github.io/decision-tree-cart/}\n * @param {boolean} [options.useSampleBagging=false] - use bagging over training samples.\n * @param {object} model - for load purposes.\n */\n constructor(options, model) {\n if (options === true) {\n super(true, model.baseModel);\n } else {\n options = Object.assign({}, defaultOptions, options);\n options.isClassifier = true;\n super(options);\n }\n }\n\n /**\n * retrieve the prediction given the selection method.\n * @param {Array} values - predictions of the estimators.\n * @return {number} prediction\n */\n selection(values) {\n return mode(values);\n }\n\n /**\n * Export the current model to JSON.\n * @return {object} - Current model.\n */\n toJSON() {\n var baseModel = super.toJSON();\n return {\n baseModel: baseModel,\n name: 'RFClassifier'\n };\n }\n\n /**\n * Load a Decision tree classifier with the given model.\n * @param {object} model\n * @return {RandomForestClassifier}\n */\n static load(model) {\n if (model.name !== 'RFClassifier') {\n throw new RangeError(`Invalid model: ${model.name}`);\n }\n\n return new RandomForestClassifier(true, model);\n }\n}\n\n/**\n * Return the most repeated element on the array.\n * @param {Array} arr\n * @return {number} mode\n */\nfunction mode(arr) {\n return arr\n .sort(\n (a, b) =>\n arr.filter((v) => v === a).length - arr.filter((v) => v === b).length\n )\n .pop();\n}\n","(function(){function a(d){for(var e=0,f=d.length-1,g=void 0,h=void 0,i=void 0,j=c(e,f);!0;){if(f<=e)return d[j];if(f==e+1)return d[e]>d[f]&&b(d,e,f),d[j];for(g=c(e,f),d[g]>d[f]&&b(d,g,f),d[e]>d[f]&&b(d,e,f),d[g]>d[e]&&b(d,g,e),b(d,g,e+1),h=e+1,i=f;!0;){do h++;while(d[e]>d[h]);do i--;while(d[i]>d[e]);if(i=j&&(f=i-1)}}var b=function b(d,e,f){var _ref;return _ref=[d[f],d[e]],d[e]=_ref[0],d[f]=_ref[1],_ref},c=function c(d,e){return~~((d+e)/2)};'undefined'!=typeof module&&module.exports?module.exports=a:window.median=a})();\n","import quickSelectMedian from 'median-quickselect';\nimport isArray from 'is-any-array';\n\n/**\n * Computes the median of the given values\n * @param {Array} input\n * @return {number}\n */\n\nfunction median(input) {\n if (!isArray(input)) {\n throw new TypeError('input must be an array');\n }\n\n if (input.length === 0) {\n throw new TypeError('input must not be empty');\n }\n\n return quickSelectMedian(input.slice());\n}\n\nexport default median;\n","import arrayMean from 'ml-array-mean';\nimport arrayMedian from 'ml-array-median';\n\nimport { RandomForestBase } from './RandomForestBase';\n\nconst selectionMethods = {\n mean: arrayMean,\n median: arrayMedian\n};\n\nconst defaultOptions = {\n maxFeatures: 1.0,\n replacement: false,\n nEstimators: 10,\n treeOptions: {},\n selectionMethod: 'mean',\n seed: 42,\n useSampleBagging: false\n};\n\n/**\n * @class RandomForestRegression\n * @augments RandomForestBase\n */\nexport class RandomForestRegression extends RandomForestBase {\n /**\n * Create a new base random forest for a classifier or regression model.\n * @constructor\n * @param {object} options\n * @param {number} [options.maxFeatures=1.0] - the number of features used on each estimator.\n * * if is an integer it selects maxFeatures elements over the sample features.\n * * if is a float between (0, 1), it takes the percentage of features.\n * @param {boolean} [options.replacement=true] - use replacement over the sample features.\n * @param {number} [options.seed=42] - seed for feature and samples selection, must be a 32-bit integer.\n * @param {number} [options.nEstimators=10] - number of estimator to use.\n * @param {object} [options.treeOptions={}] - options for the tree classifier, see [ml-cart]{@link https://mljs.github.io/decision-tree-cart/}\n * @param {string} [options.selectionMethod=\"mean\"] - the way to calculate the prediction from estimators, \"mean\" and \"median\" are supported.\n * @param {boolean} [options.useSampleBagging=false] - use bagging over training samples.\n * @param {object} model - for load purposes.\n */\n constructor(options, model) {\n if (options === true) {\n super(true, model.baseModel);\n this.selectionMethod = model.selectionMethod;\n } else {\n options = Object.assign({}, defaultOptions, options);\n\n if (\n !(\n options.selectionMethod === 'mean' ||\n options.selectionMethod === 'median'\n )\n ) {\n throw new RangeError(\n `Unsupported selection method ${options.selectionMethod}`\n );\n }\n\n options.isClassifier = false;\n\n super(options);\n this.selectionMethod = options.selectionMethod;\n }\n }\n\n /**\n * retrieve the prediction given the selection method.\n * @param {Array} values - predictions of the estimators.\n * @return {number} prediction\n */\n selection(values) {\n return selectionMethods[this.selectionMethod](values);\n }\n\n /**\n * Export the current model to JSON.\n * @return {object} - Current model.\n */\n toJSON() {\n var baseModel = super.toJSON();\n return {\n baseModel: baseModel,\n selectionMethod: this.selectionMethod,\n name: 'RFRegression'\n };\n }\n\n /**\n * Load a Decision tree classifier with the given model.\n * @param {object} model\n * @return {RandomForestRegression}\n */\n static load(model) {\n if (model.name !== 'RFRegression') {\n throw new RangeError(`Invalid model: ${model.name}`);\n }\n\n return new RandomForestRegression(true, model);\n }\n}\n","import { Matrix, MatrixTransposeView, EVD, SVD } from 'ml-matrix';\n\n/**\n * Creates new PCA (Principal Component Analysis) from the dataset\n * @param {Matrix} dataset - dataset or covariance matrix\n * @param {Object} [options]\n * @param {boolean} [options.isCovarianceMatrix=false] - true if the dataset is a covariance matrix\n * @param {boolean} [options.useCovarianceMatrix=false] - force the use of the covariance matrix instead of singular value decomposition.\n * @param {boolean} [options.center=true] - should the data be centered (subtract the mean)\n * @param {boolean} [options.scale=false] - should the data be scaled (divide by the standard deviation)\n * */\nexport class PCA {\n constructor(dataset, options = {}) {\n if (dataset === true) {\n const model = options;\n this.center = model.center;\n this.scale = model.scale;\n this.means = model.means;\n this.stdevs = model.stdevs;\n this.U = Matrix.checkMatrix(model.U);\n this.S = model.S;\n return;\n }\n\n dataset = new Matrix(dataset);\n\n const {\n isCovarianceMatrix = false,\n center = true,\n scale = false\n } = options;\n\n this.center = center;\n this.scale = scale;\n this.means = null;\n this.stdevs = null;\n\n if (isCovarianceMatrix) {\n // user provided a covariance matrix instead of dataset\n this._computeFromCovarianceMatrix(dataset);\n return;\n }\n\n var useCovarianceMatrix;\n if (typeof options.useCovarianceMatrix === 'boolean') {\n useCovarianceMatrix = options.useCovarianceMatrix;\n } else {\n useCovarianceMatrix = dataset.rows > dataset.columns;\n }\n\n if (useCovarianceMatrix) {\n // user provided a dataset but wants us to compute and use the covariance matrix\n this._adjust(dataset);\n const covarianceMatrix = new MatrixTransposeView(dataset)\n .mmul(dataset)\n .div(dataset.rows - 1);\n this._computeFromCovarianceMatrix(covarianceMatrix);\n } else {\n this._adjust(dataset);\n var svd = new SVD(dataset, {\n computeLeftSingularVectors: false,\n computeRightSingularVectors: true,\n autoTranspose: true\n });\n\n this.U = svd.rightSingularVectors;\n\n const singularValues = svd.diagonal;\n const eigenvalues = [];\n for (const singularValue of singularValues) {\n eigenvalues.push((singularValue * singularValue) / (dataset.rows - 1));\n }\n this.S = eigenvalues;\n }\n }\n\n /**\n * Load a PCA model from JSON\n * @param {Object} model\n * @return {PCA}\n */\n static load(model) {\n if (typeof model.name !== 'string') {\n throw new TypeError('model must have a name property');\n }\n if (model.name !== 'PCA') {\n throw new RangeError(`invalid model: ${model.name}`);\n }\n return new PCA(true, model);\n }\n\n /**\n * Project the dataset into the PCA space\n * @param {Matrix} dataset\n * @param {Object} options\n * @return {Matrix} dataset projected in the PCA space\n */\n predict(dataset, options = {}) {\n const { nComponents = this.U.columns } = options;\n\n dataset = new Matrix(dataset);\n if (this.center) {\n dataset.subRowVector(this.means);\n if (this.scale) {\n dataset.divRowVector(this.stdevs);\n }\n }\n\n var predictions = dataset.mmul(this.U);\n return predictions.subMatrix(0, predictions.rows - 1, 0, nComponents - 1);\n }\n\n /**\n * Returns the proportion of variance for each component\n * @return {[number]}\n */\n getExplainedVariance() {\n var sum = 0;\n for (const s of this.S) {\n sum += s;\n }\n return this.S.map((value) => value / sum);\n }\n\n /**\n * Returns the cumulative proportion of variance\n * @return {[number]}\n */\n getCumulativeVariance() {\n var explained = this.getExplainedVariance();\n for (var i = 1; i < explained.length; i++) {\n explained[i] += explained[i - 1];\n }\n return explained;\n }\n\n /**\n * Returns the Eigenvectors of the covariance matrix\n * @returns {Matrix}\n */\n getEigenvectors() {\n return this.U;\n }\n\n /**\n * Returns the Eigenvalues (on the diagonal)\n * @returns {[number]}\n */\n getEigenvalues() {\n return this.S;\n }\n\n /**\n * Returns the standard deviations of the principal components\n * @returns {[number]}\n */\n getStandardDeviations() {\n return this.S.map((x) => Math.sqrt(x));\n }\n\n /**\n * Returns the loadings matrix\n * @return {Matrix}\n */\n getLoadings() {\n return this.U.transpose();\n }\n\n /**\n * Export the current model to a JSON object\n * @return {Object} model\n */\n toJSON() {\n return {\n name: 'PCA',\n center: this.center,\n scale: this.scale,\n means: this.means,\n stdevs: this.stdevs,\n U: this.U,\n S: this.S\n };\n }\n\n _adjust(dataset) {\n if (this.center) {\n const mean = dataset.mean('column');\n const stdevs = this.scale\n ? dataset.standardDeviation('column', { mean })\n : null;\n this.means = mean;\n dataset.subRowVector(mean);\n if (this.scale) {\n for (var i = 0; i < stdevs.length; i++) {\n if (stdevs[i] === 0) {\n throw new RangeError(\n `Cannot scale the dataset (standard deviation is zero at index ${i}`\n );\n }\n }\n this.stdevs = stdevs;\n dataset.divRowVector(stdevs);\n }\n }\n }\n\n _computeFromCovarianceMatrix(dataset) {\n const evd = new EVD(dataset, { assumeSymmetric: true });\n this.U = evd.eigenvectorMatrix;\n this.U.flipRows();\n this.S = evd.realEigenvalues;\n this.S.reverse();\n }\n}\n","export function squaredEuclidean(p, q) {\r\n let d = 0;\r\n for (let i = 0; i < p.length; i++) {\r\n d += (p[i] - q[i]) * (p[i] - q[i]);\r\n }\r\n return d;\r\n}\r\nexport function euclidean(p, q) {\r\n return Math.sqrt(squaredEuclidean(p, q));\r\n}\r\n","'use strict';\n\n\n/**\n * Computes a distance/similarity matrix given an array of data and a distance/similarity function.\n * @param {Array} data An array of data\n * @param {function} distanceFn A function that accepts two arguments and computes a distance/similarity between them\n * @return {Array} The similarity matrix. The similarity matrix is square and has a size equal to the length of\n * the data array\n */\nfunction distanceMatrix(data, distanceFn) {\n const length = data.length;\n let result = Array.from({length}).map(() => Array.from({length}));\n\n // Compute upper distance matrix\n for (let i = 0; i < length; i++) {\n for (let j = 0; j <= i; j++) {\n result[i][j] = distanceFn(data[i], data[j]);\n }\n }\n\n // Copy to lower distance matrix\n for (let i = 0; i < length; i++) {\n for (let j = i + 1; j < length; j++) {\n result[i][j] = result[j][i];\n }\n }\n\n return result;\n}\n\nmodule.exports = distanceMatrix;\n","// Generated by CoffeeScript 1.8.0\n(function() {\n var Heap, defaultCmp, floor, heapify, heappop, heappush, heappushpop, heapreplace, insort, min, nlargest, nsmallest, updateItem, _siftdown, _siftup;\n\n floor = Math.floor, min = Math.min;\n\n\n /*\n Default comparison function to be used\n */\n\n defaultCmp = function(x, y) {\n if (x < y) {\n return -1;\n }\n if (x > y) {\n return 1;\n }\n return 0;\n };\n\n\n /*\n Insert item x in list a, and keep it sorted assuming a is sorted.\n \n If x is already in a, insert it to the right of the rightmost x.\n \n Optional args lo (default 0) and hi (default a.length) bound the slice\n of a to be searched.\n */\n\n insort = function(a, x, lo, hi, cmp) {\n var mid;\n if (lo == null) {\n lo = 0;\n }\n if (cmp == null) {\n cmp = defaultCmp;\n }\n if (lo < 0) {\n throw new Error('lo must be non-negative');\n }\n if (hi == null) {\n hi = a.length;\n }\n while (lo < hi) {\n mid = floor((lo + hi) / 2);\n if (cmp(x, a[mid]) < 0) {\n hi = mid;\n } else {\n lo = mid + 1;\n }\n }\n return ([].splice.apply(a, [lo, lo - lo].concat(x)), x);\n };\n\n\n /*\n Push item onto heap, maintaining the heap invariant.\n */\n\n heappush = function(array, item, cmp) {\n if (cmp == null) {\n cmp = defaultCmp;\n }\n array.push(item);\n return _siftdown(array, 0, array.length - 1, cmp);\n };\n\n\n /*\n Pop the smallest item off the heap, maintaining the heap invariant.\n */\n\n heappop = function(array, cmp) {\n var lastelt, returnitem;\n if (cmp == null) {\n cmp = defaultCmp;\n }\n lastelt = array.pop();\n if (array.length) {\n returnitem = array[0];\n array[0] = lastelt;\n _siftup(array, 0, cmp);\n } else {\n returnitem = lastelt;\n }\n return returnitem;\n };\n\n\n /*\n Pop and return the current smallest value, and add the new item.\n \n This is more efficient than heappop() followed by heappush(), and can be\n more appropriate when using a fixed size heap. Note that the value\n returned may be larger than item! That constrains reasonable use of\n this routine unless written as part of a conditional replacement:\n if item > array[0]\n item = heapreplace(array, item)\n */\n\n heapreplace = function(array, item, cmp) {\n var returnitem;\n if (cmp == null) {\n cmp = defaultCmp;\n }\n returnitem = array[0];\n array[0] = item;\n _siftup(array, 0, cmp);\n return returnitem;\n };\n\n\n /*\n Fast version of a heappush followed by a heappop.\n */\n\n heappushpop = function(array, item, cmp) {\n var _ref;\n if (cmp == null) {\n cmp = defaultCmp;\n }\n if (array.length && cmp(array[0], item) < 0) {\n _ref = [array[0], item], item = _ref[0], array[0] = _ref[1];\n _siftup(array, 0, cmp);\n }\n return item;\n };\n\n\n /*\n Transform list into a heap, in-place, in O(array.length) time.\n */\n\n heapify = function(array, cmp) {\n var i, _i, _j, _len, _ref, _ref1, _results, _results1;\n if (cmp == null) {\n cmp = defaultCmp;\n }\n _ref1 = (function() {\n _results1 = [];\n for (var _j = 0, _ref = floor(array.length / 2); 0 <= _ref ? _j < _ref : _j > _ref; 0 <= _ref ? _j++ : _j--){ _results1.push(_j); }\n return _results1;\n }).apply(this).reverse();\n _results = [];\n for (_i = 0, _len = _ref1.length; _i < _len; _i++) {\n i = _ref1[_i];\n _results.push(_siftup(array, i, cmp));\n }\n return _results;\n };\n\n\n /*\n Update the position of the given item in the heap.\n This function should be called every time the item is being modified.\n */\n\n updateItem = function(array, item, cmp) {\n var pos;\n if (cmp == null) {\n cmp = defaultCmp;\n }\n pos = array.indexOf(item);\n if (pos === -1) {\n return;\n }\n _siftdown(array, 0, pos, cmp);\n return _siftup(array, pos, cmp);\n };\n\n\n /*\n Find the n largest elements in a dataset.\n */\n\n nlargest = function(array, n, cmp) {\n var elem, result, _i, _len, _ref;\n if (cmp == null) {\n cmp = defaultCmp;\n }\n result = array.slice(0, n);\n if (!result.length) {\n return result;\n }\n heapify(result, cmp);\n _ref = array.slice(n);\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n elem = _ref[_i];\n heappushpop(result, elem, cmp);\n }\n return result.sort(cmp).reverse();\n };\n\n\n /*\n Find the n smallest elements in a dataset.\n */\n\n nsmallest = function(array, n, cmp) {\n var elem, i, los, result, _i, _j, _len, _ref, _ref1, _results;\n if (cmp == null) {\n cmp = defaultCmp;\n }\n if (n * 10 <= array.length) {\n result = array.slice(0, n).sort(cmp);\n if (!result.length) {\n return result;\n }\n los = result[result.length - 1];\n _ref = array.slice(n);\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n elem = _ref[_i];\n if (cmp(elem, los) < 0) {\n insort(result, elem, 0, null, cmp);\n result.pop();\n los = result[result.length - 1];\n }\n }\n return result;\n }\n heapify(array, cmp);\n _results = [];\n for (i = _j = 0, _ref1 = min(n, array.length); 0 <= _ref1 ? _j < _ref1 : _j > _ref1; i = 0 <= _ref1 ? ++_j : --_j) {\n _results.push(heappop(array, cmp));\n }\n return _results;\n };\n\n _siftdown = function(array, startpos, pos, cmp) {\n var newitem, parent, parentpos;\n if (cmp == null) {\n cmp = defaultCmp;\n }\n newitem = array[pos];\n while (pos > startpos) {\n parentpos = (pos - 1) >> 1;\n parent = array[parentpos];\n if (cmp(newitem, parent) < 0) {\n array[pos] = parent;\n pos = parentpos;\n continue;\n }\n break;\n }\n return array[pos] = newitem;\n };\n\n _siftup = function(array, pos, cmp) {\n var childpos, endpos, newitem, rightpos, startpos;\n if (cmp == null) {\n cmp = defaultCmp;\n }\n endpos = array.length;\n startpos = pos;\n newitem = array[pos];\n childpos = 2 * pos + 1;\n while (childpos < endpos) {\n rightpos = childpos + 1;\n if (rightpos < endpos && !(cmp(array[childpos], array[rightpos]) < 0)) {\n childpos = rightpos;\n }\n array[pos] = array[childpos];\n pos = childpos;\n childpos = 2 * pos + 1;\n }\n array[pos] = newitem;\n return _siftdown(array, startpos, pos, cmp);\n };\n\n Heap = (function() {\n Heap.push = heappush;\n\n Heap.pop = heappop;\n\n Heap.replace = heapreplace;\n\n Heap.pushpop = heappushpop;\n\n Heap.heapify = heapify;\n\n Heap.updateItem = updateItem;\n\n Heap.nlargest = nlargest;\n\n Heap.nsmallest = nsmallest;\n\n function Heap(cmp) {\n this.cmp = cmp != null ? cmp : defaultCmp;\n this.nodes = [];\n }\n\n Heap.prototype.push = function(x) {\n return heappush(this.nodes, x, this.cmp);\n };\n\n Heap.prototype.pop = function() {\n return heappop(this.nodes, this.cmp);\n };\n\n Heap.prototype.peek = function() {\n return this.nodes[0];\n };\n\n Heap.prototype.contains = function(x) {\n return this.nodes.indexOf(x) !== -1;\n };\n\n Heap.prototype.replace = function(x) {\n return heapreplace(this.nodes, x, this.cmp);\n };\n\n Heap.prototype.pushpop = function(x) {\n return heappushpop(this.nodes, x, this.cmp);\n };\n\n Heap.prototype.heapify = function() {\n return heapify(this.nodes, this.cmp);\n };\n\n Heap.prototype.updateItem = function(x) {\n return updateItem(this.nodes, x, this.cmp);\n };\n\n Heap.prototype.clear = function() {\n return this.nodes = [];\n };\n\n Heap.prototype.empty = function() {\n return this.nodes.length === 0;\n };\n\n Heap.prototype.size = function() {\n return this.nodes.length;\n };\n\n Heap.prototype.clone = function() {\n var heap;\n heap = new Heap();\n heap.nodes = this.nodes.slice(0);\n return heap;\n };\n\n Heap.prototype.toArray = function() {\n return this.nodes.slice(0);\n };\n\n Heap.prototype.insert = Heap.prototype.push;\n\n Heap.prototype.top = Heap.prototype.peek;\n\n Heap.prototype.front = Heap.prototype.peek;\n\n Heap.prototype.has = Heap.prototype.contains;\n\n Heap.prototype.copy = Heap.prototype.clone;\n\n return Heap;\n\n })();\n\n (function(root, factory) {\n if (typeof define === 'function' && define.amd) {\n return define([], factory);\n } else if (typeof exports === 'object') {\n return module.exports = factory();\n } else {\n return root.Heap = factory();\n }\n })(this, function() {\n return Heap;\n });\n\n}).call(this);\n","module.exports = require('./lib/heap');\n","import Heap from 'heap';\n\nexport default class Cluster {\n constructor() {\n this.children = [];\n this.distance = -1;\n this.index = [];\n }\n\n /**\n * Creates an array of values where maximum distance smaller than the threshold\n * @param {number} threshold\n * @return {Array }\n */\n cut(threshold) {\n if (threshold < 0) throw new RangeError('Threshold too small');\n var root = new Cluster();\n root.children = this.children;\n root.distance = this.distance;\n root.index = this.index;\n var list = [root];\n var ans = [];\n while (list.length > 0) {\n var aux = list.shift();\n if (threshold >= aux.distance) {\n ans.push(aux);\n } else {\n list = list.concat(aux.children);\n }\n }\n return ans;\n }\n\n /**\n * Merge the leaves in the minimum way to have 'minGroups' number of clusters\n * @param {number} minGroups - Them minimum number of children the first level of the tree should have\n * @return {Cluster}\n */\n group(minGroups) {\n if (!Number.isInteger(minGroups) || minGroups < 1) {\n throw new RangeError('Number of groups must be a positive integer');\n }\n\n const heap = new Heap(function (a, b) {\n return b.distance - a.distance;\n });\n\n heap.push(this);\n\n while (heap.size() < minGroups) {\n var first = heap.pop();\n if (first.children.length === 0) {\n break;\n }\n first.children.forEach((child) => heap.push(child));\n }\n\n var root = new Cluster();\n root.children = heap.toArray();\n root.distance = this.distance;\n\n return root;\n }\n\n /**\n * Traverses the tree depth-first and provide callback to be called on each individual node\n * @param {function} cb - The callback to be called on each node encounter\n * @type {Cluster}\n */\n traverse(cb) {\n function visit(root, callback) {\n callback(root);\n if (root.children) {\n for (var i = root.children.length - 1; i >= 0; i--) {\n visit(root.children[i], callback);\n }\n }\n }\n visit(this, cb);\n }\n}\n","import Cluster from './Cluster';\n\nexport default class ClusterLeaf extends Cluster {\n constructor(index) {\n super();\n this.index = index;\n this.distance = 0;\n this.children = [];\n }\n}\n","import { euclidean } from 'ml-distance-euclidean';\nimport distanceMatrix from 'ml-distance-matrix';\n\nimport ClusterLeaf from './ClusterLeaf';\nimport Cluster from './Cluster';\n\n/**\n * @private\n * @param cluster1\n * @param cluster2\n * @param disFun\n * @returns {number}\n */\nfunction simpleLink(cluster1, cluster2, disFun) {\n var m = 10e100;\n for (var i = 0; i < cluster1.length; i++) {\n for (var j = 0; j < cluster2.length; j++) {\n var d = disFun[cluster1[i]][cluster2[j]];\n m = Math.min(d, m);\n }\n }\n return m;\n}\n\n/**\n * @private\n * @param cluster1\n * @param cluster2\n * @param disFun\n * @returns {number}\n */\nfunction completeLink(cluster1, cluster2, disFun) {\n var m = -1;\n for (var i = 0; i < cluster1.length; i++) {\n for (var j = 0; j < cluster2.length; j++) {\n var d = disFun[cluster1[i]][cluster2[j]];\n m = Math.max(d, m);\n }\n }\n return m;\n}\n\n/**\n * @private\n * @param cluster1\n * @param cluster2\n * @param disFun\n * @returns {number}\n */\nfunction averageLink(cluster1, cluster2, disFun) {\n var m = 0;\n for (var i = 0; i < cluster1.length; i++) {\n for (var j = 0; j < cluster2.length; j++) {\n m += disFun[cluster1[i]][cluster2[j]];\n }\n }\n return m / (cluster1.length * cluster2.length);\n}\n\n/**\n * @private\n * @param cluster1\n * @param cluster2\n * @param disFun\n * @returns {*}\n */\nfunction centroidLink(cluster1, cluster2, disFun) {\n var dist = new Array(cluster1.length * cluster2.length);\n for (var i = 0; i < cluster1.length; i++) {\n for (var j = 0; j < cluster2.length; j++) {\n dist[i * cluster2.length + j] = disFun[cluster1[i]][cluster2[j]];\n }\n }\n return median(dist);\n}\n\n/**\n * @private\n * @param cluster1\n * @param cluster2\n * @param disFun\n * @returns {number}\n */\nfunction wardLink(cluster1, cluster2, disFun) {\n return (\n (centroidLink(cluster1, cluster2, disFun) *\n cluster1.length *\n cluster2.length) /\n (cluster1.length + cluster2.length)\n );\n}\n\nfunction compareNumbers(a, b) {\n return a - b;\n}\n\nfunction median(values, alreadySorted) {\n if (alreadySorted === undefined) alreadySorted = false;\n if (!alreadySorted) {\n values = [].concat(values).sort(compareNumbers);\n }\n var l = values.length;\n var half = Math.floor(l / 2);\n if (l % 2 === 0) {\n return (values[half - 1] + values[half]) * 0.5;\n } else {\n return values[half];\n }\n}\n\n/**\n * Continuously merge nodes that have the least dissimilarity\n * @param {Array>} distance - Array of points to be clustered\n * @param {object} [options]\n * @param {Function} [options.distanceFunction]\n * @param {string} [options.method]\n * @param {boolean} [options.isDistanceMatrix]\n * @option isDistanceMatrix: Is the input a distance matrix?\n * @constructor\n */\nexport function agnes(data, options = {}) {\n const {\n distanceFunction = euclidean,\n method = 'single',\n isDistanceMatrix = false\n } = options;\n let methodFunc;\n\n var len = data.length;\n var distance = data; // If source\n if (!isDistanceMatrix) {\n distance = distanceMatrix(data, distanceFunction);\n }\n\n // allows to use a string or a given function\n if (typeof method === 'string') {\n switch (method) {\n case 'single':\n methodFunc = simpleLink;\n break;\n case 'complete':\n methodFunc = completeLink;\n break;\n case 'average':\n methodFunc = averageLink;\n break;\n case 'centroid':\n methodFunc = centroidLink;\n break;\n case 'ward':\n methodFunc = wardLink;\n break;\n default:\n throw new RangeError(`unknown clustering method: ${method}`);\n }\n } else if (typeof method !== 'function') {\n throw new TypeError('method must be a string or function');\n }\n\n var list = new Array(len);\n for (var i = 0; i < distance.length; i++) {\n list[i] = new ClusterLeaf(i);\n }\n var min = 10e5;\n var d = {};\n var dis = 0;\n\n while (list.length > 1) {\n // calculates the minimum distance\n d = {};\n min = 10e5;\n for (var j = 0; j < list.length; j++) {\n for (var k = j + 1; k < list.length; k++) {\n var fdistance, sdistance;\n if (list[j] instanceof ClusterLeaf) {\n fdistance = [list[j].index];\n } else {\n fdistance = new Array(list[j].index.length);\n for (var e = 0; e < fdistance.length; e++) {\n fdistance[e] = list[j].index[e].index;\n }\n }\n if (list[k] instanceof ClusterLeaf) {\n sdistance = [list[k].index];\n } else {\n sdistance = new Array(list[k].index.length);\n for (var f = 0; f < sdistance.length; f++) {\n sdistance[f] = list[k].index[f].index;\n }\n }\n dis = methodFunc(fdistance, sdistance, distance).toFixed(4);\n if (dis in d) {\n d[dis].push([list[j], list[k]]);\n } else {\n d[dis] = [[list[j], list[k]]];\n }\n min = Math.min(dis, min);\n }\n }\n // cluster dots\n var dmin = d[min.toFixed(4)];\n var clustered = new Array(dmin.length);\n var count = 0;\n while (dmin.length > 0) {\n let aux = dmin.shift();\n const filterInt = function (n) {\n return aux.indexOf(n) !== -1;\n };\n const filterDiff = function (n) {\n return aux.indexOf(n) === -1;\n };\n for (var q = 0; q < dmin.length; q++) {\n var int = dmin[q].filter(filterInt);\n if (int.length > 0) {\n var diff = dmin[q].filter(filterDiff);\n aux = aux.concat(diff);\n dmin.splice(q--, 1);\n }\n }\n clustered[count++] = aux;\n }\n clustered.length = count;\n\n for (var ii = 0; ii < clustered.length; ii++) {\n var obj = new Cluster();\n obj.children = clustered[ii].concat();\n obj.distance = min;\n obj.index = new Array(len);\n var indCount = 0;\n for (var jj = 0; jj < clustered[ii].length; jj++) {\n if (clustered[ii][jj] instanceof ClusterLeaf) {\n obj.index[indCount++] = clustered[ii][jj];\n } else {\n indCount += clustered[ii][jj].index.length;\n obj.index = clustered[ii][jj].index.concat(obj.index);\n }\n list.splice(list.indexOf(clustered[ii][jj]), 1);\n }\n obj.index.length = indCount;\n list.push(obj);\n }\n }\n return list[0];\n}\n","import { euclidean } from 'ml-distance-euclidean';\n\nimport ClusterLeaf from './ClusterLeaf';\nimport Cluster from './Cluster';\n\n/**\n * @private\n * Returns the most distant point and his distance\n * @param {Array >} splitting - Clusters to split\n * @param {Array >} data - Original data\n * @param {function} disFun - Distance function\n * @returns {{d: number, p: number}} - d: maximum difference between points, p: the point more distant\n */\nfunction diff(splitting, data, disFun) {\n var ans = {\n d: 0,\n p: 0\n };\n\n var Ci = new Array(splitting[0].length);\n for (var e = 0; e < splitting[0].length; e++) {\n Ci[e] = data[splitting[0][e]];\n }\n var Cj = new Array(splitting[1].length);\n for (var f = 0; f < splitting[1].length; f++) {\n Cj[f] = data[splitting[1][f]];\n }\n\n var dist, ndist;\n for (var i = 0; i < Ci.length; i++) {\n dist = 0;\n for (var j = 0; j < Ci.length; j++) {\n if (i !== j) {\n dist += disFun(Ci[i], Ci[j]);\n }\n }\n dist /= Ci.length - 1;\n ndist = 0;\n for (var k = 0; k < Cj.length; k++) {\n ndist += disFun(Ci[i], Cj[k]);\n }\n ndist /= Cj.length;\n if (dist - ndist > ans.d) {\n ans.d = dist - ndist;\n ans.p = i;\n }\n }\n return ans;\n}\n\n/**\n * @private\n * Intra-cluster distance\n * @param {Array} index\n * @param {Array} data\n * @param {function} disFun\n * @returns {number}\n */\nfunction intrDist(index, data, disFun) {\n var dist = 0;\n var count = 0;\n for (var i = 0; i < index.length; i++) {\n for (var j = i; j < index.length; j++) {\n dist += disFun(data[index[i].index], data[index[j].index]);\n count++;\n }\n }\n return dist / count;\n}\n\n/**\n * Splits the higher level clusters\n * @param {Array >} data - Array of points to be clustered\n * @param {object} [options]\n * @param {Function} [options.distanceFunction]\n * @constructor\n */\nexport function diana(data, options = {}) {\n const { distanceFunction = euclidean } = options;\n var tree = new Cluster();\n tree.children = new Array(data.length);\n tree.index = new Array(data.length);\n for (var ind = 0; ind < data.length; ind++) {\n tree.children[ind] = new ClusterLeaf(ind);\n tree.index[ind] = new ClusterLeaf(ind);\n }\n\n tree.distance = intrDist(tree.index, data, distanceFunction);\n var m, M, clId, dist, rebel;\n var list = [tree];\n while (list.length > 0) {\n M = 0;\n clId = 0;\n for (var i = 0; i < list.length; i++) {\n m = 0;\n for (var j = 0; j < list[i].length; j++) {\n for (var l = j + 1; l < list[i].length; l++) {\n m = Math.max(\n distanceFunction(\n data[list[i].index[j].index],\n data[list[i].index[l].index]\n ),\n m\n );\n }\n }\n if (m > M) {\n M = m;\n clId = i;\n }\n }\n M = 0;\n if (list[clId].index.length === 2) {\n list[clId].children = [list[clId].index[0], list[clId].index[1]];\n list[clId].distance = distanceFunction(\n data[list[clId].index[0].index],\n data[list[clId].index[1].index]\n );\n } else if (list[clId].index.length === 3) {\n list[clId].children = [\n list[clId].index[0],\n list[clId].index[1],\n list[clId].index[2]\n ];\n var d = [\n distanceFunction(\n data[list[clId].index[0].index],\n data[list[clId].index[1].index]\n ),\n distanceFunction(\n data[list[clId].index[1].index],\n data[list[clId].index[2].index]\n )\n ];\n list[clId].distance = (d[0] + d[1]) / 2;\n } else {\n var C = new Cluster();\n var sG = new Cluster();\n var splitting = [new Array(list[clId].index.length), []];\n for (var spl = 0; spl < splitting[0].length; spl++) {\n splitting[0][spl] = spl;\n }\n for (var ii = 0; ii < splitting[0].length; ii++) {\n dist = 0;\n for (var jj = 0; jj < splitting[0].length; jj++) {\n if (ii !== jj) {\n dist += distanceFunction(\n data[list[clId].index[splitting[0][jj]].index],\n data[list[clId].index[splitting[0][ii]].index]\n );\n }\n }\n dist /= splitting[0].length - 1;\n if (dist > M) {\n M = dist;\n rebel = ii;\n }\n }\n splitting[1] = [rebel];\n splitting[0].splice(rebel, 1);\n dist = diff(splitting, data, distanceFunction);\n while (dist.d > 0) {\n splitting[1].push(splitting[0][dist.p]);\n splitting[0].splice(dist.p, 1);\n dist = diff(splitting, data, distanceFunction);\n }\n var fData = new Array(splitting[0].length);\n C.index = new Array(splitting[0].length);\n for (var e = 0; e < fData.length; e++) {\n fData[e] = data[list[clId].index[splitting[0][e]].index];\n C.index[e] = list[clId].index[splitting[0][e]];\n C.children[e] = list[clId].index[splitting[0][e]];\n }\n var sData = new Array(splitting[1].length);\n sG.index = new Array(splitting[1].length);\n for (var f = 0; f < sData.length; f++) {\n sData[f] = data[list[clId].index[splitting[1][f]].index];\n sG.index[f] = list[clId].index[splitting[1][f]];\n sG.children[f] = list[clId].index[splitting[1][f]];\n }\n C.distance = intrDist(C.index, data, distanceFunction);\n sG.distance = intrDist(sG.index, data, distanceFunction);\n list.push(C);\n list.push(sG);\n list[clId].children = [C, sG];\n }\n list.splice(clId, 1);\n }\n return tree;\n}\n","export * from './agnes';\nexport * from './diana';\n// export * from './birch';\n// export * './cure';\n// export * from './chameleon';\n","'use strict';\nimport { squaredEuclidean } from 'ml-distance-euclidean';\nconst defaultOptions = {\n distanceFunction: squaredEuclidean\n};\nexport default function nearestVector(listVectors, vector, options = defaultOptions) {\n const distanceFunction = options.distanceFunction || defaultOptions.distanceFunction;\n const similarityFunction = options.similarityFunction || defaultOptions.similarityFunction;\n let vectorIndex = -1;\n if (typeof similarityFunction === 'function') {\n // maximum similarity\n let maxSim = Number.MIN_VALUE;\n for (let j = 0; j < listVectors.length; j++) {\n const sim = similarityFunction(vector, listVectors[j]);\n if (sim > maxSim) {\n maxSim = sim;\n vectorIndex = j;\n }\n }\n }\n else if (typeof distanceFunction === 'function') {\n // minimum distance\n let minDist = Number.MAX_VALUE;\n for (let i = 0; i < listVectors.length; i++) {\n const dist = distanceFunction(vector, listVectors[i]);\n if (dist < minDist) {\n minDist = dist;\n vectorIndex = i;\n }\n }\n }\n else {\n throw new Error(\"A similarity or distance function it's required\");\n }\n return vectorIndex;\n}\nexport function findNearestVector(vectorList, vector, options = defaultOptions) {\n const index = nearestVector(vectorList, vector, options);\n return vectorList[index];\n}\n","import nearestVector from 'ml-nearest-vector';\n\n/**\n * Calculates the distance matrix for a given array of points\n * @ignore\n * @param {Array>} data - the [x,y,z,...] points to cluster\n * @param {function} distance - Distance function to use between the points\n * @return {Array>} - matrix with the distance values\n */\nexport function calculateDistanceMatrix(data, distance) {\n var distanceMatrix = new Array(data.length);\n for (var i = 0; i < data.length; ++i) {\n for (var j = i; j < data.length; ++j) {\n if (!distanceMatrix[i]) {\n distanceMatrix[i] = new Array(data.length);\n }\n if (!distanceMatrix[j]) {\n distanceMatrix[j] = new Array(data.length);\n }\n const dist = distance(data[i], data[j]);\n distanceMatrix[i][j] = dist;\n distanceMatrix[j][i] = dist;\n }\n }\n return distanceMatrix;\n}\n\n/**\n * Updates the cluster identifier based in the new data\n * @ignore\n * @param {Array>} data - the [x,y,z,...] points to cluster\n * @param {Array>} centers - the K centers in format [x,y,z,...]\n * @param {Array } clusterID - the cluster identifier for each data dot\n * @param {function} distance - Distance function to use between the points\n * @return {Array} the cluster identifier for each data dot\n */\nexport function updateClusterID(data, centers, clusterID, distance) {\n for (var i = 0; i < data.length; i++) {\n clusterID[i] = nearestVector(centers, data[i], {\n distanceFunction: distance\n });\n }\n return clusterID;\n}\n\n/**\n * Update the center values based in the new configurations of the clusters\n * @ignore\n * @param {Array>} prevCenters - Centroids from the previous iteration\n * @param {Array >} data - the [x,y,z,...] points to cluster\n * @param {Array } clusterID - the cluster identifier for each data dot\n * @param {number} K - Number of clusters\n * @return {Array} he K centers in format [x,y,z,...]\n */\nexport function updateCenters(prevCenters, data, clusterID, K) {\n const nDim = data[0].length;\n\n // copy previous centers\n var centers = new Array(K);\n var centersLen = new Array(K);\n for (var i = 0; i < K; i++) {\n centers[i] = new Array(nDim);\n centersLen[i] = 0;\n for (var j = 0; j < nDim; j++) {\n centers[i][j] = 0;\n }\n }\n\n // add the value for all dimensions of the point\n for (var l = 0; l < data.length; l++) {\n centersLen[clusterID[l]]++;\n for (var dim = 0; dim < nDim; dim++) {\n centers[clusterID[l]][dim] += data[l][dim];\n }\n }\n\n // divides by length\n for (var id = 0; id < K; id++) {\n for (var d = 0; d < nDim; d++) {\n if (centersLen[id]) {\n centers[id][d] /= centersLen[id];\n } else {\n centers[id][d] = prevCenters[id][d];\n }\n }\n }\n return centers;\n}\n\n/**\n * The centers have moved more than the tolerance value?\n * @ignore\n * @param {Array>} centers - the K centers in format [x,y,z,...]\n * @param {Array>} oldCenters - the K old centers in format [x,y,z,...]\n * @param {function} distanceFunction - Distance function to use between the points\n * @param {number} tolerance - Allowed distance for the centroids to move\n * @return {boolean}\n */\nexport function hasConverged(centers, oldCenters, distanceFunction, tolerance) {\n for (var i = 0; i < centers.length; i++) {\n if (distanceFunction(centers[i], oldCenters[i]) > tolerance) {\n return false;\n }\n }\n return true;\n}\n","const LOOP = 8;\nconst FLOAT_MUL = 1 / 16777216;\nconst sh1 = 15;\nconst sh2 = 18;\nconst sh3 = 11;\nfunction multiply_uint32(n, m) {\n n >>>= 0;\n m >>>= 0;\n const nlo = n & 0xffff;\n const nhi = n - nlo;\n return (((nhi * m) >>> 0) + nlo * m) >>> 0;\n}\nexport default class XSadd {\n constructor(seed = Date.now()) {\n this.state = new Uint32Array(4);\n this.init(seed);\n this.random = this.getFloat.bind(this);\n }\n /**\n * Returns a 32-bit integer r (0 <= r < 2^32)\n */\n getUint32() {\n this.nextState();\n return (this.state[3] + this.state[2]) >>> 0;\n }\n /**\n * Returns a floating point number r (0.0 <= r < 1.0)\n */\n getFloat() {\n return (this.getUint32() >>> 8) * FLOAT_MUL;\n }\n init(seed) {\n if (!Number.isInteger(seed)) {\n throw new TypeError('seed must be an integer');\n }\n this.state[0] = seed;\n this.state[1] = 0;\n this.state[2] = 0;\n this.state[3] = 0;\n for (let i = 1; i < LOOP; i++) {\n this.state[i & 3] ^=\n (i +\n multiply_uint32(1812433253, this.state[(i - 1) & 3] ^ ((this.state[(i - 1) & 3] >>> 30) >>> 0))) >>>\n 0;\n }\n this.periodCertification();\n for (let i = 0; i < LOOP; i++) {\n this.nextState();\n }\n }\n periodCertification() {\n if (this.state[0] === 0 &&\n this.state[1] === 0 &&\n this.state[2] === 0 &&\n this.state[3] === 0) {\n this.state[0] = 88; // X\n this.state[1] = 83; // S\n this.state[2] = 65; // A\n this.state[3] = 68; // D\n }\n }\n nextState() {\n let t = this.state[0];\n t ^= t << sh1;\n t ^= t >>> sh2;\n t ^= this.state[3] << sh3;\n this.state[0] = this.state[1];\n this.state[1] = this.state[2];\n this.state[2] = this.state[3];\n this.state[3] = t;\n }\n}\n","const PROB_TOLERANCE = 0.00000001;\nfunction randomChoice(values, options = {}, random = Math.random) {\n const { size = 1, replace = false, probabilities } = options;\n let valuesArr;\n let cumSum;\n if (typeof values === 'number') {\n valuesArr = getArray(values);\n }\n else {\n valuesArr = values.slice();\n }\n if (probabilities) {\n if (!replace) {\n throw new Error('choice with probabilities and no replacement is not implemented');\n }\n // check input is sane\n if (probabilities.length !== valuesArr.length) {\n throw new Error('the length of probabilities option should be equal to the number of choices');\n }\n cumSum = [probabilities[0]];\n for (let i = 1; i < probabilities.length; i++) {\n cumSum[i] = cumSum[i - 1] + probabilities[i];\n }\n if (Math.abs(1 - cumSum[cumSum.length - 1]) > PROB_TOLERANCE) {\n throw new Error(`probabilities should sum to 1, but instead sums to ${cumSum[cumSum.length - 1]}`);\n }\n }\n if (replace === false && size > valuesArr.length) {\n throw new Error('size option is too large');\n }\n const result = [];\n for (let i = 0; i < size; i++) {\n const index = randomIndex(valuesArr.length, random, cumSum);\n result.push(valuesArr[index]);\n if (!replace) {\n valuesArr.splice(index, 1);\n }\n }\n return result;\n}\nfunction getArray(n) {\n const arr = [];\n for (let i = 0; i < n; i++) {\n arr.push(i);\n }\n return arr;\n}\nfunction randomIndex(n, random, cumSum) {\n const rand = random();\n if (!cumSum) {\n return Math.floor(rand * n);\n }\n else {\n let idx = 0;\n while (rand > cumSum[idx]) {\n idx++;\n }\n return idx;\n }\n}\nexport default randomChoice;\n","// tslint:disable-next-line\nimport XSAdd from 'ml-xsadd';\nimport choice from './choice';\n/**\n * @classdesc Random class\n */\nexport default class Random {\n /**\n * @param [seedOrRandom=Math.random] - Control the random number generator used by the Random class instance. Pass a random number generator function with a uniform distribution over the half-open interval [0, 1[. If seed will pass it to ml-xsadd to create a seeded random number generator. If undefined will use Math.random.\n */\n constructor(seedOrRandom = Math.random) {\n if (typeof seedOrRandom === 'number') {\n const xsadd = new XSAdd(seedOrRandom);\n this.randomGenerator = xsadd.random;\n }\n else {\n this.randomGenerator = seedOrRandom;\n }\n }\n choice(values, options) {\n if (typeof values === 'number') {\n return choice(values, options, this.randomGenerator);\n }\n return choice(values, options, this.randomGenerator);\n }\n /**\n * Draw a random number from a uniform distribution on [0,1)\n * @return The random number\n */\n random() {\n return this.randomGenerator();\n }\n /**\n * Draw a random integer from a uniform distribution on [low, high). If only low is specified, the number is drawn on [0, low)\n * @param low - The lower bound of the uniform distribution interval.\n * @param high - The higher bound of the uniform distribution interval.\n */\n randInt(low, high) {\n if (high === undefined) {\n high = low;\n low = 0;\n }\n return low + Math.floor(this.randomGenerator() * (high - low));\n }\n /**\n * Draw several random number from a uniform distribution on [0, 1)\n * @param size - The number of number to draw\n * @return - The list of drawn numbers.\n */\n randomSample(size) {\n const result = [];\n for (let i = 0; i < size; i++) {\n result.push(this.random());\n }\n return result;\n }\n}\n","import Random from 'ml-random';\nimport { squaredEuclidean } from 'ml-distance-euclidean';\nimport { Matrix } from 'ml-matrix';\n\n/**\n * Choose K different random points from the original data\n * @ignore\n * @param {Array>} data - Points in the format to cluster [x,y,z,...]\n * @param {number} K - number of clusters\n * @param {number} seed - seed for random number generation\n * @return {Array>} - Initial random points\n */\nexport function random(data, K, seed) {\n const random = new Random(seed);\n return random.choice(data, { size: K });\n}\n\n/**\n * Chooses the most distant points to a first random pick\n * @ignore\n * @param {Array>} data - Points in the format to cluster [x,y,z,...]\n * @param {number} K - number of clusters\n * @param {Array>} distanceMatrix - matrix with the distance values\n * @param {number} seed - seed for random number generation\n * @return {Array>} - Initial random points\n */\nexport function mostDistant(data, K, distanceMatrix, seed) {\n const random = new Random(seed);\n var ans = new Array(K);\n // chooses a random point as initial cluster\n ans[0] = Math.floor(random.random() * data.length);\n\n if (K > 1) {\n // chooses the more distant point\n var maxDist = { dist: -1, index: -1 };\n for (var l = 0; l < data.length; ++l) {\n if (distanceMatrix[ans[0]][l] > maxDist.dist) {\n maxDist.dist = distanceMatrix[ans[0]][l];\n maxDist.index = l;\n }\n }\n ans[1] = maxDist.index;\n\n if (K > 2) {\n // chooses the set of points that maximises the min distance\n for (var k = 2; k < K; ++k) {\n var center = { dist: -1, index: -1 };\n for (var m = 0; m < data.length; ++m) {\n // minimum distance to centers\n var minDistCent = { dist: Number.MAX_VALUE, index: -1 };\n for (var n = 0; n < k; ++n) {\n if (\n distanceMatrix[n][m] < minDistCent.dist &&\n ans.indexOf(m) === -1\n ) {\n minDistCent = {\n dist: distanceMatrix[n][m],\n index: m\n };\n }\n }\n\n if (\n minDistCent.dist !== Number.MAX_VALUE &&\n minDistCent.dist > center.dist\n ) {\n center = Object.assign({}, minDistCent);\n }\n }\n\n ans[k] = center.index;\n }\n }\n }\n\n return ans.map((index) => data[index]);\n}\n\n// Implementation inspired from scikit\nexport function kmeanspp(X, K, options = {}) {\n X = new Matrix(X);\n const nSamples = X.rows;\n const random = new Random(options.seed);\n // Set the number of trials\n const centers = [];\n const localTrials = options.localTrials || 2 + Math.floor(Math.log(K));\n\n // Pick the first center at random from the dataset\n const firstCenterIdx = random.randInt(nSamples);\n centers.push(X.getRow(firstCenterIdx));\n\n // Init closest distances\n let closestDistSquared = new Matrix(1, X.rows);\n for (let i = 0; i < X.rows; i++) {\n closestDistSquared.set(0, i, squaredEuclidean(X.getRow(i), centers[0]));\n }\n let cumSumClosestDistSquared = [cumSum(closestDistSquared.getRow(0))];\n const factor = 1 / cumSumClosestDistSquared[0][nSamples - 1];\n let probabilities = Matrix.mul(closestDistSquared, factor);\n\n // Iterate over the remaining centers\n for (let i = 1; i < K; i++) {\n const candidateIdx = random.choice(nSamples, {\n replace: true,\n size: localTrials,\n probabilities: probabilities[0]\n });\n\n const candidates = X.selection(candidateIdx, range(X.columns));\n const distanceToCandidates = euclideanDistances(candidates, X);\n\n let bestCandidate;\n let bestPot;\n let bestDistSquared;\n\n for (let j = 0; j < localTrials; j++) {\n const newDistSquared = Matrix.min(closestDistSquared, [distanceToCandidates.getRow(j)]);\n const newPot = newDistSquared.sum();\n if (bestCandidate === undefined || newPot < bestPot) {\n bestCandidate = candidateIdx[j];\n bestPot = newPot;\n bestDistSquared = newDistSquared;\n }\n }\n centers[i] = X.getRow(bestCandidate);\n closestDistSquared = bestDistSquared;\n cumSumClosestDistSquared = [cumSum(closestDistSquared.getRow(0))];\n probabilities = Matrix.mul(\n closestDistSquared,\n 1 / cumSumClosestDistSquared[0][nSamples - 1]\n );\n }\n return centers;\n}\n\nfunction euclideanDistances(A, B) {\n const result = new Matrix(A.rows, B.rows);\n for (let i = 0; i < A.rows; i++) {\n for (let j = 0; j < B.rows; j++) {\n result.set(i, j, squaredEuclidean(A.getRow(i), B.getRow(j)));\n }\n }\n return result;\n}\n\nfunction range(l) {\n let r = [];\n for (let i = 0; i < l; i++) {\n r.push(i);\n }\n return r;\n}\n\nfunction cumSum(arr) {\n let cumSum = [arr[0]];\n for (let i = 1; i < arr.length; i++) {\n cumSum[i] = cumSum[i - 1] + arr[i];\n }\n return cumSum;\n}\n","import { updateClusterID } from './utils';\n\nconst distanceSymbol = Symbol('distance');\n\nexport default class KMeansResult {\n /**\n * Result of the kmeans algorithm\n * @param {Array} clusters - the cluster identifier for each data dot\n * @param {Array>} centroids - the K centers in format [x,y,z,...], the error and size of the cluster\n * @param {boolean} converged - Converge criteria satisfied\n * @param {number} iterations - Current number of iterations\n * @param {function} distance - (*Private*) Distance function to use between the points\n * @constructor\n */\n constructor(clusters, centroids, converged, iterations, distance) {\n this.clusters = clusters;\n this.centroids = centroids;\n this.converged = converged;\n this.iterations = iterations;\n this[distanceSymbol] = distance;\n }\n\n /**\n * Allows to compute for a new array of points their cluster id\n * @param {Array>} data - the [x,y,z,...] points to cluster\n * @return {Array} - cluster id for each point\n */\n nearest(data) {\n const clusterID = new Array(data.length);\n const centroids = this.centroids.map(function (centroid) {\n return centroid.centroid;\n });\n return updateClusterID(data, centroids, clusterID, this[distanceSymbol]);\n }\n\n /**\n * Returns a KMeansResult with the error and size of the cluster\n * @ignore\n * @param {Array>} data - the [x,y,z,...] points to cluster\n * @return {KMeansResult}\n */\n computeInformation(data) {\n var enrichedCentroids = this.centroids.map(function (centroid) {\n return {\n centroid: centroid,\n error: 0,\n size: 0\n };\n });\n\n for (var i = 0; i < data.length; i++) {\n enrichedCentroids[this.clusters[i]].error += this[distanceSymbol](\n data[i],\n this.centroids[this.clusters[i]]\n );\n enrichedCentroids[this.clusters[i]].size++;\n }\n\n for (var j = 0; j < this.centroids.length; j++) {\n if (enrichedCentroids[j].size) {\n enrichedCentroids[j].error /= enrichedCentroids[j].size;\n } else {\n enrichedCentroids[j].error = null;\n }\n }\n\n return new KMeansResult(\n this.clusters,\n enrichedCentroids,\n this.converged,\n this.iterations,\n this[distanceSymbol]\n );\n }\n}\n","import { squaredEuclidean } from 'ml-distance-euclidean';\n\nimport {\n updateClusterID,\n updateCenters,\n hasConverged,\n calculateDistanceMatrix\n} from './utils';\nimport { mostDistant, random, kmeanspp } from './initialization';\nimport KMeansResult from './KMeansResult';\n\nconst defaultOptions = {\n maxIterations: 100,\n tolerance: 1e-6,\n withIterations: false,\n initialization: 'kmeans++',\n distanceFunction: squaredEuclidean\n};\n\n/**\n * Each step operation for kmeans\n * @ignore\n * @param {Array>} centers - K centers in format [x,y,z,...]\n * @param {Array>} data - Points [x,y,z,...] to cluster\n * @param {Array} clusterID - Cluster identifier for each data dot\n * @param {number} K - Number of clusters\n * @param {object} [options] - Option object\n * @param {number} iterations - Current number of iterations\n * @return {KMeansResult}\n */\nfunction step(centers, data, clusterID, K, options, iterations) {\n clusterID = updateClusterID(\n data,\n centers,\n clusterID,\n options.distanceFunction\n );\n var newCenters = updateCenters(centers, data, clusterID, K);\n var converged = hasConverged(\n newCenters,\n centers,\n options.distanceFunction,\n options.tolerance\n );\n return new KMeansResult(\n clusterID,\n newCenters,\n converged,\n iterations,\n options.distanceFunction\n );\n}\n\n/**\n * Generator version for the algorithm\n * @ignore\n * @param {Array>} centers - K centers in format [x,y,z,...]\n * @param {Array>} data - Points [x,y,z,...] to cluster\n * @param {Array} clusterID - Cluster identifier for each data dot\n * @param {number} K - Number of clusters\n * @param {object} [options] - Option object\n */\nfunction* kmeansGenerator(centers, data, clusterID, K, options) {\n var converged = false;\n var stepNumber = 0;\n var stepResult;\n while (!converged && stepNumber < options.maxIterations) {\n stepResult = step(centers, data, clusterID, K, options, ++stepNumber);\n yield stepResult.computeInformation(data);\n converged = stepResult.converged;\n centers = stepResult.centroids;\n }\n}\n\n/**\n * K-means algorithm\n * @param {Array>} data - Points in the format to cluster [x,y,z,...]\n * @param {number} K - Number of clusters\n * @param {object} [options] - Option object\n * @param {number} [options.maxIterations = 100] - Maximum of iterations allowed\n * @param {number} [options.tolerance = 1e-6] - Error tolerance\n * @param {boolean} [options.withIterations = false] - Store clusters and centroids for each iteration\n * @param {function} [options.distanceFunction = squaredDistance] - Distance function to use between the points\n * @param {number} [options.seed] - Seed for random initialization.\n * @param {string|Array>} [options.initialization = 'kmeans++'] - K centers in format [x,y,z,...] or a method for initialize the data:\n * * You can either specify your custom start centroids, or select one of the following initialization method:\n * * `'kmeans++'` will use the kmeans++ method as described by http://ilpubs.stanford.edu:8090/778/1/2006-13.pdf\n * * `'random'` will choose K random different values.\n * * `'mostDistant'` will choose the more distant points to a first random pick\n * @return {KMeansResult} - Cluster identifier for each data dot and centroids with the following fields:\n * * `'clusters'`: Array of indexes for the clusters.\n * * `'centroids'`: Array with the resulting centroids.\n * * `'iterations'`: Number of iterations that took to converge\n */\nexport default function kmeans(data, K, options) {\n options = Object.assign({}, defaultOptions, options);\n\n if (K <= 0 || K > data.length || !Number.isInteger(K)) {\n throw new Error(\n 'K should be a positive integer smaller than the number of points'\n );\n }\n\n var centers;\n if (Array.isArray(options.initialization)) {\n if (options.initialization.length !== K) {\n throw new Error('The initial centers should have the same length as K');\n } else {\n centers = options.initialization;\n }\n } else {\n switch (options.initialization) {\n case 'kmeans++':\n centers = kmeanspp(data, K, options);\n break;\n case 'random':\n centers = random(data, K, options.seed);\n break;\n case 'mostDistant':\n centers = mostDistant(\n data,\n K,\n calculateDistanceMatrix(data, options.distanceFunction),\n options.seed\n );\n break;\n default:\n throw new Error(\n `Unknown initialization method: \"${options.initialization}\"`\n );\n }\n }\n\n // infinite loop until convergence\n if (options.maxIterations === 0) {\n options.maxIterations = Number.MAX_VALUE;\n }\n\n var clusterID = new Array(data.length);\n if (options.withIterations) {\n return kmeansGenerator(centers, data, clusterID, K, options);\n } else {\n var converged = false;\n var stepNumber = 0;\n var stepResult;\n while (!converged && stepNumber < options.maxIterations) {\n stepResult = step(centers, data, clusterID, K, options, ++stepNumber);\n converged = stepResult.converged;\n centers = stepResult.centroids;\n }\n return stepResult.computeInformation(data);\n }\n}\n","import Matrix from 'ml-matrix';\n\n/**\n * @private\n * Function that retuns an array of matrices of the cases that belong to each class.\n * @param {Matrix} X - dataset\n * @param {Array} y - predictions\n * @return {Array}\n */\nexport function separateClasses(X, y) {\n var features = X.columns;\n\n var classes = 0;\n var totalPerClasses = new Array(10000); // max upperbound of classes\n for (var i = 0; i < y.length; i++) {\n if (totalPerClasses[y[i]] === undefined) {\n totalPerClasses[y[i]] = 0;\n classes++;\n }\n totalPerClasses[y[i]]++;\n }\n var separatedClasses = new Array(classes);\n var currentIndex = new Array(classes);\n for (i = 0; i < classes; ++i) {\n separatedClasses[i] = new Matrix(totalPerClasses[i], features);\n currentIndex[i] = 0;\n }\n for (i = 0; i < X.rows; ++i) {\n separatedClasses[y[i]].setRow(currentIndex[y[i]], X.getRow(i));\n currentIndex[y[i]]++;\n }\n return separatedClasses;\n}\n","import { Matrix } from 'ml-matrix';\n\nimport { separateClasses } from './utils';\n\nexport class GaussianNB {\n /**\n * Constructor for the Gaussian Naive Bayes classifier, the parameters here is just for loading purposes.\n * @constructor\n * @param {boolean} reload\n * @param {object} model\n */\n constructor(reload, model) {\n if (reload) {\n this.means = model.means;\n this.calculateProbabilities = model.calculateProbabilities;\n }\n }\n\n /**\n * Function that trains the classifier with a matrix that represents the training set and an array that\n * represents the label of each row in the training set. the labels must be numbers between 0 to n-1 where\n * n represents the number of classes.\n *\n * WARNING: in the case that one class, all the cases in one or more features have the same value, the\n * Naive Bayes classifier will not work well.\n * @param {Matrix|Array} trainingSet\n * @param {Matrix|Array} trainingLabels\n */\n train(trainingSet, trainingLabels) {\n var C1 = Math.sqrt(2 * Math.PI); // constant to precalculate the squared root\n trainingSet = Matrix.checkMatrix(trainingSet);\n\n if (trainingSet.rows !== trainingLabels.length) {\n throw new RangeError(\n 'the size of the training set and the training labels must be the same.'\n );\n }\n\n var separatedClasses = separateClasses(trainingSet, trainingLabels);\n var calculateProbabilities = new Array(separatedClasses.length);\n this.means = new Array(separatedClasses.length);\n for (var i = 0; i < separatedClasses.length; ++i) {\n var means = separatedClasses[i].mean('column');\n var std = separatedClasses[i].standardDeviation('column', {\n mean: means\n });\n\n var logPriorProbability = Math.log(\n separatedClasses[i].rows / trainingSet.rows\n );\n calculateProbabilities[i] = new Array(means.length + 1);\n\n calculateProbabilities[i][0] = logPriorProbability;\n for (var j = 1; j < means.length + 1; ++j) {\n var currentStd = std[j - 1];\n calculateProbabilities[i][j] = [\n 1 / (C1 * currentStd),\n -2 * currentStd * currentStd\n ];\n }\n\n this.means[i] = means;\n }\n\n this.calculateProbabilities = calculateProbabilities;\n }\n\n /**\n * function that predicts each row of the dataset (must be a matrix).\n *\n * @param {Matrix|Array} dataset\n * @return {Array}\n */\n predict(dataset) {\n dataset = Matrix.checkMatrix(dataset);\n if (dataset.rows === this.calculateProbabilities[0].length) {\n throw new RangeError(\n 'the dataset must have the same features as the training set'\n );\n }\n\n var predictions = new Array(dataset.rows);\n\n for (var i = 0; i < predictions.length; ++i) {\n predictions[i] = getCurrentClass(\n dataset.getRow(i),\n this.means,\n this.calculateProbabilities\n );\n }\n\n return predictions;\n }\n\n /**\n * Function that export the NaiveBayes model.\n * @return {object}\n */\n toJSON() {\n return {\n modelName: 'NaiveBayes',\n means: this.means,\n calculateProbabilities: this.calculateProbabilities\n };\n }\n\n /**\n * Function that create a GaussianNB classifier with the given model.\n * @param {object} model\n * @return {GaussianNB}\n */\n static load(model) {\n if (model.modelName !== 'NaiveBayes') {\n throw new RangeError(\n 'The current model is not a Multinomial Naive Bayes, current model:',\n model.name\n );\n }\n\n return new GaussianNB(true, model);\n }\n}\n\n/**\n * @private\n * Function the retrieves a prediction with one case.\n *\n * @param {Array} currentCase\n * @param {Array} mean - Precalculated means of each class trained\n * @param {Array} classes - Precalculated value of each class (Prior probability and probability function of each feature)\n * @return {number}\n */\nfunction getCurrentClass(currentCase, mean, classes) {\n var maxProbability = 0;\n var predictedClass = -1;\n\n // going through all precalculated values for the classes\n for (var i = 0; i < classes.length; ++i) {\n var currentProbability = classes[i][0]; // initialize with the prior probability\n for (var j = 1; j < classes[0][1].length + 1; ++j) {\n currentProbability += calculateLogProbability(\n currentCase[j - 1],\n mean[i][j - 1],\n classes[i][j][0],\n classes[i][j][1]\n );\n }\n\n currentProbability = Math.exp(currentProbability);\n if (currentProbability > maxProbability) {\n maxProbability = currentProbability;\n predictedClass = i;\n }\n }\n\n return predictedClass;\n}\n\n/**\n * @private\n * function that retrieves the probability of the feature given the class.\n * @param {number} value - value of the feature.\n * @param {number} mean - mean of the feature for the given class.\n * @param {number} C1 - precalculated value of (1 / (sqrt(2*pi) * std)).\n * @param {number} C2 - precalculated value of (2 * std^2) for the denominator of the exponential.\n * @return {number}\n */\nfunction calculateLogProbability(value, mean, C1, C2) {\n value = value - mean;\n return Math.log(C1 * Math.exp((value * value) / C2));\n}\n","import { Matrix } from 'ml-matrix';\n\nimport { separateClasses } from './utils';\n\nexport class MultinomialNB {\n /**\n * Constructor for Multinomial Naive Bayes, the model parameter is for load purposes.\n * @constructor\n * @param {object} model - for load purposes.\n */\n constructor(model) {\n if (model) {\n this.conditionalProbability = Matrix.checkMatrix(\n model.conditionalProbability\n );\n this.priorProbability = Matrix.checkMatrix(model.priorProbability);\n }\n }\n\n /**\n * Train the classifier with the current training set and labels, the labels must be numbers between 0 and n.\n * @param {Matrix|Array} trainingSet\n * @param {Array} trainingLabels\n */\n train(trainingSet, trainingLabels) {\n trainingSet = Matrix.checkMatrix(trainingSet);\n\n if (trainingSet.rows !== trainingLabels.length) {\n throw new RangeError(\n 'the size of the training set and the training labels must be the same.'\n );\n }\n\n var separateClass = separateClasses(trainingSet, trainingLabels);\n\n this.priorProbability = new Matrix(separateClass.length, 1);\n\n for (var i = 0; i < separateClass.length; ++i) {\n this.priorProbability.set(i, 0, Math.log(\n separateClass[i].rows / trainingSet.rows\n ));\n }\n\n var features = trainingSet.columns;\n this.conditionalProbability = new Matrix(separateClass.length, features);\n for (i = 0; i < separateClass.length; ++i) {\n var classValues = Matrix.checkMatrix(separateClass[i]);\n var total = classValues.sum();\n var divisor = total + features;\n this.conditionalProbability.setRow(\n i,\n Matrix.rowVector(classValues\n .sum('column'))\n .add(1)\n .div(divisor)\n .apply(matrixLog)\n );\n }\n }\n\n /**\n * Retrieves the predictions for the dataset with the current model.\n * @param {Matrix|Array} dataset\n * @return {Array} - predictions from the dataset.\n */\n predict(dataset) {\n dataset = Matrix.checkMatrix(dataset);\n var predictions = new Array(dataset.rows);\n for (var i = 0; i < dataset.rows; ++i) {\n var currentElement = dataset.getRowVector(i);\n const v = Matrix.columnVector(this.conditionalProbability\n .clone()\n .mulRowVector(currentElement)\n .sum('row'));\n predictions[i] = v\n .add(this.priorProbability)\n .maxIndex()[0];\n }\n\n return predictions;\n }\n\n /**\n * Function that saves the current model.\n * @return {object} - model in JSON format.\n */\n toJSON() {\n return {\n name: 'MultinomialNB',\n priorProbability: this.priorProbability,\n conditionalProbability: this.conditionalProbability\n };\n }\n\n /**\n * Creates a new MultinomialNB from the given model\n * @param {object} model\n * @return {MultinomialNB}\n */\n static load(model) {\n if (model.name !== 'MultinomialNB') {\n throw new RangeError(`${model.name} is not a Multinomial Naive Bayes`);\n }\n\n return new MultinomialNB(model);\n }\n}\n\nfunction matrixLog(i, j) {\n this.set(i, j, Math.log(this.get(i, j)));\n}\n","/*\n * Original code from:\n *\n * k-d Tree JavaScript - V 1.01\n *\n * https://github.com/ubilabs/kd-tree-javascript\n *\n * @author Mircea Pricop , 2012\n * @author Martin Kleppe , 2012\n * @author Ubilabs http://ubilabs.net, 2012\n * @license MIT License \n */\n\nfunction Node(obj, dimension, parent) {\n this.obj = obj;\n this.left = null;\n this.right = null;\n this.parent = parent;\n this.dimension = dimension;\n}\n\nexport default class KDTree {\n constructor(points, metric) {\n // If points is not an array, assume we're loading a pre-built tree\n if (!Array.isArray(points)) {\n this.dimensions = points.dimensions;\n this.root = points;\n restoreParent(this.root);\n } else {\n this.dimensions = new Array(points[0].length);\n for (var i = 0; i < this.dimensions.length; i++) {\n this.dimensions[i] = i;\n }\n this.root = buildTree(points, 0, null, this.dimensions);\n }\n this.metric = metric;\n }\n\n // Convert to a JSON serializable structure; this just requires removing\n // the `parent` property\n toJSON() {\n const result = toJSONImpl(this.root, true);\n result.dimensions = this.dimensions;\n return result;\n }\n\n nearest(point, maxNodes, maxDistance) {\n const metric = this.metric;\n const dimensions = this.dimensions;\n var i;\n\n const bestNodes = new BinaryHeap(function (e) {\n return -e[1];\n });\n\n function nearestSearch(node) {\n const dimension = dimensions[node.dimension];\n const ownDistance = metric(point, node.obj);\n const linearPoint = {};\n var bestChild, linearDistance, otherChild, i;\n\n function saveNode(node, distance) {\n bestNodes.push([node, distance]);\n if (bestNodes.size() > maxNodes) {\n bestNodes.pop();\n }\n }\n\n for (i = 0; i < dimensions.length; i += 1) {\n if (i === node.dimension) {\n linearPoint[dimensions[i]] = point[dimensions[i]];\n } else {\n linearPoint[dimensions[i]] = node.obj[dimensions[i]];\n }\n }\n\n linearDistance = metric(linearPoint, node.obj);\n\n if (node.right === null && node.left === null) {\n if (bestNodes.size() < maxNodes || ownDistance < bestNodes.peek()[1]) {\n saveNode(node, ownDistance);\n }\n return;\n }\n\n if (node.right === null) {\n bestChild = node.left;\n } else if (node.left === null) {\n bestChild = node.right;\n } else {\n if (point[dimension] < node.obj[dimension]) {\n bestChild = node.left;\n } else {\n bestChild = node.right;\n }\n }\n\n nearestSearch(bestChild);\n\n if (bestNodes.size() < maxNodes || ownDistance < bestNodes.peek()[1]) {\n saveNode(node, ownDistance);\n }\n\n if (\n bestNodes.size() < maxNodes ||\n Math.abs(linearDistance) < bestNodes.peek()[1]\n ) {\n if (bestChild === node.left) {\n otherChild = node.right;\n } else {\n otherChild = node.left;\n }\n if (otherChild !== null) {\n nearestSearch(otherChild);\n }\n }\n }\n\n if (maxDistance) {\n for (i = 0; i < maxNodes; i += 1) {\n bestNodes.push([null, maxDistance]);\n }\n }\n\n if (this.root) {\n nearestSearch(this.root);\n }\n\n const result = [];\n for (i = 0; i < Math.min(maxNodes, bestNodes.content.length); i += 1) {\n if (bestNodes.content[i][0]) {\n result.push([bestNodes.content[i][0].obj, bestNodes.content[i][1]]);\n }\n }\n return result;\n }\n}\n\nfunction toJSONImpl(src) {\n const dest = new Node(src.obj, src.dimension, null);\n if (src.left) dest.left = toJSONImpl(src.left);\n if (src.right) dest.right = toJSONImpl(src.right);\n return dest;\n}\n\nfunction buildTree(points, depth, parent, dimensions) {\n const dim = depth % dimensions.length;\n\n if (points.length === 0) {\n return null;\n }\n if (points.length === 1) {\n return new Node(points[0], dim, parent);\n }\n\n points.sort((a, b) => a[dimensions[dim]] - b[dimensions[dim]]);\n\n const median = Math.floor(points.length / 2);\n const node = new Node(points[median], dim, parent);\n node.left = buildTree(points.slice(0, median), depth + 1, node, dimensions);\n node.right = buildTree(points.slice(median + 1), depth + 1, node, dimensions);\n\n return node;\n}\n\nfunction restoreParent(root) {\n if (root.left) {\n root.left.parent = root;\n restoreParent(root.left);\n }\n\n if (root.right) {\n root.right.parent = root;\n restoreParent(root.right);\n }\n}\n\n// Binary heap implementation from:\n// http://eloquentjavascript.net/appendix2.html\nclass BinaryHeap {\n constructor(scoreFunction) {\n this.content = [];\n this.scoreFunction = scoreFunction;\n }\n\n push(element) {\n // Add the new element to the end of the array.\n this.content.push(element);\n // Allow it to bubble up.\n this.bubbleUp(this.content.length - 1);\n }\n\n pop() {\n // Store the first element so we can return it later.\n var result = this.content[0];\n // Get the element at the end of the array.\n var end = this.content.pop();\n // If there are any elements left, put the end element at the\n // start, and let it sink down.\n if (this.content.length > 0) {\n this.content[0] = end;\n this.sinkDown(0);\n }\n return result;\n }\n\n peek() {\n return this.content[0];\n }\n\n size() {\n return this.content.length;\n }\n\n bubbleUp(n) {\n // Fetch the element that has to be moved.\n var element = this.content[n];\n // When at 0, an element can not go up any further.\n while (n > 0) {\n // Compute the parent element's index, and fetch it.\n const parentN = Math.floor((n + 1) / 2) - 1;\n const parent = this.content[parentN];\n // Swap the elements if the parent is greater.\n if (this.scoreFunction(element) < this.scoreFunction(parent)) {\n this.content[parentN] = element;\n this.content[n] = parent;\n // Update 'n' to continue at the new position.\n n = parentN;\n } else {\n // Found a parent that is less, no need to move it further.\n break;\n }\n }\n }\n\n sinkDown(n) {\n // Look up the target element and its score.\n var length = this.content.length;\n var element = this.content[n];\n var elemScore = this.scoreFunction(element);\n\n while (true) {\n // Compute the indices of the child elements.\n var child2N = (n + 1) * 2;\n var child1N = child2N - 1;\n // This is used to store the new position of the element,\n // if any.\n var swap = null;\n // If the first child exists (is inside the array)...\n if (child1N < length) {\n // Look it up and compute its score.\n var child1 = this.content[child1N];\n var child1Score = this.scoreFunction(child1);\n // If the score is less than our element's, we need to swap.\n if (child1Score < elemScore) {\n swap = child1N;\n }\n }\n // Do the same checks for the other child.\n if (child2N < length) {\n var child2 = this.content[child2N];\n var child2Score = this.scoreFunction(child2);\n if (child2Score < (swap === null ? elemScore : child1Score)) {\n swap = child2N;\n }\n }\n\n // If the element needs to be moved, swap it, and continue.\n if (swap !== null) {\n this.content[n] = this.content[swap];\n this.content[swap] = element;\n n = swap;\n } else {\n // Otherwise, we are done.\n break;\n }\n }\n }\n}\n","import { euclidean as euclideanDistance } from 'ml-distance-euclidean';\n\nimport KDTree from './KDTree';\n\nexport default class KNN {\n /**\n * @param {Array} dataset\n * @param {Array} labels\n * @param {object} options\n * @param {number} [options.k=numberOfClasses + 1] - Number of neighbors to classify.\n * @param {function} [options.distance=euclideanDistance] - Distance function that takes two parameters.\n */\n constructor(dataset, labels, options = {}) {\n if (dataset === true) {\n const model = labels;\n this.kdTree = new KDTree(model.kdTree, options);\n this.k = model.k;\n this.classes = new Set(model.classes);\n this.isEuclidean = model.isEuclidean;\n return;\n }\n\n const classes = new Set(labels);\n\n const { distance = euclideanDistance, k = classes.size + 1 } = options;\n\n const points = new Array(dataset.length);\n for (var i = 0; i < points.length; ++i) {\n points[i] = dataset[i].slice();\n }\n\n for (i = 0; i < labels.length; ++i) {\n points[i].push(labels[i]);\n }\n\n this.kdTree = new KDTree(points, distance);\n this.k = k;\n this.classes = classes;\n this.isEuclidean = distance === euclideanDistance;\n }\n\n /**\n * Create a new KNN instance with the given model.\n * @param {object} model\n * @param {function} distance=euclideanDistance - distance function must be provided if the model wasn't trained with euclidean distance.\n * @return {KNN}\n */\n static load(model, distance = euclideanDistance) {\n if (model.name !== 'KNN') {\n throw new Error(`invalid model: ${model.name}`);\n }\n if (!model.isEuclidean && distance === euclideanDistance) {\n throw new Error(\n 'a custom distance function was used to create the model. Please provide it again'\n );\n }\n if (model.isEuclidean && distance !== euclideanDistance) {\n throw new Error(\n 'the model was created with the default distance function. Do not load it with another one'\n );\n }\n return new KNN(true, model, distance);\n }\n\n /**\n * Return a JSON containing the kd-tree model.\n * @return {object} JSON KNN model.\n */\n toJSON() {\n return {\n name: 'KNN',\n kdTree: this.kdTree,\n k: this.k,\n classes: Array.from(this.classes),\n isEuclidean: this.isEuclidean\n };\n }\n\n /**\n * Predicts the output given the matrix to predict.\n * @param {Array} dataset\n * @return {Array} predictions\n */\n predict(dataset) {\n if (Array.isArray(dataset)) {\n if (typeof dataset[0] === 'number') {\n return getSinglePrediction(this, dataset);\n } else if (\n Array.isArray(dataset[0]) &&\n typeof dataset[0][0] === 'number'\n ) {\n const predictions = new Array(dataset.length);\n for (var i = 0; i < dataset.length; i++) {\n predictions[i] = getSinglePrediction(this, dataset[i]);\n }\n return predictions;\n }\n }\n throw new TypeError('dataset to predict must be an array or a matrix');\n }\n}\n\nfunction getSinglePrediction(knn, currentCase) {\n var nearestPoints = knn.kdTree.nearest(currentCase, knn.k);\n var pointsPerClass = {};\n var predictedClass = -1;\n var maxPoints = -1;\n var lastElement = nearestPoints[0][0].length - 1;\n\n for (var element of knn.classes) {\n pointsPerClass[element] = 0;\n }\n\n for (var i = 0; i < nearestPoints.length; ++i) {\n var currentClass = nearestPoints[i][0][lastElement];\n var currentPoints = ++pointsPerClass[currentClass];\n if (currentPoints > maxPoints) {\n predictedClass = currentClass;\n maxPoints = currentPoints;\n }\n }\n\n return predictedClass;\n}\n","import Matrix from 'ml-matrix';\n\n/**\n * @private\n * Function that given vector, returns its norm\n * @param {Vector} X\n * @return {number} Norm of the vector\n */\nexport function norm(X) {\n return Math.sqrt(X.clone().apply(pow2array).sum());\n}\n\n/**\n * @private\n * Function that pow 2 each element of a Matrix or a Vector,\n * used in the apply method of the Matrix object\n * @param {number} i - index i.\n * @param {number} j - index j.\n * @return {Matrix} The Matrix object modified at the index i, j.\n * */\nexport function pow2array(i, j) {\n this.set(i, j, this.get(i, j) ** 2);\n}\n\n/**\n * @private\n * Function that normalize the dataset and return the means and\n * standard deviation of each feature.\n * @param {Matrix} dataset\n * @return {object} dataset normalized, means and standard deviations\n */\nexport function featureNormalize(dataset) {\n var means = dataset.mean('column');\n var std = dataset.standardDeviation('column', { mean: means, unbiased: true });\n var result = Matrix.checkMatrix(dataset).subRowVector(means);\n return { result: result.divRowVector(std), means: means, std: std };\n}\n\n/**\n * @private\n * Function that initialize an array of matrices.\n * @param {Array} array\n * @param {boolean} isMatrix\n * @return {Array} array with the matrices initialized.\n */\nexport function initializeMatrices(array, isMatrix) {\n if (isMatrix) {\n for (var i = 0; i < array.length; ++i) {\n for (var j = 0; j < array[i].length; ++j) {\n var elem = array[i][j];\n array[i][j] = elem !== null ? new Matrix(array[i][j]) : undefined;\n }\n }\n } else {\n for (i = 0; i < array.length; ++i) {\n array[i] = new Matrix(array[i]);\n }\n }\n\n return array;\n}\n","import Matrix from 'ml-matrix';\n\nimport * as Utils from './utils';\n\n/**\n * @class PLS\n */\nexport class PLS {\n /**\n * Constructor for Partial Least Squares (PLS)\n * @param {object} options\n * @param {number} [options.latentVectors] - Number of latent vector to get (if the algorithm doesn't find a good model below the tolerance)\n * @param {number} [options.tolerance=1e-5]\n * @param {boolean} [options.scale=true] - rescale dataset using mean.\n * @param {object} model - for load purposes.\n */\n constructor(options, model) {\n if (options === true) {\n this.meanX = model.meanX;\n this.stdDevX = model.stdDevX;\n this.meanY = model.meanY;\n this.stdDevY = model.stdDevY;\n this.PBQ = Matrix.checkMatrix(model.PBQ);\n this.R2X = model.R2X;\n this.scale = model.scale;\n this.scaleMethod = model.scaleMethod;\n this.tolerance = model.tolerance;\n } else {\n var {\n tolerance = 1e-5,\n scale = true,\n } = options;\n this.tolerance = tolerance;\n this.scale = scale;\n this.latentVectors = options.latentVectors;\n }\n }\n\n /**\n * Fits the model with the given data and predictions, in this function is calculated the\n * following outputs:\n *\n * T - Score matrix of X\n * P - Loading matrix of X\n * U - Score matrix of Y\n * Q - Loading matrix of Y\n * B - Matrix of regression coefficient\n * W - Weight matrix of X\n *\n * @param {Matrix|Array} trainingSet\n * @param {Matrix|Array} trainingValues\n */\n train(trainingSet, trainingValues) {\n trainingSet = Matrix.checkMatrix(trainingSet);\n trainingValues = Matrix.checkMatrix(trainingValues);\n\n if (trainingSet.length !== trainingValues.length) {\n throw new RangeError('The number of X rows must be equal to the number of Y rows');\n }\n\n this.meanX = trainingSet.mean('column');\n this.stdDevX = trainingSet.standardDeviation('column', { mean: this.meanX, unbiased: true });\n this.meanY = trainingValues.mean('column');\n this.stdDevY = trainingValues.standardDeviation('column', { mean: this.meanY, unbiased: true });\n\n if (this.scale) {\n trainingSet = trainingSet.clone().subRowVector(this.meanX).divRowVector(this.stdDevX);\n trainingValues = trainingValues.clone().subRowVector(this.meanY).divRowVector(this.stdDevY);\n }\n\n if (this.latentVectors === undefined) {\n this.latentVectors = Math.min(trainingSet.rows - 1, trainingSet.columns);\n }\n\n var rx = trainingSet.rows;\n var cx = trainingSet.columns;\n var ry = trainingValues.rows;\n var cy = trainingValues.columns;\n\n var ssqXcal = trainingSet.clone().mul(trainingSet).sum(); // for the r²\n var sumOfSquaresY = trainingValues.clone().mul(trainingValues).sum();\n\n var tolerance = this.tolerance;\n var n = this.latentVectors;\n var T = Matrix.zeros(rx, n);\n var P = Matrix.zeros(cx, n);\n var U = Matrix.zeros(ry, n);\n var Q = Matrix.zeros(cy, n);\n var B = Matrix.zeros(n, n);\n var W = P.clone();\n var k = 0;\n\n while (Utils.norm(trainingValues) > tolerance && k < n) {\n var transposeX = trainingSet.transpose();\n var transposeY = trainingValues.transpose();\n\n var tIndex = maxSumColIndex(trainingSet.clone().mul(trainingSet));\n var uIndex = maxSumColIndex(trainingValues.clone().mul(trainingValues));\n\n var t1 = trainingSet.getColumnVector(tIndex);\n var u = trainingValues.getColumnVector(uIndex);\n var t = Matrix.zeros(rx, 1);\n\n while (Utils.norm(t1.clone().sub(t)) > tolerance) {\n var w = transposeX.mmul(u);\n w.div(Utils.norm(w));\n t = t1;\n t1 = trainingSet.mmul(w);\n var q = transposeY.mmul(t1);\n q.div(Utils.norm(q));\n u = trainingValues.mmul(q);\n }\n\n t = t1;\n var num = transposeX.mmul(t);\n var den = t.transpose().mmul(t).get(0, 0);\n var p = num.div(den);\n var pnorm = Utils.norm(p);\n p.div(pnorm);\n t.mul(pnorm);\n w.mul(pnorm);\n\n num = u.transpose().mmul(t);\n den = t.transpose().mmul(t).get(0, 0);\n var b = num.div(den).get(0, 0);\n trainingSet.sub(t.mmul(p.transpose()));\n trainingValues.sub(t.clone().mul(b).mmul(q.transpose()));\n\n T.setColumn(k, t);\n P.setColumn(k, p);\n U.setColumn(k, u);\n Q.setColumn(k, q);\n W.setColumn(k, w);\n\n B.set(k, k, b);\n k++;\n }\n\n k--;\n T = T.subMatrix(0, T.rows - 1, 0, k);\n P = P.subMatrix(0, P.rows - 1, 0, k);\n U = U.subMatrix(0, U.rows - 1, 0, k);\n Q = Q.subMatrix(0, Q.rows - 1, 0, k);\n W = W.subMatrix(0, W.rows - 1, 0, k);\n B = B.subMatrix(0, k, 0, k);\n\n // TODO: review of R2Y\n // this.R2Y = t.transpose().mmul(t).mul(q[k][0]*q[k][0]).divS(ssqYcal)[0][0];\n //\n this.ssqYcal = sumOfSquaresY;\n this.E = trainingSet;\n this.F = trainingValues;\n this.T = T;\n this.P = P;\n this.U = U;\n this.Q = Q;\n this.W = W;\n this.B = B;\n this.PBQ = P.mmul(B).mmul(Q.transpose());\n this.R2X = t.transpose().mmul(t).mmul(p.transpose().mmul(p)).div(ssqXcal).get(0, 0);\n }\n\n /**\n * Predicts the behavior of the given dataset.\n * @param {Matrix|Array} dataset - data to be predicted.\n * @return {Matrix} - predictions of each element of the dataset.\n */\n predict(dataset) {\n var X = Matrix.checkMatrix(dataset);\n if (this.scale) {\n X = X.subRowVector(this.meanX).divRowVector(this.stdDevX);\n }\n var Y = X.mmul(this.PBQ);\n Y = Y.mulRowVector(this.stdDevY).addRowVector(this.meanY);\n return Y;\n }\n\n /**\n * Returns the explained variance on training of the PLS model\n * @return {number}\n */\n getExplainedVariance() {\n return this.R2X;\n }\n\n /**\n * Export the current model to JSON.\n * @return {object} - Current model.\n */\n toJSON() {\n return {\n name: 'PLS',\n R2X: this.R2X,\n meanX: this.meanX,\n stdDevX: this.stdDevX,\n meanY: this.meanY,\n stdDevY: this.stdDevY,\n PBQ: this.PBQ,\n tolerance: this.tolerance,\n scale: this.scale,\n };\n }\n\n /**\n * Load a PLS model from a JSON Object\n * @param {object} model\n * @return {PLS} - PLS object from the given model\n */\n static load(model) {\n if (model.name !== 'PLS') {\n throw new RangeError(`Invalid model: ${model.name}`);\n }\n return new PLS(true, model);\n }\n}\n\n/**\n * @private\n * Function that returns the index where the sum of each\n * column vector is maximum.\n * @param {Matrix} data\n * @return {number} index of the maximum\n */\nfunction maxSumColIndex(data) {\n return Matrix.rowVector(data.sum('column')).maxIndex()[0];\n}\n","import { Matrix, SingularValueDecomposition, inverse } from 'ml-matrix';\n\nimport { initializeMatrices } from './utils';\n\n/**\n * @class KOPLS\n */\nexport class KOPLS {\n /**\n * Constructor for Kernel-based Orthogonal Projections to Latent Structures (K-OPLS)\n * @param {object} options\n * @param {number} [options.predictiveComponents] - Number of predictive components to use.\n * @param {number} [options.orthogonalComponents] - Number of Y-Orthogonal components.\n * @param {Kernel} [options.kernel] - Kernel object to apply, see [ml-kernel](https://github.com/mljs/kernel).\n * @param {object} model - for load purposes.\n */\n constructor(options, model) {\n if (options === true) {\n this.trainingSet = new Matrix(model.trainingSet);\n this.YLoadingMat = new Matrix(model.YLoadingMat);\n this.SigmaPow = new Matrix(model.SigmaPow);\n this.YScoreMat = new Matrix(model.YScoreMat);\n this.predScoreMat = initializeMatrices(model.predScoreMat, false);\n this.YOrthLoadingVec = initializeMatrices(model.YOrthLoadingVec, false);\n this.YOrthEigen = model.YOrthEigen;\n this.YOrthScoreMat = initializeMatrices(model.YOrthScoreMat, false);\n this.toNorm = initializeMatrices(model.toNorm, false);\n this.TURegressionCoeff = initializeMatrices(model.TURegressionCoeff, false);\n this.kernelX = initializeMatrices(model.kernelX, true);\n this.kernel = model.kernel;\n this.orthogonalComp = model.orthogonalComp;\n this.predictiveComp = model.predictiveComp;\n } else {\n if (options.predictiveComponents === undefined) {\n throw new RangeError('no predictive components found!');\n }\n if (options.orthogonalComponents === undefined) {\n throw new RangeError('no orthogonal components found!');\n }\n if (options.kernel === undefined) {\n throw new RangeError('no kernel found!');\n }\n\n this.orthogonalComp = options.orthogonalComponents;\n this.predictiveComp = options.predictiveComponents;\n this.kernel = options.kernel;\n }\n }\n\n /**\n * Train the K-OPLS model with the given training set and labels.\n * @param {Matrix|Array} trainingSet\n * @param {Matrix|Array} trainingValues\n */\n train(trainingSet, trainingValues) {\n trainingSet = Matrix.checkMatrix(trainingSet);\n trainingValues = Matrix.checkMatrix(trainingValues);\n\n // to save and compute kernel with the prediction dataset.\n this.trainingSet = trainingSet.clone();\n\n var kernelX = this.kernel.compute(trainingSet);\n\n var Identity = Matrix.eye(kernelX.rows, kernelX.rows, 1);\n var temp = kernelX;\n kernelX = new Array(this.orthogonalComp + 1);\n for (let i = 0; i < this.orthogonalComp + 1; i++) {\n kernelX[i] = new Array(this.orthogonalComp + 1);\n }\n kernelX[0][0] = temp;\n\n var result = new SingularValueDecomposition(trainingValues.transpose().mmul(kernelX[0][0]).mmul(trainingValues), {\n computeLeftSingularVectors: true,\n computeRightSingularVectors: false\n });\n var YLoadingMat = result.leftSingularVectors;\n var Sigma = result.diagonalMatrix;\n\n YLoadingMat = YLoadingMat.subMatrix(0, YLoadingMat.rows - 1, 0, this.predictiveComp - 1);\n Sigma = Sigma.subMatrix(0, this.predictiveComp - 1, 0, this.predictiveComp - 1);\n\n var YScoreMat = trainingValues.mmul(YLoadingMat);\n\n var predScoreMat = new Array(this.orthogonalComp + 1);\n var TURegressionCoeff = new Array(this.orthogonalComp + 1);\n var YOrthScoreMat = new Array(this.orthogonalComp);\n var YOrthLoadingVec = new Array(this.orthogonalComp);\n var YOrthEigen = new Array(this.orthogonalComp);\n var YOrthScoreNorm = new Array(this.orthogonalComp);\n\n var SigmaPow = Matrix.pow(Sigma, -0.5);\n // to avoid errors, check infinity\n SigmaPow.apply(function (i, j) {\n if (this.get(i, j) === Infinity) {\n this.set(i, j, 0);\n }\n });\n\n for (var i = 0; i < this.orthogonalComp; ++i) {\n predScoreMat[i] = kernelX[0][i].transpose().mmul(YScoreMat).mmul(SigmaPow);\n\n var TpiPrime = predScoreMat[i].transpose();\n TURegressionCoeff[i] = inverse(TpiPrime.mmul(predScoreMat[i])).mmul(TpiPrime).mmul(YScoreMat);\n\n result = new SingularValueDecomposition(TpiPrime.mmul(Matrix.sub(kernelX[i][i], predScoreMat[i].mmul(TpiPrime))).mmul(predScoreMat[i]), {\n computeLeftSingularVectors: true,\n computeRightSingularVectors: false\n });\n var CoTemp = result.leftSingularVectors;\n var SoTemp = result.diagonalMatrix;\n\n YOrthLoadingVec[i] = CoTemp.subMatrix(0, CoTemp.rows - 1, 0, 0);\n YOrthEigen[i] = SoTemp.get(0, 0);\n\n YOrthScoreMat[i] = Matrix.sub(kernelX[i][i], predScoreMat[i].mmul(TpiPrime)).mmul(predScoreMat[i]).mmul(YOrthLoadingVec[i]).mul(Math.pow(YOrthEigen[i], -0.5));\n\n var toiPrime = YOrthScoreMat[i].transpose();\n YOrthScoreNorm[i] = Matrix.sqrt(toiPrime.mmul(YOrthScoreMat[i]));\n\n YOrthScoreMat[i] = YOrthScoreMat[i].divRowVector(YOrthScoreNorm[i]);\n\n var ITo = Matrix.sub(Identity, YOrthScoreMat[i].mmul(YOrthScoreMat[i].transpose()));\n\n kernelX[0][i + 1] = kernelX[0][i].mmul(ITo);\n kernelX[i + 1][i + 1] = ITo.mmul(kernelX[i][i]).mmul(ITo);\n }\n\n var lastScoreMat = predScoreMat[this.orthogonalComp] = kernelX[0][this.orthogonalComp].transpose().mmul(YScoreMat).mmul(SigmaPow);\n\n var lastTpPrime = lastScoreMat.transpose();\n TURegressionCoeff[this.orthogonalComp] = inverse(lastTpPrime.mmul(lastScoreMat)).mmul(lastTpPrime).mmul(YScoreMat);\n\n this.YLoadingMat = YLoadingMat;\n this.SigmaPow = SigmaPow;\n this.YScoreMat = YScoreMat;\n this.predScoreMat = predScoreMat;\n this.YOrthLoadingVec = YOrthLoadingVec;\n this.YOrthEigen = YOrthEigen;\n this.YOrthScoreMat = YOrthScoreMat;\n this.toNorm = YOrthScoreNorm;\n this.TURegressionCoeff = TURegressionCoeff;\n this.kernelX = kernelX;\n }\n\n /**\n * Predicts the output given the matrix to predict.\n * @param {Matrix|Array} toPredict\n * @return {{y: Matrix, predScoreMat: Array, predYOrthVectors: Array}} predictions\n */\n predict(toPredict) {\n var KTestTrain = this.kernel.compute(toPredict, this.trainingSet);\n\n var temp = KTestTrain;\n KTestTrain = new Array(this.orthogonalComp + 1);\n for (let i = 0; i < this.orthogonalComp + 1; i++) {\n KTestTrain[i] = new Array(this.orthogonalComp + 1);\n }\n KTestTrain[0][0] = temp;\n\n var YOrthScoreVector = new Array(this.orthogonalComp);\n var predScoreMat = new Array(this.orthogonalComp);\n\n var i;\n for (i = 0; i < this.orthogonalComp; ++i) {\n predScoreMat[i] = KTestTrain[i][0].mmul(this.YScoreMat).mmul(this.SigmaPow);\n\n YOrthScoreVector[i] = Matrix.sub(KTestTrain[i][i], predScoreMat[i].mmul(this.predScoreMat[i].transpose())).mmul(this.predScoreMat[i]).mmul(this.YOrthLoadingVec[i]).mul(Math.pow(this.YOrthEigen[i], -0.5));\n\n YOrthScoreVector[i] = YOrthScoreVector[i].divRowVector(this.toNorm[i]);\n\n var scoreMatPrime = this.YOrthScoreMat[i].transpose();\n KTestTrain[i + 1][0] = Matrix.sub(KTestTrain[i][0], YOrthScoreVector[i].mmul(scoreMatPrime).mmul(this.kernelX[0][i].transpose()));\n\n var p1 = Matrix.sub(KTestTrain[i][0], KTestTrain[i][i].mmul(this.YOrthScoreMat[i]).mmul(scoreMatPrime));\n var p2 = YOrthScoreVector[i].mmul(scoreMatPrime).mmul(this.kernelX[i][i]);\n var p3 = p2.mmul(this.YOrthScoreMat[i]).mmul(scoreMatPrime);\n\n KTestTrain[i + 1][i + 1] = p1.sub(p2).add(p3);\n }\n\n predScoreMat[i] = KTestTrain[i][0].mmul(this.YScoreMat).mmul(this.SigmaPow);\n var prediction = predScoreMat[i].mmul(this.TURegressionCoeff[i]).mmul(this.YLoadingMat.transpose());\n\n return {\n prediction: prediction,\n predScoreMat: predScoreMat,\n predYOrthVectors: YOrthScoreVector\n };\n }\n\n /**\n * Export the current model to JSON.\n * @return {object} - Current model.\n */\n toJSON() {\n return {\n name: 'K-OPLS',\n YLoadingMat: this.YLoadingMat,\n SigmaPow: this.SigmaPow,\n YScoreMat: this.YScoreMat,\n predScoreMat: this.predScoreMat,\n YOrthLoadingVec: this.YOrthLoadingVec,\n YOrthEigen: this.YOrthEigen,\n YOrthScoreMat: this.YOrthScoreMat,\n toNorm: this.toNorm,\n TURegressionCoeff: this.TURegressionCoeff,\n kernelX: this.kernelX,\n trainingSet: this.trainingSet,\n orthogonalComp: this.orthogonalComp,\n predictiveComp: this.predictiveComp\n };\n }\n\n /**\n * Load a K-OPLS with the given model.\n * @param {object} model\n * @param {Kernel} kernel - kernel used on the model, see [ml-kernel](https://github.com/mljs/kernel).\n * @return {KOPLS}\n */\n static load(model, kernel) {\n if (model.name !== 'K-OPLS') {\n throw new RangeError(`Invalid model: ${model.name}`);\n }\n\n if (!kernel) {\n throw new RangeError('You must provide a kernel for the model!');\n }\n\n model.kernel = kernel;\n return new KOPLS(true, model);\n }\n}\n","/**\n * Constructs a confusion matrix\n * @class ConfusionMatrix\n * @example\n * const CM = new ConfusionMatrix([[13, 2], [10, 5]], ['cat', 'dog'])\n * @param {Array>} matrix - The confusion matrix, a 2D Array. Rows represent the actual label and columns\n * the predicted label.\n * @param {Array} labels - Labels of the confusion matrix, a 1D Array\n */\nclass ConfusionMatrix {\n constructor(matrix, labels) {\n if (matrix.length !== matrix[0].length) {\n throw new Error('Confusion matrix must be square');\n }\n if (labels.length !== matrix.length) {\n throw new Error('Confusion matrix and labels should have the same length');\n }\n this.labels = labels;\n this.matrix = matrix;\n }\n\n\n /**\n * Construct confusion matrix from the predicted and actual labels (classes). Be sure to provide the arguments in\n * the correct order!\n * @param {Array} actual - The predicted labels of the classification\n * @param {Array} predicted - The actual labels of the classification. Has to be of same length as\n * predicted.\n * @param {object} [options] - Additional options\n * @param {Array} [options.labels] - The list of labels that should be used. If not provided the distinct set\n * of labels present in predicted and actual is used. Labels are compared using the strict equality operator\n * '==='\n * @return {ConfusionMatrix} - Confusion matrix\n */\n static fromLabels(actual, predicted, options = {}) {\n if (predicted.length !== actual.length) {\n throw new Error('predicted and actual must have the same length');\n }\n let distinctLabels;\n if (options.labels) {\n distinctLabels = new Set(options.labels);\n } else {\n distinctLabels = new Set([...actual, ...predicted]);\n }\n distinctLabels = Array.from(distinctLabels);\n if (options.sort) {\n distinctLabels.sort(options.sort);\n }\n\n // Create confusion matrix and fill with 0's\n const matrix = Array.from({length: distinctLabels.length});\n for (let i = 0; i < matrix.length; i++) {\n matrix[i] = new Array(matrix.length);\n matrix[i].fill(0);\n }\n\n for (let i = 0; i < predicted.length; i++) {\n const actualIdx = distinctLabels.indexOf(actual[i]);\n const predictedIdx = distinctLabels.indexOf(predicted[i]);\n if (actualIdx >= 0 && predictedIdx >= 0) {\n matrix[actualIdx][predictedIdx]++;\n }\n }\n\n return new ConfusionMatrix(matrix, distinctLabels);\n }\n\n /**\n * Get the confusion matrix\n * @return {Array >}\n */\n getMatrix() {\n return this.matrix;\n }\n\n getLabels() {\n return this.labels;\n }\n\n /**\n * Get the total number of samples\n * @return {number}\n */\n getTotalCount() {\n let predicted = 0;\n for (var i = 0; i < this.matrix.length; i++) {\n for (var j = 0; j < this.matrix.length; j++) {\n predicted += this.matrix[i][j];\n }\n }\n return predicted;\n }\n\n /**\n * Get the total number of true predictions\n * @return {number}\n */\n getTrueCount() {\n var count = 0;\n for (var i = 0; i < this.matrix.length; i++) {\n count += this.matrix[i][i];\n }\n return count;\n }\n\n /**\n * Get the total number of false predictions.\n * @return {number}\n */\n getFalseCount() {\n return this.getTotalCount() - this.getTrueCount();\n }\n\n /**\n * Get the number of true positive predictions.\n * @param {any} label - The label that should be considered \"positive\"\n * @return {number}\n */\n getTruePositiveCount(label) {\n const index = this.getIndex(label);\n return this.matrix[index][index];\n }\n\n /**\n * Get the number of true negative predictions\n * @param {any} label - The label that should be considered \"positive\"\n * @return {number}\n */\n getTrueNegativeCount(label) {\n const index = this.getIndex(label);\n var count = 0;\n for (var i = 0; i < this.matrix.length; i++) {\n for (var j = 0; j < this.matrix.length; j++) {\n if (i !== index && j !== index) {\n count += this.matrix[i][j];\n }\n }\n }\n return count;\n }\n\n /**\n * Get the number of false positive predictions.\n * @param {any} label - The label that should be considered \"positive\"\n * @return {number}\n */\n getFalsePositiveCount(label) {\n const index = this.getIndex(label);\n var count = 0;\n for (var i = 0; i < this.matrix.length; i++) {\n if (i !== index) {\n count += this.matrix[i][index];\n }\n }\n return count;\n }\n\n /**\n * Get the number of false negative predictions.\n * @param {any} label - The label that should be considered \"positive\"\n * @return {number}\n */\n getFalseNegativeCount(label) {\n const index = this.getIndex(label);\n var count = 0;\n for (var i = 0; i < this.matrix.length; i++) {\n if (i !== index) {\n count += this.matrix[index][i];\n }\n }\n return count;\n }\n\n /**\n * Get the number of real positive samples.\n * @param {any} label - The label that should be considered \"positive\"\n * @return {number}\n */\n getPositiveCount(label) {\n return this.getTruePositiveCount(label) + this.getFalseNegativeCount(label);\n }\n\n /**\n * Get the number of real negative samples.\n * @param {any} label - The label that should be considered \"positive\"\n * @return {number}\n */\n getNegativeCount(label) {\n return this.getTrueNegativeCount(label) + this.getFalsePositiveCount(label);\n }\n\n /**\n * Get the index in the confusion matrix that corresponds to the given label\n * @param {any} label - The label to search for\n * @throws if the label is not found\n * @return {number}\n */\n getIndex(label) {\n const index = this.labels.indexOf(label);\n if (index === -1) throw new Error('The label does not exist');\n return index;\n }\n\n /**\n * Get the true positive rate a.k.a. sensitivity. Computes the ratio between the number of true positive predictions and the total number of positive samples.\n * {@link https://en.wikipedia.org/wiki/Sensitivity_and_specificity}\n * @param {any} label - The label that should be considered \"positive\"\n * @return {number} - The true positive rate [0-1]\n */\n getTruePositiveRate(label) {\n return this.getTruePositiveCount(label) / this.getPositiveCount(label);\n }\n\n /**\n * Get the true negative rate a.k.a. specificity. Computes the ration between the number of true negative predictions and the total number of negative samples.\n * {@link https://en.wikipedia.org/wiki/Sensitivity_and_specificity}\n * @param {any} label - The label that should be considered \"positive\"\n * @return {number}\n */\n getTrueNegativeRate(label) {\n return this.getTrueNegativeCount(label) / this.getNegativeCount(label);\n }\n\n /**\n * Get the positive predictive value a.k.a. precision. Computes TP / (TP + FP)\n * {@link https://en.wikipedia.org/wiki/Positive_and_negative_predictive_values}\n * @param {any} label - The label that should be considered \"positive\"\n * @return {number}\n */\n getPositivePredictiveValue(label) {\n const TP = this.getTruePositiveCount(label);\n return TP / (TP + this.getFalsePositiveCount(label));\n }\n\n /**\n * Negative predictive value\n * {@link https://en.wikipedia.org/wiki/Positive_and_negative_predictive_values}\n * @param {any} label - The label that should be considered \"positive\"\n * @return {number}\n */\n getNegativePredictiveValue(label) {\n const TN = this.getTrueNegativeCount(label);\n return TN / (TN + this.getFalseNegativeCount(label));\n }\n\n /**\n * False negative rate a.k.a. miss rate.\n * {@link https://en.wikipedia.org/wiki/Type_I_and_type_II_errors#False_positive_and_false_negative_rates}\n * @param {any} label - The label that should be considered \"positive\"\n * @return {number}\n */\n getFalseNegativeRate(label) {\n return 1 - this.getTruePositiveRate(label);\n }\n\n /**\n * False positive rate a.k.a. fall-out rate.\n * {@link https://en.wikipedia.org/wiki/Type_I_and_type_II_errors#False_positive_and_false_negative_rates}\n * @param {any} label - The label that should be considered \"positive\"\n * @return {number}\n */\n getFalsePositiveRate(label) {\n return 1 - this.getTrueNegativeRate(label);\n }\n\n /**\n * False discovery rate (FDR)\n * {@link https://en.wikipedia.org/wiki/False_discovery_rate}\n * @param {any} label - The label that should be considered \"positive\"\n * @return {number}\n */\n getFalseDiscoveryRate(label) {\n const FP = this.getFalsePositiveCount(label);\n return FP / (FP + this.getTruePositiveCount(label));\n }\n\n /**\n * False omission rate (FOR)\n * @param {any} label - The label that should be considered \"positive\"\n * @return {number}\n */\n getFalseOmissionRate(label) {\n const FN = this.getFalseNegativeCount(label);\n return FN / (FN + this.getTruePositiveCount(label));\n }\n\n /**\n * F1 score\n * {@link https://en.wikipedia.org/wiki/F1_score}\n * @param {any} label - The label that should be considered \"positive\"\n * @return {number}\n */\n getF1Score(label) {\n const TP = this.getTruePositiveCount(label);\n return 2 * TP / (2 * TP + this.getFalsePositiveCount(label) + this.getFalseNegativeCount(label));\n }\n\n /**\n * Matthews correlation coefficient (MCC)\n * {@link https://en.wikipedia.org/wiki/Matthews_correlation_coefficient}\n * @param {any} label - The label that should be considered \"positive\"\n * @return {number}\n */\n getMatthewsCorrelationCoefficient(label) {\n const TP = this.getTruePositiveCount(label);\n const TN = this.getTrueNegativeCount(label);\n const FP = this.getFalsePositiveCount(label);\n const FN = this.getFalseNegativeCount(label);\n return (TP * TN - FP * FN) / Math.sqrt((TP + FP) * (TP + FN) * (TN + FP) * (TN + FN));\n }\n\n /**\n * Informedness\n * {@link https://en.wikipedia.org/wiki/Youden%27s_J_statistic}\n * @param {any} label - The label that should be considered \"positive\"\n * @return {number}\n */\n getInformedness(label) {\n return this.getTruePositiveRate(label) + this.getTrueNegativeRate(label) - 1;\n }\n\n /**\n * Markedness\n * @param {any} label - The label that should be considered \"positive\"\n * @return {number}\n */\n getMarkedness(label) {\n return this.getPositivePredictiveValue(label) + this.getNegativePredictiveValue(label) - 1;\n }\n\n /**\n * Get the confusion table.\n * @param {any} label - The label that should be considered \"positive\"\n * @return {Array >} - The 2x2 confusion table. [[TP, FN], [FP, TN]]\n */\n getConfusionTable(label) {\n return [\n [\n this.getTruePositiveCount(label),\n this.getFalseNegativeCount(label)\n ],\n [\n this.getFalsePositiveCount(label),\n this.getTrueNegativeCount(label)\n ]\n ];\n }\n\n /**\n * Get total accuracy.\n * @return {number} - The ratio between the number of true predictions and total number of classifications ([0-1])\n */\n getAccuracy() {\n let correct = 0;\n let incorrect = 0;\n for (var i = 0; i < this.matrix.length; i++) {\n for (var j = 0; j < this.matrix.length; j++) {\n if (i === j) correct += this.matrix[i][j];\n else incorrect += this.matrix[i][j];\n }\n }\n return correct / (correct + incorrect);\n }\n\n\n /**\n * Returns the element in the confusion matrix that corresponds to the given actual and predicted labels.\n * @param {any} actual - The true label\n * @param {any} predicted - The predicted label\n * @return {number} - The element in the confusion matrix\n */\n getCount(actual, predicted) {\n const actualIndex = this.getIndex(actual);\n const predictedIndex = this.getIndex(predicted);\n return this.matrix[actualIndex][predictedIndex];\n }\n\n /**\n * Compute the general prediction accuracy\n * @deprecated Use getAccuracy\n * @return {number} - The prediction accuracy ([0-1]\n */\n get accuracy() {\n return this.getAccuracy();\n }\n\n /**\n * Compute the number of predicted observations\n * @deprecated Use getTotalCount\n * @return {number}\n */\n get total() {\n return this.getTotalCount();\n }\n}\n\nmodule.exports = ConfusionMatrix;\n","'use strict';\nconst defaultOptions = {\n mode: 'index'\n};\n\nmodule.exports = function *(M, N, options) {\n options = Object.assign({}, defaultOptions, options);\n var a = new Array(N);\n var c = new Array(M);\n var b = new Array(N);\n var p = new Array(N + 2);\n var x, y, z;\n\n // init a and b\n for (var i = 0; i < N; i++) {\n a[i] = i;\n if (i < N - M) b[i] = 0;\n else b[i] = 1;\n }\n\n // init c\n for (i = 0; i < M; i++) {\n c[i] = N - M + i;\n }\n\n // init p\n for (i = 0; i < p.length; i++) {\n if (i === 0) p[i] = N + 1;\n else if (i <= N - M) p[i] = 0;\n else if (i <= N) p[i] = i - N + M;\n else p[i] = -2;\n }\n\n function twiddle() {\n var i, j, k;\n j = 1;\n while (p[j] <= 0) {\n j++;\n }\n if (p[j - 1] === 0) {\n for (i = j - 1; i !== 1; i--) {\n p[i] = -1;\n }\n p[j] = 0;\n x = z = 0;\n p[1] = 1;\n y = j - 1;\n } else {\n if (j > 1) {\n p[j - 1] = 0;\n }\n do {\n j++;\n }\n while (p[j] > 0);\n k = j - 1;\n i = j;\n while (p[i] === 0) {\n p[i++] = -1;\n }\n if (p[i] === -1) {\n p[i] = p[k];\n z = p[k] - 1;\n x = i - 1;\n y = k - 1;\n p[k] = -1;\n } else {\n if (i === p[0]) {\n return 0;\n } else {\n p[j] = p[i];\n z = p[i] - 1;\n p[i] = 0;\n x = j - 1;\n y = i - 1;\n }\n }\n }\n return 1;\n }\n\n if (options.mode === 'index') {\n yield c.slice();\n while (twiddle()) {\n c[z] = a[x];\n yield c.slice();\n }\n } else if (options.mode === 'mask') {\n yield b.slice();\n while (twiddle()) {\n b[x] = 1;\n b[y] = 0;\n yield b.slice();\n }\n } else {\n throw new Error('Invalid mode');\n }\n};\n","'use strict';\n\nconst ConfusionMatrix = require('ml-confusion-matrix');\n\nconst CV = {};\nconst combinations = require('ml-combinations');\n\n/**\n * Performs a leave-one-out cross-validation (LOO-CV) of the given samples. In LOO-CV, 1 observation is used as the\n * validation set while the rest is used as the training set. This is repeated once for each observation. LOO-CV is a\n * special case of LPO-CV. @see leavePout\n * @param {function} Classifier - The classifier's constructor to use for the cross validation. Expect ml-classifier\n * api.\n * @param {Array} features - The features for all samples of the data-set\n * @param {Array} labels - The classification class of all samples of the data-set\n * @param {object} classifierOptions - The classifier options with which the classifier should be instantiated.\n * @return {ConfusionMatrix} - The cross-validation confusion matrix\n */\nCV.leaveOneOut = function (Classifier, features, labels, classifierOptions) {\n if (typeof labels === 'function') {\n var callback = labels;\n labels = features;\n features = Classifier;\n return CV.leavePOut(features, labels, 1, callback);\n }\n return CV.leavePOut(Classifier, features, labels, classifierOptions, 1);\n};\n\n\n/**\n * Performs a leave-p-out cross-validation (LPO-CV) of the given samples. In LPO-CV, p observations are used as the\n * validation set while the rest is used as the training set. This is repeated as many times as there are possible\n * ways to combine p observations from the set (unordered without replacement). Be aware that for relatively small\n * data-set size this can require a very large number of training and testing to do!\n * @param {function} Classifier - The classifier's constructor to use for the cross validation. Expect ml-classifier\n * api.\n * @param {Array} features - The features for all samples of the data-set\n * @param {Array} labels - The classification class of all samples of the data-set\n * @param {object} classifierOptions - The classifier options with which the classifier should be instantiated.\n * @param {number} p - The size of the validation sub-samples' set\n * @return {ConfusionMatrix} - The cross-validation confusion matrix\n */\nCV.leavePOut = function (Classifier, features, labels, classifierOptions, p) {\n if (typeof classifierOptions === 'function') {\n var callback = classifierOptions;\n p = labels;\n labels = features;\n features = Classifier;\n }\n check(features, labels);\n const distinct = getDistinct(labels);\n const confusionMatrix = initMatrix(distinct.length, distinct.length);\n\n var N = features.length;\n var gen = combinations(p, N);\n var allIdx = new Array(N);\n for (let i = 0; i < N; i++) {\n allIdx[i] = i;\n }\n for (const testIdx of gen) {\n var trainIdx = allIdx.slice();\n\n for (let i = testIdx.length - 1; i >= 0; i--) {\n trainIdx.splice(testIdx[i], 1);\n }\n\n if (callback) {\n validateWithCallback(features, labels, testIdx, trainIdx, confusionMatrix, distinct, callback);\n } else {\n validate(Classifier, features, labels, classifierOptions, testIdx, trainIdx, confusionMatrix, distinct);\n }\n\n }\n\n return new ConfusionMatrix(confusionMatrix, distinct);\n};\n\n/**\n * Performs k-fold cross-validation (KF-CV). KF-CV separates the data-set into k random equally sized partitions, and\n * uses each as a validation set, with all other partitions used in the training set. Observations left over from if k\n * does not divide the number of observations are left out of the cross-validation process.\n * @param {function} Classifier - The classifier's to use for the cross validation. Expect ml-classifier api.\n * @param {Array} features - The features for all samples of the data-set\n * @param {Array} labels - The classification class of all samples of the data-set\n * @param {object} classifierOptions - The classifier options with which the classifier should be instantiated.\n * @param {number} k - The number of partitions to create\n * @return {ConfusionMatrix} - The cross-validation confusion matrix\n */\nCV.kFold = function (Classifier, features, labels, classifierOptions, k) {\n if (typeof classifierOptions === 'function') {\n var callback = classifierOptions;\n k = labels;\n labels = features;\n features = Classifier;\n }\n check(features, labels);\n const distinct = getDistinct(labels);\n const confusionMatrix = initMatrix(distinct.length, distinct.length);\n var N = features.length;\n var allIdx = new Array(N);\n for (var i = 0; i < N; i++) {\n allIdx[i] = i;\n }\n\n var l = Math.floor(N / k);\n // create random k-folds\n var current = [];\n var folds = [];\n while (allIdx.length) {\n var randi = Math.floor(Math.random() * allIdx.length);\n current.push(allIdx[randi]);\n allIdx.splice(randi, 1);\n if (current.length === l) {\n folds.push(current);\n current = [];\n }\n }\n if (current.length) folds.push(current);\n folds = folds.slice(0, k);\n\n\n for (i = 0; i < folds.length; i++) {\n var testIdx = folds[i];\n var trainIdx = [];\n for (var j = 0; j < folds.length; j++) {\n if (j !== i) trainIdx = trainIdx.concat(folds[j]);\n }\n\n if (callback) {\n validateWithCallback(features, labels, testIdx, trainIdx, confusionMatrix, distinct, callback);\n } else {\n validate(Classifier, features, labels, classifierOptions, testIdx, trainIdx, confusionMatrix, distinct);\n }\n }\n\n return new ConfusionMatrix(confusionMatrix, distinct);\n};\n\nfunction check(features, labels) {\n if (features.length !== labels.length) {\n throw new Error('features and labels should have the same length');\n }\n}\n\nfunction initMatrix(rows, columns) {\n return new Array(rows).fill(0).map(() => new Array(columns).fill(0));\n}\n\nfunction getDistinct(arr) {\n var s = new Set();\n for (let i = 0; i < arr.length; i++) {\n s.add(arr[i]);\n }\n return Array.from(s);\n}\n\nfunction validate(Classifier, features, labels, classifierOptions, testIdx, trainIdx, confusionMatrix, distinct) {\n const {testFeatures, trainFeatures, testLabels, trainLabels} = getTrainTest(features, labels, testIdx, trainIdx);\n\n var classifier;\n if (Classifier.prototype.train) {\n classifier = new Classifier(classifierOptions);\n classifier.train(trainFeatures, trainLabels);\n } else {\n classifier = new Classifier(trainFeatures, trainLabels, classifierOptions);\n }\n\n var predictedLabels = classifier.predict(testFeatures);\n updateConfusionMatrix(confusionMatrix, testLabels, predictedLabels, distinct);\n}\n\nfunction validateWithCallback(features, labels, testIdx, trainIdx, confusionMatrix, distinct, callback) {\n const {testFeatures, trainFeatures, testLabels, trainLabels} = getTrainTest(features, labels, testIdx, trainIdx);\n const predictedLabels = callback(trainFeatures, trainLabels, testFeatures);\n updateConfusionMatrix(confusionMatrix, testLabels, predictedLabels, distinct);\n}\n\nfunction updateConfusionMatrix(confusionMatrix, testLabels, predictedLabels, distinct) {\n\n for (var i = 0; i < predictedLabels.length; i++) {\n const actualIdx = distinct.indexOf(testLabels[i]);\n const predictedIdx = distinct.indexOf(predictedLabels[i]);\n if (actualIdx < 0 || predictedIdx < 0) {\n // eslint-disable-next-line no-console\n console.warn(`ignore unknown predicted label ${predictedLabels[i]}`);\n }\n confusionMatrix[actualIdx][predictedIdx]++;\n }\n}\n\n\nfunction getTrainTest(features, labels, testIdx, trainIdx) {\n return {\n testFeatures: testIdx.map(function (index) {\n return features[index];\n }),\n trainFeatures: trainIdx.map(function (index) {\n return features[index];\n }),\n testLabels: testIdx.map(function (index) {\n return labels[index];\n }),\n trainLabels: trainIdx.map(function (index) {\n return labels[index];\n })\n };\n}\n\nmodule.exports = CV;\n","'use strict';\n\nvar mlMatrix = require('ml-matrix');\n\nfunction logistic(val) {\n return 1 / (1 + Math.exp(-val));\n}\n\nfunction expELU(val, param) {\n return val < 0 ? param * (Math.exp(val) - 1) : val;\n}\n\nfunction softExponential(val, param) {\n if (param < 0) {\n return -Math.log(1 - param * (val + param)) / param;\n }\n if (param > 0) {\n return ((Math.exp(param * val) - 1) / param) + param;\n }\n return val;\n}\n\nfunction softExponentialPrime(val, param) {\n if (param < 0) {\n return 1 / (1 - param * (param + val));\n } else {\n return Math.exp(param * val);\n }\n}\n\nconst ACTIVATION_FUNCTIONS = {\n tanh: {\n activation: Math.tanh,\n derivate: (val) => 1 - (val * val)\n },\n identity: {\n activation: (val) => val,\n derivate: () => 1\n },\n logistic: {\n activation: logistic,\n derivate: (val) => logistic(val) * (1 - logistic(val))\n },\n arctan: {\n activation: Math.atan,\n derivate: (val) => 1 / (val * val + 1)\n },\n softsign: {\n activation: (val) => val / (1 + Math.abs(val)),\n derivate: (val) => 1 / ((1 + Math.abs(val)) * (1 + Math.abs(val)))\n },\n relu: {\n activation: (val) => (val < 0 ? 0 : val),\n derivate: (val) => (val < 0 ? 0 : 1)\n },\n softplus: {\n activation: (val) => Math.log(1 + Math.exp(val)),\n derivate: (val) => 1 / (1 + Math.exp(-val))\n },\n bent: {\n activation: (val) => ((Math.sqrt(val * val + 1) - 1) / 2) + val,\n derivate: (val) => (val / (2 * Math.sqrt(val * val + 1))) + 1\n },\n sinusoid: {\n activation: Math.sin,\n derivate: Math.cos\n },\n sinc: {\n activation: (val) => (val === 0 ? 1 : Math.sin(val) / val),\n derivate: (val) => (val === 0 ? 0 : (Math.cos(val) / val) - (Math.sin(val) / (val * val)))\n },\n gaussian: {\n activation: (val) => Math.exp(-(val * val)),\n derivate: (val) => -2 * val * Math.exp(-(val * val))\n },\n 'parametric-relu': {\n activation: (val, param) => (val < 0 ? param * val : val),\n derivate: (val, param) => (val < 0 ? param : 1)\n },\n 'exponential-elu': {\n activation: expELU,\n derivate: (val, param) => (val < 0 ? expELU(val, param) + param : 1)\n },\n 'soft-exponential': {\n activation: softExponential,\n derivate: softExponentialPrime\n }\n};\n\nclass Layer {\n /**\n * @private\n * Create a new layer with the given options\n * @param {object} options\n * @param {number} [options.inputSize] - Number of conections that enter the neurons.\n * @param {number} [options.outputSize] - Number of conections that leave the neurons.\n * @param {number} [options.regularization] - Regularization parameter.\n * @param {number} [options.epsilon] - Learning rate parameter.\n * @param {string} [options.activation] - Activation function parameter from the FeedForwardNeuralNetwork class.\n * @param {number} [options.activationParam] - Activation parameter if needed.\n */\n constructor(options) {\n this.inputSize = options.inputSize;\n this.outputSize = options.outputSize;\n this.regularization = options.regularization;\n this.epsilon = options.epsilon;\n this.activation = options.activation;\n this.activationParam = options.activationParam;\n\n var selectedFunction = ACTIVATION_FUNCTIONS[options.activation];\n var params = selectedFunction.activation.length;\n\n var actFunction = params > 1 ? (val) => selectedFunction.activation(val, options.activationParam) : selectedFunction.activation;\n var derFunction = params > 1 ? (val) => selectedFunction.derivate(val, options.activationParam) : selectedFunction.derivate;\n\n this.activationFunction = function (i, j) {\n this.set(i, j, actFunction(this.get(i, j)));\n };\n this.derivate = function (i, j) {\n this.set(i, j, derFunction(this.get(i, j)));\n };\n\n if (options.model) {\n // load model\n this.W = mlMatrix.Matrix.checkMatrix(options.W);\n this.b = mlMatrix.Matrix.checkMatrix(options.b);\n } else {\n // default constructor\n this.W = mlMatrix.Matrix.rand(this.inputSize, this.outputSize);\n this.b = mlMatrix.Matrix.zeros(1, this.outputSize);\n\n this.W.apply(function (i, j) {\n this.set(i, j, this.get(i, j) / Math.sqrt(options.inputSize));\n });\n }\n }\n\n /**\n * @private\n * propagate the given input through the current layer.\n * @param {Matrix} X - input.\n * @return {Matrix} output at the current layer.\n */\n forward(X) {\n var z = X.mmul(this.W).addRowVector(this.b);\n z.apply(this.activationFunction);\n this.a = z.clone();\n return z;\n }\n\n /**\n * @private\n * apply backpropagation algorithm at the current layer\n * @param {Matrix} delta - delta values estimated at the following layer.\n * @param {Matrix} a - 'a' values from the following layer.\n * @return {Matrix} the new delta values for the next layer.\n */\n backpropagation(delta, a) {\n this.dW = a.transpose().mmul(delta);\n this.db = mlMatrix.Matrix.rowVector(delta.sum('column'));\n\n var aCopy = a.clone();\n return delta.mmul(this.W.transpose()).mul(aCopy.apply(this.derivate));\n }\n\n /**\n * @private\n * Function that updates the weights at the current layer with the derivatives.\n */\n update() {\n this.dW.add(this.W.clone().mul(this.regularization));\n this.W.add(this.dW.mul(-this.epsilon));\n this.b.add(this.db.mul(-this.epsilon));\n }\n\n /**\n * @private\n * Export the current layer to JSON.\n * @return {object} model\n */\n toJSON() {\n return {\n model: 'Layer',\n inputSize: this.inputSize,\n outputSize: this.outputSize,\n regularization: this.regularization,\n epsilon: this.epsilon,\n activation: this.activation,\n W: this.W,\n b: this.b\n };\n }\n\n /**\n * @private\n * Creates a new Layer with the given model.\n * @param {object} model\n * @return {Layer}\n */\n static load(model) {\n if (model.model !== 'Layer') {\n throw new RangeError('the current model is not a Layer model');\n }\n return new Layer(model);\n }\n}\n\nclass OutputLayer extends Layer {\n constructor(options) {\n super(options);\n\n this.activationFunction = function (i, j) {\n this.set(i, j, Math.exp(this.get(i, j)));\n };\n }\n\n static load(model) {\n if (model.model !== 'Layer') {\n throw new RangeError('the current model is not a Layer model');\n }\n\n return new OutputLayer(model);\n }\n}\n\nclass FeedForwardNeuralNetworks {\n /**\n * Create a new Feedforward neural network model.\n * @class FeedForwardNeuralNetworks\n * @param {object} [options]\n * @param {Array} [options.hiddenLayers=[10]] - Array that contains the sizes of the hidden layers.\n * @param {number} [options.iterations=50] - Number of iterations at the training step.\n * @param {number} [options.learningRate=0.01] - Learning rate of the neural net (also known as epsilon).\n * @param {number} [options.regularization=0.01] - Regularization parameter af the neural net.\n * @param {string} [options.activation='tanh'] - activation function to be used. (options: 'tanh'(default),\n * 'identity', 'logistic', 'arctan', 'softsign', 'relu', 'softplus', 'bent', 'sinusoid', 'sinc', 'gaussian').\n * (single-parametric options: 'parametric-relu', 'exponential-relu', 'soft-exponential').\n * @param {number} [options.activationParam=1] - if the selected activation function needs a parameter.\n */\n constructor(options) {\n options = options || {};\n if (options.model) {\n // load network\n this.hiddenLayers = options.hiddenLayers;\n this.iterations = options.iterations;\n this.learningRate = options.learningRate;\n this.regularization = options.regularization;\n this.dicts = options.dicts;\n this.activation = options.activation;\n this.activationParam = options.activationParam;\n this.model = new Array(options.layers.length);\n\n for (var i = 0; i < this.model.length - 1; ++i) {\n this.model[i] = Layer.load(options.layers[i]);\n }\n this.model[this.model.length - 1] = OutputLayer.load(options.layers[this.model.length - 1]);\n } else {\n // default constructor\n this.hiddenLayers = options.hiddenLayers || [10];\n this.iterations = options.iterations || 50;\n\n this.learningRate = options.learningRate || 0.01;\n this.regularization = options.regularization || 0.01;\n\n this.activation = options.activation || 'tanh';\n this.activationParam = options.activationParam || 1;\n if (!(this.activation in Object.keys(ACTIVATION_FUNCTIONS))) {\n this.activation = 'tanh';\n }\n }\n }\n\n /**\n * @private\n * Function that build and initialize the neural net.\n * @param {number} inputSize - total of features to fit.\n * @param {number} outputSize - total of labels of the prediction set.\n */\n buildNetwork(inputSize, outputSize) {\n var size = 2 + (this.hiddenLayers.length - 1);\n this.model = new Array(size);\n\n // input layer\n this.model[0] = new Layer({\n inputSize: inputSize,\n outputSize: this.hiddenLayers[0],\n activation: this.activation,\n activationParam: this.activationParam,\n regularization: this.regularization,\n epsilon: this.learningRate\n });\n\n // hidden layers\n for (var i = 1; i < this.hiddenLayers.length; ++i) {\n this.model[i] = new Layer({\n inputSize: this.hiddenLayers[i - 1],\n outputSize: this.hiddenLayers[i],\n activation: this.activation,\n activationParam: this.activationParam,\n regularization: this.regularization,\n epsilon: this.learningRate\n });\n }\n\n // output layer\n this.model[size - 1] = new OutputLayer({\n inputSize: this.hiddenLayers[this.hiddenLayers.length - 1],\n outputSize: outputSize,\n activation: this.activation,\n activationParam: this.activationParam,\n regularization: this.regularization,\n epsilon: this.learningRate\n });\n }\n\n /**\n * Train the neural net with the given features and labels.\n * @param {Matrix|Array} features\n * @param {Matrix|Array} labels\n */\n train(features, labels) {\n features = mlMatrix.Matrix.checkMatrix(features);\n this.dicts = dictOutputs(labels);\n\n var inputSize = features.columns;\n var outputSize = Object.keys(this.dicts.inputs).length;\n\n if (!this.model) {\n this.buildNetwork(inputSize, outputSize);\n }\n\n for (var i = 0; i < this.iterations; ++i) {\n var probabilities = this.propagate(features);\n this.backpropagation(features, labels, probabilities);\n }\n }\n\n /**\n * @private\n * Propagate the input(training set) and retrives the probabilities of each class.\n * @param {Matrix} X\n * @return {Matrix} probabilities of each class.\n */\n propagate(X) {\n var input = X;\n for (var i = 0; i < this.model.length; ++i) {\n input = this.model[i].forward(input);\n }\n\n // get probabilities\n return input.divColumnVector(input.sum('row'));\n }\n\n /**\n * @private\n * Function that applies the backpropagation algorithm on each layer of the network\n * in order to fit the features and labels.\n * @param {Matrix} features\n * @param {Array} labels\n * @param {Matrix} probabilities - probabilities of each class of the feature set.\n */\n backpropagation(features, labels, probabilities) {\n for (var i = 0; i < probabilities.rows; ++i) {\n probabilities.set(i, this.dicts.inputs[labels[i]], probabilities.get(i, this.dicts.inputs[labels[i]]) - 1);\n }\n\n // remember, the last delta doesn't matter\n var delta = probabilities;\n for (i = this.model.length - 1; i >= 0; --i) {\n var a = i > 0 ? this.model[i - 1].a : features;\n delta = this.model[i].backpropagation(delta, a);\n }\n\n for (i = 0; i < this.model.length; ++i) {\n this.model[i].update();\n }\n }\n\n /**\n * Predict the output given the feature set.\n * @param {Array|Matrix} features\n * @return {Array}\n */\n predict(features) {\n features = mlMatrix.Matrix.checkMatrix(features);\n var outputs = new Array(features.rows);\n var probabilities = this.propagate(features);\n for (var i = 0; i < features.rows; ++i) {\n outputs[i] = this.dicts.outputs[probabilities.maxRowIndex(i)[1]];\n }\n\n return outputs;\n }\n\n /**\n * Export the current model to JSON.\n * @return {object} model\n */\n toJSON() {\n var model = {\n model: 'FNN',\n hiddenLayers: this.hiddenLayers,\n iterations: this.iterations,\n learningRate: this.learningRate,\n regularization: this.regularization,\n activation: this.activation,\n activationParam: this.activationParam,\n dicts: this.dicts,\n layers: new Array(this.model.length)\n };\n\n for (var i = 0; i < this.model.length; ++i) {\n model.layers[i] = this.model[i].toJSON();\n }\n\n return model;\n }\n\n /**\n * Load a Feedforward Neural Network with the current model.\n * @param {object} model\n * @return {FeedForwardNeuralNetworks}\n */\n static load(model) {\n if (model.model !== 'FNN') {\n throw new RangeError('the current model is not a feed forward network');\n }\n\n return new FeedForwardNeuralNetworks(model);\n }\n}\n\n/**\n * @private\n * Method that given an array of labels(predictions), returns two dictionaries, one to transform from labels to\n * numbers and other in the reverse way\n * @param {Array} array\n * @return {object}\n */\nfunction dictOutputs(array) {\n var inputs = {};\n var outputs = {};\n var index = 0;\n for (var i = 0; i < array.length; i += 1) {\n if (inputs[array[i]] === undefined) {\n inputs[array[i]] = index;\n outputs[index] = array[i];\n index++;\n }\n }\n\n return {\n inputs: inputs,\n outputs: outputs\n };\n}\n\nmodule.exports = FeedForwardNeuralNetworks;\n","function NodeSquare(x, y, weights, som) {\n this.x = x;\n this.y = y;\n this.weights = weights;\n this.som = som;\n this.neighbors = {};\n}\n\nNodeSquare.prototype.adjustWeights = function adjustWeights(target, learningRate, influence) {\n for (var i = 0, ii = this.weights.length; i < ii; i++) {\n this.weights[i] += learningRate * influence * (target[i] - this.weights[i]);\n }\n};\n\nNodeSquare.prototype.getDistance = function getDistance(otherNode) {\n return Math.max(Math.abs(this.x - otherNode.x), Math.abs(this.y - otherNode.y));\n};\n\nNodeSquare.prototype.getDistanceTorus = function getDistanceTorus(otherNode) {\n var distX = Math.abs(this.x - otherNode.x),\n distY = Math.abs(this.y - otherNode.y);\n return Math.max(Math.min(distX, this.som.gridDim.x - distX), Math.min(distY, this.som.gridDim.y - distY));\n};\n\nNodeSquare.prototype.getNeighbors = function getNeighbors(xy) {\n if (!this.neighbors[xy]) {\n this.neighbors[xy] = new Array(2);\n\n // left or bottom neighbor\n var v;\n if (this[xy] > 0) {\n v = this[xy] - 1;\n } else if (this.som.torus) {\n v = this.som.gridDim[xy] - 1\n }\n if (typeof v !== 'undefined') {\n var x, y;\n if (xy === 'x') {\n x = v;\n y = this.y;\n } else {\n x = this.x;\n y = v;\n }\n this.neighbors[xy][0] = this.som.nodes[x][y];\n }\n\n // top or right neighbor\n var w;\n if (this[xy] < (this.som.gridDim[xy] - 1)) {\n w = this[xy] + 1;\n } else if (this.som.torus) {\n w = 0;\n }\n if (typeof w !== 'undefined') {\n if (xy === 'x') {\n x = w;\n y = this.y;\n } else {\n x = this.x;\n y = w;\n }\n this.neighbors[xy][1] = this.som.nodes[x][y];\n }\n }\n return this.neighbors[xy];\n};\n\nNodeSquare.prototype.getPos = function getPos(xy, element) {\n var neighbors = this.getNeighbors(xy),\n distance = this.som.distance,\n bestNeighbor,\n direction;\n if(neighbors[0]) {\n if (neighbors[1]) {\n var dist1 = distance(element, neighbors[0].weights),\n dist2 = distance(element, neighbors[1].weights);\n if(dist1 < dist2) {\n bestNeighbor = neighbors[0];\n direction = -1;\n } else {\n bestNeighbor = neighbors[1];\n direction = 1;\n }\n } else {\n bestNeighbor = neighbors[0];\n direction = -1;\n }\n } else {\n bestNeighbor = neighbors[1];\n direction = 1;\n }\n var simA = 1 - distance(element, this.weights),\n simB = 1 - distance(element, bestNeighbor.weights);\n var factor = ((simA - simB) / (2 - simA - simB));\n return 0.5 + 0.5 * factor * direction;\n};\n\nNodeSquare.prototype.getPosition = function getPosition(element) {\n return [\n this.getPos('x', element),\n this.getPos('y', element)\n ];\n};\n\nmodule.exports = NodeSquare;","var NodeSquare = require('./node-square');\n\nfunction NodeHexagonal(x, y, weights, som) {\n\n NodeSquare.call(this, x, y, weights, som);\n\n this.hX = x - Math.floor(y / 2);\n this.z = 0 - this.hX - y;\n\n}\n\nNodeHexagonal.prototype = new NodeSquare;\nNodeHexagonal.prototype.constructor = NodeHexagonal;\n\nNodeHexagonal.prototype.getDistance = function getDistanceHexagonal(otherNode) {\n return Math.max(Math.abs(this.hX - otherNode.hX), Math.abs(this.y - otherNode.y), Math.abs(this.z - otherNode.z));\n};\n\nNodeHexagonal.prototype.getDistanceTorus = function getDistanceTorus(otherNode) {\n var distX = Math.abs(this.hX - otherNode.hX),\n distY = Math.abs(this.y - otherNode.y),\n distZ = Math.abs(this.z - otherNode.z);\n return Math.max(Math.min(distX, this.som.gridDim.x - distX), Math.min(distY, this.som.gridDim.y - distY), Math.min(distZ, this.som.gridDim.z - distZ));\n};\n\nNodeHexagonal.prototype.getPosition = function getPosition() {\n throw new Error('Unimplemented : cannot get position of the points for hexagonal grid');\n};\n\nmodule.exports = NodeHexagonal;","'use strict';\n\nvar NodeSquare = require('./node-square'),\n NodeHexagonal = require('./node-hexagonal');\n\nvar defaultOptions = {\n fields: 3,\n randomizer: Math.random,\n distance: squareEuclidean,\n iterations: 10,\n learningRate: 0.1,\n gridType: 'rect',\n torus: true,\n method: 'random'\n};\n\nfunction SOM(x, y, options, reload) {\n\n this.x = x;\n this.y = y;\n\n options = options || {};\n this.options = {};\n for (var i in defaultOptions) {\n if (options.hasOwnProperty(i)) {\n this.options[i] = options[i];\n } else {\n this.options[i] = defaultOptions[i];\n }\n }\n\n if (typeof this.options.fields === 'number') {\n this.numWeights = this.options.fields;\n } else if (Array.isArray(this.options.fields)) {\n this.numWeights = this.options.fields.length;\n var converters = getConverters(this.options.fields);\n this.extractor = converters.extractor;\n this.creator = converters.creator;\n } else {\n throw new Error('Invalid fields definition');\n }\n\n if (this.options.gridType === 'rect') {\n this.nodeType = NodeSquare;\n this.gridDim = {\n x: x,\n y: y\n };\n } else {\n this.nodeType = NodeHexagonal;\n var hx = this.x - Math.floor(this.y / 2);\n this.gridDim = {\n x: hx,\n y: this.y,\n z: -(0 - hx - this.y)\n };\n }\n\n this.torus = this.options.torus;\n this.distanceMethod = this.torus ? 'getDistanceTorus' : 'getDistance';\n\n this.distance = this.options.distance;\n\n this.maxDistance = getMaxDistance(this.distance, this.numWeights);\n\n if (reload === true) { // For model loading\n this.done = true;\n return;\n }\n if (!(x > 0 && y > 0)) {\n throw new Error('x and y must be positive');\n }\n\n this.times = {\n findBMU: 0,\n adjust: 0\n };\n\n this.randomizer = this.options.randomizer;\n\n this.iterationCount = 0;\n this.iterations = this.options.iterations;\n\n this.startLearningRate = this.learningRate = this.options.learningRate;\n\n this.mapRadius = Math.floor(Math.max(x, y) / 2);\n\n this.algorithmMethod = this.options.method;\n\n this._initNodes();\n\n this.done = false;\n}\n\nSOM.load = function loadModel(model, distance) {\n if (model.name === 'SOM') {\n var x = model.data.length,\n y = model.data[0].length;\n if (distance) {\n model.options.distance = distance;\n } else if (model.options.distance) {\n model.options.distance = eval('(' + model.options.distance + ')');\n }\n var som = new SOM(x, y, model.options, true);\n som.nodes = new Array(x);\n for (var i = 0; i < x; i++) {\n som.nodes[i] = new Array(y);\n for (var j = 0; j < y; j++) {\n som.nodes[i][j] = new som.nodeType(i, j, model.data[i][j], som);\n }\n }\n return som;\n } else {\n throw new Error('expecting a SOM model');\n }\n};\n\nSOM.prototype.export = function exportModel(includeDistance) {\n if (!this.done) {\n throw new Error('model is not ready yet');\n }\n var model = {\n name: 'SOM'\n };\n model.options = {\n fields: this.options.fields,\n gridType: this.options.gridType,\n torus: this.options.torus\n };\n model.data = new Array(this.x);\n for (var i = 0; i < this.x; i++) {\n model.data[i] = new Array(this.y);\n for (var j = 0; j < this.y; j++) {\n model.data[i][j] = this.nodes[i][j].weights;\n }\n }\n if (includeDistance) {\n model.options.distance = this.distance.toString();\n }\n return model;\n};\n\nSOM.prototype._initNodes = function initNodes() {\n var now = Date.now(),\n i, j, k;\n this.nodes = new Array(this.x);\n for (i = 0; i < this.x; i++) {\n this.nodes[i] = new Array(this.y);\n for (j = 0; j < this.y; j++) {\n var weights = new Array(this.numWeights);\n for (k = 0; k < this.numWeights; k++) {\n weights[k] = this.randomizer();\n }\n this.nodes[i][j] = new this.nodeType(i, j, weights, this);\n }\n }\n this.times.initNodes = Date.now() - now;\n};\n\nSOM.prototype.setTraining = function setTraining(trainingSet) {\n if (this.trainingSet) {\n throw new Error('training set has already been set');\n }\n var now = Date.now();\n var convertedSet = trainingSet;\n var i, l = trainingSet.length;\n if (this.extractor) {\n convertedSet = new Array(l);\n for (i = 0; i < l; i++) {\n convertedSet[i] = this.extractor(trainingSet[i]);\n }\n }\n this.numIterations = this.iterations * l;\n\n if (this.algorithmMethod === 'random') {\n this.timeConstant = this.numIterations / Math.log(this.mapRadius);\n } else {\n this.timeConstant = l / Math.log(this.mapRadius);\n }\n this.trainingSet = convertedSet;\n this.times.setTraining = Date.now() - now;\n};\n\nSOM.prototype.trainOne = function trainOne() {\n if (this.done) {\n\n return false;\n\n } else if (this.numIterations-- > 0) {\n\n var neighbourhoodRadius,\n trainingValue,\n trainingSetFactor;\n\n if (this.algorithmMethod === 'random') { // Pick a random value of the training set at each step\n neighbourhoodRadius = this.mapRadius * Math.exp(-this.iterationCount / this.timeConstant);\n trainingValue = getRandomValue(this.trainingSet, this.randomizer);\n this._adjust(trainingValue, neighbourhoodRadius);\n this.learningRate = this.startLearningRate * Math.exp(-this.iterationCount / this.numIterations);\n } else { // Get next input vector\n trainingSetFactor = -Math.floor(this.iterationCount / this.trainingSet.length);\n neighbourhoodRadius = this.mapRadius * Math.exp(trainingSetFactor / this.timeConstant);\n trainingValue = this.trainingSet[this.iterationCount % this.trainingSet.length];\n this._adjust(trainingValue, neighbourhoodRadius);\n if (((this.iterationCount + 1) % this.trainingSet.length) === 0) {\n this.learningRate = this.startLearningRate * Math.exp(trainingSetFactor / Math.floor(this.numIterations / this.trainingSet.length));\n }\n }\n\n this.iterationCount++;\n\n return true;\n\n } else {\n\n this.done = true;\n return false;\n\n }\n};\n\nSOM.prototype._adjust = function adjust(trainingValue, neighbourhoodRadius) {\n var now = Date.now(),\n x, y, dist, influence;\n\n var bmu = this._findBestMatchingUnit(trainingValue);\n\n var now2 = Date.now();\n this.times.findBMU += now2 - now;\n\n var radiusLimit = Math.floor(neighbourhoodRadius);\n var xMin = bmu.x - radiusLimit,\n xMax = bmu.x + radiusLimit,\n yMin = bmu.y - radiusLimit,\n yMax = bmu.y + radiusLimit;\n\n for (x = xMin; x <= xMax; x++) {\n var theX = x;\n if (x < 0) {\n theX += this.x;\n } else if (x >= this.x) {\n theX -= this.x;\n }\n for (y = yMin; y <= yMax; y++) {\n var theY = y;\n if (y < 0) {\n theY += this.y;\n } else if (y >= this.y) {\n theY -= this.y;\n }\n\n dist = bmu[this.distanceMethod](this.nodes[theX][theY]);\n\n if (dist < neighbourhoodRadius) {\n influence = Math.exp(-dist / (2 * neighbourhoodRadius));\n this.nodes[theX][theY].adjustWeights(trainingValue, this.learningRate, influence);\n }\n\n }\n }\n\n this.times.adjust += (Date.now() - now2);\n\n};\n\nSOM.prototype.train = function train(trainingSet) {\n if (!this.done) {\n this.setTraining(trainingSet);\n while (this.trainOne()) {\n }\n }\n};\n\nSOM.prototype.getConvertedNodes = function getConvertedNodes() {\n var result = new Array(this.x);\n for (var i = 0; i < this.x; i++) {\n result[i] = new Array(this.y);\n for (var j = 0; j < this.y; j++) {\n var node = this.nodes[i][j];\n result[i][j] = this.creator ? this.creator(node.weights) : node.weights;\n }\n }\n return result;\n};\n\nSOM.prototype._findBestMatchingUnit = function findBestMatchingUnit(candidate) {\n\n var bmu,\n lowest = Infinity,\n dist;\n\n for (var i = 0; i < this.x; i++) {\n for (var j = 0; j < this.y; j++) {\n dist = this.distance(this.nodes[i][j].weights, candidate);\n if (dist < lowest) {\n lowest = dist;\n bmu = this.nodes[i][j];\n }\n }\n }\n\n return bmu;\n\n};\n\nSOM.prototype.predict = function predict(data, computePosition) {\n if (typeof data === 'boolean') {\n computePosition = data;\n data = null;\n }\n if (!data) {\n data = this.trainingSet;\n }\n if (Array.isArray(data) && (Array.isArray(data[0]) || (typeof data[0] === 'object'))) { // predict a dataset\n var self = this;\n return data.map(function (element) {\n return self._predict(element, computePosition);\n });\n } else { // predict a single element\n return this._predict(data, computePosition);\n }\n};\n\nSOM.prototype._predict = function _predict(element, computePosition) {\n if (!Array.isArray(element)) {\n element = this.extractor(element);\n }\n var bmu = this._findBestMatchingUnit(element);\n var result = [bmu.x, bmu.y];\n if (computePosition) {\n result[2] = bmu.getPosition(element);\n }\n return result;\n};\n\n// As seen in http://www.scholarpedia.org/article/Kohonen_network\nSOM.prototype.getQuantizationError = function getQuantizationError() {\n var fit = this.getFit(),\n l = fit.length,\n sum = 0;\n for (var i = 0; i < l; i++) {\n sum += fit[i];\n }\n return sum / l;\n};\n\nSOM.prototype.getFit = function getFit(dataset) {\n if (!dataset) {\n dataset = this.trainingSet;\n }\n var l = dataset.length,\n bmu,\n result = new Array(l);\n for (var i = 0; i < l; i++) {\n bmu = this._findBestMatchingUnit(dataset[i]);\n result[i] = Math.sqrt(this.distance(dataset[i], bmu.weights));\n }\n return result;\n};\n\nfunction getConverters(fields) {\n var l = fields.length,\n normalizers = new Array(l),\n denormalizers = new Array(l);\n for (var i = 0; i < l; i++) {\n normalizers[i] = getNormalizer(fields[i].range);\n denormalizers[i] = getDenormalizer(fields[i].range);\n }\n return {\n extractor: function extractor(value) {\n var result = new Array(l);\n for (var i = 0; i < l; i++) {\n result[i] = normalizers[i](value[fields[i].name]);\n }\n return result;\n },\n creator: function creator(value) {\n var result = {};\n for (var i = 0; i < l; i++) {\n result[fields[i].name] = denormalizers[i](value[i]);\n }\n return result;\n }\n };\n}\n\nfunction getNormalizer(minMax) {\n return function normalizer(value) {\n return (value - minMax[0]) / (minMax[1] - minMax[0]);\n };\n}\n\nfunction getDenormalizer(minMax) {\n return function denormalizer(value) {\n return (minMax[0] + value * (minMax[1] - minMax[0]));\n };\n}\n\nfunction squareEuclidean(a, b) {\n var d = 0;\n for (var i = 0, ii = a.length; i < ii; i++) {\n d += (a[i] - b[i]) * (a[i] - b[i]);\n }\n return d;\n}\n\nfunction getRandomValue(arr, randomizer) {\n return arr[Math.floor(randomizer() * arr.length)];\n}\n\nfunction getMaxDistance(distance, numWeights) {\n var zero = new Array(numWeights),\n one = new Array(numWeights);\n for (var i = 0; i < numWeights; i++) {\n zero[i] = 0;\n one[i] = 1;\n }\n return distance(zero, one);\n}\n\nmodule.exports = SOM;","export default function maybeToPrecision(value, digits) {\n if (value < 0) {\n value = 0 - value;\n if (typeof digits === 'number') {\n return `- ${value.toPrecision(digits)}`;\n } else {\n return `- ${value.toString()}`;\n }\n } else {\n if (typeof digits === 'number') {\n return value.toPrecision(digits);\n } else {\n return value.toString();\n }\n }\n}\n","export default function checkArraySize(x, y) {\n if (!Array.isArray(x) || !Array.isArray(y)) {\n throw new TypeError('x and y must be arrays');\n }\n if (x.length !== y.length) {\n throw new RangeError('x and y arrays must have the same length');\n }\n}\n","export { default as maybeToPrecision } from './maybeToPrecision';\nexport { default as checkArrayLength } from './checkArrayLength';\n\nexport default class BaseRegression {\n constructor() {\n if (new.target === BaseRegression) {\n throw new Error('BaseRegression must be subclassed');\n }\n }\n\n predict(x) {\n if (typeof x === 'number') {\n return this._predict(x);\n } else if (Array.isArray(x)) {\n const y = [];\n for (let i = 0; i < x.length; i++) {\n y.push(this._predict(x[i]));\n }\n return y;\n } else {\n throw new TypeError('x must be a number or array');\n }\n }\n\n _predict() {\n throw new Error('_predict must be implemented');\n }\n\n train() {\n // Do nothing for this package\n }\n\n toString() {\n return '';\n }\n\n toLaTeX() {\n return '';\n }\n\n /**\n * Return the correlation coefficient of determination (r) and chi-square.\n * @param {Array} x\n * @param {Array} y\n * @return {object}\n */\n score(x, y) {\n if (!Array.isArray(x) || !Array.isArray(y) || x.length !== y.length) {\n throw new Error('x and y must be arrays of the same length');\n }\n\n const n = x.length;\n const y2 = new Array(n);\n for (let i = 0; i < n; i++) {\n y2[i] = this._predict(x[i]);\n }\n\n let xSum = 0;\n let ySum = 0;\n let chi2 = 0;\n let rmsd = 0;\n let xSquared = 0;\n let ySquared = 0;\n let xY = 0;\n for (let i = 0; i < n; i++) {\n xSum += y2[i];\n ySum += y[i];\n xSquared += y2[i] * y2[i];\n ySquared += y[i] * y[i];\n xY += y2[i] * y[i];\n if (y[i] !== 0) {\n chi2 += ((y[i] - y2[i]) * (y[i] - y2[i])) / y[i];\n }\n rmsd += (y[i] - y2[i]) * (y[i] - y2[i]);\n }\n\n const r =\n (n * xY - xSum * ySum) /\n Math.sqrt((n * xSquared - xSum * xSum) * (n * ySquared - ySum * ySum));\n\n return {\n r: r,\n r2: r * r,\n chi2: chi2,\n rmsd: Math.sqrt(rmsd / n)\n };\n }\n}\n","import BaseRegression, {\n checkArrayLength,\n maybeToPrecision\n} from 'ml-regression-base';\nimport { Matrix, MatrixTransposeView, solve } from 'ml-matrix';\n\nexport default class PolynomialRegression extends BaseRegression {\n constructor(x, y, degree) {\n super();\n if (x === true) {\n this.degree = y.degree;\n this.powers = y.powers;\n this.coefficients = y.coefficients;\n } else {\n checkArrayLength(x, y);\n regress(this, x, y, degree);\n }\n }\n\n _predict(x) {\n let y = 0;\n for (let k = 0; k < this.powers.length; k++) {\n y += this.coefficients[k] * Math.pow(x, this.powers[k]);\n }\n return y;\n }\n\n toJSON() {\n return {\n name: 'polynomialRegression',\n degree: this.degree,\n powers: this.powers,\n coefficients: this.coefficients\n };\n }\n\n toString(precision) {\n return this._toFormula(precision, false);\n }\n\n toLaTeX(precision) {\n return this._toFormula(precision, true);\n }\n\n _toFormula(precision, isLaTeX) {\n let sup = '^';\n let closeSup = '';\n let times = ' * ';\n if (isLaTeX) {\n sup = '^{';\n closeSup = '}';\n times = '';\n }\n\n let fn = '';\n let str = '';\n for (let k = 0; k < this.coefficients.length; k++) {\n str = '';\n if (this.coefficients[k] !== 0) {\n if (this.powers[k] === 0) {\n str = maybeToPrecision(this.coefficients[k], precision);\n } else {\n if (this.powers[k] === 1) {\n str =\n `${maybeToPrecision(this.coefficients[k], precision) + times}x`;\n } else {\n str =\n `${maybeToPrecision(this.coefficients[k], precision) +\n times\n }x${\n sup\n }${this.powers[k]\n }${closeSup}`;\n }\n }\n\n if (this.coefficients[k] > 0 && k !== this.coefficients.length - 1) {\n str = ` + ${str}`;\n } else if (k !== this.coefficients.length - 1) {\n str = ` ${str}`;\n }\n }\n fn = str + fn;\n }\n if (fn.charAt(0) === '+') {\n fn = fn.slice(1);\n }\n\n return `f(x) = ${fn}`;\n }\n\n static load(json) {\n if (json.name !== 'polynomialRegression') {\n throw new TypeError('not a polynomial regression model');\n }\n return new PolynomialRegression(true, json);\n }\n}\n\nfunction regress(pr, x, y, degree) {\n const n = x.length;\n let powers;\n if (Array.isArray(degree)) {\n powers = degree;\n degree = powers.length;\n } else {\n degree++;\n powers = new Array(degree);\n for (let k = 0; k < degree; k++) {\n powers[k] = k;\n }\n }\n const F = new Matrix(n, degree);\n const Y = new Matrix([y]);\n for (let k = 0; k < degree; k++) {\n for (let i = 0; i < n; i++) {\n if (powers[k] === 0) {\n F.set(i, k, 1);\n } else {\n F.set(i, k, Math.pow(x[i], powers[k]));\n }\n }\n }\n\n const FT = new MatrixTransposeView(F);\n const A = FT.mmul(F);\n const B = FT.mmul(new MatrixTransposeView(Y));\n\n pr.degree = degree - 1;\n pr.powers = powers;\n pr.coefficients = solve(A, B).to1DArray();\n}\n","import BaseRegression, {\n checkArrayLength,\n maybeToPrecision\n} from 'ml-regression-base';\n\nexport default class SimpleLinearRegression extends BaseRegression {\n constructor(x, y) {\n super();\n if (x === true) {\n this.slope = y.slope;\n this.intercept = y.intercept;\n this.coefficients = [y.intercept, y.slope];\n } else {\n checkArrayLength(x, y);\n regress(this, x, y);\n }\n }\n\n toJSON() {\n return {\n name: 'simpleLinearRegression',\n slope: this.slope,\n intercept: this.intercept\n };\n }\n\n _predict(x) {\n return this.slope * x + this.intercept;\n }\n\n computeX(y) {\n return (y - this.intercept) / this.slope;\n }\n\n toString(precision) {\n let result = 'f(x) = ';\n if (this.slope !== 0) {\n const xFactor = maybeToPrecision(this.slope, precision);\n result += `${xFactor === '1' ? '' : `${xFactor} * `}x`;\n if (this.intercept !== 0) {\n const absIntercept = Math.abs(this.intercept);\n const operator = absIntercept === this.intercept ? '+' : '-';\n result += ` ${operator} ${maybeToPrecision(absIntercept, precision)}`;\n }\n } else {\n result += maybeToPrecision(this.intercept, precision);\n }\n return result;\n }\n\n toLaTeX(precision) {\n return this.toString(precision);\n }\n\n static load(json) {\n if (json.name !== 'simpleLinearRegression') {\n throw new TypeError('not a SLR model');\n }\n return new SimpleLinearRegression(true, json);\n }\n}\n\nfunction regress(slr, x, y) {\n const n = x.length;\n let xSum = 0;\n let ySum = 0;\n\n let xSquared = 0;\n let xY = 0;\n\n for (let i = 0; i < n; i++) {\n xSum += x[i];\n ySum += y[i];\n xSquared += x[i] * x[i];\n xY += x[i] * y[i];\n }\n\n const numerator = n * xY - xSum * ySum;\n slr.slope = numerator / (n * xSquared - xSum * xSum);\n slr.intercept = (1 / n) * ySum - slr.slope * (1 / n) * xSum;\n slr.coefficients = [slr.intercept, slr.slope];\n}\n","import BaseRegression, {\n checkArrayLength,\n maybeToPrecision\n} from 'ml-regression-base';\nimport SimpleLinearRegression from 'ml-regression-simple-linear';\n\nexport default class ExponentialRegression extends BaseRegression {\n constructor(x, y) {\n super();\n if (x === true) {\n this.A = y.A;\n this.B = y.B;\n } else {\n checkArrayLength(x, y);\n regress(this, x, y);\n }\n }\n\n _predict(input) {\n return this.B * Math.exp(input * this.A);\n }\n\n toJSON() {\n return {\n name: 'exponentialRegression',\n A: this.A,\n B: this.B\n };\n }\n\n toString(precision) {\n return (\n `f(x) = ${\n maybeToPrecision(this.B, precision)\n } * e^(${\n maybeToPrecision(this.A, precision)\n } * x)`\n );\n }\n\n toLaTeX(precision) {\n if (this.A >= 0) {\n return (\n `f(x) = ${\n maybeToPrecision(this.B, precision)\n }e^{${\n maybeToPrecision(this.A, precision)\n }x}`\n );\n } else {\n return (\n `f(x) = \\\\frac{${\n maybeToPrecision(this.B, precision)\n }}{e^{${\n maybeToPrecision(-this.A, precision)\n }x}}`\n );\n }\n }\n\n static load(json) {\n if (json.name !== 'exponentialRegression') {\n throw new TypeError('not a exponential regression model');\n }\n return new ExponentialRegression(true, json);\n }\n}\n\nfunction regress(er, x, y) {\n const n = x.length;\n const yl = new Array(n);\n for (let i = 0; i < n; i++) {\n yl[i] = Math.log(y[i]);\n }\n\n const linear = new SimpleLinearRegression(x, yl);\n er.A = linear.slope;\n er.B = Math.exp(linear.intercept);\n}\n","import BaseRegression, {\n checkArrayLength,\n maybeToPrecision\n} from 'ml-regression-base';\nimport SimpleLinearRegression from 'ml-regression-simple-linear';\n\nexport default class PowerRegression extends BaseRegression {\n constructor(x, y) {\n super();\n if (x === true) {\n // reloading model\n this.A = y.A;\n this.B = y.B;\n } else {\n checkArrayLength(x, y);\n regress(this, x, y);\n }\n }\n\n _predict(newInputs) {\n return this.A * Math.pow(newInputs, this.B);\n }\n\n toJSON() {\n return {\n name: 'powerRegression',\n A: this.A,\n B: this.B\n };\n }\n\n toString(precision) {\n return `f(x) = ${maybeToPrecision(\n this.A,\n precision\n )} * x^${maybeToPrecision(this.B, precision)}`;\n }\n\n toLaTeX(precision) {\n let latex = '';\n if (this.B >= 0) {\n latex = `f(x) = ${maybeToPrecision(\n this.A,\n precision\n )}x^{${maybeToPrecision(this.B, precision)}}`;\n } else {\n latex = `f(x) = \\\\frac{${maybeToPrecision(\n this.A,\n precision\n )}}{x^{${maybeToPrecision(-this.B, precision)}}}`;\n }\n latex = latex.replace(/e([+-]?[0-9]+)/g, 'e^{$1}');\n return latex;\n }\n\n static load(json) {\n if (json.name !== 'powerRegression') {\n throw new TypeError('not a power regression model');\n }\n return new PowerRegression(true, json);\n }\n}\n\nfunction regress(pr, x, y) {\n const n = x.length;\n const xl = new Array(n);\n const yl = new Array(n);\n for (let i = 0; i < n; i++) {\n xl[i] = Math.log(x[i]);\n yl[i] = Math.log(y[i]);\n }\n\n const linear = new SimpleLinearRegression(xl, yl);\n pr.A = Math.exp(linear.intercept);\n pr.B = linear.slope;\n}\n","import Matrix, { SVD, pseudoInverse } from 'ml-matrix';\n\nexport default class MultivariateLinearRegression {\n constructor(x, y, options = {}) {\n const { intercept = true, statistics = true } = options;\n this.statistics = statistics;\n if (x === true) {\n this.weights = y.weights;\n this.inputs = y.inputs;\n this.outputs = y.outputs;\n this.intercept = y.intercept;\n } else {\n x = new Matrix(x);\n y = new Matrix(y);\n if (intercept) {\n x.addColumn(new Array(x.rows).fill(1));\n }\n let xt = x.transpose();\n const xx = xt\n .mmul(x);\n const xy = xt\n .mmul(y);\n const invxx = new SVD(xx)\n .inverse();\n const beta = xy\n .transpose()\n .mmul(invxx)\n .transpose();\n this.weights = beta.to2DArray();\n this.inputs = x.columns;\n this.outputs = y.columns;\n if (intercept) this.inputs--;\n this.intercept = intercept;\n if (statistics) {\n /*\n * Let's add some basic statistics about the beta's to be able to interpret them.\n * source: http://dept.stat.lsa.umich.edu/~kshedden/Courses/Stat401/Notes/401-multreg.pdf\n * validated against Excel Regression AddIn\n * test: \"datamining statistics test\"\n */\n const fittedValues = x.mmul(beta);\n const residuals = y.clone().addM(fittedValues.neg());\n const variance =\n residuals\n .to2DArray()\n .map((ri) => Math.pow(ri[0], 2))\n .reduce((a, b) => a + b) /\n (y.rows - x.columns);\n this.stdError = Math.sqrt(variance);\n this.stdErrorMatrix = pseudoInverse(xx).mul(variance);\n this.stdErrors = this.stdErrorMatrix\n .diagonal()\n .map((d) => Math.sqrt(d));\n this.tStats = this.weights.map((d, i) =>\n (this.stdErrors[i] === 0 ? 0 : d[0] / this.stdErrors[i])\n );\n }\n }\n }\n\n predict(x) {\n if (Array.isArray(x)) {\n if (typeof x[0] === 'number') {\n return this._predict(x);\n } else if (Array.isArray(x[0])) {\n const y = new Array(x.length);\n for (let i = 0; i < x.length; i++) {\n y[i] = this._predict(x[i]);\n }\n return y;\n }\n } else if (Matrix.isMatrix(x)) {\n const y = new Matrix(x.rows, this.outputs);\n for (let i = 0; i < x.rows; i++) {\n y.setRow(i, this._predict(x.getRow(i)));\n }\n return y;\n }\n throw new TypeError('x must be a matrix or array of numbers');\n }\n\n _predict(x) {\n const result = new Array(this.outputs);\n if (this.intercept) {\n for (let i = 0; i < this.outputs; i++) {\n result[i] = this.weights[this.inputs][i];\n }\n } else {\n result.fill(0);\n }\n for (let i = 0; i < this.inputs; i++) {\n for (let j = 0; j < this.outputs; j++) {\n result[j] += this.weights[i][j] * x[i];\n }\n }\n return result;\n }\n\n score() {\n throw new Error('score method is not implemented yet');\n }\n\n toJSON() {\n return {\n name: 'multivariateLinearRegression',\n weights: this.weights,\n inputs: this.inputs,\n outputs: this.outputs,\n intercept: this.intercept,\n summary: this.statistics\n ? {\n regressionStatistics: {\n standardError: this.stdError,\n observations: this.outputs\n },\n variables: this.weights.map((d, i) => {\n return {\n label:\n i === this.weights.length - 1\n ? 'Intercept'\n : `X Variable ${i + 1}`,\n coefficients: d,\n standardError: this.stdErrors[i],\n tStat: this.tStats[i]\n };\n })\n }\n : undefined\n };\n }\n\n static load(model) {\n if (model.name !== 'multivariateLinearRegression') {\n throw new Error('not a MLR model');\n }\n return new MultivariateLinearRegression(true, model);\n }\n}\n","'use strict';\n\nconst { squaredEuclidean } = require('ml-distance-euclidean');\n\nconst defaultOptions = {\n sigma: 1\n};\n\nclass GaussianKernel {\n constructor(options) {\n options = Object.assign({}, defaultOptions, options);\n this.sigma = options.sigma;\n this.divisor = 2 * options.sigma * options.sigma;\n }\n compute(x, y) {\n const distance = squaredEuclidean(x, y);\n return Math.exp(-distance / this.divisor);\n }\n}\n\nmodule.exports = GaussianKernel;\n","'use strict';\n\nconst defaultOptions = {\n degree: 1,\n constant: 1,\n scale: 1\n};\n\nclass PolynomialKernel {\n constructor(options) {\n options = Object.assign({}, defaultOptions, options);\n\n this.degree = options.degree;\n this.constant = options.constant;\n this.scale = options.scale;\n }\n\n compute(x, y) {\n var sum = 0;\n for (var i = 0; i < x.length; i++) {\n sum += x[i] * y[i];\n }\n return Math.pow(this.scale * sum + this.constant, this.degree);\n }\n}\n\nmodule.exports = PolynomialKernel;\n","'use strict';\n\nconst defaultOptions = {\n alpha: 0.01,\n constant: -Math.E\n};\n\nclass SigmoidKernel {\n constructor(options) {\n options = Object.assign({}, defaultOptions, options);\n this.alpha = options.alpha;\n this.constant = options.constant;\n }\n\n compute(x, y) {\n var sum = 0;\n for (var i = 0; i < x.length; i++) {\n sum += x[i] * y[i];\n }\n return Math.tanh(this.alpha * sum + this.constant);\n }\n}\n\nmodule.exports = SigmoidKernel;\n","'use strict';\n\nconst defaultOptions = {\n sigma: 1,\n degree: 1\n};\n\nclass ANOVAKernel {\n constructor(options) {\n options = Object.assign({}, defaultOptions, options);\n this.sigma = options.sigma;\n this.degree = options.degree;\n }\n\n compute(x, y) {\n var sum = 0;\n var len = Math.min(x.length, y.length);\n for (var i = 1; i <= len; ++i) {\n sum += Math.pow(\n Math.exp(\n -this.sigma *\n Math.pow(Math.pow(x[i - 1], i) - Math.pow(y[i - 1], i), 2)\n ),\n this.degree\n );\n }\n return sum;\n }\n}\n\nmodule.exports = ANOVAKernel;\n","'use strict';\n\nconst { squaredEuclidean } = require('ml-distance-euclidean');\n\nconst defaultOptions = {\n sigma: 1\n};\n\nclass CauchyKernel {\n constructor(options) {\n options = Object.assign({}, defaultOptions, options);\n this.sigma = options.sigma;\n }\n\n compute(x, y) {\n return 1 / (1 + squaredEuclidean(x, y) / (this.sigma * this.sigma));\n }\n}\n\nmodule.exports = CauchyKernel;\n","'use strict';\n\nconst { euclidean } = require('ml-distance-euclidean');\n\nconst defaultOptions = {\n sigma: 1\n};\n\nclass ExponentialKernel {\n constructor(options) {\n options = Object.assign({}, defaultOptions, options);\n this.sigma = options.sigma;\n this.divisor = 2 * options.sigma * options.sigma;\n }\n\n compute(x, y) {\n const distance = euclidean(x, y);\n return Math.exp(-distance / this.divisor);\n }\n}\n\nmodule.exports = ExponentialKernel;\n","'use strict';\n\nclass HistogramIntersectionKernel {\n compute(x, y) {\n var min = Math.min(x.length, y.length);\n var sum = 0;\n for (var i = 0; i < min; ++i) {\n sum += Math.min(x[i], y[i]);\n }\n\n return sum;\n }\n}\n\nmodule.exports = HistogramIntersectionKernel;\n","'use strict';\n\nconst { euclidean } = require('ml-distance-euclidean');\n\nconst defaultOptions = {\n sigma: 1\n};\n\nclass LaplacianKernel {\n constructor(options) {\n options = Object.assign({}, defaultOptions, options);\n this.sigma = options.sigma;\n }\n\n compute(x, y) {\n const distance = euclidean(x, y);\n return Math.exp(-distance / this.sigma);\n }\n}\n\nmodule.exports = LaplacianKernel;\n","'use strict';\n\nconst { squaredEuclidean } = require('ml-distance-euclidean');\n\nconst defaultOptions = {\n constant: 1\n};\n\nclass MultiquadraticKernel {\n constructor(options) {\n options = Object.assign({}, defaultOptions, options);\n this.constant = options.constant;\n }\n\n compute(x, y) {\n return Math.sqrt(squaredEuclidean(x, y) + this.constant * this.constant);\n }\n}\n\nmodule.exports = MultiquadraticKernel;\n","'use strict';\n\nconst { squaredEuclidean } = require('ml-distance-euclidean');\n\nconst defaultOptions = {\n constant: 1\n};\n\nclass RationalQuadraticKernel {\n constructor(options) {\n options = Object.assign({}, defaultOptions, options);\n this.constant = options.constant;\n }\n\n compute(x, y) {\n const distance = squaredEuclidean(x, y);\n return 1 - distance / (distance + this.constant);\n }\n}\n\nmodule.exports = RationalQuadraticKernel;\n","'use strict';\n\nconst { Matrix, MatrixTransposeView } = require('ml-matrix');\nconst GaussianKernel = require('ml-kernel-gaussian');\nconst PolynomialKernel = require('ml-kernel-polynomial');\nconst SigmoidKernel = require('ml-kernel-sigmoid');\n\nconst ANOVAKernel = require('./kernels/anova-kernel');\nconst CauchyKernel = require('./kernels/cauchy-kernel');\nconst ExponentialKernel = require('./kernels/exponential-kernel');\nconst HistogramKernel = require('./kernels/histogram-intersection-kernel');\nconst LaplacianKernel = require('./kernels/laplacian-kernel');\nconst MultiquadraticKernel = require('./kernels/multiquadratic-kernel');\nconst RationalKernel = require('./kernels/rational-quadratic-kernel');\n\nconst kernelType = {\n gaussian: GaussianKernel,\n rbf: GaussianKernel,\n polynomial: PolynomialKernel,\n poly: PolynomialKernel,\n anova: ANOVAKernel,\n cauchy: CauchyKernel,\n exponential: ExponentialKernel,\n histogram: HistogramKernel,\n min: HistogramKernel,\n laplacian: LaplacianKernel,\n multiquadratic: MultiquadraticKernel,\n rational: RationalKernel,\n sigmoid: SigmoidKernel,\n mlp: SigmoidKernel\n};\n\nclass Kernel {\n constructor(type, options) {\n this.kernelType = type;\n if (type === 'linear') return;\n\n if (typeof type === 'string') {\n type = type.toLowerCase();\n\n var KernelConstructor = kernelType[type];\n if (KernelConstructor) {\n this.kernelFunction = new KernelConstructor(options);\n } else {\n throw new Error(`unsupported kernel type: ${type}`);\n }\n } else if (typeof type === 'object' && typeof type.compute === 'function') {\n this.kernelFunction = type;\n } else {\n throw new TypeError(\n 'first argument must be a valid kernel type or instance'\n );\n }\n }\n\n compute(inputs, landmarks) {\n inputs = Matrix.checkMatrix(inputs);\n if (landmarks === undefined) {\n landmarks = inputs;\n } else {\n landmarks = Matrix.checkMatrix(landmarks);\n }\n if (this.kernelType === 'linear') {\n return inputs.mmul(new MatrixTransposeView(landmarks));\n }\n\n const kernelMatrix = new Matrix(inputs.rows, landmarks.rows);\n if (inputs === landmarks) {\n // fast path, matrix is symmetric\n for (let i = 0; i < inputs.rows; i++) {\n for (let j = i; j < inputs.rows; j++) {\n const value = this.kernelFunction.compute(\n inputs.getRow(i),\n inputs.getRow(j)\n );\n kernelMatrix.set(i, j, value);\n kernelMatrix.set(j, i, value);\n }\n }\n } else {\n for (let i = 0; i < inputs.rows; i++) {\n for (let j = 0; j < landmarks.rows; j++) {\n kernelMatrix.set(\n i,\n j,\n this.kernelFunction.compute(inputs.getRow(i), landmarks.getRow(j))\n );\n }\n }\n }\n return kernelMatrix;\n }\n}\n\nmodule.exports = Kernel;\n","import BaseRegression, {\n checkArrayLength,\n maybeToPrecision\n} from 'ml-regression-base';\nimport median from 'ml-array-median';\n\nexport default class TheilSenRegression extends BaseRegression {\n /**\n * Theil–Sen estimator\n * https://en.wikipedia.org/wiki/Theil%E2%80%93Sen_estimator\n * @param {Array|boolean} x\n * @param {Array|object} y\n * @constructor\n */\n constructor(x, y) {\n super();\n if (x === true) {\n // loads the model\n this.slope = y.slope;\n this.intercept = y.intercept;\n this.coefficients = y.coefficients;\n } else {\n // creates the model\n checkArrayLength(x, y);\n theilSen(this, x, y);\n }\n }\n\n toJSON() {\n return {\n name: 'TheilSenRegression',\n slope: this.slope,\n intercept: this.intercept\n };\n }\n\n _predict(input) {\n return this.slope * input + this.intercept;\n }\n\n computeX(input) {\n return (input - this.intercept) / this.slope;\n }\n\n toString(precision) {\n var result = 'f(x) = ';\n if (this.slope) {\n var xFactor = maybeToPrecision(this.slope, precision);\n result += `${Math.abs(xFactor - 1) < 1e-5 ? '' : `${xFactor} * `}x`;\n if (this.intercept) {\n var absIntercept = Math.abs(this.intercept);\n var operator = absIntercept === this.intercept ? '+' : '-';\n result +=\n ` ${operator} ${maybeToPrecision(absIntercept, precision)}`;\n }\n } else {\n result += maybeToPrecision(this.intercept, precision);\n }\n return result;\n }\n\n toLaTeX(precision) {\n return this.toString(precision);\n }\n\n static load(json) {\n if (json.name !== 'TheilSenRegression') {\n throw new TypeError('not a Theil-Sen model');\n }\n return new TheilSenRegression(true, json);\n }\n}\n\nfunction theilSen(regression, x, y) {\n let len = x.length;\n let slopes = new Array(len * len);\n let count = 0;\n for (let i = 0; i < len; ++i) {\n for (let j = i + 1; j < len; ++j) {\n if (x[i] !== x[j]) {\n slopes[count++] = (y[j] - y[i]) / (x[j] - x[i]);\n }\n }\n }\n slopes.length = count;\n let medianSlope = median(slopes);\n\n let cuts = new Array(len);\n for (let i = 0; i < len; ++i) {\n cuts[i] = y[i] - medianSlope * x[i];\n }\n\n regression.slope = medianSlope;\n regression.intercept = median(cuts);\n regression.coefficients = [regression.intercept, regression.slope];\n}\n","import BaseRegression, {\n checkArrayLength,\n maybeToPrecision\n} from 'ml-regression-base';\nimport { solve } from 'ml-matrix';\n\n/**\n * @class RobustPolynomialRegression\n * @param {Array} x\n * @param {Array} y\n * @param {number} degree - polynomial degree\n */\nexport default class RobustPolynomialRegression extends BaseRegression {\n constructor(x, y, degree) {\n super();\n if (x === true) {\n this.degree = y.degree;\n this.powers = y.powers;\n this.coefficients = y.coefficients;\n } else {\n checkArrayLength(x, y);\n robustPolynomial(this, x, y, degree);\n }\n }\n\n toJSON() {\n return {\n name: 'robustPolynomialRegression',\n degree: this.degree,\n powers: this.powers,\n coefficients: this.coefficients\n };\n }\n\n _predict(x) {\n return predict(x, this.powers, this.coefficients);\n }\n\n /**\n * Display the formula\n * @param {number} precision - precision for the numbers\n * @return {string}\n */\n toString(precision) {\n return this._toFormula(precision, false);\n }\n\n /**\n * Display the formula in LaTeX format\n * @param {number} precision - precision for the numbers\n * @return {string}\n */\n toLaTeX(precision) {\n return this._toFormula(precision, true);\n }\n\n _toFormula(precision, isLaTeX) {\n let sup = '^';\n let closeSup = '';\n let times = ' * ';\n if (isLaTeX) {\n sup = '^{';\n closeSup = '}';\n times = '';\n }\n\n let fn = '';\n let str = '';\n for (let k = 0; k < this.coefficients.length; k++) {\n str = '';\n if (this.coefficients[k] !== 0) {\n if (this.powers[k] === 0) {\n str = maybeToPrecision(this.coefficients[k], precision);\n } else {\n if (this.powers[k] === 1) {\n str = `${maybeToPrecision(this.coefficients[k], precision) +\n times}x`;\n } else {\n str = `${maybeToPrecision(this.coefficients[k], precision) +\n times}x${sup}${this.powers[k]}${closeSup}`;\n }\n }\n\n if (this.coefficients[k] > 0 && k !== this.coefficients.length - 1) {\n str = ` + ${str}`;\n } else if (k !== this.coefficients.length - 1) {\n str = ` ${str}`;\n }\n }\n fn = str + fn;\n }\n if (fn.charAt(0) === '+') {\n fn = fn.slice(1);\n }\n\n return `f(x) = ${fn}`;\n }\n\n static load(json) {\n if (json.name !== 'robustPolynomialRegression') {\n throw new TypeError('not a RobustPolynomialRegression model');\n }\n return new RobustPolynomialRegression(true, json);\n }\n}\n\nfunction robustPolynomial(regression, x, y, degree) {\n let powers = Array(degree)\n .fill(0)\n .map((_, index) => index);\n\n const tuples = getRandomTuples(x, y, degree);\n\n var min;\n for (var i = 0; i < tuples.length; i++) {\n var tuple = tuples[i];\n var coefficients = calcCoefficients(tuple, powers);\n\n var residuals = x.slice();\n for (var j = 0; j < x.length; j++) {\n residuals[j] = y[j] - predict(x[j], powers, coefficients);\n residuals[j] = {\n residual: residuals[j] * residuals[j],\n coefficients\n };\n }\n\n var median = residualsMedian(residuals);\n if (!min || median.residual < min.residual) {\n min = median;\n }\n }\n\n regression.degree = degree;\n regression.powers = powers;\n regression.coefficients = min.coefficients;\n}\n\n/**\n * @ignore\n * @param {Array} x\n * @param {Array} y\n * @param {number} degree\n * @return {Array<{x:number,y:number}>}\n */\nfunction getRandomTuples(x, y, degree) {\n var len = Math.floor(x.length / degree);\n var tuples = new Array(len);\n\n for (var i = 0; i < x.length; i++) {\n var pos = Math.floor(Math.random() * len);\n\n var counter = 0;\n while (counter < x.length) {\n if (!tuples[pos]) {\n tuples[pos] = [\n {\n x: x[i],\n y: y[i]\n }\n ];\n break;\n } else if (tuples[pos].length < degree) {\n tuples[pos].push({\n x: x[i],\n y: y[i]\n });\n break;\n } else {\n counter++;\n pos = (pos + 1) % len;\n }\n }\n\n if (counter === x.length) {\n return tuples;\n }\n }\n return tuples;\n}\n\n/**\n * @ignore\n * @param {{x:number,y:number}} tuple\n * @param {Array} powers\n * @return {Array}\n */\nfunction calcCoefficients(tuple, powers) {\n var X = tuple.slice();\n var Y = tuple.slice();\n for (var i = 0; i < X.length; i++) {\n Y[i] = [tuple[i].y];\n X[i] = new Array(powers.length);\n for (var j = 0; j < powers.length; j++) {\n X[i][j] = Math.pow(tuple[i].x, powers[j]);\n }\n }\n\n return solve(X, Y).to1DArray();\n}\n\nfunction predict(x, powers, coefficients) {\n let y = 0;\n for (let k = 0; k < powers.length; k++) {\n y += coefficients[k] * Math.pow(x, powers[k]);\n }\n return y;\n}\n\nfunction residualsMedian(residuals) {\n residuals.sort((a, b) => a.residual - b.residual);\n\n var l = residuals.length;\n var half = Math.floor(l / 2);\n return l % 2 === 0 ? residuals[half - 1] : residuals[half];\n}\n","/**\n * Calculate current error\n * @ignore\n * @param {{x:Array, y:Array}} data - Array of points to fit in the format [x1, x2, ... ], [y1, y2, ... ]\n * @param {Array} parameters - Array of current parameter values\n * @param {function} parameterizedFunction - The parameters and returns a function with the independent variable as a parameter\n * @return {number}\n */\nexport default function errorCalculation(\n data,\n parameters,\n parameterizedFunction\n) {\n var error = 0;\n const func = parameterizedFunction(parameters);\n\n for (var i = 0; i < data.x.length; i++) {\n error += Math.abs(data.y[i] - func(data.x[i]));\n }\n\n return error;\n}\n","import { inverse, Matrix } from 'ml-matrix';\n\n/**\n * Difference of the matrix function over the parameters\n * @ignore\n * @param {{x:Array, y:Array}} data - Array of points to fit in the format [x1, x2, ... ], [y1, y2, ... ]\n * @param {Array} evaluatedData - Array of previous evaluated function values\n * @param {Array} params - Array of previous parameter values\n * @param {number} gradientDifference - Adjustment for decrease the damping parameter\n * @param {function} paramFunction - The parameters and returns a function with the independent variable as a parameter\n * @return {Matrix}\n */\nfunction gradientFunction(\n data,\n evaluatedData,\n params,\n gradientDifference,\n paramFunction\n) {\n const n = params.length;\n const m = data.x.length;\n\n var ans = new Array(n);\n\n for (var param = 0; param < n; param++) {\n ans[param] = new Array(m);\n var auxParams = params.concat();\n auxParams[param] += gradientDifference;\n var funcParam = paramFunction(auxParams);\n\n for (var point = 0; point < m; point++) {\n ans[param][point] = evaluatedData[point] - funcParam(data.x[point]);\n }\n }\n return new Matrix(ans);\n}\n\n/**\n * Matrix function over the samples\n * @ignore\n * @param {{x:Array, y:Array}} data - Array of points to fit in the format [x1, x2, ... ], [y1, y2, ... ]\n * @param {Array} evaluatedData - Array of previous evaluated function values\n * @return {Matrix}\n */\nfunction matrixFunction(data, evaluatedData) {\n const m = data.x.length;\n\n var ans = new Array(m);\n\n for (var point = 0; point < m; point++) {\n ans[point] = [data.y[point] - evaluatedData[point]];\n }\n\n return new Matrix(ans);\n}\n\n/**\n * Iteration for Levenberg-Marquardt\n * @ignore\n * @param {{x:Array, y:Array}} data - Array of points to fit in the format [x1, x2, ... ], [y1, y2, ... ]\n * @param {Array} params - Array of previous parameter values\n * @param {number} damping - Levenberg-Marquardt parameter\n * @param {number} gradientDifference - Adjustment for decrease the damping parameter\n * @param {function} parameterizedFunction - The parameters and returns a function with the independent variable as a parameter\n * @return {Array}\n */\nexport default function step(\n data,\n params,\n damping,\n gradientDifference,\n parameterizedFunction\n) {\n var value = damping * gradientDifference * gradientDifference;\n var identity = Matrix.eye(params.length, params.length, value);\n\n const func = parameterizedFunction(params);\n var evaluatedData = data.x.map((e) => func(e));\n\n var gradientFunc = gradientFunction(\n data,\n evaluatedData,\n params,\n gradientDifference,\n parameterizedFunction\n );\n var matrixFunc = matrixFunction(data, evaluatedData);\n var inverseMatrix = inverse(\n identity.add(gradientFunc.mmul(gradientFunc.transpose()))\n );\n\n params = new Matrix([params]);\n params = params.sub(\n inverseMatrix\n .mmul(gradientFunc)\n .mmul(matrixFunc)\n .mul(gradientDifference)\n .transpose()\n );\n\n return params.to1DArray();\n}\n","import errorCalculation from './errorCalculation';\nimport step from './step';\n\n/**\n * Curve fitting algorithm\n * @param {{x:Array, y:Array}} data - Array of points to fit in the format [x1, x2, ... ], [y1, y2, ... ]\n * @param {function} parameterizedFunction - The parameters and returns a function with the independent variable as a parameter\n * @param {object} [options] - Options object\n * @param {number} [options.damping] - Levenberg-Marquardt parameter\n * @param {number} [options.gradientDifference = 10e-2] - Adjustment for decrease the damping parameter\n * @param {Array} [options.minValues] - Minimum allowed values for parameters\n * @param {Array} [options.maxValues] - Maximum allowed values for parameters\n * @param {Array} [options.initialValues] - Array of initial parameter values\n * @param {number} [options.maxIterations = 100] - Maximum of allowed iterations\n * @param {number} [options.errorTolerance = 10e-3] - Minimum uncertainty allowed for each point\n * @return {{parameterValues: Array, parameterError: number, iterations: number}}\n */\nexport default function levenbergMarquardt(\n data,\n parameterizedFunction,\n options = {}\n) {\n let {\n maxIterations = 100,\n gradientDifference = 10e-2,\n damping = 0,\n errorTolerance = 10e-3,\n minValues,\n maxValues,\n initialValues\n } = options;\n\n if (damping <= 0) {\n throw new Error('The damping option must be a positive number');\n } else if (!data.x || !data.y) {\n throw new Error('The data parameter must have x and y elements');\n } else if (\n !Array.isArray(data.x) ||\n data.x.length < 2 ||\n !Array.isArray(data.y) ||\n data.y.length < 2\n ) {\n throw new Error(\n 'The data parameter elements must be an array with more than 2 points'\n );\n } else if (data.x.length !== data.y.length) {\n throw new Error('The data parameter elements must have the same size');\n }\n\n var parameters =\n initialValues || new Array(parameterizedFunction.length).fill(1);\n let parLen = parameters.length;\n maxValues = maxValues || new Array(parLen).fill(Number.MAX_SAFE_INTEGER);\n minValues = minValues || new Array(parLen).fill(Number.MIN_SAFE_INTEGER);\n\n if (maxValues.length !== minValues.length) {\n throw new Error('minValues and maxValues must be the same size');\n }\n\n if (!Array.isArray(parameters)) {\n throw new Error('initialValues must be an array');\n }\n\n var error = errorCalculation(data, parameters, parameterizedFunction);\n\n var converged = error <= errorTolerance;\n\n for (\n var iteration = 0;\n iteration < maxIterations && !converged;\n iteration++\n ) {\n parameters = step(\n data,\n parameters,\n damping,\n gradientDifference,\n parameterizedFunction\n );\n\n for (let k = 0; k < parLen; k++) {\n parameters[k] = Math.min(\n Math.max(minValues[k], parameters[k]),\n maxValues[k]\n );\n }\n\n error = errorCalculation(data, parameters, parameterizedFunction);\n if (isNaN(error)) break;\n converged = error <= errorTolerance;\n }\n\n return {\n parameterValues: parameters,\n parameterError: error,\n iterations: iteration\n };\n}\n","module.exports = function(haystack, needle, comparator, low, high) {\n var mid, cmp;\n\n if(low === undefined)\n low = 0;\n\n else {\n low = low|0;\n if(low < 0 || low >= haystack.length)\n throw new RangeError(\"invalid lower bound\");\n }\n\n if(high === undefined)\n high = haystack.length - 1;\n\n else {\n high = high|0;\n if(high < low || high >= haystack.length)\n throw new RangeError(\"invalid upper bound\");\n }\n\n while(low <= high) {\n /* Note that \"(low + high) >>> 1\" may overflow, and results in a typecast\n * to double (which gives the wrong results). */\n mid = low + (high - low >> 1);\n cmp = +comparator(haystack[mid], needle, mid, haystack);\n\n /* Too low. */\n if(cmp < 0.0)\n low = mid + 1;\n\n /* Too high. */\n else if(cmp > 0.0)\n high = mid - 1;\n\n /* Key found. */\n else\n return mid;\n }\n\n /* Key not found. */\n return ~low;\n}\n","'use strict';\n\nfunction assertNumber(number) {\n\tif (typeof number !== 'number' || Number.isNaN(number)) {\n\t\tthrow new TypeError('Expected a number');\n\t}\n}\n\nexports.ascending = (left, right) => {\n\tassertNumber(left);\n\tassertNumber(right);\n\treturn left - right;\n};\n\nexports.descending = (left, right) => {\n\tassertNumber(left);\n\tassertNumber(right);\n\treturn right - left;\n};\n","import binarySearch from 'binary-search';\nimport { ascending } from 'num-sort';\n\nexport const largestPrime = 0x7fffffff;\n\nconst primeNumbers = [\n // chunk #0\n largestPrime, // 2^31-1\n\n // chunk #1\n 5,\n 11,\n 23,\n 47,\n 97,\n 197,\n 397,\n 797,\n 1597,\n 3203,\n 6421,\n 12853,\n 25717,\n 51437,\n 102877,\n 205759,\n 411527,\n 823117,\n 1646237,\n 3292489,\n 6584983,\n 13169977,\n 26339969,\n 52679969,\n 105359939,\n 210719881,\n 421439783,\n 842879579,\n 1685759167,\n\n // chunk #2\n 433,\n 877,\n 1759,\n 3527,\n 7057,\n 14143,\n 28289,\n 56591,\n 113189,\n 226379,\n 452759,\n 905551,\n 1811107,\n 3622219,\n 7244441,\n 14488931,\n 28977863,\n 57955739,\n 115911563,\n 231823147,\n 463646329,\n 927292699,\n 1854585413,\n\n // chunk #3\n 953,\n 1907,\n 3821,\n 7643,\n 15287,\n 30577,\n 61169,\n 122347,\n 244703,\n 489407,\n 978821,\n 1957651,\n 3915341,\n 7830701,\n 15661423,\n 31322867,\n 62645741,\n 125291483,\n 250582987,\n 501165979,\n 1002331963,\n 2004663929,\n\n // chunk #4\n 1039,\n 2081,\n 4177,\n 8363,\n 16729,\n 33461,\n 66923,\n 133853,\n 267713,\n 535481,\n 1070981,\n 2141977,\n 4283963,\n 8567929,\n 17135863,\n 34271747,\n 68543509,\n 137087021,\n 274174111,\n 548348231,\n 1096696463,\n\n // chunk #5\n 31,\n 67,\n 137,\n 277,\n 557,\n 1117,\n 2237,\n 4481,\n 8963,\n 17929,\n 35863,\n 71741,\n 143483,\n 286973,\n 573953,\n 1147921,\n 2295859,\n 4591721,\n 9183457,\n 18366923,\n 36733847,\n 73467739,\n 146935499,\n 293871013,\n 587742049,\n 1175484103,\n\n // chunk #6\n 599,\n 1201,\n 2411,\n 4831,\n 9677,\n 19373,\n 38747,\n 77509,\n 155027,\n 310081,\n 620171,\n 1240361,\n 2480729,\n 4961459,\n 9922933,\n 19845871,\n 39691759,\n 79383533,\n 158767069,\n 317534141,\n 635068283,\n 1270136683,\n\n // chunk #7\n 311,\n 631,\n 1277,\n 2557,\n 5119,\n 10243,\n 20507,\n 41017,\n 82037,\n 164089,\n 328213,\n 656429,\n 1312867,\n 2625761,\n 5251529,\n 10503061,\n 21006137,\n 42012281,\n 84024581,\n 168049163,\n 336098327,\n 672196673,\n 1344393353,\n\n // chunk #8\n 3,\n 7,\n 17,\n 37,\n 79,\n 163,\n 331,\n 673,\n 1361,\n 2729,\n 5471,\n 10949,\n 21911,\n 43853,\n 87719,\n 175447,\n 350899,\n 701819,\n 1403641,\n 2807303,\n 5614657,\n 11229331,\n 22458671,\n 44917381,\n 89834777,\n 179669557,\n 359339171,\n 718678369,\n 1437356741,\n\n // chunk #9\n 43,\n 89,\n 179,\n 359,\n 719,\n 1439,\n 2879,\n 5779,\n 11579,\n 23159,\n 46327,\n 92657,\n 185323,\n 370661,\n 741337,\n 1482707,\n 2965421,\n 5930887,\n 11861791,\n 23723597,\n 47447201,\n 94894427,\n 189788857,\n 379577741,\n 759155483,\n 1518310967,\n\n // chunk #10\n 379,\n 761,\n 1523,\n 3049,\n 6101,\n 12203,\n 24407,\n 48817,\n 97649,\n 195311,\n 390647,\n 781301,\n 1562611,\n 3125257,\n 6250537,\n 12501169,\n 25002389,\n 50004791,\n 100009607,\n 200019221,\n 400038451,\n 800076929,\n 1600153859,\n\n // chunk #11\n 13,\n 29,\n 59,\n 127,\n 257,\n 521,\n 1049,\n 2099,\n 4201,\n 8419,\n 16843,\n 33703,\n 67409,\n 134837,\n 269683,\n 539389,\n 1078787,\n 2157587,\n 4315183,\n 8630387,\n 17260781,\n 34521589,\n 69043189,\n 138086407,\n 276172823,\n 552345671,\n 1104691373,\n\n // chunk #12\n 19,\n 41,\n 83,\n 167,\n 337,\n 677,\n 1361,\n 2729,\n 5471,\n 10949,\n 21911,\n 43853,\n 87719,\n 175447,\n 350899,\n 701819,\n 1403641,\n 2807303,\n 5614657,\n 11229331,\n 22458671,\n 44917381,\n 89834777,\n 179669557,\n 359339171,\n 718678369,\n 1437356741,\n\n // chunk #13\n 53,\n 107,\n 223,\n 449,\n 907,\n 1823,\n 3659,\n 7321,\n 14653,\n 29311,\n 58631,\n 117269,\n 234539,\n 469099,\n 938207,\n 1876417,\n 3752839,\n 7505681,\n 15011389,\n 30022781,\n 60045577,\n 120091177,\n 240182359,\n 480364727,\n 960729461,\n 1921458943\n];\n\nprimeNumbers.sort(ascending);\n\nexport function nextPrime(value) {\n let index = binarySearch(primeNumbers, value, ascending);\n if (index < 0) {\n index = ~index;\n }\n return primeNumbers[index];\n}\n","import { largestPrime, nextPrime } from './primeFinder';\n\nconst FREE = 0;\nconst FULL = 1;\nconst REMOVED = 2;\n\nconst defaultInitialCapacity = 150;\nconst defaultMinLoadFactor = 1 / 6;\nconst defaultMaxLoadFactor = 2 / 3;\n\nexport default class HashTable {\n constructor(options = {}) {\n if (options instanceof HashTable) {\n this.table = options.table.slice();\n this.values = options.values.slice();\n this.state = options.state.slice();\n this.minLoadFactor = options.minLoadFactor;\n this.maxLoadFactor = options.maxLoadFactor;\n this.distinct = options.distinct;\n this.freeEntries = options.freeEntries;\n this.lowWaterMark = options.lowWaterMark;\n this.highWaterMark = options.maxLoadFactor;\n return;\n }\n\n const initialCapacity =\n options.initialCapacity === undefined\n ? defaultInitialCapacity\n : options.initialCapacity;\n if (initialCapacity < 0) {\n throw new RangeError(\n `initial capacity must not be less than zero: ${initialCapacity}`\n );\n }\n\n const minLoadFactor =\n options.minLoadFactor === undefined\n ? defaultMinLoadFactor\n : options.minLoadFactor;\n const maxLoadFactor =\n options.maxLoadFactor === undefined\n ? defaultMaxLoadFactor\n : options.maxLoadFactor;\n if (minLoadFactor < 0 || minLoadFactor >= 1) {\n throw new RangeError(`invalid minLoadFactor: ${minLoadFactor}`);\n }\n if (maxLoadFactor <= 0 || maxLoadFactor >= 1) {\n throw new RangeError(`invalid maxLoadFactor: ${maxLoadFactor}`);\n }\n if (minLoadFactor >= maxLoadFactor) {\n throw new RangeError(\n `minLoadFactor (${minLoadFactor}) must be smaller than maxLoadFactor (${maxLoadFactor})`\n );\n }\n\n let capacity = initialCapacity;\n // User wants to put at least capacity elements. We need to choose the size based on the maxLoadFactor to\n // avoid the need to rehash before this capacity is reached.\n // actualCapacity * maxLoadFactor >= capacity\n capacity = (capacity / maxLoadFactor) | 0;\n capacity = nextPrime(capacity);\n if (capacity === 0) capacity = 1;\n\n this.table = newArray(capacity);\n this.values = newArray(capacity);\n this.state = newArray(capacity);\n\n this.minLoadFactor = minLoadFactor;\n if (capacity === largestPrime) {\n this.maxLoadFactor = 1;\n } else {\n this.maxLoadFactor = maxLoadFactor;\n }\n\n this.distinct = 0;\n this.freeEntries = capacity;\n\n this.lowWaterMark = 0;\n this.highWaterMark = chooseHighWaterMark(capacity, this.maxLoadFactor);\n }\n\n clone() {\n return new HashTable(this);\n }\n\n get size() {\n return this.distinct;\n }\n\n get(key) {\n const i = this.indexOfKey(key);\n if (i < 0) return 0;\n return this.values[i];\n }\n\n set(key, value) {\n let i = this.indexOfInsertion(key);\n if (i < 0) {\n i = -i - 1;\n this.values[i] = value;\n return false;\n }\n\n if (this.distinct > this.highWaterMark) {\n const newCapacity = chooseGrowCapacity(\n this.distinct + 1,\n this.minLoadFactor,\n this.maxLoadFactor\n );\n this.rehash(newCapacity);\n return this.set(key, value);\n }\n\n this.table[i] = key;\n this.values[i] = value;\n if (this.state[i] === FREE) this.freeEntries--;\n this.state[i] = FULL;\n this.distinct++;\n\n if (this.freeEntries < 1) {\n const newCapacity = chooseGrowCapacity(\n this.distinct + 1,\n this.minLoadFactor,\n this.maxLoadFactor\n );\n this.rehash(newCapacity);\n }\n\n return true;\n }\n\n remove(key, noRehash) {\n const i = this.indexOfKey(key);\n if (i < 0) return false;\n\n this.state[i] = REMOVED;\n this.distinct--;\n\n if (!noRehash) this.maybeShrinkCapacity();\n\n return true;\n }\n\n delete(key, noRehash) {\n const i = this.indexOfKey(key);\n if (i < 0) return false;\n\n this.state[i] = FREE;\n this.distinct--;\n\n if (!noRehash) this.maybeShrinkCapacity();\n\n return true;\n }\n\n maybeShrinkCapacity() {\n if (this.distinct < this.lowWaterMark) {\n const newCapacity = chooseShrinkCapacity(\n this.distinct,\n this.minLoadFactor,\n this.maxLoadFactor\n );\n this.rehash(newCapacity);\n }\n }\n\n containsKey(key) {\n return this.indexOfKey(key) >= 0;\n }\n\n indexOfKey(key) {\n const table = this.table;\n const state = this.state;\n const length = this.table.length;\n\n const hash = key & 0x7fffffff;\n let i = hash % length;\n let decrement = hash % (length - 2);\n if (decrement === 0) decrement = 1;\n\n while (state[i] !== FREE && (state[i] === REMOVED || table[i] !== key)) {\n i -= decrement;\n if (i < 0) i += length;\n }\n\n if (state[i] === FREE) return -1;\n return i;\n }\n\n containsValue(value) {\n return this.indexOfValue(value) >= 0;\n }\n\n indexOfValue(value) {\n const values = this.values;\n const state = this.state;\n\n for (var i = 0; i < state.length; i++) {\n if (state[i] === FULL && values[i] === value) {\n return i;\n }\n }\n\n return -1;\n }\n\n indexOfInsertion(key) {\n const table = this.table;\n const state = this.state;\n const length = table.length;\n\n const hash = key & 0x7fffffff;\n let i = hash % length;\n let decrement = hash % (length - 2);\n if (decrement === 0) decrement = 1;\n\n while (state[i] === FULL && table[i] !== key) {\n i -= decrement;\n if (i < 0) i += length;\n }\n\n if (state[i] === REMOVED) {\n const j = i;\n while (state[i] !== FREE && (state[i] === REMOVED || table[i] !== key)) {\n i -= decrement;\n if (i < 0) i += length;\n }\n if (state[i] === FREE) i = j;\n }\n\n if (state[i] === FULL) {\n return -i - 1;\n }\n\n return i;\n }\n\n ensureCapacity(minCapacity) {\n if (this.table.length < minCapacity) {\n const newCapacity = nextPrime(minCapacity);\n this.rehash(newCapacity);\n }\n }\n\n rehash(newCapacity) {\n const oldCapacity = this.table.length;\n\n if (newCapacity <= this.distinct) throw new Error('Unexpected');\n\n const oldTable = this.table;\n const oldValues = this.values;\n const oldState = this.state;\n\n const newTable = newArray(newCapacity);\n const newValues = newArray(newCapacity);\n const newState = newArray(newCapacity);\n\n this.lowWaterMark = chooseLowWaterMark(newCapacity, this.minLoadFactor);\n this.highWaterMark = chooseHighWaterMark(newCapacity, this.maxLoadFactor);\n\n this.table = newTable;\n this.values = newValues;\n this.state = newState;\n this.freeEntries = newCapacity - this.distinct;\n\n for (var i = 0; i < oldCapacity; i++) {\n if (oldState[i] === FULL) {\n var element = oldTable[i];\n var index = this.indexOfInsertion(element);\n newTable[index] = element;\n newValues[index] = oldValues[i];\n newState[index] = FULL;\n }\n }\n }\n\n forEachKey(callback) {\n for (var i = 0; i < this.state.length; i++) {\n if (this.state[i] === FULL) {\n if (!callback(this.table[i])) return false;\n }\n }\n return true;\n }\n\n forEachValue(callback) {\n for (var i = 0; i < this.state.length; i++) {\n if (this.state[i] === FULL) {\n if (!callback(this.values[i])) return false;\n }\n }\n return true;\n }\n\n forEachPair(callback) {\n for (var i = 0; i < this.state.length; i++) {\n if (this.state[i] === FULL) {\n if (!callback(this.table[i], this.values[i])) return false;\n }\n }\n return true;\n }\n}\n\nfunction chooseLowWaterMark(capacity, minLoad) {\n return (capacity * minLoad) | 0;\n}\n\nfunction chooseHighWaterMark(capacity, maxLoad) {\n return Math.min(capacity - 2, (capacity * maxLoad) | 0);\n}\n\nfunction chooseGrowCapacity(size, minLoad, maxLoad) {\n return nextPrime(\n Math.max(size + 1, ((4 * size) / (3 * minLoad + maxLoad)) | 0)\n );\n}\n\nfunction chooseShrinkCapacity(size, minLoad, maxLoad) {\n return nextPrime(\n Math.max(size + 1, ((4 * size) / (minLoad + 3 * maxLoad)) | 0)\n );\n}\n\nfunction newArray(size) {\n return Array(size).fill(0);\n}\n","import HashTable from 'ml-hash-table';\n\nexport class SparseMatrix {\n constructor(rows, columns, options = {}) {\n if (rows instanceof SparseMatrix) {\n // clone\n const other = rows;\n this._init(\n other.rows,\n other.columns,\n other.elements.clone(),\n other.threshold\n );\n return;\n }\n\n if (Array.isArray(rows)) {\n const matrix = rows;\n rows = matrix.length;\n options = columns || {};\n columns = matrix[0].length;\n this._init(rows, columns, new HashTable(options), options.threshold);\n for (var i = 0; i < rows; i++) {\n for (var j = 0; j < columns; j++) {\n var value = matrix[i][j];\n if (this.threshold && Math.abs(value) < this.threshold) value = 0;\n if (value !== 0) {\n this.elements.set(i * columns + j, matrix[i][j]);\n }\n }\n }\n } else {\n this._init(rows, columns, new HashTable(options), options.threshold);\n }\n }\n\n _init(rows, columns, elements, threshold) {\n this.rows = rows;\n this.columns = columns;\n this.elements = elements;\n this.threshold = threshold || 0;\n }\n\n static eye(rows = 1, columns = rows) {\n const min = Math.min(rows, columns);\n const matrix = new SparseMatrix(rows, columns, { initialCapacity: min });\n for (var i = 0; i < min; i++) {\n matrix.set(i, i, 1);\n }\n return matrix;\n }\n\n clone() {\n return new SparseMatrix(this);\n }\n\n to2DArray() {\n const copy = new Array(this.rows);\n for (var i = 0; i < this.rows; i++) {\n copy[i] = new Array(this.columns);\n for (var j = 0; j < this.columns; j++) {\n copy[i][j] = this.get(i, j);\n }\n }\n return copy;\n }\n\n isSquare() {\n return this.rows === this.columns;\n }\n\n isSymmetric() {\n if (!this.isSquare()) return false;\n\n var symmetric = true;\n this.forEachNonZero((i, j, v) => {\n if (this.get(j, i) !== v) {\n symmetric = false;\n return false;\n }\n return v;\n });\n return symmetric;\n }\n\n /**\n * Search for the wither band in the main diagonals\n * @return {number}\n */\n bandWidth() {\n let min = this.columns;\n let max = -1;\n this.forEachNonZero((i, j, v) => {\n let diff = i - j;\n min = Math.min(min, diff);\n max = Math.max(max, diff);\n return v;\n });\n return max - min;\n }\n\n /**\n * Test if a matrix is consider banded using a threshold\n * @param {number} width\n * @return {boolean}\n */\n isBanded(width) {\n let bandWidth = this.bandWidth();\n return bandWidth <= width;\n }\n\n get cardinality() {\n return this.elements.size;\n }\n\n get size() {\n return this.rows * this.columns;\n }\n\n get(row, column) {\n return this.elements.get(row * this.columns + column);\n }\n\n set(row, column, value) {\n if (this.threshold && Math.abs(value) < this.threshold) value = 0;\n if (value === 0) {\n this.elements.remove(row * this.columns + column);\n } else {\n this.elements.set(row * this.columns + column, value);\n }\n return this;\n }\n\n mmul(other) {\n if (this.columns !== other.rows) {\n // eslint-disable-next-line no-console\n console.warn(\n 'Number of columns of left matrix are not equal to number of rows of right matrix.'\n );\n }\n\n const m = this.rows;\n const p = other.columns;\n\n const result = new SparseMatrix(m, p);\n this.forEachNonZero((i, j, v1) => {\n other.forEachNonZero((k, l, v2) => {\n if (j === k) {\n result.set(i, l, result.get(i, l) + v1 * v2);\n }\n return v2;\n });\n return v1;\n });\n return result;\n }\n\n kroneckerProduct(other) {\n const m = this.rows;\n const n = this.columns;\n const p = other.rows;\n const q = other.columns;\n\n const result = new SparseMatrix(m * p, n * q, {\n initialCapacity: this.cardinality * other.cardinality\n });\n this.forEachNonZero((i, j, v1) => {\n other.forEachNonZero((k, l, v2) => {\n result.set(p * i + k, q * j + l, v1 * v2);\n return v2;\n });\n return v1;\n });\n return result;\n }\n\n forEachNonZero(callback) {\n this.elements.forEachPair((key, value) => {\n const i = (key / this.columns) | 0;\n const j = key % this.columns;\n let r = callback(i, j, value);\n if (r === false) return false; // stop iteration\n if (this.threshold && Math.abs(r) < this.threshold) r = 0;\n if (r !== value) {\n if (r === 0) {\n this.elements.remove(key, true);\n } else {\n this.elements.set(key, r);\n }\n }\n return true;\n });\n this.elements.maybeShrinkCapacity();\n return this;\n }\n\n getNonZeros() {\n const cardinality = this.cardinality;\n const rows = new Array(cardinality);\n const columns = new Array(cardinality);\n const values = new Array(cardinality);\n var idx = 0;\n this.forEachNonZero((i, j, value) => {\n rows[idx] = i;\n columns[idx] = j;\n values[idx] = value;\n idx++;\n return value;\n });\n return { rows, columns, values };\n }\n\n setThreshold(newThreshold) {\n if (newThreshold !== 0 && newThreshold !== this.threshold) {\n this.threshold = newThreshold;\n this.forEachNonZero((i, j, v) => v);\n }\n return this;\n }\n\n /**\n * @return {SparseMatrix} - New transposed sparse matrix\n */\n transpose() {\n let trans = new SparseMatrix(this.columns, this.rows, {\n initialCapacity: this.cardinality\n });\n this.forEachNonZero((i, j, value) => {\n trans.set(j, i, value);\n return value;\n });\n return trans;\n }\n}\n\nSparseMatrix.prototype.klass = 'Matrix';\n\nSparseMatrix.identity = SparseMatrix.eye;\nSparseMatrix.prototype.tensorProduct = SparseMatrix.prototype.kroneckerProduct;\n\n/*\n Add dynamically instance and static methods for mathematical operations\n */\n\nvar inplaceOperator = `\n(function %name%(value) {\n if (typeof value === 'number') return this.%name%S(value);\n return this.%name%M(value);\n})\n`;\n\nvar inplaceOperatorScalar = `\n(function %name%S(value) {\n this.forEachNonZero((i, j, v) => v %op% value);\n return this;\n})\n`;\n\nvar inplaceOperatorMatrix = `\n(function %name%M(matrix) {\n matrix.forEachNonZero((i, j, v) => {\n this.set(i, j, this.get(i, j) %op% v);\n return v;\n });\n return this;\n})\n`;\n\nvar staticOperator = `\n(function %name%(matrix, value) {\n var newMatrix = new SparseMatrix(matrix);\n return newMatrix.%name%(value);\n})\n`;\n\nvar inplaceMethod = `\n(function %name%() {\n this.forEachNonZero((i, j, v) => %method%(v));\n return this;\n})\n`;\n\nvar staticMethod = `\n(function %name%(matrix) {\n var newMatrix = new SparseMatrix(matrix);\n return newMatrix.%name%();\n})\n`;\n\nconst operators = [\n // Arithmetic operators\n ['+', 'add'],\n ['-', 'sub', 'subtract'],\n ['*', 'mul', 'multiply'],\n ['/', 'div', 'divide'],\n ['%', 'mod', 'modulus'],\n // Bitwise operators\n ['&', 'and'],\n ['|', 'or'],\n ['^', 'xor'],\n ['<<', 'leftShift'],\n ['>>', 'signPropagatingRightShift'],\n ['>>>', 'rightShift', 'zeroFillRightShift']\n];\n\nfor (const operator of operators) {\n for (let i = 1; i < operator.length; i++) {\n SparseMatrix.prototype[operator[i]] = eval(\n fillTemplateFunction(inplaceOperator, {\n name: operator[i],\n op: operator[0]\n })\n );\n SparseMatrix.prototype[`${operator[i]}S`] = eval(\n fillTemplateFunction(inplaceOperatorScalar, {\n name: `${operator[i]}S`,\n op: operator[0]\n })\n );\n SparseMatrix.prototype[`${operator[i]}M`] = eval(\n fillTemplateFunction(inplaceOperatorMatrix, {\n name: `${operator[i]}M`,\n op: operator[0]\n })\n );\n\n SparseMatrix[operator[i]] = eval(\n fillTemplateFunction(staticOperator, { name: operator[i] })\n );\n }\n}\n\nvar methods = [['~', 'not']];\n\n[\n 'abs',\n 'acos',\n 'acosh',\n 'asin',\n 'asinh',\n 'atan',\n 'atanh',\n 'cbrt',\n 'ceil',\n 'clz32',\n 'cos',\n 'cosh',\n 'exp',\n 'expm1',\n 'floor',\n 'fround',\n 'log',\n 'log1p',\n 'log10',\n 'log2',\n 'round',\n 'sign',\n 'sin',\n 'sinh',\n 'sqrt',\n 'tan',\n 'tanh',\n 'trunc'\n].forEach(function (mathMethod) {\n methods.push([`Math.${mathMethod}`, mathMethod]);\n});\n\nfor (const method of methods) {\n for (let i = 1; i < method.length; i++) {\n SparseMatrix.prototype[method[i]] = eval(\n fillTemplateFunction(inplaceMethod, {\n name: method[i],\n method: method[0]\n })\n );\n SparseMatrix[method[i]] = eval(\n fillTemplateFunction(staticMethod, { name: method[i] })\n );\n }\n}\n\nfunction fillTemplateFunction(template, values) {\n for (const i in values) {\n template = template.replace(new RegExp(`%${i}%`, 'g'), values[i]);\n }\n return template;\n}\n","export default function additiveSymmetric(a, b) {\n var i = 0;\n var ii = a.length;\n var d = 0;\n for (; i < ii; i++) {\n d += ((a[i] - b[i]) * (a[i] - b[i]) * (a[i] + b[i])) / (a[i] * b[i]);\n }\n return 2 * d;\n}\n","export default function avg(a, b) {\n var ii = a.length;\n var max = 0;\n var ans = 0;\n var aux = 0;\n for (var i = 0; i < ii; i++) {\n aux = Math.abs(a[i] - b[i]);\n ans += aux;\n if (max < aux) {\n max = aux;\n }\n }\n return (max + ans) / 2;\n}\n","export default function bhattacharyya(a, b) {\n var ii = a.length;\n var ans = 0;\n for (var i = 0; i < ii; i++) {\n ans += Math.sqrt(a[i] * b[i]);\n }\n return -Math.log(ans);\n}\n","export default function canberra(a, b) {\n var ii = a.length;\n var ans = 0;\n for (var i = 0; i < ii; i++) {\n ans += Math.abs(a[i] - b[i]) / (a[i] + b[i]);\n }\n return ans;\n}\n","export default function chebyshev(a, b) {\n var ii = a.length;\n var max = 0;\n var aux = 0;\n for (var i = 0; i < ii; i++) {\n aux = Math.abs(a[i] - b[i]);\n if (max < aux) {\n max = aux;\n }\n }\n return max;\n}\n","export default function clark(a, b) {\n var i = 0;\n var ii = a.length;\n var d = 0;\n for (; i < ii; i++) {\n d += Math.sqrt(\n ((a[i] - b[i]) * (a[i] - b[i])) / ((a[i] + b[i]) * (a[i] + b[i]))\n );\n }\n return 2 * d;\n}\n","export default function czekanowskiSimilarity(a, b) {\n var up = 0;\n var down = 0;\n for (var i = 0; i < a.length; i++) {\n up += Math.min(a[i], b[i]);\n down += a[i] + b[i];\n }\n return (2 * up) / down;\n}\n","import czekanowskiSimilarity from '../similarities/czekanowski';\n\nexport default function czekanowskiDistance(a, b) {\n return 1 - czekanowskiSimilarity(a, b);\n}\n","export default function dice(a, b) {\n var ii = a.length;\n var p = 0;\n var q1 = 0;\n var q2 = 0;\n for (var i = 0; i < ii; i++) {\n p += a[i] * a[i];\n q1 += b[i] * b[i];\n q2 += (a[i] - b[i]) * (a[i] - b[i]);\n }\n return q2 / (p + q1);\n}\n","export default function divergence(a, b) {\n var i = 0;\n var ii = a.length;\n var d = 0;\n for (; i < ii; i++) {\n d += ((a[i] - b[i]) * (a[i] - b[i])) / ((a[i] + b[i]) * (a[i] + b[i]));\n }\n return 2 * d;\n}\n","export default function fidelity(a, b) {\n var ii = a.length;\n var ans = 0;\n for (var i = 0; i < ii; i++) {\n ans += Math.sqrt(a[i] * b[i]);\n }\n return ans;\n}\n","export default function gower(a, b) {\n var ii = a.length;\n var ans = 0;\n for (var i = 0; i < ii; i++) {\n ans += Math.abs(a[i] - b[i]);\n }\n return ans / ii;\n}\n","export default function harmonicMean(a, b) {\n var ii = a.length;\n var ans = 0;\n for (var i = 0; i < ii; i++) {\n ans += (a[i] * b[i]) / (a[i] + b[i]);\n }\n return 2 * ans;\n}\n","export default function hellinger(a, b) {\n var ii = a.length;\n var ans = 0;\n for (var i = 0; i < ii; i++) {\n ans += Math.sqrt(a[i] * b[i]);\n }\n return 2 * Math.sqrt(1 - ans);\n}\n","export default function innerProduct(a, b) {\n var ii = a.length;\n var ans = 0;\n for (var i = 0; i < ii; i++) {\n ans += a[i] * b[i];\n }\n return ans;\n}\n","export default function intersection(a, b) {\n var ii = a.length;\n var ans = 0;\n for (var i = 0; i < ii; i++) {\n ans += Math.min(a[i], b[i]);\n }\n return 1 - ans;\n}\n","export default function jaccard(a, b) {\n var ii = a.length;\n var p1 = 0;\n var p2 = 0;\n var q1 = 0;\n var q2 = 0;\n for (var i = 0; i < ii; i++) {\n p1 += a[i] * b[i];\n p2 += a[i] * a[i];\n q1 += b[i] * b[i];\n q2 += (a[i] - b[i]) * (a[i] - b[i]);\n }\n return q2 / (p2 + q1 - p1);\n}\n","export default function jeffreys(a, b) {\n var ii = a.length;\n var ans = 0;\n for (var i = 0; i < ii; i++) {\n ans += (a[i] - b[i]) * Math.log(a[i] / b[i]);\n }\n return ans;\n}\n","export default function jensenDifference(a, b) {\n var ii = a.length;\n var ans = 0;\n for (var i = 0; i < ii; i++) {\n ans +=\n (a[i] * Math.log(a[i]) + b[i] * Math.log(b[i])) / 2 -\n ((a[i] + b[i]) / 2) * Math.log((a[i] + b[i]) / 2);\n }\n return ans;\n}\n","export default function jensenShannon(a, b) {\n var ii = a.length;\n var p = 0;\n var q = 0;\n for (var i = 0; i < ii; i++) {\n p += a[i] * Math.log((2 * a[i]) / (a[i] + b[i]));\n q += b[i] * Math.log((2 * b[i]) / (a[i] + b[i]));\n }\n return (p + q) / 2;\n}\n","export default function kdivergence(a, b) {\n var ii = a.length;\n var ans = 0;\n for (var i = 0; i < ii; i++) {\n ans += a[i] * Math.log((2 * a[i]) / (a[i] + b[i]));\n }\n return ans;\n}\n","export default function kulczynski(a, b) {\n var ii = a.length;\n var up = 0;\n var down = 0;\n for (var i = 0; i < ii; i++) {\n up += Math.abs(a[i] - b[i]);\n down += Math.min(a[i], b[i]);\n }\n return up / down;\n}\n","export default function kullbackLeibler(a, b) {\n var ii = a.length;\n var ans = 0;\n for (var i = 0; i < ii; i++) {\n ans += a[i] * Math.log(a[i] / b[i]);\n }\n return ans;\n}\n","export default function kumarHassebrook(a, b) {\n var ii = a.length;\n var p = 0;\n var p2 = 0;\n var q2 = 0;\n for (var i = 0; i < ii; i++) {\n p += a[i] * b[i];\n p2 += a[i] * a[i];\n q2 += b[i] * b[i];\n }\n return p / (p2 + q2 - p);\n}\n","export default function kumarJohnson(a, b) {\n var ii = a.length;\n var ans = 0;\n for (var i = 0; i < ii; i++) {\n ans +=\n Math.pow(a[i] * a[i] - b[i] * b[i], 2) / (2 * Math.pow(a[i] * b[i], 1.5));\n }\n return ans;\n}\n","export default function lorentzian(a, b) {\n var ii = a.length;\n var ans = 0;\n for (var i = 0; i < ii; i++) {\n ans += Math.log(Math.abs(a[i] - b[i]) + 1);\n }\n return ans;\n}\n","export default function manhattan(a, b) {\n var i = 0;\n var ii = a.length;\n var d = 0;\n for (; i < ii; i++) {\n d += Math.abs(a[i] - b[i]);\n }\n return d;\n}\n","export default function matusita(a, b) {\n var ii = a.length;\n var ans = 0;\n for (var i = 0; i < ii; i++) {\n ans += Math.sqrt(a[i] * b[i]);\n }\n return Math.sqrt(2 - 2 * ans);\n}\n","export default function minkowski(a, b, p) {\n var i = 0;\n var ii = a.length;\n var d = 0;\n for (; i < ii; i++) {\n d += Math.pow(Math.abs(a[i] - b[i]), p);\n }\n return Math.pow(d, 1 / p);\n}\n","export default function motyka(a, b) {\n var ii = a.length;\n var up = 0;\n var down = 0;\n for (var i = 0; i < ii; i++) {\n up += Math.min(a[i], b[i]);\n down += a[i] + b[i];\n }\n return 1 - up / down;\n}\n","export default function neyman(a, b) {\n var i = 0;\n var ii = a.length;\n var d = 0;\n for (; i < ii; i++) {\n d += ((a[i] - b[i]) * (a[i] - b[i])) / a[i];\n }\n return d;\n}\n","export default function pearson(a, b) {\n var i = 0;\n var ii = a.length;\n var d = 0;\n for (; i < ii; i++) {\n d += ((a[i] - b[i]) * (a[i] - b[i])) / b[i];\n }\n return d;\n}\n","export default function probabilisticSymmetric(a, b) {\n var i = 0;\n var ii = a.length;\n var d = 0;\n for (; i < ii; i++) {\n d += ((a[i] - b[i]) * (a[i] - b[i])) / (a[i] + b[i]);\n }\n return 2 * d;\n}\n","export default function ruzicka(a, b) {\n var ii = a.length;\n var up = 0;\n var down = 0;\n for (var i = 0; i < ii; i++) {\n up += Math.min(a[i], b[i]);\n down += Math.max(a[i], b[i]);\n }\n return up / down;\n}\n","export default function soergel(a, b) {\n var ii = a.length;\n var up = 0;\n var down = 0;\n for (var i = 0; i < ii; i++) {\n up += Math.abs(a[i] - b[i]);\n down += Math.max(a[i], b[i]);\n }\n return up / down;\n}\n","export default function sorensen(a, b) {\n var ii = a.length;\n var up = 0;\n var down = 0;\n for (var i = 0; i < ii; i++) {\n up += Math.abs(a[i] - b[i]);\n down += a[i] + b[i];\n }\n return up / down;\n}\n","export default function squared(a, b) {\n var i = 0;\n var ii = a.length;\n var d = 0;\n for (; i < ii; i++) {\n d += ((a[i] - b[i]) * (a[i] - b[i])) / (a[i] + b[i]);\n }\n return d;\n}\n","export default function squaredChord(a, b) {\n var ii = a.length;\n var ans = 0;\n for (var i = 0; i < ii; i++) {\n ans +=\n (Math.sqrt(a[i]) - Math.sqrt(b[i])) * (Math.sqrt(a[i]) - Math.sqrt(b[i]));\n }\n return ans;\n}\n","export default function taneja(a, b) {\n var ii = a.length;\n var ans = 0;\n for (var i = 0; i < ii; i++) {\n ans +=\n ((a[i] + b[i]) / 2) *\n Math.log((a[i] + b[i]) / (2 * Math.sqrt(a[i] * b[i])));\n }\n return ans;\n}\n","export default function tanimoto(a, b, bitvector) {\n if (bitvector) {\n var inter = 0;\n var union = 0;\n for (var j = 0; j < a.length; j++) {\n inter += a[j] && b[j];\n union += a[j] || b[j];\n }\n if (union === 0) {\n return 1;\n }\n return inter / union;\n } else {\n var ii = a.length;\n var p = 0;\n var q = 0;\n var m = 0;\n for (var i = 0; i < ii; i++) {\n p += a[i];\n q += b[i];\n m += Math.min(a[i], b[i]);\n }\n return 1 - (p + q - 2 * m) / (p + q - m);\n }\n}\n","import tanimotoS from '../similarities/tanimoto';\n\nexport default function tanimoto(a, b, bitvector) {\n if (bitvector) {\n return 1 - tanimotoS(a, b, bitvector);\n } else {\n var ii = a.length;\n var p = 0;\n var q = 0;\n var m = 0;\n for (var i = 0; i < ii; i++) {\n p += a[i];\n q += b[i];\n m += Math.min(a[i], b[i]);\n }\n return (p + q - 2 * m) / (p + q - m);\n }\n}\n","export default function topsoe(a, b) {\n var ii = a.length;\n var ans = 0;\n for (var i = 0; i < ii; i++) {\n ans +=\n a[i] * Math.log((2 * a[i]) / (a[i] + b[i])) +\n b[i] * Math.log((2 * b[i]) / (a[i] + b[i]));\n }\n return ans;\n}\n","export default function waveHedges(a, b) {\n var ii = a.length;\n var ans = 0;\n for (var i = 0; i < ii; i++) {\n ans += 1 - Math.min(a[i], b[i]) / Math.max(a[i], b[i]);\n }\n return ans;\n}\n","import binarySearch from 'binary-search';\nimport { ascending } from 'num-sort';\n\n/**\n * Function that creates the tree\n * @param {Array>} spectrum\n * @param {object} [options]\n * @return {Tree|null}\n * left and right have the same structure than the parent,\n * or are null if they are leaves\n */\nexport function createTree(spectrum, options = {}) {\n var X = spectrum[0];\n const {\n minWindow = 0.16,\n threshold = 0.01,\n from = X[0],\n to = X[X.length - 1]\n } = options;\n\n return mainCreateTree(\n spectrum[0],\n spectrum[1],\n from,\n to,\n minWindow,\n threshold\n );\n}\n\nfunction mainCreateTree(X, Y, from, to, minWindow, threshold) {\n if (to - from < minWindow) {\n return null;\n }\n\n // search first point\n var start = binarySearch(X, from, ascending);\n if (start < 0) {\n start = ~start;\n }\n\n // stop at last point\n var sum = 0;\n var center = 0;\n for (var i = start; i < X.length; i++) {\n if (X[i] >= to) {\n break;\n }\n sum += Y[i];\n center += X[i] * Y[i];\n }\n\n if (sum < threshold) {\n return null;\n }\n\n center /= sum;\n if (center - from < 1e-6 || to - center < 1e-6) {\n return null;\n }\n if (center - from < minWindow / 4) {\n return mainCreateTree(X, Y, center, to, minWindow, threshold);\n } else {\n if (to - center < minWindow / 4) {\n return mainCreateTree(X, Y, from, center, minWindow, threshold);\n } else {\n return new Tree(\n sum,\n center,\n mainCreateTree(X, Y, from, center, minWindow, threshold),\n mainCreateTree(X, Y, center, to, minWindow, threshold)\n );\n }\n }\n}\n\nclass Tree {\n constructor(sum, center, left, right) {\n this.sum = sum;\n this.center = center;\n this.left = left;\n this.right = right;\n }\n}\n","import { createTree } from './createTree';\n\n/**\n * Similarity between two nodes\n * @param {Tree|Array>} a - tree A node\n * @param {Tree|Array>} b - tree B node\n * @param {object} [options]\n * @return {number} similarity measure between tree nodes\n */\nexport function getSimilarity(a, b, options = {}) {\n const { alpha = 0.1, beta = 0.33, gamma = 0.001 } = options;\n\n if (a === null || b === null) {\n return 0;\n }\n if (Array.isArray(a)) {\n a = createTree(a);\n }\n if (Array.isArray(b)) {\n b = createTree(b);\n }\n\n var C =\n (alpha * Math.min(a.sum, b.sum)) / Math.max(a.sum, b.sum) +\n (1 - alpha) * Math.exp(-gamma * Math.abs(a.center - b.center));\n\n return (\n beta * C +\n ((1 - beta) *\n (getSimilarity(a.left, b.left, options) +\n getSimilarity(a.right, b.right, options))) /\n 2\n );\n}\n","import { getSimilarity } from './getSimilarity';\n\nexport { createTree } from './createTree';\n\nexport function treeSimilarity(A, B, options = {}) {\n return getSimilarity(A, B, options);\n}\n\nexport function getFunction(options = {}) {\n return (A, B) => getSimilarity(A, B, options);\n}\n","export default function cosine(a, b) {\n var ii = a.length;\n var p = 0;\n var p2 = 0;\n var q2 = 0;\n for (var i = 0; i < ii; i++) {\n p += a[i] * b[i];\n p2 += a[i] * a[i];\n q2 += b[i] * b[i];\n }\n return p / (Math.sqrt(p2) * Math.sqrt(q2));\n}\n","import diceD from '../distances/dice';\n\nexport default function dice(a, b) {\n return 1 - diceD(a, b);\n}\n","import intersectionD from '../distances/intersection';\n\nexport default function intersection(a, b) {\n return 1 - intersectionD(a, b);\n}\n","import jaccardD from '../distances/jaccard';\n\nexport default function jaccard(a, b) {\n return 1 - jaccardD(a, b);\n}\n","import kulczynskiD from '../distances/kulczynski';\n\nexport default function kulczynski(a, b) {\n return 1 / kulczynskiD(a, b);\n}\n","import motykaD from '../distances/motyka';\n\nexport default function motyka(a, b) {\n return 1 - motykaD(a, b);\n}\n","import mean from 'ml-array-mean';\n\nimport cosine from './cosine';\n\nexport default function pearson(a, b) {\n var avgA = mean(a);\n var avgB = mean(b);\n\n var newA = new Array(a.length);\n var newB = new Array(b.length);\n for (var i = 0; i < newA.length; i++) {\n newA[i] = a[i] - avgA;\n newB[i] = b[i] - avgB;\n }\n\n return cosine(newA, newB);\n}\n","import squaredChordD from '../distances/squaredChord';\n\nexport default function squaredChord(a, b) {\n return 1 - squaredChordD(a, b);\n}\n","'use strict';\n\n// Accuracy\nexports.acc = pred => {\n const l = pred.cutoffs.length;\n const result = new Array(l);\n for (var i = 0; i < l; i++) {\n result[i] = (pred.tn[i] + pred.tp[i]) / (l - 1);\n }\n return result;\n};\n\n// Error rate\nexports.err = pred => {\n const l = pred.cutoffs.length;\n const result = new Array(l);\n for (var i = 0; i < l; i++) {\n result[i] = (pred.fn[i] + pred.fp[i] / (l - 1));\n }\n return result;\n};\n\n// False positive rate\nexports.fpr = pred => {\n const l = pred.cutoffs.length;\n const result = new Array(l);\n for (var i = 0; i < l; i++) {\n result[i] = pred.fp[i] / pred.nNeg;\n }\n return result;\n};\n\n// True positive rate\nexports.tpr = pred => {\n const l = pred.cutoffs.length;\n const result = new Array(l);\n for (var i = 0; i < l; i++) {\n result[i] = pred.tp[i] / pred.nPos;\n }\n return result;\n};\n\n// False negative rate\nexports.fnr = pred => {\n const l = pred.cutoffs.length;\n const result = new Array(l);\n for (var i = 0; i < l; i++) {\n result[i] = pred.fn[i] / pred.nPos;\n }\n return result;\n};\n\n// True negative rate\nexports.tnr = pred => {\n const l = pred.cutoffs.length;\n const result = new Array(l);\n for (var i = 0; i < l; i++) {\n result[i] = pred.tn[i] / pred.nNeg;\n }\n return result;\n};\n\n// Positive predictive value\nexports.ppv = pred => {\n const l = pred.cutoffs.length;\n const result = new Array(l);\n for (var i = 0; i < l; i++) {\n result[i] = (pred.fp[i] + pred.tp[i] !== 0) ? (pred.tp[i] / (pred.fp[i] + pred.tp[i])) : 0;\n }\n return result;\n};\n\n// Negative predictive value\nexports.npv = pred => {\n const l = pred.cutoffs.length;\n const result = new Array(l);\n for (var i = 0; i < l; i++) {\n result[i] = (pred.fn[i] + pred.tn[i] !== 0) ? (pred.tn[i] / (pred.fn[i] + pred.tn[i])) : 0;\n }\n return result;\n};\n\n// Prediction conditioned fallout\nexports.pcfall = pred => {\n const l = pred.cutoffs.length;\n const result = new Array(l);\n for (var i = 0; i < l; i++) {\n result[i] = (pred.fp[i] + pred.tp[i] !== 0) ? 1 - (pred.tp[i] / (pred.fp[i] + pred.tp[i])) : 1;\n }\n return result;\n};\n\n// Prediction conditioned miss\nexports.pcmiss = pred => {\n const l = pred.cutoffs.length;\n const result = new Array(l);\n for (var i = 0; i < l; i++) {\n result[i] = (pred.fn[i] + pred.tn[i] !== 0) ? 1 - (pred.tn[i] / (pred.fn[i] + pred.tn[i])) : 1;\n }\n return result;\n};\n\n// Lift value\nexports.lift = pred => {\n const l = pred.cutoffs.length;\n const result = new Array(l);\n for (var i = 0; i < l; i++) {\n result[i] = (pred.nPosPred[i] !== 0) ? ((pred.tp[i] / pred.nPos) / (pred.nPosPred[i] / pred.nSamples)) : 0;\n }\n return result;\n};\n\n// Rate of positive predictions\nexports.rpp = pred => {\n const l = pred.cutoffs.length;\n const result = new Array(l);\n for (var i = 0; i < l; i++) {\n result[i] = pred.nPosPred[i] / pred.nSamples;\n }\n return result;\n};\n\n// Rate of negative predictions\nexports.rnp = pred => {\n const l = pred.cutoffs.length;\n const result = new Array(l);\n for (var i = 0; i < l; i++) {\n result[i] = pred.nNegPred[i] / pred.nSamples;\n }\n return result;\n};\n\n// Threshold\nexports.threshold = pred => {\n const clone = pred.cutoffs.slice();\n clone[0] = clone[1]; // Remove the infinite value\n return clone;\n};\n","'use strict';\n\nconst measures = require('./measures');\n\nclass Performance {\n /**\n *\n * @param prediction - The prediction matrix\n * @param target - The target matrix (values: truthy for same class, falsy for different class)\n * @param options\n *\n * @option all True if the entire matrix must be used. False to ignore the diagonal and lower part (default is false, for similarity/distance matrices)\n * @option max True if the max value corresponds to a perfect match (like in similarity matrices), false if it is the min value (default is false, like in distance matrices. All values will be multiplied by -1)\n */\n constructor(prediction, target, options) {\n options = options || {};\n if (prediction.length !== target.length || prediction[0].length !== target[0].length) {\n throw new Error('dimensions of prediction and target do not match');\n }\n const rows = prediction.length;\n const columns = prediction[0].length;\n const isDistance = !options.max;\n\n const predP = [];\n\n if (options.all) {\n for (var i = 0; i < rows; i++) {\n for (var j = 0; j < columns; j++) {\n predP.push({\n pred: prediction[i][j],\n targ: target[i][j]\n });\n }\n }\n } else {\n if (rows < 3 || rows !== columns) {\n throw new Error('When \"all\" option is false, the prediction matrix must be square and have at least 3 columns');\n }\n for (var i = 0; i < rows - 1; i++) {\n for (var j = i + 1; j < columns; j++) {\n predP.push({\n pred: prediction[i][j],\n targ: target[i][j]\n });\n }\n }\n }\n\n if (isDistance) {\n predP.sort((a, b) => a.pred - b.pred);\n } else {\n predP.sort((a, b) => b.pred - a.pred);\n }\n \n const cutoffs = this.cutoffs = [isDistance ? Number.MIN_VALUE : Number.MAX_VALUE];\n const fp = this.fp = [0];\n const tp = this.tp = [0];\n\n var nPos = 0;\n var nNeg = 0;\n\n var currentPred = predP[0].pred;\n var nTp = 0;\n var nFp = 0;\n for (var i = 0; i < predP.length; i++) {\n if (predP[i].pred !== currentPred) {\n cutoffs.push(currentPred);\n fp.push(nFp);\n tp.push(nTp);\n currentPred = predP[i].pred;\n }\n if (predP[i].targ) {\n nPos++;\n nTp++;\n } else {\n nNeg++;\n nFp++;\n }\n }\n cutoffs.push(currentPred);\n fp.push(nFp);\n tp.push(nTp);\n\n const l = cutoffs.length;\n const fn = this.fn = new Array(l);\n const tn = this.tn = new Array(l);\n const nPosPred = this.nPosPred = new Array(l);\n const nNegPred = this.nNegPred = new Array(l);\n\n for (var i = 0; i < l; i++) {\n fn[i] = nPos - tp[i];\n tn[i] = nNeg - fp[i];\n\n nPosPred[i] = tp[i] + fp[i];\n nNegPred[i] = tn[i] + fn[i];\n }\n\n this.nPos = nPos;\n this.nNeg = nNeg;\n this.nSamples = nPos + nNeg;\n }\n\n /**\n * Computes a measure from the prediction object.\n *\n * Many measures are available and can be combined :\n * To create a ROC curve, you need fpr and tpr\n * To create a DET curve, you need fnr and fpr\n * To create a Lift chart, you need rpp and lift\n *\n * Possible measures are : threshold (Threshold), acc (Accuracy), err (Error rate),\n * fpr (False positive rate), tpr (True positive rate), fnr (False negative rate), tnr (True negative rate), ppv (Positive predictive value),\n * npv (Negative predictive value), pcfall (Prediction-conditioned fallout), pcmiss (Prediction-conditioned miss), lift (Lift value), rpp (Rate of positive predictions), rnp (Rate of negative predictions)\n *\n * @param measure - The short name of the measure\n *\n * @return [number]\n */\n getMeasure(measure) {\n if (typeof measure !== 'string') {\n throw new Error('No measure specified');\n }\n if (!measures[measure]) {\n throw new Error(`The specified measure (${measure}) does not exist`);\n }\n return measures[measure](this);\n }\n\n /**\n * Returns the area under the ROC curve\n */\n getAURC() {\n const l = this.cutoffs.length;\n const x = new Array(l);\n const y = new Array(l);\n for (var i = 0; i < l; i++) {\n x[i] = this.fp[i] / this.nNeg;\n y[i] = this.tp[i] / this.nPos;\n }\n var auc = 0;\n for (i = 1; i < l; i++) {\n auc += 0.5 * (x[i] - x[i - 1]) * (y[i] + y[i - 1]);\n }\n return auc;\n }\n\n /**\n * Returns the area under the DET curve\n */\n getAUDC() {\n const l = this.cutoffs.length;\n const x = new Array(l);\n const y = new Array(l);\n for (var i = 0; i < l; i++) {\n x[i] = this.fn[i] / this.nPos;\n y[i] = this.fp[i] / this.nNeg;\n }\n var auc = 0;\n for (i = 1; i < l; i++) {\n auc += 0.5 * (x[i] + x[i - 1]) * (y[i] - y[i - 1]);\n }\n return auc;\n }\n\n getDistribution(options) {\n options = options || {};\n var cutLength = this.cutoffs.length;\n var cutLow = options.xMin || Math.floor(this.cutoffs[cutLength - 1] * 100) / 100;\n var cutHigh = options.xMax || Math.ceil(this.cutoffs[1] * 100) / 100;\n var interval = options.interval || Math.floor(((cutHigh - cutLow) / 20 * 10000000) - 1) / 10000000; // Trick to avoid the precision problem of float numbers\n\n var xLabels = [];\n var interValues = [];\n var intraValues = [];\n var interCumPercent = [];\n var intraCumPercent = [];\n\n var nTP = this.tp[cutLength - 1], currentTP = 0;\n var nFP = this.fp[cutLength - 1], currentFP = 0;\n\n for (var i = cutLow, j = (cutLength - 1); i <= cutHigh; i += interval) {\n while (this.cutoffs[j] < i)\n j--;\n\n xLabels.push(i);\n\n var thisTP = nTP - currentTP - this.tp[j];\n var thisFP = nFP - currentFP - this.fp[j];\n\n currentTP += thisTP;\n currentFP += thisFP;\n\n interValues.push(thisFP);\n intraValues.push(thisTP);\n\n interCumPercent.push(100 - (nFP - this.fp[j]) / nFP * 100);\n intraCumPercent.push(100 - (nTP - this.tp[j]) / nTP * 100);\n }\n\n return {\n xLabels: xLabels,\n interValues: interValues,\n intraValues: intraValues,\n interCumPercent: interCumPercent,\n intraCumPercent: intraCumPercent\n };\n }\n}\n\nPerformance.names = {\n acc: 'Accuracy',\n err: 'Error rate',\n fpr: 'False positive rate',\n tpr: 'True positive rate',\n fnr: 'False negative rate',\n tnr: 'True negative rate',\n ppv: 'Positive predictive value',\n npv: 'Negative predictive value',\n pcfall: 'Prediction-conditioned fallout',\n pcmiss: 'Prediction-conditioned miss',\n lift: 'Lift value',\n rpp: 'Rate of positive predictions',\n rnp: 'Rate of negative predictions',\n threshold: 'Threshold'\n};\n\nmodule.exports = Performance;\n","'use strict';\n\nvar defaultOptions = {\n size: 1,\n value: 0\n};\n\n/**\n * Case when the entry is an array\n * @param data\n * @param options\n * @returns {Array}\n */\nfunction arrayCase(data, options) {\n var len = data.length;\n if (typeof options.size === 'number') {\n options.size = [options.size, options.size];\n }\n\n var cond = len + options.size[0] + options.size[1];\n\n var output;\n if (options.output) {\n if (options.output.length !== cond) {\n throw new RangeError('Wrong output size');\n }\n output = options.output;\n } else {\n output = new Array(cond);\n }\n\n var i;\n if (options.value === 'circular') {\n for (i = 0; i < cond; i++) {\n if (i < options.size[0]) {\n output[i] = data[(len - (options.size[0] % len) + i) % len];\n } else if (i < options.size[0] + len) {\n output[i] = data[i - options.size[0]];\n } else {\n output[i] = data[(i - options.size[0]) % len];\n }\n }\n } else if (options.value === 'replicate') {\n for (i = 0; i < cond; i++) {\n if (i < options.size[0]) output[i] = data[0];\n else if (i < options.size[0] + len) output[i] = data[i - options.size[0]];\n else output[i] = data[len - 1];\n }\n } else if (options.value === 'symmetric') {\n if (options.size[0] > len || options.size[1] > len) {\n throw new RangeError(\n 'expanded value should not be bigger than the data length'\n );\n }\n for (i = 0; i < cond; i++) {\n if (i < options.size[0]) output[i] = data[options.size[0] - 1 - i];\n else if (i < options.size[0] + len) output[i] = data[i - options.size[0]];\n else output[i] = data[2 * len + options.size[0] - i - 1];\n }\n } else {\n for (i = 0; i < cond; i++) {\n if (i < options.size[0]) output[i] = options.value;\n else if (i < options.size[0] + len) output[i] = data[i - options.size[0]];\n else output[i] = options.value;\n }\n }\n\n return output;\n}\n\n/**\n * Case when the entry is a matrix\n * @param data\n * @param options\n * @returns {Array}\n */\nfunction matrixCase(data, options) {\n // var row = data.length;\n // var col = data[0].length;\n if (options.size[0] === undefined) {\n options.size = [options.size, options.size, options.size, options.size];\n }\n throw new Error('matrix not supported yet, sorry');\n}\n\n/**\n * Pads and array\n * @param {Array } data\n * @param {object} options\n */\nfunction padArray(data, options) {\n options = Object.assign({}, defaultOptions, options);\n if (Array.isArray(data)) {\n if (Array.isArray(data[0])) return matrixCase(data, options);\n else return arrayCase(data, options);\n } else {\n throw new TypeError('data should be an array');\n }\n}\n\nmodule.exports = padArray;\n","'use strict';\n\nconst { Matrix, MatrixTransposeView, inverse } = require('ml-matrix');\nconst padArray = require('ml-pad-array');\n\nconst defaultOptions = {\n windowSize: 5,\n derivative: 1,\n polynomial: 2,\n pad: 'none',\n padValue: 'replicate'\n};\n\n/**\n * Savitzky-Golay filter\n * @param {Array } data\n * @param {number} h\n * @param {Object} options\n * @returns {Array}\n */\nfunction SavitzkyGolay(data, h, options) {\n options = Object.assign({}, defaultOptions, options);\n if (\n options.windowSize % 2 === 0 ||\n options.windowSize < 5 ||\n !Number.isInteger(options.windowSize)\n ) {\n throw new RangeError(\n 'Invalid window size (should be odd and at least 5 integer number)'\n );\n }\n if (options.derivative < 0 || !Number.isInteger(options.derivative)) {\n throw new RangeError('Derivative should be a positive integer');\n }\n if (options.polynomial < 1 || !Number.isInteger(options.polynomial)) {\n throw new RangeError('Polynomial should be a positive integer');\n }\n\n var C, norm;\n var step = Math.floor(options.windowSize / 2);\n\n if (options.pad === 'pre') {\n data = padArray(data, { size: step, value: options.padValue });\n }\n\n var ans = new Array(data.length - 2 * step);\n\n if (\n options.windowSize === 5 &&\n options.polynomial === 2 &&\n (options.derivative === 1 || options.derivative === 2)\n ) {\n if (options.derivative === 1) {\n C = [-2, -1, 0, 1, 2];\n norm = 10;\n } else {\n C = [2, -1, -2, -1, 2];\n norm = 7;\n }\n } else {\n var J = Matrix.ones(options.windowSize, options.polynomial + 1);\n var inic = -(options.windowSize - 1) / 2;\n for (var i = 0; i < J.rows; i++) {\n for (var j = 0; j < J.columns; j++) {\n if (inic + 1 !== 0 || j !== 0) J.set(i, j, Math.pow(inic + i, j));\n }\n }\n var Jtranspose = new MatrixTransposeView(J);\n var Jinv = inverse(Jtranspose.mmul(J));\n C = Jinv.mmul(Jtranspose);\n C = C.getRow(options.derivative);\n norm = 1;\n }\n var det = norm * Math.pow(h, options.derivative);\n for (var k = step; k < data.length - step; k++) {\n var d = 0;\n for (var l = 0; l < C.length; l++) d += (C[l] * data[l + k - step]) / det;\n ans[k - step] = d;\n }\n\n if (options.pad === 'post') {\n ans = padArray(ans, { size: step, value: options.padValue });\n }\n\n return ans;\n}\n\nmodule.exports = SavitzkyGolay;\n","// auxiliary file to create the 256 look at table elements\n\nvar ans = new Array(256);\nfor (var i = 0; i < 256; i++) {\n var num = i;\n var c = 0;\n while (num) {\n num = num & (num - 1);\n c++;\n }\n ans[i] = c;\n}\n\nmodule.exports = ans;","'use strict';\n\nvar eightBits = require('./creator');\n\n/**\n * Count the number of true values in an array\n * @param {Array} arr\n * @return {number}\n */\nfunction count(arr) {\n var c = 0;\n for (var i = 0; i < arr.length; i++) {\n c += eightBits[arr[i] & 0xff] + eightBits[(arr[i] >> 8) & 0xff] + eightBits[(arr[i] >> 16) & 0xff] + eightBits[(arr[i] >> 24) & 0xff];\n }\n return c;\n}\n\n/**\n * Logical AND operation\n * @param {Array} arr1\n * @param {Array} arr2\n * @return {Array}\n */\nfunction and(arr1, arr2) {\n var ans = new Array(arr1.length);\n for (var i = 0; i < arr1.length; i++)\n ans[i] = arr1[i] & arr2[i];\n return ans;\n}\n\n/**\n * Logical OR operation\n * @param {Array} arr1\n * @param {Array} arr2\n * @return {Array}\n */\nfunction or(arr1, arr2) {\n var ans = new Array(arr1.length);\n for (var i = 0; i < arr1.length; i++)\n ans[i] = arr1[i] | arr2[i];\n return ans;\n}\n\n/**\n * Logical XOR operation\n * @param {Array} arr1\n * @param {Array} arr2\n * @return {Array}\n */\nfunction xor(arr1, arr2) {\n var ans = new Array(arr1.length);\n for (var i = 0; i < arr1.length; i++)\n ans[i] = arr1[i] ^ arr2[i];\n return ans;\n}\n\n/**\n * Logical NOT operation\n * @param {Array} arr\n * @return {Array}\n */\nfunction not(arr) {\n var ans = new Array(arr.length);\n for (var i = 0; i < ans.length; i++)\n ans[i] = ~arr[i];\n return ans;\n}\n\n/**\n * Gets the n value of array arr\n * @param {Array} arr\n * @param {number} n\n * @return {boolean}\n */\nfunction getBit(arr, n) {\n var index = n >> 5; // Same as Math.floor(n/32)\n var mask = 1 << (31 - n % 32);\n return Boolean(arr[index] & mask);\n}\n\n/**\n * Sets the n value of array arr to the value val\n * @param {Array} arr\n * @param {number} n\n * @param {boolean} val\n * @return {Array}\n */\nfunction setBit(arr, n, val) {\n var index = n >> 5; // Same as Math.floor(n/32)\n var mask = 1 << (31 - n % 32);\n if (val)\n arr[index] = mask | arr[index];\n else\n arr[index] = ~mask & arr[index];\n return arr;\n}\n\n/**\n * Translates an array of numbers to a string of bits\n * @param {Array} arr\n * @returns {string}\n */\nfunction toBinaryString(arr) {\n var str = '';\n for (var i = 0; i < arr.length; i++) {\n var obj = (arr[i] >>> 0).toString(2);\n str += '00000000000000000000000000000000'.substr(obj.length) + obj;\n }\n return str;\n}\n\n/**\n * Creates an array of numbers based on a string of bits\n * @param {string} str\n * @returns {Array}\n */\nfunction parseBinaryString(str) {\n var len = str.length / 32;\n var ans = new Array(len);\n for (var i = 0; i < len; i++) {\n ans[i] = parseInt(str.substr(i*32, 32), 2) | 0;\n }\n return ans;\n}\n\n/**\n * Translates an array of numbers to a hex string\n * @param {Array} arr\n * @returns {string}\n */\nfunction toHexString(arr) {\n var str = '';\n for (var i = 0; i < arr.length; i++) {\n var obj = (arr[i] >>> 0).toString(16);\n str += '00000000'.substr(obj.length) + obj;\n }\n return str;\n}\n\n/**\n * Creates an array of numbers based on a hex string\n * @param {string} str\n * @returns {Array}\n */\nfunction parseHexString(str) {\n var len = str.length / 8;\n var ans = new Array(len);\n for (var i = 0; i < len; i++) {\n ans[i] = parseInt(str.substr(i*8, 8), 16) | 0;\n }\n return ans;\n}\n\n/**\n * Creates a human readable string of the array\n * @param {Array} arr\n * @returns {string}\n */\nfunction toDebug(arr) {\n var binary = toBinaryString(arr);\n var str = '';\n for (var i = 0; i < arr.length; i++) {\n str += '0000'.substr((i * 32).toString(16).length) + (i * 32).toString(16) + ':';\n for (var j = 0; j < 32; j += 4) {\n str += ' ' + binary.substr(i * 32 + j, 4);\n }\n if (i < arr.length - 1) str += '\\n';\n }\n return str\n}\n\nmodule.exports = {\n count: count,\n and: and,\n or: or,\n xor: xor,\n not: not,\n getBit: getBit,\n setBit: setBit,\n toBinaryString: toBinaryString,\n parseBinaryString: parseBinaryString,\n toHexString: toHexString,\n parseHexString: parseHexString,\n toDebug: toDebug\n};\n","import isArray from 'is-any-array';\n\n/**\n * Computes the mode of the given values\n * @param {Array} input\n * @return {number}\n */\n\nfunction mode(input) {\n if (!isArray(input)) {\n throw new TypeError('input must be an array');\n }\n\n if (input.length === 0) {\n throw new TypeError('input must not be empty');\n }\n\n var maxValue = 0;\n var maxCount = 0;\n var count = 0;\n var counts = {};\n\n for (var i = 0; i < input.length; ++i) {\n var element = input[i];\n count = counts[element];\n\n if (count) {\n counts[element]++;\n count++;\n } else {\n counts[element] = count = 1;\n }\n\n if (count > maxCount) {\n maxCount = count;\n maxValue = input[i];\n }\n }\n\n return maxValue;\n}\n\nexport default mode;\n","/**\n * Computes the norm of the given values\n * @param {Array} input\n * @param {object} [options={}]\n * @param {string} [algorithm='absolute']\n * @return {number}\n */\nfunction norm(input) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var _options$algorithm = options.algorithm,\n algorithm = _options$algorithm === void 0 ? 'absolute' : _options$algorithm;\n\n if (!Array.isArray(input)) {\n throw new Error('input must be an array');\n }\n\n if (input.length === 0) {\n throw new Error('input must not be empty');\n }\n\n switch (algorithm.toLowerCase()) {\n case 'absolute':\n var sum = absoluteSum(input);\n if (sum === 0) return input.slice(0);\n return input.map(function (element) {\n return element / sum;\n });\n\n default:\n throw new Error(\"norm: unknown algorithm: \".concat(algorithm));\n }\n}\n\nfunction absoluteSum(input) {\n var sum = 0;\n\n for (var i = 0; i < input.length; i++) {\n sum += Math.abs(input[i]);\n }\n\n return sum;\n}\n\nexport default norm;\n","import isArray from 'is-any-array';\n\nfunction _typeof(obj) {\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function (obj) {\n return typeof obj;\n };\n } else {\n _typeof = function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\n/**\n * Fill an array with sequential numbers\n * @param {Array} [input] - optional destination array (if not provided a new array will be created)\n * @param {object} [options={}]\n * @param {number} [options.from=0] - first value in the array\n * @param {number} [options.to=10] - last value in the array\n * @param {number} [options.size=input.length] - size of the array (if not provided calculated from step)\n * @param {number} [options.step] - if not provided calculated from size\n * @return {Array}\n */\n\nfunction sequentialFill() {\n var input = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n if (_typeof(input) === 'object' && !isArray(input)) {\n options = input;\n input = [];\n }\n\n if (!isArray(input)) {\n throw new TypeError('input must be an array');\n }\n\n var _options = options,\n _options$from = _options.from,\n from = _options$from === void 0 ? 0 : _options$from,\n _options$to = _options.to,\n to = _options$to === void 0 ? 10 : _options$to,\n _options$size = _options.size,\n size = _options$size === void 0 ? input.length : _options$size,\n step = _options.step;\n\n if (size && step) {\n throw new Error('step is defined by the array size');\n }\n\n if (!size) {\n if (step) {\n size = Math.floor((to - from) / step) + 1;\n } else {\n size = to - from + 1;\n }\n }\n\n if (!step && size) {\n step = (to - from) / (size - 1);\n }\n\n if (Array.isArray(input)) {\n input.length = 0; // only works with normal array\n\n for (var i = 0; i < size; i++) {\n input.push(from);\n from += step;\n }\n } else {\n if (input.length !== size) {\n throw new Error('sequentialFill typed array must have the correct length');\n }\n\n for (var _i = 0; _i < size; _i++) {\n input[_i] = from;\n from += step;\n }\n }\n\n return input;\n}\n\nexport default sequentialFill;\n","import arrayMean from 'ml-array-mean';\nimport isArray from 'is-any-array';\n\n/**\n * Computes the variance of the given values\n * @param {Array} values\n * @param {object} [options]\n * @param {boolean} [options.unbiased = true] - if true, divide by (n-1); if false, divide by n.\n * @param {number} [options.mean = arrayMean] - precalculated mean, if any.\n * @return {number}\n */\n\nfunction variance(values) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n if (!isArray(values)) {\n throw new TypeError('input must be an array');\n }\n\n var _options$unbiased = options.unbiased,\n unbiased = _options$unbiased === void 0 ? true : _options$unbiased,\n _options$mean = options.mean,\n mean = _options$mean === void 0 ? arrayMean(values) : _options$mean;\n var sqrError = 0;\n\n for (var i = 0; i < values.length; i++) {\n var x = values[i] - mean;\n sqrError += x * x;\n }\n\n if (unbiased) {\n return sqrError / (values.length - 1);\n } else {\n return sqrError / values.length;\n }\n}\n\nexport default variance;\n","import variance from 'ml-array-variance';\n\n/**\n * Computes the standard deviation of the given values\n * @param {Array} values\n * @param {object} [options]\n * @param {boolean} [options.unbiased = true] - if true, divide by (n-1); if false, divide by n.\n * @param {number} [options.mean = arrayMean] - precalculated mean, if any.\n * @return {number}\n */\n\nfunction standardDeviation(values) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n return Math.sqrt(variance(values, options));\n}\n\nexport default standardDeviation;\n","/**\n * Merge abscissa values if the ordinate value is in a list of centroids\n * @param {object} originalPoints\n * @param {Array} originalPoints.x\n * @param {Array} originalPoints.y\n * @param {Array} centroids\n * @param {object} [options]\n * @param {number} [options.window = 0.01] - has to be a positive number\n * @return {{x: Array, y: Array}}\n */\nexport default function mergeByCentroids(\n originalPoints,\n centroids,\n options = {}\n) {\n const { window = 0.01 } = options;\n\n var mergedPoints = {\n x: centroids.slice(),\n y: new Array(centroids.length).fill(0)\n };\n\n var originalIndex = 0;\n var mergedIndex = 0;\n while (\n originalIndex < originalPoints.x.length &&\n mergedIndex < centroids.length\n ) {\n var diff = originalPoints.x[originalIndex] - centroids[mergedIndex];\n if (Math.abs(diff) < window) {\n mergedPoints.y[mergedIndex] += originalPoints.y[originalIndex++];\n } else if (diff < 0) {\n originalIndex++;\n } else {\n mergedIndex++;\n }\n }\n\n return mergedPoints;\n}\n","import binarySearch from 'binary-search';\nimport { ascending, descending } from 'num-sort';\n\n/**\n *\n * @param {object} points\n * @param {Array} originalPoints.x\n * @param {Array} originalPoints.y\n * @param {*} options\n * @return {{x: Array, y: Array}}\n */\nexport default function closestX(points, options) {\n const { x, y } = points;\n const { target = x[0], reverse = false } = options;\n\n let index;\n if (reverse) {\n index = binarySearch(x, target, descending);\n } else {\n index = binarySearch(x, target, ascending);\n }\n\n if (index >= 0) {\n return {\n x: x[index],\n y: y[index]\n };\n } else {\n index = ~index;\n if (\n (index !== 0 && Math.abs(x[index] - target) > 0.5) ||\n index === x.length\n ) {\n return {\n x: x[index - 1],\n y: y[index - 1]\n };\n } else {\n return {\n x: x[index],\n y: y[index]\n };\n }\n }\n}\n","/**\n * Merge abscissas values on similar ordinates and weight the group of abscissas\n * @param {object} points\n * @param {Array} points.x - sorted abscissas values\n * @param {Array} points.y - ordinates values\n * @param {object} [options]\n * @param {number} [options.groupWidth = 0.001] - window for abscissas to merge\n * @return {{x: Array, y: Array}}\n */\nexport default function maxMerge(points, options = {}) {\n const { x, y } = points;\n const { groupWidth = 0.001 } = options;\n\n var merged = { x: [], y: [] };\n var maxAbscissa = { x: [], y: [] };\n var size = 0;\n var index = 0;\n\n while (index < x.length) {\n if (size === 0 || x[index] - merged.x[size - 1] > groupWidth) {\n maxAbscissa.x.push(x[index]);\n maxAbscissa.y.push(y[index]);\n merged.x.push(x[index]);\n merged.y.push(y[index]);\n index++;\n size++;\n } else {\n if (y[index] > maxAbscissa.y[size - 1]) {\n maxAbscissa.x[size - 1] = x[index];\n maxAbscissa.y[size - 1] = y[index];\n }\n merged.x[size - 1] = x[index];\n merged.y[size - 1] += y[index];\n index++;\n }\n }\n\n merged.x = maxAbscissa.x.slice();\n\n return merged;\n}\n","import binarySearch from 'binary-search';\nimport { ascending, descending } from 'num-sort';\n\n/**\n * @param {object} points\n * @param {Array} points.x - sorted abscissas values\n * @param {Array} points.y - ordinates values\n * @param {object} [options]\n * @param {object} [options.from = {index: 0}]\n * @param {object} [options.to = {index: x.length-1}]\n * @param {boolean} [options.reverse = false]\n * @return {{index: number, value: number}}\n */\nexport default function maxY(points, options = {}) {\n const { x, y } = points;\n let {\n from = { index: 0 },\n to = { index: x.length },\n reverse = false\n } = options;\n\n if (from.value !== undefined && from.index === undefined) {\n from.index = calculateIndex(from.value, x, reverse);\n }\n\n if (to.value !== undefined && to.index === undefined) {\n to.index = calculateIndex(to.value, x, reverse);\n }\n\n var currentMax = Number.MIN_VALUE;\n var currentIndex;\n for (var i = from.index; i < to.index; i++) {\n if (currentMax < y[i]) {\n currentMax = y[i];\n currentIndex = i;\n }\n }\n\n return {\n index: currentIndex,\n value: currentMax\n };\n}\n\n/**\n * @param {number} value\n * @param {Array} x\n * @param {boolean} reverse\n * @return {number} index of the value in the array\n */\nfunction calculateIndex(value, x, reverse) {\n let index;\n if (reverse) {\n index = binarySearch(x, value, descending);\n } else {\n index = binarySearch(x, value, ascending);\n }\n\n if (index < 0) {\n throw new Error(`the value ${value} doesn't belongs to the abscissa value`);\n }\n\n return index;\n}\n","export default function sortX(points, options = {}) {\n const { x, y } = points;\n const { reverse = false } = options;\n\n var sortFunc;\n if (!reverse) {\n sortFunc = (a, b) => a.x - b.x;\n } else {\n sortFunc = (a, b) => b.x - a.x;\n }\n\n var grouped = x\n .map((val, index) => ({\n x: val,\n y: y[index]\n }))\n .sort(sortFunc);\n\n var response = { x: x.slice(), y: y.slice() };\n for (var i = 0; i < x.length; i++) {\n response.x[i] = grouped[i].x;\n response.y[i] = grouped[i].y;\n }\n\n return response;\n}\n","\n/**\n * In place modification of the 2 arrays to make X unique and sum the Y if X has the same value\n * @param {object} [points={}] : Object of points contains property x (an array) and y (an array)\n * @return points\n */\n\nexport default function uniqueX(points = {}) {\n const { x, y } = points;\n if (x.length < 2) return;\n if (x.length !== y.length) {\n throw new Error('The X and Y arrays mush have the same length');\n }\n\n let current = x[0];\n let counter = 0;\n\n for (let i = 1; i < x.length; i++) {\n if (current !== x[i]) {\n counter++;\n current = x[i];\n x[counter] = x[i];\n if (i !== counter) {\n y[counter] = 0;\n }\n }\n if (i !== counter) {\n y[counter] += y[i];\n }\n }\n\n x.length = counter + 1;\n y.length = counter + 1;\n}\n","/**\n * Merge abscissas values on similar ordinates and weight the group of abscissas\n * @param {object} points\n * @param {Array} points.x - sorted abscissas values\n * @param {Array} points.y - ordinates values\n * @param {object} [options]\n * @param {number} [options.groupWidth = 0.001] - window for abscissas to merge\n * @return {{x: Array, y: Array}}\n */\nexport default function weightedMerge(points, options = {}) {\n const { x, y } = points;\n const { groupWidth = 0.001 } = options;\n\n var merged = { x: [], y: [] };\n var weightedAbscissa = { x: [], y: [] };\n var size = 0;\n var index = 0;\n\n while (index < x.length) {\n if (size === 0 || x[index] - merged.x[size - 1] > groupWidth) {\n weightedAbscissa.x.push(x[index] * y[index]);\n weightedAbscissa.y.push(y[index]);\n merged.x.push(x[index]);\n merged.y.push(y[index]);\n index++;\n size++;\n } else {\n weightedAbscissa.x[size - 1] += x[index] * y[index];\n weightedAbscissa.y[size - 1] += y[index];\n merged.x[size - 1] = x[index];\n merged.y[size - 1] += y[index];\n index++;\n }\n }\n\n for (var i = 0; i < merged.x.length; i++) {\n merged.x[i] = weightedAbscissa.x[i] / weightedAbscissa.y[i];\n }\n\n return merged;\n}\n","/**\n * Function that calculates the integral of the line between two\n * x-coordinates, given the slope and intercept of the line.\n * @param {number} x0\n * @param {number} x1\n * @param {number} slope\n * @param {number} intercept\n * @return {number} integral value.\n */\nexport default function integral(x0, x1, slope, intercept) {\n return (\n 0.5 * slope * x1 * x1 +\n intercept * x1 -\n (0.5 * slope * x0 * x0 + intercept * x0)\n );\n}\n","import integral from './integral';\n\n/**\n * function that retrieves the getEquallySpacedData with the variant \"smooth\"\n *\n * @param {Array} x\n * @param {Array} y\n * @param {number} from - Initial point\n * @param {number} to - Final point\n * @param {number} numberOfPoints\n * @return {Array} - Array of y's equally spaced with the variant \"smooth\"\n */\nexport default function equallySpacedSmooth(x, y, from, to, numberOfPoints) {\n var xLength = x.length;\n\n var step = (to - from) / (numberOfPoints - 1);\n var halfStep = step / 2;\n\n var output = new Array(numberOfPoints);\n\n var initialOriginalStep = x[1] - x[0];\n var lastOriginalStep = x[xLength - 1] - x[xLength - 2];\n\n // Init main variables\n var min = from - halfStep;\n var max = from + halfStep;\n\n var previousX = Number.MIN_VALUE;\n var previousY = 0;\n var nextX = x[0] - initialOriginalStep;\n var nextY = 0;\n\n var currentValue = 0;\n var slope = 0;\n var intercept = 0;\n var sumAtMin = 0;\n var sumAtMax = 0;\n\n var i = 0; // index of input\n var j = 0; // index of output\n\n function getSlope(x0, y0, x1, y1) {\n return (y1 - y0) / (x1 - x0);\n }\n\n main: while (true) {\n if (previousX <= min && min <= nextX) {\n add = integral(0, min - previousX, slope, previousY);\n sumAtMin = currentValue + add;\n }\n\n while (nextX - max >= 0) {\n // no overlap with original point, just consume current value\n var add = integral(0, max - previousX, slope, previousY);\n sumAtMax = currentValue + add;\n\n output[j++] = (sumAtMax - sumAtMin) / step;\n\n if (j === numberOfPoints) {\n break main;\n }\n\n min = max;\n max += step;\n sumAtMin = sumAtMax;\n }\n\n currentValue += integral(previousX, nextX, slope, intercept);\n\n previousX = nextX;\n previousY = nextY;\n\n if (i < xLength) {\n nextX = x[i];\n nextY = y[i];\n i++;\n } else if (i === xLength) {\n nextX += lastOriginalStep;\n nextY = 0;\n }\n\n slope = getSlope(previousX, previousY, nextX, nextY);\n intercept = -slope * previousX + previousY;\n }\n\n return output;\n}\n","/**\n * function that retrieves the getEquallySpacedData with the variant \"slot\"\n *\n * @param {Array} x\n * @param {Array} y\n * @param {number} from - Initial point\n * @param {number} to - Final point\n * @param {number} numberOfPoints\n * @return {Array} - Array of y's equally spaced with the variant \"slot\"\n */\nexport default function equallySpacedSlot(x, y, from, to, numberOfPoints) {\n var xLength = x.length;\n\n var step = (to - from) / (numberOfPoints - 1);\n var halfStep = step / 2;\n var lastStep = x[x.length - 1] - x[x.length - 2];\n\n var start = from - halfStep;\n var output = new Array(numberOfPoints);\n\n // Init main variables\n var min = start;\n var max = start + step;\n\n var previousX = -Number.MAX_VALUE;\n var previousY = 0;\n var nextX = x[0];\n var nextY = y[0];\n var frontOutsideSpectra = 0;\n var backOutsideSpectra = true;\n\n var currentValue = 0;\n\n // for slot algorithm\n var currentPoints = 0;\n\n var i = 1; // index of input\n var j = 0; // index of output\n\n main: while (true) {\n if (previousX >= nextX) throw new Error('x must be an increasing serie');\n while (previousX - max > 0) {\n // no overlap with original point, just consume current value\n if (backOutsideSpectra) {\n currentPoints++;\n backOutsideSpectra = false;\n }\n\n output[j] = currentPoints <= 0 ? 0 : currentValue / currentPoints;\n j++;\n\n if (j === numberOfPoints) {\n break main;\n }\n\n min = max;\n max += step;\n currentValue = 0;\n currentPoints = 0;\n }\n\n if (previousX > min) {\n currentValue += previousY;\n currentPoints++;\n }\n\n if (previousX === -Number.MAX_VALUE || frontOutsideSpectra > 1) {\n currentPoints--;\n }\n\n previousX = nextX;\n previousY = nextY;\n\n if (i < xLength) {\n nextX = x[i];\n nextY = y[i];\n i++;\n } else {\n nextX += lastStep;\n nextY = 0;\n frontOutsideSpectra++;\n }\n }\n\n return output;\n}\n","export default function getZones(from, to, numberOfPoints, exclusions = []) {\n if (from > to) {\n [from, to] = [to, from];\n }\n\n // in exclusions from and to have to be defined\n exclusions = exclusions.filter(\n (exclusion) => exclusion.from !== undefined && exclusion.to !== undefined\n );\n\n exclusions = JSON.parse(JSON.stringify(exclusions));\n // we ensure that from before to\n exclusions.forEach((exclusion) => {\n if (exclusion.from > exclusion.to) {\n [exclusion.to, exclusion.from] = [exclusion.from, exclusion.to];\n }\n });\n\n exclusions.sort((a, b) => a.from - b.from);\n\n // we will rework the exclusions in order to remove overlap and outside range (from / to)\n exclusions.forEach((exclusion) => {\n if (exclusion.from < from) exclusion.from = from;\n if (exclusion.to > to) exclusion.to = to;\n });\n for (let i = 0; i < exclusions.length - 1; i++) {\n if (exclusions[i].to > exclusions[i + 1].from) {\n exclusions[i].to = exclusions[i + 1].from;\n }\n }\n exclusions = exclusions.filter((exclusion) => exclusion.from < exclusion.to);\n\n if (!exclusions || exclusions.length === 0) {\n return [{ from, to, numberOfPoints }];\n }\n\n // need to deal with overlapping exclusions and out of bound exclusions\n\n let toRemove = exclusions.reduce(\n (previous, exclusion) => (previous += exclusion.to - exclusion.from),\n 0\n );\n let total = to - from;\n let unitsPerPoint = (total - toRemove) / numberOfPoints;\n let zones = [];\n let currentFrom = from;\n let totalPoints = 0;\n for (let exclusion of exclusions) {\n let currentNbPoints = Math.round(\n (exclusion.from - currentFrom) / unitsPerPoint\n );\n totalPoints += currentNbPoints;\n if (currentNbPoints > 0) {\n zones.push({\n from: currentFrom,\n to: exclusion.from,\n numberOfPoints: currentNbPoints\n });\n }\n\n currentFrom = exclusion.to;\n }\n if (numberOfPoints - totalPoints > 0) {\n zones.push({\n from: currentFrom,\n to: to,\n numberOfPoints: numberOfPoints - totalPoints\n });\n }\n\n return zones;\n}\n","import sequentialFill from 'ml-array-sequential-fill';\n\nimport equallySpacedSmooth from './equallySpacedSmooth';\nimport equallySpacedSlot from './equallySpacedSlot';\nimport getZones from './getZones';\n\n/**\n * Function that returns a Number array of equally spaced numberOfPoints\n * containing a representation of intensities of the spectra arguments x\n * and y.\n *\n * The options parameter contains an object in the following form:\n * from: starting point\n * to: last point\n * numberOfPoints: number of points between from and to\n * variant: \"slot\" or \"smooth\" - smooth is the default option\n *\n * The slot variant consist that each point in the new array is calculated\n * averaging the existing points between the slot that belongs to the current\n * value. The smooth variant is the same but takes the integral of the range\n * of the slot and divide by the step size between two points in the new array.\n *\n * @param {object} [arrayXY={}] - object containing 2 properties x and y (both an array)\n * @param {object} [options={}]\n * @param {number} [options.from=x[0]]\n * @param {number} [options.to=x[x.length-1]]\n * @param {string} [options.variant='smooth']\n * @param {number} [options.numberOfPoints=100]\n * @param {Array} [options.exclusions=[]] array of from / to that should be skipped for the generation of the points\n * @return {object} new object with x / y array with the equally spaced data.\n */\n\nexport default function equallySpaced(arrayXY = {}, options = {}) {\n let { x, y } = arrayXY;\n let xLength = x.length;\n let reverse = false;\n if (x.length > 1 && x[0] > x[1]) {\n x = x.slice().reverse();\n y = y.slice().reverse();\n reverse = true;\n }\n\n let {\n from = x[0],\n to = x[xLength - 1],\n variant = 'smooth',\n numberOfPoints = 100,\n exclusions = []\n } = options;\n\n if (xLength !== y.length) {\n throw new RangeError(\"the x and y vector doesn't have the same size.\");\n }\n\n if (typeof from !== 'number' || isNaN(from)) {\n throw new RangeError(\"'from' option must be a number\");\n }\n\n if (typeof to !== 'number' || isNaN(to)) {\n throw new RangeError(\"'to' option must be a number\");\n }\n\n if (typeof numberOfPoints !== 'number' || isNaN(numberOfPoints)) {\n throw new RangeError(\"'numberOfPoints' option must be a number\");\n }\n\n let zones = getZones(from, to, numberOfPoints, exclusions);\n\n let xResult = [];\n let yResult = [];\n for (let zone of zones) {\n let zoneResult = processZone(\n x,\n y,\n zone.from,\n zone.to,\n zone.numberOfPoints,\n variant,\n reverse\n );\n xResult.push(...zoneResult.x);\n yResult.push(...zoneResult.y);\n }\n\n if (reverse) {\n if (from < to) {\n return { x: xResult.reverse(), y: yResult.reverse() };\n } else {\n return { x: xResult, y: yResult };\n }\n } else {\n if (from < to) {\n return { x: xResult, y: yResult };\n } else {\n return { x: xResult.reverse(), y: yResult.reverse() };\n }\n }\n}\n\nfunction processZone(x, y, from, to, numberOfPoints, variant) {\n if (numberOfPoints < 1) {\n throw new RangeError('the number of points must be at least 1');\n }\n\n var output =\n variant === 'slot'\n ? equallySpacedSlot(x, y, from, to, numberOfPoints)\n : equallySpacedSmooth(x, y, from, to, numberOfPoints);\n\n return {\n x: sequentialFill({\n from,\n to,\n size: numberOfPoints\n }),\n y: output\n };\n}\n","export default function getZones(from, to, exclusions = []) {\n if (from > to) {\n [from, to] = [to, from];\n }\n\n // in exclusions from and to have to be defined\n exclusions = exclusions.filter(\n (exclusion) => exclusion.from !== undefined && exclusion.to !== undefined\n );\n\n exclusions = JSON.parse(JSON.stringify(exclusions));\n // we ensure that from before to\n exclusions.forEach((exclusion) => {\n if (exclusion.from > exclusion.to) {\n [exclusion.to, exclusion.from] = [exclusion.from, exclusion.to];\n }\n });\n\n exclusions.sort((a, b) => a.from - b.from);\n\n // we will rework the exclusions in order to remove overlap and outside range (from / to)\n exclusions.forEach((exclusion) => {\n if (exclusion.from < from) exclusion.from = from;\n if (exclusion.to > to) exclusion.to = to;\n });\n for (let i = 0; i < exclusions.length - 1; i++) {\n if (exclusions[i].to > exclusions[i + 1].from) {\n exclusions[i].to = exclusions[i + 1].from;\n }\n }\n exclusions = exclusions.filter((exclusion) => exclusion.from < exclusion.to);\n\n if (!exclusions || exclusions.length === 0) {\n return [{ from, to }];\n }\n\n let zones = [];\n let currentFrom = from;\n for (let exclusion of exclusions) {\n if (currentFrom < exclusion.from) {\n zones.push({\n from: currentFrom,\n to: exclusion.from\n });\n }\n\n currentFrom = exclusion.to;\n }\n if (currentFrom < to) {\n zones.push({\n from: currentFrom,\n to: to\n });\n }\n\n return zones;\n}\n","import getZones from './getZones';\n\n/**\n * Filter an array x/y based on various criteria\n * x points are expected to be sorted\n *\n * @param {object} points\n * @param {object} [options={}]\n * @param {array} [options.from]\n * @param {array} [options.to]\n * @param {array} [options.exclusions=[]]\n * @return {{x: Array, y: Array}}\n */\n\nexport default function filterX(points, options = {}) {\n const { x, y } = points;\n const { from = x[0], to = x[x.length - 1], exclusions = [] } = options;\n\n let zones = getZones(from, to, exclusions);\n\n\n let currentZoneIndex = 0;\n let newX = [];\n let newY = [];\n let position = 0;\n while (position < x.length) {\n if (\n x[position] <= zones[currentZoneIndex].to &&\n x[position] >= zones[currentZoneIndex].from\n ) {\n newX.push(x[position]);\n newY.push(y[position]);\n } else {\n if (x[position] > zones[currentZoneIndex].to) {\n currentZoneIndex++;\n if (!zones[currentZoneIndex]) break;\n }\n }\n position++;\n }\n\n return {\n x: newX,\n y: newY\n };\n}\n","import { DecisionTreeClassifier, DecisionTreeRegression } from 'ml-cart';\nimport {\n RandomForestClassifier,\n RandomForestRegression\n} from 'ml-random-forest';\n\n// Try to keep this list in the same structure as the README.\n\n// Unsupervised learning\nexport { PCA } from 'ml-pca';\nimport * as HClust from 'ml-hclust';\nexport { HClust };\nexport { default as KMeans } from 'ml-kmeans';\n\n// Supervised learning\nimport * as NaiveBayes from 'ml-naivebayes';\nexport { NaiveBayes };\nexport { default as KNN } from 'ml-knn';\nexport { PLS, KOPLS } from 'ml-pls';\nexport { default as CrossValidation } from 'ml-cross-validation';\nexport { default as ConfusionMatrix } from 'ml-confusion-matrix';\nexport { DecisionTreeClassifier };\nexport { RandomForestClassifier };\n\n// Artificial neural networks\nexport { default as FNN } from 'ml-fnn';\nexport { default as SOM } from 'ml-som';\n\n// Regression\nexport {\n SimpleLinearRegression,\n PolynomialRegression,\n MultivariateLinearRegression,\n PowerRegression,\n ExponentialRegression,\n TheilSenRegression,\n RobustPolynomialRegression\n} from 'ml-regression';\nexport { DecisionTreeRegression };\nexport { RandomForestRegression };\n\n// Optimization\nexport { default as levenbergMarquardt } from 'ml-levenberg-marquardt';\n\n// Math\nimport * as MatrixLib from 'ml-matrix';\nconst {\n Matrix,\n SVD,\n EVD,\n CholeskyDecomposition,\n LuDecomposition,\n QrDecomposition\n} = MatrixLib;\nexport {\n MatrixLib,\n Matrix,\n SVD,\n EVD,\n CholeskyDecomposition,\n LuDecomposition,\n QrDecomposition\n};\n\nexport { SparseMatrix } from 'ml-sparse-matrix';\nexport { default as Kernel } from 'ml-kernel';\nimport { distance, similarity } from 'ml-distance';\nexport { distance as Distance, similarity as Similarity };\nexport { default as distanceMatrix } from 'ml-distance-matrix';\nexport { default as XSadd } from 'ml-xsadd';\n\n// Statistics\nexport { default as Performance } from 'ml-performance';\n\n// Data preprocessing\nexport { default as savitzkyGolay } from 'ml-savitzky-golay';\n\n// Utility\nexport { default as BitArray } from 'ml-bit-array';\nexport { default as HashTable } from 'ml-hash-table';\nexport { default as padArray } from 'ml-pad-array';\nexport { default as binarySearch } from 'binary-search';\nimport * as numSort from 'num-sort';\nexport { numSort };\nexport { default as Random } from 'ml-random';\n\nimport min from 'ml-array-min';\nimport max from 'ml-array-max';\nimport median from 'ml-array-median';\nimport mean from 'ml-array-mean';\nimport mode from 'ml-array-mode';\nimport normed from 'ml-array-normed';\nimport rescale from 'ml-array-rescale';\nimport sequentialFill from 'ml-array-sequential-fill';\nimport standardDeviation from 'ml-array-standard-deviation';\nimport variance from 'ml-array-variance';\nexport const Array = {\n min,\n max,\n median,\n mean,\n mode,\n normed,\n rescale,\n sequentialFill,\n standardDeviation,\n variance\n};\n\nimport centroidsMerge from 'ml-array-xy-centroids-merge';\nimport closestX from 'ml-arrayxy-closestx';\nimport maxMerge from 'ml-array-xy-max-merge';\nimport maxY from 'ml-array-xy-max-y';\nimport sortX from 'ml-array-xy-sort-x';\nimport uniqueX from 'ml-arrayxy-uniquex';\nimport weightedMerge from 'ml-array-xy-weighted-merge';\nimport equallySpaced from 'ml-array-xy-equally-spaced';\nimport filterX from 'ml-array-xy-filter-x';\nexport const ArrayXY = {\n centroidsMerge,\n closestX,\n maxMerge,\n maxY,\n sortX,\n uniqueX,\n weightedMerge,\n equallySpaced,\n filterX\n};\n"],"names":["toString","Object","prototype","isAnyArray","object","call","endsWith","max","input","isArray","TypeError","length","i","min","rescale","options","arguments","undefined","output","Array","currentMin","currentMax","RangeError","_options$min","minValue","autoMinMax","_options$max","maxValue","factor","checkRowIndex","matrix","index","outer","rows","checkColumnIndex","columns","checkRowVector","vector","to1DArray","checkColumnVector","checkIndices","rowIndices","columnIndices","row","checkRowIndices","column","checkColumnIndices","rowOut","some","r","from","columnOut","c","checkRange","startRow","endRow","startColumn","endColumn","checkNumber","newArray","value","array","push","name","sumByRow","sum","j","get","sumByColumn","sumAll","v","productByRow","productByColumn","productAll","varianceByRow","unbiased","mean","cols","variance","sum1","sum2","x","varianceByColumn","varianceAll","size","centerByRow","set","centerByColumn","centerAll","getScaleByRow","scale","Math","pow","sqrt","scaleByRow","getScaleByColumn","scaleByColumn","getScaleAll","divider","scaleAll","inspectMatrix","indent","repeat","indentData","constructor","inspectData","maxRows","maxColumns","maxNumSize","maxI","maxJ","result","line","formatNumber","join","num","numStr","String","padEnd","precise","toPrecision","exponential","toExponential","eIndex","indexOf","e","substring","installMathOperations","AbstractMatrix","Matrix","add","addS","addM","checkMatrix","newMatrix","sub","subS","subM","subtract","subtractS","subtractM","mul","mulS","mulM","multiply","multiplyS","multiplyM","div","divS","divM","divide","divideS","divideM","mod","modS","modM","modulus","modulusS","modulusM","and","andS","andM","or","orS","orM","xor","xorS","xorM","leftShift","leftShiftS","leftShiftM","signPropagatingRightShift","signPropagatingRightShiftS","signPropagatingRightShiftM","rightShift","rightShiftS","rightShiftM","zeroFillRightShift","zeroFillRightShiftS","zeroFillRightShiftM","not","abs","acos","acosh","asin","asinh","atan","atanh","cbrt","ceil","clz32","cos","cosh","exp","expm1","floor","fround","log","log1p","log10","log2","round","sign","sin","sinh","tan","tanh","trunc","arg0","powS","powM","from1DArray","newRows","newColumns","newData","rowVector","columnVector","zeros","ones","fill","rand","random","randInt","Number","isInteger","interval","eye","diag","data","l","matrix1","matrix2","isMatrix","klass","apply","callback","to2DArray","copy","toJSON","isRowVector","isColumnVector","isVector","isSquare","isSymmetric","isEchelonForm","previousColumn","checked","isReducedEchelonForm","k","echelonForm","clone","h","iMax","swapRows","tmp","reducedEchelonForm","m","n","maxRow","p","pivot","Error","setSubMatrix","neg","getRow","getRowVector","setRow","row1","row2","temp","getColumn","getColumnVector","setColumn","swapColumns","column1","column2","addRowVector","subRowVector","mulRowVector","divRowVector","addColumnVector","subColumnVector","mulColumnVector","divColumnVector","mulRow","mulColumn","maxIndex","idx","minIndex","maxRowIndex","minRow","minRowIndex","maxColumn","maxColumnIndex","minColumn","minColumnIndex","norm","type","cumulativeSum","dot","vector2","vector1","mmul","other","Bcolj","Float64Array","s","strassen2x2","a11","b11","a12","b12","a21","b21","a22","b22","m1","m2","m3","m4","m5","m6","m7","c00","c01","c10","c11","strassen3x3","a00","a01","a02","a10","a20","b00","b01","b02","b10","b20","m8","m9","m10","m11","m12","m13","m14","m15","m16","m17","m18","m19","m20","m21","m22","m23","c02","c12","c20","c21","c22","mmulStrassen","y","r1","c1","r2","c2","console","warn","embed","mat","resultat","blockMult","a","b","halfRows","parseInt","halfCols","subMatrix","scaleRows","isFinite","scaleColumns","flipRows","middle","first","last","flipColumns","kroneckerProduct","q","transpose","sortRows","compareFunction","compareNumbers","sort","sortColumns","subMatrixRow","indices","subMatrixColumn","selection","rowIndex","columnIndex","trace","by","product","standardDeviation","center","Symbol","for","randomInt","diagonal","identity","negate","tensorProduct","nRows","nColumns","arrayData","removeRow","splice","addRow","removeColumn","newRow","addColumn","BaseView","MatrixColumnView","MatrixColumnSelectionView","MatrixFlipColumnView","MatrixFlipRowView","MatrixRowView","MatrixRowSelectionView","MatrixSelectionView","MatrixSubView","MatrixTransposeView","WrapperMatrix1D","_calculateIndex","WrapperMatrix2D","wrap","LuDecomposition","lu","pivotVector","pivotSign","t","LUcolj","kmax","LU","isSingular","col","solve","count","X","determinant","lowerTriangularMatrix","upperTriangularMatrix","pivotPermutationVector","hypotenuse","QrDecomposition","qr","rdiag","nrm","QR","Rdiag","isFullRank","orthogonalMatrix","SingularValueDecomposition","computeLeftSingularVectors","computeRightSingularVectors","autoTranspose","wantu","Boolean","wantv","swapped","aux","nu","ni","U","V","work","si","nct","nrt","mrc","pp","eps","EPSILON","kase","alpha","MIN_VALUE","isNaN","ks","f","cs","sn","sp","spm1","epm1","sk","ek","shift","g","iter","Y","threshold","scols","Ls","rightSingularVectors","VL","vrows","urows","VLU","solveForDiagonal","inverse","vcols","ucols","condition","norm2","rank","tol","ii","leftSingularVectors","diagonalMatrix","useSVD","leftHandSide","rightHandSide","d","subMatrix0","subMatrix1","subMatrix2","xrange","exception","range","dependenciesOneRow","error","thresholdValue","thresholdError","returnArray","linearDependencies","results","Abis","svd","pseudoInverse","svdSolution","SVD","covariance","xMatrix","yMatrix","yIsSame","correlation","sdx","sdy","EigenvalueDecomposition","assumeSymmetric","tred2","tql2","H","ort","orthes","hqr2","realEigenvalues","imaginaryEigenvalues","eigenvectorMatrix","hh","dl1","c3","el1","s2","tst1","low","high","nn","exshift","z","w","ra","sa","vr","vi","notlast","cdivres","cdiv","xr","xi","yr","yi","CholeskyDecomposition","dimension","positiveDefinite","L","B","toDiscreteDistribution","numberOfClasses","counts","giniImpurity","probabilities","getNumberOfClasses","filter","val","arr","giniGain","splitted","splitsImpurity","splits","currentSplit","squaredError","meanArray","currentElement","regressionError","matrixSplitter","lesserX","greaterX","lesserY","greaterY","zip","ret","gainFunctions","gini","Utils","regression","splitFunctions","TreeNode","kind","gainFunction","splitFunction","minNumSamples","maxDepth","bestSplit","XTranspose","bestGain","Infinity","check","currentFeature","splitValues","featureSplit","currentSplitVal","split","gain","maxGain","splitValue","lesser","greater","calculatePrediction","distribution","train","currentDepth","parentGain","splitColumn","splittedMatrix","left","right","classify","setNodeParameters","node","defaultOptions","DecisionTreeClassifier","model","root","Tree","assign","trainingSet","trainingLabels","predict","toPredict","predictions","load","DecisionTreeRegression","trainingValues","checkFloat","examplesBaggingWithReplacement","trainingValue","seed","engine","Random","autoSeed","Xr","featureBagging","replacement","toRet","usedIndex","Set","has","RandomForestBase","maxFeatures","nEstimators","treeOptions","isClassifier","indexes","useSampleBagging","Estimator","DTClassifier","DTRegression","estimators","map","est","res","values","predictionValues","RandomForestClassifier","baseModel","mode","pop","_ref","module","exports","window","median","quickSelectMedian","slice","selectionMethods","arrayMean","arrayMedian","selectionMethod","RandomForestRegression","PCA","dataset","means","stdevs","S","isCovarianceMatrix","_computeFromCovarianceMatrix","useCovarianceMatrix","_adjust","covarianceMatrix","singularValues","eigenvalues","singularValue","nComponents","getExplainedVariance","getCumulativeVariance","explained","getEigenvectors","getEigenvalues","getStandardDeviations","getLoadings","evd","EVD","reverse","squaredEuclidean","euclidean","distanceMatrix","distanceFn","Heap","defaultCmp","heapify","heappop","heappush","heappushpop","heapreplace","insort","nlargest","nsmallest","updateItem","_siftdown","_siftup","lo","hi","cmp","mid","concat","item","lastelt","returnitem","_i","_j","_len","_ref1","_results","_results1","pos","elem","los","startpos","newitem","parent","parentpos","childpos","endpos","rightpos","replace","pushpop","nodes","peek","contains","clear","empty","heap","toArray","insert","top","front","factory","this","require$$0","Cluster","children","distance","cut","list","ans","group","minGroups","forEach","child","traverse","cb","visit","ClusterLeaf","simpleLink","cluster1","cluster2","disFun","completeLink","averageLink","centroidLink","dist","wardLink","alreadySorted","half","agnes","distanceFunction","method","isDistanceMatrix","methodFunc","len","dis","fdistance","sdistance","toFixed","dmin","clustered","filterInt","filterDiff","int","diff","obj","indCount","jj","splitting","Ci","Cj","ndist","intrDist","diana","tree","ind","M","clId","rebel","C","sG","spl","fData","sData","nearestVector","listVectors","similarityFunction","vectorIndex","maxSim","sim","minDist","MAX_VALUE","calculateDistanceMatrix","updateClusterID","centers","clusterID","updateCenters","prevCenters","K","nDim","centersLen","dim","id","hasConverged","oldCenters","tolerance","LOOP","FLOAT_MUL","sh1","sh2","sh3","multiply_uint32","nlo","nhi","XSadd","Date","now","state","Uint32Array","init","getFloat","bind","getUint32","nextState","periodCertification","PROB_TOLERANCE","randomChoice","valuesArr","cumSum","getArray","randomIndex","seedOrRandom","xsadd","XSAdd","randomGenerator","choice","randomSample","mostDistant","maxDist","minDistCent","kmeanspp","nSamples","localTrials","firstCenterIdx","closestDistSquared","cumSumClosestDistSquared","candidateIdx","candidates","distanceToCandidates","euclideanDistances","bestCandidate","bestPot","bestDistSquared","newDistSquared","newPot","A","distanceSymbol","KMeansResult","clusters","centroids","converged","iterations","nearest","centroid","computeInformation","enrichedCentroids","maxIterations","withIterations","initialization","step","newCenters","kmeansGenerator","stepNumber","stepResult","kmeans","separateClasses","features","classes","totalPerClasses","separatedClasses","currentIndex","GaussianNB","reload","calculateProbabilities","C1","PI","std","logPriorProbability","currentStd","getCurrentClass","modelName","currentCase","maxProbability","predictedClass","currentProbability","calculateLogProbability","C2","MultinomialNB","conditionalProbability","priorProbability","separateClass","classValues","total","divisor","matrixLog","Node","KDTree","points","metric","dimensions","restoreParent","buildTree","toJSONImpl","point","maxNodes","maxDistance","bestNodes","BinaryHeap","nearestSearch","ownDistance","linearPoint","bestChild","linearDistance","otherChild","saveNode","content","src","dest","depth","scoreFunction","element","bubbleUp","end","sinkDown","parentN","elemScore","child2N","child1N","swap","child1","child1Score","child2","child2Score","KNN","labels","kdTree","isEuclidean","euclideanDistance","getSinglePrediction","knn","nearestPoints","pointsPerClass","maxPoints","lastElement","currentClass","currentPoints","pow2array","initializeMatrices","PLS","meanX","stdDevX","meanY","stdDevY","PBQ","R2X","scaleMethod","latentVectors","rx","cx","ry","cy","ssqXcal","sumOfSquaresY","T","P","Q","W","transposeX","transposeY","tIndex","maxSumColIndex","uIndex","t1","u","den","pnorm","ssqYcal","E","F","KOPLS","YLoadingMat","SigmaPow","YScoreMat","predScoreMat","YOrthLoadingVec","YOrthEigen","YOrthScoreMat","toNorm","TURegressionCoeff","kernelX","kernel","orthogonalComp","predictiveComp","predictiveComponents","orthogonalComponents","compute","Identity","Sigma","YOrthScoreNorm","TpiPrime","CoTemp","SoTemp","toiPrime","ITo","lastScoreMat","lastTpPrime","KTestTrain","YOrthScoreVector","scoreMatPrime","p1","p2","p3","prediction","predYOrthVectors","ConfusionMatrix","fromLabels","actual","predicted","distinctLabels","actualIdx","predictedIdx","getMatrix","getLabels","getTotalCount","getTrueCount","getFalseCount","getTruePositiveCount","label","getIndex","getTrueNegativeCount","getFalsePositiveCount","getFalseNegativeCount","getPositiveCount","getNegativeCount","getTruePositiveRate","getTrueNegativeRate","getPositivePredictiveValue","TP","getNegativePredictiveValue","TN","getFalseNegativeRate","getFalsePositiveRate","getFalseDiscoveryRate","FP","getFalseOmissionRate","FN","getF1Score","getMatthewsCorrelationCoefficient","getInformedness","getMarkedness","getConfusionTable","getAccuracy","correct","incorrect","getCount","actualIndex","predictedIndex","accuracy","N","twiddle","CV","leaveOneOut","Classifier","classifierOptions","leavePOut","distinct","getDistinct","confusionMatrix","initMatrix","gen","combinations","allIdx","testIdx","trainIdx","validateWithCallback","validate","kFold","current","folds","randi","testFeatures","trainFeatures","testLabels","trainLabels","getTrainTest","classifier","predictedLabels","updateConfusionMatrix","logistic","expELU","param","softExponential","softExponentialPrime","ACTIVATION_FUNCTIONS","activation","derivate","arctan","softsign","relu","softplus","bent","sinusoid","sinc","gaussian","Layer","inputSize","outputSize","regularization","epsilon","activationParam","selectedFunction","params","actFunction","derFunction","activationFunction","mlMatrix","forward","backpropagation","delta","dW","db","aCopy","update","OutputLayer","FeedForwardNeuralNetworks","hiddenLayers","learningRate","dicts","layers","keys","buildNetwork","dictOutputs","inputs","propagate","outputs","NodeSquare","weights","som","neighbors","adjustWeights","target","influence","getDistance","otherNode","getDistanceTorus","distX","distY","gridDim","getNeighbors","xy","torus","getPos","bestNeighbor","direction","dist1","dist2","simA","simB","getPosition","NodeHexagonal","hX","getDistanceHexagonal","distZ","fields","randomizer","squareEuclidean","gridType","SOM","hasOwnProperty","numWeights","converters","getConverters","extractor","creator","nodeType","hx","distanceMethod","getMaxDistance","done","times","findBMU","adjust","iterationCount","startLearningRate","mapRadius","algorithmMethod","_initNodes","loadModel","eval","export","exportModel","includeDistance","initNodes","setTraining","convertedSet","numIterations","timeConstant","trainOne","neighbourhoodRadius","trainingSetFactor","getRandomValue","bmu","_findBestMatchingUnit","now2","radiusLimit","xMin","xMax","yMin","yMax","theX","theY","getConvertedNodes","findBestMatchingUnit","candidate","lowest","computePosition","self","_predict","getQuantizationError","fit","getFit","normalizers","denormalizers","getNormalizer","getDenormalizer","minMax","normalizer","denormalizer","zero","one","maybeToPrecision","digits","checkArraySize","BaseRegression","new","toLaTeX","score","y2","xSum","ySum","chi2","rmsd","xSquared","ySquared","xY","PolynomialRegression","degree","powers","coefficients","checkArrayLength","regress","precision","_toFormula","isLaTeX","sup","closeSup","fn","str","charAt","json","pr","FT","SimpleLinearRegression","slope","intercept","computeX","xFactor","absIntercept","operator","slr","numerator","ExponentialRegression","er","yl","linear","PowerRegression","newInputs","latex","xl","MultivariateLinearRegression","statistics","xt","xx","invxx","beta","fittedValues","residuals","ri","reduce","stdError","stdErrorMatrix","stdErrors","tStats","summary","regressionStatistics","standardError","observations","variables","tStat","sigma","GaussianKernel","constant","PolynomialKernel","SigmoidKernel","ANOVAKernel","CauchyKernel","ExponentialKernel","HistogramIntersectionKernel","LaplacianKernel","MultiquadraticKernel","RationalQuadraticKernel","kernelType","rbf","polynomial","poly","anova","cauchy","histogram","HistogramKernel","laplacian","multiquadratic","rational","RationalKernel","sigmoid","mlp","Kernel","toLowerCase","KernelConstructor","kernelFunction","landmarks","kernelMatrix","TheilSenRegression","theilSen","slopes","medianSlope","cuts","RobustPolynomialRegression","robustPolynomial","_","tuples","getRandomTuples","tuple","calcCoefficients","residual","residualsMedian","counter","errorCalculation","parameters","parameterizedFunction","func","gradientFunction","evaluatedData","gradientDifference","paramFunction","auxParams","funcParam","matrixFunction","damping","gradientFunc","matrixFunc","inverseMatrix","levenbergMarquardt","errorTolerance","minValues","maxValues","initialValues","parLen","MAX_SAFE_INTEGER","MIN_SAFE_INTEGER","iteration","parameterValues","parameterError","haystack","needle","comparator","assertNumber","number","largestPrime","primeNumbers","ascending","nextPrime","binarySearch","FREE","FULL","REMOVED","defaultInitialCapacity","defaultMinLoadFactor","defaultMaxLoadFactor","HashTable","table","minLoadFactor","maxLoadFactor","freeEntries","lowWaterMark","highWaterMark","initialCapacity","capacity","chooseHighWaterMark","key","indexOfKey","indexOfInsertion","newCapacity","chooseGrowCapacity","rehash","remove","noRehash","maybeShrinkCapacity","delete","chooseShrinkCapacity","containsKey","hash","decrement","containsValue","indexOfValue","ensureCapacity","minCapacity","oldCapacity","oldTable","oldValues","oldState","newTable","newValues","newState","chooseLowWaterMark","forEachKey","forEachValue","forEachPair","minLoad","maxLoad","SparseMatrix","_init","elements","symmetric","forEachNonZero","bandWidth","isBanded","width","cardinality","v1","v2","getNonZeros","setThreshold","newThreshold","trans","inplaceOperator","inplaceOperatorScalar","inplaceOperatorMatrix","staticOperator","inplaceMethod","staticMethod","operators","fillTemplateFunction","op","methods","mathMethod","template","RegExp","additiveSymmetric","avg","bhattacharyya","canberra","chebyshev","clark","czekanowskiSimilarity","up","down","czekanowskiDistance","dice","q1","q2","divergence","fidelity","gower","harmonicMean","hellinger","innerProduct","intersection","jaccard","jeffreys","jensenDifference","jensenShannon","kdivergence","kulczynski","kullbackLeibler","kumarHassebrook","kumarJohnson","lorentzian","manhattan","matusita","minkowski","motyka","neyman","pearson","probabilisticSymmetric","ruzicka","soergel","sorensen","squared","squaredChord","taneja","tanimoto","bitvector","inter","union","tanimotoS","topsoe","waveHedges","createTree","spectrum","minWindow","to","mainCreateTree","start","getSimilarity","gamma","treeSimilarity","getFunction","cosine","diceD","intersectionD","jaccardD","kulczynskiD","motykaD","avgA","avgB","newA","newB","squaredChordD","pred","cutoffs","tn","tp","fp","nNeg","nPos","nPosPred","nNegPred","Performance","isDistance","predP","all","targ","currentPred","nTp","nFp","getMeasure","measure","measures","getAURC","auc","getAUDC","getDistribution","cutLength","cutLow","cutHigh","xLabels","interValues","intraValues","interCumPercent","intraCumPercent","nTP","currentTP","nFP","currentFP","thisTP","thisFP","names","acc","err","fpr","tpr","fnr","tnr","ppv","npv","pcfall","pcmiss","lift","rpp","rnp","arrayCase","cond","matrixCase","padArray","windowSize","derivative","pad","padValue","SavitzkyGolay","J","inic","Jtranspose","Jinv","det","eightBits","arr1","arr2","getBit","mask","setBit","toBinaryString","substr","parseBinaryString","toHexString","parseHexString","toDebug","binary","maxCount","_options$algorithm","algorithm","absoluteSum","_typeof","iterator","sequentialFill","_options","_options$from","_options$to","_options$size","_options$unbiased","_options$mean","sqrError","mergeByCentroids","originalPoints","mergedPoints","originalIndex","mergedIndex","closestX","descending","maxMerge","groupWidth","merged","maxAbscissa","maxY","calculateIndex","sortX","sortFunc","grouped","response","uniqueX","weightedMerge","weightedAbscissa","integral","x0","x1","equallySpacedSmooth","numberOfPoints","xLength","halfStep","initialOriginalStep","lastOriginalStep","previousX","previousY","nextX","nextY","currentValue","sumAtMin","sumAtMax","getSlope","y0","y1","main","equallySpacedSlot","lastStep","frontOutsideSpectra","backOutsideSpectra","getZones","exclusions","exclusion","JSON","parse","stringify","toRemove","previous","unitsPerPoint","zones","currentFrom","totalPoints","currentNbPoints","equallySpaced","arrayXY","variant","xResult","yResult","zone","zoneResult","processZone","filterX","currentZoneIndex","newX","newY","position","MatrixLib","normed","ArrayXY","centroidsMerge"],"mappings":";;;;;;;;;;;;EAEA,MAAMA,QAAQ,GAAGC,MAAM,CAACC,SAAP,CAAiBF,QAAlC;;EAEA,SAASG,UAAT,CAAoBC,MAApB,EAA4B;EAC1B,SAAOJ,QAAQ,CAACK,IAAT,CAAcD,MAAd,EAAsBE,QAAtB,CAA+B,QAA/B,CAAP;EACD;;EAED,OAAc,GAAGH,UAAjB;;ECNA;;;;;;EAMA,SAASI,GAAT,CAAaC,KAAb,EAAoB;EAClB,MAAI,CAACC,GAAO,CAACD,KAAD,CAAZ,EAAqB;EACnB,UAAM,IAAIE,SAAJ,CAAc,wBAAd,CAAN;EACD;;EAED,MAAIF,KAAK,CAACG,MAAN,KAAiB,CAArB,EAAwB;EACtB,UAAM,IAAID,SAAJ,CAAc,yBAAd,CAAN;EACD;;EAED,MAAIH,GAAG,GAAGC,KAAK,CAAC,CAAD,CAAf;;EAEA,OAAK,IAAII,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGJ,KAAK,CAACG,MAA1B,EAAkCC,CAAC,EAAnC,EAAuC;EACrC,QAAIJ,KAAK,CAACI,CAAD,CAAL,GAAWL,GAAf,EAAoBA,GAAG,GAAGC,KAAK,CAACI,CAAD,CAAX;EACrB;;EAED,SAAOL,GAAP;EACD;;ECtBD;;;;;;EAMA,SAASM,GAAT,CAAaL,KAAb,EAAoB;EAClB,MAAI,CAACC,GAAO,CAACD,KAAD,CAAZ,EAAqB;EACnB,UAAM,IAAIE,SAAJ,CAAc,wBAAd,CAAN;EACD;;EAED,MAAIF,KAAK,CAACG,MAAN,KAAiB,CAArB,EAAwB;EACtB,UAAM,IAAID,SAAJ,CAAc,yBAAd,CAAN;EACD;;EAED,MAAIG,GAAG,GAAGL,KAAK,CAAC,CAAD,CAAf;;EAEA,OAAK,IAAII,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGJ,KAAK,CAACG,MAA1B,EAAkCC,CAAC,EAAnC,EAAuC;EACrC,QAAIJ,KAAK,CAACI,CAAD,CAAL,GAAWC,GAAf,EAAoBA,GAAG,GAAGL,KAAK,CAACI,CAAD,CAAX;EACrB;;EAED,SAAOC,GAAP;EACD;;ECpBD,SAASC,OAAT,CAAiBN,KAAjB,EAAwB;EACtB,MAAIO,OAAO,GAAGC,SAAS,CAACL,MAAV,GAAmB,CAAnB,IAAwBK,SAAS,CAAC,CAAD,CAAT,KAAiBC,SAAzC,GAAqDD,SAAS,CAAC,CAAD,CAA9D,GAAoE,EAAlF;;EAEA,MAAI,CAACP,GAAO,CAACD,KAAD,CAAZ,EAAqB;EACnB,UAAM,IAAIE,SAAJ,CAAc,wBAAd,CAAN;EACD,GAFD,MAEO,IAAIF,KAAK,CAACG,MAAN,KAAiB,CAArB,EAAwB;EAC7B,UAAM,IAAID,SAAJ,CAAc,yBAAd,CAAN;EACD;;EAED,MAAIQ,MAAJ;;EAEA,MAAIH,OAAO,CAACG,MAAR,KAAmBD,SAAvB,EAAkC;EAChC,QAAI,CAACR,GAAO,CAACM,OAAO,CAACG,MAAT,CAAZ,EAA8B;EAC5B,YAAM,IAAIR,SAAJ,CAAc,6CAAd,CAAN;EACD;;EAEDQ,IAAAA,MAAM,GAAGH,OAAO,CAACG,MAAjB;EACD,GAND,MAMO;EACLA,IAAAA,MAAM,GAAG,IAAIC,KAAJ,CAAUX,KAAK,CAACG,MAAhB,CAAT;EACD;;EAED,MAAIS,UAAU,GAAGP,GAAG,CAACL,KAAD,CAApB;EACA,MAAIa,UAAU,GAAGd,GAAG,CAACC,KAAD,CAApB;;EAEA,MAAIY,UAAU,KAAKC,UAAnB,EAA+B;EAC7B,UAAM,IAAIC,UAAJ,CAAe,6EAAf,CAAN;EACD;;EAED,MAAIC,YAAY,GAAGR,OAAO,CAACF,GAA3B;EAAA,MACIW,QAAQ,GAAGD,YAAY,KAAK,KAAK,CAAtB,GAA0BR,OAAO,CAACU,UAAR,GAAqBL,UAArB,GAAkC,CAA5D,GAAgEG,YAD/E;EAAA,MAEIG,YAAY,GAAGX,OAAO,CAACR,GAF3B;EAAA,MAGIoB,QAAQ,GAAGD,YAAY,KAAK,KAAK,CAAtB,GAA0BX,OAAO,CAACU,UAAR,GAAqBJ,UAArB,GAAkC,CAA5D,GAAgEK,YAH/E;;EAKA,MAAIF,QAAQ,IAAIG,QAAhB,EAA0B;EACxB,UAAM,IAAIL,UAAJ,CAAe,4CAAf,CAAN;EACD;;EAED,MAAIM,MAAM,GAAG,CAACD,QAAQ,GAAGH,QAAZ,KAAyBH,UAAU,GAAGD,UAAtC,CAAb;;EAEA,OAAK,IAAIR,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGJ,KAAK,CAACG,MAA1B,EAAkCC,CAAC,EAAnC,EAAuC;EACrCM,IAAAA,MAAM,CAACN,CAAD,CAAN,GAAY,CAACJ,KAAK,CAACI,CAAD,CAAL,GAAWQ,UAAZ,IAA0BQ,MAA1B,GAAmCJ,QAA/C;EACD;;EAED,SAAON,MAAP;EACD;;EChDD;;;;;;;AAOA,EAAO,SAASW,aAAT,CAAuBC,MAAvB,EAA+BC,KAA/B,EAAsCC,KAAtC,EAA6C;EAClD,MAAIzB,GAAG,GAAGyB,KAAK,GAAGF,MAAM,CAACG,IAAV,GAAiBH,MAAM,CAACG,IAAP,GAAc,CAA9C;;EACA,MAAIF,KAAK,GAAG,CAAR,IAAaA,KAAK,GAAGxB,GAAzB,EAA8B;EAC5B,UAAM,IAAIe,UAAJ,CAAe,wBAAf,CAAN;EACD;EACF;EAED;;;;;;;;AAOA,EAAO,SAASY,gBAAT,CAA0BJ,MAA1B,EAAkCC,KAAlC,EAAyCC,KAAzC,EAAgD;EACrD,MAAIzB,GAAG,GAAGyB,KAAK,GAAGF,MAAM,CAACK,OAAV,GAAoBL,MAAM,CAACK,OAAP,GAAiB,CAApD;;EACA,MAAIJ,KAAK,GAAG,CAAR,IAAaA,KAAK,GAAGxB,GAAzB,EAA8B;EAC5B,UAAM,IAAIe,UAAJ,CAAe,2BAAf,CAAN;EACD;EACF;EAED;;;;;;;;;AAQA,EAAO,SAASc,cAAT,CAAwBN,MAAxB,EAAgCO,MAAhC,EAAwC;EAC7C,MAAIA,MAAM,CAACC,SAAX,EAAsB;EACpBD,IAAAA,MAAM,GAAGA,MAAM,CAACC,SAAP,EAAT;EACD;;EACD,MAAID,MAAM,CAAC1B,MAAP,KAAkBmB,MAAM,CAACK,OAA7B,EAAsC;EACpC,UAAM,IAAIb,UAAJ,CACJ,uDADI,CAAN;EAGD;;EACD,SAAOe,MAAP;EACD;EAED;;;;;;;;;AAQA,EAAO,SAASE,iBAAT,CAA2BT,MAA3B,EAAmCO,MAAnC,EAA2C;EAChD,MAAIA,MAAM,CAACC,SAAX,EAAsB;EACpBD,IAAAA,MAAM,GAAGA,MAAM,CAACC,SAAP,EAAT;EACD;;EACD,MAAID,MAAM,CAAC1B,MAAP,KAAkBmB,MAAM,CAACG,IAA7B,EAAmC;EACjC,UAAM,IAAIX,UAAJ,CAAe,oDAAf,CAAN;EACD;;EACD,SAAOe,MAAP;EACD;AAED,EAAO,SAASG,YAAT,CAAsBV,MAAtB,EAA8BW,UAA9B,EAA0CC,aAA1C,EAAyD;EAC9D,SAAO;EACLC,IAAAA,GAAG,EAAEC,eAAe,CAACd,MAAD,EAASW,UAAT,CADf;EAELI,IAAAA,MAAM,EAAEC,kBAAkB,CAAChB,MAAD,EAASY,aAAT;EAFrB,GAAP;EAID;AAED,EAAO,SAASE,eAAT,CAAyBd,MAAzB,EAAiCW,UAAjC,EAA6C;EAClD,MAAI,OAAOA,UAAP,KAAsB,QAA1B,EAAoC;EAClC,UAAM,IAAI/B,SAAJ,CAAc,iCAAd,CAAN;EACD;;EAED,MAAIqC,MAAM,GAAGN,UAAU,CAACO,IAAX,CAAiBC,CAAD,IAAO;EAClC,WAAOA,CAAC,GAAG,CAAJ,IAASA,CAAC,IAAInB,MAAM,CAACG,IAA5B;EACD,GAFY,CAAb;;EAIA,MAAIc,MAAJ,EAAY;EACV,UAAM,IAAIzB,UAAJ,CAAe,8BAAf,CAAN;EACD;;EAED,MAAI,CAACH,KAAK,CAACV,OAAN,CAAcgC,UAAd,CAAL,EAAgCA,UAAU,GAAGtB,KAAK,CAAC+B,IAAN,CAAWT,UAAX,CAAb;EAEhC,SAAOA,UAAP;EACD;AAED,EAAO,SAASK,kBAAT,CAA4BhB,MAA5B,EAAoCY,aAApC,EAAmD;EACxD,MAAI,OAAOA,aAAP,KAAyB,QAA7B,EAAuC;EACrC,UAAM,IAAIhC,SAAJ,CAAc,oCAAd,CAAN;EACD;;EAED,MAAIyC,SAAS,GAAGT,aAAa,CAACM,IAAd,CAAoBI,CAAD,IAAO;EACxC,WAAOA,CAAC,GAAG,CAAJ,IAASA,CAAC,IAAItB,MAAM,CAACK,OAA5B;EACD,GAFe,CAAhB;;EAIA,MAAIgB,SAAJ,EAAe;EACb,UAAM,IAAI7B,UAAJ,CAAe,iCAAf,CAAN;EACD;;EACD,MAAI,CAACH,KAAK,CAACV,OAAN,CAAciC,aAAd,CAAL,EAAmCA,aAAa,GAAGvB,KAAK,CAAC+B,IAAN,CAAWR,aAAX,CAAhB;EAEnC,SAAOA,aAAP;EACD;AAED,EAAO,SAASW,UAAT,CAAoBvB,MAApB,EAA4BwB,QAA5B,EAAsCC,MAAtC,EAA8CC,WAA9C,EAA2DC,SAA3D,EAAsE;EAC3E,MAAIzC,SAAS,CAACL,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,UAAM,IAAIW,UAAJ,CAAe,sBAAf,CAAN;EACD;;EACDoC,EAAAA,WAAW,CAAC,UAAD,EAAaJ,QAAb,CAAX;EACAI,EAAAA,WAAW,CAAC,QAAD,EAAWH,MAAX,CAAX;EACAG,EAAAA,WAAW,CAAC,aAAD,EAAgBF,WAAhB,CAAX;EACAE,EAAAA,WAAW,CAAC,WAAD,EAAcD,SAAd,CAAX;;EACA,MACEH,QAAQ,GAAGC,MAAX,IACAC,WAAW,GAAGC,SADd,IAEAH,QAAQ,GAAG,CAFX,IAGAA,QAAQ,IAAIxB,MAAM,CAACG,IAHnB,IAIAsB,MAAM,GAAG,CAJT,IAKAA,MAAM,IAAIzB,MAAM,CAACG,IALjB,IAMAuB,WAAW,GAAG,CANd,IAOAA,WAAW,IAAI1B,MAAM,CAACK,OAPtB,IAQAsB,SAAS,GAAG,CARZ,IASAA,SAAS,IAAI3B,MAAM,CAACK,OAVtB,EAWE;EACA,UAAM,IAAIb,UAAJ,CAAe,oCAAf,CAAN;EACD;EACF;AAED,EAAO,SAASqC,QAAT,CAAkBhD,MAAlB,EAAqC;EAAA,MAAXiD,KAAW,uEAAH,CAAG;EAC1C,MAAIC,KAAK,GAAG,EAAZ;;EACA,OAAK,IAAIjD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGD,MAApB,EAA4BC,CAAC,EAA7B,EAAiC;EAC/BiD,IAAAA,KAAK,CAACC,IAAN,CAAWF,KAAX;EACD;;EACD,SAAOC,KAAP;EACD;;EAED,SAASH,WAAT,CAAqBK,IAArB,EAA2BH,KAA3B,EAAkC;EAChC,MAAI,OAAOA,KAAP,KAAiB,QAArB,EAA+B;EAC7B,UAAM,IAAIlD,SAAJ,WAAiBqD,IAAjB,uBAAN;EACD;EACF;;EC9IM,SAASC,QAAT,CAAkBlC,MAAlB,EAA0B;EAC/B,MAAImC,GAAG,GAAGN,QAAQ,CAAC7B,MAAM,CAACG,IAAR,CAAlB;;EACA,OAAK,IAAIrB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGkB,MAAM,CAACG,IAA3B,EAAiC,EAAErB,CAAnC,EAAsC;EACpC,SAAK,IAAIsD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGpC,MAAM,CAACK,OAA3B,EAAoC,EAAE+B,CAAtC,EAAyC;EACvCD,MAAAA,GAAG,CAACrD,CAAD,CAAH,IAAUkB,MAAM,CAACqC,GAAP,CAAWvD,CAAX,EAAcsD,CAAd,CAAV;EACD;EACF;;EACD,SAAOD,GAAP;EACD;AAED,EAAO,SAASG,WAAT,CAAqBtC,MAArB,EAA6B;EAClC,MAAImC,GAAG,GAAGN,QAAQ,CAAC7B,MAAM,CAACK,OAAR,CAAlB;;EACA,OAAK,IAAIvB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGkB,MAAM,CAACG,IAA3B,EAAiC,EAAErB,CAAnC,EAAsC;EACpC,SAAK,IAAIsD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGpC,MAAM,CAACK,OAA3B,EAAoC,EAAE+B,CAAtC,EAAyC;EACvCD,MAAAA,GAAG,CAACC,CAAD,CAAH,IAAUpC,MAAM,CAACqC,GAAP,CAAWvD,CAAX,EAAcsD,CAAd,CAAV;EACD;EACF;;EACD,SAAOD,GAAP;EACD;AAED,EAAO,SAASI,MAAT,CAAgBvC,MAAhB,EAAwB;EAC7B,MAAIwC,CAAC,GAAG,CAAR;;EACA,OAAK,IAAI1D,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGkB,MAAM,CAACG,IAA3B,EAAiCrB,CAAC,EAAlC,EAAsC;EACpC,SAAK,IAAIsD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGpC,MAAM,CAACK,OAA3B,EAAoC+B,CAAC,EAArC,EAAyC;EACvCI,MAAAA,CAAC,IAAIxC,MAAM,CAACqC,GAAP,CAAWvD,CAAX,EAAcsD,CAAd,CAAL;EACD;EACF;;EACD,SAAOI,CAAP;EACD;AAED,EAAO,SAASC,YAAT,CAAsBzC,MAAtB,EAA8B;EACnC,MAAImC,GAAG,GAAGN,QAAQ,CAAC7B,MAAM,CAACG,IAAR,EAAc,CAAd,CAAlB;;EACA,OAAK,IAAIrB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGkB,MAAM,CAACG,IAA3B,EAAiC,EAAErB,CAAnC,EAAsC;EACpC,SAAK,IAAIsD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGpC,MAAM,CAACK,OAA3B,EAAoC,EAAE+B,CAAtC,EAAyC;EACvCD,MAAAA,GAAG,CAACrD,CAAD,CAAH,IAAUkB,MAAM,CAACqC,GAAP,CAAWvD,CAAX,EAAcsD,CAAd,CAAV;EACD;EACF;;EACD,SAAOD,GAAP;EACD;AAED,EAAO,SAASO,eAAT,CAAyB1C,MAAzB,EAAiC;EACtC,MAAImC,GAAG,GAAGN,QAAQ,CAAC7B,MAAM,CAACK,OAAR,EAAiB,CAAjB,CAAlB;;EACA,OAAK,IAAIvB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGkB,MAAM,CAACG,IAA3B,EAAiC,EAAErB,CAAnC,EAAsC;EACpC,SAAK,IAAIsD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGpC,MAAM,CAACK,OAA3B,EAAoC,EAAE+B,CAAtC,EAAyC;EACvCD,MAAAA,GAAG,CAACC,CAAD,CAAH,IAAUpC,MAAM,CAACqC,GAAP,CAAWvD,CAAX,EAAcsD,CAAd,CAAV;EACD;EACF;;EACD,SAAOD,GAAP;EACD;AAED,EAAO,SAASQ,UAAT,CAAoB3C,MAApB,EAA4B;EACjC,MAAIwC,CAAC,GAAG,CAAR;;EACA,OAAK,IAAI1D,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGkB,MAAM,CAACG,IAA3B,EAAiCrB,CAAC,EAAlC,EAAsC;EACpC,SAAK,IAAIsD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGpC,MAAM,CAACK,OAA3B,EAAoC+B,CAAC,EAArC,EAAyC;EACvCI,MAAAA,CAAC,IAAIxC,MAAM,CAACqC,GAAP,CAAWvD,CAAX,EAAcsD,CAAd,CAAL;EACD;EACF;;EACD,SAAOI,CAAP;EACD;AAED,EAAO,SAASI,aAAT,CAAuB5C,MAAvB,EAA+B6C,QAA/B,EAAyCC,IAAzC,EAA+C;EACpD,QAAM3C,IAAI,GAAGH,MAAM,CAACG,IAApB;EACA,QAAM4C,IAAI,GAAG/C,MAAM,CAACK,OAApB;EACA,QAAM2C,QAAQ,GAAG,EAAjB;;EAEA,OAAK,IAAIlE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGqB,IAApB,EAA0BrB,CAAC,EAA3B,EAA+B;EAC7B,QAAImE,IAAI,GAAG,CAAX;EACA,QAAIC,IAAI,GAAG,CAAX;EACA,QAAIC,CAAC,GAAG,CAAR;;EACA,SAAK,IAAIf,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGW,IAApB,EAA0BX,CAAC,EAA3B,EAA+B;EAC7Be,MAAAA,CAAC,GAAGnD,MAAM,CAACqC,GAAP,CAAWvD,CAAX,EAAcsD,CAAd,IAAmBU,IAAI,CAAChE,CAAD,CAA3B;EACAmE,MAAAA,IAAI,IAAIE,CAAR;EACAD,MAAAA,IAAI,IAAIC,CAAC,GAAGA,CAAZ;EACD;;EACD,QAAIN,QAAJ,EAAc;EACZG,MAAAA,QAAQ,CAAChB,IAAT,CAAc,CAACkB,IAAI,GAAID,IAAI,GAAGA,IAAR,GAAgBF,IAAxB,KAAiCA,IAAI,GAAG,CAAxC,CAAd;EACD,KAFD,MAEO;EACLC,MAAAA,QAAQ,CAAChB,IAAT,CAAc,CAACkB,IAAI,GAAID,IAAI,GAAGA,IAAR,GAAgBF,IAAxB,IAAgCA,IAA9C;EACD;EACF;;EACD,SAAOC,QAAP;EACD;AAED,EAAO,SAASI,gBAAT,CAA0BpD,MAA1B,EAAkC6C,QAAlC,EAA4CC,IAA5C,EAAkD;EACvD,QAAM3C,IAAI,GAAGH,MAAM,CAACG,IAApB;EACA,QAAM4C,IAAI,GAAG/C,MAAM,CAACK,OAApB;EACA,QAAM2C,QAAQ,GAAG,EAAjB;;EAEA,OAAK,IAAIZ,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGW,IAApB,EAA0BX,CAAC,EAA3B,EAA+B;EAC7B,QAAIa,IAAI,GAAG,CAAX;EACA,QAAIC,IAAI,GAAG,CAAX;EACA,QAAIC,CAAC,GAAG,CAAR;;EACA,SAAK,IAAIrE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGqB,IAApB,EAA0BrB,CAAC,EAA3B,EAA+B;EAC7BqE,MAAAA,CAAC,GAAGnD,MAAM,CAACqC,GAAP,CAAWvD,CAAX,EAAcsD,CAAd,IAAmBU,IAAI,CAACV,CAAD,CAA3B;EACAa,MAAAA,IAAI,IAAIE,CAAR;EACAD,MAAAA,IAAI,IAAIC,CAAC,GAAGA,CAAZ;EACD;;EACD,QAAIN,QAAJ,EAAc;EACZG,MAAAA,QAAQ,CAAChB,IAAT,CAAc,CAACkB,IAAI,GAAID,IAAI,GAAGA,IAAR,GAAgB9C,IAAxB,KAAiCA,IAAI,GAAG,CAAxC,CAAd;EACD,KAFD,MAEO;EACL6C,MAAAA,QAAQ,CAAChB,IAAT,CAAc,CAACkB,IAAI,GAAID,IAAI,GAAGA,IAAR,GAAgB9C,IAAxB,IAAgCA,IAA9C;EACD;EACF;;EACD,SAAO6C,QAAP;EACD;AAED,EAAO,SAASK,WAAT,CAAqBrD,MAArB,EAA6B6C,QAA7B,EAAuCC,IAAvC,EAA6C;EAClD,QAAM3C,IAAI,GAAGH,MAAM,CAACG,IAApB;EACA,QAAM4C,IAAI,GAAG/C,MAAM,CAACK,OAApB;EACA,QAAMiD,IAAI,GAAGnD,IAAI,GAAG4C,IAApB;EAEA,MAAIE,IAAI,GAAG,CAAX;EACA,MAAIC,IAAI,GAAG,CAAX;EACA,MAAIC,CAAC,GAAG,CAAR;;EACA,OAAK,IAAIrE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGqB,IAApB,EAA0BrB,CAAC,EAA3B,EAA+B;EAC7B,SAAK,IAAIsD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGW,IAApB,EAA0BX,CAAC,EAA3B,EAA+B;EAC7Be,MAAAA,CAAC,GAAGnD,MAAM,CAACqC,GAAP,CAAWvD,CAAX,EAAcsD,CAAd,IAAmBU,IAAvB;EACAG,MAAAA,IAAI,IAAIE,CAAR;EACAD,MAAAA,IAAI,IAAIC,CAAC,GAAGA,CAAZ;EACD;EACF;;EACD,MAAIN,QAAJ,EAAc;EACZ,WAAO,CAACK,IAAI,GAAID,IAAI,GAAGA,IAAR,GAAgBK,IAAxB,KAAiCA,IAAI,GAAG,CAAxC,CAAP;EACD,GAFD,MAEO;EACL,WAAO,CAACJ,IAAI,GAAID,IAAI,GAAGA,IAAR,GAAgBK,IAAxB,IAAgCA,IAAvC;EACD;EACF;AAED,EAAO,SAASC,WAAT,CAAqBvD,MAArB,EAA6B8C,IAA7B,EAAmC;EACxC,OAAK,IAAIhE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGkB,MAAM,CAACG,IAA3B,EAAiCrB,CAAC,EAAlC,EAAsC;EACpC,SAAK,IAAIsD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGpC,MAAM,CAACK,OAA3B,EAAoC+B,CAAC,EAArC,EAAyC;EACvCpC,MAAAA,MAAM,CAACwD,GAAP,CAAW1E,CAAX,EAAcsD,CAAd,EAAiBpC,MAAM,CAACqC,GAAP,CAAWvD,CAAX,EAAcsD,CAAd,IAAmBU,IAAI,CAAChE,CAAD,CAAxC;EACD;EACF;EACF;AAED,EAAO,SAAS2E,cAAT,CAAwBzD,MAAxB,EAAgC8C,IAAhC,EAAsC;EAC3C,OAAK,IAAIhE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGkB,MAAM,CAACG,IAA3B,EAAiCrB,CAAC,EAAlC,EAAsC;EACpC,SAAK,IAAIsD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGpC,MAAM,CAACK,OAA3B,EAAoC+B,CAAC,EAArC,EAAyC;EACvCpC,MAAAA,MAAM,CAACwD,GAAP,CAAW1E,CAAX,EAAcsD,CAAd,EAAiBpC,MAAM,CAACqC,GAAP,CAAWvD,CAAX,EAAcsD,CAAd,IAAmBU,IAAI,CAACV,CAAD,CAAxC;EACD;EACF;EACF;AAED,EAAO,SAASsB,SAAT,CAAmB1D,MAAnB,EAA2B8C,IAA3B,EAAiC;EACtC,OAAK,IAAIhE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGkB,MAAM,CAACG,IAA3B,EAAiCrB,CAAC,EAAlC,EAAsC;EACpC,SAAK,IAAIsD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGpC,MAAM,CAACK,OAA3B,EAAoC+B,CAAC,EAArC,EAAyC;EACvCpC,MAAAA,MAAM,CAACwD,GAAP,CAAW1E,CAAX,EAAcsD,CAAd,EAAiBpC,MAAM,CAACqC,GAAP,CAAWvD,CAAX,EAAcsD,CAAd,IAAmBU,IAApC;EACD;EACF;EACF;AAED,EAAO,SAASa,aAAT,CAAuB3D,MAAvB,EAA+B;EACpC,QAAM4D,KAAK,GAAG,EAAd;;EACA,OAAK,IAAI9E,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGkB,MAAM,CAACG,IAA3B,EAAiCrB,CAAC,EAAlC,EAAsC;EACpC,QAAIqD,GAAG,GAAG,CAAV;;EACA,SAAK,IAAIC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGpC,MAAM,CAACK,OAA3B,EAAoC+B,CAAC,EAArC,EAAyC;EACvCD,MAAAA,GAAG,IAAI0B,IAAI,CAACC,GAAL,CAAS9D,MAAM,CAACqC,GAAP,CAAWvD,CAAX,EAAcsD,CAAd,CAAT,EAA2B,CAA3B,KAAiCpC,MAAM,CAACK,OAAP,GAAiB,CAAlD,CAAP;EACD;;EACDuD,IAAAA,KAAK,CAAC5B,IAAN,CAAW6B,IAAI,CAACE,IAAL,CAAU5B,GAAV,CAAX;EACD;;EACD,SAAOyB,KAAP;EACD;AAED,EAAO,SAASI,UAAT,CAAoBhE,MAApB,EAA4B4D,KAA5B,EAAmC;EACxC,OAAK,IAAI9E,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGkB,MAAM,CAACG,IAA3B,EAAiCrB,CAAC,EAAlC,EAAsC;EACpC,SAAK,IAAIsD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGpC,MAAM,CAACK,OAA3B,EAAoC+B,CAAC,EAArC,EAAyC;EACvCpC,MAAAA,MAAM,CAACwD,GAAP,CAAW1E,CAAX,EAAcsD,CAAd,EAAiBpC,MAAM,CAACqC,GAAP,CAAWvD,CAAX,EAAcsD,CAAd,IAAmBwB,KAAK,CAAC9E,CAAD,CAAzC;EACD;EACF;EACF;AAED,EAAO,SAASmF,gBAAT,CAA0BjE,MAA1B,EAAkC;EACvC,QAAM4D,KAAK,GAAG,EAAd;;EACA,OAAK,IAAIxB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGpC,MAAM,CAACK,OAA3B,EAAoC+B,CAAC,EAArC,EAAyC;EACvC,QAAID,GAAG,GAAG,CAAV;;EACA,SAAK,IAAIrD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGkB,MAAM,CAACG,IAA3B,EAAiCrB,CAAC,EAAlC,EAAsC;EACpCqD,MAAAA,GAAG,IAAI0B,IAAI,CAACC,GAAL,CAAS9D,MAAM,CAACqC,GAAP,CAAWvD,CAAX,EAAcsD,CAAd,CAAT,EAA2B,CAA3B,KAAiCpC,MAAM,CAACG,IAAP,GAAc,CAA/C,CAAP;EACD;;EACDyD,IAAAA,KAAK,CAAC5B,IAAN,CAAW6B,IAAI,CAACE,IAAL,CAAU5B,GAAV,CAAX;EACD;;EACD,SAAOyB,KAAP;EACD;AAED,EAAO,SAASM,aAAT,CAAuBlE,MAAvB,EAA+B4D,KAA/B,EAAsC;EAC3C,OAAK,IAAI9E,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGkB,MAAM,CAACG,IAA3B,EAAiCrB,CAAC,EAAlC,EAAsC;EACpC,SAAK,IAAIsD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGpC,MAAM,CAACK,OAA3B,EAAoC+B,CAAC,EAArC,EAAyC;EACvCpC,MAAAA,MAAM,CAACwD,GAAP,CAAW1E,CAAX,EAAcsD,CAAd,EAAiBpC,MAAM,CAACqC,GAAP,CAAWvD,CAAX,EAAcsD,CAAd,IAAmBwB,KAAK,CAACxB,CAAD,CAAzC;EACD;EACF;EACF;AAED,EAAO,SAAS+B,WAAT,CAAqBnE,MAArB,EAA6B;EAClC,QAAMoE,OAAO,GAAGpE,MAAM,CAACsD,IAAP,GAAc,CAA9B;EACA,MAAInB,GAAG,GAAG,CAAV;;EACA,OAAK,IAAIC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGpC,MAAM,CAACK,OAA3B,EAAoC+B,CAAC,EAArC,EAAyC;EACvC,SAAK,IAAItD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGkB,MAAM,CAACG,IAA3B,EAAiCrB,CAAC,EAAlC,EAAsC;EACpCqD,MAAAA,GAAG,IAAI0B,IAAI,CAACC,GAAL,CAAS9D,MAAM,CAACqC,GAAP,CAAWvD,CAAX,EAAcsD,CAAd,CAAT,EAA2B,CAA3B,IAAgCgC,OAAvC;EACD;EACF;;EACD,SAAOP,IAAI,CAACE,IAAL,CAAU5B,GAAV,CAAP;EACD;AAED,EAAO,SAASkC,QAAT,CAAkBrE,MAAlB,EAA0B4D,KAA1B,EAAiC;EACtC,OAAK,IAAI9E,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGkB,MAAM,CAACG,IAA3B,EAAiCrB,CAAC,EAAlC,EAAsC;EACpC,SAAK,IAAIsD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGpC,MAAM,CAACK,OAA3B,EAAoC+B,CAAC,EAArC,EAAyC;EACvCpC,MAAAA,MAAM,CAACwD,GAAP,CAAW1E,CAAX,EAAcsD,CAAd,EAAiBpC,MAAM,CAACqC,GAAP,CAAWvD,CAAX,EAAcsD,CAAd,IAAmBwB,KAApC;EACD;EACF;EACF;;ECnNM,SAASU,aAAT,GAAyB;EAC9B,QAAMC,MAAM,GAAG,IAAIC,MAAJ,CAAW,CAAX,CAAf;EACA,QAAMC,UAAU,GAAG,IAAID,MAAJ,CAAW,CAAX,CAAnB;EACA,mBAAU,KAAKE,WAAL,CAAiBzC,IAA3B,iBACAsC,MADA,gBAEAE,UAFA,SAEaE,WAAW,CAAC,IAAD,EAAOF,UAAP,CAFxB,eAGAF,MAHA,gBAIAA,MAJA,mBAIe,KAAKpE,IAJpB,eAKAoE,MALA,sBAKkB,KAAKlE,OALvB;EAOD;EAED,MAAMuE,OAAO,GAAG,EAAhB;EACA,MAAMC,UAAU,GAAG,EAAnB;EACA,MAAMC,UAAU,GAAG,CAAnB;;EAEA,SAASH,WAAT,CAAqB3E,MAArB,EAA6BuE,MAA7B,EAAqC;EACnC,QAAM;EAAEpE,IAAAA,IAAF;EAAQE,IAAAA;EAAR,MAAoBL,MAA1B;EACA,QAAM+E,IAAI,GAAGlB,IAAI,CAAC9E,GAAL,CAASoB,IAAT,EAAeyE,OAAf,CAAb;EACA,QAAMI,IAAI,GAAGnB,IAAI,CAAC9E,GAAL,CAASsB,OAAT,EAAkBwE,UAAlB,CAAb;EACA,QAAMI,MAAM,GAAG,EAAf;;EACA,OAAK,IAAInG,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGiG,IAApB,EAA0BjG,CAAC,EAA3B,EAA+B;EAC7B,QAAIoG,IAAI,GAAG,EAAX;;EACA,SAAK,IAAI9C,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG4C,IAApB,EAA0B5C,CAAC,EAA3B,EAA+B;EAC7B8C,MAAAA,IAAI,CAAClD,IAAL,CAAUmD,YAAY,CAACnF,MAAM,CAACqC,GAAP,CAAWvD,CAAX,EAAcsD,CAAd,CAAD,CAAtB;EACD;;EACD6C,IAAAA,MAAM,CAACjD,IAAP,WAAekD,IAAI,CAACE,IAAL,CAAU,GAAV,CAAf;EACD;;EACD,MAAIJ,IAAI,KAAK3E,OAAb,EAAsB;EACpB4E,IAAAA,MAAM,CAACA,MAAM,CAACpG,MAAP,GAAgB,CAAjB,CAAN,mBAAqCwB,OAAO,GAAGwE,UAA/C;EACD;;EACD,MAAIE,IAAI,KAAK5E,IAAb,EAAmB;EACjB8E,IAAAA,MAAM,CAACjD,IAAP,eAAmB7B,IAAI,GAAGyE,OAA1B;EACD;;EACD,SAAOK,MAAM,CAACG,IAAP,aAAiBb,MAAjB,EAAP;EACD;;EAED,SAASY,YAAT,CAAsBE,GAAtB,EAA2B;EACzB,QAAMC,MAAM,GAAGC,MAAM,CAACF,GAAD,CAArB;;EACA,MAAIC,MAAM,CAACzG,MAAP,IAAiBiG,UAArB,EAAiC;EAC/B,WAAOQ,MAAM,CAACE,MAAP,CAAcV,UAAd,EAA0B,GAA1B,CAAP;EACD;;EACD,QAAMW,OAAO,GAAGJ,GAAG,CAACK,WAAJ,CAAgBZ,UAAU,GAAG,CAA7B,CAAhB;;EACA,MAAIW,OAAO,CAAC5G,MAAR,IAAkBiG,UAAtB,EAAkC;EAChC,WAAOW,OAAP;EACD;;EACD,QAAME,WAAW,GAAGN,GAAG,CAACO,aAAJ,CAAkBd,UAAU,GAAG,CAA/B,CAApB;EACA,QAAMe,MAAM,GAAGF,WAAW,CAACG,OAAZ,CAAoB,GAApB,CAAf;EACA,QAAMC,CAAC,GAAGJ,WAAW,CAACK,SAAZ,CAAsBH,MAAtB,CAAV;EACA,SAAOF,WAAW,CAACK,SAAZ,CAAsB,CAAtB,EAAyBlB,UAAU,GAAGiB,CAAC,CAAClH,MAAxC,IAAkDkH,CAAzD;EACD;;EClDM,SAASE,qBAAT,CAA+BC,cAA/B,EAA+CC,MAA/C,EAAuD;EAC5DD,EAAAA,cAAc,CAAC9H,SAAf,CAAyBgI,GAAzB,GAA+B,SAASA,GAAT,CAAatE,KAAb,EAAoB;EACjD,QAAI,OAAOA,KAAP,KAAiB,QAArB,EAA+B,OAAO,KAAKuE,IAAL,CAAUvE,KAAV,CAAP;EAC/B,WAAO,KAAKwE,IAAL,CAAUxE,KAAV,CAAP;EACD,GAHD;;EAKAoE,EAAAA,cAAc,CAAC9H,SAAf,CAAyBiI,IAAzB,GAAgC,SAASA,IAAT,CAAcvE,KAAd,EAAqB;EACnD,SAAK,IAAIhD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKqB,IAAzB,EAA+BrB,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAIsD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK/B,OAAzB,EAAkC+B,CAAC,EAAnC,EAAuC;EACrC,aAAKoB,GAAL,CAAS1E,CAAT,EAAYsD,CAAZ,EAAe,KAAKC,GAAL,CAASvD,CAAT,EAAYsD,CAAZ,IAAiBN,KAAhC;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAPD;;EASAoE,EAAAA,cAAc,CAAC9H,SAAf,CAAyBkI,IAAzB,GAAgC,SAASA,IAAT,CAActG,MAAd,EAAsB;EACpDA,IAAAA,MAAM,GAAGmG,MAAM,CAACI,WAAP,CAAmBvG,MAAnB,CAAT;;EACA,QAAI,KAAKG,IAAL,KAAcH,MAAM,CAACG,IAArB,IACF,KAAKE,OAAL,KAAiBL,MAAM,CAACK,OAD1B,EACmC;EACjC,YAAM,IAAIb,UAAJ,CAAe,mCAAf,CAAN;EACD;;EACD,SAAK,IAAIV,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKqB,IAAzB,EAA+BrB,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAIsD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK/B,OAAzB,EAAkC+B,CAAC,EAAnC,EAAuC;EACrC,aAAKoB,GAAL,CAAS1E,CAAT,EAAYsD,CAAZ,EAAe,KAAKC,GAAL,CAASvD,CAAT,EAAYsD,CAAZ,IAAiBpC,MAAM,CAACqC,GAAP,CAAWvD,CAAX,EAAcsD,CAAd,CAAhC;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAZD;;EAcA8D,EAAAA,cAAc,CAACE,GAAf,GAAqB,SAASA,GAAT,CAAapG,MAAb,EAAqB8B,KAArB,EAA4B;EAC/C,QAAI0E,SAAS,GAAG,IAAIL,MAAJ,CAAWnG,MAAX,CAAhB;EACA,WAAOwG,SAAS,CAACJ,GAAV,CAActE,KAAd,CAAP;EACD,GAHD;;EAKAoE,EAAAA,cAAc,CAAC9H,SAAf,CAAyBqI,GAAzB,GAA+B,SAASA,GAAT,CAAa3E,KAAb,EAAoB;EACjD,QAAI,OAAOA,KAAP,KAAiB,QAArB,EAA+B,OAAO,KAAK4E,IAAL,CAAU5E,KAAV,CAAP;EAC/B,WAAO,KAAK6E,IAAL,CAAU7E,KAAV,CAAP;EACD,GAHD;;EAKAoE,EAAAA,cAAc,CAAC9H,SAAf,CAAyBsI,IAAzB,GAAgC,SAASA,IAAT,CAAc5E,KAAd,EAAqB;EACnD,SAAK,IAAIhD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKqB,IAAzB,EAA+BrB,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAIsD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK/B,OAAzB,EAAkC+B,CAAC,EAAnC,EAAuC;EACrC,aAAKoB,GAAL,CAAS1E,CAAT,EAAYsD,CAAZ,EAAe,KAAKC,GAAL,CAASvD,CAAT,EAAYsD,CAAZ,IAAiBN,KAAhC;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAPD;;EASAoE,EAAAA,cAAc,CAAC9H,SAAf,CAAyBuI,IAAzB,GAAgC,SAASA,IAAT,CAAc3G,MAAd,EAAsB;EACpDA,IAAAA,MAAM,GAAGmG,MAAM,CAACI,WAAP,CAAmBvG,MAAnB,CAAT;;EACA,QAAI,KAAKG,IAAL,KAAcH,MAAM,CAACG,IAArB,IACF,KAAKE,OAAL,KAAiBL,MAAM,CAACK,OAD1B,EACmC;EACjC,YAAM,IAAIb,UAAJ,CAAe,mCAAf,CAAN;EACD;;EACD,SAAK,IAAIV,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKqB,IAAzB,EAA+BrB,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAIsD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK/B,OAAzB,EAAkC+B,CAAC,EAAnC,EAAuC;EACrC,aAAKoB,GAAL,CAAS1E,CAAT,EAAYsD,CAAZ,EAAe,KAAKC,GAAL,CAASvD,CAAT,EAAYsD,CAAZ,IAAiBpC,MAAM,CAACqC,GAAP,CAAWvD,CAAX,EAAcsD,CAAd,CAAhC;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAZD;;EAcA8D,EAAAA,cAAc,CAACO,GAAf,GAAqB,SAASA,GAAT,CAAazG,MAAb,EAAqB8B,KAArB,EAA4B;EAC/C,QAAI0E,SAAS,GAAG,IAAIL,MAAJ,CAAWnG,MAAX,CAAhB;EACA,WAAOwG,SAAS,CAACC,GAAV,CAAc3E,KAAd,CAAP;EACD,GAHD;;EAIAoE,EAAAA,cAAc,CAAC9H,SAAf,CAAyBwI,QAAzB,GAAoCV,cAAc,CAAC9H,SAAf,CAAyBqI,GAA7D;EACAP,EAAAA,cAAc,CAAC9H,SAAf,CAAyByI,SAAzB,GAAqCX,cAAc,CAAC9H,SAAf,CAAyBsI,IAA9D;EACAR,EAAAA,cAAc,CAAC9H,SAAf,CAAyB0I,SAAzB,GAAqCZ,cAAc,CAAC9H,SAAf,CAAyBuI,IAA9D;EACAT,EAAAA,cAAc,CAACU,QAAf,GAA0BV,cAAc,CAACO,GAAzC;;EAEAP,EAAAA,cAAc,CAAC9H,SAAf,CAAyB2I,GAAzB,GAA+B,SAASA,GAAT,CAAajF,KAAb,EAAoB;EACjD,QAAI,OAAOA,KAAP,KAAiB,QAArB,EAA+B,OAAO,KAAKkF,IAAL,CAAUlF,KAAV,CAAP;EAC/B,WAAO,KAAKmF,IAAL,CAAUnF,KAAV,CAAP;EACD,GAHD;;EAKAoE,EAAAA,cAAc,CAAC9H,SAAf,CAAyB4I,IAAzB,GAAgC,SAASA,IAAT,CAAclF,KAAd,EAAqB;EACnD,SAAK,IAAIhD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKqB,IAAzB,EAA+BrB,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAIsD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK/B,OAAzB,EAAkC+B,CAAC,EAAnC,EAAuC;EACrC,aAAKoB,GAAL,CAAS1E,CAAT,EAAYsD,CAAZ,EAAe,KAAKC,GAAL,CAASvD,CAAT,EAAYsD,CAAZ,IAAiBN,KAAhC;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAPD;;EASAoE,EAAAA,cAAc,CAAC9H,SAAf,CAAyB6I,IAAzB,GAAgC,SAASA,IAAT,CAAcjH,MAAd,EAAsB;EACpDA,IAAAA,MAAM,GAAGmG,MAAM,CAACI,WAAP,CAAmBvG,MAAnB,CAAT;;EACA,QAAI,KAAKG,IAAL,KAAcH,MAAM,CAACG,IAArB,IACF,KAAKE,OAAL,KAAiBL,MAAM,CAACK,OAD1B,EACmC;EACjC,YAAM,IAAIb,UAAJ,CAAe,mCAAf,CAAN;EACD;;EACD,SAAK,IAAIV,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKqB,IAAzB,EAA+BrB,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAIsD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK/B,OAAzB,EAAkC+B,CAAC,EAAnC,EAAuC;EACrC,aAAKoB,GAAL,CAAS1E,CAAT,EAAYsD,CAAZ,EAAe,KAAKC,GAAL,CAASvD,CAAT,EAAYsD,CAAZ,IAAiBpC,MAAM,CAACqC,GAAP,CAAWvD,CAAX,EAAcsD,CAAd,CAAhC;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAZD;;EAcA8D,EAAAA,cAAc,CAACa,GAAf,GAAqB,SAASA,GAAT,CAAa/G,MAAb,EAAqB8B,KAArB,EAA4B;EAC/C,QAAI0E,SAAS,GAAG,IAAIL,MAAJ,CAAWnG,MAAX,CAAhB;EACA,WAAOwG,SAAS,CAACO,GAAV,CAAcjF,KAAd,CAAP;EACD,GAHD;;EAIAoE,EAAAA,cAAc,CAAC9H,SAAf,CAAyB8I,QAAzB,GAAoChB,cAAc,CAAC9H,SAAf,CAAyB2I,GAA7D;EACAb,EAAAA,cAAc,CAAC9H,SAAf,CAAyB+I,SAAzB,GAAqCjB,cAAc,CAAC9H,SAAf,CAAyB4I,IAA9D;EACAd,EAAAA,cAAc,CAAC9H,SAAf,CAAyBgJ,SAAzB,GAAqClB,cAAc,CAAC9H,SAAf,CAAyB6I,IAA9D;EACAf,EAAAA,cAAc,CAACgB,QAAf,GAA0BhB,cAAc,CAACa,GAAzC;;EAEAb,EAAAA,cAAc,CAAC9H,SAAf,CAAyBiJ,GAAzB,GAA+B,SAASA,GAAT,CAAavF,KAAb,EAAoB;EACjD,QAAI,OAAOA,KAAP,KAAiB,QAArB,EAA+B,OAAO,KAAKwF,IAAL,CAAUxF,KAAV,CAAP;EAC/B,WAAO,KAAKyF,IAAL,CAAUzF,KAAV,CAAP;EACD,GAHD;;EAKAoE,EAAAA,cAAc,CAAC9H,SAAf,CAAyBkJ,IAAzB,GAAgC,SAASA,IAAT,CAAcxF,KAAd,EAAqB;EACnD,SAAK,IAAIhD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKqB,IAAzB,EAA+BrB,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAIsD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK/B,OAAzB,EAAkC+B,CAAC,EAAnC,EAAuC;EACrC,aAAKoB,GAAL,CAAS1E,CAAT,EAAYsD,CAAZ,EAAe,KAAKC,GAAL,CAASvD,CAAT,EAAYsD,CAAZ,IAAiBN,KAAhC;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAPD;;EASAoE,EAAAA,cAAc,CAAC9H,SAAf,CAAyBmJ,IAAzB,GAAgC,SAASA,IAAT,CAAcvH,MAAd,EAAsB;EACpDA,IAAAA,MAAM,GAAGmG,MAAM,CAACI,WAAP,CAAmBvG,MAAnB,CAAT;;EACA,QAAI,KAAKG,IAAL,KAAcH,MAAM,CAACG,IAArB,IACF,KAAKE,OAAL,KAAiBL,MAAM,CAACK,OAD1B,EACmC;EACjC,YAAM,IAAIb,UAAJ,CAAe,mCAAf,CAAN;EACD;;EACD,SAAK,IAAIV,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKqB,IAAzB,EAA+BrB,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAIsD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK/B,OAAzB,EAAkC+B,CAAC,EAAnC,EAAuC;EACrC,aAAKoB,GAAL,CAAS1E,CAAT,EAAYsD,CAAZ,EAAe,KAAKC,GAAL,CAASvD,CAAT,EAAYsD,CAAZ,IAAiBpC,MAAM,CAACqC,GAAP,CAAWvD,CAAX,EAAcsD,CAAd,CAAhC;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAZD;;EAcA8D,EAAAA,cAAc,CAACmB,GAAf,GAAqB,SAASA,GAAT,CAAarH,MAAb,EAAqB8B,KAArB,EAA4B;EAC/C,QAAI0E,SAAS,GAAG,IAAIL,MAAJ,CAAWnG,MAAX,CAAhB;EACA,WAAOwG,SAAS,CAACa,GAAV,CAAcvF,KAAd,CAAP;EACD,GAHD;;EAIAoE,EAAAA,cAAc,CAAC9H,SAAf,CAAyBoJ,MAAzB,GAAkCtB,cAAc,CAAC9H,SAAf,CAAyBiJ,GAA3D;EACAnB,EAAAA,cAAc,CAAC9H,SAAf,CAAyBqJ,OAAzB,GAAmCvB,cAAc,CAAC9H,SAAf,CAAyBkJ,IAA5D;EACApB,EAAAA,cAAc,CAAC9H,SAAf,CAAyBsJ,OAAzB,GAAmCxB,cAAc,CAAC9H,SAAf,CAAyBmJ,IAA5D;EACArB,EAAAA,cAAc,CAACsB,MAAf,GAAwBtB,cAAc,CAACmB,GAAvC;;EAEAnB,EAAAA,cAAc,CAAC9H,SAAf,CAAyBuJ,GAAzB,GAA+B,SAASA,GAAT,CAAa7F,KAAb,EAAoB;EACjD,QAAI,OAAOA,KAAP,KAAiB,QAArB,EAA+B,OAAO,KAAK8F,IAAL,CAAU9F,KAAV,CAAP;EAC/B,WAAO,KAAK+F,IAAL,CAAU/F,KAAV,CAAP;EACD,GAHD;;EAKAoE,EAAAA,cAAc,CAAC9H,SAAf,CAAyBwJ,IAAzB,GAAgC,SAASA,IAAT,CAAc9F,KAAd,EAAqB;EACnD,SAAK,IAAIhD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKqB,IAAzB,EAA+BrB,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAIsD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK/B,OAAzB,EAAkC+B,CAAC,EAAnC,EAAuC;EACrC,aAAKoB,GAAL,CAAS1E,CAAT,EAAYsD,CAAZ,EAAe,KAAKC,GAAL,CAASvD,CAAT,EAAYsD,CAAZ,IAAiBN,KAAhC;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAPD;;EASAoE,EAAAA,cAAc,CAAC9H,SAAf,CAAyByJ,IAAzB,GAAgC,SAASA,IAAT,CAAc7H,MAAd,EAAsB;EACpDA,IAAAA,MAAM,GAAGmG,MAAM,CAACI,WAAP,CAAmBvG,MAAnB,CAAT;;EACA,QAAI,KAAKG,IAAL,KAAcH,MAAM,CAACG,IAArB,IACF,KAAKE,OAAL,KAAiBL,MAAM,CAACK,OAD1B,EACmC;EACjC,YAAM,IAAIb,UAAJ,CAAe,mCAAf,CAAN;EACD;;EACD,SAAK,IAAIV,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKqB,IAAzB,EAA+BrB,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAIsD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK/B,OAAzB,EAAkC+B,CAAC,EAAnC,EAAuC;EACrC,aAAKoB,GAAL,CAAS1E,CAAT,EAAYsD,CAAZ,EAAe,KAAKC,GAAL,CAASvD,CAAT,EAAYsD,CAAZ,IAAiBpC,MAAM,CAACqC,GAAP,CAAWvD,CAAX,EAAcsD,CAAd,CAAhC;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAZD;;EAcA8D,EAAAA,cAAc,CAACyB,GAAf,GAAqB,SAASA,GAAT,CAAa3H,MAAb,EAAqB8B,KAArB,EAA4B;EAC/C,QAAI0E,SAAS,GAAG,IAAIL,MAAJ,CAAWnG,MAAX,CAAhB;EACA,WAAOwG,SAAS,CAACmB,GAAV,CAAc7F,KAAd,CAAP;EACD,GAHD;;EAIAoE,EAAAA,cAAc,CAAC9H,SAAf,CAAyB0J,OAAzB,GAAmC5B,cAAc,CAAC9H,SAAf,CAAyBuJ,GAA5D;EACAzB,EAAAA,cAAc,CAAC9H,SAAf,CAAyB2J,QAAzB,GAAoC7B,cAAc,CAAC9H,SAAf,CAAyBwJ,IAA7D;EACA1B,EAAAA,cAAc,CAAC9H,SAAf,CAAyB4J,QAAzB,GAAoC9B,cAAc,CAAC9H,SAAf,CAAyByJ,IAA7D;EACA3B,EAAAA,cAAc,CAAC4B,OAAf,GAAyB5B,cAAc,CAACyB,GAAxC;;EAEAzB,EAAAA,cAAc,CAAC9H,SAAf,CAAyB6J,GAAzB,GAA+B,SAASA,GAAT,CAAanG,KAAb,EAAoB;EACjD,QAAI,OAAOA,KAAP,KAAiB,QAArB,EAA+B,OAAO,KAAKoG,IAAL,CAAUpG,KAAV,CAAP;EAC/B,WAAO,KAAKqG,IAAL,CAAUrG,KAAV,CAAP;EACD,GAHD;;EAKAoE,EAAAA,cAAc,CAAC9H,SAAf,CAAyB8J,IAAzB,GAAgC,SAASA,IAAT,CAAcpG,KAAd,EAAqB;EACnD,SAAK,IAAIhD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKqB,IAAzB,EAA+BrB,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAIsD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK/B,OAAzB,EAAkC+B,CAAC,EAAnC,EAAuC;EACrC,aAAKoB,GAAL,CAAS1E,CAAT,EAAYsD,CAAZ,EAAe,KAAKC,GAAL,CAASvD,CAAT,EAAYsD,CAAZ,IAAiBN,KAAhC;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAPD;;EASAoE,EAAAA,cAAc,CAAC9H,SAAf,CAAyB+J,IAAzB,GAAgC,SAASA,IAAT,CAAcnI,MAAd,EAAsB;EACpDA,IAAAA,MAAM,GAAGmG,MAAM,CAACI,WAAP,CAAmBvG,MAAnB,CAAT;;EACA,QAAI,KAAKG,IAAL,KAAcH,MAAM,CAACG,IAArB,IACF,KAAKE,OAAL,KAAiBL,MAAM,CAACK,OAD1B,EACmC;EACjC,YAAM,IAAIb,UAAJ,CAAe,mCAAf,CAAN;EACD;;EACD,SAAK,IAAIV,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKqB,IAAzB,EAA+BrB,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAIsD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK/B,OAAzB,EAAkC+B,CAAC,EAAnC,EAAuC;EACrC,aAAKoB,GAAL,CAAS1E,CAAT,EAAYsD,CAAZ,EAAe,KAAKC,GAAL,CAASvD,CAAT,EAAYsD,CAAZ,IAAiBpC,MAAM,CAACqC,GAAP,CAAWvD,CAAX,EAAcsD,CAAd,CAAhC;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAZD;;EAcA8D,EAAAA,cAAc,CAAC+B,GAAf,GAAqB,SAASA,GAAT,CAAajI,MAAb,EAAqB8B,KAArB,EAA4B;EAC/C,QAAI0E,SAAS,GAAG,IAAIL,MAAJ,CAAWnG,MAAX,CAAhB;EACA,WAAOwG,SAAS,CAACyB,GAAV,CAAcnG,KAAd,CAAP;EACD,GAHD;;EAKAoE,EAAAA,cAAc,CAAC9H,SAAf,CAAyBgK,EAAzB,GAA8B,SAASA,EAAT,CAAYtG,KAAZ,EAAmB;EAC/C,QAAI,OAAOA,KAAP,KAAiB,QAArB,EAA+B,OAAO,KAAKuG,GAAL,CAASvG,KAAT,CAAP;EAC/B,WAAO,KAAKwG,GAAL,CAASxG,KAAT,CAAP;EACD,GAHD;;EAKAoE,EAAAA,cAAc,CAAC9H,SAAf,CAAyBiK,GAAzB,GAA+B,SAASA,GAAT,CAAavG,KAAb,EAAoB;EACjD,SAAK,IAAIhD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKqB,IAAzB,EAA+BrB,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAIsD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK/B,OAAzB,EAAkC+B,CAAC,EAAnC,EAAuC;EACrC,aAAKoB,GAAL,CAAS1E,CAAT,EAAYsD,CAAZ,EAAe,KAAKC,GAAL,CAASvD,CAAT,EAAYsD,CAAZ,IAAiBN,KAAhC;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAPD;;EASAoE,EAAAA,cAAc,CAAC9H,SAAf,CAAyBkK,GAAzB,GAA+B,SAASA,GAAT,CAAatI,MAAb,EAAqB;EAClDA,IAAAA,MAAM,GAAGmG,MAAM,CAACI,WAAP,CAAmBvG,MAAnB,CAAT;;EACA,QAAI,KAAKG,IAAL,KAAcH,MAAM,CAACG,IAArB,IACF,KAAKE,OAAL,KAAiBL,MAAM,CAACK,OAD1B,EACmC;EACjC,YAAM,IAAIb,UAAJ,CAAe,mCAAf,CAAN;EACD;;EACD,SAAK,IAAIV,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKqB,IAAzB,EAA+BrB,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAIsD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK/B,OAAzB,EAAkC+B,CAAC,EAAnC,EAAuC;EACrC,aAAKoB,GAAL,CAAS1E,CAAT,EAAYsD,CAAZ,EAAe,KAAKC,GAAL,CAASvD,CAAT,EAAYsD,CAAZ,IAAiBpC,MAAM,CAACqC,GAAP,CAAWvD,CAAX,EAAcsD,CAAd,CAAhC;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAZD;;EAcA8D,EAAAA,cAAc,CAACkC,EAAf,GAAoB,SAASA,EAAT,CAAYpI,MAAZ,EAAoB8B,KAApB,EAA2B;EAC7C,QAAI0E,SAAS,GAAG,IAAIL,MAAJ,CAAWnG,MAAX,CAAhB;EACA,WAAOwG,SAAS,CAAC4B,EAAV,CAAatG,KAAb,CAAP;EACD,GAHD;;EAKAoE,EAAAA,cAAc,CAAC9H,SAAf,CAAyBmK,GAAzB,GAA+B,SAASA,GAAT,CAAazG,KAAb,EAAoB;EACjD,QAAI,OAAOA,KAAP,KAAiB,QAArB,EAA+B,OAAO,KAAK0G,IAAL,CAAU1G,KAAV,CAAP;EAC/B,WAAO,KAAK2G,IAAL,CAAU3G,KAAV,CAAP;EACD,GAHD;;EAKAoE,EAAAA,cAAc,CAAC9H,SAAf,CAAyBoK,IAAzB,GAAgC,SAASA,IAAT,CAAc1G,KAAd,EAAqB;EACnD,SAAK,IAAIhD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKqB,IAAzB,EAA+BrB,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAIsD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK/B,OAAzB,EAAkC+B,CAAC,EAAnC,EAAuC;EACrC,aAAKoB,GAAL,CAAS1E,CAAT,EAAYsD,CAAZ,EAAe,KAAKC,GAAL,CAASvD,CAAT,EAAYsD,CAAZ,IAAiBN,KAAhC;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAPD;;EASAoE,EAAAA,cAAc,CAAC9H,SAAf,CAAyBqK,IAAzB,GAAgC,SAASA,IAAT,CAAczI,MAAd,EAAsB;EACpDA,IAAAA,MAAM,GAAGmG,MAAM,CAACI,WAAP,CAAmBvG,MAAnB,CAAT;;EACA,QAAI,KAAKG,IAAL,KAAcH,MAAM,CAACG,IAArB,IACF,KAAKE,OAAL,KAAiBL,MAAM,CAACK,OAD1B,EACmC;EACjC,YAAM,IAAIb,UAAJ,CAAe,mCAAf,CAAN;EACD;;EACD,SAAK,IAAIV,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKqB,IAAzB,EAA+BrB,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAIsD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK/B,OAAzB,EAAkC+B,CAAC,EAAnC,EAAuC;EACrC,aAAKoB,GAAL,CAAS1E,CAAT,EAAYsD,CAAZ,EAAe,KAAKC,GAAL,CAASvD,CAAT,EAAYsD,CAAZ,IAAiBpC,MAAM,CAACqC,GAAP,CAAWvD,CAAX,EAAcsD,CAAd,CAAhC;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAZD;;EAcA8D,EAAAA,cAAc,CAACqC,GAAf,GAAqB,SAASA,GAAT,CAAavI,MAAb,EAAqB8B,KAArB,EAA4B;EAC/C,QAAI0E,SAAS,GAAG,IAAIL,MAAJ,CAAWnG,MAAX,CAAhB;EACA,WAAOwG,SAAS,CAAC+B,GAAV,CAAczG,KAAd,CAAP;EACD,GAHD;;EAKAoE,EAAAA,cAAc,CAAC9H,SAAf,CAAyBsK,SAAzB,GAAqC,SAASA,SAAT,CAAmB5G,KAAnB,EAA0B;EAC7D,QAAI,OAAOA,KAAP,KAAiB,QAArB,EAA+B,OAAO,KAAK6G,UAAL,CAAgB7G,KAAhB,CAAP;EAC/B,WAAO,KAAK8G,UAAL,CAAgB9G,KAAhB,CAAP;EACD,GAHD;;EAKAoE,EAAAA,cAAc,CAAC9H,SAAf,CAAyBuK,UAAzB,GAAsC,SAASA,UAAT,CAAoB7G,KAApB,EAA2B;EAC/D,SAAK,IAAIhD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKqB,IAAzB,EAA+BrB,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAIsD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK/B,OAAzB,EAAkC+B,CAAC,EAAnC,EAAuC;EACrC,aAAKoB,GAAL,CAAS1E,CAAT,EAAYsD,CAAZ,EAAe,KAAKC,GAAL,CAASvD,CAAT,EAAYsD,CAAZ,KAAkBN,KAAjC;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAPD;;EASAoE,EAAAA,cAAc,CAAC9H,SAAf,CAAyBwK,UAAzB,GAAsC,SAASA,UAAT,CAAoB5I,MAApB,EAA4B;EAChEA,IAAAA,MAAM,GAAGmG,MAAM,CAACI,WAAP,CAAmBvG,MAAnB,CAAT;;EACA,QAAI,KAAKG,IAAL,KAAcH,MAAM,CAACG,IAArB,IACF,KAAKE,OAAL,KAAiBL,MAAM,CAACK,OAD1B,EACmC;EACjC,YAAM,IAAIb,UAAJ,CAAe,mCAAf,CAAN;EACD;;EACD,SAAK,IAAIV,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKqB,IAAzB,EAA+BrB,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAIsD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK/B,OAAzB,EAAkC+B,CAAC,EAAnC,EAAuC;EACrC,aAAKoB,GAAL,CAAS1E,CAAT,EAAYsD,CAAZ,EAAe,KAAKC,GAAL,CAASvD,CAAT,EAAYsD,CAAZ,KAAkBpC,MAAM,CAACqC,GAAP,CAAWvD,CAAX,EAAcsD,CAAd,CAAjC;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAZD;;EAcA8D,EAAAA,cAAc,CAACwC,SAAf,GAA2B,SAASA,SAAT,CAAmB1I,MAAnB,EAA2B8B,KAA3B,EAAkC;EAC3D,QAAI0E,SAAS,GAAG,IAAIL,MAAJ,CAAWnG,MAAX,CAAhB;EACA,WAAOwG,SAAS,CAACkC,SAAV,CAAoB5G,KAApB,CAAP;EACD,GAHD;;EAKAoE,EAAAA,cAAc,CAAC9H,SAAf,CAAyByK,yBAAzB,GAAqD,SAASA,yBAAT,CAAmC/G,KAAnC,EAA0C;EAC7F,QAAI,OAAOA,KAAP,KAAiB,QAArB,EAA+B,OAAO,KAAKgH,0BAAL,CAAgChH,KAAhC,CAAP;EAC/B,WAAO,KAAKiH,0BAAL,CAAgCjH,KAAhC,CAAP;EACD,GAHD;;EAKAoE,EAAAA,cAAc,CAAC9H,SAAf,CAAyB0K,0BAAzB,GAAsD,SAASA,0BAAT,CAAoChH,KAApC,EAA2C;EAC/F,SAAK,IAAIhD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKqB,IAAzB,EAA+BrB,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAIsD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK/B,OAAzB,EAAkC+B,CAAC,EAAnC,EAAuC;EACrC,aAAKoB,GAAL,CAAS1E,CAAT,EAAYsD,CAAZ,EAAe,KAAKC,GAAL,CAASvD,CAAT,EAAYsD,CAAZ,KAAkBN,KAAjC;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAPD;;EASAoE,EAAAA,cAAc,CAAC9H,SAAf,CAAyB2K,0BAAzB,GAAsD,SAASA,0BAAT,CAAoC/I,MAApC,EAA4C;EAChGA,IAAAA,MAAM,GAAGmG,MAAM,CAACI,WAAP,CAAmBvG,MAAnB,CAAT;;EACA,QAAI,KAAKG,IAAL,KAAcH,MAAM,CAACG,IAArB,IACF,KAAKE,OAAL,KAAiBL,MAAM,CAACK,OAD1B,EACmC;EACjC,YAAM,IAAIb,UAAJ,CAAe,mCAAf,CAAN;EACD;;EACD,SAAK,IAAIV,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKqB,IAAzB,EAA+BrB,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAIsD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK/B,OAAzB,EAAkC+B,CAAC,EAAnC,EAAuC;EACrC,aAAKoB,GAAL,CAAS1E,CAAT,EAAYsD,CAAZ,EAAe,KAAKC,GAAL,CAASvD,CAAT,EAAYsD,CAAZ,KAAkBpC,MAAM,CAACqC,GAAP,CAAWvD,CAAX,EAAcsD,CAAd,CAAjC;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAZD;;EAcA8D,EAAAA,cAAc,CAAC2C,yBAAf,GAA2C,SAASA,yBAAT,CAAmC7I,MAAnC,EAA2C8B,KAA3C,EAAkD;EAC3F,QAAI0E,SAAS,GAAG,IAAIL,MAAJ,CAAWnG,MAAX,CAAhB;EACA,WAAOwG,SAAS,CAACqC,yBAAV,CAAoC/G,KAApC,CAAP;EACD,GAHD;;EAKAoE,EAAAA,cAAc,CAAC9H,SAAf,CAAyB4K,UAAzB,GAAsC,SAASA,UAAT,CAAoBlH,KAApB,EAA2B;EAC/D,QAAI,OAAOA,KAAP,KAAiB,QAArB,EAA+B,OAAO,KAAKmH,WAAL,CAAiBnH,KAAjB,CAAP;EAC/B,WAAO,KAAKoH,WAAL,CAAiBpH,KAAjB,CAAP;EACD,GAHD;;EAKAoE,EAAAA,cAAc,CAAC9H,SAAf,CAAyB6K,WAAzB,GAAuC,SAASA,WAAT,CAAqBnH,KAArB,EAA4B;EACjE,SAAK,IAAIhD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKqB,IAAzB,EAA+BrB,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAIsD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK/B,OAAzB,EAAkC+B,CAAC,EAAnC,EAAuC;EACrC,aAAKoB,GAAL,CAAS1E,CAAT,EAAYsD,CAAZ,EAAe,KAAKC,GAAL,CAASvD,CAAT,EAAYsD,CAAZ,MAAmBN,KAAlC;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAPD;;EASAoE,EAAAA,cAAc,CAAC9H,SAAf,CAAyB8K,WAAzB,GAAuC,SAASA,WAAT,CAAqBlJ,MAArB,EAA6B;EAClEA,IAAAA,MAAM,GAAGmG,MAAM,CAACI,WAAP,CAAmBvG,MAAnB,CAAT;;EACA,QAAI,KAAKG,IAAL,KAAcH,MAAM,CAACG,IAArB,IACF,KAAKE,OAAL,KAAiBL,MAAM,CAACK,OAD1B,EACmC;EACjC,YAAM,IAAIb,UAAJ,CAAe,mCAAf,CAAN;EACD;;EACD,SAAK,IAAIV,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKqB,IAAzB,EAA+BrB,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAIsD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK/B,OAAzB,EAAkC+B,CAAC,EAAnC,EAAuC;EACrC,aAAKoB,GAAL,CAAS1E,CAAT,EAAYsD,CAAZ,EAAe,KAAKC,GAAL,CAASvD,CAAT,EAAYsD,CAAZ,MAAmBpC,MAAM,CAACqC,GAAP,CAAWvD,CAAX,EAAcsD,CAAd,CAAlC;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAZD;;EAcA8D,EAAAA,cAAc,CAAC8C,UAAf,GAA4B,SAASA,UAAT,CAAoBhJ,MAApB,EAA4B8B,KAA5B,EAAmC;EAC7D,QAAI0E,SAAS,GAAG,IAAIL,MAAJ,CAAWnG,MAAX,CAAhB;EACA,WAAOwG,SAAS,CAACwC,UAAV,CAAqBlH,KAArB,CAAP;EACD,GAHD;;EAIAoE,EAAAA,cAAc,CAAC9H,SAAf,CAAyB+K,kBAAzB,GAA8CjD,cAAc,CAAC9H,SAAf,CAAyB4K,UAAvE;EACA9C,EAAAA,cAAc,CAAC9H,SAAf,CAAyBgL,mBAAzB,GAA+ClD,cAAc,CAAC9H,SAAf,CAAyB6K,WAAxE;EACA/C,EAAAA,cAAc,CAAC9H,SAAf,CAAyBiL,mBAAzB,GAA+CnD,cAAc,CAAC9H,SAAf,CAAyB8K,WAAxE;EACAhD,EAAAA,cAAc,CAACiD,kBAAf,GAAoCjD,cAAc,CAAC8C,UAAnD;;EAEA9C,EAAAA,cAAc,CAAC9H,SAAf,CAAyBkL,GAAzB,GAA+B,SAASA,GAAT,GAAe;EAC5C,SAAK,IAAIxK,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKqB,IAAzB,EAA+BrB,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAIsD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK/B,OAAzB,EAAkC+B,CAAC,EAAnC,EAAuC;EACrC,aAAKoB,GAAL,CAAS1E,CAAT,EAAYsD,CAAZ,EAAe,CAAE,KAAKC,GAAL,CAASvD,CAAT,EAAYsD,CAAZ,CAAjB;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAPD;;EASA8D,EAAAA,cAAc,CAACoD,GAAf,GAAqB,SAASA,GAAT,CAAatJ,MAAb,EAAqB;EACxC,QAAIwG,SAAS,GAAG,IAAIL,MAAJ,CAAWnG,MAAX,CAAhB;EACA,WAAOwG,SAAS,CAAC8C,GAAV,EAAP;EACD,GAHD;;EAKApD,EAAAA,cAAc,CAAC9H,SAAf,CAAyBmL,GAAzB,GAA+B,SAASA,GAAT,GAAe;EAC5C,SAAK,IAAIzK,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKqB,IAAzB,EAA+BrB,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAIsD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK/B,OAAzB,EAAkC+B,CAAC,EAAnC,EAAuC;EACrC,aAAKoB,GAAL,CAAS1E,CAAT,EAAYsD,CAAZ,EAAeyB,IAAI,CAAC0F,GAAL,CAAS,KAAKlH,GAAL,CAASvD,CAAT,EAAYsD,CAAZ,CAAT,CAAf;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAPD;;EASA8D,EAAAA,cAAc,CAACqD,GAAf,GAAqB,SAASA,GAAT,CAAavJ,MAAb,EAAqB;EACxC,QAAIwG,SAAS,GAAG,IAAIL,MAAJ,CAAWnG,MAAX,CAAhB;EACA,WAAOwG,SAAS,CAAC+C,GAAV,EAAP;EACD,GAHD;;EAKArD,EAAAA,cAAc,CAAC9H,SAAf,CAAyBoL,IAAzB,GAAgC,SAASA,IAAT,GAAgB;EAC9C,SAAK,IAAI1K,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKqB,IAAzB,EAA+BrB,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAIsD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK/B,OAAzB,EAAkC+B,CAAC,EAAnC,EAAuC;EACrC,aAAKoB,GAAL,CAAS1E,CAAT,EAAYsD,CAAZ,EAAeyB,IAAI,CAAC2F,IAAL,CAAU,KAAKnH,GAAL,CAASvD,CAAT,EAAYsD,CAAZ,CAAV,CAAf;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAPD;;EASA8D,EAAAA,cAAc,CAACsD,IAAf,GAAsB,SAASA,IAAT,CAAcxJ,MAAd,EAAsB;EAC1C,QAAIwG,SAAS,GAAG,IAAIL,MAAJ,CAAWnG,MAAX,CAAhB;EACA,WAAOwG,SAAS,CAACgD,IAAV,EAAP;EACD,GAHD;;EAKAtD,EAAAA,cAAc,CAAC9H,SAAf,CAAyBqL,KAAzB,GAAiC,SAASA,KAAT,GAAiB;EAChD,SAAK,IAAI3K,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKqB,IAAzB,EAA+BrB,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAIsD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK/B,OAAzB,EAAkC+B,CAAC,EAAnC,EAAuC;EACrC,aAAKoB,GAAL,CAAS1E,CAAT,EAAYsD,CAAZ,EAAeyB,IAAI,CAAC4F,KAAL,CAAW,KAAKpH,GAAL,CAASvD,CAAT,EAAYsD,CAAZ,CAAX,CAAf;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAPD;;EASA8D,EAAAA,cAAc,CAACuD,KAAf,GAAuB,SAASA,KAAT,CAAezJ,MAAf,EAAuB;EAC5C,QAAIwG,SAAS,GAAG,IAAIL,MAAJ,CAAWnG,MAAX,CAAhB;EACA,WAAOwG,SAAS,CAACiD,KAAV,EAAP;EACD,GAHD;;EAKAvD,EAAAA,cAAc,CAAC9H,SAAf,CAAyBsL,IAAzB,GAAgC,SAASA,IAAT,GAAgB;EAC9C,SAAK,IAAI5K,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKqB,IAAzB,EAA+BrB,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAIsD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK/B,OAAzB,EAAkC+B,CAAC,EAAnC,EAAuC;EACrC,aAAKoB,GAAL,CAAS1E,CAAT,EAAYsD,CAAZ,EAAeyB,IAAI,CAAC6F,IAAL,CAAU,KAAKrH,GAAL,CAASvD,CAAT,EAAYsD,CAAZ,CAAV,CAAf;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAPD;;EASA8D,EAAAA,cAAc,CAACwD,IAAf,GAAsB,SAASA,IAAT,CAAc1J,MAAd,EAAsB;EAC1C,QAAIwG,SAAS,GAAG,IAAIL,MAAJ,CAAWnG,MAAX,CAAhB;EACA,WAAOwG,SAAS,CAACkD,IAAV,EAAP;EACD,GAHD;;EAKAxD,EAAAA,cAAc,CAAC9H,SAAf,CAAyBuL,KAAzB,GAAiC,SAASA,KAAT,GAAiB;EAChD,SAAK,IAAI7K,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKqB,IAAzB,EAA+BrB,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAIsD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK/B,OAAzB,EAAkC+B,CAAC,EAAnC,EAAuC;EACrC,aAAKoB,GAAL,CAAS1E,CAAT,EAAYsD,CAAZ,EAAeyB,IAAI,CAAC8F,KAAL,CAAW,KAAKtH,GAAL,CAASvD,CAAT,EAAYsD,CAAZ,CAAX,CAAf;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAPD;;EASA8D,EAAAA,cAAc,CAACyD,KAAf,GAAuB,SAASA,KAAT,CAAe3J,MAAf,EAAuB;EAC5C,QAAIwG,SAAS,GAAG,IAAIL,MAAJ,CAAWnG,MAAX,CAAhB;EACA,WAAOwG,SAAS,CAACmD,KAAV,EAAP;EACD,GAHD;;EAKAzD,EAAAA,cAAc,CAAC9H,SAAf,CAAyBwL,IAAzB,GAAgC,SAASA,IAAT,GAAgB;EAC9C,SAAK,IAAI9K,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKqB,IAAzB,EAA+BrB,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAIsD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK/B,OAAzB,EAAkC+B,CAAC,EAAnC,EAAuC;EACrC,aAAKoB,GAAL,CAAS1E,CAAT,EAAYsD,CAAZ,EAAeyB,IAAI,CAAC+F,IAAL,CAAU,KAAKvH,GAAL,CAASvD,CAAT,EAAYsD,CAAZ,CAAV,CAAf;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAPD;;EASA8D,EAAAA,cAAc,CAAC0D,IAAf,GAAsB,SAASA,IAAT,CAAc5J,MAAd,EAAsB;EAC1C,QAAIwG,SAAS,GAAG,IAAIL,MAAJ,CAAWnG,MAAX,CAAhB;EACA,WAAOwG,SAAS,CAACoD,IAAV,EAAP;EACD,GAHD;;EAKA1D,EAAAA,cAAc,CAAC9H,SAAf,CAAyByL,KAAzB,GAAiC,SAASA,KAAT,GAAiB;EAChD,SAAK,IAAI/K,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKqB,IAAzB,EAA+BrB,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAIsD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK/B,OAAzB,EAAkC+B,CAAC,EAAnC,EAAuC;EACrC,aAAKoB,GAAL,CAAS1E,CAAT,EAAYsD,CAAZ,EAAeyB,IAAI,CAACgG,KAAL,CAAW,KAAKxH,GAAL,CAASvD,CAAT,EAAYsD,CAAZ,CAAX,CAAf;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAPD;;EASA8D,EAAAA,cAAc,CAAC2D,KAAf,GAAuB,SAASA,KAAT,CAAe7J,MAAf,EAAuB;EAC5C,QAAIwG,SAAS,GAAG,IAAIL,MAAJ,CAAWnG,MAAX,CAAhB;EACA,WAAOwG,SAAS,CAACqD,KAAV,EAAP;EACD,GAHD;;EAKA3D,EAAAA,cAAc,CAAC9H,SAAf,CAAyB0L,IAAzB,GAAgC,SAASA,IAAT,GAAgB;EAC9C,SAAK,IAAIhL,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKqB,IAAzB,EAA+BrB,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAIsD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK/B,OAAzB,EAAkC+B,CAAC,EAAnC,EAAuC;EACrC,aAAKoB,GAAL,CAAS1E,CAAT,EAAYsD,CAAZ,EAAeyB,IAAI,CAACiG,IAAL,CAAU,KAAKzH,GAAL,CAASvD,CAAT,EAAYsD,CAAZ,CAAV,CAAf;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAPD;;EASA8D,EAAAA,cAAc,CAAC4D,IAAf,GAAsB,SAASA,IAAT,CAAc9J,MAAd,EAAsB;EAC1C,QAAIwG,SAAS,GAAG,IAAIL,MAAJ,CAAWnG,MAAX,CAAhB;EACA,WAAOwG,SAAS,CAACsD,IAAV,EAAP;EACD,GAHD;;EAKA5D,EAAAA,cAAc,CAAC9H,SAAf,CAAyB2L,IAAzB,GAAgC,SAASA,IAAT,GAAgB;EAC9C,SAAK,IAAIjL,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKqB,IAAzB,EAA+BrB,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAIsD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK/B,OAAzB,EAAkC+B,CAAC,EAAnC,EAAuC;EACrC,aAAKoB,GAAL,CAAS1E,CAAT,EAAYsD,CAAZ,EAAeyB,IAAI,CAACkG,IAAL,CAAU,KAAK1H,GAAL,CAASvD,CAAT,EAAYsD,CAAZ,CAAV,CAAf;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAPD;;EASA8D,EAAAA,cAAc,CAAC6D,IAAf,GAAsB,SAASA,IAAT,CAAc/J,MAAd,EAAsB;EAC1C,QAAIwG,SAAS,GAAG,IAAIL,MAAJ,CAAWnG,MAAX,CAAhB;EACA,WAAOwG,SAAS,CAACuD,IAAV,EAAP;EACD,GAHD;;EAKA7D,EAAAA,cAAc,CAAC9H,SAAf,CAAyB4L,KAAzB,GAAiC,SAASA,KAAT,GAAiB;EAChD,SAAK,IAAIlL,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKqB,IAAzB,EAA+BrB,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAIsD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK/B,OAAzB,EAAkC+B,CAAC,EAAnC,EAAuC;EACrC,aAAKoB,GAAL,CAAS1E,CAAT,EAAYsD,CAAZ,EAAeyB,IAAI,CAACmG,KAAL,CAAW,KAAK3H,GAAL,CAASvD,CAAT,EAAYsD,CAAZ,CAAX,CAAf;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAPD;;EASA8D,EAAAA,cAAc,CAAC8D,KAAf,GAAuB,SAASA,KAAT,CAAehK,MAAf,EAAuB;EAC5C,QAAIwG,SAAS,GAAG,IAAIL,MAAJ,CAAWnG,MAAX,CAAhB;EACA,WAAOwG,SAAS,CAACwD,KAAV,EAAP;EACD,GAHD;;EAKA9D,EAAAA,cAAc,CAAC9H,SAAf,CAAyB6L,GAAzB,GAA+B,SAASA,GAAT,GAAe;EAC5C,SAAK,IAAInL,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKqB,IAAzB,EAA+BrB,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAIsD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK/B,OAAzB,EAAkC+B,CAAC,EAAnC,EAAuC;EACrC,aAAKoB,GAAL,CAAS1E,CAAT,EAAYsD,CAAZ,EAAeyB,IAAI,CAACoG,GAAL,CAAS,KAAK5H,GAAL,CAASvD,CAAT,EAAYsD,CAAZ,CAAT,CAAf;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAPD;;EASA8D,EAAAA,cAAc,CAAC+D,GAAf,GAAqB,SAASA,GAAT,CAAajK,MAAb,EAAqB;EACxC,QAAIwG,SAAS,GAAG,IAAIL,MAAJ,CAAWnG,MAAX,CAAhB;EACA,WAAOwG,SAAS,CAACyD,GAAV,EAAP;EACD,GAHD;;EAKA/D,EAAAA,cAAc,CAAC9H,SAAf,CAAyB8L,IAAzB,GAAgC,SAASA,IAAT,GAAgB;EAC9C,SAAK,IAAIpL,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKqB,IAAzB,EAA+BrB,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAIsD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK/B,OAAzB,EAAkC+B,CAAC,EAAnC,EAAuC;EACrC,aAAKoB,GAAL,CAAS1E,CAAT,EAAYsD,CAAZ,EAAeyB,IAAI,CAACqG,IAAL,CAAU,KAAK7H,GAAL,CAASvD,CAAT,EAAYsD,CAAZ,CAAV,CAAf;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAPD;;EASA8D,EAAAA,cAAc,CAACgE,IAAf,GAAsB,SAASA,IAAT,CAAclK,MAAd,EAAsB;EAC1C,QAAIwG,SAAS,GAAG,IAAIL,MAAJ,CAAWnG,MAAX,CAAhB;EACA,WAAOwG,SAAS,CAAC0D,IAAV,EAAP;EACD,GAHD;;EAKAhE,EAAAA,cAAc,CAAC9H,SAAf,CAAyB+L,GAAzB,GAA+B,SAASA,GAAT,GAAe;EAC5C,SAAK,IAAIrL,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKqB,IAAzB,EAA+BrB,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAIsD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK/B,OAAzB,EAAkC+B,CAAC,EAAnC,EAAuC;EACrC,aAAKoB,GAAL,CAAS1E,CAAT,EAAYsD,CAAZ,EAAeyB,IAAI,CAACsG,GAAL,CAAS,KAAK9H,GAAL,CAASvD,CAAT,EAAYsD,CAAZ,CAAT,CAAf;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAPD;;EASA8D,EAAAA,cAAc,CAACiE,GAAf,GAAqB,SAASA,GAAT,CAAanK,MAAb,EAAqB;EACxC,QAAIwG,SAAS,GAAG,IAAIL,MAAJ,CAAWnG,MAAX,CAAhB;EACA,WAAOwG,SAAS,CAAC2D,GAAV,EAAP;EACD,GAHD;;EAKAjE,EAAAA,cAAc,CAAC9H,SAAf,CAAyBgM,KAAzB,GAAiC,SAASA,KAAT,GAAiB;EAChD,SAAK,IAAItL,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKqB,IAAzB,EAA+BrB,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAIsD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK/B,OAAzB,EAAkC+B,CAAC,EAAnC,EAAuC;EACrC,aAAKoB,GAAL,CAAS1E,CAAT,EAAYsD,CAAZ,EAAeyB,IAAI,CAACuG,KAAL,CAAW,KAAK/H,GAAL,CAASvD,CAAT,EAAYsD,CAAZ,CAAX,CAAf;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAPD;;EASA8D,EAAAA,cAAc,CAACkE,KAAf,GAAuB,SAASA,KAAT,CAAepK,MAAf,EAAuB;EAC5C,QAAIwG,SAAS,GAAG,IAAIL,MAAJ,CAAWnG,MAAX,CAAhB;EACA,WAAOwG,SAAS,CAAC4D,KAAV,EAAP;EACD,GAHD;;EAKAlE,EAAAA,cAAc,CAAC9H,SAAf,CAAyBiM,KAAzB,GAAiC,SAASA,KAAT,GAAiB;EAChD,SAAK,IAAIvL,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKqB,IAAzB,EAA+BrB,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAIsD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK/B,OAAzB,EAAkC+B,CAAC,EAAnC,EAAuC;EACrC,aAAKoB,GAAL,CAAS1E,CAAT,EAAYsD,CAAZ,EAAeyB,IAAI,CAACwG,KAAL,CAAW,KAAKhI,GAAL,CAASvD,CAAT,EAAYsD,CAAZ,CAAX,CAAf;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAPD;;EASA8D,EAAAA,cAAc,CAACmE,KAAf,GAAuB,SAASA,KAAT,CAAerK,MAAf,EAAuB;EAC5C,QAAIwG,SAAS,GAAG,IAAIL,MAAJ,CAAWnG,MAAX,CAAhB;EACA,WAAOwG,SAAS,CAAC6D,KAAV,EAAP;EACD,GAHD;;EAKAnE,EAAAA,cAAc,CAAC9H,SAAf,CAAyBkM,MAAzB,GAAkC,SAASA,MAAT,GAAkB;EAClD,SAAK,IAAIxL,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKqB,IAAzB,EAA+BrB,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAIsD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK/B,OAAzB,EAAkC+B,CAAC,EAAnC,EAAuC;EACrC,aAAKoB,GAAL,CAAS1E,CAAT,EAAYsD,CAAZ,EAAeyB,IAAI,CAACyG,MAAL,CAAY,KAAKjI,GAAL,CAASvD,CAAT,EAAYsD,CAAZ,CAAZ,CAAf;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAPD;;EASA8D,EAAAA,cAAc,CAACoE,MAAf,GAAwB,SAASA,MAAT,CAAgBtK,MAAhB,EAAwB;EAC9C,QAAIwG,SAAS,GAAG,IAAIL,MAAJ,CAAWnG,MAAX,CAAhB;EACA,WAAOwG,SAAS,CAAC8D,MAAV,EAAP;EACD,GAHD;;EAKApE,EAAAA,cAAc,CAAC9H,SAAf,CAAyBmM,GAAzB,GAA+B,SAASA,GAAT,GAAe;EAC5C,SAAK,IAAIzL,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKqB,IAAzB,EAA+BrB,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAIsD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK/B,OAAzB,EAAkC+B,CAAC,EAAnC,EAAuC;EACrC,aAAKoB,GAAL,CAAS1E,CAAT,EAAYsD,CAAZ,EAAeyB,IAAI,CAAC0G,GAAL,CAAS,KAAKlI,GAAL,CAASvD,CAAT,EAAYsD,CAAZ,CAAT,CAAf;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAPD;;EASA8D,EAAAA,cAAc,CAACqE,GAAf,GAAqB,SAASA,GAAT,CAAavK,MAAb,EAAqB;EACxC,QAAIwG,SAAS,GAAG,IAAIL,MAAJ,CAAWnG,MAAX,CAAhB;EACA,WAAOwG,SAAS,CAAC+D,GAAV,EAAP;EACD,GAHD;;EAKArE,EAAAA,cAAc,CAAC9H,SAAf,CAAyBoM,KAAzB,GAAiC,SAASA,KAAT,GAAiB;EAChD,SAAK,IAAI1L,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKqB,IAAzB,EAA+BrB,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAIsD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK/B,OAAzB,EAAkC+B,CAAC,EAAnC,EAAuC;EACrC,aAAKoB,GAAL,CAAS1E,CAAT,EAAYsD,CAAZ,EAAeyB,IAAI,CAAC2G,KAAL,CAAW,KAAKnI,GAAL,CAASvD,CAAT,EAAYsD,CAAZ,CAAX,CAAf;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAPD;;EASA8D,EAAAA,cAAc,CAACsE,KAAf,GAAuB,SAASA,KAAT,CAAexK,MAAf,EAAuB;EAC5C,QAAIwG,SAAS,GAAG,IAAIL,MAAJ,CAAWnG,MAAX,CAAhB;EACA,WAAOwG,SAAS,CAACgE,KAAV,EAAP;EACD,GAHD;;EAKAtE,EAAAA,cAAc,CAAC9H,SAAf,CAAyBqM,KAAzB,GAAiC,SAASA,KAAT,GAAiB;EAChD,SAAK,IAAI3L,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKqB,IAAzB,EAA+BrB,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAIsD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK/B,OAAzB,EAAkC+B,CAAC,EAAnC,EAAuC;EACrC,aAAKoB,GAAL,CAAS1E,CAAT,EAAYsD,CAAZ,EAAeyB,IAAI,CAAC4G,KAAL,CAAW,KAAKpI,GAAL,CAASvD,CAAT,EAAYsD,CAAZ,CAAX,CAAf;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAPD;;EASA8D,EAAAA,cAAc,CAACuE,KAAf,GAAuB,SAASA,KAAT,CAAezK,MAAf,EAAuB;EAC5C,QAAIwG,SAAS,GAAG,IAAIL,MAAJ,CAAWnG,MAAX,CAAhB;EACA,WAAOwG,SAAS,CAACiE,KAAV,EAAP;EACD,GAHD;;EAKAvE,EAAAA,cAAc,CAAC9H,SAAf,CAAyBsM,IAAzB,GAAgC,SAASA,IAAT,GAAgB;EAC9C,SAAK,IAAI5L,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKqB,IAAzB,EAA+BrB,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAIsD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK/B,OAAzB,EAAkC+B,CAAC,EAAnC,EAAuC;EACrC,aAAKoB,GAAL,CAAS1E,CAAT,EAAYsD,CAAZ,EAAeyB,IAAI,CAAC6G,IAAL,CAAU,KAAKrI,GAAL,CAASvD,CAAT,EAAYsD,CAAZ,CAAV,CAAf;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAPD;;EASA8D,EAAAA,cAAc,CAACwE,IAAf,GAAsB,SAASA,IAAT,CAAc1K,MAAd,EAAsB;EAC1C,QAAIwG,SAAS,GAAG,IAAIL,MAAJ,CAAWnG,MAAX,CAAhB;EACA,WAAOwG,SAAS,CAACkE,IAAV,EAAP;EACD,GAHD;;EAKAxE,EAAAA,cAAc,CAAC9H,SAAf,CAAyBuM,KAAzB,GAAiC,SAASA,KAAT,GAAiB;EAChD,SAAK,IAAI7L,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKqB,IAAzB,EAA+BrB,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAIsD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK/B,OAAzB,EAAkC+B,CAAC,EAAnC,EAAuC;EACrC,aAAKoB,GAAL,CAAS1E,CAAT,EAAYsD,CAAZ,EAAeyB,IAAI,CAAC8G,KAAL,CAAW,KAAKtI,GAAL,CAASvD,CAAT,EAAYsD,CAAZ,CAAX,CAAf;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAPD;;EASA8D,EAAAA,cAAc,CAACyE,KAAf,GAAuB,SAASA,KAAT,CAAe3K,MAAf,EAAuB;EAC5C,QAAIwG,SAAS,GAAG,IAAIL,MAAJ,CAAWnG,MAAX,CAAhB;EACA,WAAOwG,SAAS,CAACmE,KAAV,EAAP;EACD,GAHD;;EAKAzE,EAAAA,cAAc,CAAC9H,SAAf,CAAyBwM,IAAzB,GAAgC,SAASA,IAAT,GAAgB;EAC9C,SAAK,IAAI9L,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKqB,IAAzB,EAA+BrB,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAIsD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK/B,OAAzB,EAAkC+B,CAAC,EAAnC,EAAuC;EACrC,aAAKoB,GAAL,CAAS1E,CAAT,EAAYsD,CAAZ,EAAeyB,IAAI,CAAC+G,IAAL,CAAU,KAAKvI,GAAL,CAASvD,CAAT,EAAYsD,CAAZ,CAAV,CAAf;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAPD;;EASA8D,EAAAA,cAAc,CAAC0E,IAAf,GAAsB,SAASA,IAAT,CAAc5K,MAAd,EAAsB;EAC1C,QAAIwG,SAAS,GAAG,IAAIL,MAAJ,CAAWnG,MAAX,CAAhB;EACA,WAAOwG,SAAS,CAACoE,IAAV,EAAP;EACD,GAHD;;EAKA1E,EAAAA,cAAc,CAAC9H,SAAf,CAAyByM,GAAzB,GAA+B,SAASA,GAAT,GAAe;EAC5C,SAAK,IAAI/L,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKqB,IAAzB,EAA+BrB,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAIsD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK/B,OAAzB,EAAkC+B,CAAC,EAAnC,EAAuC;EACrC,aAAKoB,GAAL,CAAS1E,CAAT,EAAYsD,CAAZ,EAAeyB,IAAI,CAACgH,GAAL,CAAS,KAAKxI,GAAL,CAASvD,CAAT,EAAYsD,CAAZ,CAAT,CAAf;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAPD;;EASA8D,EAAAA,cAAc,CAAC2E,GAAf,GAAqB,SAASA,GAAT,CAAa7K,MAAb,EAAqB;EACxC,QAAIwG,SAAS,GAAG,IAAIL,MAAJ,CAAWnG,MAAX,CAAhB;EACA,WAAOwG,SAAS,CAACqE,GAAV,EAAP;EACD,GAHD;;EAKA3E,EAAAA,cAAc,CAAC9H,SAAf,CAAyB0M,IAAzB,GAAgC,SAASA,IAAT,GAAgB;EAC9C,SAAK,IAAIhM,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKqB,IAAzB,EAA+BrB,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAIsD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK/B,OAAzB,EAAkC+B,CAAC,EAAnC,EAAuC;EACrC,aAAKoB,GAAL,CAAS1E,CAAT,EAAYsD,CAAZ,EAAeyB,IAAI,CAACiH,IAAL,CAAU,KAAKzI,GAAL,CAASvD,CAAT,EAAYsD,CAAZ,CAAV,CAAf;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAPD;;EASA8D,EAAAA,cAAc,CAAC4E,IAAf,GAAsB,SAASA,IAAT,CAAc9K,MAAd,EAAsB;EAC1C,QAAIwG,SAAS,GAAG,IAAIL,MAAJ,CAAWnG,MAAX,CAAhB;EACA,WAAOwG,SAAS,CAACsE,IAAV,EAAP;EACD,GAHD;;EAKA5E,EAAAA,cAAc,CAAC9H,SAAf,CAAyB2F,IAAzB,GAAgC,SAASA,IAAT,GAAgB;EAC9C,SAAK,IAAIjF,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKqB,IAAzB,EAA+BrB,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAIsD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK/B,OAAzB,EAAkC+B,CAAC,EAAnC,EAAuC;EACrC,aAAKoB,GAAL,CAAS1E,CAAT,EAAYsD,CAAZ,EAAeyB,IAAI,CAACE,IAAL,CAAU,KAAK1B,GAAL,CAASvD,CAAT,EAAYsD,CAAZ,CAAV,CAAf;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAPD;;EASA8D,EAAAA,cAAc,CAACnC,IAAf,GAAsB,SAASA,IAAT,CAAc/D,MAAd,EAAsB;EAC1C,QAAIwG,SAAS,GAAG,IAAIL,MAAJ,CAAWnG,MAAX,CAAhB;EACA,WAAOwG,SAAS,CAACzC,IAAV,EAAP;EACD,GAHD;;EAKAmC,EAAAA,cAAc,CAAC9H,SAAf,CAAyB2M,GAAzB,GAA+B,SAASA,GAAT,GAAe;EAC5C,SAAK,IAAIjM,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKqB,IAAzB,EAA+BrB,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAIsD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK/B,OAAzB,EAAkC+B,CAAC,EAAnC,EAAuC;EACrC,aAAKoB,GAAL,CAAS1E,CAAT,EAAYsD,CAAZ,EAAeyB,IAAI,CAACkH,GAAL,CAAS,KAAK1I,GAAL,CAASvD,CAAT,EAAYsD,CAAZ,CAAT,CAAf;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAPD;;EASA8D,EAAAA,cAAc,CAAC6E,GAAf,GAAqB,SAASA,GAAT,CAAa/K,MAAb,EAAqB;EACxC,QAAIwG,SAAS,GAAG,IAAIL,MAAJ,CAAWnG,MAAX,CAAhB;EACA,WAAOwG,SAAS,CAACuE,GAAV,EAAP;EACD,GAHD;;EAKA7E,EAAAA,cAAc,CAAC9H,SAAf,CAAyB4M,IAAzB,GAAgC,SAASA,IAAT,GAAgB;EAC9C,SAAK,IAAIlM,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKqB,IAAzB,EAA+BrB,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAIsD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK/B,OAAzB,EAAkC+B,CAAC,EAAnC,EAAuC;EACrC,aAAKoB,GAAL,CAAS1E,CAAT,EAAYsD,CAAZ,EAAeyB,IAAI,CAACmH,IAAL,CAAU,KAAK3I,GAAL,CAASvD,CAAT,EAAYsD,CAAZ,CAAV,CAAf;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAPD;;EASA8D,EAAAA,cAAc,CAAC8E,IAAf,GAAsB,SAASA,IAAT,CAAchL,MAAd,EAAsB;EAC1C,QAAIwG,SAAS,GAAG,IAAIL,MAAJ,CAAWnG,MAAX,CAAhB;EACA,WAAOwG,SAAS,CAACwE,IAAV,EAAP;EACD,GAHD;;EAKA9E,EAAAA,cAAc,CAAC9H,SAAf,CAAyB6M,KAAzB,GAAiC,SAASA,KAAT,GAAiB;EAChD,SAAK,IAAInM,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKqB,IAAzB,EAA+BrB,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAIsD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK/B,OAAzB,EAAkC+B,CAAC,EAAnC,EAAuC;EACrC,aAAKoB,GAAL,CAAS1E,CAAT,EAAYsD,CAAZ,EAAeyB,IAAI,CAACoH,KAAL,CAAW,KAAK5I,GAAL,CAASvD,CAAT,EAAYsD,CAAZ,CAAX,CAAf;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAPD;;EASA8D,EAAAA,cAAc,CAAC+E,KAAf,GAAuB,SAASA,KAAT,CAAejL,MAAf,EAAuB;EAC5C,QAAIwG,SAAS,GAAG,IAAIL,MAAJ,CAAWnG,MAAX,CAAhB;EACA,WAAOwG,SAAS,CAACyE,KAAV,EAAP;EACD,GAHD;;EAKA/E,EAAAA,cAAc,CAACpC,GAAf,GAAqB,SAASA,GAAT,CAAa9D,MAAb,EAAqBkL,IAArB,EAA2B;EAC9C,QAAI1E,SAAS,GAAG,IAAIL,MAAJ,CAAWnG,MAAX,CAAhB;EACA,WAAOwG,SAAS,CAAC1C,GAAV,CAAcoH,IAAd,CAAP;EACD,GAHD;;EAKAhF,EAAAA,cAAc,CAAC9H,SAAf,CAAyB0F,GAAzB,GAA+B,SAASA,GAAT,CAAahC,KAAb,EAAoB;EACjD,QAAI,OAAOA,KAAP,KAAiB,QAArB,EAA+B,OAAO,KAAKqJ,IAAL,CAAUrJ,KAAV,CAAP;EAC/B,WAAO,KAAKsJ,IAAL,CAAUtJ,KAAV,CAAP;EACD,GAHD;;EAKAoE,EAAAA,cAAc,CAAC9H,SAAf,CAAyB+M,IAAzB,GAAgC,SAASA,IAAT,CAAcrJ,KAAd,EAAqB;EACnD,SAAK,IAAIhD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKqB,IAAzB,EAA+BrB,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAIsD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK/B,OAAzB,EAAkC+B,CAAC,EAAnC,EAAuC;EACrC,aAAKoB,GAAL,CAAS1E,CAAT,EAAYsD,CAAZ,EAAeyB,IAAI,CAACC,GAAL,CAAS,KAAKzB,GAAL,CAASvD,CAAT,EAAYsD,CAAZ,CAAT,EAAyBN,KAAzB,CAAf;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAPD;;EASAoE,EAAAA,cAAc,CAAC9H,SAAf,CAAyBgN,IAAzB,GAAgC,SAASA,IAAT,CAAcpL,MAAd,EAAsB;EACpDA,IAAAA,MAAM,GAAGmG,MAAM,CAACI,WAAP,CAAmBvG,MAAnB,CAAT;;EACA,QAAI,KAAKG,IAAL,KAAcH,MAAM,CAACG,IAArB,IACF,KAAKE,OAAL,KAAiBL,MAAM,CAACK,OAD1B,EACmC;EACjC,YAAM,IAAIb,UAAJ,CAAe,mCAAf,CAAN;EACD;;EACD,SAAK,IAAIV,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKqB,IAAzB,EAA+BrB,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAIsD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK/B,OAAzB,EAAkC+B,CAAC,EAAnC,EAAuC;EACrC,aAAKoB,GAAL,CAAS1E,CAAT,EAAYsD,CAAZ,EAAeyB,IAAI,CAACC,GAAL,CAAS,KAAKzB,GAAL,CAASvD,CAAT,EAAYsD,CAAZ,CAAT,EAAyBpC,MAAM,CAACqC,GAAP,CAAWvD,CAAX,EAAcsD,CAAd,CAAzB,CAAf;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAZD;EAaD;;ECrxBM,MAAM8D,cAAN,CAAqB;EAC1B,SAAOmF,WAAP,CAAmBC,OAAnB,EAA4BC,UAA5B,EAAwCC,OAAxC,EAAiD;EAC/C,QAAI3M,MAAM,GAAGyM,OAAO,GAAGC,UAAvB;;EACA,QAAI1M,MAAM,KAAK2M,OAAO,CAAC3M,MAAvB,EAA+B;EAC7B,YAAM,IAAIW,UAAJ,CAAe,6CAAf,CAAN;EACD;;EACD,QAAIgH,SAAS,GAAG,IAAIL,MAAJ,CAAWmF,OAAX,EAAoBC,UAApB,CAAhB;;EACA,SAAK,IAAI1K,GAAG,GAAG,CAAf,EAAkBA,GAAG,GAAGyK,OAAxB,EAAiCzK,GAAG,EAApC,EAAwC;EACtC,WAAK,IAAIE,MAAM,GAAG,CAAlB,EAAqBA,MAAM,GAAGwK,UAA9B,EAA0CxK,MAAM,EAAhD,EAAoD;EAClDyF,QAAAA,SAAS,CAAChD,GAAV,CAAc3C,GAAd,EAAmBE,MAAnB,EAA2ByK,OAAO,CAAC3K,GAAG,GAAG0K,UAAN,GAAmBxK,MAApB,CAAlC;EACD;EACF;;EACD,WAAOyF,SAAP;EACD;;EAED,SAAOiF,SAAP,CAAiBD,OAAjB,EAA0B;EACxB,QAAIjL,MAAM,GAAG,IAAI4F,MAAJ,CAAW,CAAX,EAAcqF,OAAO,CAAC3M,MAAtB,CAAb;;EACA,SAAK,IAAIC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG0M,OAAO,CAAC3M,MAA5B,EAAoCC,CAAC,EAArC,EAAyC;EACvCyB,MAAAA,MAAM,CAACiD,GAAP,CAAW,CAAX,EAAc1E,CAAd,EAAiB0M,OAAO,CAAC1M,CAAD,CAAxB;EACD;;EACD,WAAOyB,MAAP;EACD;;EAED,SAAOmL,YAAP,CAAoBF,OAApB,EAA6B;EAC3B,QAAIjL,MAAM,GAAG,IAAI4F,MAAJ,CAAWqF,OAAO,CAAC3M,MAAnB,EAA2B,CAA3B,CAAb;;EACA,SAAK,IAAIC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG0M,OAAO,CAAC3M,MAA5B,EAAoCC,CAAC,EAArC,EAAyC;EACvCyB,MAAAA,MAAM,CAACiD,GAAP,CAAW1E,CAAX,EAAc,CAAd,EAAiB0M,OAAO,CAAC1M,CAAD,CAAxB;EACD;;EACD,WAAOyB,MAAP;EACD;;EAED,SAAOoL,KAAP,CAAaxL,IAAb,EAAmBE,OAAnB,EAA4B;EAC1B,WAAO,IAAI8F,MAAJ,CAAWhG,IAAX,EAAiBE,OAAjB,CAAP;EACD;;EAED,SAAOuL,IAAP,CAAYzL,IAAZ,EAAkBE,OAAlB,EAA2B;EACzB,WAAO,IAAI8F,MAAJ,CAAWhG,IAAX,EAAiBE,OAAjB,EAA0BwL,IAA1B,CAA+B,CAA/B,CAAP;EACD;;EAED,SAAOC,IAAP,CAAY3L,IAAZ,EAAkBE,OAAlB,EAAyC;EAAA,QAAdpB,OAAc,uEAAJ,EAAI;;EACvC,QAAI,OAAOA,OAAP,KAAmB,QAAvB,EAAiC;EAC/B,YAAM,IAAIL,SAAJ,CAAc,2BAAd,CAAN;EACD;;EACD,UAAM;EAAEmN,MAAAA,MAAM,GAAGlI,IAAI,CAACkI;EAAhB,QAA2B9M,OAAjC;EACA,QAAIe,MAAM,GAAG,IAAImG,MAAJ,CAAWhG,IAAX,EAAiBE,OAAjB,CAAb;;EACA,SAAK,IAAIvB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGqB,IAApB,EAA0BrB,CAAC,EAA3B,EAA+B;EAC7B,WAAK,IAAIsD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG/B,OAApB,EAA6B+B,CAAC,EAA9B,EAAkC;EAChCpC,QAAAA,MAAM,CAACwD,GAAP,CAAW1E,CAAX,EAAcsD,CAAd,EAAiB2J,MAAM,EAAvB;EACD;EACF;;EACD,WAAO/L,MAAP;EACD;;EAED,SAAOgM,OAAP,CAAe7L,IAAf,EAAqBE,OAArB,EAA4C;EAAA,QAAdpB,OAAc,uEAAJ,EAAI;;EAC1C,QAAI,OAAOA,OAAP,KAAmB,QAAvB,EAAiC;EAC/B,YAAM,IAAIL,SAAJ,CAAc,2BAAd,CAAN;EACD;;EACD,UAAM;EAAEG,MAAAA,GAAG,GAAG,CAAR;EAAWN,MAAAA,GAAG,GAAG,IAAjB;EAAuBsN,MAAAA,MAAM,GAAGlI,IAAI,CAACkI;EAArC,QAAgD9M,OAAtD;EACA,QAAI,CAACgN,MAAM,CAACC,SAAP,CAAiBnN,GAAjB,CAAL,EAA4B,MAAM,IAAIH,SAAJ,CAAc,wBAAd,CAAN;EAC5B,QAAI,CAACqN,MAAM,CAACC,SAAP,CAAiBzN,GAAjB,CAAL,EAA4B,MAAM,IAAIG,SAAJ,CAAc,wBAAd,CAAN;EAC5B,QAAIG,GAAG,IAAIN,GAAX,EAAgB,MAAM,IAAIe,UAAJ,CAAe,8BAAf,CAAN;EAChB,QAAI2M,QAAQ,GAAG1N,GAAG,GAAGM,GAArB;EACA,QAAIiB,MAAM,GAAG,IAAImG,MAAJ,CAAWhG,IAAX,EAAiBE,OAAjB,CAAb;;EACA,SAAK,IAAIvB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGqB,IAApB,EAA0BrB,CAAC,EAA3B,EAA+B;EAC7B,WAAK,IAAIsD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG/B,OAApB,EAA6B+B,CAAC,EAA9B,EAAkC;EAChC,YAAIN,KAAK,GAAG/C,GAAG,GAAG8E,IAAI,CAAC8G,KAAL,CAAWoB,MAAM,KAAKI,QAAtB,CAAlB;EACAnM,QAAAA,MAAM,CAACwD,GAAP,CAAW1E,CAAX,EAAcsD,CAAd,EAAiBN,KAAjB;EACD;EACF;;EACD,WAAO9B,MAAP;EACD;;EAED,SAAOoM,GAAP,CAAWjM,IAAX,EAAiBE,OAAjB,EAA0ByB,KAA1B,EAAiC;EAC/B,QAAIzB,OAAO,KAAKlB,SAAhB,EAA2BkB,OAAO,GAAGF,IAAV;EAC3B,QAAI2B,KAAK,KAAK3C,SAAd,EAAyB2C,KAAK,GAAG,CAAR;EACzB,QAAI/C,GAAG,GAAG8E,IAAI,CAAC9E,GAAL,CAASoB,IAAT,EAAeE,OAAf,CAAV;EACA,QAAIL,MAAM,GAAG,KAAK2L,KAAL,CAAWxL,IAAX,EAAiBE,OAAjB,CAAb;;EACA,SAAK,IAAIvB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGC,GAApB,EAAyBD,CAAC,EAA1B,EAA8B;EAC5BkB,MAAAA,MAAM,CAACwD,GAAP,CAAW1E,CAAX,EAAcA,CAAd,EAAiBgD,KAAjB;EACD;;EACD,WAAO9B,MAAP;EACD;;EAED,SAAOqM,IAAP,CAAYC,IAAZ,EAAkBnM,IAAlB,EAAwBE,OAAxB,EAAiC;EAC/B,QAAIkM,CAAC,GAAGD,IAAI,CAACzN,MAAb;EACA,QAAIsB,IAAI,KAAKhB,SAAb,EAAwBgB,IAAI,GAAGoM,CAAP;EACxB,QAAIlM,OAAO,KAAKlB,SAAhB,EAA2BkB,OAAO,GAAGF,IAAV;EAC3B,QAAIpB,GAAG,GAAG8E,IAAI,CAAC9E,GAAL,CAASwN,CAAT,EAAYpM,IAAZ,EAAkBE,OAAlB,CAAV;EACA,QAAIL,MAAM,GAAG,KAAK2L,KAAL,CAAWxL,IAAX,EAAiBE,OAAjB,CAAb;;EACA,SAAK,IAAIvB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGC,GAApB,EAAyBD,CAAC,EAA1B,EAA8B;EAC5BkB,MAAAA,MAAM,CAACwD,GAAP,CAAW1E,CAAX,EAAcA,CAAd,EAAiBwN,IAAI,CAACxN,CAAD,CAArB;EACD;;EACD,WAAOkB,MAAP;EACD;;EAED,SAAOjB,GAAP,CAAWyN,OAAX,EAAoBC,OAApB,EAA6B;EAC3BD,IAAAA,OAAO,GAAG,KAAKjG,WAAL,CAAiBiG,OAAjB,CAAV;EACAC,IAAAA,OAAO,GAAG,KAAKlG,WAAL,CAAiBkG,OAAjB,CAAV;EACA,QAAItM,IAAI,GAAGqM,OAAO,CAACrM,IAAnB;EACA,QAAIE,OAAO,GAAGmM,OAAO,CAACnM,OAAtB;EACA,QAAI4E,MAAM,GAAG,IAAIkB,MAAJ,CAAWhG,IAAX,EAAiBE,OAAjB,CAAb;;EACA,SAAK,IAAIvB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGqB,IAApB,EAA0BrB,CAAC,EAA3B,EAA+B;EAC7B,WAAK,IAAIsD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG/B,OAApB,EAA6B+B,CAAC,EAA9B,EAAkC;EAChC6C,QAAAA,MAAM,CAACzB,GAAP,CAAW1E,CAAX,EAAcsD,CAAd,EAAiByB,IAAI,CAAC9E,GAAL,CAASyN,OAAO,CAACnK,GAAR,CAAYvD,CAAZ,EAAesD,CAAf,CAAT,EAA4BqK,OAAO,CAACpK,GAAR,CAAYvD,CAAZ,EAAesD,CAAf,CAA5B,CAAjB;EACD;EACF;;EACD,WAAO6C,MAAP;EACD;;EAED,SAAOxG,GAAP,CAAW+N,OAAX,EAAoBC,OAApB,EAA6B;EAC3BD,IAAAA,OAAO,GAAG,KAAKjG,WAAL,CAAiBiG,OAAjB,CAAV;EACAC,IAAAA,OAAO,GAAG,KAAKlG,WAAL,CAAiBkG,OAAjB,CAAV;EACA,QAAItM,IAAI,GAAGqM,OAAO,CAACrM,IAAnB;EACA,QAAIE,OAAO,GAAGmM,OAAO,CAACnM,OAAtB;EACA,QAAI4E,MAAM,GAAG,IAAI,IAAJ,CAAS9E,IAAT,EAAeE,OAAf,CAAb;;EACA,SAAK,IAAIvB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGqB,IAApB,EAA0BrB,CAAC,EAA3B,EAA+B;EAC7B,WAAK,IAAIsD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG/B,OAApB,EAA6B+B,CAAC,EAA9B,EAAkC;EAChC6C,QAAAA,MAAM,CAACzB,GAAP,CAAW1E,CAAX,EAAcsD,CAAd,EAAiByB,IAAI,CAACpF,GAAL,CAAS+N,OAAO,CAACnK,GAAR,CAAYvD,CAAZ,EAAesD,CAAf,CAAT,EAA4BqK,OAAO,CAACpK,GAAR,CAAYvD,CAAZ,EAAesD,CAAf,CAA5B,CAAjB;EACD;EACF;;EACD,WAAO6C,MAAP;EACD;;EAED,SAAOsB,WAAP,CAAmBzE,KAAnB,EAA0B;EACxB,WAAOoE,cAAc,CAACwG,QAAf,CAAwB5K,KAAxB,IAAiCA,KAAjC,GAAyC,IAAIqE,MAAJ,CAAWrE,KAAX,CAAhD;EACD;;EAED,SAAO4K,QAAP,CAAgB5K,KAAhB,EAAuB;EACrB,WAAOA,KAAK,IAAI,IAAT,IAAiBA,KAAK,CAAC6K,KAAN,KAAgB,QAAxC;EACD;;EAED,MAAIrJ,IAAJ,GAAW;EACT,WAAO,KAAKnD,IAAL,GAAY,KAAKE,OAAxB;EACD;;EAEDuM,EAAAA,KAAK,CAACC,QAAD,EAAW;EACd,QAAI,OAAOA,QAAP,KAAoB,UAAxB,EAAoC;EAClC,YAAM,IAAIjO,SAAJ,CAAc,6BAAd,CAAN;EACD;;EACD,SAAK,IAAIE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKqB,IAAzB,EAA+BrB,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAIsD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK/B,OAAzB,EAAkC+B,CAAC,EAAnC,EAAuC;EACrCyK,QAAAA,QAAQ,CAACtO,IAAT,CAAc,IAAd,EAAoBO,CAApB,EAAuBsD,CAAvB;EACD;EACF;;EACD,WAAO,IAAP;EACD;;EAED5B,EAAAA,SAAS,GAAG;EACV,QAAIuB,KAAK,GAAG,EAAZ;;EACA,SAAK,IAAIjD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKqB,IAAzB,EAA+BrB,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAIsD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK/B,OAAzB,EAAkC+B,CAAC,EAAnC,EAAuC;EACrCL,QAAAA,KAAK,CAACC,IAAN,CAAW,KAAKK,GAAL,CAASvD,CAAT,EAAYsD,CAAZ,CAAX;EACD;EACF;;EACD,WAAOL,KAAP;EACD;;EAED+K,EAAAA,SAAS,GAAG;EACV,QAAIC,IAAI,GAAG,EAAX;;EACA,SAAK,IAAIjO,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKqB,IAAzB,EAA+BrB,CAAC,EAAhC,EAAoC;EAClCiO,MAAAA,IAAI,CAAC/K,IAAL,CAAU,EAAV;;EACA,WAAK,IAAII,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK/B,OAAzB,EAAkC+B,CAAC,EAAnC,EAAuC;EACrC2K,QAAAA,IAAI,CAACjO,CAAD,CAAJ,CAAQkD,IAAR,CAAa,KAAKK,GAAL,CAASvD,CAAT,EAAYsD,CAAZ,CAAb;EACD;EACF;;EACD,WAAO2K,IAAP;EACD;;EAEDC,EAAAA,MAAM,GAAG;EACP,WAAO,KAAKF,SAAL,EAAP;EACD;;EAEDG,EAAAA,WAAW,GAAG;EACZ,WAAO,KAAK9M,IAAL,KAAc,CAArB;EACD;;EAED+M,EAAAA,cAAc,GAAG;EACf,WAAO,KAAK7M,OAAL,KAAiB,CAAxB;EACD;;EAED8M,EAAAA,QAAQ,GAAG;EACT,WAAO,KAAKhN,IAAL,KAAc,CAAd,IAAmB,KAAKE,OAAL,KAAiB,CAA3C;EACD;;EAED+M,EAAAA,QAAQ,GAAG;EACT,WAAO,KAAKjN,IAAL,KAAc,KAAKE,OAA1B;EACD;;EAEDgN,EAAAA,WAAW,GAAG;EACZ,QAAI,KAAKD,QAAL,EAAJ,EAAqB;EACnB,WAAK,IAAItO,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKqB,IAAzB,EAA+BrB,CAAC,EAAhC,EAAoC;EAClC,aAAK,IAAIsD,CAAC,GAAG,CAAb,EAAgBA,CAAC,IAAItD,CAArB,EAAwBsD,CAAC,EAAzB,EAA6B;EAC3B,cAAI,KAAKC,GAAL,CAASvD,CAAT,EAAYsD,CAAZ,MAAmB,KAAKC,GAAL,CAASD,CAAT,EAAYtD,CAAZ,CAAvB,EAAuC;EACrC,mBAAO,KAAP;EACD;EACF;EACF;;EACD,aAAO,IAAP;EACD;;EACD,WAAO,KAAP;EACD;;EAEDwO,EAAAA,aAAa,GAAG;EACd,QAAIxO,CAAC,GAAG,CAAR;EACA,QAAIsD,CAAC,GAAG,CAAR;EACA,QAAImL,cAAc,GAAG,CAAC,CAAtB;EACA,QAAID,aAAa,GAAG,IAApB;EACA,QAAIE,OAAO,GAAG,KAAd;;EACA,WAAO1O,CAAC,GAAG,KAAKqB,IAAT,IAAiBmN,aAAxB,EAAuC;EACrClL,MAAAA,CAAC,GAAG,CAAJ;EACAoL,MAAAA,OAAO,GAAG,KAAV;;EACA,aAAOpL,CAAC,GAAG,KAAK/B,OAAT,IAAoBmN,OAAO,KAAK,KAAvC,EAA8C;EAC5C,YAAI,KAAKnL,GAAL,CAASvD,CAAT,EAAYsD,CAAZ,MAAmB,CAAvB,EAA0B;EACxBA,UAAAA,CAAC;EACF,SAFD,MAEO,IAAI,KAAKC,GAAL,CAASvD,CAAT,EAAYsD,CAAZ,MAAmB,CAAnB,IAAwBA,CAAC,GAAGmL,cAAhC,EAAgD;EACrDC,UAAAA,OAAO,GAAG,IAAV;EACAD,UAAAA,cAAc,GAAGnL,CAAjB;EACD,SAHM,MAGA;EACLkL,UAAAA,aAAa,GAAG,KAAhB;EACAE,UAAAA,OAAO,GAAG,IAAV;EACD;EACF;;EACD1O,MAAAA,CAAC;EACF;;EACD,WAAOwO,aAAP;EACD;;EAEDG,EAAAA,oBAAoB,GAAG;EACrB,QAAI3O,CAAC,GAAG,CAAR;EACA,QAAIsD,CAAC,GAAG,CAAR;EACA,QAAImL,cAAc,GAAG,CAAC,CAAtB;EACA,QAAIE,oBAAoB,GAAG,IAA3B;EACA,QAAID,OAAO,GAAG,KAAd;;EACA,WAAO1O,CAAC,GAAG,KAAKqB,IAAT,IAAiBsN,oBAAxB,EAA8C;EAC5CrL,MAAAA,CAAC,GAAG,CAAJ;EACAoL,MAAAA,OAAO,GAAG,KAAV;;EACA,aAAOpL,CAAC,GAAG,KAAK/B,OAAT,IAAoBmN,OAAO,KAAK,KAAvC,EAA8C;EAC5C,YAAI,KAAKnL,GAAL,CAASvD,CAAT,EAAYsD,CAAZ,MAAmB,CAAvB,EAA0B;EACxBA,UAAAA,CAAC;EACF,SAFD,MAEO,IAAI,KAAKC,GAAL,CAASvD,CAAT,EAAYsD,CAAZ,MAAmB,CAAnB,IAAwBA,CAAC,GAAGmL,cAAhC,EAAgD;EACrDC,UAAAA,OAAO,GAAG,IAAV;EACAD,UAAAA,cAAc,GAAGnL,CAAjB;EACD,SAHM,MAGA;EACLqL,UAAAA,oBAAoB,GAAG,KAAvB;EACAD,UAAAA,OAAO,GAAG,IAAV;EACD;EACF;;EACD,WAAK,IAAIE,CAAC,GAAGtL,CAAC,GAAG,CAAjB,EAAoBsL,CAAC,GAAG,KAAKvN,IAA7B,EAAmCuN,CAAC,EAApC,EAAwC;EACtC,YAAI,KAAKrL,GAAL,CAASvD,CAAT,EAAY4O,CAAZ,MAAmB,CAAvB,EAA0B;EACxBD,UAAAA,oBAAoB,GAAG,KAAvB;EACD;EACF;;EACD3O,MAAAA,CAAC;EACF;;EACD,WAAO2O,oBAAP;EACD;;EAEDE,EAAAA,WAAW,GAAG;EACZ,QAAI1I,MAAM,GAAG,KAAK2I,KAAL,EAAb;EACA,QAAIC,CAAC,GAAG,CAAR;EACA,QAAIH,CAAC,GAAG,CAAR;;EACA,WAAQG,CAAC,GAAG5I,MAAM,CAAC9E,IAAZ,IAAsBuN,CAAC,GAAGzI,MAAM,CAAC5E,OAAxC,EAAkD;EAChD,UAAIyN,IAAI,GAAGD,CAAX;;EACA,WAAK,IAAI/O,CAAC,GAAG+O,CAAb,EAAgB/O,CAAC,GAAGmG,MAAM,CAAC9E,IAA3B,EAAiCrB,CAAC,EAAlC,EAAsC;EACpC,YAAImG,MAAM,CAAC5C,GAAP,CAAWvD,CAAX,EAAc4O,CAAd,IAAmBzI,MAAM,CAAC5C,GAAP,CAAWyL,IAAX,EAAiBJ,CAAjB,CAAvB,EAA4C;EAC1CI,UAAAA,IAAI,GAAGhP,CAAP;EACD;EACF;;EACD,UAAImG,MAAM,CAAC5C,GAAP,CAAWyL,IAAX,EAAiBJ,CAAjB,MAAwB,CAA5B,EAA+B;EAC7BA,QAAAA,CAAC;EACF,OAFD,MAEO;EACLzI,QAAAA,MAAM,CAAC8I,QAAP,CAAgBF,CAAhB,EAAmBC,IAAnB;EACA,YAAIE,GAAG,GAAG/I,MAAM,CAAC5C,GAAP,CAAWwL,CAAX,EAAcH,CAAd,CAAV;;EACA,aAAK,IAAItL,CAAC,GAAGsL,CAAb,EAAgBtL,CAAC,GAAG6C,MAAM,CAAC5E,OAA3B,EAAoC+B,CAAC,EAArC,EAAyC;EACvC6C,UAAAA,MAAM,CAACzB,GAAP,CAAWqK,CAAX,EAAczL,CAAd,EAAiB6C,MAAM,CAAC5C,GAAP,CAAWwL,CAAX,EAAczL,CAAd,IAAmB4L,GAApC;EACD;;EACD,aAAK,IAAIlP,CAAC,GAAG+O,CAAC,GAAG,CAAjB,EAAoB/O,CAAC,GAAGmG,MAAM,CAAC9E,IAA/B,EAAqCrB,CAAC,EAAtC,EAA0C;EACxC,cAAIgB,MAAM,GAAGmF,MAAM,CAAC5C,GAAP,CAAWvD,CAAX,EAAc4O,CAAd,IAAmBzI,MAAM,CAAC5C,GAAP,CAAWwL,CAAX,EAAcH,CAAd,CAAhC;EACAzI,UAAAA,MAAM,CAACzB,GAAP,CAAW1E,CAAX,EAAc4O,CAAd,EAAiB,CAAjB;;EACA,eAAK,IAAItL,CAAC,GAAGsL,CAAC,GAAG,CAAjB,EAAoBtL,CAAC,GAAG6C,MAAM,CAAC5E,OAA/B,EAAwC+B,CAAC,EAAzC,EAA6C;EAC3C6C,YAAAA,MAAM,CAACzB,GAAP,CAAW1E,CAAX,EAAcsD,CAAd,EAAiB6C,MAAM,CAAC5C,GAAP,CAAWvD,CAAX,EAAcsD,CAAd,IAAmB6C,MAAM,CAAC5C,GAAP,CAAWwL,CAAX,EAAczL,CAAd,IAAmBtC,MAAvD;EACD;EACF;;EACD+N,QAAAA,CAAC;EACDH,QAAAA,CAAC;EACF;EACF;;EACD,WAAOzI,MAAP;EACD;;EAEDgJ,EAAAA,kBAAkB,GAAG;EACnB,QAAIhJ,MAAM,GAAG,KAAK0I,WAAL,EAAb;EACA,QAAIO,CAAC,GAAGjJ,MAAM,CAAC5E,OAAf;EACA,QAAI8N,CAAC,GAAGlJ,MAAM,CAAC9E,IAAf;EACA,QAAI0N,CAAC,GAAGM,CAAC,GAAG,CAAZ;;EACA,WAAON,CAAC,IAAI,CAAZ,EAAe;EACb,UAAI5I,MAAM,CAACmJ,MAAP,CAAcP,CAAd,MAAqB,CAAzB,EAA4B;EAC1BA,QAAAA,CAAC;EACF,OAFD,MAEO;EACL,YAAIQ,CAAC,GAAG,CAAR;EACA,YAAIC,KAAK,GAAG,KAAZ;;EACA,eAAQD,CAAC,GAAGF,CAAL,IAAYG,KAAK,KAAK,KAA7B,EAAqC;EACnC,cAAIrJ,MAAM,CAAC5C,GAAP,CAAWwL,CAAX,EAAcQ,CAAd,MAAqB,CAAzB,EAA4B;EAC1BC,YAAAA,KAAK,GAAG,IAAR;EACD,WAFD,MAEO;EACLD,YAAAA,CAAC;EACF;EACF;;EACD,aAAK,IAAIvP,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG+O,CAApB,EAAuB/O,CAAC,EAAxB,EAA4B;EAC1B,cAAIgB,MAAM,GAAGmF,MAAM,CAAC5C,GAAP,CAAWvD,CAAX,EAAcuP,CAAd,CAAb;;EACA,eAAK,IAAIjM,CAAC,GAAGiM,CAAb,EAAgBjM,CAAC,GAAG8L,CAApB,EAAuB9L,CAAC,EAAxB,EAA4B;EAC1B,gBAAI4L,GAAG,GAAG/I,MAAM,CAAC5C,GAAP,CAAWvD,CAAX,EAAcsD,CAAd,IAAmBtC,MAAM,GAAGmF,MAAM,CAAC5C,GAAP,CAAWwL,CAAX,EAAczL,CAAd,CAAtC;EACA6C,YAAAA,MAAM,CAACzB,GAAP,CAAW1E,CAAX,EAAcsD,CAAd,EAAiB4L,GAAjB;EACD;EACF;;EACDH,QAAAA,CAAC;EACF;EACF;;EACD,WAAO5I,MAAP;EACD;;EAEDzB,EAAAA,GAAG,GAAG;EACJ,UAAM,IAAI+K,KAAJ,CAAU,6BAAV,CAAN;EACD;;EAEDlM,EAAAA,GAAG,GAAG;EACJ,UAAM,IAAIkM,KAAJ,CAAU,6BAAV,CAAN;EACD;;EAED/J,EAAAA,MAAM,GAAe;EAAA,QAAdvF,OAAc,uEAAJ,EAAI;;EACnB,QAAI,OAAOA,OAAP,KAAmB,QAAvB,EAAiC;EAC/B,YAAM,IAAIL,SAAJ,CAAc,2BAAd,CAAN;EACD;;EACD,UAAM;EAAEuB,MAAAA,IAAI,GAAG,CAAT;EAAYE,MAAAA,OAAO,GAAG;EAAtB,QAA4BpB,OAAlC;;EACA,QAAI,CAACgN,MAAM,CAACC,SAAP,CAAiB/L,IAAjB,CAAD,IAA2BA,IAAI,IAAI,CAAvC,EAA0C;EACxC,YAAM,IAAIvB,SAAJ,CAAc,iCAAd,CAAN;EACD;;EACD,QAAI,CAACqN,MAAM,CAACC,SAAP,CAAiB7L,OAAjB,CAAD,IAA8BA,OAAO,IAAI,CAA7C,EAAgD;EAC9C,YAAM,IAAIzB,SAAJ,CAAc,oCAAd,CAAN;EACD;;EACD,QAAIoB,MAAM,GAAG,IAAImG,MAAJ,CAAW,KAAKhG,IAAL,GAAYA,IAAvB,EAA6B,KAAKE,OAAL,GAAeA,OAA5C,CAAb;;EACA,SAAK,IAAIvB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGqB,IAApB,EAA0BrB,CAAC,EAA3B,EAA+B;EAC7B,WAAK,IAAIsD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG/B,OAApB,EAA6B+B,CAAC,EAA9B,EAAkC;EAChCpC,QAAAA,MAAM,CAACwO,YAAP,CAAoB,IAApB,EAA0B,KAAKrO,IAAL,GAAYrB,CAAtC,EAAyC,KAAKuB,OAAL,GAAe+B,CAAxD;EACD;EACF;;EACD,WAAOpC,MAAP;EACD;;EAED6L,EAAAA,IAAI,CAAC/J,KAAD,EAAQ;EACV,SAAK,IAAIhD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKqB,IAAzB,EAA+BrB,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAIsD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK/B,OAAzB,EAAkC+B,CAAC,EAAnC,EAAuC;EACrC,aAAKoB,GAAL,CAAS1E,CAAT,EAAYsD,CAAZ,EAAeN,KAAf;EACD;EACF;;EACD,WAAO,IAAP;EACD;;EAED2M,EAAAA,GAAG,GAAG;EACJ,WAAO,KAAKzH,IAAL,CAAU,CAAC,CAAX,CAAP;EACD;;EAED0H,EAAAA,MAAM,CAACzO,KAAD,EAAQ;EACZF,IAAAA,aAAa,CAAC,IAAD,EAAOE,KAAP,CAAb;EACA,QAAIY,GAAG,GAAG,EAAV;;EACA,SAAK,IAAI/B,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKuB,OAAzB,EAAkCvB,CAAC,EAAnC,EAAuC;EACrC+B,MAAAA,GAAG,CAACmB,IAAJ,CAAS,KAAKK,GAAL,CAASpC,KAAT,EAAgBnB,CAAhB,CAAT;EACD;;EACD,WAAO+B,GAAP;EACD;;EAED8N,EAAAA,YAAY,CAAC1O,KAAD,EAAQ;EAClB,WAAOkG,MAAM,CAACsF,SAAP,CAAiB,KAAKiD,MAAL,CAAYzO,KAAZ,CAAjB,CAAP;EACD;;EAED2O,EAAAA,MAAM,CAAC3O,KAAD,EAAQ8B,KAAR,EAAe;EACnBhC,IAAAA,aAAa,CAAC,IAAD,EAAOE,KAAP,CAAb;EACA8B,IAAAA,KAAK,GAAGzB,cAAc,CAAC,IAAD,EAAOyB,KAAP,CAAtB;;EACA,SAAK,IAAIjD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKuB,OAAzB,EAAkCvB,CAAC,EAAnC,EAAuC;EACrC,WAAK0E,GAAL,CAASvD,KAAT,EAAgBnB,CAAhB,EAAmBiD,KAAK,CAACjD,CAAD,CAAxB;EACD;;EACD,WAAO,IAAP;EACD;;EAEDiP,EAAAA,QAAQ,CAACc,IAAD,EAAOC,IAAP,EAAa;EACnB/O,IAAAA,aAAa,CAAC,IAAD,EAAO8O,IAAP,CAAb;EACA9O,IAAAA,aAAa,CAAC,IAAD,EAAO+O,IAAP,CAAb;;EACA,SAAK,IAAIhQ,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKuB,OAAzB,EAAkCvB,CAAC,EAAnC,EAAuC;EACrC,UAAIiQ,IAAI,GAAG,KAAK1M,GAAL,CAASwM,IAAT,EAAe/P,CAAf,CAAX;EACA,WAAK0E,GAAL,CAASqL,IAAT,EAAe/P,CAAf,EAAkB,KAAKuD,GAAL,CAASyM,IAAT,EAAehQ,CAAf,CAAlB;EACA,WAAK0E,GAAL,CAASsL,IAAT,EAAehQ,CAAf,EAAkBiQ,IAAlB;EACD;;EACD,WAAO,IAAP;EACD;;EAEDC,EAAAA,SAAS,CAAC/O,KAAD,EAAQ;EACfG,IAAAA,gBAAgB,CAAC,IAAD,EAAOH,KAAP,CAAhB;EACA,QAAIc,MAAM,GAAG,EAAb;;EACA,SAAK,IAAIjC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKqB,IAAzB,EAA+BrB,CAAC,EAAhC,EAAoC;EAClCiC,MAAAA,MAAM,CAACiB,IAAP,CAAY,KAAKK,GAAL,CAASvD,CAAT,EAAYmB,KAAZ,CAAZ;EACD;;EACD,WAAOc,MAAP;EACD;;EAEDkO,EAAAA,eAAe,CAAChP,KAAD,EAAQ;EACrB,WAAOkG,MAAM,CAACuF,YAAP,CAAoB,KAAKsD,SAAL,CAAe/O,KAAf,CAApB,CAAP;EACD;;EAEDiP,EAAAA,SAAS,CAACjP,KAAD,EAAQ8B,KAAR,EAAe;EACtB3B,IAAAA,gBAAgB,CAAC,IAAD,EAAOH,KAAP,CAAhB;EACA8B,IAAAA,KAAK,GAAGtB,iBAAiB,CAAC,IAAD,EAAOsB,KAAP,CAAzB;;EACA,SAAK,IAAIjD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKqB,IAAzB,EAA+BrB,CAAC,EAAhC,EAAoC;EAClC,WAAK0E,GAAL,CAAS1E,CAAT,EAAYmB,KAAZ,EAAmB8B,KAAK,CAACjD,CAAD,CAAxB;EACD;;EACD,WAAO,IAAP;EACD;;EAEDqQ,EAAAA,WAAW,CAACC,OAAD,EAAUC,OAAV,EAAmB;EAC5BjP,IAAAA,gBAAgB,CAAC,IAAD,EAAOgP,OAAP,CAAhB;EACAhP,IAAAA,gBAAgB,CAAC,IAAD,EAAOiP,OAAP,CAAhB;;EACA,SAAK,IAAIvQ,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKqB,IAAzB,EAA+BrB,CAAC,EAAhC,EAAoC;EAClC,UAAIiQ,IAAI,GAAG,KAAK1M,GAAL,CAASvD,CAAT,EAAYsQ,OAAZ,CAAX;EACA,WAAK5L,GAAL,CAAS1E,CAAT,EAAYsQ,OAAZ,EAAqB,KAAK/M,GAAL,CAASvD,CAAT,EAAYuQ,OAAZ,CAArB;EACA,WAAK7L,GAAL,CAAS1E,CAAT,EAAYuQ,OAAZ,EAAqBN,IAArB;EACD;;EACD,WAAO,IAAP;EACD;;EAEDO,EAAAA,YAAY,CAAC/O,MAAD,EAAS;EACnBA,IAAAA,MAAM,GAAGD,cAAc,CAAC,IAAD,EAAOC,MAAP,CAAvB;;EACA,SAAK,IAAIzB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKqB,IAAzB,EAA+BrB,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAIsD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK/B,OAAzB,EAAkC+B,CAAC,EAAnC,EAAuC;EACrC,aAAKoB,GAAL,CAAS1E,CAAT,EAAYsD,CAAZ,EAAe,KAAKC,GAAL,CAASvD,CAAT,EAAYsD,CAAZ,IAAiB7B,MAAM,CAAC6B,CAAD,CAAtC;EACD;EACF;;EACD,WAAO,IAAP;EACD;;EAEDmN,EAAAA,YAAY,CAAChP,MAAD,EAAS;EACnBA,IAAAA,MAAM,GAAGD,cAAc,CAAC,IAAD,EAAOC,MAAP,CAAvB;;EACA,SAAK,IAAIzB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKqB,IAAzB,EAA+BrB,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAIsD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK/B,OAAzB,EAAkC+B,CAAC,EAAnC,EAAuC;EACrC,aAAKoB,GAAL,CAAS1E,CAAT,EAAYsD,CAAZ,EAAe,KAAKC,GAAL,CAASvD,CAAT,EAAYsD,CAAZ,IAAiB7B,MAAM,CAAC6B,CAAD,CAAtC;EACD;EACF;;EACD,WAAO,IAAP;EACD;;EAEDoN,EAAAA,YAAY,CAACjP,MAAD,EAAS;EACnBA,IAAAA,MAAM,GAAGD,cAAc,CAAC,IAAD,EAAOC,MAAP,CAAvB;;EACA,SAAK,IAAIzB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKqB,IAAzB,EAA+BrB,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAIsD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK/B,OAAzB,EAAkC+B,CAAC,EAAnC,EAAuC;EACrC,aAAKoB,GAAL,CAAS1E,CAAT,EAAYsD,CAAZ,EAAe,KAAKC,GAAL,CAASvD,CAAT,EAAYsD,CAAZ,IAAiB7B,MAAM,CAAC6B,CAAD,CAAtC;EACD;EACF;;EACD,WAAO,IAAP;EACD;;EAEDqN,EAAAA,YAAY,CAAClP,MAAD,EAAS;EACnBA,IAAAA,MAAM,GAAGD,cAAc,CAAC,IAAD,EAAOC,MAAP,CAAvB;;EACA,SAAK,IAAIzB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKqB,IAAzB,EAA+BrB,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAIsD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK/B,OAAzB,EAAkC+B,CAAC,EAAnC,EAAuC;EACrC,aAAKoB,GAAL,CAAS1E,CAAT,EAAYsD,CAAZ,EAAe,KAAKC,GAAL,CAASvD,CAAT,EAAYsD,CAAZ,IAAiB7B,MAAM,CAAC6B,CAAD,CAAtC;EACD;EACF;;EACD,WAAO,IAAP;EACD;;EAEDsN,EAAAA,eAAe,CAACnP,MAAD,EAAS;EACtBA,IAAAA,MAAM,GAAGE,iBAAiB,CAAC,IAAD,EAAOF,MAAP,CAA1B;;EACA,SAAK,IAAIzB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKqB,IAAzB,EAA+BrB,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAIsD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK/B,OAAzB,EAAkC+B,CAAC,EAAnC,EAAuC;EACrC,aAAKoB,GAAL,CAAS1E,CAAT,EAAYsD,CAAZ,EAAe,KAAKC,GAAL,CAASvD,CAAT,EAAYsD,CAAZ,IAAiB7B,MAAM,CAACzB,CAAD,CAAtC;EACD;EACF;;EACD,WAAO,IAAP;EACD;;EAED6Q,EAAAA,eAAe,CAACpP,MAAD,EAAS;EACtBA,IAAAA,MAAM,GAAGE,iBAAiB,CAAC,IAAD,EAAOF,MAAP,CAA1B;;EACA,SAAK,IAAIzB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKqB,IAAzB,EAA+BrB,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAIsD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK/B,OAAzB,EAAkC+B,CAAC,EAAnC,EAAuC;EACrC,aAAKoB,GAAL,CAAS1E,CAAT,EAAYsD,CAAZ,EAAe,KAAKC,GAAL,CAASvD,CAAT,EAAYsD,CAAZ,IAAiB7B,MAAM,CAACzB,CAAD,CAAtC;EACD;EACF;;EACD,WAAO,IAAP;EACD;;EAED8Q,EAAAA,eAAe,CAACrP,MAAD,EAAS;EACtBA,IAAAA,MAAM,GAAGE,iBAAiB,CAAC,IAAD,EAAOF,MAAP,CAA1B;;EACA,SAAK,IAAIzB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKqB,IAAzB,EAA+BrB,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAIsD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK/B,OAAzB,EAAkC+B,CAAC,EAAnC,EAAuC;EACrC,aAAKoB,GAAL,CAAS1E,CAAT,EAAYsD,CAAZ,EAAe,KAAKC,GAAL,CAASvD,CAAT,EAAYsD,CAAZ,IAAiB7B,MAAM,CAACzB,CAAD,CAAtC;EACD;EACF;;EACD,WAAO,IAAP;EACD;;EAED+Q,EAAAA,eAAe,CAACtP,MAAD,EAAS;EACtBA,IAAAA,MAAM,GAAGE,iBAAiB,CAAC,IAAD,EAAOF,MAAP,CAA1B;;EACA,SAAK,IAAIzB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKqB,IAAzB,EAA+BrB,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAIsD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK/B,OAAzB,EAAkC+B,CAAC,EAAnC,EAAuC;EACrC,aAAKoB,GAAL,CAAS1E,CAAT,EAAYsD,CAAZ,EAAe,KAAKC,GAAL,CAASvD,CAAT,EAAYsD,CAAZ,IAAiB7B,MAAM,CAACzB,CAAD,CAAtC;EACD;EACF;;EACD,WAAO,IAAP;EACD;;EAEDgR,EAAAA,MAAM,CAAC7P,KAAD,EAAQ6B,KAAR,EAAe;EACnB/B,IAAAA,aAAa,CAAC,IAAD,EAAOE,KAAP,CAAb;;EACA,SAAK,IAAInB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKuB,OAAzB,EAAkCvB,CAAC,EAAnC,EAAuC;EACrC,WAAK0E,GAAL,CAASvD,KAAT,EAAgBnB,CAAhB,EAAmB,KAAKuD,GAAL,CAASpC,KAAT,EAAgBnB,CAAhB,IAAqBgD,KAAxC;EACD;;EACD,WAAO,IAAP;EACD;;EAEDiO,EAAAA,SAAS,CAAC9P,KAAD,EAAQ6B,KAAR,EAAe;EACtB1B,IAAAA,gBAAgB,CAAC,IAAD,EAAOH,KAAP,CAAhB;;EACA,SAAK,IAAInB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKqB,IAAzB,EAA+BrB,CAAC,EAAhC,EAAoC;EAClC,WAAK0E,GAAL,CAAS1E,CAAT,EAAYmB,KAAZ,EAAmB,KAAKoC,GAAL,CAASvD,CAAT,EAAYmB,KAAZ,IAAqB6B,KAAxC;EACD;;EACD,WAAO,IAAP;EACD;;EAEDrD,EAAAA,GAAG,GAAG;EACJ,QAAI+D,CAAC,GAAG,KAAKH,GAAL,CAAS,CAAT,EAAY,CAAZ,CAAR;;EACA,SAAK,IAAIvD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKqB,IAAzB,EAA+BrB,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAIsD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK/B,OAAzB,EAAkC+B,CAAC,EAAnC,EAAuC;EACrC,YAAI,KAAKC,GAAL,CAASvD,CAAT,EAAYsD,CAAZ,IAAiBI,CAArB,EAAwB;EACtBA,UAAAA,CAAC,GAAG,KAAKH,GAAL,CAASvD,CAAT,EAAYsD,CAAZ,CAAJ;EACD;EACF;EACF;;EACD,WAAOI,CAAP;EACD;;EAEDwN,EAAAA,QAAQ,GAAG;EACT,QAAIxN,CAAC,GAAG,KAAKH,GAAL,CAAS,CAAT,EAAY,CAAZ,CAAR;EACA,QAAI4N,GAAG,GAAG,CAAC,CAAD,EAAI,CAAJ,CAAV;;EACA,SAAK,IAAInR,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKqB,IAAzB,EAA+BrB,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAIsD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK/B,OAAzB,EAAkC+B,CAAC,EAAnC,EAAuC;EACrC,YAAI,KAAKC,GAAL,CAASvD,CAAT,EAAYsD,CAAZ,IAAiBI,CAArB,EAAwB;EACtBA,UAAAA,CAAC,GAAG,KAAKH,GAAL,CAASvD,CAAT,EAAYsD,CAAZ,CAAJ;EACA6N,UAAAA,GAAG,CAAC,CAAD,CAAH,GAASnR,CAAT;EACAmR,UAAAA,GAAG,CAAC,CAAD,CAAH,GAAS7N,CAAT;EACD;EACF;EACF;;EACD,WAAO6N,GAAP;EACD;;EAEDlR,EAAAA,GAAG,GAAG;EACJ,QAAIyD,CAAC,GAAG,KAAKH,GAAL,CAAS,CAAT,EAAY,CAAZ,CAAR;;EACA,SAAK,IAAIvD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKqB,IAAzB,EAA+BrB,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAIsD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK/B,OAAzB,EAAkC+B,CAAC,EAAnC,EAAuC;EACrC,YAAI,KAAKC,GAAL,CAASvD,CAAT,EAAYsD,CAAZ,IAAiBI,CAArB,EAAwB;EACtBA,UAAAA,CAAC,GAAG,KAAKH,GAAL,CAASvD,CAAT,EAAYsD,CAAZ,CAAJ;EACD;EACF;EACF;;EACD,WAAOI,CAAP;EACD;;EAED0N,EAAAA,QAAQ,GAAG;EACT,QAAI1N,CAAC,GAAG,KAAKH,GAAL,CAAS,CAAT,EAAY,CAAZ,CAAR;EACA,QAAI4N,GAAG,GAAG,CAAC,CAAD,EAAI,CAAJ,CAAV;;EACA,SAAK,IAAInR,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKqB,IAAzB,EAA+BrB,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAIsD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK/B,OAAzB,EAAkC+B,CAAC,EAAnC,EAAuC;EACrC,YAAI,KAAKC,GAAL,CAASvD,CAAT,EAAYsD,CAAZ,IAAiBI,CAArB,EAAwB;EACtBA,UAAAA,CAAC,GAAG,KAAKH,GAAL,CAASvD,CAAT,EAAYsD,CAAZ,CAAJ;EACA6N,UAAAA,GAAG,CAAC,CAAD,CAAH,GAASnR,CAAT;EACAmR,UAAAA,GAAG,CAAC,CAAD,CAAH,GAAS7N,CAAT;EACD;EACF;EACF;;EACD,WAAO6N,GAAP;EACD;;EAED7B,EAAAA,MAAM,CAACvN,GAAD,EAAM;EACVd,IAAAA,aAAa,CAAC,IAAD,EAAOc,GAAP,CAAb;EACA,QAAI2B,CAAC,GAAG,KAAKH,GAAL,CAASxB,GAAT,EAAc,CAAd,CAAR;;EACA,SAAK,IAAI/B,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKuB,OAAzB,EAAkCvB,CAAC,EAAnC,EAAuC;EACrC,UAAI,KAAKuD,GAAL,CAASxB,GAAT,EAAc/B,CAAd,IAAmB0D,CAAvB,EAA0B;EACxBA,QAAAA,CAAC,GAAG,KAAKH,GAAL,CAASxB,GAAT,EAAc/B,CAAd,CAAJ;EACD;EACF;;EACD,WAAO0D,CAAP;EACD;;EAED2N,EAAAA,WAAW,CAACtP,GAAD,EAAM;EACfd,IAAAA,aAAa,CAAC,IAAD,EAAOc,GAAP,CAAb;EACA,QAAI2B,CAAC,GAAG,KAAKH,GAAL,CAASxB,GAAT,EAAc,CAAd,CAAR;EACA,QAAIoP,GAAG,GAAG,CAACpP,GAAD,EAAM,CAAN,CAAV;;EACA,SAAK,IAAI/B,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKuB,OAAzB,EAAkCvB,CAAC,EAAnC,EAAuC;EACrC,UAAI,KAAKuD,GAAL,CAASxB,GAAT,EAAc/B,CAAd,IAAmB0D,CAAvB,EAA0B;EACxBA,QAAAA,CAAC,GAAG,KAAKH,GAAL,CAASxB,GAAT,EAAc/B,CAAd,CAAJ;EACAmR,QAAAA,GAAG,CAAC,CAAD,CAAH,GAASnR,CAAT;EACD;EACF;;EACD,WAAOmR,GAAP;EACD;;EAEDG,EAAAA,MAAM,CAACvP,GAAD,EAAM;EACVd,IAAAA,aAAa,CAAC,IAAD,EAAOc,GAAP,CAAb;EACA,QAAI2B,CAAC,GAAG,KAAKH,GAAL,CAASxB,GAAT,EAAc,CAAd,CAAR;;EACA,SAAK,IAAI/B,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKuB,OAAzB,EAAkCvB,CAAC,EAAnC,EAAuC;EACrC,UAAI,KAAKuD,GAAL,CAASxB,GAAT,EAAc/B,CAAd,IAAmB0D,CAAvB,EAA0B;EACxBA,QAAAA,CAAC,GAAG,KAAKH,GAAL,CAASxB,GAAT,EAAc/B,CAAd,CAAJ;EACD;EACF;;EACD,WAAO0D,CAAP;EACD;;EAED6N,EAAAA,WAAW,CAACxP,GAAD,EAAM;EACfd,IAAAA,aAAa,CAAC,IAAD,EAAOc,GAAP,CAAb;EACA,QAAI2B,CAAC,GAAG,KAAKH,GAAL,CAASxB,GAAT,EAAc,CAAd,CAAR;EACA,QAAIoP,GAAG,GAAG,CAACpP,GAAD,EAAM,CAAN,CAAV;;EACA,SAAK,IAAI/B,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKuB,OAAzB,EAAkCvB,CAAC,EAAnC,EAAuC;EACrC,UAAI,KAAKuD,GAAL,CAASxB,GAAT,EAAc/B,CAAd,IAAmB0D,CAAvB,EAA0B;EACxBA,QAAAA,CAAC,GAAG,KAAKH,GAAL,CAASxB,GAAT,EAAc/B,CAAd,CAAJ;EACAmR,QAAAA,GAAG,CAAC,CAAD,CAAH,GAASnR,CAAT;EACD;EACF;;EACD,WAAOmR,GAAP;EACD;;EAEDK,EAAAA,SAAS,CAACvP,MAAD,EAAS;EAChBX,IAAAA,gBAAgB,CAAC,IAAD,EAAOW,MAAP,CAAhB;EACA,QAAIyB,CAAC,GAAG,KAAKH,GAAL,CAAS,CAAT,EAAYtB,MAAZ,CAAR;;EACA,SAAK,IAAIjC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKqB,IAAzB,EAA+BrB,CAAC,EAAhC,EAAoC;EAClC,UAAI,KAAKuD,GAAL,CAASvD,CAAT,EAAYiC,MAAZ,IAAsByB,CAA1B,EAA6B;EAC3BA,QAAAA,CAAC,GAAG,KAAKH,GAAL,CAASvD,CAAT,EAAYiC,MAAZ,CAAJ;EACD;EACF;;EACD,WAAOyB,CAAP;EACD;;EAED+N,EAAAA,cAAc,CAACxP,MAAD,EAAS;EACrBX,IAAAA,gBAAgB,CAAC,IAAD,EAAOW,MAAP,CAAhB;EACA,QAAIyB,CAAC,GAAG,KAAKH,GAAL,CAAS,CAAT,EAAYtB,MAAZ,CAAR;EACA,QAAIkP,GAAG,GAAG,CAAC,CAAD,EAAIlP,MAAJ,CAAV;;EACA,SAAK,IAAIjC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKqB,IAAzB,EAA+BrB,CAAC,EAAhC,EAAoC;EAClC,UAAI,KAAKuD,GAAL,CAASvD,CAAT,EAAYiC,MAAZ,IAAsByB,CAA1B,EAA6B;EAC3BA,QAAAA,CAAC,GAAG,KAAKH,GAAL,CAASvD,CAAT,EAAYiC,MAAZ,CAAJ;EACAkP,QAAAA,GAAG,CAAC,CAAD,CAAH,GAASnR,CAAT;EACD;EACF;;EACD,WAAOmR,GAAP;EACD;;EAEDO,EAAAA,SAAS,CAACzP,MAAD,EAAS;EAChBX,IAAAA,gBAAgB,CAAC,IAAD,EAAOW,MAAP,CAAhB;EACA,QAAIyB,CAAC,GAAG,KAAKH,GAAL,CAAS,CAAT,EAAYtB,MAAZ,CAAR;;EACA,SAAK,IAAIjC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKqB,IAAzB,EAA+BrB,CAAC,EAAhC,EAAoC;EAClC,UAAI,KAAKuD,GAAL,CAASvD,CAAT,EAAYiC,MAAZ,IAAsByB,CAA1B,EAA6B;EAC3BA,QAAAA,CAAC,GAAG,KAAKH,GAAL,CAASvD,CAAT,EAAYiC,MAAZ,CAAJ;EACD;EACF;;EACD,WAAOyB,CAAP;EACD;;EAEDiO,EAAAA,cAAc,CAAC1P,MAAD,EAAS;EACrBX,IAAAA,gBAAgB,CAAC,IAAD,EAAOW,MAAP,CAAhB;EACA,QAAIyB,CAAC,GAAG,KAAKH,GAAL,CAAS,CAAT,EAAYtB,MAAZ,CAAR;EACA,QAAIkP,GAAG,GAAG,CAAC,CAAD,EAAIlP,MAAJ,CAAV;;EACA,SAAK,IAAIjC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKqB,IAAzB,EAA+BrB,CAAC,EAAhC,EAAoC;EAClC,UAAI,KAAKuD,GAAL,CAASvD,CAAT,EAAYiC,MAAZ,IAAsByB,CAA1B,EAA6B;EAC3BA,QAAAA,CAAC,GAAG,KAAKH,GAAL,CAASvD,CAAT,EAAYiC,MAAZ,CAAJ;EACAkP,QAAAA,GAAG,CAAC,CAAD,CAAH,GAASnR,CAAT;EACD;EACF;;EACD,WAAOmR,GAAP;EACD;;EAED5D,EAAAA,IAAI,GAAG;EACL,QAAItN,GAAG,GAAG8E,IAAI,CAAC9E,GAAL,CAAS,KAAKoB,IAAd,EAAoB,KAAKE,OAAzB,CAAV;EACA,QAAIgM,IAAI,GAAG,EAAX;;EACA,SAAK,IAAIvN,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGC,GAApB,EAAyBD,CAAC,EAA1B,EAA8B;EAC5BuN,MAAAA,IAAI,CAACrK,IAAL,CAAU,KAAKK,GAAL,CAASvD,CAAT,EAAYA,CAAZ,CAAV;EACD;;EACD,WAAOuN,IAAP;EACD;;EAEDqE,EAAAA,IAAI,GAAqB;EAAA,QAApBC,IAAoB,uEAAb,WAAa;EACvB,QAAI1L,MAAM,GAAG,CAAb;;EACA,QAAI0L,IAAI,KAAK,KAAb,EAAoB;EAClB,aAAO,KAAKlS,GAAL,EAAP;EACD,KAFD,MAEO,IAAIkS,IAAI,KAAK,WAAb,EAA0B;EAC/B,WAAK,IAAI7R,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKqB,IAAzB,EAA+BrB,CAAC,EAAhC,EAAoC;EAClC,aAAK,IAAIsD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK/B,OAAzB,EAAkC+B,CAAC,EAAnC,EAAuC;EACrC6C,UAAAA,MAAM,GAAGA,MAAM,GAAG,KAAK5C,GAAL,CAASvD,CAAT,EAAYsD,CAAZ,IAAiB,KAAKC,GAAL,CAASvD,CAAT,EAAYsD,CAAZ,CAAnC;EACD;EACF;;EACD,aAAOyB,IAAI,CAACE,IAAL,CAAUkB,MAAV,CAAP;EACD,KAPM,MAOA;EACL,YAAM,IAAIzF,UAAJ,8BAAqCmR,IAArC,EAAN;EACD;EACF;;EAEDC,EAAAA,aAAa,GAAG;EACd,QAAIzO,GAAG,GAAG,CAAV;;EACA,SAAK,IAAIrD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKqB,IAAzB,EAA+BrB,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAIsD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK/B,OAAzB,EAAkC+B,CAAC,EAAnC,EAAuC;EACrCD,QAAAA,GAAG,IAAI,KAAKE,GAAL,CAASvD,CAAT,EAAYsD,CAAZ,CAAP;EACA,aAAKoB,GAAL,CAAS1E,CAAT,EAAYsD,CAAZ,EAAeD,GAAf;EACD;EACF;;EACD,WAAO,IAAP;EACD;;EAED0O,EAAAA,GAAG,CAACC,OAAD,EAAU;EACX,QAAI5K,cAAc,CAACwG,QAAf,CAAwBoE,OAAxB,CAAJ,EAAsCA,OAAO,GAAGA,OAAO,CAACtQ,SAAR,EAAV;EACtC,QAAIuQ,OAAO,GAAG,KAAKvQ,SAAL,EAAd;;EACA,QAAIuQ,OAAO,CAAClS,MAAR,KAAmBiS,OAAO,CAACjS,MAA/B,EAAuC;EACrC,YAAM,IAAIW,UAAJ,CAAe,mCAAf,CAAN;EACD;;EACD,QAAIqR,GAAG,GAAG,CAAV;;EACA,SAAK,IAAI/R,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGiS,OAAO,CAAClS,MAA5B,EAAoCC,CAAC,EAArC,EAAyC;EACvC+R,MAAAA,GAAG,IAAIE,OAAO,CAACjS,CAAD,CAAP,GAAagS,OAAO,CAAChS,CAAD,CAA3B;EACD;;EACD,WAAO+R,GAAP;EACD;;EAEDG,EAAAA,IAAI,CAACC,KAAD,EAAQ;EACVA,IAAAA,KAAK,GAAG9K,MAAM,CAACI,WAAP,CAAmB0K,KAAnB,CAAR;EAEA,QAAI/C,CAAC,GAAG,KAAK/N,IAAb;EACA,QAAIgO,CAAC,GAAG,KAAK9N,OAAb;EACA,QAAIgO,CAAC,GAAG4C,KAAK,CAAC5Q,OAAd;EAEA,QAAI4E,MAAM,GAAG,IAAIkB,MAAJ,CAAW+H,CAAX,EAAcG,CAAd,CAAb;EAEA,QAAI6C,KAAK,GAAG,IAAIC,YAAJ,CAAiBhD,CAAjB,CAAZ;;EACA,SAAK,IAAI/L,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGiM,CAApB,EAAuBjM,CAAC,EAAxB,EAA4B;EAC1B,WAAK,IAAIsL,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGS,CAApB,EAAuBT,CAAC,EAAxB,EAA4B;EAC1BwD,QAAAA,KAAK,CAACxD,CAAD,CAAL,GAAWuD,KAAK,CAAC5O,GAAN,CAAUqL,CAAV,EAAatL,CAAb,CAAX;EACD;;EAED,WAAK,IAAItD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGoP,CAApB,EAAuBpP,CAAC,EAAxB,EAA4B;EAC1B,YAAIsS,CAAC,GAAG,CAAR;;EACA,aAAK1D,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGS,CAAhB,EAAmBT,CAAC,EAApB,EAAwB;EACtB0D,UAAAA,CAAC,IAAI,KAAK/O,GAAL,CAASvD,CAAT,EAAY4O,CAAZ,IAAiBwD,KAAK,CAACxD,CAAD,CAA3B;EACD;;EAEDzI,QAAAA,MAAM,CAACzB,GAAP,CAAW1E,CAAX,EAAcsD,CAAd,EAAiBgP,CAAjB;EACD;EACF;;EACD,WAAOnM,MAAP;EACD;;EAEDoM,EAAAA,WAAW,CAACJ,KAAD,EAAQ;EACjBA,IAAAA,KAAK,GAAG9K,MAAM,CAACI,WAAP,CAAmB0K,KAAnB,CAAR;EACA,QAAIhM,MAAM,GAAG,IAAIkB,MAAJ,CAAW,CAAX,EAAc,CAAd,CAAb;EACA,UAAMmL,GAAG,GAAG,KAAKjP,GAAL,CAAS,CAAT,EAAY,CAAZ,CAAZ;EACA,UAAMkP,GAAG,GAAGN,KAAK,CAAC5O,GAAN,CAAU,CAAV,EAAa,CAAb,CAAZ;EACA,UAAMmP,GAAG,GAAG,KAAKnP,GAAL,CAAS,CAAT,EAAY,CAAZ,CAAZ;EACA,UAAMoP,GAAG,GAAGR,KAAK,CAAC5O,GAAN,CAAU,CAAV,EAAa,CAAb,CAAZ;EACA,UAAMqP,GAAG,GAAG,KAAKrP,GAAL,CAAS,CAAT,EAAY,CAAZ,CAAZ;EACA,UAAMsP,GAAG,GAAGV,KAAK,CAAC5O,GAAN,CAAU,CAAV,EAAa,CAAb,CAAZ;EACA,UAAMuP,GAAG,GAAG,KAAKvP,GAAL,CAAS,CAAT,EAAY,CAAZ,CAAZ;EACA,UAAMwP,GAAG,GAAGZ,KAAK,CAAC5O,GAAN,CAAU,CAAV,EAAa,CAAb,CAAZ,CAViB;;EAajB,UAAMyP,EAAE,GAAG,CAACR,GAAG,GAAGM,GAAP,KAAeL,GAAG,GAAGM,GAArB,CAAX;EACA,UAAME,EAAE,GAAG,CAACL,GAAG,GAAGE,GAAP,IAAcL,GAAzB;EACA,UAAMS,EAAE,GAAGV,GAAG,IAAIG,GAAG,GAAGI,GAAV,CAAd;EACA,UAAMI,EAAE,GAAGL,GAAG,IAAID,GAAG,GAAGJ,GAAV,CAAd;EACA,UAAMW,EAAE,GAAG,CAACZ,GAAG,GAAGE,GAAP,IAAcK,GAAzB;EACA,UAAMM,EAAE,GAAG,CAACT,GAAG,GAAGJ,GAAP,KAAeC,GAAG,GAAGE,GAArB,CAAX;EACA,UAAMW,EAAE,GAAG,CAACZ,GAAG,GAAGI,GAAP,KAAeD,GAAG,GAAGE,GAArB,CAAX,CAnBiB;;EAsBjB,UAAMQ,GAAG,GAAGP,EAAE,GAAGG,EAAL,GAAUC,EAAV,GAAeE,EAA3B;EACA,UAAME,GAAG,GAAGN,EAAE,GAAGE,EAAjB;EACA,UAAMK,GAAG,GAAGR,EAAE,GAAGE,EAAjB;EACA,UAAMO,GAAG,GAAGV,EAAE,GAAGC,EAAL,GAAUC,EAAV,GAAeG,EAA3B;EAEAlN,IAAAA,MAAM,CAACzB,GAAP,CAAW,CAAX,EAAc,CAAd,EAAiB6O,GAAjB;EACApN,IAAAA,MAAM,CAACzB,GAAP,CAAW,CAAX,EAAc,CAAd,EAAiB8O,GAAjB;EACArN,IAAAA,MAAM,CAACzB,GAAP,CAAW,CAAX,EAAc,CAAd,EAAiB+O,GAAjB;EACAtN,IAAAA,MAAM,CAACzB,GAAP,CAAW,CAAX,EAAc,CAAd,EAAiBgP,GAAjB;EACA,WAAOvN,MAAP;EACD;;EAEDwN,EAAAA,WAAW,CAACxB,KAAD,EAAQ;EACjBA,IAAAA,KAAK,GAAG9K,MAAM,CAACI,WAAP,CAAmB0K,KAAnB,CAAR;EACA,QAAIhM,MAAM,GAAG,IAAIkB,MAAJ,CAAW,CAAX,EAAc,CAAd,CAAb;EAEA,UAAMuM,GAAG,GAAG,KAAKrQ,GAAL,CAAS,CAAT,EAAY,CAAZ,CAAZ;EACA,UAAMsQ,GAAG,GAAG,KAAKtQ,GAAL,CAAS,CAAT,EAAY,CAAZ,CAAZ;EACA,UAAMuQ,GAAG,GAAG,KAAKvQ,GAAL,CAAS,CAAT,EAAY,CAAZ,CAAZ;EACA,UAAMwQ,GAAG,GAAG,KAAKxQ,GAAL,CAAS,CAAT,EAAY,CAAZ,CAAZ;EACA,UAAMiP,GAAG,GAAG,KAAKjP,GAAL,CAAS,CAAT,EAAY,CAAZ,CAAZ;EACA,UAAMmP,GAAG,GAAG,KAAKnP,GAAL,CAAS,CAAT,EAAY,CAAZ,CAAZ;EACA,UAAMyQ,GAAG,GAAG,KAAKzQ,GAAL,CAAS,CAAT,EAAY,CAAZ,CAAZ;EACA,UAAMqP,GAAG,GAAG,KAAKrP,GAAL,CAAS,CAAT,EAAY,CAAZ,CAAZ;EACA,UAAMuP,GAAG,GAAG,KAAKvP,GAAL,CAAS,CAAT,EAAY,CAAZ,CAAZ;EAEA,UAAM0Q,GAAG,GAAG9B,KAAK,CAAC5O,GAAN,CAAU,CAAV,EAAa,CAAb,CAAZ;EACA,UAAM2Q,GAAG,GAAG/B,KAAK,CAAC5O,GAAN,CAAU,CAAV,EAAa,CAAb,CAAZ;EACA,UAAM4Q,GAAG,GAAGhC,KAAK,CAAC5O,GAAN,CAAU,CAAV,EAAa,CAAb,CAAZ;EACA,UAAM6Q,GAAG,GAAGjC,KAAK,CAAC5O,GAAN,CAAU,CAAV,EAAa,CAAb,CAAZ;EACA,UAAMkP,GAAG,GAAGN,KAAK,CAAC5O,GAAN,CAAU,CAAV,EAAa,CAAb,CAAZ;EACA,UAAMoP,GAAG,GAAGR,KAAK,CAAC5O,GAAN,CAAU,CAAV,EAAa,CAAb,CAAZ;EACA,UAAM8Q,GAAG,GAAGlC,KAAK,CAAC5O,GAAN,CAAU,CAAV,EAAa,CAAb,CAAZ;EACA,UAAMsP,GAAG,GAAGV,KAAK,CAAC5O,GAAN,CAAU,CAAV,EAAa,CAAb,CAAZ;EACA,UAAMwP,GAAG,GAAGZ,KAAK,CAAC5O,GAAN,CAAU,CAAV,EAAa,CAAb,CAAZ;EAEA,UAAMyP,EAAE,GAAG,CAACY,GAAG,GAAGC,GAAN,GAAYC,GAAZ,GAAkBC,GAAlB,GAAwBvB,GAAxB,GAA8BI,GAA9B,GAAoCE,GAArC,IAA4CL,GAAvD;EACA,UAAMQ,EAAE,GAAG,CAACW,GAAG,GAAGG,GAAP,KAAe,CAACG,GAAD,GAAOzB,GAAtB,CAAX;EACA,UAAMS,EAAE,GAAGV,GAAG,IAAI,CAACyB,GAAD,GAAOC,GAAP,GAAaE,GAAb,GAAmB3B,GAAnB,GAAyBE,GAAzB,GAA+B0B,GAA/B,GAAqCtB,GAAzC,CAAd;EACA,UAAMI,EAAE,GAAG,CAAC,CAACS,GAAD,GAAOG,GAAP,GAAavB,GAAd,KAAsByB,GAAG,GAAGC,GAAN,GAAYzB,GAAlC,CAAX;EACA,UAAMW,EAAE,GAAG,CAACW,GAAG,GAAGvB,GAAP,KAAe,CAACyB,GAAD,GAAOC,GAAtB,CAAX;EACA,UAAMb,EAAE,GAAGO,GAAG,GAAGK,GAAjB;EACA,UAAMX,EAAE,GAAG,CAAC,CAACM,GAAD,GAAOI,GAAP,GAAapB,GAAd,KAAsBqB,GAAG,GAAGE,GAAN,GAAYxB,GAAlC,CAAX;EACA,UAAM2B,EAAE,GAAG,CAAC,CAACV,GAAD,GAAOI,GAAR,KAAgBG,GAAG,GAAGxB,GAAtB,CAAX;EACA,UAAM4B,EAAE,GAAG,CAACP,GAAG,GAAGpB,GAAP,KAAe,CAACqB,GAAD,GAAOE,GAAtB,CAAX;EACA,UAAMK,GAAG,GAAG,CAACZ,GAAG,GAAGC,GAAN,GAAYC,GAAZ,GAAkBtB,GAAlB,GAAwBE,GAAxB,GAA8BsB,GAA9B,GAAoCpB,GAArC,IAA4CD,GAAxD;EACA,UAAM8B,GAAG,GAAG7B,GAAG,IAAI,CAACqB,GAAD,GAAOE,GAAP,GAAaC,GAAb,GAAmB3B,GAAnB,GAAyBE,GAAzB,GAA+B0B,GAA/B,GAAqCxB,GAAzC,CAAf;EACA,UAAM6B,GAAG,GAAG,CAAC,CAACZ,GAAD,GAAOlB,GAAP,GAAaE,GAAd,KAAsBL,GAAG,GAAG4B,GAAN,GAAYxB,GAAlC,CAAZ;EACA,UAAM8B,GAAG,GAAG,CAACb,GAAG,GAAGhB,GAAP,KAAeL,GAAG,GAAGI,GAArB,CAAZ;EACA,UAAM+B,GAAG,GAAGd,GAAG,GAAGO,GAAlB;EACA,UAAMQ,GAAG,GAAG,CAACjC,GAAG,GAAGE,GAAP,KAAe,CAACuB,GAAD,GAAOxB,GAAtB,CAAZ;EACA,UAAMiC,GAAG,GAAG,CAAC,CAAChB,GAAD,GAAOtB,GAAP,GAAaE,GAAd,KAAsBC,GAAG,GAAG0B,GAAN,GAAYtB,GAAlC,CAAZ;EACA,UAAMgC,GAAG,GAAG,CAACjB,GAAG,GAAGpB,GAAP,KAAeC,GAAG,GAAGI,GAArB,CAAZ;EACA,UAAMiC,GAAG,GAAG,CAACxC,GAAG,GAAGE,GAAP,KAAe,CAAC2B,GAAD,GAAOtB,GAAtB,CAAZ;EACA,UAAMkC,GAAG,GAAGpB,GAAG,GAAGO,GAAlB;EACA,UAAMc,GAAG,GAAGxC,GAAG,GAAGG,GAAlB;EACA,UAAMsC,GAAG,GAAGpB,GAAG,GAAGI,GAAlB;EACA,UAAMiB,GAAG,GAAGpB,GAAG,GAAGE,GAAlB;EACA,UAAMmB,GAAG,GAAGvC,GAAG,GAAGC,GAAlB;EAEA,UAAMQ,GAAG,GAAGF,EAAE,GAAGuB,GAAL,GAAWK,GAAvB;EACA,UAAMzB,GAAG,GAAGR,EAAE,GAAGG,EAAL,GAAUC,EAAV,GAAeC,EAAf,GAAoBqB,GAApB,GAA0BE,GAA1B,GAAgCC,GAA5C;EACA,UAAMS,GAAG,GAAGjC,EAAE,GAAGC,EAAL,GAAUiB,EAAV,GAAeC,GAAf,GAAqBI,GAArB,GAA2BE,GAA3B,GAAiCE,GAA7C;EACA,UAAMvB,GAAG,GAAGR,EAAE,GAAGC,EAAL,GAAUC,EAAV,GAAeE,EAAf,GAAoBuB,GAApB,GAA0BE,GAA1B,GAAgCC,GAA5C;EACA,UAAMrB,GAAG,GAAGT,EAAE,GAAGE,EAAL,GAAUC,EAAV,GAAeC,EAAf,GAAoB6B,GAAhC;EACA,UAAMK,GAAG,GAAGX,GAAG,GAAGE,GAAN,GAAYC,GAAZ,GAAkBC,GAAlB,GAAwBG,GAApC;EACA,UAAMK,GAAG,GAAGnC,EAAE,GAAGC,EAAL,GAAUgB,EAAV,GAAeG,GAAf,GAAqBC,GAArB,GAA2BC,GAA3B,GAAiCC,GAA7C;EACA,UAAMa,GAAG,GAAGf,GAAG,GAAGC,GAAN,GAAYC,GAAZ,GAAkBC,GAAlB,GAAwBO,GAApC;EACA,UAAMM,GAAG,GAAGrC,EAAE,GAAGC,EAAL,GAAUgB,EAAV,GAAeC,EAAf,GAAoBc,GAAhC;EAEAlP,IAAAA,MAAM,CAACzB,GAAP,CAAW,CAAX,EAAc,CAAd,EAAiB6O,GAAjB;EACApN,IAAAA,MAAM,CAACzB,GAAP,CAAW,CAAX,EAAc,CAAd,EAAiB8O,GAAjB;EACArN,IAAAA,MAAM,CAACzB,GAAP,CAAW,CAAX,EAAc,CAAd,EAAiB4Q,GAAjB;EACAnP,IAAAA,MAAM,CAACzB,GAAP,CAAW,CAAX,EAAc,CAAd,EAAiB+O,GAAjB;EACAtN,IAAAA,MAAM,CAACzB,GAAP,CAAW,CAAX,EAAc,CAAd,EAAiBgP,GAAjB;EACAvN,IAAAA,MAAM,CAACzB,GAAP,CAAW,CAAX,EAAc,CAAd,EAAiB6Q,GAAjB;EACApP,IAAAA,MAAM,CAACzB,GAAP,CAAW,CAAX,EAAc,CAAd,EAAiB8Q,GAAjB;EACArP,IAAAA,MAAM,CAACzB,GAAP,CAAW,CAAX,EAAc,CAAd,EAAiB+Q,GAAjB;EACAtP,IAAAA,MAAM,CAACzB,GAAP,CAAW,CAAX,EAAc,CAAd,EAAiBgR,GAAjB;EACA,WAAOvP,MAAP;EACD;;EAEDwP,EAAAA,YAAY,CAACC,CAAD,EAAI;EACdA,IAAAA,CAAC,GAAGvO,MAAM,CAACI,WAAP,CAAmBmO,CAAnB,CAAJ;EACA,QAAIvR,CAAC,GAAG,KAAKyK,KAAL,EAAR;EACA,QAAI+G,EAAE,GAAGxR,CAAC,CAAChD,IAAX;EACA,QAAIyU,EAAE,GAAGzR,CAAC,CAAC9C,OAAX;EACA,QAAIwU,EAAE,GAAGH,CAAC,CAACvU,IAAX;EACA,QAAI2U,EAAE,GAAGJ,CAAC,CAACrU,OAAX;;EACA,QAAIuU,EAAE,KAAKC,EAAX,EAAe;EACb;EACAE,MAAAA,OAAO,CAACC,IAAR,uBACiBL,EADjB,gBACyBC,EADzB,kBACmCC,EADnC,gBAC2CC,EAD3C;EAGD,KAZa;EAed;;;EACA,aAASG,KAAT,CAAeC,GAAf,EAAoB/U,IAApB,EAA0B4C,IAA1B,EAAgC;EAC9B,UAAI5B,CAAC,GAAG+T,GAAG,CAAC/U,IAAZ;EACA,UAAImB,CAAC,GAAG4T,GAAG,CAAC7U,OAAZ;;EACA,UAAIc,CAAC,KAAKhB,IAAN,IAAcmB,CAAC,KAAKyB,IAAxB,EAA8B;EAC5B,eAAOmS,GAAP;EACD,OAFD,MAEO;EACL,YAAIC,QAAQ,GAAGjP,cAAc,CAACyF,KAAf,CAAqBxL,IAArB,EAA2B4C,IAA3B,CAAf;EACAoS,QAAAA,QAAQ,GAAGA,QAAQ,CAAC3G,YAAT,CAAsB0G,GAAtB,EAA2B,CAA3B,EAA8B,CAA9B,CAAX;EACA,eAAOC,QAAP;EACD;EACF,KA1Ba;EA6Bd;EACA;;;EAEA,QAAIhU,CAAC,GAAG0C,IAAI,CAACpF,GAAL,CAASkW,EAAT,EAAaE,EAAb,CAAR;EACA,QAAIvT,CAAC,GAAGuC,IAAI,CAACpF,GAAL,CAASmW,EAAT,EAAaE,EAAb,CAAR;EACA3R,IAAAA,CAAC,GAAG8R,KAAK,CAAC9R,CAAD,EAAIhC,CAAJ,EAAOG,CAAP,CAAT;EACAoT,IAAAA,CAAC,GAAGO,KAAK,CAACP,CAAD,EAAIvT,CAAJ,EAAOG,CAAP,CAAT,CAnCc;;EAsCd,aAAS8T,SAAT,CAAmBC,CAAnB,EAAsBC,CAAtB,EAAyBnV,IAAzB,EAA+B4C,IAA/B,EAAqC;EACnC;EACA,UAAI5C,IAAI,IAAI,GAAR,IAAe4C,IAAI,IAAI,GAA3B,EAAgC;EAC9B,eAAOsS,CAAC,CAACrE,IAAF,CAAOsE,CAAP,CAAP,CAD8B;EAE/B,OAJkC;;;EAOnC,UAAInV,IAAI,GAAG,CAAP,KAAa,CAAb,IAAkB4C,IAAI,GAAG,CAAP,KAAa,CAAnC,EAAsC;EACpCsS,QAAAA,CAAC,GAAGJ,KAAK,CAACI,CAAD,EAAIlV,IAAI,GAAG,CAAX,EAAc4C,IAAI,GAAG,CAArB,CAAT;EACAuS,QAAAA,CAAC,GAAGL,KAAK,CAACK,CAAD,EAAInV,IAAI,GAAG,CAAX,EAAc4C,IAAI,GAAG,CAArB,CAAT;EACD,OAHD,MAGO,IAAI5C,IAAI,GAAG,CAAP,KAAa,CAAjB,EAAoB;EACzBkV,QAAAA,CAAC,GAAGJ,KAAK,CAACI,CAAD,EAAIlV,IAAI,GAAG,CAAX,EAAc4C,IAAd,CAAT;EACAuS,QAAAA,CAAC,GAAGL,KAAK,CAACK,CAAD,EAAInV,IAAI,GAAG,CAAX,EAAc4C,IAAd,CAAT;EACD,OAHM,MAGA,IAAIA,IAAI,GAAG,CAAP,KAAa,CAAjB,EAAoB;EACzBsS,QAAAA,CAAC,GAAGJ,KAAK,CAACI,CAAD,EAAIlV,IAAJ,EAAU4C,IAAI,GAAG,CAAjB,CAAT;EACAuS,QAAAA,CAAC,GAAGL,KAAK,CAACK,CAAD,EAAInV,IAAJ,EAAU4C,IAAI,GAAG,CAAjB,CAAT;EACD;;EAED,UAAIwS,QAAQ,GAAGC,QAAQ,CAACH,CAAC,CAAClV,IAAF,GAAS,CAAV,EAAa,EAAb,CAAvB;EACA,UAAIsV,QAAQ,GAAGD,QAAQ,CAACH,CAAC,CAAChV,OAAF,GAAY,CAAb,EAAgB,EAAhB,CAAvB,CAnBmC;;EAqBnC,UAAIiR,GAAG,GAAG+D,CAAC,CAACK,SAAF,CAAY,CAAZ,EAAeH,QAAQ,GAAG,CAA1B,EAA6B,CAA7B,EAAgCE,QAAQ,GAAG,CAA3C,CAAV;EACA,UAAIlE,GAAG,GAAG+D,CAAC,CAACI,SAAF,CAAY,CAAZ,EAAeH,QAAQ,GAAG,CAA1B,EAA6B,CAA7B,EAAgCE,QAAQ,GAAG,CAA3C,CAAV;EAEA,UAAIjE,GAAG,GAAG6D,CAAC,CAACK,SAAF,CAAY,CAAZ,EAAeH,QAAQ,GAAG,CAA1B,EAA6BE,QAA7B,EAAuCJ,CAAC,CAAChV,OAAF,GAAY,CAAnD,CAAV;EACA,UAAIoR,GAAG,GAAG6D,CAAC,CAACI,SAAF,CAAY,CAAZ,EAAeH,QAAQ,GAAG,CAA1B,EAA6BE,QAA7B,EAAuCH,CAAC,CAACjV,OAAF,GAAY,CAAnD,CAAV;EAEA,UAAIqR,GAAG,GAAG2D,CAAC,CAACK,SAAF,CAAYH,QAAZ,EAAsBF,CAAC,CAAClV,IAAF,GAAS,CAA/B,EAAkC,CAAlC,EAAqCsV,QAAQ,GAAG,CAAhD,CAAV;EACA,UAAI9D,GAAG,GAAG2D,CAAC,CAACI,SAAF,CAAYH,QAAZ,EAAsBD,CAAC,CAACnV,IAAF,GAAS,CAA/B,EAAkC,CAAlC,EAAqCsV,QAAQ,GAAG,CAAhD,CAAV;EAEA,UAAI7D,GAAG,GAAGyD,CAAC,CAACK,SAAF,CAAYH,QAAZ,EAAsBF,CAAC,CAAClV,IAAF,GAAS,CAA/B,EAAkCsV,QAAlC,EAA4CJ,CAAC,CAAChV,OAAF,GAAY,CAAxD,CAAV;EACA,UAAIwR,GAAG,GAAGyD,CAAC,CAACI,SAAF,CAAYH,QAAZ,EAAsBD,CAAC,CAACnV,IAAF,GAAS,CAA/B,EAAkCsV,QAAlC,EAA4CH,CAAC,CAACjV,OAAF,GAAY,CAAxD,CAAV,CA/BmC;;EAkCnC,UAAIyR,EAAE,GAAGsD,SAAS,CAChBlP,cAAc,CAACE,GAAf,CAAmBkL,GAAnB,EAAwBM,GAAxB,CADgB,EAEhB1L,cAAc,CAACE,GAAf,CAAmBmL,GAAnB,EAAwBM,GAAxB,CAFgB,EAGhB0D,QAHgB,EAIhBE,QAJgB,CAAlB;EAMA,UAAI1D,EAAE,GAAGqD,SAAS,CAAClP,cAAc,CAACE,GAAf,CAAmBsL,GAAnB,EAAwBE,GAAxB,CAAD,EAA+BL,GAA/B,EAAoCgE,QAApC,EAA8CE,QAA9C,CAAlB;EACA,UAAIzD,EAAE,GAAGoD,SAAS,CAAC9D,GAAD,EAAMpL,cAAc,CAACO,GAAf,CAAmBgL,GAAnB,EAAwBI,GAAxB,CAAN,EAAoC0D,QAApC,EAA8CE,QAA9C,CAAlB;EACA,UAAIxD,EAAE,GAAGmD,SAAS,CAACxD,GAAD,EAAM1L,cAAc,CAACO,GAAf,CAAmBkL,GAAnB,EAAwBJ,GAAxB,CAAN,EAAoCgE,QAApC,EAA8CE,QAA9C,CAAlB;EACA,UAAIvD,EAAE,GAAGkD,SAAS,CAAClP,cAAc,CAACE,GAAf,CAAmBkL,GAAnB,EAAwBE,GAAxB,CAAD,EAA+BK,GAA/B,EAAoC0D,QAApC,EAA8CE,QAA9C,CAAlB;EACA,UAAItD,EAAE,GAAGiD,SAAS,CAChBlP,cAAc,CAACO,GAAf,CAAmBiL,GAAnB,EAAwBJ,GAAxB,CADgB,EAEhBpL,cAAc,CAACE,GAAf,CAAmBmL,GAAnB,EAAwBE,GAAxB,CAFgB,EAGhB8D,QAHgB,EAIhBE,QAJgB,CAAlB;EAMA,UAAIrD,EAAE,GAAGgD,SAAS,CAChBlP,cAAc,CAACO,GAAf,CAAmB+K,GAAnB,EAAwBI,GAAxB,CADgB,EAEhB1L,cAAc,CAACE,GAAf,CAAmBuL,GAAnB,EAAwBE,GAAxB,CAFgB,EAGhB0D,QAHgB,EAIhBE,QAJgB,CAAlB,CAlDmC;;EA0DnC,UAAIjD,GAAG,GAAGtM,cAAc,CAACE,GAAf,CAAmB0L,EAAnB,EAAuBG,EAAvB,CAAV;EACAO,MAAAA,GAAG,CAAC/L,GAAJ,CAAQyL,EAAR;EACAM,MAAAA,GAAG,CAACpM,GAAJ,CAAQgM,EAAR;EACA,UAAIiC,GAAG,GAAGnO,cAAc,CAACE,GAAf,CAAmB4L,EAAnB,EAAuBE,EAAvB,CAAV;EACA,UAAIqC,GAAG,GAAGrO,cAAc,CAACE,GAAf,CAAmB2L,EAAnB,EAAuBE,EAAvB,CAAV;EACA,UAAIuC,GAAG,GAAGtO,cAAc,CAACO,GAAf,CAAmBqL,EAAnB,EAAuBC,EAAvB,CAAV;EACAyC,MAAAA,GAAG,CAACpO,GAAJ,CAAQ4L,EAAR;EACAwC,MAAAA,GAAG,CAACpO,GAAJ,CAAQ+L,EAAR,EAjEmC;;EAoEnC,UAAIgD,QAAQ,GAAGjP,cAAc,CAACyF,KAAf,CAAqB,IAAI6G,GAAG,CAACrS,IAA7B,EAAmC,IAAIqS,GAAG,CAACnS,OAA3C,CAAf;EACA8U,MAAAA,QAAQ,GAAGA,QAAQ,CAAC3G,YAAT,CAAsBgE,GAAtB,EAA2B,CAA3B,EAA8B,CAA9B,CAAX;EACA2C,MAAAA,QAAQ,GAAGA,QAAQ,CAAC3G,YAAT,CAAsB6F,GAAtB,EAA2B7B,GAAG,CAACrS,IAA/B,EAAqC,CAArC,CAAX;EACAgV,MAAAA,QAAQ,GAAGA,QAAQ,CAAC3G,YAAT,CAAsB+F,GAAtB,EAA2B,CAA3B,EAA8B/B,GAAG,CAACnS,OAAlC,CAAX;EACA8U,MAAAA,QAAQ,GAAGA,QAAQ,CAAC3G,YAAT,CAAsBgG,GAAtB,EAA2BhC,GAAG,CAACrS,IAA/B,EAAqCqS,GAAG,CAACnS,OAAzC,CAAX;EACA,aAAO8U,QAAQ,CAACO,SAAT,CAAmB,CAAnB,EAAsBvV,IAAI,GAAG,CAA7B,EAAgC,CAAhC,EAAmC4C,IAAI,GAAG,CAA1C,CAAP;EACD;;EACD,WAAOqS,SAAS,CAACjS,CAAD,EAAIuR,CAAJ,EAAOvT,CAAP,EAAUG,CAAV,CAAhB;EACD;;EAEDqU,EAAAA,SAAS,GAAe;EAAA,QAAd1W,OAAc,uEAAJ,EAAI;;EACtB,QAAI,OAAOA,OAAP,KAAmB,QAAvB,EAAiC;EAC/B,YAAM,IAAIL,SAAJ,CAAc,2BAAd,CAAN;EACD;;EACD,UAAM;EAAEG,MAAAA,GAAG,GAAG,CAAR;EAAWN,MAAAA,GAAG,GAAG;EAAjB,QAAuBQ,OAA7B;EACA,QAAI,CAACgN,MAAM,CAAC2J,QAAP,CAAgB7W,GAAhB,CAAL,EAA2B,MAAM,IAAIH,SAAJ,CAAc,sBAAd,CAAN;EAC3B,QAAI,CAACqN,MAAM,CAAC2J,QAAP,CAAgBnX,GAAhB,CAAL,EAA2B,MAAM,IAAIG,SAAJ,CAAc,sBAAd,CAAN;EAC3B,QAAIG,GAAG,IAAIN,GAAX,EAAgB,MAAM,IAAIe,UAAJ,CAAe,8BAAf,CAAN;EAChB,QAAIgH,SAAS,GAAG,IAAIL,MAAJ,CAAW,KAAKhG,IAAhB,EAAsB,KAAKE,OAA3B,CAAhB;;EACA,SAAK,IAAIvB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKqB,IAAzB,EAA+BrB,CAAC,EAAhC,EAAoC;EAClC,YAAM+B,GAAG,GAAG,KAAK6N,MAAL,CAAY5P,CAAZ,CAAZ;EACAE,MAAAA,OAAO,CAAC6B,GAAD,EAAM;EAAE9B,QAAAA,GAAF;EAAON,QAAAA,GAAP;EAAYW,QAAAA,MAAM,EAAEyB;EAApB,OAAN,CAAP;EACA2F,MAAAA,SAAS,CAACoI,MAAV,CAAiB9P,CAAjB,EAAoB+B,GAApB;EACD;;EACD,WAAO2F,SAAP;EACD;;EAEDqP,EAAAA,YAAY,GAAe;EAAA,QAAd5W,OAAc,uEAAJ,EAAI;;EACzB,QAAI,OAAOA,OAAP,KAAmB,QAAvB,EAAiC;EAC/B,YAAM,IAAIL,SAAJ,CAAc,2BAAd,CAAN;EACD;;EACD,UAAM;EAAEG,MAAAA,GAAG,GAAG,CAAR;EAAWN,MAAAA,GAAG,GAAG;EAAjB,QAAuBQ,OAA7B;EACA,QAAI,CAACgN,MAAM,CAAC2J,QAAP,CAAgB7W,GAAhB,CAAL,EAA2B,MAAM,IAAIH,SAAJ,CAAc,sBAAd,CAAN;EAC3B,QAAI,CAACqN,MAAM,CAAC2J,QAAP,CAAgBnX,GAAhB,CAAL,EAA2B,MAAM,IAAIG,SAAJ,CAAc,sBAAd,CAAN;EAC3B,QAAIG,GAAG,IAAIN,GAAX,EAAgB,MAAM,IAAIe,UAAJ,CAAe,8BAAf,CAAN;EAChB,QAAIgH,SAAS,GAAG,IAAIL,MAAJ,CAAW,KAAKhG,IAAhB,EAAsB,KAAKE,OAA3B,CAAhB;;EACA,SAAK,IAAIvB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKuB,OAAzB,EAAkCvB,CAAC,EAAnC,EAAuC;EACrC,YAAMiC,MAAM,GAAG,KAAKiO,SAAL,CAAelQ,CAAf,CAAf;EACAE,MAAAA,OAAO,CAAC+B,MAAD,EAAS;EACdhC,QAAAA,GAAG,EAAEA,GADS;EAEdN,QAAAA,GAAG,EAAEA,GAFS;EAGdW,QAAAA,MAAM,EAAE2B;EAHM,OAAT,CAAP;EAKAyF,MAAAA,SAAS,CAAC0I,SAAV,CAAoBpQ,CAApB,EAAuBiC,MAAvB;EACD;;EACD,WAAOyF,SAAP;EACD;;EAEDsP,EAAAA,QAAQ,GAAG;EACT,UAAMC,MAAM,GAAGlS,IAAI,CAACkG,IAAL,CAAU,KAAK1J,OAAL,GAAe,CAAzB,CAAf;;EACA,SAAK,IAAIvB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKqB,IAAzB,EAA+BrB,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAIsD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG2T,MAApB,EAA4B3T,CAAC,EAA7B,EAAiC;EAC/B,YAAI4T,KAAK,GAAG,KAAK3T,GAAL,CAASvD,CAAT,EAAYsD,CAAZ,CAAZ;EACA,YAAI6T,IAAI,GAAG,KAAK5T,GAAL,CAASvD,CAAT,EAAY,KAAKuB,OAAL,GAAe,CAAf,GAAmB+B,CAA/B,CAAX;EACA,aAAKoB,GAAL,CAAS1E,CAAT,EAAYsD,CAAZ,EAAe6T,IAAf;EACA,aAAKzS,GAAL,CAAS1E,CAAT,EAAY,KAAKuB,OAAL,GAAe,CAAf,GAAmB+B,CAA/B,EAAkC4T,KAAlC;EACD;EACF;;EACD,WAAO,IAAP;EACD;;EAEDE,EAAAA,WAAW,GAAG;EACZ,UAAMH,MAAM,GAAGlS,IAAI,CAACkG,IAAL,CAAU,KAAK5J,IAAL,GAAY,CAAtB,CAAf;;EACA,SAAK,IAAIiC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK/B,OAAzB,EAAkC+B,CAAC,EAAnC,EAAuC;EACrC,WAAK,IAAItD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGiX,MAApB,EAA4BjX,CAAC,EAA7B,EAAiC;EAC/B,YAAIkX,KAAK,GAAG,KAAK3T,GAAL,CAASvD,CAAT,EAAYsD,CAAZ,CAAZ;EACA,YAAI6T,IAAI,GAAG,KAAK5T,GAAL,CAAS,KAAKlC,IAAL,GAAY,CAAZ,GAAgBrB,CAAzB,EAA4BsD,CAA5B,CAAX;EACA,aAAKoB,GAAL,CAAS1E,CAAT,EAAYsD,CAAZ,EAAe6T,IAAf;EACA,aAAKzS,GAAL,CAAS,KAAKrD,IAAL,GAAY,CAAZ,GAAgBrB,CAAzB,EAA4BsD,CAA5B,EAA+B4T,KAA/B;EACD;EACF;;EACD,WAAO,IAAP;EACD;;EAEDG,EAAAA,gBAAgB,CAAClF,KAAD,EAAQ;EACtBA,IAAAA,KAAK,GAAG9K,MAAM,CAACI,WAAP,CAAmB0K,KAAnB,CAAR;EAEA,QAAI/C,CAAC,GAAG,KAAK/N,IAAb;EACA,QAAIgO,CAAC,GAAG,KAAK9N,OAAb;EACA,QAAIgO,CAAC,GAAG4C,KAAK,CAAC9Q,IAAd;EACA,QAAIiW,CAAC,GAAGnF,KAAK,CAAC5Q,OAAd;EAEA,QAAI4E,MAAM,GAAG,IAAIkB,MAAJ,CAAW+H,CAAC,GAAGG,CAAf,EAAkBF,CAAC,GAAGiI,CAAtB,CAAb;;EACA,SAAK,IAAItX,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGoP,CAApB,EAAuBpP,CAAC,EAAxB,EAA4B;EAC1B,WAAK,IAAIsD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG+L,CAApB,EAAuB/L,CAAC,EAAxB,EAA4B;EAC1B,aAAK,IAAIsL,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGW,CAApB,EAAuBX,CAAC,EAAxB,EAA4B;EAC1B,eAAK,IAAInB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG6J,CAApB,EAAuB7J,CAAC,EAAxB,EAA4B;EAC1BtH,YAAAA,MAAM,CAACzB,GAAP,CAAW6K,CAAC,GAAGvP,CAAJ,GAAQ4O,CAAnB,EAAsB0I,CAAC,GAAGhU,CAAJ,GAAQmK,CAA9B,EAAiC,KAAKlK,GAAL,CAASvD,CAAT,EAAYsD,CAAZ,IAAiB6O,KAAK,CAAC5O,GAAN,CAAUqL,CAAV,EAAanB,CAAb,CAAlD;EACD;EACF;EACF;EACF;;EACD,WAAOtH,MAAP;EACD;;EAEDoR,EAAAA,SAAS,GAAG;EACV,QAAIpR,MAAM,GAAG,IAAIkB,MAAJ,CAAW,KAAK9F,OAAhB,EAAyB,KAAKF,IAA9B,CAAb;;EACA,SAAK,IAAIrB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKqB,IAAzB,EAA+BrB,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAIsD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK/B,OAAzB,EAAkC+B,CAAC,EAAnC,EAAuC;EACrC6C,QAAAA,MAAM,CAACzB,GAAP,CAAWpB,CAAX,EAActD,CAAd,EAAiB,KAAKuD,GAAL,CAASvD,CAAT,EAAYsD,CAAZ,CAAjB;EACD;EACF;;EACD,WAAO6C,MAAP;EACD;;EAEDqR,EAAAA,QAAQ,GAAmC;EAAA,QAAlCC,eAAkC,uEAAhBC,cAAgB;;EACzC,SAAK,IAAI1X,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKqB,IAAzB,EAA+BrB,CAAC,EAAhC,EAAoC;EAClC,WAAK8P,MAAL,CAAY9P,CAAZ,EAAe,KAAK4P,MAAL,CAAY5P,CAAZ,EAAe2X,IAAf,CAAoBF,eAApB,CAAf;EACD;;EACD,WAAO,IAAP;EACD;;EAEDG,EAAAA,WAAW,GAAmC;EAAA,QAAlCH,eAAkC,uEAAhBC,cAAgB;;EAC5C,SAAK,IAAI1X,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKuB,OAAzB,EAAkCvB,CAAC,EAAnC,EAAuC;EACrC,WAAKoQ,SAAL,CAAepQ,CAAf,EAAkB,KAAKkQ,SAAL,CAAelQ,CAAf,EAAkB2X,IAAlB,CAAuBF,eAAvB,CAAlB;EACD;;EACD,WAAO,IAAP;EACD;;EAEDb,EAAAA,SAAS,CAAClU,QAAD,EAAWC,MAAX,EAAmBC,WAAnB,EAAgCC,SAAhC,EAA2C;EAClDJ,IAAAA,UAAU,CAAC,IAAD,EAAOC,QAAP,EAAiBC,MAAjB,EAAyBC,WAAzB,EAAsCC,SAAtC,CAAV;EACA,QAAI6E,SAAS,GAAG,IAAIL,MAAJ,CACd1E,MAAM,GAAGD,QAAT,GAAoB,CADN,EAEdG,SAAS,GAAGD,WAAZ,GAA0B,CAFZ,CAAhB;;EAIA,SAAK,IAAI5C,CAAC,GAAG0C,QAAb,EAAuB1C,CAAC,IAAI2C,MAA5B,EAAoC3C,CAAC,EAArC,EAAyC;EACvC,WAAK,IAAIsD,CAAC,GAAGV,WAAb,EAA0BU,CAAC,IAAIT,SAA/B,EAA0CS,CAAC,EAA3C,EAA+C;EAC7CoE,QAAAA,SAAS,CAAChD,GAAV,CAAc1E,CAAC,GAAG0C,QAAlB,EAA4BY,CAAC,GAAGV,WAAhC,EAA6C,KAAKW,GAAL,CAASvD,CAAT,EAAYsD,CAAZ,CAA7C;EACD;EACF;;EACD,WAAOoE,SAAP;EACD;;EAEDmQ,EAAAA,YAAY,CAACC,OAAD,EAAUlV,WAAV,EAAuBC,SAAvB,EAAkC;EAC5C,QAAID,WAAW,KAAKvC,SAApB,EAA+BuC,WAAW,GAAG,CAAd;EAC/B,QAAIC,SAAS,KAAKxC,SAAlB,EAA6BwC,SAAS,GAAG,KAAKtB,OAAL,GAAe,CAA3B;;EAC7B,QACEqB,WAAW,GAAGC,SAAd,IACAD,WAAW,GAAG,CADd,IAEAA,WAAW,IAAI,KAAKrB,OAFpB,IAGAsB,SAAS,GAAG,CAHZ,IAIAA,SAAS,IAAI,KAAKtB,OALpB,EAME;EACA,YAAM,IAAIb,UAAJ,CAAe,uBAAf,CAAN;EACD;;EAED,QAAIgH,SAAS,GAAG,IAAIL,MAAJ,CAAWyQ,OAAO,CAAC/X,MAAnB,EAA2B8C,SAAS,GAAGD,WAAZ,GAA0B,CAArD,CAAhB;;EACA,SAAK,IAAI5C,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG8X,OAAO,CAAC/X,MAA5B,EAAoCC,CAAC,EAArC,EAAyC;EACvC,WAAK,IAAIsD,CAAC,GAAGV,WAAb,EAA0BU,CAAC,IAAIT,SAA/B,EAA0CS,CAAC,EAA3C,EAA+C;EAC7C,YAAIwU,OAAO,CAAC9X,CAAD,CAAP,GAAa,CAAb,IAAkB8X,OAAO,CAAC9X,CAAD,CAAP,IAAc,KAAKqB,IAAzC,EAA+C;EAC7C,gBAAM,IAAIX,UAAJ,mCAA0CoX,OAAO,CAAC9X,CAAD,CAAjD,EAAN;EACD;;EACD0H,QAAAA,SAAS,CAAChD,GAAV,CAAc1E,CAAd,EAAiBsD,CAAC,GAAGV,WAArB,EAAkC,KAAKW,GAAL,CAASuU,OAAO,CAAC9X,CAAD,CAAhB,EAAqBsD,CAArB,CAAlC;EACD;EACF;;EACD,WAAOoE,SAAP;EACD;;EAEDqQ,EAAAA,eAAe,CAACD,OAAD,EAAUpV,QAAV,EAAoBC,MAApB,EAA4B;EACzC,QAAID,QAAQ,KAAKrC,SAAjB,EAA4BqC,QAAQ,GAAG,CAAX;EAC5B,QAAIC,MAAM,KAAKtC,SAAf,EAA0BsC,MAAM,GAAG,KAAKtB,IAAL,GAAY,CAArB;;EAC1B,QACEqB,QAAQ,GAAGC,MAAX,IACAD,QAAQ,GAAG,CADX,IAEAA,QAAQ,IAAI,KAAKrB,IAFjB,IAGAsB,MAAM,GAAG,CAHT,IAIAA,MAAM,IAAI,KAAKtB,IALjB,EAME;EACA,YAAM,IAAIX,UAAJ,CAAe,uBAAf,CAAN;EACD;;EAED,QAAIgH,SAAS,GAAG,IAAIL,MAAJ,CAAW1E,MAAM,GAAGD,QAAT,GAAoB,CAA/B,EAAkCoV,OAAO,CAAC/X,MAA1C,CAAhB;;EACA,SAAK,IAAIC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG8X,OAAO,CAAC/X,MAA5B,EAAoCC,CAAC,EAArC,EAAyC;EACvC,WAAK,IAAIsD,CAAC,GAAGZ,QAAb,EAAuBY,CAAC,IAAIX,MAA5B,EAAoCW,CAAC,EAArC,EAAyC;EACvC,YAAIwU,OAAO,CAAC9X,CAAD,CAAP,GAAa,CAAb,IAAkB8X,OAAO,CAAC9X,CAAD,CAAP,IAAc,KAAKuB,OAAzC,EAAkD;EAChD,gBAAM,IAAIb,UAAJ,sCAA6CoX,OAAO,CAAC9X,CAAD,CAApD,EAAN;EACD;;EACD0H,QAAAA,SAAS,CAAChD,GAAV,CAAcpB,CAAC,GAAGZ,QAAlB,EAA4B1C,CAA5B,EAA+B,KAAKuD,GAAL,CAASD,CAAT,EAAYwU,OAAO,CAAC9X,CAAD,CAAnB,CAA/B;EACD;EACF;;EACD,WAAO0H,SAAP;EACD;;EAEDgI,EAAAA,YAAY,CAACxO,MAAD,EAASwB,QAAT,EAAmBE,WAAnB,EAAgC;EAC1C1B,IAAAA,MAAM,GAAGmG,MAAM,CAACI,WAAP,CAAmBvG,MAAnB,CAAT;EACA,QAAIyB,MAAM,GAAGD,QAAQ,GAAGxB,MAAM,CAACG,IAAlB,GAAyB,CAAtC;EACA,QAAIwB,SAAS,GAAGD,WAAW,GAAG1B,MAAM,CAACK,OAArB,GAA+B,CAA/C;EACAkB,IAAAA,UAAU,CAAC,IAAD,EAAOC,QAAP,EAAiBC,MAAjB,EAAyBC,WAAzB,EAAsCC,SAAtC,CAAV;;EACA,SAAK,IAAI7C,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGkB,MAAM,CAACG,IAA3B,EAAiCrB,CAAC,EAAlC,EAAsC;EACpC,WAAK,IAAIsD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGpC,MAAM,CAACK,OAA3B,EAAoC+B,CAAC,EAArC,EAAyC;EACvC,aAAKoB,GAAL,CAAShC,QAAQ,GAAG1C,CAApB,EAAuB4C,WAAW,GAAGU,CAArC,EAAwCpC,MAAM,CAACqC,GAAP,CAAWvD,CAAX,EAAcsD,CAAd,CAAxC;EACD;EACF;;EACD,WAAO,IAAP;EACD;;EAED0U,EAAAA,SAAS,CAACnW,UAAD,EAAaC,aAAb,EAA4B;EACnC,QAAIgW,OAAO,GAAGlW,YAAY,CAAC,IAAD,EAAOC,UAAP,EAAmBC,aAAnB,CAA1B;EACA,QAAI4F,SAAS,GAAG,IAAIL,MAAJ,CAAWxF,UAAU,CAAC9B,MAAtB,EAA8B+B,aAAa,CAAC/B,MAA5C,CAAhB;;EACA,SAAK,IAAIC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG8X,OAAO,CAAC/V,GAAR,CAAYhC,MAAhC,EAAwCC,CAAC,EAAzC,EAA6C;EAC3C,UAAIiY,QAAQ,GAAGH,OAAO,CAAC/V,GAAR,CAAY/B,CAAZ,CAAf;;EACA,WAAK,IAAIsD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGwU,OAAO,CAAC7V,MAAR,CAAelC,MAAnC,EAA2CuD,CAAC,EAA5C,EAAgD;EAC9C,YAAI4U,WAAW,GAAGJ,OAAO,CAAC7V,MAAR,CAAeqB,CAAf,CAAlB;EACAoE,QAAAA,SAAS,CAAChD,GAAV,CAAc1E,CAAd,EAAiBsD,CAAjB,EAAoB,KAAKC,GAAL,CAAS0U,QAAT,EAAmBC,WAAnB,CAApB;EACD;EACF;;EACD,WAAOxQ,SAAP;EACD;;EAEDyQ,EAAAA,KAAK,GAAG;EACN,QAAIlY,GAAG,GAAG8E,IAAI,CAAC9E,GAAL,CAAS,KAAKoB,IAAd,EAAoB,KAAKE,OAAzB,CAAV;EACA,QAAI4W,KAAK,GAAG,CAAZ;;EACA,SAAK,IAAInY,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGC,GAApB,EAAyBD,CAAC,EAA1B,EAA8B;EAC5BmY,MAAAA,KAAK,IAAI,KAAK5U,GAAL,CAASvD,CAAT,EAAYA,CAAZ,CAAT;EACD;;EACD,WAAOmY,KAAP;EACD;;EAEDrJ,EAAAA,KAAK,GAAG;EACN,QAAIpH,SAAS,GAAG,IAAIL,MAAJ,CAAW,KAAKhG,IAAhB,EAAsB,KAAKE,OAA3B,CAAhB;;EACA,SAAK,IAAIQ,GAAG,GAAG,CAAf,EAAkBA,GAAG,GAAG,KAAKV,IAA7B,EAAmCU,GAAG,EAAtC,EAA0C;EACxC,WAAK,IAAIE,MAAM,GAAG,CAAlB,EAAqBA,MAAM,GAAG,KAAKV,OAAnC,EAA4CU,MAAM,EAAlD,EAAsD;EACpDyF,QAAAA,SAAS,CAAChD,GAAV,CAAc3C,GAAd,EAAmBE,MAAnB,EAA2B,KAAKsB,GAAL,CAASxB,GAAT,EAAcE,MAAd,CAA3B;EACD;EACF;;EACD,WAAOyF,SAAP;EACD;;EAEDrE,EAAAA,GAAG,CAAC+U,EAAD,EAAK;EACN,YAAQA,EAAR;EACE,WAAK,KAAL;EACE,eAAOhV,QAAQ,CAAC,IAAD,CAAf;;EACF,WAAK,QAAL;EACE,eAAOI,WAAW,CAAC,IAAD,CAAlB;;EACF,WAAKnD,SAAL;EACE,eAAOoD,MAAM,CAAC,IAAD,CAAb;;EACF;EACE,cAAM,IAAIgM,KAAJ,2BAA6B2I,EAA7B,EAAN;EARJ;EAUD;;EAEDC,EAAAA,OAAO,CAACD,EAAD,EAAK;EACV,YAAQA,EAAR;EACE,WAAK,KAAL;EACE,eAAOzU,YAAY,CAAC,IAAD,CAAnB;;EACF,WAAK,QAAL;EACE,eAAOC,eAAe,CAAC,IAAD,CAAtB;;EACF,WAAKvD,SAAL;EACE,eAAOwD,UAAU,CAAC,IAAD,CAAjB;;EACF;EACE,cAAM,IAAI4L,KAAJ,2BAA6B2I,EAA7B,EAAN;EARJ;EAUD;;EAEDpU,EAAAA,IAAI,CAACoU,EAAD,EAAK;EACP,UAAM/U,GAAG,GAAG,KAAKA,GAAL,CAAS+U,EAAT,CAAZ;;EACA,YAAQA,EAAR;EACE,WAAK,KAAL;EAAY;EACV,eAAK,IAAIpY,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKqB,IAAzB,EAA+BrB,CAAC,EAAhC,EAAoC;EAClCqD,YAAAA,GAAG,CAACrD,CAAD,CAAH,IAAU,KAAKuB,OAAf;EACD;;EACD,iBAAO8B,GAAP;EACD;;EACD,WAAK,QAAL;EAAe;EACb,eAAK,IAAIrD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKuB,OAAzB,EAAkCvB,CAAC,EAAnC,EAAuC;EACrCqD,YAAAA,GAAG,CAACrD,CAAD,CAAH,IAAU,KAAKqB,IAAf;EACD;;EACD,iBAAOgC,GAAP;EACD;;EACD,WAAKhD,SAAL;EACE,eAAOgD,GAAG,GAAG,KAAKmB,IAAlB;;EACF;EACE,cAAM,IAAIiL,KAAJ,2BAA6B2I,EAA7B,EAAN;EAhBJ;EAkBD;;EAEDlU,EAAAA,QAAQ,CAACkU,EAAD,EAAmB;EAAA,QAAdjY,OAAc,uEAAJ,EAAI;;EACzB,QAAI,OAAOiY,EAAP,KAAc,QAAlB,EAA4B;EAC1BjY,MAAAA,OAAO,GAAGiY,EAAV;EACAA,MAAAA,EAAE,GAAG/X,SAAL;EACD;;EACD,QAAI,OAAOF,OAAP,KAAmB,QAAvB,EAAiC;EAC/B,YAAM,IAAIL,SAAJ,CAAc,2BAAd,CAAN;EACD;;EACD,UAAM;EAAEiE,MAAAA,QAAQ,GAAG,IAAb;EAAmBC,MAAAA,IAAI,GAAG,KAAKA,IAAL,CAAUoU,EAAV;EAA1B,QAA4CjY,OAAlD;;EACA,QAAI,OAAO4D,QAAP,KAAoB,SAAxB,EAAmC;EACjC,YAAM,IAAIjE,SAAJ,CAAc,4BAAd,CAAN;EACD;;EACD,YAAQsY,EAAR;EACE,WAAK,KAAL;EAAY;EACV,cAAI,CAAC7X,KAAK,CAACV,OAAN,CAAcmE,IAAd,CAAL,EAA0B;EACxB,kBAAM,IAAIlE,SAAJ,CAAc,uBAAd,CAAN;EACD;;EACD,iBAAOgE,aAAa,CAAC,IAAD,EAAOC,QAAP,EAAiBC,IAAjB,CAApB;EACD;;EACD,WAAK,QAAL;EAAe;EACb,cAAI,CAACzD,KAAK,CAACV,OAAN,CAAcmE,IAAd,CAAL,EAA0B;EACxB,kBAAM,IAAIlE,SAAJ,CAAc,uBAAd,CAAN;EACD;;EACD,iBAAOwE,gBAAgB,CAAC,IAAD,EAAOP,QAAP,EAAiBC,IAAjB,CAAvB;EACD;;EACD,WAAK3D,SAAL;EAAgB;EACd,cAAI,OAAO2D,IAAP,KAAgB,QAApB,EAA8B;EAC5B,kBAAM,IAAIlE,SAAJ,CAAc,uBAAd,CAAN;EACD;;EACD,iBAAOyE,WAAW,CAAC,IAAD,EAAOR,QAAP,EAAiBC,IAAjB,CAAlB;EACD;;EACD;EACE,cAAM,IAAIyL,KAAJ,2BAA6B2I,EAA7B,EAAN;EApBJ;EAsBD;;EAEDE,EAAAA,iBAAiB,CAACF,EAAD,EAAKjY,OAAL,EAAc;EAC7B,QAAI,OAAOiY,EAAP,KAAc,QAAlB,EAA4B;EAC1BjY,MAAAA,OAAO,GAAGiY,EAAV;EACAA,MAAAA,EAAE,GAAG/X,SAAL;EACD;;EACD,UAAM6D,QAAQ,GAAG,KAAKA,QAAL,CAAckU,EAAd,EAAkBjY,OAAlB,CAAjB;;EACA,QAAIiY,EAAE,KAAK/X,SAAX,EAAsB;EACpB,aAAO0E,IAAI,CAACE,IAAL,CAAUf,QAAV,CAAP;EACD,KAFD,MAEO;EACL,WAAK,IAAIlE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGkE,QAAQ,CAACnE,MAA7B,EAAqCC,CAAC,EAAtC,EAA0C;EACxCkE,QAAAA,QAAQ,CAAClE,CAAD,CAAR,GAAc+E,IAAI,CAACE,IAAL,CAAUf,QAAQ,CAAClE,CAAD,CAAlB,CAAd;EACD;;EACD,aAAOkE,QAAP;EACD;EACF;;EAEDqU,EAAAA,MAAM,CAACH,EAAD,EAAmB;EAAA,QAAdjY,OAAc,uEAAJ,EAAI;;EACvB,QAAI,OAAOiY,EAAP,KAAc,QAAlB,EAA4B;EAC1BjY,MAAAA,OAAO,GAAGiY,EAAV;EACAA,MAAAA,EAAE,GAAG/X,SAAL;EACD;;EACD,QAAI,OAAOF,OAAP,KAAmB,QAAvB,EAAiC;EAC/B,YAAM,IAAIL,SAAJ,CAAc,2BAAd,CAAN;EACD;;EACD,UAAM;EAAEyY,MAAAA,MAAM,GAAG,KAAKvU,IAAL,CAAUoU,EAAV;EAAX,QAA6BjY,OAAnC;;EACA,YAAQiY,EAAR;EACE,WAAK,KAAL;EAAY;EACV,cAAI,CAAC7X,KAAK,CAACV,OAAN,CAAc0Y,MAAd,CAAL,EAA4B;EAC1B,kBAAM,IAAIzY,SAAJ,CAAc,yBAAd,CAAN;EACD;;EACD2E,UAAAA,WAAW,CAAC,IAAD,EAAO8T,MAAP,CAAX;EACA,iBAAO,IAAP;EACD;;EACD,WAAK,QAAL;EAAe;EACb,cAAI,CAAChY,KAAK,CAACV,OAAN,CAAc0Y,MAAd,CAAL,EAA4B;EAC1B,kBAAM,IAAIzY,SAAJ,CAAc,yBAAd,CAAN;EACD;;EACD6E,UAAAA,cAAc,CAAC,IAAD,EAAO4T,MAAP,CAAd;EACA,iBAAO,IAAP;EACD;;EAAC,WAAKlY,SAAL;EAAgB;EAChB,cAAI,OAAOkY,MAAP,KAAkB,QAAtB,EAAgC;EAC9B,kBAAM,IAAIzY,SAAJ,CAAc,yBAAd,CAAN;EACD;;EACD8E,UAAAA,SAAS,CAAC,IAAD,EAAO2T,MAAP,CAAT;EACA,iBAAO,IAAP;EACD;;EACD;EACE,cAAM,IAAI9I,KAAJ,2BAA6B2I,EAA7B,EAAN;EAtBJ;EAwBD;;EAEDtT,EAAAA,KAAK,CAACsT,EAAD,EAAmB;EAAA,QAAdjY,OAAc,uEAAJ,EAAI;;EACtB,QAAI,OAAOiY,EAAP,KAAc,QAAlB,EAA4B;EAC1BjY,MAAAA,OAAO,GAAGiY,EAAV;EACAA,MAAAA,EAAE,GAAG/X,SAAL;EACD;;EACD,QAAI,OAAOF,OAAP,KAAmB,QAAvB,EAAiC;EAC/B,YAAM,IAAIL,SAAJ,CAAc,2BAAd,CAAN;EACD;;EACD,QAAIgF,KAAK,GAAG3E,OAAO,CAAC2E,KAApB;;EACA,YAAQsT,EAAR;EACE,WAAK,KAAL;EAAY;EACV,cAAItT,KAAK,KAAKzE,SAAd,EAAyB;EACvByE,YAAAA,KAAK,GAAGD,aAAa,CAAC,IAAD,CAArB;EACD,WAFD,MAEO,IAAI,CAACtE,KAAK,CAACV,OAAN,CAAciF,KAAd,CAAL,EAA2B;EAChC,kBAAM,IAAIhF,SAAJ,CAAc,wBAAd,CAAN;EACD;;EACDoF,UAAAA,UAAU,CAAC,IAAD,EAAOJ,KAAP,CAAV;EACA,iBAAO,IAAP;EACD;;EACD,WAAK,QAAL;EAAe;EACb,cAAIA,KAAK,KAAKzE,SAAd,EAAyB;EACvByE,YAAAA,KAAK,GAAGK,gBAAgB,CAAC,IAAD,CAAxB;EACD,WAFD,MAEO,IAAI,CAAC5E,KAAK,CAACV,OAAN,CAAciF,KAAd,CAAL,EAA2B;EAChC,kBAAM,IAAIhF,SAAJ,CAAc,wBAAd,CAAN;EACD;;EACDsF,UAAAA,aAAa,CAAC,IAAD,EAAON,KAAP,CAAb;EACA,iBAAO,IAAP;EACD;;EACD,WAAKzE,SAAL;EAAgB;EACd,cAAIyE,KAAK,KAAKzE,SAAd,EAAyB;EACvByE,YAAAA,KAAK,GAAGO,WAAW,CAAC,IAAD,CAAnB;EACD,WAFD,MAEO,IAAI,OAAOP,KAAP,KAAiB,QAArB,EAA+B;EACpC,kBAAM,IAAIhF,SAAJ,CAAc,wBAAd,CAAN;EACD;;EACDyF,UAAAA,QAAQ,CAAC,IAAD,EAAOT,KAAP,CAAR;EACA,iBAAO,IAAP;EACD;;EACD;EACE,cAAM,IAAI2K,KAAJ,2BAA6B2I,EAA7B,EAAN;EA7BJ;EA+BD;;EAn1CyB;EAs1C5BhR,cAAc,CAAC9H,SAAf,CAAyBuO,KAAzB,GAAiC,QAAjC;;EACA,IAAI,OAAO2K,MAAP,KAAkB,WAAtB,EAAmC;EACjCpR,EAAAA,cAAc,CAAC9H,SAAf,CACEkZ,MAAM,CAACC,GAAP,CAAW,4BAAX,CADF,IAEIjT,aAFJ;EAGD;;EAED,SAASkS,cAAT,CAAwBnB,CAAxB,EAA2BC,CAA3B,EAA8B;EAC5B,SAAOD,CAAC,GAAGC,CAAX;EACD;;;EAGDpP,cAAc,CAAC6F,MAAf,GAAwB7F,cAAc,CAAC4F,IAAvC;EACA5F,cAAc,CAACsR,SAAf,GAA2BtR,cAAc,CAAC8F,OAA1C;EACA9F,cAAc,CAACuR,QAAf,GAA0BvR,cAAc,CAACmG,IAAzC;EACAnG,cAAc,CAAC9H,SAAf,CAAyBqZ,QAAzB,GAAoCvR,cAAc,CAAC9H,SAAf,CAAyBiO,IAA7D;EACAnG,cAAc,CAACwR,QAAf,GAA0BxR,cAAc,CAACkG,GAAzC;EACAlG,cAAc,CAAC9H,SAAf,CAAyBuZ,MAAzB,GAAkCzR,cAAc,CAAC9H,SAAf,CAAyBqQ,GAA3D;EACAvI,cAAc,CAAC9H,SAAf,CAAyBwZ,aAAzB,GACE1R,cAAc,CAAC9H,SAAf,CAAyB+X,gBAD3B;AAGA,EAAe,MAAMhQ,MAAN,SAAqBD,cAArB,CAAoC;EACjDxB,EAAAA,WAAW,CAACmT,KAAD,EAAQC,QAAR,EAAkB;EAC3B;;EACA,QAAI3R,MAAM,CAACuG,QAAP,CAAgBmL,KAAhB,CAAJ,EAA4B;EAC1B,aAAOA,KAAK,CAACjK,KAAN,EAAP;EACD,KAFD,MAEO,IAAI3B,MAAM,CAACC,SAAP,CAAiB2L,KAAjB,KAA2BA,KAAK,GAAG,CAAvC,EAA0C;EAC/C;EACA,WAAKvL,IAAL,GAAY,EAAZ;;EACA,UAAIL,MAAM,CAACC,SAAP,CAAiB4L,QAAjB,KAA8BA,QAAQ,GAAG,CAA7C,EAAgD;EAC9C,aAAK,IAAIhZ,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG+Y,KAApB,EAA2B/Y,CAAC,EAA5B,EAAgC;EAC9B,eAAKwN,IAAL,CAAUtK,IAAV,CAAe,IAAImP,YAAJ,CAAiB2G,QAAjB,CAAf;EACD;EACF,OAJD,MAIO;EACL,cAAM,IAAIlZ,SAAJ,CAAc,qCAAd,CAAN;EACD;EACF,KAVM,MAUA,IAAIS,KAAK,CAACV,OAAN,CAAckZ,KAAd,CAAJ,EAA0B;EAC/B;EACA,YAAME,SAAS,GAAGF,KAAlB;EACAA,MAAAA,KAAK,GAAGE,SAAS,CAAClZ,MAAlB;EACAiZ,MAAAA,QAAQ,GAAGC,SAAS,CAAC,CAAD,CAAT,CAAalZ,MAAxB;;EACA,UAAI,OAAOiZ,QAAP,KAAoB,QAApB,IAAgCA,QAAQ,KAAK,CAAjD,EAAoD;EAClD,cAAM,IAAIlZ,SAAJ,CACJ,mDADI,CAAN;EAGD;;EACD,WAAK0N,IAAL,GAAY,EAAZ;;EACA,WAAK,IAAIxN,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG+Y,KAApB,EAA2B/Y,CAAC,EAA5B,EAAgC;EAC9B,YAAIiZ,SAAS,CAACjZ,CAAD,CAAT,CAAaD,MAAb,KAAwBiZ,QAA5B,EAAsC;EACpC,gBAAM,IAAItY,UAAJ,CAAe,+BAAf,CAAN;EACD;;EACD,aAAK8M,IAAL,CAAUtK,IAAV,CAAemP,YAAY,CAAC/P,IAAb,CAAkB2W,SAAS,CAACjZ,CAAD,CAA3B,CAAf;EACD;EACF,KAjBM,MAiBA;EACL,YAAM,IAAIF,SAAJ,CACJ,sDADI,CAAN;EAGD;;EACD,SAAKuB,IAAL,GAAY0X,KAAZ;EACA,SAAKxX,OAAL,GAAeyX,QAAf;EACA,WAAO,IAAP;EACD;;EAEDtU,EAAAA,GAAG,CAACuT,QAAD,EAAWC,WAAX,EAAwBlV,KAAxB,EAA+B;EAChC,SAAKwK,IAAL,CAAUyK,QAAV,EAAoBC,WAApB,IAAmClV,KAAnC;EACA,WAAO,IAAP;EACD;;EAEDO,EAAAA,GAAG,CAAC0U,QAAD,EAAWC,WAAX,EAAwB;EACzB,WAAO,KAAK1K,IAAL,CAAUyK,QAAV,EAAoBC,WAApB,CAAP;EACD;;EAEDgB,EAAAA,SAAS,CAAC/X,KAAD,EAAQ;EACfF,IAAAA,aAAa,CAAC,IAAD,EAAOE,KAAP,CAAb;;EACA,QAAI,KAAKE,IAAL,KAAc,CAAlB,EAAqB;EACnB,YAAM,IAAIX,UAAJ,CAAe,wCAAf,CAAN;EACD;;EACD,SAAK8M,IAAL,CAAU2L,MAAV,CAAiBhY,KAAjB,EAAwB,CAAxB;EACA,SAAKE,IAAL,IAAa,CAAb;EACA,WAAO,IAAP;EACD;;EAED+X,EAAAA,MAAM,CAACjY,KAAD,EAAQ8B,KAAR,EAAe;EACnB,QAAIA,KAAK,KAAK5C,SAAd,EAAyB;EACvB4C,MAAAA,KAAK,GAAG9B,KAAR;EACAA,MAAAA,KAAK,GAAG,KAAKE,IAAb;EACD;;EACDJ,IAAAA,aAAa,CAAC,IAAD,EAAOE,KAAP,EAAc,IAAd,CAAb;EACA8B,IAAAA,KAAK,GAAGoP,YAAY,CAAC/P,IAAb,CAAkBd,cAAc,CAAC,IAAD,EAAOyB,KAAP,AAAA,CAAhC,CAAR;EACA,SAAKuK,IAAL,CAAU2L,MAAV,CAAiBhY,KAAjB,EAAwB,CAAxB,EAA2B8B,KAA3B;EACA,SAAK5B,IAAL,IAAa,CAAb;EACA,WAAO,IAAP;EACD;;EAEDgY,EAAAA,YAAY,CAAClY,KAAD,EAAQ;EAClBG,IAAAA,gBAAgB,CAAC,IAAD,EAAOH,KAAP,CAAhB;;EACA,QAAI,KAAKI,OAAL,KAAiB,CAArB,EAAwB;EACtB,YAAM,IAAIb,UAAJ,CAAe,2CAAf,CAAN;EACD;;EACD,SAAK,IAAIV,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKqB,IAAzB,EAA+BrB,CAAC,EAAhC,EAAoC;EAClC,YAAMsZ,MAAM,GAAG,IAAIjH,YAAJ,CAAiB,KAAK9Q,OAAL,GAAe,CAAhC,CAAf;;EACA,WAAK,IAAI+B,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGnC,KAApB,EAA2BmC,CAAC,EAA5B,EAAgC;EAC9BgW,QAAAA,MAAM,CAAChW,CAAD,CAAN,GAAY,KAAKkK,IAAL,CAAUxN,CAAV,EAAasD,CAAb,CAAZ;EACD;;EACD,WAAK,IAAIA,CAAC,GAAGnC,KAAK,GAAG,CAArB,EAAwBmC,CAAC,GAAG,KAAK/B,OAAjC,EAA0C+B,CAAC,EAA3C,EAA+C;EAC7CgW,QAAAA,MAAM,CAAChW,CAAC,GAAG,CAAL,CAAN,GAAgB,KAAKkK,IAAL,CAAUxN,CAAV,EAAasD,CAAb,CAAhB;EACD;;EACD,WAAKkK,IAAL,CAAUxN,CAAV,IAAesZ,MAAf;EACD;;EACD,SAAK/X,OAAL,IAAgB,CAAhB;EACA,WAAO,IAAP;EACD;;EAEDgY,EAAAA,SAAS,CAACpY,KAAD,EAAQ8B,KAAR,EAAe;EACtB,QAAI,OAAOA,KAAP,KAAiB,WAArB,EAAkC;EAChCA,MAAAA,KAAK,GAAG9B,KAAR;EACAA,MAAAA,KAAK,GAAG,KAAKI,OAAb;EACD;;EACDD,IAAAA,gBAAgB,CAAC,IAAD,EAAOH,KAAP,EAAc,IAAd,CAAhB;EACA8B,IAAAA,KAAK,GAAGtB,iBAAiB,CAAC,IAAD,EAAOsB,KAAP,CAAzB;;EACA,SAAK,IAAIjD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKqB,IAAzB,EAA+BrB,CAAC,EAAhC,EAAoC;EAClC,YAAMsZ,MAAM,GAAG,IAAIjH,YAAJ,CAAiB,KAAK9Q,OAAL,GAAe,CAAhC,CAAf;EACA,UAAI+B,CAAC,GAAG,CAAR;;EACA,aAAOA,CAAC,GAAGnC,KAAX,EAAkBmC,CAAC,EAAnB,EAAuB;EACrBgW,QAAAA,MAAM,CAAChW,CAAD,CAAN,GAAY,KAAKkK,IAAL,CAAUxN,CAAV,EAAasD,CAAb,CAAZ;EACD;;EACDgW,MAAAA,MAAM,CAAChW,CAAC,EAAF,CAAN,GAAcL,KAAK,CAACjD,CAAD,CAAnB;;EACA,aAAOsD,CAAC,GAAG,KAAK/B,OAAL,GAAe,CAA1B,EAA6B+B,CAAC,EAA9B,EAAkC;EAChCgW,QAAAA,MAAM,CAAChW,CAAD,CAAN,GAAY,KAAKkK,IAAL,CAAUxN,CAAV,EAAasD,CAAC,GAAG,CAAjB,CAAZ;EACD;;EACD,WAAKkK,IAAL,CAAUxN,CAAV,IAAesZ,MAAf;EACD;;EACD,SAAK/X,OAAL,IAAgB,CAAhB;EACA,WAAO,IAAP;EACD;;EAjHgD;EAoHnD4F,qBAAqB,CAACC,cAAD,EAAiBC,MAAjB,CAArB;;EC9/Ce,MAAMmS,QAAN,SAAuBpS,cAAvB,CAAsC;EACnDxB,EAAAA,WAAW,CAAC1E,MAAD,EAASG,IAAT,EAAeE,OAAf,EAAwB;EACjC;EACA,SAAKL,MAAL,GAAcA,MAAd;EACA,SAAKG,IAAL,GAAYA,IAAZ;EACA,SAAKE,OAAL,GAAeA,OAAf;EACD;;EANkD;;ECEtC,MAAMkY,gBAAN,SAA+BD,QAA/B,CAAwC;EACrD5T,EAAAA,WAAW,CAAC1E,MAAD,EAASe,MAAT,EAAiB;EAC1BX,IAAAA,gBAAgB,CAACJ,MAAD,EAASe,MAAT,CAAhB;EACA,UAAMf,MAAN,EAAcA,MAAM,CAACG,IAArB,EAA2B,CAA3B;EACA,SAAKY,MAAL,GAAcA,MAAd;EACD;;EAEDyC,EAAAA,GAAG,CAACuT,QAAD,EAAWC,WAAX,EAAwBlV,KAAxB,EAA+B;EAChC,SAAK9B,MAAL,CAAYwD,GAAZ,CAAgBuT,QAAhB,EAA0B,KAAKhW,MAA/B,EAAuCe,KAAvC;EACA,WAAO,IAAP;EACD;;EAEDO,EAAAA,GAAG,CAAC0U,QAAD,EAAW;EACZ,WAAO,KAAK/W,MAAL,CAAYqC,GAAZ,CAAgB0U,QAAhB,EAA0B,KAAKhW,MAA/B,CAAP;EACD;;EAdoD;;ECAxC,MAAMyX,yBAAN,SAAwCF,QAAxC,CAAiD;EAC9D5T,EAAAA,WAAW,CAAC1E,MAAD,EAASY,aAAT,EAAwB;EACjCA,IAAAA,aAAa,GAAGI,kBAAkB,CAAChB,MAAD,EAASY,aAAT,CAAlC;EACA,UAAMZ,MAAN,EAAcA,MAAM,CAACG,IAArB,EAA2BS,aAAa,CAAC/B,MAAzC;EACA,SAAK+B,aAAL,GAAqBA,aAArB;EACD;;EAED4C,EAAAA,GAAG,CAACuT,QAAD,EAAWC,WAAX,EAAwBlV,KAAxB,EAA+B;EAChC,SAAK9B,MAAL,CAAYwD,GAAZ,CAAgBuT,QAAhB,EAA0B,KAAKnW,aAAL,CAAmBoW,WAAnB,CAA1B,EAA2DlV,KAA3D;EACA,WAAO,IAAP;EACD;;EAEDO,EAAAA,GAAG,CAAC0U,QAAD,EAAWC,WAAX,EAAwB;EACzB,WAAO,KAAKhX,MAAL,CAAYqC,GAAZ,CAAgB0U,QAAhB,EAA0B,KAAKnW,aAAL,CAAmBoW,WAAnB,CAA1B,CAAP;EACD;;EAd6D;;ECFjD,MAAMyB,oBAAN,SAAmCH,QAAnC,CAA4C;EACzD5T,EAAAA,WAAW,CAAC1E,MAAD,EAAS;EAClB,UAAMA,MAAN,EAAcA,MAAM,CAACG,IAArB,EAA2BH,MAAM,CAACK,OAAlC;EACD;;EAEDmD,EAAAA,GAAG,CAACuT,QAAD,EAAWC,WAAX,EAAwBlV,KAAxB,EAA+B;EAChC,SAAK9B,MAAL,CAAYwD,GAAZ,CAAgBuT,QAAhB,EAA0B,KAAK1W,OAAL,GAAe2W,WAAf,GAA6B,CAAvD,EAA0DlV,KAA1D;EACA,WAAO,IAAP;EACD;;EAEDO,EAAAA,GAAG,CAAC0U,QAAD,EAAWC,WAAX,EAAwB;EACzB,WAAO,KAAKhX,MAAL,CAAYqC,GAAZ,CAAgB0U,QAAhB,EAA0B,KAAK1W,OAAL,GAAe2W,WAAf,GAA6B,CAAvD,CAAP;EACD;;EAZwD;;ECA5C,MAAM0B,iBAAN,SAAgCJ,QAAhC,CAAyC;EACtD5T,EAAAA,WAAW,CAAC1E,MAAD,EAAS;EAClB,UAAMA,MAAN,EAAcA,MAAM,CAACG,IAArB,EAA2BH,MAAM,CAACK,OAAlC;EACD;;EAEDmD,EAAAA,GAAG,CAACuT,QAAD,EAAWC,WAAX,EAAwBlV,KAAxB,EAA+B;EAChC,SAAK9B,MAAL,CAAYwD,GAAZ,CAAgB,KAAKrD,IAAL,GAAY4W,QAAZ,GAAuB,CAAvC,EAA0CC,WAA1C,EAAuDlV,KAAvD;EACA,WAAO,IAAP;EACD;;EAEDO,EAAAA,GAAG,CAAC0U,QAAD,EAAWC,WAAX,EAAwB;EACzB,WAAO,KAAKhX,MAAL,CAAYqC,GAAZ,CAAgB,KAAKlC,IAAL,GAAY4W,QAAZ,GAAuB,CAAvC,EAA0CC,WAA1C,CAAP;EACD;;EAZqD;;ECEzC,MAAM2B,aAAN,SAA4BL,QAA5B,CAAqC;EAClD5T,EAAAA,WAAW,CAAC1E,MAAD,EAASa,GAAT,EAAc;EACvBd,IAAAA,aAAa,CAACC,MAAD,EAASa,GAAT,CAAb;EACA,UAAMb,MAAN,EAAc,CAAd,EAAiBA,MAAM,CAACK,OAAxB;EACA,SAAKQ,GAAL,GAAWA,GAAX;EACD;;EAED2C,EAAAA,GAAG,CAACuT,QAAD,EAAWC,WAAX,EAAwBlV,KAAxB,EAA+B;EAChC,SAAK9B,MAAL,CAAYwD,GAAZ,CAAgB,KAAK3C,GAArB,EAA0BmW,WAA1B,EAAuClV,KAAvC;EACA,WAAO,IAAP;EACD;;EAEDO,EAAAA,GAAG,CAAC0U,QAAD,EAAWC,WAAX,EAAwB;EACzB,WAAO,KAAKhX,MAAL,CAAYqC,GAAZ,CAAgB,KAAKxB,GAArB,EAA0BmW,WAA1B,CAAP;EACD;;EAdiD;;ECArC,MAAM4B,sBAAN,SAAqCN,QAArC,CAA8C;EAC3D5T,EAAAA,WAAW,CAAC1E,MAAD,EAASW,UAAT,EAAqB;EAC9BA,IAAAA,UAAU,GAAGG,eAAe,CAACd,MAAD,EAASW,UAAT,CAA5B;EACA,UAAMX,MAAN,EAAcW,UAAU,CAAC9B,MAAzB,EAAiCmB,MAAM,CAACK,OAAxC;EACA,SAAKM,UAAL,GAAkBA,UAAlB;EACD;;EAED6C,EAAAA,GAAG,CAACuT,QAAD,EAAWC,WAAX,EAAwBlV,KAAxB,EAA+B;EAChC,SAAK9B,MAAL,CAAYwD,GAAZ,CAAgB,KAAK7C,UAAL,CAAgBoW,QAAhB,CAAhB,EAA2CC,WAA3C,EAAwDlV,KAAxD;EACA,WAAO,IAAP;EACD;;EAEDO,EAAAA,GAAG,CAAC0U,QAAD,EAAWC,WAAX,EAAwB;EACzB,WAAO,KAAKhX,MAAL,CAAYqC,GAAZ,CAAgB,KAAK1B,UAAL,CAAgBoW,QAAhB,CAAhB,EAA2CC,WAA3C,CAAP;EACD;;EAd0D;;ECA9C,MAAM6B,mBAAN,SAAkCP,QAAlC,CAA2C;EACxD5T,EAAAA,WAAW,CAAC1E,MAAD,EAASW,UAAT,EAAqBC,aAArB,EAAoC;EAC7C,QAAIgW,OAAO,GAAGlW,YAAY,CAACV,MAAD,EAASW,UAAT,EAAqBC,aAArB,CAA1B;EACA,UAAMZ,MAAN,EAAc4W,OAAO,CAAC/V,GAAR,CAAYhC,MAA1B,EAAkC+X,OAAO,CAAC7V,MAAR,CAAelC,MAAjD;EACA,SAAK8B,UAAL,GAAkBiW,OAAO,CAAC/V,GAA1B;EACA,SAAKD,aAAL,GAAqBgW,OAAO,CAAC7V,MAA7B;EACD;;EAEDyC,EAAAA,GAAG,CAACuT,QAAD,EAAWC,WAAX,EAAwBlV,KAAxB,EAA+B;EAChC,SAAK9B,MAAL,CAAYwD,GAAZ,CACE,KAAK7C,UAAL,CAAgBoW,QAAhB,CADF,EAEE,KAAKnW,aAAL,CAAmBoW,WAAnB,CAFF,EAGElV,KAHF;EAKA,WAAO,IAAP;EACD;;EAEDO,EAAAA,GAAG,CAAC0U,QAAD,EAAWC,WAAX,EAAwB;EACzB,WAAO,KAAKhX,MAAL,CAAYqC,GAAZ,CACL,KAAK1B,UAAL,CAAgBoW,QAAhB,CADK,EAEL,KAAKnW,aAAL,CAAmBoW,WAAnB,CAFK,CAAP;EAID;;EAtBuD;;ECA3C,MAAM8B,aAAN,SAA4BR,QAA5B,CAAqC;EAClD5T,EAAAA,WAAW,CAAC1E,MAAD,EAASwB,QAAT,EAAmBC,MAAnB,EAA2BC,WAA3B,EAAwCC,SAAxC,EAAmD;EAC5DJ,IAAAA,UAAU,CAACvB,MAAD,EAASwB,QAAT,EAAmBC,MAAnB,EAA2BC,WAA3B,EAAwCC,SAAxC,CAAV;EACA,UAAM3B,MAAN,EAAcyB,MAAM,GAAGD,QAAT,GAAoB,CAAlC,EAAqCG,SAAS,GAAGD,WAAZ,GAA0B,CAA/D;EACA,SAAKF,QAAL,GAAgBA,QAAhB;EACA,SAAKE,WAAL,GAAmBA,WAAnB;EACD;;EAED8B,EAAAA,GAAG,CAACuT,QAAD,EAAWC,WAAX,EAAwBlV,KAAxB,EAA+B;EAChC,SAAK9B,MAAL,CAAYwD,GAAZ,CACE,KAAKhC,QAAL,GAAgBuV,QADlB,EAEE,KAAKrV,WAAL,GAAmBsV,WAFrB,EAGElV,KAHF;EAKA,WAAO,IAAP;EACD;;EAEDO,EAAAA,GAAG,CAAC0U,QAAD,EAAWC,WAAX,EAAwB;EACzB,WAAO,KAAKhX,MAAL,CAAYqC,GAAZ,CACL,KAAKb,QAAL,GAAgBuV,QADX,EAEL,KAAKrV,WAAL,GAAmBsV,WAFd,CAAP;EAID;;EAtBiD;;ECFrC,MAAM+B,mBAAN,SAAkCT,QAAlC,CAA2C;EACxD5T,EAAAA,WAAW,CAAC1E,MAAD,EAAS;EAClB,UAAMA,MAAN,EAAcA,MAAM,CAACK,OAArB,EAA8BL,MAAM,CAACG,IAArC;EACD;;EAEDqD,EAAAA,GAAG,CAACuT,QAAD,EAAWC,WAAX,EAAwBlV,KAAxB,EAA+B;EAChC,SAAK9B,MAAL,CAAYwD,GAAZ,CAAgBwT,WAAhB,EAA6BD,QAA7B,EAAuCjV,KAAvC;EACA,WAAO,IAAP;EACD;;EAEDO,EAAAA,GAAG,CAAC0U,QAAD,EAAWC,WAAX,EAAwB;EACzB,WAAO,KAAKhX,MAAL,CAAYqC,GAAZ,CAAgB2U,WAAhB,EAA6BD,QAA7B,CAAP;EACD;;EAZuD;;ECA3C,MAAMiC,eAAN,SAA8B9S,cAA9B,CAA6C;EAC1DxB,EAAAA,WAAW,CAAC4H,IAAD,EAAqB;EAAA,QAAdrN,OAAc,uEAAJ,EAAI;EAC9B,UAAM;EAAEkB,MAAAA,IAAI,GAAG;EAAT,QAAelB,OAArB;;EAEA,QAAIqN,IAAI,CAACzN,MAAL,GAAcsB,IAAd,KAAuB,CAA3B,EAA8B;EAC5B,YAAM,IAAIoO,KAAJ,CAAU,wDAAV,CAAN;EACD;;EACD;EACA,SAAKpO,IAAL,GAAYA,IAAZ;EACA,SAAKE,OAAL,GAAeiM,IAAI,CAACzN,MAAL,GAAcsB,IAA7B;EACA,SAAKmM,IAAL,GAAYA,IAAZ;EACD;;EAED9I,EAAAA,GAAG,CAACuT,QAAD,EAAWC,WAAX,EAAwBlV,KAAxB,EAA+B;EAChC,QAAI7B,KAAK,GAAG,KAAKgZ,eAAL,CAAqBlC,QAArB,EAA+BC,WAA/B,CAAZ;;EACA,SAAK1K,IAAL,CAAUrM,KAAV,IAAmB6B,KAAnB;EACA,WAAO,IAAP;EACD;;EAEDO,EAAAA,GAAG,CAAC0U,QAAD,EAAWC,WAAX,EAAwB;EACzB,QAAI/W,KAAK,GAAG,KAAKgZ,eAAL,CAAqBlC,QAArB,EAA+BC,WAA/B,CAAZ;;EACA,WAAO,KAAK1K,IAAL,CAAUrM,KAAV,CAAP;EACD;;EAEDgZ,EAAAA,eAAe,CAACpY,GAAD,EAAME,MAAN,EAAc;EAC3B,WAAOF,GAAG,GAAG,KAAKR,OAAX,GAAqBU,MAA5B;EACD;;EA1ByD;;ECA7C,MAAMmY,eAAN,SAA8BhT,cAA9B,CAA6C;EAC1DxB,EAAAA,WAAW,CAAC4H,IAAD,EAAO;EAChB;EACA,SAAKA,IAAL,GAAYA,IAAZ;EACA,SAAKnM,IAAL,GAAYmM,IAAI,CAACzN,MAAjB;EACA,SAAKwB,OAAL,GAAeiM,IAAI,CAAC,CAAD,CAAJ,CAAQzN,MAAvB;EACD;;EAED2E,EAAAA,GAAG,CAACuT,QAAD,EAAWC,WAAX,EAAwBlV,KAAxB,EAA+B;EAChC,SAAKwK,IAAL,CAAUyK,QAAV,EAAoBC,WAApB,IAAmClV,KAAnC;EACA,WAAO,IAAP;EACD;;EAEDO,EAAAA,GAAG,CAAC0U,QAAD,EAAWC,WAAX,EAAwB;EACzB,WAAO,KAAK1K,IAAL,CAAUyK,QAAV,EAAoBC,WAApB,CAAP;EACD;;EAfyD;;ECCrD,SAASmC,IAAT,CAAcpX,KAAd,EAAqB9C,OAArB,EAA8B;EACnC,MAAII,KAAK,CAACV,OAAN,CAAcoD,KAAd,CAAJ,EAA0B;EACxB,QAAIA,KAAK,CAAC,CAAD,CAAL,IAAY1C,KAAK,CAACV,OAAN,CAAcoD,KAAK,CAAC,CAAD,CAAnB,CAAhB,EAAyC;EACvC,aAAO,IAAImX,eAAJ,CAAoBnX,KAApB,CAAP;EACD,KAFD,MAEO;EACL,aAAO,IAAIiX,eAAJ,CAAoBjX,KAApB,EAA2B9C,OAA3B,CAAP;EACD;EACF,GAND,MAMO;EACL,UAAM,IAAIsP,KAAJ,CAAU,8BAAV,CAAN;EACD;EACF;;ECVc,MAAM6K,eAAN,CAAsB;EACnC1U,EAAAA,WAAW,CAAC1E,MAAD,EAAS;EAClBA,IAAAA,MAAM,GAAGkZ,eAAe,CAAC3S,WAAhB,CAA4BvG,MAA5B,CAAT;EAEA,QAAIqZ,EAAE,GAAGrZ,MAAM,CAAC4N,KAAP,EAAT;EACA,QAAIzN,IAAI,GAAGkZ,EAAE,CAAClZ,IAAd;EACA,QAAIE,OAAO,GAAGgZ,EAAE,CAAChZ,OAAjB;EACA,QAAIiZ,WAAW,GAAG,IAAInI,YAAJ,CAAiBhR,IAAjB,CAAlB;EACA,QAAIoZ,SAAS,GAAG,CAAhB;EACA,QAAIza,CAAJ,EAAOsD,CAAP,EAAUsL,CAAV,EAAaW,CAAb,EAAgB+C,CAAhB,EAAmBoI,CAAnB,EAAsBhX,CAAtB;EACA,QAAIiX,MAAJ,EAAYC,IAAZ;;EAEA,SAAK5a,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGqB,IAAhB,EAAsBrB,CAAC,EAAvB,EAA2B;EACzBwa,MAAAA,WAAW,CAACxa,CAAD,CAAX,GAAiBA,CAAjB;EACD;;EAED2a,IAAAA,MAAM,GAAG,IAAItI,YAAJ,CAAiBhR,IAAjB,CAAT;;EAEA,SAAKiC,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAG/B,OAAhB,EAAyB+B,CAAC,EAA1B,EAA8B;EAC5B,WAAKtD,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGqB,IAAhB,EAAsBrB,CAAC,EAAvB,EAA2B;EACzB2a,QAAAA,MAAM,CAAC3a,CAAD,CAAN,GAAYua,EAAE,CAAChX,GAAH,CAAOvD,CAAP,EAAUsD,CAAV,CAAZ;EACD;;EAED,WAAKtD,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGqB,IAAhB,EAAsBrB,CAAC,EAAvB,EAA2B;EACzB4a,QAAAA,IAAI,GAAG7V,IAAI,CAAC9E,GAAL,CAASD,CAAT,EAAYsD,CAAZ,CAAP;EACAgP,QAAAA,CAAC,GAAG,CAAJ;;EACA,aAAK1D,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGgM,IAAhB,EAAsBhM,CAAC,EAAvB,EAA2B;EACzB0D,UAAAA,CAAC,IAAIiI,EAAE,CAAChX,GAAH,CAAOvD,CAAP,EAAU4O,CAAV,IAAe+L,MAAM,CAAC/L,CAAD,CAA1B;EACD;;EACD+L,QAAAA,MAAM,CAAC3a,CAAD,CAAN,IAAasS,CAAb;EACAiI,QAAAA,EAAE,CAAC7V,GAAH,CAAO1E,CAAP,EAAUsD,CAAV,EAAaqX,MAAM,CAAC3a,CAAD,CAAnB;EACD;;EAEDuP,MAAAA,CAAC,GAAGjM,CAAJ;;EACA,WAAKtD,CAAC,GAAGsD,CAAC,GAAG,CAAb,EAAgBtD,CAAC,GAAGqB,IAApB,EAA0BrB,CAAC,EAA3B,EAA+B;EAC7B,YAAI+E,IAAI,CAAC0F,GAAL,CAASkQ,MAAM,CAAC3a,CAAD,CAAf,IAAsB+E,IAAI,CAAC0F,GAAL,CAASkQ,MAAM,CAACpL,CAAD,CAAf,CAA1B,EAA+C;EAC7CA,UAAAA,CAAC,GAAGvP,CAAJ;EACD;EACF;;EAED,UAAIuP,CAAC,KAAKjM,CAAV,EAAa;EACX,aAAKsL,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGrN,OAAhB,EAAyBqN,CAAC,EAA1B,EAA8B;EAC5B8L,UAAAA,CAAC,GAAGH,EAAE,CAAChX,GAAH,CAAOgM,CAAP,EAAUX,CAAV,CAAJ;EACA2L,UAAAA,EAAE,CAAC7V,GAAH,CAAO6K,CAAP,EAAUX,CAAV,EAAa2L,EAAE,CAAChX,GAAH,CAAOD,CAAP,EAAUsL,CAAV,CAAb;EACA2L,UAAAA,EAAE,CAAC7V,GAAH,CAAOpB,CAAP,EAAUsL,CAAV,EAAa8L,CAAb;EACD;;EAEDhX,QAAAA,CAAC,GAAG8W,WAAW,CAACjL,CAAD,CAAf;EACAiL,QAAAA,WAAW,CAACjL,CAAD,CAAX,GAAiBiL,WAAW,CAAClX,CAAD,CAA5B;EACAkX,QAAAA,WAAW,CAAClX,CAAD,CAAX,GAAiBI,CAAjB;EAEA+W,QAAAA,SAAS,GAAG,CAACA,SAAb;EACD;;EAED,UAAInX,CAAC,GAAGjC,IAAJ,IAAYkZ,EAAE,CAAChX,GAAH,CAAOD,CAAP,EAAUA,CAAV,MAAiB,CAAjC,EAAoC;EAClC,aAAKtD,CAAC,GAAGsD,CAAC,GAAG,CAAb,EAAgBtD,CAAC,GAAGqB,IAApB,EAA0BrB,CAAC,EAA3B,EAA+B;EAC7Bua,UAAAA,EAAE,CAAC7V,GAAH,CAAO1E,CAAP,EAAUsD,CAAV,EAAaiX,EAAE,CAAChX,GAAH,CAAOvD,CAAP,EAAUsD,CAAV,IAAeiX,EAAE,CAAChX,GAAH,CAAOD,CAAP,EAAUA,CAAV,CAA5B;EACD;EACF;EACF;;EAED,SAAKuX,EAAL,GAAUN,EAAV;EACA,SAAKC,WAAL,GAAmBA,WAAnB;EACA,SAAKC,SAAL,GAAiBA,SAAjB;EACD;;EAEDK,EAAAA,UAAU,GAAG;EACX,QAAItN,IAAI,GAAG,KAAKqN,EAAhB;EACA,QAAIE,GAAG,GAAGvN,IAAI,CAACjM,OAAf;;EACA,SAAK,IAAI+B,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGyX,GAApB,EAAyBzX,CAAC,EAA1B,EAA8B;EAC5B,UAAIkK,IAAI,CAACjK,GAAL,CAASD,CAAT,EAAYA,CAAZ,MAAmB,CAAvB,EAA0B;EACxB,eAAO,IAAP;EACD;EACF;;EACD,WAAO,KAAP;EACD;;EAED0X,EAAAA,KAAK,CAAChY,KAAD,EAAQ;EACXA,IAAAA,KAAK,GAAGqE,MAAM,CAACI,WAAP,CAAmBzE,KAAnB,CAAR;EAEA,QAAIuX,EAAE,GAAG,KAAKM,EAAd;EACA,QAAIxZ,IAAI,GAAGkZ,EAAE,CAAClZ,IAAd;;EAEA,QAAIA,IAAI,KAAK2B,KAAK,CAAC3B,IAAnB,EAAyB;EACvB,YAAM,IAAIoO,KAAJ,CAAU,2BAAV,CAAN;EACD;;EACD,QAAI,KAAKqL,UAAL,EAAJ,EAAuB;EACrB,YAAM,IAAIrL,KAAJ,CAAU,uBAAV,CAAN;EACD;;EAED,QAAIwL,KAAK,GAAGjY,KAAK,CAACzB,OAAlB;EACA,QAAI2Z,CAAC,GAAGlY,KAAK,CAAC6U,YAAN,CAAmB,KAAK2C,WAAxB,EAAqC,CAArC,EAAwCS,KAAK,GAAG,CAAhD,CAAR;EACA,QAAI1Z,OAAO,GAAGgZ,EAAE,CAAChZ,OAAjB;EACA,QAAIvB,CAAJ,EAAOsD,CAAP,EAAUsL,CAAV;;EAEA,SAAKA,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGrN,OAAhB,EAAyBqN,CAAC,EAA1B,EAA8B;EAC5B,WAAK5O,CAAC,GAAG4O,CAAC,GAAG,CAAb,EAAgB5O,CAAC,GAAGuB,OAApB,EAA6BvB,CAAC,EAA9B,EAAkC;EAChC,aAAKsD,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAG2X,KAAhB,EAAuB3X,CAAC,EAAxB,EAA4B;EAC1B4X,UAAAA,CAAC,CAACxW,GAAF,CAAM1E,CAAN,EAASsD,CAAT,EAAY4X,CAAC,CAAC3X,GAAF,CAAMvD,CAAN,EAASsD,CAAT,IAAc4X,CAAC,CAAC3X,GAAF,CAAMqL,CAAN,EAAStL,CAAT,IAAciX,EAAE,CAAChX,GAAH,CAAOvD,CAAP,EAAU4O,CAAV,CAAxC;EACD;EACF;EACF;;EACD,SAAKA,CAAC,GAAGrN,OAAO,GAAG,CAAnB,EAAsBqN,CAAC,IAAI,CAA3B,EAA8BA,CAAC,EAA/B,EAAmC;EACjC,WAAKtL,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAG2X,KAAhB,EAAuB3X,CAAC,EAAxB,EAA4B;EAC1B4X,QAAAA,CAAC,CAACxW,GAAF,CAAMkK,CAAN,EAAStL,CAAT,EAAY4X,CAAC,CAAC3X,GAAF,CAAMqL,CAAN,EAAStL,CAAT,IAAciX,EAAE,CAAChX,GAAH,CAAOqL,CAAP,EAAUA,CAAV,CAA1B;EACD;;EACD,WAAK5O,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAG4O,CAAhB,EAAmB5O,CAAC,EAApB,EAAwB;EACtB,aAAKsD,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAG2X,KAAhB,EAAuB3X,CAAC,EAAxB,EAA4B;EAC1B4X,UAAAA,CAAC,CAACxW,GAAF,CAAM1E,CAAN,EAASsD,CAAT,EAAY4X,CAAC,CAAC3X,GAAF,CAAMvD,CAAN,EAASsD,CAAT,IAAc4X,CAAC,CAAC3X,GAAF,CAAMqL,CAAN,EAAStL,CAAT,IAAciX,EAAE,CAAChX,GAAH,CAAOvD,CAAP,EAAU4O,CAAV,CAAxC;EACD;EACF;EACF;;EACD,WAAOsM,CAAP;EACD;;EAED,MAAIC,WAAJ,GAAkB;EAChB,QAAI3N,IAAI,GAAG,KAAKqN,EAAhB;;EACA,QAAI,CAACrN,IAAI,CAACc,QAAL,EAAL,EAAsB;EACpB,YAAM,IAAImB,KAAJ,CAAU,uBAAV,CAAN;EACD;;EACD,QAAI0L,WAAW,GAAG,KAAKV,SAAvB;EACA,QAAIM,GAAG,GAAGvN,IAAI,CAACjM,OAAf;;EACA,SAAK,IAAI+B,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGyX,GAApB,EAAyBzX,CAAC,EAA1B,EAA8B;EAC5B6X,MAAAA,WAAW,IAAI3N,IAAI,CAACjK,GAAL,CAASD,CAAT,EAAYA,CAAZ,CAAf;EACD;;EACD,WAAO6X,WAAP;EACD;;EAED,MAAIC,qBAAJ,GAA4B;EAC1B,QAAI5N,IAAI,GAAG,KAAKqN,EAAhB;EACA,QAAIxZ,IAAI,GAAGmM,IAAI,CAACnM,IAAhB;EACA,QAAIE,OAAO,GAAGiM,IAAI,CAACjM,OAAnB;EACA,QAAI2Z,CAAC,GAAG,IAAI7T,MAAJ,CAAWhG,IAAX,EAAiBE,OAAjB,CAAR;;EACA,SAAK,IAAIvB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGqB,IAApB,EAA0BrB,CAAC,EAA3B,EAA+B;EAC7B,WAAK,IAAIsD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG/B,OAApB,EAA6B+B,CAAC,EAA9B,EAAkC;EAChC,YAAItD,CAAC,GAAGsD,CAAR,EAAW;EACT4X,UAAAA,CAAC,CAACxW,GAAF,CAAM1E,CAAN,EAASsD,CAAT,EAAYkK,IAAI,CAACjK,GAAL,CAASvD,CAAT,EAAYsD,CAAZ,CAAZ;EACD,SAFD,MAEO,IAAItD,CAAC,KAAKsD,CAAV,EAAa;EAClB4X,UAAAA,CAAC,CAACxW,GAAF,CAAM1E,CAAN,EAASsD,CAAT,EAAY,CAAZ;EACD,SAFM,MAEA;EACL4X,UAAAA,CAAC,CAACxW,GAAF,CAAM1E,CAAN,EAASsD,CAAT,EAAY,CAAZ;EACD;EACF;EACF;;EACD,WAAO4X,CAAP;EACD;;EAED,MAAIG,qBAAJ,GAA4B;EAC1B,QAAI7N,IAAI,GAAG,KAAKqN,EAAhB;EACA,QAAIxZ,IAAI,GAAGmM,IAAI,CAACnM,IAAhB;EACA,QAAIE,OAAO,GAAGiM,IAAI,CAACjM,OAAnB;EACA,QAAI2Z,CAAC,GAAG,IAAI7T,MAAJ,CAAWhG,IAAX,EAAiBE,OAAjB,CAAR;;EACA,SAAK,IAAIvB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGqB,IAApB,EAA0BrB,CAAC,EAA3B,EAA+B;EAC7B,WAAK,IAAIsD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG/B,OAApB,EAA6B+B,CAAC,EAA9B,EAAkC;EAChC,YAAItD,CAAC,IAAIsD,CAAT,EAAY;EACV4X,UAAAA,CAAC,CAACxW,GAAF,CAAM1E,CAAN,EAASsD,CAAT,EAAYkK,IAAI,CAACjK,GAAL,CAASvD,CAAT,EAAYsD,CAAZ,CAAZ;EACD,SAFD,MAEO;EACL4X,UAAAA,CAAC,CAACxW,GAAF,CAAM1E,CAAN,EAASsD,CAAT,EAAY,CAAZ;EACD;EACF;EACF;;EACD,WAAO4X,CAAP;EACD;;EAED,MAAII,sBAAJ,GAA6B;EAC3B,WAAO/a,KAAK,CAAC+B,IAAN,CAAW,KAAKkY,WAAhB,CAAP;EACD;;EAtKkC;;ECH9B,SAASe,UAAT,CAAoBhF,CAApB,EAAuBC,CAAvB,EAA0B;EAC/B,MAAInU,CAAC,GAAG,CAAR;;EACA,MAAI0C,IAAI,CAAC0F,GAAL,CAAS8L,CAAT,IAAcxR,IAAI,CAAC0F,GAAL,CAAS+L,CAAT,CAAlB,EAA+B;EAC7BnU,IAAAA,CAAC,GAAGmU,CAAC,GAAGD,CAAR;EACA,WAAOxR,IAAI,CAAC0F,GAAL,CAAS8L,CAAT,IAAcxR,IAAI,CAACE,IAAL,CAAU,IAAI5C,CAAC,GAAGA,CAAlB,CAArB;EACD;;EACD,MAAImU,CAAC,KAAK,CAAV,EAAa;EACXnU,IAAAA,CAAC,GAAGkU,CAAC,GAAGC,CAAR;EACA,WAAOzR,IAAI,CAAC0F,GAAL,CAAS+L,CAAT,IAAczR,IAAI,CAACE,IAAL,CAAU,IAAI5C,CAAC,GAAGA,CAAlB,CAArB;EACD;;EACD,SAAO,CAAP;EACD;;ECNc,MAAMmZ,eAAN,CAAsB;EACnC5V,EAAAA,WAAW,CAAC5C,KAAD,EAAQ;EACjBA,IAAAA,KAAK,GAAGoX,eAAe,CAAC3S,WAAhB,CAA4BzE,KAA5B,CAAR;EAEA,QAAIyY,EAAE,GAAGzY,KAAK,CAAC8L,KAAN,EAAT;EACA,QAAIM,CAAC,GAAGpM,KAAK,CAAC3B,IAAd;EACA,QAAIgO,CAAC,GAAGrM,KAAK,CAACzB,OAAd;EACA,QAAIma,KAAK,GAAG,IAAIrJ,YAAJ,CAAiBhD,CAAjB,CAAZ;EACA,QAAIrP,CAAJ,EAAOsD,CAAP,EAAUsL,CAAV,EAAa0D,CAAb;;EAEA,SAAK1D,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGS,CAAhB,EAAmBT,CAAC,EAApB,EAAwB;EACtB,UAAI+M,GAAG,GAAG,CAAV;;EACA,WAAK3b,CAAC,GAAG4O,CAAT,EAAY5O,CAAC,GAAGoP,CAAhB,EAAmBpP,CAAC,EAApB,EAAwB;EACtB2b,QAAAA,GAAG,GAAGJ,UAAU,CAACI,GAAD,EAAMF,EAAE,CAAClY,GAAH,CAAOvD,CAAP,EAAU4O,CAAV,CAAN,CAAhB;EACD;;EACD,UAAI+M,GAAG,KAAK,CAAZ,EAAe;EACb,YAAIF,EAAE,CAAClY,GAAH,CAAOqL,CAAP,EAAUA,CAAV,IAAe,CAAnB,EAAsB;EACpB+M,UAAAA,GAAG,GAAG,CAACA,GAAP;EACD;;EACD,aAAK3b,CAAC,GAAG4O,CAAT,EAAY5O,CAAC,GAAGoP,CAAhB,EAAmBpP,CAAC,EAApB,EAAwB;EACtByb,UAAAA,EAAE,CAAC/W,GAAH,CAAO1E,CAAP,EAAU4O,CAAV,EAAa6M,EAAE,CAAClY,GAAH,CAAOvD,CAAP,EAAU4O,CAAV,IAAe+M,GAA5B;EACD;;EACDF,QAAAA,EAAE,CAAC/W,GAAH,CAAOkK,CAAP,EAAUA,CAAV,EAAa6M,EAAE,CAAClY,GAAH,CAAOqL,CAAP,EAAUA,CAAV,IAAe,CAA5B;;EACA,aAAKtL,CAAC,GAAGsL,CAAC,GAAG,CAAb,EAAgBtL,CAAC,GAAG+L,CAApB,EAAuB/L,CAAC,EAAxB,EAA4B;EAC1BgP,UAAAA,CAAC,GAAG,CAAJ;;EACA,eAAKtS,CAAC,GAAG4O,CAAT,EAAY5O,CAAC,GAAGoP,CAAhB,EAAmBpP,CAAC,EAApB,EAAwB;EACtBsS,YAAAA,CAAC,IAAImJ,EAAE,CAAClY,GAAH,CAAOvD,CAAP,EAAU4O,CAAV,IAAe6M,EAAE,CAAClY,GAAH,CAAOvD,CAAP,EAAUsD,CAAV,CAApB;EACD;;EACDgP,UAAAA,CAAC,GAAG,CAACA,CAAD,GAAKmJ,EAAE,CAAClY,GAAH,CAAOqL,CAAP,EAAUA,CAAV,CAAT;;EACA,eAAK5O,CAAC,GAAG4O,CAAT,EAAY5O,CAAC,GAAGoP,CAAhB,EAAmBpP,CAAC,EAApB,EAAwB;EACtByb,YAAAA,EAAE,CAAC/W,GAAH,CAAO1E,CAAP,EAAUsD,CAAV,EAAamY,EAAE,CAAClY,GAAH,CAAOvD,CAAP,EAAUsD,CAAV,IAAegP,CAAC,GAAGmJ,EAAE,CAAClY,GAAH,CAAOvD,CAAP,EAAU4O,CAAV,CAAhC;EACD;EACF;EACF;;EACD8M,MAAAA,KAAK,CAAC9M,CAAD,CAAL,GAAW,CAAC+M,GAAZ;EACD;;EAED,SAAKC,EAAL,GAAUH,EAAV;EACA,SAAKI,KAAL,GAAaH,KAAb;EACD;;EAEDV,EAAAA,KAAK,CAAChY,KAAD,EAAQ;EACXA,IAAAA,KAAK,GAAGqE,MAAM,CAACI,WAAP,CAAmBzE,KAAnB,CAAR;EAEA,QAAIyY,EAAE,GAAG,KAAKG,EAAd;EACA,QAAIxM,CAAC,GAAGqM,EAAE,CAACpa,IAAX;;EAEA,QAAI2B,KAAK,CAAC3B,IAAN,KAAe+N,CAAnB,EAAsB;EACpB,YAAM,IAAIK,KAAJ,CAAU,kCAAV,CAAN;EACD;;EACD,QAAI,CAAC,KAAKqM,UAAL,EAAL,EAAwB;EACtB,YAAM,IAAIrM,KAAJ,CAAU,0BAAV,CAAN;EACD;;EAED,QAAIwL,KAAK,GAAGjY,KAAK,CAACzB,OAAlB;EACA,QAAI2Z,CAAC,GAAGlY,KAAK,CAAC8L,KAAN,EAAR;EACA,QAAIO,CAAC,GAAGoM,EAAE,CAACla,OAAX;EACA,QAAIvB,CAAJ,EAAOsD,CAAP,EAAUsL,CAAV,EAAa0D,CAAb;;EAEA,SAAK1D,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGS,CAAhB,EAAmBT,CAAC,EAApB,EAAwB;EACtB,WAAKtL,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAG2X,KAAhB,EAAuB3X,CAAC,EAAxB,EAA4B;EAC1BgP,QAAAA,CAAC,GAAG,CAAJ;;EACA,aAAKtS,CAAC,GAAG4O,CAAT,EAAY5O,CAAC,GAAGoP,CAAhB,EAAmBpP,CAAC,EAApB,EAAwB;EACtBsS,UAAAA,CAAC,IAAImJ,EAAE,CAAClY,GAAH,CAAOvD,CAAP,EAAU4O,CAAV,IAAesM,CAAC,CAAC3X,GAAF,CAAMvD,CAAN,EAASsD,CAAT,CAApB;EACD;;EACDgP,QAAAA,CAAC,GAAG,CAACA,CAAD,GAAKmJ,EAAE,CAAClY,GAAH,CAAOqL,CAAP,EAAUA,CAAV,CAAT;;EACA,aAAK5O,CAAC,GAAG4O,CAAT,EAAY5O,CAAC,GAAGoP,CAAhB,EAAmBpP,CAAC,EAApB,EAAwB;EACtBkb,UAAAA,CAAC,CAACxW,GAAF,CAAM1E,CAAN,EAASsD,CAAT,EAAY4X,CAAC,CAAC3X,GAAF,CAAMvD,CAAN,EAASsD,CAAT,IAAcgP,CAAC,GAAGmJ,EAAE,CAAClY,GAAH,CAAOvD,CAAP,EAAU4O,CAAV,CAA9B;EACD;EACF;EACF;;EACD,SAAKA,CAAC,GAAGS,CAAC,GAAG,CAAb,EAAgBT,CAAC,IAAI,CAArB,EAAwBA,CAAC,EAAzB,EAA6B;EAC3B,WAAKtL,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAG2X,KAAhB,EAAuB3X,CAAC,EAAxB,EAA4B;EAC1B4X,QAAAA,CAAC,CAACxW,GAAF,CAAMkK,CAAN,EAAStL,CAAT,EAAY4X,CAAC,CAAC3X,GAAF,CAAMqL,CAAN,EAAStL,CAAT,IAAc,KAAKuY,KAAL,CAAWjN,CAAX,CAA1B;EACD;;EACD,WAAK5O,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAG4O,CAAhB,EAAmB5O,CAAC,EAApB,EAAwB;EACtB,aAAKsD,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAG2X,KAAhB,EAAuB3X,CAAC,EAAxB,EAA4B;EAC1B4X,UAAAA,CAAC,CAACxW,GAAF,CAAM1E,CAAN,EAASsD,CAAT,EAAY4X,CAAC,CAAC3X,GAAF,CAAMvD,CAAN,EAASsD,CAAT,IAAc4X,CAAC,CAAC3X,GAAF,CAAMqL,CAAN,EAAStL,CAAT,IAAcmY,EAAE,CAAClY,GAAH,CAAOvD,CAAP,EAAU4O,CAAV,CAAxC;EACD;EACF;EACF;;EAED,WAAOsM,CAAC,CAACtE,SAAF,CAAY,CAAZ,EAAevH,CAAC,GAAG,CAAnB,EAAsB,CAAtB,EAAyB4L,KAAK,GAAG,CAAjC,CAAP;EACD;;EAEDa,EAAAA,UAAU,GAAG;EACX,QAAIva,OAAO,GAAG,KAAKqa,EAAL,CAAQra,OAAtB;;EACA,SAAK,IAAIvB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGuB,OAApB,EAA6BvB,CAAC,EAA9B,EAAkC;EAChC,UAAI,KAAK6b,KAAL,CAAW7b,CAAX,MAAkB,CAAtB,EAAyB;EACvB,eAAO,KAAP;EACD;EACF;;EACD,WAAO,IAAP;EACD;;EAED,MAAIqb,qBAAJ,GAA4B;EAC1B,QAAII,EAAE,GAAG,KAAKG,EAAd;EACA,QAAIvM,CAAC,GAAGoM,EAAE,CAACla,OAAX;EACA,QAAI2Z,CAAC,GAAG,IAAI7T,MAAJ,CAAWgI,CAAX,EAAcA,CAAd,CAAR;EACA,QAAIrP,CAAJ,EAAOsD,CAAP;;EACA,SAAKtD,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGqP,CAAhB,EAAmBrP,CAAC,EAApB,EAAwB;EACtB,WAAKsD,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAG+L,CAAhB,EAAmB/L,CAAC,EAApB,EAAwB;EACtB,YAAItD,CAAC,GAAGsD,CAAR,EAAW;EACT4X,UAAAA,CAAC,CAACxW,GAAF,CAAM1E,CAAN,EAASsD,CAAT,EAAYmY,EAAE,CAAClY,GAAH,CAAOvD,CAAP,EAAUsD,CAAV,CAAZ;EACD,SAFD,MAEO,IAAItD,CAAC,KAAKsD,CAAV,EAAa;EAClB4X,UAAAA,CAAC,CAACxW,GAAF,CAAM1E,CAAN,EAASsD,CAAT,EAAY,KAAKuY,KAAL,CAAW7b,CAAX,CAAZ;EACD,SAFM,MAEA;EACLkb,UAAAA,CAAC,CAACxW,GAAF,CAAM1E,CAAN,EAASsD,CAAT,EAAY,CAAZ;EACD;EACF;EACF;;EACD,WAAO4X,CAAP;EACD;;EAED,MAAIa,gBAAJ,GAAuB;EACrB,QAAIN,EAAE,GAAG,KAAKG,EAAd;EACA,QAAIva,IAAI,GAAGoa,EAAE,CAACpa,IAAd;EACA,QAAIE,OAAO,GAAGka,EAAE,CAACla,OAAjB;EACA,QAAI2Z,CAAC,GAAG,IAAI7T,MAAJ,CAAWhG,IAAX,EAAiBE,OAAjB,CAAR;EACA,QAAIvB,CAAJ,EAAOsD,CAAP,EAAUsL,CAAV,EAAa0D,CAAb;;EAEA,SAAK1D,CAAC,GAAGrN,OAAO,GAAG,CAAnB,EAAsBqN,CAAC,IAAI,CAA3B,EAA8BA,CAAC,EAA/B,EAAmC;EACjC,WAAK5O,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGqB,IAAhB,EAAsBrB,CAAC,EAAvB,EAA2B;EACzBkb,QAAAA,CAAC,CAACxW,GAAF,CAAM1E,CAAN,EAAS4O,CAAT,EAAY,CAAZ;EACD;;EACDsM,MAAAA,CAAC,CAACxW,GAAF,CAAMkK,CAAN,EAASA,CAAT,EAAY,CAAZ;;EACA,WAAKtL,CAAC,GAAGsL,CAAT,EAAYtL,CAAC,GAAG/B,OAAhB,EAAyB+B,CAAC,EAA1B,EAA8B;EAC5B,YAAImY,EAAE,CAAClY,GAAH,CAAOqL,CAAP,EAAUA,CAAV,MAAiB,CAArB,EAAwB;EACtB0D,UAAAA,CAAC,GAAG,CAAJ;;EACA,eAAKtS,CAAC,GAAG4O,CAAT,EAAY5O,CAAC,GAAGqB,IAAhB,EAAsBrB,CAAC,EAAvB,EAA2B;EACzBsS,YAAAA,CAAC,IAAImJ,EAAE,CAAClY,GAAH,CAAOvD,CAAP,EAAU4O,CAAV,IAAesM,CAAC,CAAC3X,GAAF,CAAMvD,CAAN,EAASsD,CAAT,CAApB;EACD;;EAEDgP,UAAAA,CAAC,GAAG,CAACA,CAAD,GAAKmJ,EAAE,CAAC7M,CAAD,CAAF,CAAMA,CAAN,CAAT;;EAEA,eAAK5O,CAAC,GAAG4O,CAAT,EAAY5O,CAAC,GAAGqB,IAAhB,EAAsBrB,CAAC,EAAvB,EAA2B;EACzBkb,YAAAA,CAAC,CAACxW,GAAF,CAAM1E,CAAN,EAASsD,CAAT,EAAY4X,CAAC,CAAC3X,GAAF,CAAMvD,CAAN,EAASsD,CAAT,IAAcgP,CAAC,GAAGmJ,EAAE,CAAClY,GAAH,CAAOvD,CAAP,EAAU4O,CAAV,CAA9B;EACD;EACF;EACF;EACF;;EACD,WAAOsM,CAAP;EACD;;EA9IkC;;ECAtB,MAAMc,0BAAN,CAAiC;EAC9CpW,EAAAA,WAAW,CAAC5C,KAAD,EAAsB;EAAA,QAAd7C,OAAc,uEAAJ,EAAI;EAC/B6C,IAAAA,KAAK,GAAGoX,eAAe,CAAC3S,WAAhB,CAA4BzE,KAA5B,CAAR;EAEA,QAAIoM,CAAC,GAAGpM,KAAK,CAAC3B,IAAd;EACA,QAAIgO,CAAC,GAAGrM,KAAK,CAACzB,OAAd;EAEA,UAAM;EACJ0a,MAAAA,0BAA0B,GAAG,IADzB;EAEJC,MAAAA,2BAA2B,GAAG,IAF1B;EAGJC,MAAAA,aAAa,GAAG;EAHZ,QAIFhc,OAJJ;EAMA,QAAIic,KAAK,GAAGC,OAAO,CAACJ,0BAAD,CAAnB;EACA,QAAIK,KAAK,GAAGD,OAAO,CAACH,2BAAD,CAAnB;EAEA,QAAIK,OAAO,GAAG,KAAd;EACA,QAAIhG,CAAJ;;EACA,QAAInH,CAAC,GAAGC,CAAR,EAAW;EACT,UAAI,CAAC8M,aAAL,EAAoB;EAClB5F,QAAAA,CAAC,GAAGvT,KAAK,CAAC8L,KAAN,EAAJ,CADkB;;EAGlBmH,QAAAA,OAAO,CAACC,IAAR,CACE,wFADF;EAGD,OAND,MAMO;EACLK,QAAAA,CAAC,GAAGvT,KAAK,CAACuU,SAAN,EAAJ;EACAnI,QAAAA,CAAC,GAAGmH,CAAC,CAAClV,IAAN;EACAgO,QAAAA,CAAC,GAAGkH,CAAC,CAAChV,OAAN;EACAgb,QAAAA,OAAO,GAAG,IAAV;EACA,YAAIC,GAAG,GAAGJ,KAAV;EACAA,QAAAA,KAAK,GAAGE,KAAR;EACAA,QAAAA,KAAK,GAAGE,GAAR;EACD;EACF,KAhBD,MAgBO;EACLjG,MAAAA,CAAC,GAAGvT,KAAK,CAAC8L,KAAN,EAAJ;EACD;;EAED,QAAI2N,EAAE,GAAG1X,IAAI,CAAC9E,GAAL,CAASmP,CAAT,EAAYC,CAAZ,CAAT;EACA,QAAIqN,EAAE,GAAG3X,IAAI,CAAC9E,GAAL,CAASmP,CAAC,GAAG,CAAb,EAAgBC,CAAhB,CAAT;EACA,QAAIiD,CAAC,GAAG,IAAID,YAAJ,CAAiBqK,EAAjB,CAAR;EACA,QAAIC,CAAC,GAAG,IAAItV,MAAJ,CAAW+H,CAAX,EAAcqN,EAAd,CAAR;EACA,QAAIG,CAAC,GAAG,IAAIvV,MAAJ,CAAWgI,CAAX,EAAcA,CAAd,CAAR;EAEA,QAAIpI,CAAC,GAAG,IAAIoL,YAAJ,CAAiBhD,CAAjB,CAAR;EACA,QAAIwN,IAAI,GAAG,IAAIxK,YAAJ,CAAiBjD,CAAjB,CAAX;EAEA,QAAI0N,EAAE,GAAG,IAAIzK,YAAJ,CAAiBqK,EAAjB,CAAT;;EACA,SAAK,IAAI1c,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG0c,EAApB,EAAwB1c,CAAC,EAAzB,EAA6B8c,EAAE,CAAC9c,CAAD,CAAF,GAAQA,CAAR;;EAE7B,QAAI+c,GAAG,GAAGhY,IAAI,CAAC9E,GAAL,CAASmP,CAAC,GAAG,CAAb,EAAgBC,CAAhB,CAAV;EACA,QAAI2N,GAAG,GAAGjY,IAAI,CAACpF,GAAL,CAAS,CAAT,EAAYoF,IAAI,CAAC9E,GAAL,CAASoP,CAAC,GAAG,CAAb,EAAgBD,CAAhB,CAAZ,CAAV;EACA,QAAI6N,GAAG,GAAGlY,IAAI,CAACpF,GAAL,CAASod,GAAT,EAAcC,GAAd,CAAV;;EAEA,SAAK,IAAIpO,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGqO,GAApB,EAAyBrO,CAAC,EAA1B,EAA8B;EAC5B,UAAIA,CAAC,GAAGmO,GAAR,EAAa;EACXzK,QAAAA,CAAC,CAAC1D,CAAD,CAAD,GAAO,CAAP;;EACA,aAAK,IAAI5O,CAAC,GAAG4O,CAAb,EAAgB5O,CAAC,GAAGoP,CAApB,EAAuBpP,CAAC,EAAxB,EAA4B;EAC1BsS,UAAAA,CAAC,CAAC1D,CAAD,CAAD,GAAO2M,UAAU,CAACjJ,CAAC,CAAC1D,CAAD,CAAF,EAAO2H,CAAC,CAAChT,GAAF,CAAMvD,CAAN,EAAS4O,CAAT,CAAP,CAAjB;EACD;;EACD,YAAI0D,CAAC,CAAC1D,CAAD,CAAD,KAAS,CAAb,EAAgB;EACd,cAAI2H,CAAC,CAAChT,GAAF,CAAMqL,CAAN,EAASA,CAAT,IAAc,CAAlB,EAAqB;EACnB0D,YAAAA,CAAC,CAAC1D,CAAD,CAAD,GAAO,CAAC0D,CAAC,CAAC1D,CAAD,CAAT;EACD;;EACD,eAAK,IAAI5O,CAAC,GAAG4O,CAAb,EAAgB5O,CAAC,GAAGoP,CAApB,EAAuBpP,CAAC,EAAxB,EAA4B;EAC1BuW,YAAAA,CAAC,CAAC7R,GAAF,CAAM1E,CAAN,EAAS4O,CAAT,EAAY2H,CAAC,CAAChT,GAAF,CAAMvD,CAAN,EAAS4O,CAAT,IAAc0D,CAAC,CAAC1D,CAAD,CAA3B;EACD;;EACD2H,UAAAA,CAAC,CAAC7R,GAAF,CAAMkK,CAAN,EAASA,CAAT,EAAY2H,CAAC,CAAChT,GAAF,CAAMqL,CAAN,EAASA,CAAT,IAAc,CAA1B;EACD;;EACD0D,QAAAA,CAAC,CAAC1D,CAAD,CAAD,GAAO,CAAC0D,CAAC,CAAC1D,CAAD,CAAT;EACD;;EAED,WAAK,IAAItL,CAAC,GAAGsL,CAAC,GAAG,CAAjB,EAAoBtL,CAAC,GAAG+L,CAAxB,EAA2B/L,CAAC,EAA5B,EAAgC;EAC9B,YAAIsL,CAAC,GAAGmO,GAAJ,IAAWzK,CAAC,CAAC1D,CAAD,CAAD,KAAS,CAAxB,EAA2B;EACzB,cAAI8L,CAAC,GAAG,CAAR;;EACA,eAAK,IAAI1a,CAAC,GAAG4O,CAAb,EAAgB5O,CAAC,GAAGoP,CAApB,EAAuBpP,CAAC,EAAxB,EAA4B;EAC1B0a,YAAAA,CAAC,IAAInE,CAAC,CAAChT,GAAF,CAAMvD,CAAN,EAAS4O,CAAT,IAAc2H,CAAC,CAAChT,GAAF,CAAMvD,CAAN,EAASsD,CAAT,CAAnB;EACD;;EACDoX,UAAAA,CAAC,GAAG,CAACA,CAAD,GAAKnE,CAAC,CAAChT,GAAF,CAAMqL,CAAN,EAASA,CAAT,CAAT;;EACA,eAAK,IAAI5O,CAAC,GAAG4O,CAAb,EAAgB5O,CAAC,GAAGoP,CAApB,EAAuBpP,CAAC,EAAxB,EAA4B;EAC1BuW,YAAAA,CAAC,CAAC7R,GAAF,CAAM1E,CAAN,EAASsD,CAAT,EAAYiT,CAAC,CAAChT,GAAF,CAAMvD,CAAN,EAASsD,CAAT,IAAcoX,CAAC,GAAGnE,CAAC,CAAChT,GAAF,CAAMvD,CAAN,EAAS4O,CAAT,CAA9B;EACD;EACF;;EACD3H,QAAAA,CAAC,CAAC3D,CAAD,CAAD,GAAOiT,CAAC,CAAChT,GAAF,CAAMqL,CAAN,EAAStL,CAAT,CAAP;EACD;;EAED,UAAI8Y,KAAK,IAAIxN,CAAC,GAAGmO,GAAjB,EAAsB;EACpB,aAAK,IAAI/c,CAAC,GAAG4O,CAAb,EAAgB5O,CAAC,GAAGoP,CAApB,EAAuBpP,CAAC,EAAxB,EAA4B;EAC1B2c,UAAAA,CAAC,CAACjY,GAAF,CAAM1E,CAAN,EAAS4O,CAAT,EAAY2H,CAAC,CAAChT,GAAF,CAAMvD,CAAN,EAAS4O,CAAT,CAAZ;EACD;EACF;;EAED,UAAIA,CAAC,GAAGoO,GAAR,EAAa;EACX/V,QAAAA,CAAC,CAAC2H,CAAD,CAAD,GAAO,CAAP;;EACA,aAAK,IAAI5O,CAAC,GAAG4O,CAAC,GAAG,CAAjB,EAAoB5O,CAAC,GAAGqP,CAAxB,EAA2BrP,CAAC,EAA5B,EAAgC;EAC9BiH,UAAAA,CAAC,CAAC2H,CAAD,CAAD,GAAO2M,UAAU,CAACtU,CAAC,CAAC2H,CAAD,CAAF,EAAO3H,CAAC,CAACjH,CAAD,CAAR,CAAjB;EACD;;EACD,YAAIiH,CAAC,CAAC2H,CAAD,CAAD,KAAS,CAAb,EAAgB;EACd,cAAI3H,CAAC,CAAC2H,CAAC,GAAG,CAAL,CAAD,GAAW,CAAf,EAAkB;EAChB3H,YAAAA,CAAC,CAAC2H,CAAD,CAAD,GAAO,IAAI3H,CAAC,CAAC2H,CAAD,CAAZ;EACD;;EACD,eAAK,IAAI5O,CAAC,GAAG4O,CAAC,GAAG,CAAjB,EAAoB5O,CAAC,GAAGqP,CAAxB,EAA2BrP,CAAC,EAA5B,EAAgC;EAC9BiH,YAAAA,CAAC,CAACjH,CAAD,CAAD,IAAQiH,CAAC,CAAC2H,CAAD,CAAT;EACD;;EACD3H,UAAAA,CAAC,CAAC2H,CAAC,GAAG,CAAL,CAAD,IAAY,CAAZ;EACD;;EACD3H,QAAAA,CAAC,CAAC2H,CAAD,CAAD,GAAO,CAAC3H,CAAC,CAAC2H,CAAD,CAAT;;EACA,YAAIA,CAAC,GAAG,CAAJ,GAAQQ,CAAR,IAAanI,CAAC,CAAC2H,CAAD,CAAD,KAAS,CAA1B,EAA6B;EAC3B,eAAK,IAAI5O,CAAC,GAAG4O,CAAC,GAAG,CAAjB,EAAoB5O,CAAC,GAAGoP,CAAxB,EAA2BpP,CAAC,EAA5B,EAAgC;EAC9B6c,YAAAA,IAAI,CAAC7c,CAAD,CAAJ,GAAU,CAAV;EACD;;EACD,eAAK,IAAIA,CAAC,GAAG4O,CAAC,GAAG,CAAjB,EAAoB5O,CAAC,GAAGoP,CAAxB,EAA2BpP,CAAC,EAA5B,EAAgC;EAC9B,iBAAK,IAAIsD,CAAC,GAAGsL,CAAC,GAAG,CAAjB,EAAoBtL,CAAC,GAAG+L,CAAxB,EAA2B/L,CAAC,EAA5B,EAAgC;EAC9BuZ,cAAAA,IAAI,CAAC7c,CAAD,CAAJ,IAAWiH,CAAC,CAAC3D,CAAD,CAAD,GAAOiT,CAAC,CAAChT,GAAF,CAAMvD,CAAN,EAASsD,CAAT,CAAlB;EACD;EACF;;EACD,eAAK,IAAIA,CAAC,GAAGsL,CAAC,GAAG,CAAjB,EAAoBtL,CAAC,GAAG+L,CAAxB,EAA2B/L,CAAC,EAA5B,EAAgC;EAC9B,gBAAIoX,CAAC,GAAG,CAACzT,CAAC,CAAC3D,CAAD,CAAF,GAAQ2D,CAAC,CAAC2H,CAAC,GAAG,CAAL,CAAjB;;EACA,iBAAK,IAAI5O,CAAC,GAAG4O,CAAC,GAAG,CAAjB,EAAoB5O,CAAC,GAAGoP,CAAxB,EAA2BpP,CAAC,EAA5B,EAAgC;EAC9BuW,cAAAA,CAAC,CAAC7R,GAAF,CAAM1E,CAAN,EAASsD,CAAT,EAAYiT,CAAC,CAAChT,GAAF,CAAMvD,CAAN,EAASsD,CAAT,IAAcoX,CAAC,GAAGmC,IAAI,CAAC7c,CAAD,CAAlC;EACD;EACF;EACF;;EACD,YAAIsc,KAAJ,EAAW;EACT,eAAK,IAAItc,CAAC,GAAG4O,CAAC,GAAG,CAAjB,EAAoB5O,CAAC,GAAGqP,CAAxB,EAA2BrP,CAAC,EAA5B,EAAgC;EAC9B4c,YAAAA,CAAC,CAAClY,GAAF,CAAM1E,CAAN,EAAS4O,CAAT,EAAY3H,CAAC,CAACjH,CAAD,CAAb;EACD;EACF;EACF;EACF;;EAED,QAAIuP,CAAC,GAAGxK,IAAI,CAAC9E,GAAL,CAASoP,CAAT,EAAYD,CAAC,GAAG,CAAhB,CAAR;;EACA,QAAI2N,GAAG,GAAG1N,CAAV,EAAa;EACXiD,MAAAA,CAAC,CAACyK,GAAD,CAAD,GAASxG,CAAC,CAAChT,GAAF,CAAMwZ,GAAN,EAAWA,GAAX,CAAT;EACD;;EACD,QAAI3N,CAAC,GAAGG,CAAR,EAAW;EACT+C,MAAAA,CAAC,CAAC/C,CAAC,GAAG,CAAL,CAAD,GAAW,CAAX;EACD;;EACD,QAAIyN,GAAG,GAAG,CAAN,GAAUzN,CAAd,EAAiB;EACftI,MAAAA,CAAC,CAAC+V,GAAD,CAAD,GAASzG,CAAC,CAAChT,GAAF,CAAMyZ,GAAN,EAAWzN,CAAC,GAAG,CAAf,CAAT;EACD;;EACDtI,IAAAA,CAAC,CAACsI,CAAC,GAAG,CAAL,CAAD,GAAW,CAAX;;EAEA,QAAI6M,KAAJ,EAAW;EACT,WAAK,IAAI9Y,CAAC,GAAGyZ,GAAb,EAAkBzZ,CAAC,GAAGmZ,EAAtB,EAA0BnZ,CAAC,EAA3B,EAA+B;EAC7B,aAAK,IAAItD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGoP,CAApB,EAAuBpP,CAAC,EAAxB,EAA4B;EAC1B2c,UAAAA,CAAC,CAACjY,GAAF,CAAM1E,CAAN,EAASsD,CAAT,EAAY,CAAZ;EACD;;EACDqZ,QAAAA,CAAC,CAACjY,GAAF,CAAMpB,CAAN,EAASA,CAAT,EAAY,CAAZ;EACD;;EACD,WAAK,IAAIsL,CAAC,GAAGmO,GAAG,GAAG,CAAnB,EAAsBnO,CAAC,IAAI,CAA3B,EAA8BA,CAAC,EAA/B,EAAmC;EACjC,YAAI0D,CAAC,CAAC1D,CAAD,CAAD,KAAS,CAAb,EAAgB;EACd,eAAK,IAAItL,CAAC,GAAGsL,CAAC,GAAG,CAAjB,EAAoBtL,CAAC,GAAGmZ,EAAxB,EAA4BnZ,CAAC,EAA7B,EAAiC;EAC/B,gBAAIoX,CAAC,GAAG,CAAR;;EACA,iBAAK,IAAI1a,CAAC,GAAG4O,CAAb,EAAgB5O,CAAC,GAAGoP,CAApB,EAAuBpP,CAAC,EAAxB,EAA4B;EAC1B0a,cAAAA,CAAC,IAAIiC,CAAC,CAACpZ,GAAF,CAAMvD,CAAN,EAAS4O,CAAT,IAAc+N,CAAC,CAACpZ,GAAF,CAAMvD,CAAN,EAASsD,CAAT,CAAnB;EACD;;EACDoX,YAAAA,CAAC,GAAG,CAACA,CAAD,GAAKiC,CAAC,CAACpZ,GAAF,CAAMqL,CAAN,EAASA,CAAT,CAAT;;EACA,iBAAK,IAAI5O,CAAC,GAAG4O,CAAb,EAAgB5O,CAAC,GAAGoP,CAApB,EAAuBpP,CAAC,EAAxB,EAA4B;EAC1B2c,cAAAA,CAAC,CAACjY,GAAF,CAAM1E,CAAN,EAASsD,CAAT,EAAYqZ,CAAC,CAACpZ,GAAF,CAAMvD,CAAN,EAASsD,CAAT,IAAcoX,CAAC,GAAGiC,CAAC,CAACpZ,GAAF,CAAMvD,CAAN,EAAS4O,CAAT,CAA9B;EACD;EACF;;EACD,eAAK,IAAI5O,CAAC,GAAG4O,CAAb,EAAgB5O,CAAC,GAAGoP,CAApB,EAAuBpP,CAAC,EAAxB,EAA4B;EAC1B2c,YAAAA,CAAC,CAACjY,GAAF,CAAM1E,CAAN,EAAS4O,CAAT,EAAY,CAAC+N,CAAC,CAACpZ,GAAF,CAAMvD,CAAN,EAAS4O,CAAT,CAAb;EACD;;EACD+N,UAAAA,CAAC,CAACjY,GAAF,CAAMkK,CAAN,EAASA,CAAT,EAAY,IAAI+N,CAAC,CAACpZ,GAAF,CAAMqL,CAAN,EAASA,CAAT,CAAhB;;EACA,eAAK,IAAI5O,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG4O,CAAC,GAAG,CAAxB,EAA2B5O,CAAC,EAA5B,EAAgC;EAC9B2c,YAAAA,CAAC,CAACjY,GAAF,CAAM1E,CAAN,EAAS4O,CAAT,EAAY,CAAZ;EACD;EACF,SAlBD,MAkBO;EACL,eAAK,IAAI5O,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGoP,CAApB,EAAuBpP,CAAC,EAAxB,EAA4B;EAC1B2c,YAAAA,CAAC,CAACjY,GAAF,CAAM1E,CAAN,EAAS4O,CAAT,EAAY,CAAZ;EACD;;EACD+N,UAAAA,CAAC,CAACjY,GAAF,CAAMkK,CAAN,EAASA,CAAT,EAAY,CAAZ;EACD;EACF;EACF;;EAED,QAAI0N,KAAJ,EAAW;EACT,WAAK,IAAI1N,CAAC,GAAGS,CAAC,GAAG,CAAjB,EAAoBT,CAAC,IAAI,CAAzB,EAA4BA,CAAC,EAA7B,EAAiC;EAC/B,YAAIA,CAAC,GAAGoO,GAAJ,IAAW/V,CAAC,CAAC2H,CAAD,CAAD,KAAS,CAAxB,EAA2B;EACzB,eAAK,IAAItL,CAAC,GAAGsL,CAAC,GAAG,CAAjB,EAAoBtL,CAAC,GAAG+L,CAAxB,EAA2B/L,CAAC,EAA5B,EAAgC;EAC9B,gBAAIoX,CAAC,GAAG,CAAR;;EACA,iBAAK,IAAI1a,CAAC,GAAG4O,CAAC,GAAG,CAAjB,EAAoB5O,CAAC,GAAGqP,CAAxB,EAA2BrP,CAAC,EAA5B,EAAgC;EAC9B0a,cAAAA,CAAC,IAAIkC,CAAC,CAACrZ,GAAF,CAAMvD,CAAN,EAAS4O,CAAT,IAAcgO,CAAC,CAACrZ,GAAF,CAAMvD,CAAN,EAASsD,CAAT,CAAnB;EACD;;EACDoX,YAAAA,CAAC,GAAG,CAACA,CAAD,GAAKkC,CAAC,CAACrZ,GAAF,CAAMqL,CAAC,GAAG,CAAV,EAAaA,CAAb,CAAT;;EACA,iBAAK,IAAI5O,CAAC,GAAG4O,CAAC,GAAG,CAAjB,EAAoB5O,CAAC,GAAGqP,CAAxB,EAA2BrP,CAAC,EAA5B,EAAgC;EAC9B4c,cAAAA,CAAC,CAAClY,GAAF,CAAM1E,CAAN,EAASsD,CAAT,EAAYsZ,CAAC,CAACrZ,GAAF,CAAMvD,CAAN,EAASsD,CAAT,IAAcoX,CAAC,GAAGkC,CAAC,CAACrZ,GAAF,CAAMvD,CAAN,EAAS4O,CAAT,CAA9B;EACD;EACF;EACF;;EACD,aAAK,IAAI5O,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGqP,CAApB,EAAuBrP,CAAC,EAAxB,EAA4B;EAC1B4c,UAAAA,CAAC,CAAClY,GAAF,CAAM1E,CAAN,EAAS4O,CAAT,EAAY,CAAZ;EACD;;EACDgO,QAAAA,CAAC,CAAClY,GAAF,CAAMkK,CAAN,EAASA,CAAT,EAAY,CAAZ;EACD;EACF;;EAED,QAAIsO,EAAE,GAAG3N,CAAC,GAAG,CAAb;AACA,EACA,QAAI4N,GAAG,GAAGhQ,MAAM,CAACiQ,OAAjB;;EACA,WAAO7N,CAAC,GAAG,CAAX,EAAc;EACZ,UAAIX,CAAJ,EAAOyO,IAAP;;EACA,WAAKzO,CAAC,GAAGW,CAAC,GAAG,CAAb,EAAgBX,CAAC,IAAI,CAAC,CAAtB,EAAyBA,CAAC,EAA1B,EAA8B;EAC5B,YAAIA,CAAC,KAAK,CAAC,CAAX,EAAc;EACZ;EACD;;EACD,cAAM0O,KAAK,GACTnQ,MAAM,CAACoQ,SAAP,GAAmBJ,GAAG,GAAGpY,IAAI,CAAC0F,GAAL,CAAS6H,CAAC,CAAC1D,CAAD,CAAD,GAAO7J,IAAI,CAAC0F,GAAL,CAAS6H,CAAC,CAAC1D,CAAC,GAAG,CAAL,CAAV,CAAhB,CAD3B;;EAEA,YAAI7J,IAAI,CAAC0F,GAAL,CAASxD,CAAC,CAAC2H,CAAD,CAAV,KAAkB0O,KAAlB,IAA2BnQ,MAAM,CAACqQ,KAAP,CAAavW,CAAC,CAAC2H,CAAD,CAAd,CAA/B,EAAmD;EACjD3H,UAAAA,CAAC,CAAC2H,CAAD,CAAD,GAAO,CAAP;EACA;EACD;EACF;;EACD,UAAIA,CAAC,KAAKW,CAAC,GAAG,CAAd,EAAiB;EACf8N,QAAAA,IAAI,GAAG,CAAP;EACD,OAFD,MAEO;EACL,YAAII,EAAJ;;EACA,aAAKA,EAAE,GAAGlO,CAAC,GAAG,CAAd,EAAiBkO,EAAE,IAAI7O,CAAvB,EAA0B6O,EAAE,EAA5B,EAAgC;EAC9B,cAAIA,EAAE,KAAK7O,CAAX,EAAc;EACZ;EACD;;EACD,cAAI8L,CAAC,GACH,CAAC+C,EAAE,KAAKlO,CAAP,GAAWxK,IAAI,CAAC0F,GAAL,CAASxD,CAAC,CAACwW,EAAD,CAAV,CAAX,GAA6B,CAA9B,KACCA,EAAE,KAAK7O,CAAC,GAAG,CAAX,GAAe7J,IAAI,CAAC0F,GAAL,CAASxD,CAAC,CAACwW,EAAE,GAAG,CAAN,CAAV,CAAf,GAAqC,CADtC,CADF;;EAGA,cAAI1Y,IAAI,CAAC0F,GAAL,CAAS6H,CAAC,CAACmL,EAAD,CAAV,KAAmBN,GAAG,GAAGzC,CAA7B,EAAgC;EAC9BpI,YAAAA,CAAC,CAACmL,EAAD,CAAD,GAAQ,CAAR;EACA;EACD;EACF;;EACD,YAAIA,EAAE,KAAK7O,CAAX,EAAc;EACZyO,UAAAA,IAAI,GAAG,CAAP;EACD,SAFD,MAEO,IAAII,EAAE,KAAKlO,CAAC,GAAG,CAAf,EAAkB;EACvB8N,UAAAA,IAAI,GAAG,CAAP;EACD,SAFM,MAEA;EACLA,UAAAA,IAAI,GAAG,CAAP;EACAzO,UAAAA,CAAC,GAAG6O,EAAJ;EACD;EACF;;EAED7O,MAAAA,CAAC;;EAED,cAAQyO,IAAR;EACE,aAAK,CAAL;EAAQ;EACN,gBAAIK,CAAC,GAAGzW,CAAC,CAACsI,CAAC,GAAG,CAAL,CAAT;EACAtI,YAAAA,CAAC,CAACsI,CAAC,GAAG,CAAL,CAAD,GAAW,CAAX;;EACA,iBAAK,IAAIjM,CAAC,GAAGiM,CAAC,GAAG,CAAjB,EAAoBjM,CAAC,IAAIsL,CAAzB,EAA4BtL,CAAC,EAA7B,EAAiC;EAC/B,kBAAIoX,CAAC,GAAGa,UAAU,CAACjJ,CAAC,CAAChP,CAAD,CAAF,EAAOoa,CAAP,CAAlB;EACA,kBAAIC,EAAE,GAAGrL,CAAC,CAAChP,CAAD,CAAD,GAAOoX,CAAhB;EACA,kBAAIkD,EAAE,GAAGF,CAAC,GAAGhD,CAAb;EACApI,cAAAA,CAAC,CAAChP,CAAD,CAAD,GAAOoX,CAAP;;EACA,kBAAIpX,CAAC,KAAKsL,CAAV,EAAa;EACX8O,gBAAAA,CAAC,GAAG,CAACE,EAAD,GAAM3W,CAAC,CAAC3D,CAAC,GAAG,CAAL,CAAX;EACA2D,gBAAAA,CAAC,CAAC3D,CAAC,GAAG,CAAL,CAAD,GAAWqa,EAAE,GAAG1W,CAAC,CAAC3D,CAAC,GAAG,CAAL,CAAjB;EACD;;EACD,kBAAIgZ,KAAJ,EAAW;EACT,qBAAK,IAAItc,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGqP,CAApB,EAAuBrP,CAAC,EAAxB,EAA4B;EAC1B0a,kBAAAA,CAAC,GAAGiD,EAAE,GAAGf,CAAC,CAACrZ,GAAF,CAAMvD,CAAN,EAASsD,CAAT,CAAL,GAAmBsa,EAAE,GAAGhB,CAAC,CAACrZ,GAAF,CAAMvD,CAAN,EAASuP,CAAC,GAAG,CAAb,CAA5B;EACAqN,kBAAAA,CAAC,CAAClY,GAAF,CAAM1E,CAAN,EAASuP,CAAC,GAAG,CAAb,EAAgB,CAACqO,EAAD,GAAMhB,CAAC,CAACrZ,GAAF,CAAMvD,CAAN,EAASsD,CAAT,CAAN,GAAoBqa,EAAE,GAAGf,CAAC,CAACrZ,GAAF,CAAMvD,CAAN,EAASuP,CAAC,GAAG,CAAb,CAAzC;EACAqN,kBAAAA,CAAC,CAAClY,GAAF,CAAM1E,CAAN,EAASsD,CAAT,EAAYoX,CAAZ;EACD;EACF;EACF;;EACD;EACD;;EACD,aAAK,CAAL;EAAQ;EACN,gBAAIgD,CAAC,GAAGzW,CAAC,CAAC2H,CAAC,GAAG,CAAL,CAAT;EACA3H,YAAAA,CAAC,CAAC2H,CAAC,GAAG,CAAL,CAAD,GAAW,CAAX;;EACA,iBAAK,IAAItL,CAAC,GAAGsL,CAAb,EAAgBtL,CAAC,GAAGiM,CAApB,EAAuBjM,CAAC,EAAxB,EAA4B;EAC1B,kBAAIoX,CAAC,GAAGa,UAAU,CAACjJ,CAAC,CAAChP,CAAD,CAAF,EAAOoa,CAAP,CAAlB;EACA,kBAAIC,EAAE,GAAGrL,CAAC,CAAChP,CAAD,CAAD,GAAOoX,CAAhB;EACA,kBAAIkD,EAAE,GAAGF,CAAC,GAAGhD,CAAb;EACApI,cAAAA,CAAC,CAAChP,CAAD,CAAD,GAAOoX,CAAP;EACAgD,cAAAA,CAAC,GAAG,CAACE,EAAD,GAAM3W,CAAC,CAAC3D,CAAD,CAAX;EACA2D,cAAAA,CAAC,CAAC3D,CAAD,CAAD,GAAOqa,EAAE,GAAG1W,CAAC,CAAC3D,CAAD,CAAb;;EACA,kBAAI8Y,KAAJ,EAAW;EACT,qBAAK,IAAIpc,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGoP,CAApB,EAAuBpP,CAAC,EAAxB,EAA4B;EAC1B0a,kBAAAA,CAAC,GAAGiD,EAAE,GAAGhB,CAAC,CAACpZ,GAAF,CAAMvD,CAAN,EAASsD,CAAT,CAAL,GAAmBsa,EAAE,GAAGjB,CAAC,CAACpZ,GAAF,CAAMvD,CAAN,EAAS4O,CAAC,GAAG,CAAb,CAA5B;EACA+N,kBAAAA,CAAC,CAACjY,GAAF,CAAM1E,CAAN,EAAS4O,CAAC,GAAG,CAAb,EAAgB,CAACgP,EAAD,GAAMjB,CAAC,CAACpZ,GAAF,CAAMvD,CAAN,EAASsD,CAAT,CAAN,GAAoBqa,EAAE,GAAGhB,CAAC,CAACpZ,GAAF,CAAMvD,CAAN,EAAS4O,CAAC,GAAG,CAAb,CAAzC;EACA+N,kBAAAA,CAAC,CAACjY,GAAF,CAAM1E,CAAN,EAASsD,CAAT,EAAYoX,CAAZ;EACD;EACF;EACF;;EACD;EACD;;EACD,aAAK,CAAL;EAAQ;EACN,kBAAM5V,KAAK,GAAGC,IAAI,CAACpF,GAAL,CACZoF,IAAI,CAAC0F,GAAL,CAAS6H,CAAC,CAAC/C,CAAC,GAAG,CAAL,CAAV,CADY,EAEZxK,IAAI,CAAC0F,GAAL,CAAS6H,CAAC,CAAC/C,CAAC,GAAG,CAAL,CAAV,CAFY,EAGZxK,IAAI,CAAC0F,GAAL,CAASxD,CAAC,CAACsI,CAAC,GAAG,CAAL,CAAV,CAHY,EAIZxK,IAAI,CAAC0F,GAAL,CAAS6H,CAAC,CAAC1D,CAAD,CAAV,CAJY,EAKZ7J,IAAI,CAAC0F,GAAL,CAASxD,CAAC,CAAC2H,CAAD,CAAV,CALY,CAAd;EAOA,kBAAMiP,EAAE,GAAGvL,CAAC,CAAC/C,CAAC,GAAG,CAAL,CAAD,GAAWzK,KAAtB;EACA,kBAAMgZ,IAAI,GAAGxL,CAAC,CAAC/C,CAAC,GAAG,CAAL,CAAD,GAAWzK,KAAxB;EACA,kBAAMiZ,IAAI,GAAG9W,CAAC,CAACsI,CAAC,GAAG,CAAL,CAAD,GAAWzK,KAAxB;EACA,kBAAMkZ,EAAE,GAAG1L,CAAC,CAAC1D,CAAD,CAAD,GAAO9J,KAAlB;EACA,kBAAMmZ,EAAE,GAAGhX,CAAC,CAAC2H,CAAD,CAAD,GAAO9J,KAAlB;EACA,kBAAM0R,CAAC,GAAG,CAAC,CAACsH,IAAI,GAAGD,EAAR,KAAeC,IAAI,GAAGD,EAAtB,IAA4BE,IAAI,GAAGA,IAApC,IAA4C,CAAtD;EACA,kBAAMvb,CAAC,GAAGqb,EAAE,GAAGE,IAAL,IAAaF,EAAE,GAAGE,IAAlB,CAAV;EACA,gBAAIG,KAAK,GAAG,CAAZ;;EACA,gBAAI1H,CAAC,KAAK,CAAN,IAAWhU,CAAC,KAAK,CAArB,EAAwB;EACtB,kBAAIgU,CAAC,GAAG,CAAR,EAAW;EACT0H,gBAAAA,KAAK,GAAG,IAAInZ,IAAI,CAACE,IAAL,CAAUuR,CAAC,GAAGA,CAAJ,GAAQhU,CAAlB,CAAZ;EACD,eAFD,MAEO;EACL0b,gBAAAA,KAAK,GAAGnZ,IAAI,CAACE,IAAL,CAAUuR,CAAC,GAAGA,CAAJ,GAAQhU,CAAlB,CAAR;EACD;;EACD0b,cAAAA,KAAK,GAAG1b,CAAC,IAAIgU,CAAC,GAAG0H,KAAR,CAAT;EACD;;EACD,gBAAIR,CAAC,GAAG,CAACM,EAAE,GAAGH,EAAN,KAAaG,EAAE,GAAGH,EAAlB,IAAwBK,KAAhC;EACA,gBAAIC,CAAC,GAAGH,EAAE,GAAGC,EAAb;;EACA,iBAAK,IAAI3a,CAAC,GAAGsL,CAAb,EAAgBtL,CAAC,GAAGiM,CAAC,GAAG,CAAxB,EAA2BjM,CAAC,EAA5B,EAAgC;EAC9B,kBAAIoX,CAAC,GAAGa,UAAU,CAACmC,CAAD,EAAIS,CAAJ,CAAlB;EACA,kBAAIzD,CAAC,KAAK,CAAV,EAAaA,CAAC,GAAGvN,MAAM,CAACoQ,SAAX;EACb,kBAAII,EAAE,GAAGD,CAAC,GAAGhD,CAAb;EACA,kBAAIkD,EAAE,GAAGO,CAAC,GAAGzD,CAAb;;EACA,kBAAIpX,CAAC,KAAKsL,CAAV,EAAa;EACX3H,gBAAAA,CAAC,CAAC3D,CAAC,GAAG,CAAL,CAAD,GAAWoX,CAAX;EACD;;EACDgD,cAAAA,CAAC,GAAGC,EAAE,GAAGrL,CAAC,CAAChP,CAAD,CAAN,GAAYsa,EAAE,GAAG3W,CAAC,CAAC3D,CAAD,CAAtB;EACA2D,cAAAA,CAAC,CAAC3D,CAAD,CAAD,GAAOqa,EAAE,GAAG1W,CAAC,CAAC3D,CAAD,CAAN,GAAYsa,EAAE,GAAGtL,CAAC,CAAChP,CAAD,CAAzB;EACA6a,cAAAA,CAAC,GAAGP,EAAE,GAAGtL,CAAC,CAAChP,CAAC,GAAG,CAAL,CAAV;EACAgP,cAAAA,CAAC,CAAChP,CAAC,GAAG,CAAL,CAAD,GAAWqa,EAAE,GAAGrL,CAAC,CAAChP,CAAC,GAAG,CAAL,CAAjB;;EACA,kBAAIgZ,KAAJ,EAAW;EACT,qBAAK,IAAItc,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGqP,CAApB,EAAuBrP,CAAC,EAAxB,EAA4B;EAC1B0a,kBAAAA,CAAC,GAAGiD,EAAE,GAAGf,CAAC,CAACrZ,GAAF,CAAMvD,CAAN,EAASsD,CAAT,CAAL,GAAmBsa,EAAE,GAAGhB,CAAC,CAACrZ,GAAF,CAAMvD,CAAN,EAASsD,CAAC,GAAG,CAAb,CAA5B;EACAsZ,kBAAAA,CAAC,CAAClY,GAAF,CAAM1E,CAAN,EAASsD,CAAC,GAAG,CAAb,EAAgB,CAACsa,EAAD,GAAMhB,CAAC,CAACrZ,GAAF,CAAMvD,CAAN,EAASsD,CAAT,CAAN,GAAoBqa,EAAE,GAAGf,CAAC,CAACrZ,GAAF,CAAMvD,CAAN,EAASsD,CAAC,GAAG,CAAb,CAAzC;EACAsZ,kBAAAA,CAAC,CAAClY,GAAF,CAAM1E,CAAN,EAASsD,CAAT,EAAYoX,CAAZ;EACD;EACF;;EACDA,cAAAA,CAAC,GAAGa,UAAU,CAACmC,CAAD,EAAIS,CAAJ,CAAd;EACA,kBAAIzD,CAAC,KAAK,CAAV,EAAaA,CAAC,GAAGvN,MAAM,CAACoQ,SAAX;EACbI,cAAAA,EAAE,GAAGD,CAAC,GAAGhD,CAAT;EACAkD,cAAAA,EAAE,GAAGO,CAAC,GAAGzD,CAAT;EACApI,cAAAA,CAAC,CAAChP,CAAD,CAAD,GAAOoX,CAAP;EACAgD,cAAAA,CAAC,GAAGC,EAAE,GAAG1W,CAAC,CAAC3D,CAAD,CAAN,GAAYsa,EAAE,GAAGtL,CAAC,CAAChP,CAAC,GAAG,CAAL,CAAtB;EACAgP,cAAAA,CAAC,CAAChP,CAAC,GAAG,CAAL,CAAD,GAAW,CAACsa,EAAD,GAAM3W,CAAC,CAAC3D,CAAD,CAAP,GAAaqa,EAAE,GAAGrL,CAAC,CAAChP,CAAC,GAAG,CAAL,CAA9B;EACA6a,cAAAA,CAAC,GAAGP,EAAE,GAAG3W,CAAC,CAAC3D,CAAC,GAAG,CAAL,CAAV;EACA2D,cAAAA,CAAC,CAAC3D,CAAC,GAAG,CAAL,CAAD,GAAWqa,EAAE,GAAG1W,CAAC,CAAC3D,CAAC,GAAG,CAAL,CAAjB;;EACA,kBAAI8Y,KAAK,IAAI9Y,CAAC,GAAG8L,CAAC,GAAG,CAArB,EAAwB;EACtB,qBAAK,IAAIpP,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGoP,CAApB,EAAuBpP,CAAC,EAAxB,EAA4B;EAC1B0a,kBAAAA,CAAC,GAAGiD,EAAE,GAAGhB,CAAC,CAACpZ,GAAF,CAAMvD,CAAN,EAASsD,CAAT,CAAL,GAAmBsa,EAAE,GAAGjB,CAAC,CAACpZ,GAAF,CAAMvD,CAAN,EAASsD,CAAC,GAAG,CAAb,CAA5B;EACAqZ,kBAAAA,CAAC,CAACjY,GAAF,CAAM1E,CAAN,EAASsD,CAAC,GAAG,CAAb,EAAgB,CAACsa,EAAD,GAAMjB,CAAC,CAACpZ,GAAF,CAAMvD,CAAN,EAASsD,CAAT,CAAN,GAAoBqa,EAAE,GAAGhB,CAAC,CAACpZ,GAAF,CAAMvD,CAAN,EAASsD,CAAC,GAAG,CAAb,CAAzC;EACAqZ,kBAAAA,CAAC,CAACjY,GAAF,CAAM1E,CAAN,EAASsD,CAAT,EAAYoX,CAAZ;EACD;EACF;EACF;;EACDzT,YAAAA,CAAC,CAACsI,CAAC,GAAG,CAAL,CAAD,GAAWmO,CAAX;AACAU,EACA;EACD;;EACD,aAAK,CAAL;EAAQ;EACN,gBAAI9L,CAAC,CAAC1D,CAAD,CAAD,IAAQ,CAAZ,EAAe;EACb0D,cAAAA,CAAC,CAAC1D,CAAD,CAAD,GAAO0D,CAAC,CAAC1D,CAAD,CAAD,GAAO,CAAP,GAAW,CAAC0D,CAAC,CAAC1D,CAAD,CAAb,GAAmB,CAA1B;;EACA,kBAAI0N,KAAJ,EAAW;EACT,qBAAK,IAAItc,CAAC,GAAG,CAAb,EAAgBA,CAAC,IAAIkd,EAArB,EAAyBld,CAAC,EAA1B,EAA8B;EAC5B4c,kBAAAA,CAAC,CAAClY,GAAF,CAAM1E,CAAN,EAAS4O,CAAT,EAAY,CAACgO,CAAC,CAACrZ,GAAF,CAAMvD,CAAN,EAAS4O,CAAT,CAAb;EACD;EACF;EACF;;EACD,mBAAOA,CAAC,GAAGsO,EAAX,EAAe;EACb,kBAAI5K,CAAC,CAAC1D,CAAD,CAAD,IAAQ0D,CAAC,CAAC1D,CAAC,GAAG,CAAL,CAAb,EAAsB;EACpB;EACD;;EACD,kBAAI8L,CAAC,GAAGpI,CAAC,CAAC1D,CAAD,CAAT;EACA0D,cAAAA,CAAC,CAAC1D,CAAD,CAAD,GAAO0D,CAAC,CAAC1D,CAAC,GAAG,CAAL,CAAR;EACA0D,cAAAA,CAAC,CAAC1D,CAAC,GAAG,CAAL,CAAD,GAAW8L,CAAX;;EACA,kBAAI4B,KAAK,IAAI1N,CAAC,GAAGS,CAAC,GAAG,CAArB,EAAwB;EACtB,qBAAK,IAAIrP,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGqP,CAApB,EAAuBrP,CAAC,EAAxB,EAA4B;EAC1B0a,kBAAAA,CAAC,GAAGkC,CAAC,CAACrZ,GAAF,CAAMvD,CAAN,EAAS4O,CAAC,GAAG,CAAb,CAAJ;EACAgO,kBAAAA,CAAC,CAAClY,GAAF,CAAM1E,CAAN,EAAS4O,CAAC,GAAG,CAAb,EAAgBgO,CAAC,CAACrZ,GAAF,CAAMvD,CAAN,EAAS4O,CAAT,CAAhB;EACAgO,kBAAAA,CAAC,CAAClY,GAAF,CAAM1E,CAAN,EAAS4O,CAAT,EAAY8L,CAAZ;EACD;EACF;;EACD,kBAAI0B,KAAK,IAAIxN,CAAC,GAAGQ,CAAC,GAAG,CAArB,EAAwB;EACtB,qBAAK,IAAIpP,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGoP,CAApB,EAAuBpP,CAAC,EAAxB,EAA4B;EAC1B0a,kBAAAA,CAAC,GAAGiC,CAAC,CAACpZ,GAAF,CAAMvD,CAAN,EAAS4O,CAAC,GAAG,CAAb,CAAJ;EACA+N,kBAAAA,CAAC,CAACjY,GAAF,CAAM1E,CAAN,EAAS4O,CAAC,GAAG,CAAb,EAAgB+N,CAAC,CAACpZ,GAAF,CAAMvD,CAAN,EAAS4O,CAAT,CAAhB;EACA+N,kBAAAA,CAAC,CAACjY,GAAF,CAAM1E,CAAN,EAAS4O,CAAT,EAAY8L,CAAZ;EACD;EACF;;EACD9L,cAAAA,CAAC;EACF;EAEDW,YAAAA,CAAC;EACD;EACD;EACD;EAjJF;EAmJD;;EAED,QAAIgN,OAAJ,EAAa;EACX,UAAIrN,GAAG,GAAG0N,CAAV;EACAA,MAAAA,CAAC,GAAGD,CAAJ;EACAA,MAAAA,CAAC,GAAGzN,GAAJ;EACD;;EAED,SAAKE,CAAL,GAASA,CAAT;EACA,SAAKC,CAAL,GAASA,CAAT;EACA,SAAKiD,CAAL,GAASA,CAAT;EACA,SAAKqK,CAAL,GAASA,CAAT;EACA,SAAKC,CAAL,GAASA,CAAT;EACD;;EAED5B,EAAAA,KAAK,CAAChY,KAAD,EAAQ;EACX,QAAIqb,CAAC,GAAGrb,KAAR;EACA,QAAIiE,CAAC,GAAG,KAAKqX,SAAb;EACA,QAAIC,KAAK,GAAG,KAAKjM,CAAL,CAAOvS,MAAnB;EACA,QAAIye,EAAE,GAAGnX,MAAM,CAACwF,KAAP,CAAa0R,KAAb,EAAoBA,KAApB,CAAT;;EAEA,SAAK,IAAIve,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGue,KAApB,EAA2Bve,CAAC,EAA5B,EAAgC;EAC9B,UAAI+E,IAAI,CAAC0F,GAAL,CAAS,KAAK6H,CAAL,CAAOtS,CAAP,CAAT,KAAuBiH,CAA3B,EAA8B;EAC5BuX,QAAAA,EAAE,CAAC9Z,GAAH,CAAO1E,CAAP,EAAUA,CAAV,EAAa,CAAb;EACD,OAFD,MAEO;EACLwe,QAAAA,EAAE,CAAC9Z,GAAH,CAAO1E,CAAP,EAAUA,CAAV,EAAa,IAAI,KAAKsS,CAAL,CAAOtS,CAAP,CAAjB;EACD;EACF;;EAED,QAAI2c,CAAC,GAAG,KAAKA,CAAb;EACA,QAAIC,CAAC,GAAG,KAAK6B,oBAAb;EAEA,QAAIC,EAAE,GAAG9B,CAAC,CAAC1K,IAAF,CAAOsM,EAAP,CAAT;EACA,QAAIG,KAAK,GAAG/B,CAAC,CAACvb,IAAd;EACA,QAAIud,KAAK,GAAGjC,CAAC,CAACtb,IAAd;EACA,QAAIwd,GAAG,GAAGxX,MAAM,CAACwF,KAAP,CAAa8R,KAAb,EAAoBC,KAApB,CAAV;;EAEA,SAAK,IAAI5e,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG2e,KAApB,EAA2B3e,CAAC,EAA5B,EAAgC;EAC9B,WAAK,IAAIsD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGsb,KAApB,EAA2Btb,CAAC,EAA5B,EAAgC;EAC9B,YAAID,GAAG,GAAG,CAAV;;EACA,aAAK,IAAIuL,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG2P,KAApB,EAA2B3P,CAAC,EAA5B,EAAgC;EAC9BvL,UAAAA,GAAG,IAAIqb,EAAE,CAACnb,GAAH,CAAOvD,CAAP,EAAU4O,CAAV,IAAe+N,CAAC,CAACpZ,GAAF,CAAMD,CAAN,EAASsL,CAAT,CAAtB;EACD;;EACDiQ,QAAAA,GAAG,CAACna,GAAJ,CAAQ1E,CAAR,EAAWsD,CAAX,EAAcD,GAAd;EACD;EACF;;EAED,WAAOwb,GAAG,CAAC3M,IAAJ,CAASmM,CAAT,CAAP;EACD;;EAEDS,EAAAA,gBAAgB,CAAC9b,KAAD,EAAQ;EACtB,WAAO,KAAKgY,KAAL,CAAW3T,MAAM,CAACkG,IAAP,CAAYvK,KAAZ,CAAX,CAAP;EACD;;EAED+b,EAAAA,OAAO,GAAG;EACR,QAAInC,CAAC,GAAG,KAAKA,CAAb;EACA,QAAI3V,CAAC,GAAG,KAAKqX,SAAb;EACA,QAAIK,KAAK,GAAG/B,CAAC,CAACvb,IAAd;EACA,QAAI2d,KAAK,GAAGpC,CAAC,CAACrb,OAAd;EACA,QAAI2Z,CAAC,GAAG,IAAI7T,MAAJ,CAAWsX,KAAX,EAAkB,KAAKrM,CAAL,CAAOvS,MAAzB,CAAR;;EAEA,SAAK,IAAIC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG2e,KAApB,EAA2B3e,CAAC,EAA5B,EAAgC;EAC9B,WAAK,IAAIsD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG0b,KAApB,EAA2B1b,CAAC,EAA5B,EAAgC;EAC9B,YAAIyB,IAAI,CAAC0F,GAAL,CAAS,KAAK6H,CAAL,CAAOhP,CAAP,CAAT,IAAsB2D,CAA1B,EAA6B;EAC3BiU,UAAAA,CAAC,CAACxW,GAAF,CAAM1E,CAAN,EAASsD,CAAT,EAAYsZ,CAAC,CAACrZ,GAAF,CAAMvD,CAAN,EAASsD,CAAT,IAAc,KAAKgP,CAAL,CAAOhP,CAAP,CAA1B;EACD;EACF;EACF;;EAED,QAAIqZ,CAAC,GAAG,KAAKA,CAAb;EAEA,QAAIiC,KAAK,GAAGjC,CAAC,CAACtb,IAAd;EACA,QAAI4d,KAAK,GAAGtC,CAAC,CAACpb,OAAd;EACA,QAAI8c,CAAC,GAAG,IAAIhX,MAAJ,CAAWsX,KAAX,EAAkBC,KAAlB,CAAR;;EAEA,SAAK,IAAI5e,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG2e,KAApB,EAA2B3e,CAAC,EAA5B,EAAgC;EAC9B,WAAK,IAAIsD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGsb,KAApB,EAA2Btb,CAAC,EAA5B,EAAgC;EAC9B,YAAID,GAAG,GAAG,CAAV;;EACA,aAAK,IAAIuL,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGqQ,KAApB,EAA2BrQ,CAAC,EAA5B,EAAgC;EAC9BvL,UAAAA,GAAG,IAAI6X,CAAC,CAAC3X,GAAF,CAAMvD,CAAN,EAAS4O,CAAT,IAAc+N,CAAC,CAACpZ,GAAF,CAAMD,CAAN,EAASsL,CAAT,CAArB;EACD;;EACDyP,QAAAA,CAAC,CAAC3Z,GAAF,CAAM1E,CAAN,EAASsD,CAAT,EAAYD,GAAZ;EACD;EACF;;EAED,WAAOgb,CAAP;EACD;;EAED,MAAIa,SAAJ,GAAgB;EACd,WAAO,KAAK5M,CAAL,CAAO,CAAP,IAAY,KAAKA,CAAL,CAAOvN,IAAI,CAAC9E,GAAL,CAAS,KAAKmP,CAAd,EAAiB,KAAKC,CAAtB,IAA2B,CAAlC,CAAnB;EACD;;EAED,MAAI8P,KAAJ,GAAY;EACV,WAAO,KAAK7M,CAAL,CAAO,CAAP,CAAP;EACD;;EAED,MAAI8M,IAAJ,GAAW;EACT,QAAIC,GAAG,GAAGta,IAAI,CAACpF,GAAL,CAAS,KAAKyP,CAAd,EAAiB,KAAKC,CAAtB,IAA2B,KAAKiD,CAAL,CAAO,CAAP,CAA3B,GAAuCnF,MAAM,CAACiQ,OAAxD;EACA,QAAI/a,CAAC,GAAG,CAAR;EACA,QAAIiQ,CAAC,GAAG,KAAKA,CAAb;;EACA,SAAK,IAAItS,CAAC,GAAG,CAAR,EAAWsf,EAAE,GAAGhN,CAAC,CAACvS,MAAvB,EAA+BC,CAAC,GAAGsf,EAAnC,EAAuCtf,CAAC,EAAxC,EAA4C;EAC1C,UAAIsS,CAAC,CAACtS,CAAD,CAAD,GAAOqf,GAAX,EAAgB;EACdhd,QAAAA,CAAC;EACF;EACF;;EACD,WAAOA,CAAP;EACD;;EAED,MAAIsW,QAAJ,GAAe;EACb,WAAOpY,KAAK,CAAC+B,IAAN,CAAW,KAAKgQ,CAAhB,CAAP;EACD;;EAED,MAAIgM,SAAJ,GAAgB;EACd,WAAQnR,MAAM,CAACiQ,OAAP,GAAiB,CAAlB,GAAuBrY,IAAI,CAACpF,GAAL,CAAS,KAAKyP,CAAd,EAAiB,KAAKC,CAAtB,CAAvB,GAAkD,KAAKiD,CAAL,CAAO,CAAP,CAAzD;EACD;;EAED,MAAIiN,mBAAJ,GAA0B;EACxB,WAAO,KAAK5C,CAAZ;EACD;;EAED,MAAI8B,oBAAJ,GAA2B;EACzB,WAAO,KAAK7B,CAAZ;EACD;;EAED,MAAI4C,cAAJ,GAAqB;EACnB,WAAOnY,MAAM,CAACkG,IAAP,CAAY,KAAK+E,CAAjB,CAAP;EACD;;EApgB6C;;ECCzC,SAASyM,OAAT,CAAiB7d,MAAjB,EAAyC;EAAA,MAAhBue,MAAgB,uEAAP,KAAO;EAC9Cve,EAAAA,MAAM,GAAGkZ,eAAe,CAAC3S,WAAhB,CAA4BvG,MAA5B,CAAT;;EACA,MAAIue,MAAJ,EAAY;EACV,WAAO,IAAIzD,0BAAJ,CAA+B9a,MAA/B,EAAuC6d,OAAvC,EAAP;EACD,GAFD,MAEO;EACL,WAAO/D,KAAK,CAAC9Z,MAAD,EAASmG,MAAM,CAACiG,GAAP,CAAWpM,MAAM,CAACG,IAAlB,CAAT,CAAZ;EACD;EACF;AAED,EAAO,SAAS2Z,KAAT,CAAe0E,YAAf,EAA6BC,aAA7B,EAA4D;EAAA,MAAhBF,MAAgB,uEAAP,KAAO;EACjEC,EAAAA,YAAY,GAAGtF,eAAe,CAAC3S,WAAhB,CAA4BiY,YAA5B,CAAf;EACAC,EAAAA,aAAa,GAAGvF,eAAe,CAAC3S,WAAhB,CAA4BkY,aAA5B,CAAhB;;EACA,MAAIF,MAAJ,EAAY;EACV,WAAO,IAAIzD,0BAAJ,CAA+B0D,YAA/B,EAA6C1E,KAA7C,CAAmD2E,aAAnD,CAAP;EACD,GAFD,MAEO;EACL,WAAOD,YAAY,CAACpR,QAAb,KACH,IAAIgM,eAAJ,CAAoBoF,YAApB,EAAkC1E,KAAlC,CAAwC2E,aAAxC,CADG,GAEH,IAAInE,eAAJ,CAAoBkE,YAApB,EAAkC1E,KAAlC,CAAwC2E,aAAxC,CAFJ;EAGD;EACF;;ECrBM,SAASxE,WAAT,CAAqBja,MAArB,EAA6B;EAClCA,EAAAA,MAAM,GAAGmG,MAAM,CAACI,WAAP,CAAmBvG,MAAnB,CAAT;;EACA,MAAIA,MAAM,CAACoN,QAAP,EAAJ,EAAuB;EACrB,QAAIiI,CAAJ,EAAOC,CAAP,EAAUhU,CAAV,EAAaod,CAAb;;EACA,QAAI1e,MAAM,CAACK,OAAP,KAAmB,CAAvB,EAA0B;EACxB;EACAgV,MAAAA,CAAC,GAAGrV,MAAM,CAACqC,GAAP,CAAW,CAAX,EAAc,CAAd,CAAJ;EACAiT,MAAAA,CAAC,GAAGtV,MAAM,CAACqC,GAAP,CAAW,CAAX,EAAc,CAAd,CAAJ;EACAf,MAAAA,CAAC,GAAGtB,MAAM,CAACqC,GAAP,CAAW,CAAX,EAAc,CAAd,CAAJ;EACAqc,MAAAA,CAAC,GAAG1e,MAAM,CAACqC,GAAP,CAAW,CAAX,EAAc,CAAd,CAAJ;EAEA,aAAOgT,CAAC,GAAGqJ,CAAJ,GAAQpJ,CAAC,GAAGhU,CAAnB;EACD,KARD,MAQO,IAAItB,MAAM,CAACK,OAAP,KAAmB,CAAvB,EAA0B;EAC/B;EACA,UAAIse,UAAJ,EAAgBC,UAAhB,EAA4BC,UAA5B;EACAF,MAAAA,UAAU,GAAG,IAAI9F,mBAAJ,CAAwB7Y,MAAxB,EAAgC,CAAC,CAAD,EAAI,CAAJ,CAAhC,EAAwC,CAAC,CAAD,EAAI,CAAJ,CAAxC,CAAb;EACA4e,MAAAA,UAAU,GAAG,IAAI/F,mBAAJ,CAAwB7Y,MAAxB,EAAgC,CAAC,CAAD,EAAI,CAAJ,CAAhC,EAAwC,CAAC,CAAD,EAAI,CAAJ,CAAxC,CAAb;EACA6e,MAAAA,UAAU,GAAG,IAAIhG,mBAAJ,CAAwB7Y,MAAxB,EAAgC,CAAC,CAAD,EAAI,CAAJ,CAAhC,EAAwC,CAAC,CAAD,EAAI,CAAJ,CAAxC,CAAb;EACAqV,MAAAA,CAAC,GAAGrV,MAAM,CAACqC,GAAP,CAAW,CAAX,EAAc,CAAd,CAAJ;EACAiT,MAAAA,CAAC,GAAGtV,MAAM,CAACqC,GAAP,CAAW,CAAX,EAAc,CAAd,CAAJ;EACAf,MAAAA,CAAC,GAAGtB,MAAM,CAACqC,GAAP,CAAW,CAAX,EAAc,CAAd,CAAJ;EAEA,aACEgT,CAAC,GAAG4E,WAAW,CAAC0E,UAAD,CAAf,GACArJ,CAAC,GAAG2E,WAAW,CAAC2E,UAAD,CADf,GAEAtd,CAAC,GAAG2Y,WAAW,CAAC4E,UAAD,CAHjB;EAKD,KAfM,MAeA;EACL;EACA,aAAO,IAAIzF,eAAJ,CAAoBpZ,MAApB,EAA4Bia,WAAnC;EACD;EACF,GA7BD,MA6BO;EACL,UAAM1L,KAAK,CAAC,wDAAD,CAAX;EACD;EACF;;ECnCD,SAASuQ,MAAT,CAAgB3Q,CAAhB,EAAmB4Q,SAAnB,EAA8B;EAC5B,MAAIC,KAAK,GAAG,EAAZ;;EACA,OAAK,IAAIlgB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGqP,CAApB,EAAuBrP,CAAC,EAAxB,EAA4B;EAC1B,QAAIA,CAAC,KAAKigB,SAAV,EAAqB;EACnBC,MAAAA,KAAK,CAAChd,IAAN,CAAWlD,CAAX;EACD;EACF;;EACD,SAAOkgB,KAAP;EACD;;EAED,SAASC,kBAAT,CACEC,KADF,EAEElf,MAFF,EAGEC,KAHF,EAME;EAAA,MAFAkf,cAEA,uEAFiB,MAEjB;EAAA,MADAC,cACA,uEADiB,MACjB;;EACA,MAAIF,KAAK,GAAGE,cAAZ,EAA4B;EAC1B,WAAO,IAAI/f,KAAJ,CAAUW,MAAM,CAACG,IAAP,GAAc,CAAxB,EAA2B0L,IAA3B,CAAgC,CAAhC,CAAP;EACD,GAFD,MAEO;EACL,QAAIwT,WAAW,GAAGrf,MAAM,CAACkY,MAAP,CAAcjY,KAAd,EAAqB,CAAC,CAAD,CAArB,CAAlB;;EACA,SAAK,IAAInB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGugB,WAAW,CAAClf,IAAhC,EAAsCrB,CAAC,EAAvC,EAA2C;EACzC,UAAI+E,IAAI,CAAC0F,GAAL,CAAS8V,WAAW,CAAChd,GAAZ,CAAgBvD,CAAhB,EAAmB,CAAnB,CAAT,IAAkCqgB,cAAtC,EAAsD;EACpDE,QAAAA,WAAW,CAAC7b,GAAZ,CAAgB1E,CAAhB,EAAmB,CAAnB,EAAsB,CAAtB;EACD;EACF;;EACD,WAAOugB,WAAW,CAAC7e,SAAZ,EAAP;EACD;EACF;;AAED,EAAO,SAAS8e,kBAAT,CAA4Btf,MAA5B,EAAkD;EAAA,MAAdf,OAAc,uEAAJ,EAAI;EACvD,QAAM;EAAEkgB,IAAAA,cAAc,GAAG,MAAnB;EAA2BC,IAAAA,cAAc,GAAG;EAA5C,MAAuDngB,OAA7D;EACAe,EAAAA,MAAM,GAAGmG,MAAM,CAACI,WAAP,CAAmBvG,MAAnB,CAAT;EAEA,MAAImO,CAAC,GAAGnO,MAAM,CAACG,IAAf;EACA,MAAIof,OAAO,GAAG,IAAIpZ,MAAJ,CAAWgI,CAAX,EAAcA,CAAd,CAAd;;EAEA,OAAK,IAAIrP,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGqP,CAApB,EAAuBrP,CAAC,EAAxB,EAA4B;EAC1B,QAAIwW,CAAC,GAAGnP,MAAM,CAACuF,YAAP,CAAoB1L,MAAM,CAAC0O,MAAP,CAAc5P,CAAd,CAApB,CAAR;EACA,QAAI0gB,IAAI,GAAGxf,MAAM,CAAC2W,YAAP,CAAoBmI,MAAM,CAAC3Q,CAAD,EAAIrP,CAAJ,CAA1B,EAAkCuX,SAAlC,EAAX;EACA,QAAIoJ,GAAG,GAAG,IAAI3E,0BAAJ,CAA+B0E,IAA/B,CAAV;EACA,QAAIrc,CAAC,GAAGsc,GAAG,CAAC3F,KAAJ,CAAUxE,CAAV,CAAR;EACA,QAAI4J,KAAK,GAAG/Y,MAAM,CAACM,GAAP,CAAW6O,CAAX,EAAckK,IAAI,CAACxO,IAAL,CAAU7N,CAAV,CAAd,EACToG,GADS,GAET9K,GAFS,EAAZ;EAGA8gB,IAAAA,OAAO,CAAC3Q,MAAR,CACE9P,CADF,EAEEmgB,kBAAkB,CAACC,KAAD,EAAQ/b,CAAR,EAAWrE,CAAX,EAAcqgB,cAAd,EAA8BC,cAA9B,CAFpB;EAID;;EACD,SAAOG,OAAP;EACD;;ECnDM,SAASG,aAAT,CAAuB1f,MAAvB,EAA2D;EAAA,MAA5Bod,SAA4B,uEAAhBnR,MAAM,CAACiQ,OAAS;EAChElc,EAAAA,MAAM,GAAGmG,MAAM,CAACI,WAAP,CAAmBvG,MAAnB,CAAT;EACA,MAAI2f,WAAW,GAAG,IAAIC,0BAAJ,CAAQ5f,MAAR,EAAgB;EAAEib,IAAAA,aAAa,EAAE;EAAjB,GAAhB,CAAlB;EAEA,MAAIQ,CAAC,GAAGkE,WAAW,CAACtB,mBAApB;EACA,MAAI3C,CAAC,GAAGiE,WAAW,CAACpC,oBAApB;EACA,MAAInM,CAAC,GAAGuO,WAAW,CAAClI,QAApB;;EAEA,OAAK,IAAI3Y,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGsS,CAAC,CAACvS,MAAtB,EAA8BC,CAAC,EAA/B,EAAmC;EACjC,QAAI+E,IAAI,CAAC0F,GAAL,CAAS6H,CAAC,CAACtS,CAAD,CAAV,IAAiBse,SAArB,EAAgC;EAC9BhM,MAAAA,CAAC,CAACtS,CAAD,CAAD,GAAO,MAAMsS,CAAC,CAACtS,CAAD,CAAd;EACD,KAFD,MAEO;EACLsS,MAAAA,CAAC,CAACtS,CAAD,CAAD,GAAO,GAAP;EACD;EACF;;EAED,SAAO4c,CAAC,CAAC1K,IAAF,CAAO7K,MAAM,CAACkG,IAAP,CAAY+E,CAAZ,EAAeJ,IAAf,CAAoByK,CAAC,CAACpF,SAAF,EAApB,CAAP,CAAP;EACD;;EClBM,SAASwJ,UAAT,CAAoBC,OAApB,EAA8D;EAAA,MAAjCC,OAAiC,uEAAvBD,OAAuB;EAAA,MAAd7gB,OAAc,uEAAJ,EAAI;EACnE6gB,EAAAA,OAAO,GAAG3Z,MAAM,CAACI,WAAP,CAAmBuZ,OAAnB,CAAV;EACA,MAAIE,OAAO,GAAG,KAAd;;EACA,MAAI,OAAOD,OAAP,KAAmB,QAAnB,IAA+B,CAAC5Z,MAAM,CAACuG,QAAP,CAAgBqT,OAAhB,CAAhC,IAA4D,CAAC1gB,KAAK,CAACV,OAAN,CAAcohB,OAAd,CAAjE,EAAyF;EACvF9gB,IAAAA,OAAO,GAAG8gB,OAAV;EACAA,IAAAA,OAAO,GAAGD,OAAV;EACAE,IAAAA,OAAO,GAAG,IAAV;EACD,GAJD,MAIO;EACLD,IAAAA,OAAO,GAAG5Z,MAAM,CAACI,WAAP,CAAmBwZ,OAAnB,CAAV;EACD;;EACD,MAAID,OAAO,CAAC3f,IAAR,KAAiB4f,OAAO,CAAC5f,IAA7B,EAAmC;EACjC,UAAM,IAAIvB,SAAJ,CAAc,iDAAd,CAAN;EACD;;EACD,QAAM;EAAEyY,IAAAA,MAAM,GAAG;EAAX,MAAoBpY,OAA1B;;EACA,MAAIoY,MAAJ,EAAY;EACVyI,IAAAA,OAAO,GAAGA,OAAO,CAACzI,MAAR,CAAe,QAAf,CAAV;;EACA,QAAI,CAAC2I,OAAL,EAAc;EACZD,MAAAA,OAAO,GAAGA,OAAO,CAAC1I,MAAR,CAAe,QAAf,CAAV;EACD;EACF;;EACD,QAAMwI,UAAU,GAAGC,OAAO,CAACzJ,SAAR,GAAoBrF,IAApB,CAAyB+O,OAAzB,CAAnB;;EACA,OAAK,IAAIjhB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG+gB,UAAU,CAAC1f,IAA/B,EAAqCrB,CAAC,EAAtC,EAA0C;EACxC,SAAK,IAAIsD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGyd,UAAU,CAACxf,OAA/B,EAAwC+B,CAAC,EAAzC,EAA6C;EAC3Cyd,MAAAA,UAAU,CAACrc,GAAX,CAAe1E,CAAf,EAAkBsD,CAAlB,EAAqByd,UAAU,CAACxd,GAAX,CAAevD,CAAf,EAAkBsD,CAAlB,KAAwB,KAAK0d,OAAO,CAAC3f,IAAR,GAAe,CAApB,CAAxB,CAArB;EACD;EACF;;EACD,SAAO0f,UAAP;EACD;;EC3BM,SAASI,WAAT,CAAqBH,OAArB,EAA+D;EAAA,MAAjCC,OAAiC,uEAAvBD,OAAuB;EAAA,MAAd7gB,OAAc,uEAAJ,EAAI;EACpE6gB,EAAAA,OAAO,GAAG3Z,MAAM,CAACI,WAAP,CAAmBuZ,OAAnB,CAAV;EACA,MAAIE,OAAO,GAAG,KAAd;;EACA,MAAI,OAAOD,OAAP,KAAmB,QAAnB,IAA+B,CAAC5Z,MAAM,CAACuG,QAAP,CAAgBqT,OAAhB,CAAhC,IAA4D,CAAC1gB,KAAK,CAACV,OAAN,CAAcohB,OAAd,CAAjE,EAAyF;EACvF9gB,IAAAA,OAAO,GAAG8gB,OAAV;EACAA,IAAAA,OAAO,GAAGD,OAAV;EACAE,IAAAA,OAAO,GAAG,IAAV;EACD,GAJD,MAIO;EACLD,IAAAA,OAAO,GAAG5Z,MAAM,CAACI,WAAP,CAAmBwZ,OAAnB,CAAV;EACD;;EACD,MAAID,OAAO,CAAC3f,IAAR,KAAiB4f,OAAO,CAAC5f,IAA7B,EAAmC;EACjC,UAAM,IAAIvB,SAAJ,CAAc,iDAAd,CAAN;EACD;;EAED,QAAM;EAAEyY,IAAAA,MAAM,GAAG,IAAX;EAAiBzT,IAAAA,KAAK,GAAG;EAAzB,MAAkC3E,OAAxC;;EACA,MAAIoY,MAAJ,EAAY;EACVyI,IAAAA,OAAO,CAACzI,MAAR,CAAe,QAAf;;EACA,QAAI,CAAC2I,OAAL,EAAc;EACZD,MAAAA,OAAO,CAAC1I,MAAR,CAAe,QAAf;EACD;EACF;;EACD,MAAIzT,KAAJ,EAAW;EACTkc,IAAAA,OAAO,CAAClc,KAAR,CAAc,QAAd;;EACA,QAAI,CAACoc,OAAL,EAAc;EACZD,MAAAA,OAAO,CAACnc,KAAR,CAAc,QAAd;EACD;EACF;;EAED,QAAMsc,GAAG,GAAGJ,OAAO,CAAC1I,iBAAR,CAA0B,QAA1B,EAAoC;EAAEvU,IAAAA,QAAQ,EAAE;EAAZ,GAApC,CAAZ;EACA,QAAMsd,GAAG,GAAGH,OAAO,GAAGE,GAAH,GAASH,OAAO,CAAC3I,iBAAR,CAA0B,QAA1B,EAAoC;EAAEvU,IAAAA,QAAQ,EAAE;EAAZ,GAApC,CAA5B;EAEA,QAAMod,WAAW,GAAGH,OAAO,CAACzJ,SAAR,GAAoBrF,IAApB,CAAyB+O,OAAzB,CAApB;;EACA,OAAK,IAAIjhB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGmhB,WAAW,CAAC9f,IAAhC,EAAsCrB,CAAC,EAAvC,EAA2C;EACzC,SAAK,IAAIsD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG6d,WAAW,CAAC5f,OAAhC,EAAyC+B,CAAC,EAA1C,EAA8C;EAC5C6d,MAAAA,WAAW,CAACzc,GAAZ,CAAgB1E,CAAhB,EAAmBsD,CAAnB,EAAsB6d,WAAW,CAAC5d,GAAZ,CAAgBvD,CAAhB,EAAmBsD,CAAnB,KAAyB,KAAK8d,GAAG,CAACphB,CAAD,CAAH,GAASqhB,GAAG,CAAC/d,CAAD,CAAjB,CAAzB,KAAmD,KAAK0d,OAAO,CAAC3f,IAAR,GAAe,CAApB,CAAnD,CAAtB;EACD;EACF;;EACD,SAAO8f,WAAP;EACD;;ECnCc,MAAMG,uBAAN,CAA8B;EAC3C1b,EAAAA,WAAW,CAAC1E,MAAD,EAAuB;EAAA,QAAdf,OAAc,uEAAJ,EAAI;EAChC,UAAM;EAAEohB,MAAAA,eAAe,GAAG;EAApB,QAA8BphB,OAApC;EAEAe,IAAAA,MAAM,GAAGkZ,eAAe,CAAC3S,WAAhB,CAA4BvG,MAA5B,CAAT;;EACA,QAAI,CAACA,MAAM,CAACoN,QAAP,EAAL,EAAwB;EACtB,YAAM,IAAImB,KAAJ,CAAU,+BAAV,CAAN;EACD;;EAED,QAAIJ,CAAC,GAAGnO,MAAM,CAACK,OAAf;EACA,QAAIqb,CAAC,GAAG,IAAIvV,MAAJ,CAAWgI,CAAX,EAAcA,CAAd,CAAR;EACA,QAAIuQ,CAAC,GAAG,IAAIvN,YAAJ,CAAiBhD,CAAjB,CAAR;EACA,QAAIpI,CAAC,GAAG,IAAIoL,YAAJ,CAAiBhD,CAAjB,CAAR;EACA,QAAIrM,KAAK,GAAG9B,MAAZ;EACA,QAAIlB,CAAJ,EAAOsD,CAAP;EAEA,QAAIiL,WAAW,GAAG,KAAlB;;EACA,QAAIgT,eAAJ,EAAqB;EACnBhT,MAAAA,WAAW,GAAG,IAAd;EACD,KAFD,MAEO;EACLA,MAAAA,WAAW,GAAGrN,MAAM,CAACqN,WAAP,EAAd;EACD;;EAED,QAAIA,WAAJ,EAAiB;EACf,WAAKvO,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGqP,CAAhB,EAAmBrP,CAAC,EAApB,EAAwB;EACtB,aAAKsD,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAG+L,CAAhB,EAAmB/L,CAAC,EAApB,EAAwB;EACtBsZ,UAAAA,CAAC,CAAClY,GAAF,CAAM1E,CAAN,EAASsD,CAAT,EAAYN,KAAK,CAACO,GAAN,CAAUvD,CAAV,EAAasD,CAAb,CAAZ;EACD;EACF;;EACDke,MAAAA,KAAK,CAACnS,CAAD,EAAIpI,CAAJ,EAAO2Y,CAAP,EAAUhD,CAAV,CAAL;EACA6E,MAAAA,IAAI,CAACpS,CAAD,EAAIpI,CAAJ,EAAO2Y,CAAP,EAAUhD,CAAV,CAAJ;EACD,KARD,MAQO;EACL,UAAI8E,CAAC,GAAG,IAAIra,MAAJ,CAAWgI,CAAX,EAAcA,CAAd,CAAR;EACA,UAAIsS,GAAG,GAAG,IAAItP,YAAJ,CAAiBhD,CAAjB,CAAV;;EACA,WAAK/L,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAG+L,CAAhB,EAAmB/L,CAAC,EAApB,EAAwB;EACtB,aAAKtD,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGqP,CAAhB,EAAmBrP,CAAC,EAApB,EAAwB;EACtB0hB,UAAAA,CAAC,CAAChd,GAAF,CAAM1E,CAAN,EAASsD,CAAT,EAAYN,KAAK,CAACO,GAAN,CAAUvD,CAAV,EAAasD,CAAb,CAAZ;EACD;EACF;;EACDse,MAAAA,MAAM,CAACvS,CAAD,EAAIqS,CAAJ,EAAOC,GAAP,EAAY/E,CAAZ,CAAN;EACAiF,MAAAA,IAAI,CAACxS,CAAD,EAAIpI,CAAJ,EAAO2Y,CAAP,EAAUhD,CAAV,EAAa8E,CAAb,CAAJ;EACD;;EAED,SAAKrS,CAAL,GAASA,CAAT;EACA,SAAKpI,CAAL,GAASA,CAAT;EACA,SAAK2Y,CAAL,GAASA,CAAT;EACA,SAAKhD,CAAL,GAASA,CAAT;EACD;;EAED,MAAIkF,eAAJ,GAAsB;EACpB,WAAOvhB,KAAK,CAAC+B,IAAN,CAAW,KAAKsd,CAAhB,CAAP;EACD;;EAED,MAAImC,oBAAJ,GAA2B;EACzB,WAAOxhB,KAAK,CAAC+B,IAAN,CAAW,KAAK2E,CAAhB,CAAP;EACD;;EAED,MAAI+a,iBAAJ,GAAwB;EACtB,WAAO,KAAKpF,CAAZ;EACD;;EAED,MAAI4C,cAAJ,GAAqB;EACnB,QAAInQ,CAAC,GAAG,KAAKA,CAAb;EACA,QAAIpI,CAAC,GAAG,KAAKA,CAAb;EACA,QAAI2Y,CAAC,GAAG,KAAKA,CAAb;EACA,QAAI1E,CAAC,GAAG,IAAI7T,MAAJ,CAAWgI,CAAX,EAAcA,CAAd,CAAR;EACA,QAAIrP,CAAJ,EAAOsD,CAAP;;EACA,SAAKtD,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGqP,CAAhB,EAAmBrP,CAAC,EAApB,EAAwB;EACtB,WAAKsD,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAG+L,CAAhB,EAAmB/L,CAAC,EAApB,EAAwB;EACtB4X,QAAAA,CAAC,CAACxW,GAAF,CAAM1E,CAAN,EAASsD,CAAT,EAAY,CAAZ;EACD;;EACD4X,MAAAA,CAAC,CAACxW,GAAF,CAAM1E,CAAN,EAASA,CAAT,EAAY4f,CAAC,CAAC5f,CAAD,CAAb;;EACA,UAAIiH,CAAC,CAACjH,CAAD,CAAD,GAAO,CAAX,EAAc;EACZkb,QAAAA,CAAC,CAACxW,GAAF,CAAM1E,CAAN,EAASA,CAAC,GAAG,CAAb,EAAgBiH,CAAC,CAACjH,CAAD,CAAjB;EACD,OAFD,MAEO,IAAIiH,CAAC,CAACjH,CAAD,CAAD,GAAO,CAAX,EAAc;EACnBkb,QAAAA,CAAC,CAACxW,GAAF,CAAM1E,CAAN,EAASA,CAAC,GAAG,CAAb,EAAgBiH,CAAC,CAACjH,CAAD,CAAjB;EACD;EACF;;EACD,WAAOkb,CAAP;EACD;;EA/E0C;;EAkF7C,SAASsG,KAAT,CAAenS,CAAf,EAAkBpI,CAAlB,EAAqB2Y,CAArB,EAAwBhD,CAAxB,EAA2B;EACzB,MAAIc,CAAJ,EAAOS,CAAP,EAAUpP,CAAV,EAAa/O,CAAb,EAAgBsD,CAAhB,EAAmBsL,CAAnB,EAAsBqT,EAAtB,EAA0Bnd,KAA1B;;EAEA,OAAKxB,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAG+L,CAAhB,EAAmB/L,CAAC,EAApB,EAAwB;EACtBsc,IAAAA,CAAC,CAACtc,CAAD,CAAD,GAAOsZ,CAAC,CAACrZ,GAAF,CAAM8L,CAAC,GAAG,CAAV,EAAa/L,CAAb,CAAP;EACD;;EAED,OAAKtD,CAAC,GAAGqP,CAAC,GAAG,CAAb,EAAgBrP,CAAC,GAAG,CAApB,EAAuBA,CAAC,EAAxB,EAA4B;EAC1B8E,IAAAA,KAAK,GAAG,CAAR;EACAiK,IAAAA,CAAC,GAAG,CAAJ;;EACA,SAAKH,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAG5O,CAAhB,EAAmB4O,CAAC,EAApB,EAAwB;EACtB9J,MAAAA,KAAK,GAAGA,KAAK,GAAGC,IAAI,CAAC0F,GAAL,CAASmV,CAAC,CAAChR,CAAD,CAAV,CAAhB;EACD;;EAED,QAAI9J,KAAK,KAAK,CAAd,EAAiB;EACfmC,MAAAA,CAAC,CAACjH,CAAD,CAAD,GAAO4f,CAAC,CAAC5f,CAAC,GAAG,CAAL,CAAR;;EACA,WAAKsD,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGtD,CAAhB,EAAmBsD,CAAC,EAApB,EAAwB;EACtBsc,QAAAA,CAAC,CAACtc,CAAD,CAAD,GAAOsZ,CAAC,CAACrZ,GAAF,CAAMvD,CAAC,GAAG,CAAV,EAAasD,CAAb,CAAP;EACAsZ,QAAAA,CAAC,CAAClY,GAAF,CAAM1E,CAAN,EAASsD,CAAT,EAAY,CAAZ;EACAsZ,QAAAA,CAAC,CAAClY,GAAF,CAAMpB,CAAN,EAAStD,CAAT,EAAY,CAAZ;EACD;EACF,KAPD,MAOO;EACL,WAAK4O,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAG5O,CAAhB,EAAmB4O,CAAC,EAApB,EAAwB;EACtBgR,QAAAA,CAAC,CAAChR,CAAD,CAAD,IAAQ9J,KAAR;EACAiK,QAAAA,CAAC,IAAI6Q,CAAC,CAAChR,CAAD,CAAD,GAAOgR,CAAC,CAAChR,CAAD,CAAb;EACD;;EAED8O,MAAAA,CAAC,GAAGkC,CAAC,CAAC5f,CAAC,GAAG,CAAL,CAAL;EACAme,MAAAA,CAAC,GAAGpZ,IAAI,CAACE,IAAL,CAAU8J,CAAV,CAAJ;;EACA,UAAI2O,CAAC,GAAG,CAAR,EAAW;EACTS,QAAAA,CAAC,GAAG,CAACA,CAAL;EACD;;EAEDlX,MAAAA,CAAC,CAACjH,CAAD,CAAD,GAAO8E,KAAK,GAAGqZ,CAAf;EACApP,MAAAA,CAAC,GAAGA,CAAC,GAAG2O,CAAC,GAAGS,CAAZ;EACAyB,MAAAA,CAAC,CAAC5f,CAAC,GAAG,CAAL,CAAD,GAAW0d,CAAC,GAAGS,CAAf;;EACA,WAAK7a,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGtD,CAAhB,EAAmBsD,CAAC,EAApB,EAAwB;EACtB2D,QAAAA,CAAC,CAAC3D,CAAD,CAAD,GAAO,CAAP;EACD;;EAED,WAAKA,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGtD,CAAhB,EAAmBsD,CAAC,EAApB,EAAwB;EACtBoa,QAAAA,CAAC,GAAGkC,CAAC,CAACtc,CAAD,CAAL;EACAsZ,QAAAA,CAAC,CAAClY,GAAF,CAAMpB,CAAN,EAAStD,CAAT,EAAY0d,CAAZ;EACAS,QAAAA,CAAC,GAAGlX,CAAC,CAAC3D,CAAD,CAAD,GAAOsZ,CAAC,CAACrZ,GAAF,CAAMD,CAAN,EAASA,CAAT,IAAcoa,CAAzB;;EACA,aAAK9O,CAAC,GAAGtL,CAAC,GAAG,CAAb,EAAgBsL,CAAC,IAAI5O,CAAC,GAAG,CAAzB,EAA4B4O,CAAC,EAA7B,EAAiC;EAC/BuP,UAAAA,CAAC,IAAIvB,CAAC,CAACrZ,GAAF,CAAMqL,CAAN,EAAStL,CAAT,IAAcsc,CAAC,CAAChR,CAAD,CAApB;EACA3H,UAAAA,CAAC,CAAC2H,CAAD,CAAD,IAAQgO,CAAC,CAACrZ,GAAF,CAAMqL,CAAN,EAAStL,CAAT,IAAcoa,CAAtB;EACD;;EACDzW,QAAAA,CAAC,CAAC3D,CAAD,CAAD,GAAO6a,CAAP;EACD;;EAEDT,MAAAA,CAAC,GAAG,CAAJ;;EACA,WAAKpa,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGtD,CAAhB,EAAmBsD,CAAC,EAApB,EAAwB;EACtB2D,QAAAA,CAAC,CAAC3D,CAAD,CAAD,IAAQyL,CAAR;EACA2O,QAAAA,CAAC,IAAIzW,CAAC,CAAC3D,CAAD,CAAD,GAAOsc,CAAC,CAACtc,CAAD,CAAb;EACD;;EAED2e,MAAAA,EAAE,GAAGvE,CAAC,IAAI3O,CAAC,GAAGA,CAAR,CAAN;;EACA,WAAKzL,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGtD,CAAhB,EAAmBsD,CAAC,EAApB,EAAwB;EACtB2D,QAAAA,CAAC,CAAC3D,CAAD,CAAD,IAAQ2e,EAAE,GAAGrC,CAAC,CAACtc,CAAD,CAAd;EACD;;EAED,WAAKA,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGtD,CAAhB,EAAmBsD,CAAC,EAApB,EAAwB;EACtBoa,QAAAA,CAAC,GAAGkC,CAAC,CAACtc,CAAD,CAAL;EACA6a,QAAAA,CAAC,GAAGlX,CAAC,CAAC3D,CAAD,CAAL;;EACA,aAAKsL,CAAC,GAAGtL,CAAT,EAAYsL,CAAC,IAAI5O,CAAC,GAAG,CAArB,EAAwB4O,CAAC,EAAzB,EAA6B;EAC3BgO,UAAAA,CAAC,CAAClY,GAAF,CAAMkK,CAAN,EAAStL,CAAT,EAAYsZ,CAAC,CAACrZ,GAAF,CAAMqL,CAAN,EAAStL,CAAT,KAAeoa,CAAC,GAAGzW,CAAC,CAAC2H,CAAD,CAAL,GAAWuP,CAAC,GAAGyB,CAAC,CAAChR,CAAD,CAA/B,CAAZ;EACD;;EACDgR,QAAAA,CAAC,CAACtc,CAAD,CAAD,GAAOsZ,CAAC,CAACrZ,GAAF,CAAMvD,CAAC,GAAG,CAAV,EAAasD,CAAb,CAAP;EACAsZ,QAAAA,CAAC,CAAClY,GAAF,CAAM1E,CAAN,EAASsD,CAAT,EAAY,CAAZ;EACD;EACF;;EACDsc,IAAAA,CAAC,CAAC5f,CAAD,CAAD,GAAO+O,CAAP;EACD;;EAED,OAAK/O,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGqP,CAAC,GAAG,CAApB,EAAuBrP,CAAC,EAAxB,EAA4B;EAC1B4c,IAAAA,CAAC,CAAClY,GAAF,CAAM2K,CAAC,GAAG,CAAV,EAAarP,CAAb,EAAgB4c,CAAC,CAACrZ,GAAF,CAAMvD,CAAN,EAASA,CAAT,CAAhB;EACA4c,IAAAA,CAAC,CAAClY,GAAF,CAAM1E,CAAN,EAASA,CAAT,EAAY,CAAZ;EACA+O,IAAAA,CAAC,GAAG6Q,CAAC,CAAC5f,CAAC,GAAG,CAAL,CAAL;;EACA,QAAI+O,CAAC,KAAK,CAAV,EAAa;EACX,WAAKH,CAAC,GAAG,CAAT,EAAYA,CAAC,IAAI5O,CAAjB,EAAoB4O,CAAC,EAArB,EAAyB;EACvBgR,QAAAA,CAAC,CAAChR,CAAD,CAAD,GAAOgO,CAAC,CAACrZ,GAAF,CAAMqL,CAAN,EAAS5O,CAAC,GAAG,CAAb,IAAkB+O,CAAzB;EACD;;EAED,WAAKzL,CAAC,GAAG,CAAT,EAAYA,CAAC,IAAItD,CAAjB,EAAoBsD,CAAC,EAArB,EAAyB;EACvB6a,QAAAA,CAAC,GAAG,CAAJ;;EACA,aAAKvP,CAAC,GAAG,CAAT,EAAYA,CAAC,IAAI5O,CAAjB,EAAoB4O,CAAC,EAArB,EAAyB;EACvBuP,UAAAA,CAAC,IAAIvB,CAAC,CAACrZ,GAAF,CAAMqL,CAAN,EAAS5O,CAAC,GAAG,CAAb,IAAkB4c,CAAC,CAACrZ,GAAF,CAAMqL,CAAN,EAAStL,CAAT,CAAvB;EACD;;EACD,aAAKsL,CAAC,GAAG,CAAT,EAAYA,CAAC,IAAI5O,CAAjB,EAAoB4O,CAAC,EAArB,EAAyB;EACvBgO,UAAAA,CAAC,CAAClY,GAAF,CAAMkK,CAAN,EAAStL,CAAT,EAAYsZ,CAAC,CAACrZ,GAAF,CAAMqL,CAAN,EAAStL,CAAT,IAAc6a,CAAC,GAAGyB,CAAC,CAAChR,CAAD,CAA/B;EACD;EACF;EACF;;EAED,SAAKA,CAAC,GAAG,CAAT,EAAYA,CAAC,IAAI5O,CAAjB,EAAoB4O,CAAC,EAArB,EAAyB;EACvBgO,MAAAA,CAAC,CAAClY,GAAF,CAAMkK,CAAN,EAAS5O,CAAC,GAAG,CAAb,EAAgB,CAAhB;EACD;EACF;;EAED,OAAKsD,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAG+L,CAAhB,EAAmB/L,CAAC,EAApB,EAAwB;EACtBsc,IAAAA,CAAC,CAACtc,CAAD,CAAD,GAAOsZ,CAAC,CAACrZ,GAAF,CAAM8L,CAAC,GAAG,CAAV,EAAa/L,CAAb,CAAP;EACAsZ,IAAAA,CAAC,CAAClY,GAAF,CAAM2K,CAAC,GAAG,CAAV,EAAa/L,CAAb,EAAgB,CAAhB;EACD;;EAEDsZ,EAAAA,CAAC,CAAClY,GAAF,CAAM2K,CAAC,GAAG,CAAV,EAAaA,CAAC,GAAG,CAAjB,EAAoB,CAApB;EACApI,EAAAA,CAAC,CAAC,CAAD,CAAD,GAAO,CAAP;EACD;;EAED,SAASwa,IAAT,CAAcpS,CAAd,EAAiBpI,CAAjB,EAAoB2Y,CAApB,EAAuBhD,CAAvB,EAA0B;EACxB,MAAIuB,CAAJ,EAAOpP,CAAP,EAAU/O,CAAV,EAAasD,CAAb,EAAgBsL,CAAhB,EAAmBnB,CAAnB,EAAsB2B,CAAtB,EAAyBG,CAAzB,EAA4BlN,CAA5B,EAA+B6f,GAA/B,EAAoC1f,CAApC,EAAuCwT,EAAvC,EAA2CmM,EAA3C,EAA+CC,GAA/C,EAAoD9P,CAApD,EAAuD+P,EAAvD;;EAEA,OAAKriB,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGqP,CAAhB,EAAmBrP,CAAC,EAApB,EAAwB;EACtBiH,IAAAA,CAAC,CAACjH,CAAC,GAAG,CAAL,CAAD,GAAWiH,CAAC,CAACjH,CAAD,CAAZ;EACD;;EAEDiH,EAAAA,CAAC,CAACoI,CAAC,GAAG,CAAL,CAAD,GAAW,CAAX;EAEA,MAAIqO,CAAC,GAAG,CAAR;EACA,MAAI4E,IAAI,GAAG,CAAX;EACA,MAAInF,GAAG,GAAGhQ,MAAM,CAACiQ,OAAjB;;EAEA,OAAK3P,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAG4B,CAAhB,EAAmB5B,CAAC,EAApB,EAAwB;EACtB6U,IAAAA,IAAI,GAAGvd,IAAI,CAACpF,GAAL,CAAS2iB,IAAT,EAAevd,IAAI,CAAC0F,GAAL,CAASmV,CAAC,CAACnS,CAAD,CAAV,IAAiB1I,IAAI,CAAC0F,GAAL,CAASxD,CAAC,CAACwG,CAAD,CAAV,CAAhC,CAAP;EACA2B,IAAAA,CAAC,GAAG3B,CAAJ;;EACA,WAAO2B,CAAC,GAAGC,CAAX,EAAc;EACZ,UAAItK,IAAI,CAAC0F,GAAL,CAASxD,CAAC,CAACmI,CAAD,CAAV,KAAkB+N,GAAG,GAAGmF,IAA5B,EAAkC;EAChC;EACD;;EACDlT,MAAAA,CAAC;EACF;;EAED,QAAIA,CAAC,GAAG3B,CAAR,EAAW;AACT2Q;EACA,SAAG;AACDA,EAEAD,QAAAA,CAAC,GAAGyB,CAAC,CAACnS,CAAD,CAAL;EACA8B,QAAAA,CAAC,GAAG,CAACqQ,CAAC,CAACnS,CAAC,GAAG,CAAL,CAAD,GAAW0Q,CAAZ,KAAkB,IAAIlX,CAAC,CAACwG,CAAD,CAAvB,CAAJ;EACApL,QAAAA,CAAC,GAAGkZ,UAAU,CAAChM,CAAD,EAAI,CAAJ,CAAd;;EACA,YAAIA,CAAC,GAAG,CAAR,EAAW;EACTlN,UAAAA,CAAC,GAAG,CAACA,CAAL;EACD;;EAEDud,QAAAA,CAAC,CAACnS,CAAD,CAAD,GAAOxG,CAAC,CAACwG,CAAD,CAAD,IAAQ8B,CAAC,GAAGlN,CAAZ,CAAP;EACAud,QAAAA,CAAC,CAACnS,CAAC,GAAG,CAAL,CAAD,GAAWxG,CAAC,CAACwG,CAAD,CAAD,IAAQ8B,CAAC,GAAGlN,CAAZ,CAAX;EACA6f,QAAAA,GAAG,GAAGtC,CAAC,CAACnS,CAAC,GAAG,CAAL,CAAP;EACAsB,QAAAA,CAAC,GAAGoP,CAAC,GAAGyB,CAAC,CAACnS,CAAD,CAAT;;EACA,aAAKzN,CAAC,GAAGyN,CAAC,GAAG,CAAb,EAAgBzN,CAAC,GAAGqP,CAApB,EAAuBrP,CAAC,EAAxB,EAA4B;EAC1B4f,UAAAA,CAAC,CAAC5f,CAAD,CAAD,IAAQ+O,CAAR;EACD;;EAED2O,QAAAA,CAAC,GAAGA,CAAC,GAAG3O,CAAR;EAEAQ,QAAAA,CAAC,GAAGqQ,CAAC,CAACxQ,CAAD,CAAL;EACA5M,QAAAA,CAAC,GAAG,CAAJ;EACAwT,QAAAA,EAAE,GAAGxT,CAAL;EACA2f,QAAAA,EAAE,GAAG3f,CAAL;EACA4f,QAAAA,GAAG,GAAGnb,CAAC,CAACwG,CAAC,GAAG,CAAL,CAAP;EACA6E,QAAAA,CAAC,GAAG,CAAJ;EACA+P,QAAAA,EAAE,GAAG,CAAL;;EACA,aAAKriB,CAAC,GAAGoP,CAAC,GAAG,CAAb,EAAgBpP,CAAC,IAAIyN,CAArB,EAAwBzN,CAAC,EAAzB,EAA6B;EAC3BmiB,UAAAA,EAAE,GAAGnM,EAAL;EACAA,UAAAA,EAAE,GAAGxT,CAAL;EACA6f,UAAAA,EAAE,GAAG/P,CAAL;EACA6L,UAAAA,CAAC,GAAG3b,CAAC,GAAGyE,CAAC,CAACjH,CAAD,CAAT;EACA+O,UAAAA,CAAC,GAAGvM,CAAC,GAAG+M,CAAR;EACAlN,UAAAA,CAAC,GAAGkZ,UAAU,CAAChM,CAAD,EAAItI,CAAC,CAACjH,CAAD,CAAL,CAAd;EACAiH,UAAAA,CAAC,CAACjH,CAAC,GAAG,CAAL,CAAD,GAAWsS,CAAC,GAAGjQ,CAAf;EACAiQ,UAAAA,CAAC,GAAGrL,CAAC,CAACjH,CAAD,CAAD,GAAOqC,CAAX;EACAG,UAAAA,CAAC,GAAG+M,CAAC,GAAGlN,CAAR;EACAkN,UAAAA,CAAC,GAAG/M,CAAC,GAAGod,CAAC,CAAC5f,CAAD,CAAL,GAAWsS,CAAC,GAAG6L,CAAnB;EACAyB,UAAAA,CAAC,CAAC5f,CAAC,GAAG,CAAL,CAAD,GAAW+O,CAAC,GAAGuD,CAAC,IAAI9P,CAAC,GAAG2b,CAAJ,GAAQ7L,CAAC,GAAGsN,CAAC,CAAC5f,CAAD,CAAjB,CAAhB;;EAEA,eAAK4O,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGS,CAAhB,EAAmBT,CAAC,EAApB,EAAwB;EACtBG,YAAAA,CAAC,GAAG6N,CAAC,CAACrZ,GAAF,CAAMqL,CAAN,EAAS5O,CAAC,GAAG,CAAb,CAAJ;EACA4c,YAAAA,CAAC,CAAClY,GAAF,CAAMkK,CAAN,EAAS5O,CAAC,GAAG,CAAb,EAAgBsS,CAAC,GAAGsK,CAAC,CAACrZ,GAAF,CAAMqL,CAAN,EAAS5O,CAAT,CAAJ,GAAkBwC,CAAC,GAAGuM,CAAtC;EACA6N,YAAAA,CAAC,CAAClY,GAAF,CAAMkK,CAAN,EAAS5O,CAAT,EAAYwC,CAAC,GAAGoa,CAAC,CAACrZ,GAAF,CAAMqL,CAAN,EAAS5O,CAAT,CAAJ,GAAkBsS,CAAC,GAAGvD,CAAlC;EACD;EACF;;EAEDQ,QAAAA,CAAC,GAAI,CAAC+C,CAAD,GAAK+P,EAAL,GAAUF,EAAV,GAAeC,GAAf,GAAqBnb,CAAC,CAACwG,CAAD,CAAvB,GAA8ByU,GAAlC;EACAjb,QAAAA,CAAC,CAACwG,CAAD,CAAD,GAAO6E,CAAC,GAAG/C,CAAX;EACAqQ,QAAAA,CAAC,CAACnS,CAAD,CAAD,GAAOjL,CAAC,GAAG+M,CAAX;EACD,OAlDD,QAkDSxK,IAAI,CAAC0F,GAAL,CAASxD,CAAC,CAACwG,CAAD,CAAV,IAAiB0P,GAAG,GAAGmF,IAlDhC;EAmDD;;EACD1C,IAAAA,CAAC,CAACnS,CAAD,CAAD,GAAOmS,CAAC,CAACnS,CAAD,CAAD,GAAOiQ,CAAd;EACAzW,IAAAA,CAAC,CAACwG,CAAD,CAAD,GAAO,CAAP;EACD;;EAED,OAAKzN,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGqP,CAAC,GAAG,CAApB,EAAuBrP,CAAC,EAAxB,EAA4B;EAC1B4O,IAAAA,CAAC,GAAG5O,CAAJ;EACAuP,IAAAA,CAAC,GAAGqQ,CAAC,CAAC5f,CAAD,CAAL;;EACA,SAAKsD,CAAC,GAAGtD,CAAC,GAAG,CAAb,EAAgBsD,CAAC,GAAG+L,CAApB,EAAuB/L,CAAC,EAAxB,EAA4B;EAC1B,UAAIsc,CAAC,CAACtc,CAAD,CAAD,GAAOiM,CAAX,EAAc;EACZX,QAAAA,CAAC,GAAGtL,CAAJ;EACAiM,QAAAA,CAAC,GAAGqQ,CAAC,CAACtc,CAAD,CAAL;EACD;EACF;;EAED,QAAIsL,CAAC,KAAK5O,CAAV,EAAa;EACX4f,MAAAA,CAAC,CAAChR,CAAD,CAAD,GAAOgR,CAAC,CAAC5f,CAAD,CAAR;EACA4f,MAAAA,CAAC,CAAC5f,CAAD,CAAD,GAAOuP,CAAP;;EACA,WAAKjM,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAG+L,CAAhB,EAAmB/L,CAAC,EAApB,EAAwB;EACtBiM,QAAAA,CAAC,GAAGqN,CAAC,CAACrZ,GAAF,CAAMD,CAAN,EAAStD,CAAT,CAAJ;EACA4c,QAAAA,CAAC,CAAClY,GAAF,CAAMpB,CAAN,EAAStD,CAAT,EAAY4c,CAAC,CAACrZ,GAAF,CAAMD,CAAN,EAASsL,CAAT,CAAZ;EACAgO,QAAAA,CAAC,CAAClY,GAAF,CAAMpB,CAAN,EAASsL,CAAT,EAAYW,CAAZ;EACD;EACF;EACF;EACF;;EAED,SAASqS,MAAT,CAAgBvS,CAAhB,EAAmBqS,CAAnB,EAAsBC,GAAtB,EAA2B/E,CAA3B,EAA8B;EAC5B,MAAI2F,GAAG,GAAG,CAAV;EACA,MAAIC,IAAI,GAAGnT,CAAC,GAAG,CAAf;EACA,MAAIqO,CAAJ,EAAOS,CAAP,EAAUpP,CAAV,EAAa/O,CAAb,EAAgBsD,CAAhB,EAAmB8L,CAAnB;EACA,MAAItK,KAAJ;;EAEA,OAAKsK,CAAC,GAAGmT,GAAG,GAAG,CAAf,EAAkBnT,CAAC,IAAIoT,IAAI,GAAG,CAA9B,EAAiCpT,CAAC,EAAlC,EAAsC;EACpCtK,IAAAA,KAAK,GAAG,CAAR;;EACA,SAAK9E,CAAC,GAAGoP,CAAT,EAAYpP,CAAC,IAAIwiB,IAAjB,EAAuBxiB,CAAC,EAAxB,EAA4B;EAC1B8E,MAAAA,KAAK,GAAGA,KAAK,GAAGC,IAAI,CAAC0F,GAAL,CAASiX,CAAC,CAACne,GAAF,CAAMvD,CAAN,EAASoP,CAAC,GAAG,CAAb,CAAT,CAAhB;EACD;;EAED,QAAItK,KAAK,KAAK,CAAd,EAAiB;EACfiK,MAAAA,CAAC,GAAG,CAAJ;;EACA,WAAK/O,CAAC,GAAGwiB,IAAT,EAAexiB,CAAC,IAAIoP,CAApB,EAAuBpP,CAAC,EAAxB,EAA4B;EAC1B2hB,QAAAA,GAAG,CAAC3hB,CAAD,CAAH,GAAS0hB,CAAC,CAACne,GAAF,CAAMvD,CAAN,EAASoP,CAAC,GAAG,CAAb,IAAkBtK,KAA3B;EACAiK,QAAAA,CAAC,IAAI4S,GAAG,CAAC3hB,CAAD,CAAH,GAAS2hB,GAAG,CAAC3hB,CAAD,CAAjB;EACD;;EAEDme,MAAAA,CAAC,GAAGpZ,IAAI,CAACE,IAAL,CAAU8J,CAAV,CAAJ;;EACA,UAAI4S,GAAG,CAACvS,CAAD,CAAH,GAAS,CAAb,EAAgB;EACd+O,QAAAA,CAAC,GAAG,CAACA,CAAL;EACD;;EAEDpP,MAAAA,CAAC,GAAGA,CAAC,GAAG4S,GAAG,CAACvS,CAAD,CAAH,GAAS+O,CAAjB;EACAwD,MAAAA,GAAG,CAACvS,CAAD,CAAH,GAASuS,GAAG,CAACvS,CAAD,CAAH,GAAS+O,CAAlB;;EAEA,WAAK7a,CAAC,GAAG8L,CAAT,EAAY9L,CAAC,GAAG+L,CAAhB,EAAmB/L,CAAC,EAApB,EAAwB;EACtBoa,QAAAA,CAAC,GAAG,CAAJ;;EACA,aAAK1d,CAAC,GAAGwiB,IAAT,EAAexiB,CAAC,IAAIoP,CAApB,EAAuBpP,CAAC,EAAxB,EAA4B;EAC1B0d,UAAAA,CAAC,IAAIiE,GAAG,CAAC3hB,CAAD,CAAH,GAAS0hB,CAAC,CAACne,GAAF,CAAMvD,CAAN,EAASsD,CAAT,CAAd;EACD;;EAEDoa,QAAAA,CAAC,GAAGA,CAAC,GAAG3O,CAAR;;EACA,aAAK/O,CAAC,GAAGoP,CAAT,EAAYpP,CAAC,IAAIwiB,IAAjB,EAAuBxiB,CAAC,EAAxB,EAA4B;EAC1B0hB,UAAAA,CAAC,CAAChd,GAAF,CAAM1E,CAAN,EAASsD,CAAT,EAAYoe,CAAC,CAACne,GAAF,CAAMvD,CAAN,EAASsD,CAAT,IAAcoa,CAAC,GAAGiE,GAAG,CAAC3hB,CAAD,CAAjC;EACD;EACF;;EAED,WAAKA,CAAC,GAAG,CAAT,EAAYA,CAAC,IAAIwiB,IAAjB,EAAuBxiB,CAAC,EAAxB,EAA4B;EAC1B0d,QAAAA,CAAC,GAAG,CAAJ;;EACA,aAAKpa,CAAC,GAAGkf,IAAT,EAAelf,CAAC,IAAI8L,CAApB,EAAuB9L,CAAC,EAAxB,EAA4B;EAC1Boa,UAAAA,CAAC,IAAIiE,GAAG,CAACre,CAAD,CAAH,GAASoe,CAAC,CAACne,GAAF,CAAMvD,CAAN,EAASsD,CAAT,CAAd;EACD;;EAEDoa,QAAAA,CAAC,GAAGA,CAAC,GAAG3O,CAAR;;EACA,aAAKzL,CAAC,GAAG8L,CAAT,EAAY9L,CAAC,IAAIkf,IAAjB,EAAuBlf,CAAC,EAAxB,EAA4B;EAC1Boe,UAAAA,CAAC,CAAChd,GAAF,CAAM1E,CAAN,EAASsD,CAAT,EAAYoe,CAAC,CAACne,GAAF,CAAMvD,CAAN,EAASsD,CAAT,IAAcoa,CAAC,GAAGiE,GAAG,CAACre,CAAD,CAAjC;EACD;EACF;;EAEDqe,MAAAA,GAAG,CAACvS,CAAD,CAAH,GAAStK,KAAK,GAAG6c,GAAG,CAACvS,CAAD,CAApB;EACAsS,MAAAA,CAAC,CAAChd,GAAF,CAAM0K,CAAN,EAASA,CAAC,GAAG,CAAb,EAAgBtK,KAAK,GAAGqZ,CAAxB;EACD;EACF;;EAED,OAAKne,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGqP,CAAhB,EAAmBrP,CAAC,EAApB,EAAwB;EACtB,SAAKsD,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAG+L,CAAhB,EAAmB/L,CAAC,EAApB,EAAwB;EACtBsZ,MAAAA,CAAC,CAAClY,GAAF,CAAM1E,CAAN,EAASsD,CAAT,EAAYtD,CAAC,KAAKsD,CAAN,GAAU,CAAV,GAAc,CAA1B;EACD;EACF;;EAED,OAAK8L,CAAC,GAAGoT,IAAI,GAAG,CAAhB,EAAmBpT,CAAC,IAAImT,GAAG,GAAG,CAA9B,EAAiCnT,CAAC,EAAlC,EAAsC;EACpC,QAAIsS,CAAC,CAACne,GAAF,CAAM6L,CAAN,EAASA,CAAC,GAAG,CAAb,MAAoB,CAAxB,EAA2B;EACzB,WAAKpP,CAAC,GAAGoP,CAAC,GAAG,CAAb,EAAgBpP,CAAC,IAAIwiB,IAArB,EAA2BxiB,CAAC,EAA5B,EAAgC;EAC9B2hB,QAAAA,GAAG,CAAC3hB,CAAD,CAAH,GAAS0hB,CAAC,CAACne,GAAF,CAAMvD,CAAN,EAASoP,CAAC,GAAG,CAAb,CAAT;EACD;;EAED,WAAK9L,CAAC,GAAG8L,CAAT,EAAY9L,CAAC,IAAIkf,IAAjB,EAAuBlf,CAAC,EAAxB,EAA4B;EAC1B6a,QAAAA,CAAC,GAAG,CAAJ;;EACA,aAAKne,CAAC,GAAGoP,CAAT,EAAYpP,CAAC,IAAIwiB,IAAjB,EAAuBxiB,CAAC,EAAxB,EAA4B;EAC1Bme,UAAAA,CAAC,IAAIwD,GAAG,CAAC3hB,CAAD,CAAH,GAAS4c,CAAC,CAACrZ,GAAF,CAAMvD,CAAN,EAASsD,CAAT,CAAd;EACD;;EAED6a,QAAAA,CAAC,GAAGA,CAAC,GAAGwD,GAAG,CAACvS,CAAD,CAAP,GAAasS,CAAC,CAACne,GAAF,CAAM6L,CAAN,EAASA,CAAC,GAAG,CAAb,CAAjB;;EACA,aAAKpP,CAAC,GAAGoP,CAAT,EAAYpP,CAAC,IAAIwiB,IAAjB,EAAuBxiB,CAAC,EAAxB,EAA4B;EAC1B4c,UAAAA,CAAC,CAAClY,GAAF,CAAM1E,CAAN,EAASsD,CAAT,EAAYsZ,CAAC,CAACrZ,GAAF,CAAMvD,CAAN,EAASsD,CAAT,IAAc6a,CAAC,GAAGwD,GAAG,CAAC3hB,CAAD,CAAjC;EACD;EACF;EACF;EACF;EACF;;EAED,SAAS6hB,IAAT,CAAcY,EAAd,EAAkBxb,CAAlB,EAAqB2Y,CAArB,EAAwBhD,CAAxB,EAA2B8E,CAA3B,EAA8B;EAC5B,MAAIrS,CAAC,GAAGoT,EAAE,GAAG,CAAb;EACA,MAAIF,GAAG,GAAG,CAAV;EACA,MAAIC,IAAI,GAAGC,EAAE,GAAG,CAAhB;EACA,MAAItF,GAAG,GAAGhQ,MAAM,CAACiQ,OAAjB;EACA,MAAIsF,OAAO,GAAG,CAAd;EACA,MAAI9Q,IAAI,GAAG,CAAX;EACA,MAAIrC,CAAC,GAAG,CAAR;EACA,MAAI+H,CAAC,GAAG,CAAR;EACA,MAAIjV,CAAC,GAAG,CAAR;EACA,MAAIiQ,CAAC,GAAG,CAAR;EACA,MAAIqQ,CAAC,GAAG,CAAR;EACA,MAAIvE,IAAI,GAAG,CAAX;EACA,MAAIpe,CAAJ,EAAOsD,CAAP,EAAUsL,CAAV,EAAanB,CAAb,EAAgB2B,CAAhB,EAAmBsL,CAAnB,EAAsBkI,CAAtB,EAAyBve,CAAzB,EAA4BuR,CAA5B;EACA,MAAIiN,EAAJ,EAAQC,EAAR,EAAYC,EAAZ,EAAgBC,EAAhB;EACA,MAAIC,OAAJ,EAAaC,OAAb;;EAEA,OAAKljB,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGyiB,EAAhB,EAAoBziB,CAAC,EAArB,EAAyB;EACvB,QAAIA,CAAC,GAAGuiB,GAAJ,IAAWviB,CAAC,GAAGwiB,IAAnB,EAAyB;EACvB5C,MAAAA,CAAC,CAAC5f,CAAD,CAAD,GAAO0hB,CAAC,CAACne,GAAF,CAAMvD,CAAN,EAASA,CAAT,CAAP;EACAiH,MAAAA,CAAC,CAACjH,CAAD,CAAD,GAAO,CAAP;EACD;;EAED,SAAKsD,CAAC,GAAGyB,IAAI,CAACpF,GAAL,CAASK,CAAC,GAAG,CAAb,EAAgB,CAAhB,CAAT,EAA6BsD,CAAC,GAAGmf,EAAjC,EAAqCnf,CAAC,EAAtC,EAA0C;EACxCsO,MAAAA,IAAI,GAAGA,IAAI,GAAG7M,IAAI,CAAC0F,GAAL,CAASiX,CAAC,CAACne,GAAF,CAAMvD,CAAN,EAASsD,CAAT,CAAT,CAAd;EACD;EACF;;EAED,SAAO+L,CAAC,IAAIkT,GAAZ,EAAiB;EACf9U,IAAAA,CAAC,GAAG4B,CAAJ;;EACA,WAAO5B,CAAC,GAAG8U,GAAX,EAAgB;EACdjQ,MAAAA,CAAC,GAAGvN,IAAI,CAAC0F,GAAL,CAASiX,CAAC,CAACne,GAAF,CAAMkK,CAAC,GAAG,CAAV,EAAaA,CAAC,GAAG,CAAjB,CAAT,IAAgC1I,IAAI,CAAC0F,GAAL,CAASiX,CAAC,CAACne,GAAF,CAAMkK,CAAN,EAASA,CAAT,CAAT,CAApC;;EACA,UAAI6E,CAAC,KAAK,CAAV,EAAa;EACXA,QAAAA,CAAC,GAAGV,IAAJ;EACD;;EACD,UAAI7M,IAAI,CAAC0F,GAAL,CAASiX,CAAC,CAACne,GAAF,CAAMkK,CAAN,EAASA,CAAC,GAAG,CAAb,CAAT,IAA4B0P,GAAG,GAAG7K,CAAtC,EAAyC;EACvC;EACD;;EACD7E,MAAAA,CAAC;EACF;;EAED,QAAIA,CAAC,KAAK4B,CAAV,EAAa;EACXqS,MAAAA,CAAC,CAAChd,GAAF,CAAM2K,CAAN,EAASA,CAAT,EAAYqS,CAAC,CAACne,GAAF,CAAM8L,CAAN,EAASA,CAAT,IAAcqT,OAA1B;EACA9C,MAAAA,CAAC,CAACvQ,CAAD,CAAD,GAAOqS,CAAC,CAACne,GAAF,CAAM8L,CAAN,EAASA,CAAT,CAAP;EACApI,MAAAA,CAAC,CAACoI,CAAD,CAAD,GAAO,CAAP;EACAA,MAAAA,CAAC;EACD+O,MAAAA,IAAI,GAAG,CAAP;EACD,KAND,MAMO,IAAI3Q,CAAC,KAAK4B,CAAC,GAAG,CAAd,EAAiB;EACtBuT,MAAAA,CAAC,GAAGlB,CAAC,CAACne,GAAF,CAAM8L,CAAN,EAASA,CAAC,GAAG,CAAb,IAAkBqS,CAAC,CAACne,GAAF,CAAM8L,CAAC,GAAG,CAAV,EAAaA,CAAb,CAAtB;EACAE,MAAAA,CAAC,GAAG,CAACmS,CAAC,CAACne,GAAF,CAAM8L,CAAC,GAAG,CAAV,EAAaA,CAAC,GAAG,CAAjB,IAAsBqS,CAAC,CAACne,GAAF,CAAM8L,CAAN,EAASA,CAAT,CAAvB,IAAsC,CAA1C;EACAiI,MAAAA,CAAC,GAAG/H,CAAC,GAAGA,CAAJ,GAAQqT,CAAZ;EACAD,MAAAA,CAAC,GAAG5d,IAAI,CAACE,IAAL,CAAUF,IAAI,CAAC0F,GAAL,CAAS6M,CAAT,CAAV,CAAJ;EACAoK,MAAAA,CAAC,CAAChd,GAAF,CAAM2K,CAAN,EAASA,CAAT,EAAYqS,CAAC,CAACne,GAAF,CAAM8L,CAAN,EAASA,CAAT,IAAcqT,OAA1B;EACAhB,MAAAA,CAAC,CAAChd,GAAF,CAAM2K,CAAC,GAAG,CAAV,EAAaA,CAAC,GAAG,CAAjB,EAAoBqS,CAAC,CAACne,GAAF,CAAM8L,CAAC,GAAG,CAAV,EAAaA,CAAC,GAAG,CAAjB,IAAsBqT,OAA1C;EACAre,MAAAA,CAAC,GAAGqd,CAAC,CAACne,GAAF,CAAM8L,CAAN,EAASA,CAAT,CAAJ;;EAEA,UAAIiI,CAAC,IAAI,CAAT,EAAY;EACVqL,QAAAA,CAAC,GAAGpT,CAAC,IAAI,CAAL,GAASA,CAAC,GAAGoT,CAAb,GAAiBpT,CAAC,GAAGoT,CAAzB;EACA/C,QAAAA,CAAC,CAACvQ,CAAC,GAAG,CAAL,CAAD,GAAWhL,CAAC,GAAGse,CAAf;EACA/C,QAAAA,CAAC,CAACvQ,CAAD,CAAD,GAAOuQ,CAAC,CAACvQ,CAAC,GAAG,CAAL,CAAR;;EACA,YAAIsT,CAAC,KAAK,CAAV,EAAa;EACX/C,UAAAA,CAAC,CAACvQ,CAAD,CAAD,GAAOhL,CAAC,GAAGue,CAAC,GAAGD,CAAf;EACD;;EACD1b,QAAAA,CAAC,CAACoI,CAAC,GAAG,CAAL,CAAD,GAAW,CAAX;EACApI,QAAAA,CAAC,CAACoI,CAAD,CAAD,GAAO,CAAP;EACAhL,QAAAA,CAAC,GAAGqd,CAAC,CAACne,GAAF,CAAM8L,CAAN,EAASA,CAAC,GAAG,CAAb,CAAJ;EACAiD,QAAAA,CAAC,GAAGvN,IAAI,CAAC0F,GAAL,CAASpG,CAAT,IAAcU,IAAI,CAAC0F,GAAL,CAASkY,CAAT,CAAlB;EACApT,QAAAA,CAAC,GAAGlL,CAAC,GAAGiO,CAAR;EACAgF,QAAAA,CAAC,GAAGqL,CAAC,GAAGrQ,CAAR;EACAjQ,QAAAA,CAAC,GAAG0C,IAAI,CAACE,IAAL,CAAUsK,CAAC,GAAGA,CAAJ,GAAQ+H,CAAC,GAAGA,CAAtB,CAAJ;EACA/H,QAAAA,CAAC,GAAGA,CAAC,GAAGlN,CAAR;EACAiV,QAAAA,CAAC,GAAGA,CAAC,GAAGjV,CAAR;;EAEA,aAAKiB,CAAC,GAAG+L,CAAC,GAAG,CAAb,EAAgB/L,CAAC,GAAGmf,EAApB,EAAwBnf,CAAC,EAAzB,EAA6B;EAC3Bqf,UAAAA,CAAC,GAAGjB,CAAC,CAACne,GAAF,CAAM8L,CAAC,GAAG,CAAV,EAAa/L,CAAb,CAAJ;EACAoe,UAAAA,CAAC,CAAChd,GAAF,CAAM2K,CAAC,GAAG,CAAV,EAAa/L,CAAb,EAAgBgU,CAAC,GAAGqL,CAAJ,GAAQpT,CAAC,GAAGmS,CAAC,CAACne,GAAF,CAAM8L,CAAN,EAAS/L,CAAT,CAA5B;EACAoe,UAAAA,CAAC,CAAChd,GAAF,CAAM2K,CAAN,EAAS/L,CAAT,EAAYgU,CAAC,GAAGoK,CAAC,CAACne,GAAF,CAAM8L,CAAN,EAAS/L,CAAT,CAAJ,GAAkBiM,CAAC,GAAGoT,CAAlC;EACD;;EAED,aAAK3iB,CAAC,GAAG,CAAT,EAAYA,CAAC,IAAIqP,CAAjB,EAAoBrP,CAAC,EAArB,EAAyB;EACvB2iB,UAAAA,CAAC,GAAGjB,CAAC,CAACne,GAAF,CAAMvD,CAAN,EAASqP,CAAC,GAAG,CAAb,CAAJ;EACAqS,UAAAA,CAAC,CAAChd,GAAF,CAAM1E,CAAN,EAASqP,CAAC,GAAG,CAAb,EAAgBiI,CAAC,GAAGqL,CAAJ,GAAQpT,CAAC,GAAGmS,CAAC,CAACne,GAAF,CAAMvD,CAAN,EAASqP,CAAT,CAA5B;EACAqS,UAAAA,CAAC,CAAChd,GAAF,CAAM1E,CAAN,EAASqP,CAAT,EAAYiI,CAAC,GAAGoK,CAAC,CAACne,GAAF,CAAMvD,CAAN,EAASqP,CAAT,CAAJ,GAAkBE,CAAC,GAAGoT,CAAlC;EACD;;EAED,aAAK3iB,CAAC,GAAGuiB,GAAT,EAAcviB,CAAC,IAAIwiB,IAAnB,EAAyBxiB,CAAC,EAA1B,EAA8B;EAC5B2iB,UAAAA,CAAC,GAAG/F,CAAC,CAACrZ,GAAF,CAAMvD,CAAN,EAASqP,CAAC,GAAG,CAAb,CAAJ;EACAuN,UAAAA,CAAC,CAAClY,GAAF,CAAM1E,CAAN,EAASqP,CAAC,GAAG,CAAb,EAAgBiI,CAAC,GAAGqL,CAAJ,GAAQpT,CAAC,GAAGqN,CAAC,CAACrZ,GAAF,CAAMvD,CAAN,EAASqP,CAAT,CAA5B;EACAuN,UAAAA,CAAC,CAAClY,GAAF,CAAM1E,CAAN,EAASqP,CAAT,EAAYiI,CAAC,GAAGsF,CAAC,CAACrZ,GAAF,CAAMvD,CAAN,EAASqP,CAAT,CAAJ,GAAkBE,CAAC,GAAGoT,CAAlC;EACD;EACF,OAlCD,MAkCO;EACL/C,QAAAA,CAAC,CAACvQ,CAAC,GAAG,CAAL,CAAD,GAAWhL,CAAC,GAAGkL,CAAf;EACAqQ,QAAAA,CAAC,CAACvQ,CAAD,CAAD,GAAOhL,CAAC,GAAGkL,CAAX;EACAtI,QAAAA,CAAC,CAACoI,CAAC,GAAG,CAAL,CAAD,GAAWsT,CAAX;EACA1b,QAAAA,CAAC,CAACoI,CAAD,CAAD,GAAO,CAACsT,CAAR;EACD;;EAEDtT,MAAAA,CAAC,GAAGA,CAAC,GAAG,CAAR;EACA+O,MAAAA,IAAI,GAAG,CAAP;EACD,KApDM,MAoDA;EACL/Z,MAAAA,CAAC,GAAGqd,CAAC,CAACne,GAAF,CAAM8L,CAAN,EAASA,CAAT,CAAJ;EACAuG,MAAAA,CAAC,GAAG,CAAJ;EACAgN,MAAAA,CAAC,GAAG,CAAJ;;EACA,UAAInV,CAAC,GAAG4B,CAAR,EAAW;EACTuG,QAAAA,CAAC,GAAG8L,CAAC,CAACne,GAAF,CAAM8L,CAAC,GAAG,CAAV,EAAaA,CAAC,GAAG,CAAjB,CAAJ;EACAuT,QAAAA,CAAC,GAAGlB,CAAC,CAACne,GAAF,CAAM8L,CAAN,EAASA,CAAC,GAAG,CAAb,IAAkBqS,CAAC,CAACne,GAAF,CAAM8L,CAAC,GAAG,CAAV,EAAaA,CAAb,CAAtB;EACD;;EAED,UAAI+O,IAAI,KAAK,EAAb,EAAiB;EACfsE,QAAAA,OAAO,IAAIre,CAAX;;EACA,aAAKrE,CAAC,GAAGuiB,GAAT,EAAcviB,CAAC,IAAIqP,CAAnB,EAAsBrP,CAAC,EAAvB,EAA2B;EACzB0hB,UAAAA,CAAC,CAAChd,GAAF,CAAM1E,CAAN,EAASA,CAAT,EAAY0hB,CAAC,CAACne,GAAF,CAAMvD,CAAN,EAASA,CAAT,IAAcqE,CAA1B;EACD;;EACDiO,QAAAA,CAAC,GAAGvN,IAAI,CAAC0F,GAAL,CAASiX,CAAC,CAACne,GAAF,CAAM8L,CAAN,EAASA,CAAC,GAAG,CAAb,CAAT,IAA4BtK,IAAI,CAAC0F,GAAL,CAASiX,CAAC,CAACne,GAAF,CAAM8L,CAAC,GAAG,CAAV,EAAaA,CAAC,GAAG,CAAjB,CAAT,CAAhC;EACAhL,QAAAA,CAAC,GAAGuR,CAAC,GAAG,OAAOtD,CAAf;EACAsQ,QAAAA,CAAC,GAAG,CAAC,MAAD,GAAUtQ,CAAV,GAAcA,CAAlB;EACD;;EAED,UAAI8L,IAAI,KAAK,EAAb,EAAiB;EACf9L,QAAAA,CAAC,GAAG,CAACsD,CAAC,GAAGvR,CAAL,IAAU,CAAd;EACAiO,QAAAA,CAAC,GAAGA,CAAC,GAAGA,CAAJ,GAAQsQ,CAAZ;;EACA,YAAItQ,CAAC,GAAG,CAAR,EAAW;EACTA,UAAAA,CAAC,GAAGvN,IAAI,CAACE,IAAL,CAAUqN,CAAV,CAAJ;;EACA,cAAIsD,CAAC,GAAGvR,CAAR,EAAW;EACTiO,YAAAA,CAAC,GAAG,CAACA,CAAL;EACD;;EACDA,UAAAA,CAAC,GAAGjO,CAAC,GAAGue,CAAC,IAAI,CAAChN,CAAC,GAAGvR,CAAL,IAAU,CAAV,GAAciO,CAAlB,CAAT;;EACA,eAAKtS,CAAC,GAAGuiB,GAAT,EAAcviB,CAAC,IAAIqP,CAAnB,EAAsBrP,CAAC,EAAvB,EAA2B;EACzB0hB,YAAAA,CAAC,CAAChd,GAAF,CAAM1E,CAAN,EAASA,CAAT,EAAY0hB,CAAC,CAACne,GAAF,CAAMvD,CAAN,EAASA,CAAT,IAAcsS,CAA1B;EACD;;EACDoQ,UAAAA,OAAO,IAAIpQ,CAAX;EACAjO,UAAAA,CAAC,GAAGuR,CAAC,GAAGgN,CAAC,GAAG,KAAZ;EACD;EACF;;EAEDxE,MAAAA,IAAI,GAAGA,IAAI,GAAG,CAAd;EAEAhP,MAAAA,CAAC,GAAGC,CAAC,GAAG,CAAR;;EACA,aAAOD,CAAC,IAAI3B,CAAZ,EAAe;EACbkV,QAAAA,CAAC,GAAGjB,CAAC,CAACne,GAAF,CAAM6L,CAAN,EAASA,CAAT,CAAJ;EACA/M,QAAAA,CAAC,GAAGgC,CAAC,GAAGse,CAAR;EACArQ,QAAAA,CAAC,GAAGsD,CAAC,GAAG+M,CAAR;EACApT,QAAAA,CAAC,GAAG,CAAClN,CAAC,GAAGiQ,CAAJ,GAAQsQ,CAAT,IAAclB,CAAC,CAACne,GAAF,CAAM6L,CAAC,GAAG,CAAV,EAAaA,CAAb,CAAd,GAAgCsS,CAAC,CAACne,GAAF,CAAM6L,CAAN,EAASA,CAAC,GAAG,CAAb,CAApC;EACAkI,QAAAA,CAAC,GAAGoK,CAAC,CAACne,GAAF,CAAM6L,CAAC,GAAG,CAAV,EAAaA,CAAC,GAAG,CAAjB,IAAsBuT,CAAtB,GAA0BtgB,CAA1B,GAA8BiQ,CAAlC;EACAjQ,QAAAA,CAAC,GAAGqf,CAAC,CAACne,GAAF,CAAM6L,CAAC,GAAG,CAAV,EAAaA,CAAC,GAAG,CAAjB,CAAJ;EACAkD,QAAAA,CAAC,GAAGvN,IAAI,CAAC0F,GAAL,CAAS8E,CAAT,IAAcxK,IAAI,CAAC0F,GAAL,CAAS6M,CAAT,CAAd,GAA4BvS,IAAI,CAAC0F,GAAL,CAASpI,CAAT,CAAhC;EACAkN,QAAAA,CAAC,GAAGA,CAAC,GAAG+C,CAAR;EACAgF,QAAAA,CAAC,GAAGA,CAAC,GAAGhF,CAAR;EACAjQ,QAAAA,CAAC,GAAGA,CAAC,GAAGiQ,CAAR;;EACA,YAAIlD,CAAC,KAAK3B,CAAV,EAAa;EACX;EACD;;EACD,YACE1I,IAAI,CAAC0F,GAAL,CAASiX,CAAC,CAACne,GAAF,CAAM6L,CAAN,EAASA,CAAC,GAAG,CAAb,CAAT,KAA6BrK,IAAI,CAAC0F,GAAL,CAAS6M,CAAT,IAAcvS,IAAI,CAAC0F,GAAL,CAASpI,CAAT,CAA3C,IACA8a,GAAG,IACApY,IAAI,CAAC0F,GAAL,CAAS8E,CAAT,KACExK,IAAI,CAAC0F,GAAL,CAASiX,CAAC,CAACne,GAAF,CAAM6L,CAAC,GAAG,CAAV,EAAaA,CAAC,GAAG,CAAjB,CAAT,IACCrK,IAAI,CAAC0F,GAAL,CAASkY,CAAT,CADD,GAEC5d,IAAI,CAAC0F,GAAL,CAASiX,CAAC,CAACne,GAAF,CAAM6L,CAAC,GAAG,CAAV,EAAaA,CAAC,GAAG,CAAjB,CAAT,CAHH,CADA,CAFL,EAOE;EACA;EACD;;EACDA,QAAAA,CAAC;EACF;;EAED,WAAKpP,CAAC,GAAGoP,CAAC,GAAG,CAAb,EAAgBpP,CAAC,IAAIqP,CAArB,EAAwBrP,CAAC,EAAzB,EAA6B;EAC3B0hB,QAAAA,CAAC,CAAChd,GAAF,CAAM1E,CAAN,EAASA,CAAC,GAAG,CAAb,EAAgB,CAAhB;;EACA,YAAIA,CAAC,GAAGoP,CAAC,GAAG,CAAZ,EAAe;EACbsS,UAAAA,CAAC,CAAChd,GAAF,CAAM1E,CAAN,EAASA,CAAC,GAAG,CAAb,EAAgB,CAAhB;EACD;EACF;;EAED,WAAK4O,CAAC,GAAGQ,CAAT,EAAYR,CAAC,IAAIS,CAAC,GAAG,CAArB,EAAwBT,CAAC,EAAzB,EAA6B;EAC3BqU,QAAAA,OAAO,GAAGrU,CAAC,KAAKS,CAAC,GAAG,CAApB;;EACA,YAAIT,CAAC,KAAKQ,CAAV,EAAa;EACXG,UAAAA,CAAC,GAAGmS,CAAC,CAACne,GAAF,CAAMqL,CAAN,EAASA,CAAC,GAAG,CAAb,CAAJ;EACA0I,UAAAA,CAAC,GAAGoK,CAAC,CAACne,GAAF,CAAMqL,CAAC,GAAG,CAAV,EAAaA,CAAC,GAAG,CAAjB,CAAJ;EACAvM,UAAAA,CAAC,GAAG4gB,OAAO,GAAGvB,CAAC,CAACne,GAAF,CAAMqL,CAAC,GAAG,CAAV,EAAaA,CAAC,GAAG,CAAjB,CAAH,GAAyB,CAApC;EACAvK,UAAAA,CAAC,GAAGU,IAAI,CAAC0F,GAAL,CAAS8E,CAAT,IAAcxK,IAAI,CAAC0F,GAAL,CAAS6M,CAAT,CAAd,GAA4BvS,IAAI,CAAC0F,GAAL,CAASpI,CAAT,CAAhC;;EACA,cAAIgC,CAAC,KAAK,CAAV,EAAa;EACXkL,YAAAA,CAAC,GAAGA,CAAC,GAAGlL,CAAR;EACAiT,YAAAA,CAAC,GAAGA,CAAC,GAAGjT,CAAR;EACAhC,YAAAA,CAAC,GAAGA,CAAC,GAAGgC,CAAR;EACD;EACF;;EAED,YAAIA,CAAC,KAAK,CAAV,EAAa;EACX;EACD;;EAEDiO,QAAAA,CAAC,GAAGvN,IAAI,CAACE,IAAL,CAAUsK,CAAC,GAAGA,CAAJ,GAAQ+H,CAAC,GAAGA,CAAZ,GAAgBjV,CAAC,GAAGA,CAA9B,CAAJ;;EACA,YAAIkN,CAAC,GAAG,CAAR,EAAW;EACT+C,UAAAA,CAAC,GAAG,CAACA,CAAL;EACD;;EAED,YAAIA,CAAC,KAAK,CAAV,EAAa;EACX,cAAI1D,CAAC,KAAKQ,CAAV,EAAa;EACXsS,YAAAA,CAAC,CAAChd,GAAF,CAAMkK,CAAN,EAASA,CAAC,GAAG,CAAb,EAAgB,CAAC0D,CAAD,GAAKjO,CAArB;EACD,WAFD,MAEO,IAAIoJ,CAAC,KAAK2B,CAAV,EAAa;EAClBsS,YAAAA,CAAC,CAAChd,GAAF,CAAMkK,CAAN,EAASA,CAAC,GAAG,CAAb,EAAgB,CAAC8S,CAAC,CAACne,GAAF,CAAMqL,CAAN,EAASA,CAAC,GAAG,CAAb,CAAjB;EACD;;EAEDW,UAAAA,CAAC,GAAGA,CAAC,GAAG+C,CAAR;EACAjO,UAAAA,CAAC,GAAGkL,CAAC,GAAG+C,CAAR;EACAsD,UAAAA,CAAC,GAAG0B,CAAC,GAAGhF,CAAR;EACAqQ,UAAAA,CAAC,GAAGtgB,CAAC,GAAGiQ,CAAR;EACAgF,UAAAA,CAAC,GAAGA,CAAC,GAAG/H,CAAR;EACAlN,UAAAA,CAAC,GAAGA,CAAC,GAAGkN,CAAR;;EAEA,eAAKjM,CAAC,GAAGsL,CAAT,EAAYtL,CAAC,GAAGmf,EAAhB,EAAoBnf,CAAC,EAArB,EAAyB;EACvBiM,YAAAA,CAAC,GAAGmS,CAAC,CAACne,GAAF,CAAMqL,CAAN,EAAStL,CAAT,IAAcgU,CAAC,GAAGoK,CAAC,CAACne,GAAF,CAAMqL,CAAC,GAAG,CAAV,EAAatL,CAAb,CAAtB;;EACA,gBAAI2f,OAAJ,EAAa;EACX1T,cAAAA,CAAC,GAAGA,CAAC,GAAGlN,CAAC,GAAGqf,CAAC,CAACne,GAAF,CAAMqL,CAAC,GAAG,CAAV,EAAatL,CAAb,CAAZ;EACAoe,cAAAA,CAAC,CAAChd,GAAF,CAAMkK,CAAC,GAAG,CAAV,EAAatL,CAAb,EAAgBoe,CAAC,CAACne,GAAF,CAAMqL,CAAC,GAAG,CAAV,EAAatL,CAAb,IAAkBiM,CAAC,GAAGoT,CAAtC;EACD;;EAEDjB,YAAAA,CAAC,CAAChd,GAAF,CAAMkK,CAAN,EAAStL,CAAT,EAAYoe,CAAC,CAACne,GAAF,CAAMqL,CAAN,EAAStL,CAAT,IAAciM,CAAC,GAAGlL,CAA9B;EACAqd,YAAAA,CAAC,CAAChd,GAAF,CAAMkK,CAAC,GAAG,CAAV,EAAatL,CAAb,EAAgBoe,CAAC,CAACne,GAAF,CAAMqL,CAAC,GAAG,CAAV,EAAatL,CAAb,IAAkBiM,CAAC,GAAGqG,CAAtC;EACD;;EAED,eAAK5V,CAAC,GAAG,CAAT,EAAYA,CAAC,IAAI+E,IAAI,CAAC9E,GAAL,CAASoP,CAAT,EAAYT,CAAC,GAAG,CAAhB,CAAjB,EAAqC5O,CAAC,EAAtC,EAA0C;EACxCuP,YAAAA,CAAC,GAAGlL,CAAC,GAAGqd,CAAC,CAACne,GAAF,CAAMvD,CAAN,EAAS4O,CAAT,CAAJ,GAAkBgH,CAAC,GAAG8L,CAAC,CAACne,GAAF,CAAMvD,CAAN,EAAS4O,CAAC,GAAG,CAAb,CAA1B;;EACA,gBAAIqU,OAAJ,EAAa;EACX1T,cAAAA,CAAC,GAAGA,CAAC,GAAGoT,CAAC,GAAGjB,CAAC,CAACne,GAAF,CAAMvD,CAAN,EAAS4O,CAAC,GAAG,CAAb,CAAZ;EACA8S,cAAAA,CAAC,CAAChd,GAAF,CAAM1E,CAAN,EAAS4O,CAAC,GAAG,CAAb,EAAgB8S,CAAC,CAACne,GAAF,CAAMvD,CAAN,EAAS4O,CAAC,GAAG,CAAb,IAAkBW,CAAC,GAAGlN,CAAtC;EACD;;EAEDqf,YAAAA,CAAC,CAAChd,GAAF,CAAM1E,CAAN,EAAS4O,CAAT,EAAY8S,CAAC,CAACne,GAAF,CAAMvD,CAAN,EAAS4O,CAAT,IAAcW,CAA1B;EACAmS,YAAAA,CAAC,CAAChd,GAAF,CAAM1E,CAAN,EAAS4O,CAAC,GAAG,CAAb,EAAgB8S,CAAC,CAACne,GAAF,CAAMvD,CAAN,EAAS4O,CAAC,GAAG,CAAb,IAAkBW,CAAC,GAAG+H,CAAtC;EACD;;EAED,eAAKtX,CAAC,GAAGuiB,GAAT,EAAcviB,CAAC,IAAIwiB,IAAnB,EAAyBxiB,CAAC,EAA1B,EAA8B;EAC5BuP,YAAAA,CAAC,GAAGlL,CAAC,GAAGuY,CAAC,CAACrZ,GAAF,CAAMvD,CAAN,EAAS4O,CAAT,CAAJ,GAAkBgH,CAAC,GAAGgH,CAAC,CAACrZ,GAAF,CAAMvD,CAAN,EAAS4O,CAAC,GAAG,CAAb,CAA1B;;EACA,gBAAIqU,OAAJ,EAAa;EACX1T,cAAAA,CAAC,GAAGA,CAAC,GAAGoT,CAAC,GAAG/F,CAAC,CAACrZ,GAAF,CAAMvD,CAAN,EAAS4O,CAAC,GAAG,CAAb,CAAZ;EACAgO,cAAAA,CAAC,CAAClY,GAAF,CAAM1E,CAAN,EAAS4O,CAAC,GAAG,CAAb,EAAgBgO,CAAC,CAACrZ,GAAF,CAAMvD,CAAN,EAAS4O,CAAC,GAAG,CAAb,IAAkBW,CAAC,GAAGlN,CAAtC;EACD;;EAEDua,YAAAA,CAAC,CAAClY,GAAF,CAAM1E,CAAN,EAAS4O,CAAT,EAAYgO,CAAC,CAACrZ,GAAF,CAAMvD,CAAN,EAAS4O,CAAT,IAAcW,CAA1B;EACAqN,YAAAA,CAAC,CAAClY,GAAF,CAAM1E,CAAN,EAAS4O,CAAC,GAAG,CAAb,EAAgBgO,CAAC,CAACrZ,GAAF,CAAMvD,CAAN,EAAS4O,CAAC,GAAG,CAAb,IAAkBW,CAAC,GAAG+H,CAAtC;EACD;EACF;EACF;EACF;EACF;;EAED,MAAI1F,IAAI,KAAK,CAAb,EAAgB;EACd;EACD;;EAED,OAAKvC,CAAC,GAAGoT,EAAE,GAAG,CAAd,EAAiBpT,CAAC,IAAI,CAAtB,EAAyBA,CAAC,EAA1B,EAA8B;EAC5BE,IAAAA,CAAC,GAAGqQ,CAAC,CAACvQ,CAAD,CAAL;EACAiI,IAAAA,CAAC,GAAGrQ,CAAC,CAACoI,CAAD,CAAL;;EAEA,QAAIiI,CAAC,KAAK,CAAV,EAAa;EACX7J,MAAAA,CAAC,GAAG4B,CAAJ;EACAqS,MAAAA,CAAC,CAAChd,GAAF,CAAM2K,CAAN,EAASA,CAAT,EAAY,CAAZ;;EACA,WAAKrP,CAAC,GAAGqP,CAAC,GAAG,CAAb,EAAgBrP,CAAC,IAAI,CAArB,EAAwBA,CAAC,EAAzB,EAA6B;EAC3B4iB,QAAAA,CAAC,GAAGlB,CAAC,CAACne,GAAF,CAAMvD,CAAN,EAASA,CAAT,IAAcuP,CAAlB;EACAlN,QAAAA,CAAC,GAAG,CAAJ;;EACA,aAAKiB,CAAC,GAAGmK,CAAT,EAAYnK,CAAC,IAAI+L,CAAjB,EAAoB/L,CAAC,EAArB,EAAyB;EACvBjB,UAAAA,CAAC,GAAGA,CAAC,GAAGqf,CAAC,CAACne,GAAF,CAAMvD,CAAN,EAASsD,CAAT,IAAcoe,CAAC,CAACne,GAAF,CAAMD,CAAN,EAAS+L,CAAT,CAAtB;EACD;;EAED,YAAIpI,CAAC,CAACjH,CAAD,CAAD,GAAO,CAAX,EAAc;EACZ2iB,UAAAA,CAAC,GAAGC,CAAJ;EACAtQ,UAAAA,CAAC,GAAGjQ,CAAJ;EACD,SAHD,MAGO;EACLoL,UAAAA,CAAC,GAAGzN,CAAJ;;EACA,cAAIiH,CAAC,CAACjH,CAAD,CAAD,KAAS,CAAb,EAAgB;EACd0hB,YAAAA,CAAC,CAAChd,GAAF,CAAM1E,CAAN,EAASqP,CAAT,EAAYuT,CAAC,KAAK,CAAN,GAAU,CAACvgB,CAAD,GAAKugB,CAAf,GAAmB,CAACvgB,CAAD,IAAM8a,GAAG,GAAGvL,IAAZ,CAA/B;EACD,WAFD,MAEO;EACLvN,YAAAA,CAAC,GAAGqd,CAAC,CAACne,GAAF,CAAMvD,CAAN,EAASA,CAAC,GAAG,CAAb,CAAJ;EACA4V,YAAAA,CAAC,GAAG8L,CAAC,CAACne,GAAF,CAAMvD,CAAC,GAAG,CAAV,EAAaA,CAAb,CAAJ;EACAsX,YAAAA,CAAC,GAAG,CAACsI,CAAC,CAAC5f,CAAD,CAAD,GAAOuP,CAAR,KAAcqQ,CAAC,CAAC5f,CAAD,CAAD,GAAOuP,CAArB,IAA0BtI,CAAC,CAACjH,CAAD,CAAD,GAAOiH,CAAC,CAACjH,CAAD,CAAtC;EACA0a,YAAAA,CAAC,GAAG,CAACrW,CAAC,GAAGiO,CAAJ,GAAQqQ,CAAC,GAAGtgB,CAAb,IAAkBiV,CAAtB;EACAoK,YAAAA,CAAC,CAAChd,GAAF,CAAM1E,CAAN,EAASqP,CAAT,EAAYqL,CAAZ;EACAgH,YAAAA,CAAC,CAAChd,GAAF,CACE1E,CAAC,GAAG,CADN,EAEEqP,CAFF,EAGEtK,IAAI,CAAC0F,GAAL,CAASpG,CAAT,IAAcU,IAAI,CAAC0F,GAAL,CAASkY,CAAT,CAAd,GAA4B,CAAC,CAACtgB,CAAD,GAAKugB,CAAC,GAAGlI,CAAV,IAAerW,CAA3C,GAA+C,CAAC,CAACiO,CAAD,GAAKsD,CAAC,GAAG8E,CAAV,IAAeiI,CAHhE;EAKD;;EAEDjI,UAAAA,CAAC,GAAG3V,IAAI,CAAC0F,GAAL,CAASiX,CAAC,CAACne,GAAF,CAAMvD,CAAN,EAASqP,CAAT,CAAT,CAAJ;;EACA,cAAI8N,GAAG,GAAGzC,CAAN,GAAUA,CAAV,GAAc,CAAlB,EAAqB;EACnB,iBAAKpX,CAAC,GAAGtD,CAAT,EAAYsD,CAAC,IAAI+L,CAAjB,EAAoB/L,CAAC,EAArB,EAAyB;EACvBoe,cAAAA,CAAC,CAAChd,GAAF,CAAMpB,CAAN,EAAS+L,CAAT,EAAYqS,CAAC,CAACne,GAAF,CAAMD,CAAN,EAAS+L,CAAT,IAAcqL,CAA1B;EACD;EACF;EACF;EACF;EACF,KAtCD,MAsCO,IAAIpD,CAAC,GAAG,CAAR,EAAW;EAChB7J,MAAAA,CAAC,GAAG4B,CAAC,GAAG,CAAR;;EAEA,UAAItK,IAAI,CAAC0F,GAAL,CAASiX,CAAC,CAACne,GAAF,CAAM8L,CAAN,EAASA,CAAC,GAAG,CAAb,CAAT,IAA4BtK,IAAI,CAAC0F,GAAL,CAASiX,CAAC,CAACne,GAAF,CAAM8L,CAAC,GAAG,CAAV,EAAaA,CAAb,CAAT,CAAhC,EAA2D;EACzDqS,QAAAA,CAAC,CAAChd,GAAF,CAAM2K,CAAC,GAAG,CAAV,EAAaA,CAAC,GAAG,CAAjB,EAAoBiI,CAAC,GAAGoK,CAAC,CAACne,GAAF,CAAM8L,CAAN,EAASA,CAAC,GAAG,CAAb,CAAxB;EACAqS,QAAAA,CAAC,CAAChd,GAAF,CAAM2K,CAAC,GAAG,CAAV,EAAaA,CAAb,EAAgB,EAAEqS,CAAC,CAACne,GAAF,CAAM8L,CAAN,EAASA,CAAT,IAAcE,CAAhB,IAAqBmS,CAAC,CAACne,GAAF,CAAM8L,CAAN,EAASA,CAAC,GAAG,CAAb,CAArC;EACD,OAHD,MAGO;EACL6T,QAAAA,OAAO,GAAGC,IAAI,CAAC,CAAD,EAAI,CAACzB,CAAC,CAACne,GAAF,CAAM8L,CAAC,GAAG,CAAV,EAAaA,CAAb,CAAL,EAAsBqS,CAAC,CAACne,GAAF,CAAM8L,CAAC,GAAG,CAAV,EAAaA,CAAC,GAAG,CAAjB,IAAsBE,CAA5C,EAA+C+H,CAA/C,CAAd;EACAoK,QAAAA,CAAC,CAAChd,GAAF,CAAM2K,CAAC,GAAG,CAAV,EAAaA,CAAC,GAAG,CAAjB,EAAoB6T,OAAO,CAAC,CAAD,CAA3B;EACAxB,QAAAA,CAAC,CAAChd,GAAF,CAAM2K,CAAC,GAAG,CAAV,EAAaA,CAAb,EAAgB6T,OAAO,CAAC,CAAD,CAAvB;EACD;;EAEDxB,MAAAA,CAAC,CAAChd,GAAF,CAAM2K,CAAN,EAASA,CAAC,GAAG,CAAb,EAAgB,CAAhB;EACAqS,MAAAA,CAAC,CAAChd,GAAF,CAAM2K,CAAN,EAASA,CAAT,EAAY,CAAZ;;EACA,WAAKrP,CAAC,GAAGqP,CAAC,GAAG,CAAb,EAAgBrP,CAAC,IAAI,CAArB,EAAwBA,CAAC,EAAzB,EAA6B;EAC3B6iB,QAAAA,EAAE,GAAG,CAAL;EACAC,QAAAA,EAAE,GAAG,CAAL;;EACA,aAAKxf,CAAC,GAAGmK,CAAT,EAAYnK,CAAC,IAAI+L,CAAjB,EAAoB/L,CAAC,EAArB,EAAyB;EACvBuf,UAAAA,EAAE,GAAGA,EAAE,GAAGnB,CAAC,CAACne,GAAF,CAAMvD,CAAN,EAASsD,CAAT,IAAcoe,CAAC,CAACne,GAAF,CAAMD,CAAN,EAAS+L,CAAC,GAAG,CAAb,CAAxB;EACAyT,UAAAA,EAAE,GAAGA,EAAE,GAAGpB,CAAC,CAACne,GAAF,CAAMvD,CAAN,EAASsD,CAAT,IAAcoe,CAAC,CAACne,GAAF,CAAMD,CAAN,EAAS+L,CAAT,CAAxB;EACD;;EAEDuT,QAAAA,CAAC,GAAGlB,CAAC,CAACne,GAAF,CAAMvD,CAAN,EAASA,CAAT,IAAcuP,CAAlB;;EAEA,YAAItI,CAAC,CAACjH,CAAD,CAAD,GAAO,CAAX,EAAc;EACZ2iB,UAAAA,CAAC,GAAGC,CAAJ;EACAvgB,UAAAA,CAAC,GAAGwgB,EAAJ;EACAvQ,UAAAA,CAAC,GAAGwQ,EAAJ;EACD,SAJD,MAIO;EACLrV,UAAAA,CAAC,GAAGzN,CAAJ;;EACA,cAAIiH,CAAC,CAACjH,CAAD,CAAD,KAAS,CAAb,EAAgB;EACdkjB,YAAAA,OAAO,GAAGC,IAAI,CAAC,CAACN,EAAF,EAAM,CAACC,EAAP,EAAWF,CAAX,EAActL,CAAd,CAAd;EACAoK,YAAAA,CAAC,CAAChd,GAAF,CAAM1E,CAAN,EAASqP,CAAC,GAAG,CAAb,EAAgB6T,OAAO,CAAC,CAAD,CAAvB;EACAxB,YAAAA,CAAC,CAAChd,GAAF,CAAM1E,CAAN,EAASqP,CAAT,EAAY6T,OAAO,CAAC,CAAD,CAAnB;EACD,WAJD,MAIO;EACL7e,YAAAA,CAAC,GAAGqd,CAAC,CAACne,GAAF,CAAMvD,CAAN,EAASA,CAAC,GAAG,CAAb,CAAJ;EACA4V,YAAAA,CAAC,GAAG8L,CAAC,CAACne,GAAF,CAAMvD,CAAC,GAAG,CAAV,EAAaA,CAAb,CAAJ;EACA+iB,YAAAA,EAAE,GAAG,CAACnD,CAAC,CAAC5f,CAAD,CAAD,GAAOuP,CAAR,KAAcqQ,CAAC,CAAC5f,CAAD,CAAD,GAAOuP,CAArB,IAA0BtI,CAAC,CAACjH,CAAD,CAAD,GAAOiH,CAAC,CAACjH,CAAD,CAAlC,GAAwCsX,CAAC,GAAGA,CAAjD;EACA0L,YAAAA,EAAE,GAAG,CAACpD,CAAC,CAAC5f,CAAD,CAAD,GAAOuP,CAAR,IAAa,CAAb,GAAiB+H,CAAtB;;EACA,gBAAIyL,EAAE,KAAK,CAAP,IAAYC,EAAE,KAAK,CAAvB,EAA0B;EACxBD,cAAAA,EAAE,GACA5F,GAAG,GACHvL,IADA,IAEC7M,IAAI,CAAC0F,GAAL,CAASmY,CAAT,IACC7d,IAAI,CAAC0F,GAAL,CAAS6M,CAAT,CADD,GAECvS,IAAI,CAAC0F,GAAL,CAASpG,CAAT,CAFD,GAGCU,IAAI,CAAC0F,GAAL,CAASmL,CAAT,CAHD,GAIC7Q,IAAI,CAAC0F,GAAL,CAASkY,CAAT,CANF,CADF;EAQD;;EACDO,YAAAA,OAAO,GAAGC,IAAI,CACZ9e,CAAC,GAAGhC,CAAJ,GAAQsgB,CAAC,GAAGE,EAAZ,GAAiBvL,CAAC,GAAGwL,EADT,EAEZze,CAAC,GAAGiO,CAAJ,GAAQqQ,CAAC,GAAGG,EAAZ,GAAiBxL,CAAC,GAAGuL,EAFT,EAGZE,EAHY,EAIZC,EAJY,CAAd;EAMAtB,YAAAA,CAAC,CAAChd,GAAF,CAAM1E,CAAN,EAASqP,CAAC,GAAG,CAAb,EAAgB6T,OAAO,CAAC,CAAD,CAAvB;EACAxB,YAAAA,CAAC,CAAChd,GAAF,CAAM1E,CAAN,EAASqP,CAAT,EAAY6T,OAAO,CAAC,CAAD,CAAnB;;EACA,gBAAIne,IAAI,CAAC0F,GAAL,CAASpG,CAAT,IAAcU,IAAI,CAAC0F,GAAL,CAASkY,CAAT,IAAc5d,IAAI,CAAC0F,GAAL,CAAS6M,CAAT,CAAhC,EAA6C;EAC3CoK,cAAAA,CAAC,CAAChd,GAAF,CACE1E,CAAC,GAAG,CADN,EAEEqP,CAAC,GAAG,CAFN,EAGE,CAAC,CAACwT,EAAD,GAAMD,CAAC,GAAGlB,CAAC,CAACne,GAAF,CAAMvD,CAAN,EAASqP,CAAC,GAAG,CAAb,CAAV,GAA4BiI,CAAC,GAAGoK,CAAC,CAACne,GAAF,CAAMvD,CAAN,EAASqP,CAAT,CAAjC,IAAgDhL,CAHlD;EAKAqd,cAAAA,CAAC,CAAChd,GAAF,CACE1E,CAAC,GAAG,CADN,EAEEqP,CAFF,EAGE,CAAC,CAACyT,EAAD,GAAMF,CAAC,GAAGlB,CAAC,CAACne,GAAF,CAAMvD,CAAN,EAASqP,CAAT,CAAV,GAAwBiI,CAAC,GAAGoK,CAAC,CAACne,GAAF,CAAMvD,CAAN,EAASqP,CAAC,GAAG,CAAb,CAA7B,IAAgDhL,CAHlD;EAKD,aAXD,MAWO;EACL6e,cAAAA,OAAO,GAAGC,IAAI,CACZ,CAAC9gB,CAAD,GAAKuT,CAAC,GAAG8L,CAAC,CAACne,GAAF,CAAMvD,CAAN,EAASqP,CAAC,GAAG,CAAb,CADG,EAEZ,CAACiD,CAAD,GAAKsD,CAAC,GAAG8L,CAAC,CAACne,GAAF,CAAMvD,CAAN,EAASqP,CAAT,CAFG,EAGZsT,CAHY,EAIZrL,CAJY,CAAd;EAMAoK,cAAAA,CAAC,CAAChd,GAAF,CAAM1E,CAAC,GAAG,CAAV,EAAaqP,CAAC,GAAG,CAAjB,EAAoB6T,OAAO,CAAC,CAAD,CAA3B;EACAxB,cAAAA,CAAC,CAAChd,GAAF,CAAM1E,CAAC,GAAG,CAAV,EAAaqP,CAAb,EAAgB6T,OAAO,CAAC,CAAD,CAAvB;EACD;EACF;;EAEDxI,UAAAA,CAAC,GAAG3V,IAAI,CAACpF,GAAL,CAASoF,IAAI,CAAC0F,GAAL,CAASiX,CAAC,CAACne,GAAF,CAAMvD,CAAN,EAASqP,CAAC,GAAG,CAAb,CAAT,CAAT,EAAoCtK,IAAI,CAAC0F,GAAL,CAASiX,CAAC,CAACne,GAAF,CAAMvD,CAAN,EAASqP,CAAT,CAAT,CAApC,CAAJ;;EACA,cAAI8N,GAAG,GAAGzC,CAAN,GAAUA,CAAV,GAAc,CAAlB,EAAqB;EACnB,iBAAKpX,CAAC,GAAGtD,CAAT,EAAYsD,CAAC,IAAI+L,CAAjB,EAAoB/L,CAAC,EAArB,EAAyB;EACvBoe,cAAAA,CAAC,CAAChd,GAAF,CAAMpB,CAAN,EAAS+L,CAAC,GAAG,CAAb,EAAgBqS,CAAC,CAACne,GAAF,CAAMD,CAAN,EAAS+L,CAAC,GAAG,CAAb,IAAkBqL,CAAlC;EACAgH,cAAAA,CAAC,CAAChd,GAAF,CAAMpB,CAAN,EAAS+L,CAAT,EAAYqS,CAAC,CAACne,GAAF,CAAMD,CAAN,EAAS+L,CAAT,IAAcqL,CAA1B;EACD;EACF;EACF;EACF;EACF;EACF;;EAED,OAAK1a,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGyiB,EAAhB,EAAoBziB,CAAC,EAArB,EAAyB;EACvB,QAAIA,CAAC,GAAGuiB,GAAJ,IAAWviB,CAAC,GAAGwiB,IAAnB,EAAyB;EACvB,WAAKlf,CAAC,GAAGtD,CAAT,EAAYsD,CAAC,GAAGmf,EAAhB,EAAoBnf,CAAC,EAArB,EAAyB;EACvBsZ,QAAAA,CAAC,CAAClY,GAAF,CAAM1E,CAAN,EAASsD,CAAT,EAAYoe,CAAC,CAACne,GAAF,CAAMvD,CAAN,EAASsD,CAAT,CAAZ;EACD;EACF;EACF;;EAED,OAAKA,CAAC,GAAGmf,EAAE,GAAG,CAAd,EAAiBnf,CAAC,IAAIif,GAAtB,EAA2Bjf,CAAC,EAA5B,EAAgC;EAC9B,SAAKtD,CAAC,GAAGuiB,GAAT,EAAcviB,CAAC,IAAIwiB,IAAnB,EAAyBxiB,CAAC,EAA1B,EAA8B;EAC5B2iB,MAAAA,CAAC,GAAG,CAAJ;;EACA,WAAK/T,CAAC,GAAG2T,GAAT,EAAc3T,CAAC,IAAI7J,IAAI,CAAC9E,GAAL,CAASqD,CAAT,EAAYkf,IAAZ,CAAnB,EAAsC5T,CAAC,EAAvC,EAA2C;EACzC+T,QAAAA,CAAC,GAAGA,CAAC,GAAG/F,CAAC,CAACrZ,GAAF,CAAMvD,CAAN,EAAS4O,CAAT,IAAc8S,CAAC,CAACne,GAAF,CAAMqL,CAAN,EAAStL,CAAT,CAAtB;EACD;;EACDsZ,MAAAA,CAAC,CAAClY,GAAF,CAAM1E,CAAN,EAASsD,CAAT,EAAYqf,CAAZ;EACD;EACF;EACF;;EAED,SAASQ,IAAT,CAAcC,EAAd,EAAkBC,EAAlB,EAAsBC,EAAtB,EAA0BC,EAA1B,EAA8B;EAC5B,MAAIlhB,CAAJ,EAAOud,CAAP;;EACA,MAAI7a,IAAI,CAAC0F,GAAL,CAAS6Y,EAAT,IAAeve,IAAI,CAAC0F,GAAL,CAAS8Y,EAAT,CAAnB,EAAiC;EAC/BlhB,IAAAA,CAAC,GAAGkhB,EAAE,GAAGD,EAAT;EACA1D,IAAAA,CAAC,GAAG0D,EAAE,GAAGjhB,CAAC,GAAGkhB,EAAb;EACA,WAAO,CAAC,CAACH,EAAE,GAAG/gB,CAAC,GAAGghB,EAAV,IAAgBzD,CAAjB,EAAoB,CAACyD,EAAE,GAAGhhB,CAAC,GAAG+gB,EAAV,IAAgBxD,CAApC,CAAP;EACD,GAJD,MAIO;EACLvd,IAAAA,CAAC,GAAGihB,EAAE,GAAGC,EAAT;EACA3D,IAAAA,CAAC,GAAG2D,EAAE,GAAGlhB,CAAC,GAAGihB,EAAb;EACA,WAAO,CAAC,CAACjhB,CAAC,GAAG+gB,EAAJ,GAASC,EAAV,IAAgBzD,CAAjB,EAAoB,CAACvd,CAAC,GAAGghB,EAAJ,GAASD,EAAV,IAAgBxD,CAApC,CAAP;EACD;EACF;;ECzxBc,MAAM4D,qBAAN,CAA4B;EACzC5d,EAAAA,WAAW,CAAC5C,KAAD,EAAQ;EACjBA,IAAAA,KAAK,GAAGoX,eAAe,CAAC3S,WAAhB,CAA4BzE,KAA5B,CAAR;;EACA,QAAI,CAACA,KAAK,CAACuL,WAAN,EAAL,EAA0B;EACxB,YAAM,IAAIkB,KAAJ,CAAU,yBAAV,CAAN;EACD;;EAED,QAAI8G,CAAC,GAAGvT,KAAR;EACA,QAAIygB,SAAS,GAAGlN,CAAC,CAAClV,IAAlB;EACA,QAAIoM,CAAC,GAAG,IAAIpG,MAAJ,CAAWoc,SAAX,EAAsBA,SAAtB,CAAR;EACA,QAAIC,gBAAgB,GAAG,IAAvB;EACA,QAAI1jB,CAAJ,EAAOsD,CAAP,EAAUsL,CAAV;;EAEA,SAAKtL,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGmgB,SAAhB,EAA2BngB,CAAC,EAA5B,EAAgC;EAC9B,UAAIsc,CAAC,GAAG,CAAR;;EACA,WAAKhR,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGtL,CAAhB,EAAmBsL,CAAC,EAApB,EAAwB;EACtB,YAAI0D,CAAC,GAAG,CAAR;;EACA,aAAKtS,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAG4O,CAAhB,EAAmB5O,CAAC,EAApB,EAAwB;EACtBsS,UAAAA,CAAC,IAAI7E,CAAC,CAAClK,GAAF,CAAMqL,CAAN,EAAS5O,CAAT,IAAcyN,CAAC,CAAClK,GAAF,CAAMD,CAAN,EAAStD,CAAT,CAAnB;EACD;;EACDsS,QAAAA,CAAC,GAAG,CAACiE,CAAC,CAAChT,GAAF,CAAMD,CAAN,EAASsL,CAAT,IAAc0D,CAAf,IAAoB7E,CAAC,CAAClK,GAAF,CAAMqL,CAAN,EAASA,CAAT,CAAxB;EACAnB,QAAAA,CAAC,CAAC/I,GAAF,CAAMpB,CAAN,EAASsL,CAAT,EAAY0D,CAAZ;EACAsN,QAAAA,CAAC,GAAGA,CAAC,GAAGtN,CAAC,GAAGA,CAAZ;EACD;;EAEDsN,MAAAA,CAAC,GAAGrJ,CAAC,CAAChT,GAAF,CAAMD,CAAN,EAASA,CAAT,IAAcsc,CAAlB;EAEA8D,MAAAA,gBAAgB,IAAI9D,CAAC,GAAG,CAAxB;EACAnS,MAAAA,CAAC,CAAC/I,GAAF,CAAMpB,CAAN,EAASA,CAAT,EAAYyB,IAAI,CAACE,IAAL,CAAUF,IAAI,CAACpF,GAAL,CAASigB,CAAT,EAAY,CAAZ,CAAV,CAAZ;;EACA,WAAKhR,CAAC,GAAGtL,CAAC,GAAG,CAAb,EAAgBsL,CAAC,GAAG6U,SAApB,EAA+B7U,CAAC,EAAhC,EAAoC;EAClCnB,QAAAA,CAAC,CAAC/I,GAAF,CAAMpB,CAAN,EAASsL,CAAT,EAAY,CAAZ;EACD;EACF;;EAED,QAAI,CAAC8U,gBAAL,EAAuB;EACrB,YAAM,IAAIjU,KAAJ,CAAU,iCAAV,CAAN;EACD;;EAED,SAAKkU,CAAL,GAASlW,CAAT;EACD;;EAEDuN,EAAAA,KAAK,CAAChY,KAAD,EAAQ;EACXA,IAAAA,KAAK,GAAGoX,eAAe,CAAC3S,WAAhB,CAA4BzE,KAA5B,CAAR;EAEA,QAAIyK,CAAC,GAAG,KAAKkW,CAAb;EACA,QAAIF,SAAS,GAAGhW,CAAC,CAACpM,IAAlB;;EAEA,QAAI2B,KAAK,CAAC3B,IAAN,KAAeoiB,SAAnB,EAA8B;EAC5B,YAAM,IAAIhU,KAAJ,CAAU,gCAAV,CAAN;EACD;;EAED,QAAIwL,KAAK,GAAGjY,KAAK,CAACzB,OAAlB;EACA,QAAIqiB,CAAC,GAAG5gB,KAAK,CAAC8L,KAAN,EAAR;EACA,QAAI9O,CAAJ,EAAOsD,CAAP,EAAUsL,CAAV;;EAEA,SAAKA,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAG6U,SAAhB,EAA2B7U,CAAC,EAA5B,EAAgC;EAC9B,WAAKtL,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAG2X,KAAhB,EAAuB3X,CAAC,EAAxB,EAA4B;EAC1B,aAAKtD,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAG4O,CAAhB,EAAmB5O,CAAC,EAApB,EAAwB;EACtB4jB,UAAAA,CAAC,CAAClf,GAAF,CAAMkK,CAAN,EAAStL,CAAT,EAAYsgB,CAAC,CAACrgB,GAAF,CAAMqL,CAAN,EAAStL,CAAT,IAAcsgB,CAAC,CAACrgB,GAAF,CAAMvD,CAAN,EAASsD,CAAT,IAAcmK,CAAC,CAAClK,GAAF,CAAMqL,CAAN,EAAS5O,CAAT,CAAxC;EACD;;EACD4jB,QAAAA,CAAC,CAAClf,GAAF,CAAMkK,CAAN,EAAStL,CAAT,EAAYsgB,CAAC,CAACrgB,GAAF,CAAMqL,CAAN,EAAStL,CAAT,IAAcmK,CAAC,CAAClK,GAAF,CAAMqL,CAAN,EAASA,CAAT,CAA1B;EACD;EACF;;EAED,SAAKA,CAAC,GAAG6U,SAAS,GAAG,CAArB,EAAwB7U,CAAC,IAAI,CAA7B,EAAgCA,CAAC,EAAjC,EAAqC;EACnC,WAAKtL,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAG2X,KAAhB,EAAuB3X,CAAC,EAAxB,EAA4B;EAC1B,aAAKtD,CAAC,GAAG4O,CAAC,GAAG,CAAb,EAAgB5O,CAAC,GAAGyjB,SAApB,EAA+BzjB,CAAC,EAAhC,EAAoC;EAClC4jB,UAAAA,CAAC,CAAClf,GAAF,CAAMkK,CAAN,EAAStL,CAAT,EAAYsgB,CAAC,CAACrgB,GAAF,CAAMqL,CAAN,EAAStL,CAAT,IAAcsgB,CAAC,CAACrgB,GAAF,CAAMvD,CAAN,EAASsD,CAAT,IAAcmK,CAAC,CAAClK,GAAF,CAAMvD,CAAN,EAAS4O,CAAT,CAAxC;EACD;;EACDgV,QAAAA,CAAC,CAAClf,GAAF,CAAMkK,CAAN,EAAStL,CAAT,EAAYsgB,CAAC,CAACrgB,GAAF,CAAMqL,CAAN,EAAStL,CAAT,IAAcmK,CAAC,CAAClK,GAAF,CAAMqL,CAAN,EAASA,CAAT,CAA1B;EACD;EACF;;EAED,WAAOgV,CAAP;EACD;;EAED,MAAIxI,qBAAJ,GAA4B;EAC1B,WAAO,KAAKuI,CAAZ;EACD;;EA9EwC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ECD3C;;;;;;EAMA,SAAS3f,IAAT,CAAcpE,KAAd,EAAqB;EACnB,MAAI,CAACC,GAAO,CAACD,KAAD,CAAZ,EAAqB;EACnB,UAAM,IAAIE,SAAJ,CAAc,wBAAd,CAAN;EACD;;EAED,MAAIF,KAAK,CAACG,MAAN,KAAiB,CAArB,EAAwB;EACtB,UAAM,IAAID,SAAJ,CAAc,yBAAd,CAAN;EACD;;EAED,MAAIuD,GAAG,GAAG,CAAV;;EAEA,OAAK,IAAIrD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGJ,KAAK,CAACG,MAA1B,EAAkCC,CAAC,EAAnC,EAAuC;EACrCqD,IAAAA,GAAG,IAAIzD,KAAK,CAACI,CAAD,CAAZ;EACD;;EAED,SAAOqD,GAAG,GAAGzD,KAAK,CAACG,MAAnB;EACD;;ECrBD;;;;;;;;AAOA,EAAO,SAAS8jB,sBAAT,CAAgC5gB,KAAhC,EAAuC6gB,eAAvC,EAAwD;EAC7D,MAAIC,MAAM,GAAG,IAAIxjB,KAAJ,CAAUujB,eAAV,EAA2B/W,IAA3B,CAAgC,CAAhC,CAAb;;EACA,OAAK,IAAI/M,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGiD,KAAK,CAAClD,MAA1B,EAAkC,EAAEC,CAApC,EAAuC;EACrC+jB,IAAAA,MAAM,CAAC9gB,KAAK,CAACjD,CAAD,CAAN,CAAN,IAAoB,IAAIiD,KAAK,CAAClD,MAA9B;EACD;;EAED,SAAOsH,MAAM,CAACsF,SAAP,CAAiBoX,MAAjB,CAAP;EACD;EAED;;;;;;;AAMA,EAAO,SAASC,YAAT,CAAsB/gB,KAAtB,EAA6B;EAClC,MAAIA,KAAK,CAAClD,MAAN,KAAiB,CAArB,EAAwB;EACtB,WAAO,CAAP;EACD;;EAED,MAAIkkB,aAAa,GAAGJ,sBAAsB,CACxC5gB,KADwC,EAExCihB,kBAAkB,CAACjhB,KAAD,CAFsB,CAAtB,CAGlB2M,MAHkB,CAGX,CAHW,CAApB;EAKA,MAAIvM,GAAG,GAAG,GAAV;;EACA,OAAK,IAAIrD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGikB,aAAa,CAAClkB,MAAlC,EAA0C,EAAEC,CAA5C,EAA+C;EAC7CqD,IAAAA,GAAG,IAAI4gB,aAAa,CAACjkB,CAAD,CAAb,GAAmBikB,aAAa,CAACjkB,CAAD,CAAvC;EACD;;EAED,SAAO,IAAIqD,GAAX;EACD;EAED;;;;;;;AAMA,EAAO,SAAS6gB,kBAAT,CAA4BjhB,KAA5B,EAAmC;EACxC,SAAOA,KAAK,CAACkhB,MAAN,CAAa,UAAUC,GAAV,EAAepkB,CAAf,EAAkBqkB,GAAlB,EAAuB;EACzC,WAAOA,GAAG,CAACrd,OAAJ,CAAYod,GAAZ,MAAqBpkB,CAA5B;EACD,GAFM,EAEJD,MAFH;EAGD;EAED;;;;;;;;AAQA,EAAO,SAASukB,QAAT,CAAkBrhB,KAAlB,EAAyBshB,QAAzB,EAAmC;EACxC,MAAIC,cAAc,GAAG,GAArB;EACA,MAAIC,MAAM,GAAG,CAAC,SAAD,EAAY,QAAZ,CAAb;;EAEA,OAAK,IAAIzkB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGykB,MAAM,CAAC1kB,MAA3B,EAAmC,EAAEC,CAArC,EAAwC;EACtC,QAAI0kB,YAAY,GAAGH,QAAQ,CAACE,MAAM,CAACzkB,CAAD,CAAP,CAA3B;EACAwkB,IAAAA,cAAc,IACXR,YAAY,CAACU,YAAD,CAAZ,GAA6BA,YAAY,CAAC3kB,MAA3C,GAAqDkD,KAAK,CAAClD,MAD7D;EAED;;EAED,SAAOikB,YAAY,CAAC/gB,KAAD,CAAZ,GAAsBuhB,cAA7B;EACD;EAED;;;;;;;AAMA,EAAO,SAASG,YAAT,CAAsB1hB,KAAtB,EAA6B;EAClC,MAAIwK,CAAC,GAAGxK,KAAK,CAAClD,MAAd;EAEA,MAAIqP,CAAC,GAAGwV,IAAS,CAAC3hB,KAAD,CAAjB;EACA,MAAI0hB,YAAY,GAAG,GAAnB;;EAEA,OAAK,IAAI3kB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGyN,CAApB,EAAuB,EAAEzN,CAAzB,EAA4B;EAC1B,QAAI6kB,cAAc,GAAG5hB,KAAK,CAACjD,CAAD,CAA1B;EACA2kB,IAAAA,YAAY,IAAI,CAACE,cAAc,GAAGzV,CAAlB,KAAwByV,cAAc,GAAGzV,CAAzC,CAAhB;EACD;;EAED,SAAOuV,YAAP;EACD;EAED;;;;;;;;AAOA,EAAO,SAASG,eAAT,CAAyB7hB,KAAzB,EAAgCshB,QAAhC,EAA0C;EAC/C,MAAInE,KAAK,GAAG,GAAZ;EACA,MAAIqE,MAAM,GAAG,CAAC,SAAD,EAAY,QAAZ,CAAb;;EAEA,OAAK,IAAIzkB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGykB,MAAM,CAAC1kB,MAA3B,EAAmC,EAAEC,CAArC,EAAwC;EACtC,QAAI0kB,YAAY,GAAGH,QAAQ,CAACE,MAAM,CAACzkB,CAAD,CAAP,CAA3B;EACAogB,IAAAA,KAAK,IAAIuE,YAAY,CAACD,YAAD,CAArB;EACD;;EACD,SAAOtE,KAAP;EACD;EAED;;;;;;;;;;AASA,EAAO,SAAS2E,cAAT,CAAwB7J,CAAxB,EAA2BtF,CAA3B,EAA8B3T,MAA9B,EAAsCe,KAAtC,EAA6C;EAClD,MAAIgiB,OAAO,GAAG,EAAd;EACA,MAAIC,QAAQ,GAAG,EAAf;EACA,MAAIC,OAAO,GAAG,EAAd;EACA,MAAIC,QAAQ,GAAG,EAAf;;EAEA,OAAK,IAAInlB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGkb,CAAC,CAAC7Z,IAAtB,EAA4B,EAAErB,CAA9B,EAAiC;EAC/B,QAAIkb,CAAC,CAAC3X,GAAF,CAAMvD,CAAN,EAASiC,MAAT,IAAmBe,KAAvB,EAA8B;EAC5BgiB,MAAAA,OAAO,CAAC9hB,IAAR,CAAagY,CAAC,CAACtL,MAAF,CAAS5P,CAAT,CAAb;EACAklB,MAAAA,OAAO,CAAChiB,IAAR,CAAa0S,CAAC,CAAC5V,CAAD,CAAd;EACD,KAHD,MAGO;EACLilB,MAAAA,QAAQ,CAAC/hB,IAAT,CAAcgY,CAAC,CAACtL,MAAF,CAAS5P,CAAT,CAAd;EACAmlB,MAAAA,QAAQ,CAACjiB,IAAT,CAAc0S,CAAC,CAAC5V,CAAD,CAAf;EACD;EACF;;EAED,SAAO;EACLilB,IAAAA,QAAQ,EAAEA,QADL;EAELE,IAAAA,QAAQ,EAAEA,QAFL;EAGLH,IAAAA,OAAO,EAAEA,OAHJ;EAILE,IAAAA,OAAO,EAAEA;EAJJ,GAAP;EAMD;EAED;;;;;;;;AAOA,EAAO,SAASlhB,MAAT,CAAcuS,CAAd,EAAiBC,CAAjB,EAAoB;EACzB,SAAO,CAACD,CAAC,GAAGC,CAAL,IAAU,CAAjB;EACD;EAED;;;;;;;;AAOA,EAAO,SAAS4O,GAAT,CAAa7O,CAAb,EAAgBC,CAAhB,EAAmB;EACxB,MAAID,CAAC,CAACxW,MAAF,KAAayW,CAAC,CAACzW,MAAnB,EAA2B;EACzB,UAAM,IAAID,SAAJ,wCAC4ByW,CAAC,CAACxW,MAD9B,mCAEFyW,CAAC,CAACzW,MAFA,EAAN;EAKD;;EAED,MAAIslB,GAAG,GAAG,IAAI9kB,KAAJ,CAAUgW,CAAC,CAACxW,MAAZ,CAAV;;EACA,OAAK,IAAIC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGuW,CAAC,CAACxW,MAAtB,EAA8B,EAAEC,CAAhC,EAAmC;EACjCqlB,IAAAA,GAAG,CAACrlB,CAAD,CAAH,GAAS,CAACuW,CAAC,CAACvW,CAAD,CAAF,EAAOwW,CAAC,CAACxW,CAAD,CAAR,CAAT;EACD;;EAED,SAAOqlB,GAAP;EACD;;EC/KD,MAAMC,aAAa,GAAG;EACpBC,EAAAA,IAAI,EAAEC,QADc;EAEpBC,EAAAA,UAAU,EAAED;EAFQ,CAAtB;EAKA,MAAME,cAAc,GAAG;EACrB1hB,EAAAA,IAAI,EAAEwhB;EADe,CAAvB;AAIA,EAAe,MAAMG,QAAN,CAAe;EAC5B;;;;;;EAMA/f,EAAAA,WAAW,CAACzF,OAAD,EAAU;EACnB;EACA,SAAKylB,IAAL,GAAYzlB,OAAO,CAACylB,IAApB;EACA,SAAKC,YAAL,GAAoB1lB,OAAO,CAAC0lB,YAA5B;EACA,SAAKC,aAAL,GAAqB3lB,OAAO,CAAC2lB,aAA7B;EACA,SAAKC,aAAL,GAAqB5lB,OAAO,CAAC4lB,aAA7B;EACA,SAAKC,QAAL,GAAgB7lB,OAAO,CAAC6lB,QAAxB;EACD;EAED;;;;;;;;;EAOAC,EAAAA,SAAS,CAACC,UAAD,EAAatQ,CAAb,EAAgB;EACvB;EACA;EAEA,QAAIuQ,QAAQ,GAAG,KAAKP,IAAL,KAAc,YAAd,GAA6B,CAACQ,QAA9B,GAAyCA,QAAxD;EACA,QAAIC,KAAK,GAAG,KAAKT,IAAL,KAAc,YAAd,GAA6B,CAACrP,CAAD,EAAIC,CAAJ,KAAUD,CAAC,GAAGC,CAA3C,GAA+C,CAACD,CAAD,EAAIC,CAAJ,KAAUD,CAAC,GAAGC,CAAzE;EAEA,QAAIhF,SAAJ;EACA,QAAIzQ,QAAJ;;EAEA,SAAK,IAAIf,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGkmB,UAAU,CAAC7kB,IAA/B,EAAqC,EAAErB,CAAvC,EAA0C;EACxC,UAAIsmB,cAAc,GAAGJ,UAAU,CAACtW,MAAX,CAAkB5P,CAAlB,CAArB;EACA,UAAIumB,WAAW,GAAG,KAAKC,YAAL,CAAkBF,cAAlB,EAAkC1Q,CAAlC,CAAlB;;EACA,WAAK,IAAItS,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGijB,WAAW,CAACxmB,MAAhC,EAAwC,EAAEuD,CAA1C,EAA6C;EAC3C,YAAImjB,eAAe,GAAGF,WAAW,CAACjjB,CAAD,CAAjC;EACA,YAAIihB,QAAQ,GAAG,KAAKmC,KAAL,CAAWJ,cAAX,EAA2B1Q,CAA3B,EAA8B6Q,eAA9B,CAAf;EAEA,YAAIE,IAAI,GAAGrB,aAAa,CAAC,KAAKO,YAAN,CAAb,CAAiCjQ,CAAjC,EAAoC2O,QAApC,CAAX;;EACA,YAAI8B,KAAK,CAACM,IAAD,EAAOR,QAAP,CAAT,EAA2B;EACzB3U,UAAAA,SAAS,GAAGxR,CAAZ;EACAe,UAAAA,QAAQ,GAAG0lB,eAAX;EACAN,UAAAA,QAAQ,GAAGQ,IAAX;EACD;EACF;EACF;;EAED,WAAO;EACLC,MAAAA,OAAO,EAAET,QADJ;EAEL3U,MAAAA,SAAS,EAAEA,SAFN;EAGLzQ,MAAAA,QAAQ,EAAEA;EAHL,KAAP;EAKD;EAED;;;;;;;;;;EAQA2lB,EAAAA,KAAK,CAACriB,CAAD,EAAIuR,CAAJ,EAAOiR,UAAP,EAAmB;EACtB,QAAIC,MAAM,GAAG,EAAb;EACA,QAAIC,OAAO,GAAG,EAAd;;EAEA,SAAK,IAAI/mB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGqE,CAAC,CAACtE,MAAtB,EAA8B,EAAEC,CAAhC,EAAmC;EACjC,UAAIqE,CAAC,CAACrE,CAAD,CAAD,GAAO6mB,UAAX,EAAuB;EACrBC,QAAAA,MAAM,CAAC5jB,IAAP,CAAY0S,CAAC,CAAC5V,CAAD,CAAb;EACD,OAFD,MAEO;EACL+mB,QAAAA,OAAO,CAAC7jB,IAAR,CAAa0S,CAAC,CAAC5V,CAAD,CAAd;EACD;EACF;;EAED,WAAO;EACL+mB,MAAAA,OAAO,EAAEA,OADJ;EAELD,MAAAA,MAAM,EAAEA;EAFH,KAAP;EAID;EAED;;;;;;;;;EAOAN,EAAAA,YAAY,CAACniB,CAAD,EAAIuR,CAAJ,EAAO;EACjB,QAAI2Q,WAAW,GAAG,EAAlB;EACA,QAAIlC,GAAG,GAAGmB,GAAA,CAAUnhB,CAAV,EAAauR,CAAb,CAAV;EACAyO,IAAAA,GAAG,CAAC1M,IAAJ,CAAS,UAAUpB,CAAV,EAAaC,CAAb,EAAgB;EACvB,aAAOD,CAAC,CAAC,CAAD,CAAD,GAAOC,CAAC,CAAC,CAAD,CAAf;EACD,KAFD;;EAIA,SAAK,IAAIxW,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGqkB,GAAG,CAACtkB,MAAxB,EAAgC,EAAEC,CAAlC,EAAqC;EACnC,UAAIqkB,GAAG,CAACrkB,CAAC,GAAG,CAAL,CAAH,CAAW,CAAX,MAAkBqkB,GAAG,CAACrkB,CAAD,CAAH,CAAO,CAAP,CAAtB,EAAiC;EAC/BumB,QAAAA,WAAW,CAACrjB,IAAZ,CACEwiB,cAAc,CAAC,KAAKI,aAAN,CAAd,CAAmCzB,GAAG,CAACrkB,CAAC,GAAG,CAAL,CAAH,CAAW,CAAX,CAAnC,EAAkDqkB,GAAG,CAACrkB,CAAD,CAAH,CAAO,CAAP,CAAlD,CADF;EAGD;EACF;;EAED,WAAOumB,WAAP;EACD;EAED;;;;;;;EAKAS,EAAAA,mBAAmB,CAACpR,CAAD,EAAI;EACrB,QAAI,KAAKgQ,IAAL,KAAc,YAAlB,EAAgC;EAC9B,WAAKqB,YAAL,GAAoBzB,sBAAA,CAClB5P,CADkB,EAElB4P,kBAAA,CAAyB5P,CAAzB,CAFkB,CAApB;;EAIA,UAAI,KAAKqR,YAAL,CAAkB1lB,OAAlB,KAA8B,CAAlC,EAAqC;EACnC,cAAM,IAAIzB,SAAJ,CAAc,mCAAd,CAAN;EACD;EACF,KARD,MAQO;EACL,WAAKmnB,YAAL,GAAoBjjB,IAAI,CAAC4R,CAAD,CAAxB;EACD;EACF;EAED;;;;;;;;;;;;EAUAsR,EAAAA,KAAK,CAAChM,CAAD,EAAItF,CAAJ,EAAOuR,YAAP,EAAqBC,UAArB,EAAiC;EACpC,QAAIlM,CAAC,CAAC7Z,IAAF,IAAU,KAAK0kB,aAAnB,EAAkC;EAChC,WAAKiB,mBAAL,CAAyBpR,CAAzB;EACA;EACD;;EACD,QAAIwR,UAAU,KAAK/mB,SAAnB,EAA8B+mB,UAAU,GAAG,GAAb;EAE9B,QAAIlB,UAAU,GAAGhL,CAAC,CAAC3D,SAAF,EAAjB;EACA,QAAImP,KAAK,GAAG,KAAKT,SAAL,CAAeC,UAAf,EAA2BtQ,CAA3B,CAAZ;EAEA,SAAKiR,UAAL,GAAkBH,KAAK,CAAC3lB,QAAxB;EACA,SAAKsmB,WAAL,GAAmBX,KAAK,CAAClV,SAAzB;EACA,SAAKmV,IAAL,GAAYD,KAAK,CAACE,OAAlB;EAEA,QAAIU,cAAc,GAAG9B,cAAA,CACnBtK,CADmB,EAEnBtF,CAFmB,EAGnB,KAAKyR,WAHc,EAInB,KAAKR,UAJc,CAArB;;EAOA,QACEM,YAAY,GAAG,KAAKnB,QAApB,IACC,KAAKW,IAAL,GAAY,IAAZ,IAAoB,KAAKA,IAAL,KAAcS,UADnC,IAECE,cAAc,CAACtC,OAAf,CAAuBjlB,MAAvB,GAAgC,CAAhC,IAAqCunB,cAAc,CAACrC,QAAf,CAAwBllB,MAAxB,GAAiC,CAHzE,EAIE;EACA,WAAKwnB,IAAL,GAAY,IAAI5B,QAAJ,CAAa,IAAb,CAAZ;EACA,WAAK6B,KAAL,GAAa,IAAI7B,QAAJ,CAAa,IAAb,CAAb;EAEA,UAAIX,OAAO,GAAG,IAAI3d,MAAJ,CAAWigB,cAAc,CAACtC,OAA1B,CAAd;EACA,UAAIC,QAAQ,GAAG,IAAI5d,MAAJ,CAAWigB,cAAc,CAACrC,QAA1B,CAAf;EAEA,WAAKsC,IAAL,CAAUL,KAAV,CACElC,OADF,EAEEsC,cAAc,CAACpC,OAFjB,EAGEiC,YAAY,GAAG,CAHjB,EAIE,KAAKR,IAJP;EAMA,WAAKa,KAAL,CAAWN,KAAX,CACEjC,QADF,EAEEqC,cAAc,CAACnC,QAFjB,EAGEgC,YAAY,GAAG,CAHjB,EAIE,KAAKR,IAJP;EAMD,KAvBD,MAuBO;EACL,WAAKK,mBAAL,CAAyBpR,CAAzB;EACD;EACF;EAED;;;;;;;;;;EAQA6R,EAAAA,QAAQ,CAAC1lB,GAAD,EAAM;EACZ,QAAI,KAAKylB,KAAL,IAAc,KAAKD,IAAvB,EAA6B;EAC3B,UAAIxlB,GAAG,CAAC,KAAKslB,WAAN,CAAH,GAAwB,KAAKR,UAAjC,EAA6C;EAC3C,eAAO,KAAKU,IAAL,CAAUE,QAAV,CAAmB1lB,GAAnB,CAAP;EACD,OAFD,MAEO;EACL,eAAO,KAAKylB,KAAL,CAAWC,QAAX,CAAoB1lB,GAApB,CAAP;EACD;EACF;;EAED,WAAO,KAAKklB,YAAZ;EACD;EAED;;;;;;;EAKAS,EAAAA,iBAAiB,CAACC,IAAD,EAAO;EACtB,QAAIA,IAAI,CAACV,YAAL,KAAsB5mB,SAA1B,EAAqC;EACnC,WAAK4mB,YAAL,GACEU,IAAI,CAACV,YAAL,CAAkBrhB,WAAlB,KAAkCrF,KAAlC,GACI,IAAI8G,MAAJ,CAAWsgB,IAAI,CAACV,YAAhB,CADJ,GAEIU,IAAI,CAACV,YAHX;EAID,KALD,MAKO;EACL,WAAKA,YAAL,GAAoB5mB,SAApB;EACA,WAAKwmB,UAAL,GAAkBc,IAAI,CAACd,UAAvB;EACA,WAAKQ,WAAL,GAAmBM,IAAI,CAACN,WAAxB;EACA,WAAKV,IAAL,GAAYgB,IAAI,CAAChB,IAAjB;EAEA,WAAKY,IAAL,GAAY,IAAI5B,QAAJ,CAAa,IAAb,CAAZ;EACA,WAAK6B,KAAL,GAAa,IAAI7B,QAAJ,CAAa,IAAb,CAAb;;EAEA,UAAIgC,IAAI,CAACJ,IAAL,KAAc,EAAlB,EAAsB;EACpB,aAAKA,IAAL,CAAUG,iBAAV,CAA4BC,IAAI,CAACJ,IAAjC;EACD;;EACD,UAAII,IAAI,CAACH,KAAL,KAAe,EAAnB,EAAuB;EACrB,aAAKA,KAAL,CAAWE,iBAAX,CAA6BC,IAAI,CAACH,KAAlC;EACD;EACF;EACF;;EAxO2B;;ECV9B,MAAMI,cAAc,GAAG;EACrB/B,EAAAA,YAAY,EAAE,MADO;EAErBC,EAAAA,aAAa,EAAE,MAFM;EAGrBC,EAAAA,aAAa,EAAE,CAHM;EAIrBC,EAAAA,QAAQ,EAAEI;EAJW,CAAvB;AAOA,EAAO,MAAMyB,sBAAN,CAA6B;EAClC;;;;;;;;;;EAUAjiB,EAAAA,WAAW,CAACzF,OAAD,EAAU2nB,KAAV,EAAiB;EAC1B,QAAI3nB,OAAO,KAAK,IAAhB,EAAsB;EACpB,WAAKA,OAAL,GAAe2nB,KAAK,CAAC3nB,OAArB;EACA,WAAK4nB,IAAL,GAAY,IAAIC,QAAJ,CAASF,KAAK,CAAC3nB,OAAf,CAAZ;EACA,WAAK4nB,IAAL,CAAUL,iBAAV,CAA4BI,KAAK,CAACC,IAAlC;EACD,KAJD,MAIO;EACL,WAAK5nB,OAAL,GAAed,MAAM,CAAC4oB,MAAP,CAAc,EAAd,EAAkBL,cAAlB,EAAkCznB,OAAlC,CAAf;EACA,WAAKA,OAAL,CAAaylB,IAAb,GAAoB,YAApB;EACD;EACF;EAED;;;;;;;EAKAsB,EAAAA,KAAK,CAACgB,WAAD,EAAcC,cAAd,EAA8B;EACjC,SAAKJ,IAAL,GAAY,IAAIC,QAAJ,CAAS,KAAK7nB,OAAd,CAAZ;EACA+nB,IAAAA,WAAW,GAAG7gB,MAAM,CAACI,WAAP,CAAmBygB,WAAnB,CAAd;EACA,SAAKH,IAAL,CAAUb,KAAV,CAAgBgB,WAAhB,EAA6BC,cAA7B,EAA6C,CAA7C,EAAgD,IAAhD;EACD;EAED;;;;;;;EAKAC,EAAAA,OAAO,CAACC,SAAD,EAAY;EACjBA,IAAAA,SAAS,GAAGhhB,MAAM,CAACI,WAAP,CAAmB4gB,SAAnB,CAAZ;EACA,QAAIC,WAAW,GAAG,IAAI/nB,KAAJ,CAAU8nB,SAAS,CAAChnB,IAApB,CAAlB;;EAEA,SAAK,IAAIrB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGqoB,SAAS,CAAChnB,IAA9B,EAAoC,EAAErB,CAAtC,EAAyC;EACvCsoB,MAAAA,WAAW,CAACtoB,CAAD,CAAX,GAAiB,KAAK+nB,IAAL,CACdN,QADc,CACLY,SAAS,CAACzY,MAAV,CAAiB5P,CAAjB,CADK,EAEdqR,WAFc,CAEF,CAFE,EAEC,CAFD,CAAjB;EAGD;;EAED,WAAOiX,WAAP;EACD;EAED;;;;;;EAIApa,EAAAA,MAAM,GAAG;EACP,WAAO;EACL/N,MAAAA,OAAO,EAAE,KAAKA,OADT;EAEL4nB,MAAAA,IAAI,EAAE,KAAKA,IAFN;EAGL5kB,MAAAA,IAAI,EAAE;EAHD,KAAP;EAKD;EAED;;;;;;;EAKA,SAAOolB,IAAP,CAAYT,KAAZ,EAAmB;EACjB,QAAIA,KAAK,CAAC3kB,IAAN,KAAe,cAAnB,EAAmC;EACjC,YAAM,IAAIzC,UAAJ,0BAAiConB,KAAK,CAAC3kB,IAAvC,EAAN;EACD;;EAED,WAAO,IAAI0kB,sBAAJ,CAA2B,IAA3B,EAAiCC,KAAjC,CAAP;EACD;;EA1EiC;;ECPpC,MAAMF,gBAAc,GAAG;EACrB/B,EAAAA,YAAY,EAAE,YADO;EAErBC,EAAAA,aAAa,EAAE,MAFM;EAGrBC,EAAAA,aAAa,EAAE,CAHM;EAIrBC,EAAAA,QAAQ,EAAEI;EAJW,CAAvB;AAOA,EAAO,MAAMoC,sBAAN,CAA6B;EAClC;;;;;;;;;EASA5iB,EAAAA,WAAW,CAACzF,OAAD,EAAU2nB,KAAV,EAAiB;EAC1B,QAAI3nB,OAAO,KAAK,IAAhB,EAAsB;EACpB,WAAKA,OAAL,GAAe2nB,KAAK,CAAC3nB,OAArB;EACA,WAAK4nB,IAAL,GAAY,IAAIC,QAAJ,CAASF,KAAK,CAAC3nB,OAAf,CAAZ;EACA,WAAK4nB,IAAL,CAAUL,iBAAV,CAA4BI,KAAK,CAACC,IAAlC;EACD,KAJD,MAIO;EACL,WAAK5nB,OAAL,GAAed,MAAM,CAAC4oB,MAAP,CAAc,EAAd,EAAkBL,gBAAlB,EAAkCznB,OAAlC,CAAf;EACA,WAAKA,OAAL,CAAaylB,IAAb,GAAoB,YAApB;EACD;EACF;EAED;;;;;;;EAKAsB,EAAAA,KAAK,CAACgB,WAAD,EAAcO,cAAd,EAA8B;EACjC,SAAKV,IAAL,GAAY,IAAIC,QAAJ,CAAS,KAAK7nB,OAAd,CAAZ;;EAEA,QAAI,OAAO+nB,WAAW,CAAC,CAAD,CAAlB,KAA0B,WAA1B,IAAyCA,WAAW,CAAC,CAAD,CAAX,CAAenoB,MAAf,KAA0BM,SAAvE,EAAkF;EAChF6nB,MAAAA,WAAW,GAAG7gB,MAAM,CAACuF,YAAP,CAAoBsb,WAApB,CAAd;EACD,KAFD,MAEO;EACLA,MAAAA,WAAW,GAAG7gB,MAAM,CAACI,WAAP,CAAmBygB,WAAnB,CAAd;EACD;;EACD,SAAKH,IAAL,CAAUb,KAAV,CAAgBgB,WAAhB,EAA6BO,cAA7B,EAA6C,CAA7C;EACD;EAED;;;;;;;EAKAL,EAAAA,OAAO,CAACC,SAAD,EAAY;EACjB,QAAI,OAAOA,SAAS,CAAC,CAAD,CAAhB,KAAwB,WAAxB,IAAuCA,SAAS,CAAC,CAAD,CAAT,CAAatoB,MAAb,KAAwBM,SAAnE,EAA8E;EAC5EgoB,MAAAA,SAAS,GAAGhhB,MAAM,CAACuF,YAAP,CAAoByb,SAApB,CAAZ;EACD;;EACDA,IAAAA,SAAS,GAAGhhB,MAAM,CAACI,WAAP,CAAmB4gB,SAAnB,CAAZ;EAEA,QAAIC,WAAW,GAAG,IAAI/nB,KAAJ,CAAU8nB,SAAS,CAAChnB,IAApB,CAAlB;;EACA,SAAK,IAAIrB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGqoB,SAAS,CAAChnB,IAA9B,EAAoC,EAAErB,CAAtC,EAAyC;EACvCsoB,MAAAA,WAAW,CAACtoB,CAAD,CAAX,GAAiB,KAAK+nB,IAAL,CAAUN,QAAV,CAAmBY,SAAS,CAACzY,MAAV,CAAiB5P,CAAjB,CAAnB,CAAjB;EACD;;EAED,WAAOsoB,WAAP;EACD;EAED;;;;;;EAIApa,EAAAA,MAAM,GAAG;EACP,WAAO;EACL/N,MAAAA,OAAO,EAAE,KAAKA,OADT;EAEL4nB,MAAAA,IAAI,EAAE,KAAKA,IAFN;EAGL5kB,MAAAA,IAAI,EAAE;EAHD,KAAP;EAKD;EAED;;;;;;;EAKA,SAAOolB,IAAP,CAAYT,KAAZ,EAAmB;EACjB,QAAIA,KAAK,CAAC3kB,IAAN,KAAe,cAAnB,EAAmC;EACjC,YAAM,IAAIzC,UAAJ,yBAAgConB,KAAK,CAAC3kB,IAAtC,EAAN;EACD;;EAED,WAAO,IAAIqlB,sBAAJ,CAA2B,IAA3B,EAAiCV,KAAjC,CAAP;EACD;;EA/EiC;;ECX7B,MAAM,uBAAuB,GAAG,gBAAhC;EACA,MAAM,oBAAoB,GAAG,uBAAuB,GAAG,CAAvD;EACA,MAAM,UAAU,GAAG,CAAC,CAAD,KAAO,CAA1B;EACA,MAAM,WAAW,GAAG,UAAU,GAAG,CAAjC;EACA,MAAM,UAAU,GAAG,WAAW,GAAG,CAAjC;EACA,MAAM,SAAS,GAAG,UAAU,GAAG,CAA/B;EACA,MAAM,WAAW,GAAG,KAAK,EAAzB;EACA,MAAM,UAAU,GAAG,WAAW,GAAG,CAAjC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ECJA,SAASY,UAAT,CAAoBrZ,CAApB,EAAuB;EAC5B,SAAOA,CAAC,GAAG,GAAJ,IAAWA,CAAC,IAAI,GAAvB;EACD;EAGD;;;;;;;;;AAQA,EAAO,SAASsZ,8BAAT,CACLT,WADK,EAELU,aAFK,EAGLC,IAHK,EAIL;EACA,MAAIC,MAAJ;EACA,MAAI7B,YAAY,GAAG8B,OAAA,CAAe,CAAf,EAAkBb,WAAW,CAAC7mB,IAAZ,GAAmB,CAArC,CAAnB;;EACA,MAAIwnB,IAAI,KAAKxoB,SAAb,EAAwB;EACtByoB,IAAAA,MAAM,GAAGC,oBAAA,CAA4BC,QAA5B,EAAT;EACD,GAFD,MAEO,IAAI7b,MAAM,CAACC,SAAP,CAAiByb,IAAjB,CAAJ,EAA4B;EACjCC,IAAAA,MAAM,GAAGC,oBAAA,CAA4BF,IAA5B,CAAiCA,IAAjC,CAAT;EACD,GAFM,MAEA;EACL,UAAM,IAAInoB,UAAJ,0DAC8CmoB,IAD9C,EAAN;EAGD;;EAED,MAAII,EAAE,GAAG,IAAI1oB,KAAJ,CAAU2nB,WAAW,CAAC7mB,IAAtB,CAAT;EACA,MAAIiiB,EAAE,GAAG,IAAI/iB,KAAJ,CAAU2nB,WAAW,CAAC7mB,IAAtB,CAAT;;EAEA,OAAK,IAAIrB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGkoB,WAAW,CAAC7mB,IAAhC,EAAsC,EAAErB,CAAxC,EAA2C;EACzC,QAAImB,KAAK,GAAG8lB,YAAY,CAAC6B,MAAD,CAAxB;EACAG,IAAAA,EAAE,CAACjpB,CAAD,CAAF,GAAQkoB,WAAW,CAACtY,MAAZ,CAAmBzO,KAAnB,CAAR;EACAmiB,IAAAA,EAAE,CAACtjB,CAAD,CAAF,GAAQ4oB,aAAa,CAACznB,KAAD,CAArB;EACD;;EAED,SAAO;EACL+Z,IAAAA,CAAC,EAAE,IAAI7T,MAAJ,CAAW4hB,EAAX,CADE;EAELrT,IAAAA,CAAC,EAAE0N;EAFE,GAAP;EAID;EAED;;;;;;;;;;AASA,EAAO,SAAS4F,cAAT,CAAwBhB,WAAxB,EAAqC7Y,CAArC,EAAwC8Z,WAAxC,EAAqDN,IAArD,EAA2D;EAChE,MAAIX,WAAW,CAAC3mB,OAAZ,GAAsB8N,CAA1B,EAA6B;EAC3B,UAAM,IAAI3O,UAAJ,CACJ,yDADI,CAAN;EAGD;;EAED,MAAIumB,YAAY,GAAG8B,OAAA,CAAe,CAAf,EAAkBb,WAAW,CAAC3mB,OAAZ,GAAsB,CAAxC,CAAnB;EACA,MAAIunB,MAAJ;;EACA,MAAID,IAAI,KAAKxoB,SAAb,EAAwB;EACtByoB,IAAAA,MAAM,GAAGC,oBAAA,CAA4BC,QAA5B,EAAT;EACD,GAFD,MAEO,IAAI7b,MAAM,CAACC,SAAP,CAAiByb,IAAjB,CAAJ,EAA4B;EACjCC,IAAAA,MAAM,GAAGC,oBAAA,CAA4BF,IAA5B,CAAiCA,IAAjC,CAAT;EACD,GAFM,MAEA;EACL,UAAM,IAAInoB,UAAJ,0DAC8CmoB,IAD9C,EAAN;EAGD;;EAED,MAAIO,KAAK,GAAG,IAAI/hB,MAAJ,CAAW6gB,WAAW,CAAC7mB,IAAvB,EAA6BgO,CAA7B,CAAZ;;EAEA,MAAI8Z,WAAJ,EAAiB;EACf,QAAIE,SAAS,GAAG,IAAI9oB,KAAJ,CAAU8O,CAAV,CAAhB;;EACA,SAAK,IAAIrP,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGqP,CAApB,EAAuB,EAAErP,CAAzB,EAA4B;EAC1B,UAAImB,KAAK,GAAG8lB,YAAY,CAAC6B,MAAD,CAAxB;EACAO,MAAAA,SAAS,CAACrpB,CAAD,CAAT,GAAemB,KAAf;EACAioB,MAAAA,KAAK,CAAChZ,SAAN,CAAgBpQ,CAAhB,EAAmBkoB,WAAW,CAAChY,SAAZ,CAAsB/O,KAAtB,CAAnB;EACD;EACF,GAPD,MAOO;EACLkoB,IAAAA,SAAS,GAAG,IAAIC,GAAJ,EAAZ;EACAnoB,IAAAA,KAAK,GAAG8lB,YAAY,CAAC6B,MAAD,CAApB;;EACA,SAAK9oB,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGqP,CAAhB,EAAmB,EAAErP,CAArB,EAAwB;EACtB,aAAOqpB,SAAS,CAACE,GAAV,CAAcpoB,KAAd,CAAP,EAA6B;EAC3BA,QAAAA,KAAK,GAAG8lB,YAAY,CAAC6B,MAAD,CAApB;EACD;;EACDM,MAAAA,KAAK,CAAChZ,SAAN,CAAgBpQ,CAAhB,EAAmBkoB,WAAW,CAAChY,SAAZ,CAAsB/O,KAAtB,CAAnB;EACAkoB,MAAAA,SAAS,CAAC/hB,GAAV,CAAcnG,KAAd;EACD;;EACDkoB,IAAAA,SAAS,GAAG9oB,KAAK,CAAC+B,IAAN,CAAW+mB,SAAX,CAAZ;EACD;;EAED,SAAO;EACLnO,IAAAA,CAAC,EAAEkO,KADE;EAELC,IAAAA,SAAS,EAAEA;EAFN,GAAP;EAID;;EC9FD;;;;AAGA,EAAO,MAAMG,gBAAN,CAAuB;EAC5B;;;;;;;;;;;;;;;EAeA5jB,EAAAA,WAAW,CAACzF,OAAD,EAAU2nB,KAAV,EAAiB;EAC1B,QAAI3nB,OAAO,KAAK,IAAhB,EAAsB;EACpB,WAAKgpB,WAAL,GAAmBrB,KAAK,CAACqB,WAAzB;EACA,WAAKM,WAAL,GAAmB3B,KAAK,CAAC2B,WAAzB;EACA,WAAKC,WAAL,GAAmB5B,KAAK,CAAC4B,WAAzB;EACA,WAAKC,WAAL,GAAmB7B,KAAK,CAAC6B,WAAzB;EACA,WAAKC,YAAL,GAAoB9B,KAAK,CAAC8B,YAA1B;EACA,WAAKf,IAAL,GAAYf,KAAK,CAACe,IAAlB;EACA,WAAKxZ,CAAL,GAASyY,KAAK,CAACzY,CAAf;EACA,WAAKwa,OAAL,GAAe/B,KAAK,CAAC+B,OAArB;EACA,WAAKC,gBAAL,GAAwBhC,KAAK,CAACgC,gBAA9B;EAEA,UAAIC,SAAS,GAAG,KAAKH,YAAL,GAAoBI,sBAApB,GAAmCC,sBAAnD;EACA,WAAKC,UAAL,GAAkBpC,KAAK,CAACoC,UAAN,CAAiBC,GAAjB,CAAsBC,GAAD,IAASL,SAAS,CAACxB,IAAV,CAAe6B,GAAf,CAA9B,CAAlB;EACD,KAbD,MAaO;EACL,WAAKjB,WAAL,GAAmBhpB,OAAO,CAACgpB,WAA3B;EACA,WAAKM,WAAL,GAAmBtpB,OAAO,CAACspB,WAA3B;EACA,WAAKC,WAAL,GAAmBvpB,OAAO,CAACupB,WAA3B;EACA,WAAKC,WAAL,GAAmBxpB,OAAO,CAACwpB,WAA3B;EACA,WAAKC,YAAL,GAAoBzpB,OAAO,CAACypB,YAA5B;EACA,WAAKf,IAAL,GAAY1oB,OAAO,CAAC0oB,IAApB;EACA,WAAKiB,gBAAL,GAAwB3pB,OAAO,CAAC2pB,gBAAhC;EACD;EACF;EAED;;;;;;;EAKA5C,EAAAA,KAAK,CAACgB,WAAD,EAAcO,cAAd,EAA8B;EACjCP,IAAAA,WAAW,GAAG7gB,MAAM,CAACI,WAAP,CAAmBygB,WAAnB,CAAd;EAEA,SAAKuB,WAAL,GAAmB,KAAKA,WAAL,IAAoBvB,WAAW,CAAC3mB,OAAnD;;EAEA,QAAIikB,UAAA,CAAiB,KAAKiE,WAAtB,CAAJ,EAAwC;EACtC,WAAKpa,CAAL,GAAStK,IAAI,CAACwG,KAAL,CAAW2c,WAAW,CAAC3mB,OAAZ,GAAsB,KAAKkoB,WAAtC,CAAT;EACD,KAFD,MAEO,IAAItc,MAAM,CAACC,SAAP,CAAiB,KAAKqc,WAAtB,CAAJ,EAAwC;EAC7C,UAAI,KAAKA,WAAL,GAAmBvB,WAAW,CAAC3mB,OAAnC,EAA4C;EAC1C,cAAM,IAAIb,UAAJ,yDAC6CwnB,WAAW,CAAC3mB,OADzD,EAAN;EAGD,OAJD,MAIO;EACL,aAAK8N,CAAL,GAAS,KAAKoa,WAAd;EACD;EACF,KARM,MAQA;EACL,YAAM,IAAI/oB,UAAJ,oDACwC,KAAK+oB,WAD7C,EAAN;EAGD;;EAED,QAAI,KAAKG,YAAT,EAAuB;EACrB,UAAIG,SAAS,GAAGC,sBAAhB;EACD,KAFD,MAEO;EACLD,MAAAA,SAAS,GAAGE,sBAAZ;EACD;;EAED,SAAKC,UAAL,GAAkB,IAAI3pB,KAAJ,CAAU,KAAKmpB,WAAf,CAAlB;EACA,SAAKG,OAAL,GAAe,IAAItpB,KAAJ,CAAU,KAAKmpB,WAAf,CAAf;;EAEA,SAAK,IAAI1pB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK0pB,WAAzB,EAAsC,EAAE1pB,CAAxC,EAA2C;EACzC,UAAIqqB,GAAG,GAAG,KAAKP,gBAAL,GACNtE,8BAAA,CACA0C,WADA,EAEAO,cAFA,EAGA,KAAKI,IAHL,CADM,GAMN;EAAE3N,QAAAA,CAAC,EAAEgN,WAAL;EAAkBtS,QAAAA,CAAC,EAAE6S;EAArB,OANJ;EAOA,UAAIvN,CAAC,GAAGmP,GAAG,CAACnP,CAAZ;EACA,UAAItF,CAAC,GAAGyU,GAAG,CAACzU,CAAZ;EAEAyU,MAAAA,GAAG,GAAG7E,cAAA,CAAqBtK,CAArB,EAAwB,KAAK7L,CAA7B,EAAgC,KAAK8Z,WAArC,EAAkD,KAAKN,IAAvD,CAAN;EACA3N,MAAAA,CAAC,GAAGmP,GAAG,CAACnP,CAAR;EAEA,WAAK2O,OAAL,CAAa7pB,CAAb,IAAkBqqB,GAAG,CAAChB,SAAtB;EACA,WAAKa,UAAL,CAAgBlqB,CAAhB,IAAqB,IAAI+pB,SAAJ,CAAc,KAAKJ,WAAnB,CAArB;EACA,WAAKO,UAAL,CAAgBlqB,CAAhB,EAAmBknB,KAAnB,CAAyBhM,CAAzB,EAA4BtF,CAA5B;EACD;EACF;EAED;;;;;;;;EAQA;;;EACAoC,EAAAA,SAAS,CAACsS,MAAD,EAAS;EAChB,UAAM,IAAI7a,KAAJ,CAAU,8CAAV,CAAN;EACD;EAED;;;;;;;EAKA2Y,EAAAA,OAAO,CAACC,SAAD,EAAY;EACjB,QAAIkC,gBAAgB,GAAG,IAAIhqB,KAAJ,CAAU,KAAKmpB,WAAf,CAAvB;EACArB,IAAAA,SAAS,GAAGhhB,MAAM,CAACI,WAAP,CAAmB4gB,SAAnB,CAAZ;;EACA,SAAK,IAAIroB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK0pB,WAAzB,EAAsC,EAAE1pB,CAAxC,EAA2C;EACzC,UAAIkb,CAAC,GAAG,IAAIxB,yBAAJ,CAA8B2O,SAA9B,EAAyC,KAAKwB,OAAL,CAAa7pB,CAAb,CAAzC,CAAR,CADyC;;EAEzCuqB,MAAAA,gBAAgB,CAACvqB,CAAD,CAAhB,GAAsB,KAAKkqB,UAAL,CAAgBlqB,CAAhB,EAAmBooB,OAAnB,CAA2BlN,CAA3B,CAAtB;EACD;;EAEDqP,IAAAA,gBAAgB,GAAG,IAAItQ,mBAAJ,CAAwB,IAAIG,eAAJ,CAAoBmQ,gBAApB,CAAxB,CAAnB;EACA,QAAIjC,WAAW,GAAG,IAAI/nB,KAAJ,CAAUgqB,gBAAgB,CAAClpB,IAA3B,CAAlB;;EACA,SAAKrB,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGuqB,gBAAgB,CAAClpB,IAAjC,EAAuC,EAAErB,CAAzC,EAA4C;EAC1CsoB,MAAAA,WAAW,CAACtoB,CAAD,CAAX,GAAiB,KAAKgY,SAAL,CAAeuS,gBAAgB,CAAC3a,MAAjB,CAAwB5P,CAAxB,CAAf,CAAjB;EACD;;EAED,WAAOsoB,WAAP;EACD;EAED;;;;;;EAIApa,EAAAA,MAAM,GAAG;EACP,WAAO;EACL2b,MAAAA,OAAO,EAAE,KAAKA,OADT;EAELxa,MAAAA,CAAC,EAAE,KAAKA,CAFH;EAGL8Z,MAAAA,WAAW,EAAE,KAAKA,WAHb;EAILM,MAAAA,WAAW,EAAE,KAAKA,WAJb;EAKLC,MAAAA,WAAW,EAAE,KAAKA,WALb;EAMLC,MAAAA,WAAW,EAAE,KAAKA,WANb;EAOLC,MAAAA,YAAY,EAAE,KAAKA,YAPd;EAQLf,MAAAA,IAAI,EAAE,KAAKA,IARN;EASLqB,MAAAA,UAAU,EAAE,KAAKA,UAAL,CAAgBC,GAAhB,CAAqBC,GAAD,IAASA,GAAG,CAAClc,MAAJ,EAA7B,CATP;EAUL4b,MAAAA,gBAAgB,EAAE,KAAKA;EAVlB,KAAP;EAYD;;EApJ2B;;ECT9B,MAAMlC,gBAAc,GAAG;EACrB6B,EAAAA,WAAW,EAAE,GADQ;EAErBN,EAAAA,WAAW,EAAE,IAFQ;EAGrBO,EAAAA,WAAW,EAAE,EAHQ;EAIrBb,EAAAA,IAAI,EAAE,EAJe;EAKrBiB,EAAAA,gBAAgB,EAAE;EALG,CAAvB;EAQA;;;;;AAIA,EAAO,MAAMU,sBAAN,SAAqChB,gBAArC,CAAsD;EAC3D;;;;;;;;;;;;;;EAcA5jB,EAAAA,WAAW,CAACzF,OAAD,EAAU2nB,KAAV,EAAiB;EAC1B,QAAI3nB,OAAO,KAAK,IAAhB,EAAsB;EACpB,YAAM,IAAN,EAAY2nB,KAAK,CAAC2C,SAAlB;EACD,KAFD,MAEO;EACLtqB,MAAAA,OAAO,GAAGd,MAAM,CAAC4oB,MAAP,CAAc,EAAd,EAAkBL,gBAAlB,EAAkCznB,OAAlC,CAAV;EACAA,MAAAA,OAAO,CAACypB,YAAR,GAAuB,IAAvB;EACA,YAAMzpB,OAAN;EACD;EACF;EAED;;;;;;;EAKA6X,EAAAA,SAAS,CAACsS,MAAD,EAAS;EAChB,WAAOI,IAAI,CAACJ,MAAD,CAAX;EACD;EAED;;;;;;EAIApc,EAAAA,MAAM,GAAG;EACP,QAAIuc,SAAS,GAAG,MAAMvc,MAAN,EAAhB;EACA,WAAO;EACLuc,MAAAA,SAAS,EAAEA,SADN;EAELtnB,MAAAA,IAAI,EAAE;EAFD,KAAP;EAID;EAED;;;;;;;EAKA,SAAOolB,IAAP,CAAYT,KAAZ,EAAmB;EACjB,QAAIA,KAAK,CAAC3kB,IAAN,KAAe,cAAnB,EAAmC;EACjC,YAAM,IAAIzC,UAAJ,0BAAiConB,KAAK,CAAC3kB,IAAvC,EAAN;EACD;;EAED,WAAO,IAAIqnB,sBAAJ,CAA2B,IAA3B,EAAiC1C,KAAjC,CAAP;EACD;;EAzD0D;EA4D7D;;;;;;EAKA,SAAS4C,IAAT,CAAcrG,GAAd,EAAmB;EACjB,SAAOA,GAAG,CACP1M,IADI,CAEH,CAACpB,CAAD,EAAIC,CAAJ,KACE6N,GAAG,CAACF,MAAJ,CAAYzgB,CAAD,IAAOA,CAAC,KAAK6S,CAAxB,EAA2BxW,MAA3B,GAAoCskB,GAAG,CAACF,MAAJ,CAAYzgB,CAAD,IAAOA,CAAC,KAAK8S,CAAxB,EAA2BzW,MAH9D,EAKJ4qB,GALI,EAAP;EAMD;;;;;;;;;ECtFD,GAAC,YAAU;EAAC,aAASpU,CAAT,CAAWqJ,CAAX,EAAa;EAAC,WAAI,IAAI3Y,CAAC,GAAC,CAAN,EAAQyW,CAAC,GAACkC,CAAC,CAAC7f,MAAF,GAAS,CAAnB,EAAqBoe,CAAC,GAAC,KAAK,CAA5B,EAA8BpP,CAAC,GAAC,KAAK,CAArC,EAAuC/O,CAAC,GAAC,KAAK,CAA9C,EAAgDsD,CAAC,GAACd,CAAC,CAACyE,CAAD,EAAGyW,CAAH,CAAvD,EAA6D,CAAC,CAA9D,GAAiE;EAAC,YAAGA,CAAC,IAAEzW,CAAN,EAAQ,OAAO2Y,CAAC,CAACtc,CAAD,CAAR;EAAY,YAAGoa,CAAC,IAAEzW,CAAC,GAAC,CAAR,EAAU,OAAO2Y,CAAC,CAAC3Y,CAAD,CAAD,GAAK2Y,CAAC,CAAClC,CAAD,CAAN,IAAWlH,CAAC,CAACoJ,CAAD,EAAG3Y,CAAH,EAAKyW,CAAL,CAAZ,EAAoBkC,CAAC,CAACtc,CAAD,CAA5B;;EAAgC,aAAI6a,CAAC,GAAC3b,CAAC,CAACyE,CAAD,EAAGyW,CAAH,CAAH,EAASkC,CAAC,CAACzB,CAAD,CAAD,GAAKyB,CAAC,CAAClC,CAAD,CAAN,IAAWlH,CAAC,CAACoJ,CAAD,EAAGzB,CAAH,EAAKT,CAAL,CAArB,EAA6BkC,CAAC,CAAC3Y,CAAD,CAAD,GAAK2Y,CAAC,CAAClC,CAAD,CAAN,IAAWlH,CAAC,CAACoJ,CAAD,EAAG3Y,CAAH,EAAKyW,CAAL,CAAzC,EAAiDkC,CAAC,CAACzB,CAAD,CAAD,GAAKyB,CAAC,CAAC3Y,CAAD,CAAN,IAAWuP,CAAC,CAACoJ,CAAD,EAAGzB,CAAH,EAAKlX,CAAL,CAA7D,EAAqEuP,CAAC,CAACoJ,CAAD,EAAGzB,CAAH,EAAKlX,CAAC,GAAC,CAAP,CAAtE,EAAgF8H,CAAC,GAAC9H,CAAC,GAAC,CAApF,EAAsFjH,CAAC,GAAC0d,CAA5F,EAA8F,CAAC,CAA/F,GAAkG;EAAC,aAAG3O,CAAC,GAAJ,QAAa6Q,CAAC,CAAC3Y,CAAD,CAAD,GAAK2Y,CAAC,CAAC7Q,CAAD,CAAnB;;EAAwB,aAAG/O,CAAC,GAAJ,QAAa4f,CAAC,CAAC5f,CAAD,CAAD,GAAK4f,CAAC,CAAC3Y,CAAD,CAAnB;;EAAwB,cAAGjH,CAAC,GAAC+O,CAAL,EAAO;EAAMyH,UAAAA,CAAC,CAACoJ,CAAD,EAAG7Q,CAAH,EAAK/O,CAAL,CAAD;EAAS;;EAAAwW,QAAAA,CAAC,CAACoJ,CAAD,EAAG3Y,CAAH,EAAKjH,CAAL,CAAD,EAASA,CAAC,IAAEsD,CAAH,KAAO2D,CAAC,GAAC8H,CAAT,CAAT,EAAqB/O,CAAC,IAAEsD,CAAH,KAAOoa,CAAC,GAAC1d,CAAC,GAAC,CAAX,CAArB;EAAmC;EAAC;;EAAA,QAAIwW,CAAC,GAAC,SAASA,CAAT,CAAWoJ,CAAX,EAAa3Y,CAAb,EAAeyW,CAAf,EAAiB;EAAC,UAAIkN,IAAJ;;EAAS,aAAOA,IAAI,GAAC,CAAChL,CAAC,CAAClC,CAAD,CAAF,EAAMkC,CAAC,CAAC3Y,CAAD,CAAP,CAAL,EAAiB2Y,CAAC,CAAC3Y,CAAD,CAAD,GAAK2jB,IAAI,CAAC,CAAD,CAA1B,EAA8BhL,CAAC,CAAClC,CAAD,CAAD,GAAKkN,IAAI,CAAC,CAAD,CAAvC,EAA2CA,IAAlD;EAAuD,KAAxF;EAAA,QAAyFpoB,CAAC,GAAC,SAASA,CAAT,CAAWod,CAAX,EAAa3Y,CAAb,EAAe;EAAC,aAAM,CAAC,EAAE,CAAC2Y,CAAC,GAAC3Y,CAAH,IAAM,CAAR,CAAP;EAAkB,KAA7H;;EAA8H,KAA4B4jB,MAAM,CAACC,OAAnC,GAA2CD,cAAA,GAAetU,CAA1D,GAA4DwU,MAAM,CAACC,MAAP,GAAczU,CAA1E;EAA4E,GAAjjB;;;ECGA;;;;;;EAMA,SAASyU,MAAT,CAAgBprB,KAAhB,EAAuB;EACrB,MAAI,CAACC,GAAO,CAACD,KAAD,CAAZ,EAAqB;EACnB,UAAM,IAAIE,SAAJ,CAAc,wBAAd,CAAN;EACD;;EAED,MAAIF,KAAK,CAACG,MAAN,KAAiB,CAArB,EAAwB;EACtB,UAAM,IAAID,SAAJ,CAAc,yBAAd,CAAN;EACD;;EAED,SAAOmrB,qBAAiB,CAACrrB,KAAK,CAACsrB,KAAN,EAAD,CAAxB;EACD;;ECdD,MAAMC,gBAAgB,GAAG;EACvBnnB,EAAAA,IAAI,EAAEonB,IADiB;EAEvBJ,EAAAA,MAAM,EAAEK;EAFe,CAAzB;EAKA,MAAMzD,gBAAc,GAAG;EACrB6B,EAAAA,WAAW,EAAE,GADQ;EAErBN,EAAAA,WAAW,EAAE,KAFQ;EAGrBO,EAAAA,WAAW,EAAE,EAHQ;EAIrBC,EAAAA,WAAW,EAAE,EAJQ;EAKrB2B,EAAAA,eAAe,EAAE,MALI;EAMrBzC,EAAAA,IAAI,EAAE,EANe;EAOrBiB,EAAAA,gBAAgB,EAAE;EAPG,CAAvB;EAUA;;;;;AAIA,EAAO,MAAMyB,sBAAN,SAAqC/B,gBAArC,CAAsD;EAC3D;;;;;;;;;;;;;;;EAeA5jB,EAAAA,WAAW,CAACzF,OAAD,EAAU2nB,KAAV,EAAiB;EAC1B,QAAI3nB,OAAO,KAAK,IAAhB,EAAsB;EACpB,YAAM,IAAN,EAAY2nB,KAAK,CAAC2C,SAAlB;EACA,WAAKa,eAAL,GAAuBxD,KAAK,CAACwD,eAA7B;EACD,KAHD,MAGO;EACLnrB,MAAAA,OAAO,GAAGd,MAAM,CAAC4oB,MAAP,CAAc,EAAd,EAAkBL,gBAAlB,EAAkCznB,OAAlC,CAAV;;EAEA,UACE,EACEA,OAAO,CAACmrB,eAAR,KAA4B,MAA5B,IACAnrB,OAAO,CAACmrB,eAAR,KAA4B,QAF9B,CADF,EAKE;EACA,cAAM,IAAI5qB,UAAJ,wCAC4BP,OAAO,CAACmrB,eADpC,EAAN;EAGD;;EAEDnrB,MAAAA,OAAO,CAACypB,YAAR,GAAuB,KAAvB;EAEA,YAAMzpB,OAAN;EACA,WAAKmrB,eAAL,GAAuBnrB,OAAO,CAACmrB,eAA/B;EACD;EACF;EAED;;;;;;;EAKAtT,EAAAA,SAAS,CAACsS,MAAD,EAAS;EAChB,WAAOa,gBAAgB,CAAC,KAAKG,eAAN,CAAhB,CAAuChB,MAAvC,CAAP;EACD;EAED;;;;;;EAIApc,EAAAA,MAAM,GAAG;EACP,QAAIuc,SAAS,GAAG,MAAMvc,MAAN,EAAhB;EACA,WAAO;EACLuc,MAAAA,SAAS,EAAEA,SADN;EAELa,MAAAA,eAAe,EAAE,KAAKA,eAFjB;EAGLnoB,MAAAA,IAAI,EAAE;EAHD,KAAP;EAKD;EAED;;;;;;;EAKA,SAAOolB,IAAP,CAAYT,KAAZ,EAAmB;EACjB,QAAIA,KAAK,CAAC3kB,IAAN,KAAe,cAAnB,EAAmC;EACjC,YAAM,IAAIzC,UAAJ,0BAAiConB,KAAK,CAAC3kB,IAAvC,EAAN;EACD;;EAED,WAAO,IAAIooB,sBAAJ,CAA2B,IAA3B,EAAiCzD,KAAjC,CAAP;EACD;;EA1E0D;;ECtB7D;;;;;;;;;;AASA,EAAO,MAAM0D,GAAN,CAAU;EACf5lB,EAAAA,WAAW,CAAC6lB,OAAD,EAAwB;EAAA,QAAdtrB,OAAc,uEAAJ,EAAI;;EACjC,QAAIsrB,OAAO,KAAK,IAAhB,EAAsB;EACpB,YAAM3D,KAAK,GAAG3nB,OAAd;EACA,WAAKoY,MAAL,GAAcuP,KAAK,CAACvP,MAApB;EACA,WAAKzT,KAAL,GAAagjB,KAAK,CAAChjB,KAAnB;EACA,WAAK4mB,KAAL,GAAa5D,KAAK,CAAC4D,KAAnB;EACA,WAAKC,MAAL,GAAc7D,KAAK,CAAC6D,MAApB;EACA,WAAKhP,CAAL,GAAStV,MAAM,CAACI,WAAP,CAAmBqgB,KAAK,CAACnL,CAAzB,CAAT;EACA,WAAKiP,CAAL,GAAS9D,KAAK,CAAC8D,CAAf;EACA;EACD;;EAEDH,IAAAA,OAAO,GAAG,IAAIpkB,MAAJ,CAAWokB,OAAX,CAAV;EAEA,UAAM;EACJI,MAAAA,kBAAkB,GAAG,KADjB;EAEJtT,MAAAA,MAAM,GAAG,IAFL;EAGJzT,MAAAA,KAAK,GAAG;EAHJ,QAIF3E,OAJJ;EAMA,SAAKoY,MAAL,GAAcA,MAAd;EACA,SAAKzT,KAAL,GAAaA,KAAb;EACA,SAAK4mB,KAAL,GAAa,IAAb;EACA,SAAKC,MAAL,GAAc,IAAd;;EAEA,QAAIE,kBAAJ,EAAwB;EACtB;EACA,WAAKC,4BAAL,CAAkCL,OAAlC;;EACA;EACD;;EAED,QAAIM,mBAAJ;;EACA,QAAI,OAAO5rB,OAAO,CAAC4rB,mBAAf,KAAuC,SAA3C,EAAsD;EACpDA,MAAAA,mBAAmB,GAAG5rB,OAAO,CAAC4rB,mBAA9B;EACD,KAFD,MAEO;EACLA,MAAAA,mBAAmB,GAAGN,OAAO,CAACpqB,IAAR,GAAeoqB,OAAO,CAAClqB,OAA7C;EACD;;EAED,QAAIwqB,mBAAJ,EAAyB;EACvB;EACA,WAAKC,OAAL,CAAaP,OAAb;;EACA,YAAMQ,gBAAgB,GAAG,IAAIhS,mBAAJ,CAAwBwR,OAAxB,EACtBvZ,IADsB,CACjBuZ,OADiB,EAEtBljB,GAFsB,CAElBkjB,OAAO,CAACpqB,IAAR,GAAe,CAFG,CAAzB;;EAGA,WAAKyqB,4BAAL,CAAkCG,gBAAlC;EACD,KAPD,MAOO;EACL,WAAKD,OAAL,CAAaP,OAAb;;EACA,UAAI9K,GAAG,GAAG,IAAIG,0BAAJ,CAAQ2K,OAAR,EAAiB;EACzBxP,QAAAA,0BAA0B,EAAE,KADH;EAEzBC,QAAAA,2BAA2B,EAAE,IAFJ;EAGzBC,QAAAA,aAAa,EAAE;EAHU,OAAjB,CAAV;EAMA,WAAKQ,CAAL,GAASgE,GAAG,CAAClC,oBAAb;EAEA,YAAMyN,cAAc,GAAGvL,GAAG,CAAChI,QAA3B;EACA,YAAMwT,WAAW,GAAG,EAApB;;EACA,WAAK,MAAMC,aAAX,IAA4BF,cAA5B,EAA4C;EAC1CC,QAAAA,WAAW,CAACjpB,IAAZ,CAAkBkpB,aAAa,GAAGA,aAAjB,IAAmCX,OAAO,CAACpqB,IAAR,GAAe,CAAlD,CAAjB;EACD;;EACD,WAAKuqB,CAAL,GAASO,WAAT;EACD;EACF;EAED;;;;;;;EAKA,SAAO5D,IAAP,CAAYT,KAAZ,EAAmB;EACjB,QAAI,OAAOA,KAAK,CAAC3kB,IAAb,KAAsB,QAA1B,EAAoC;EAClC,YAAM,IAAIrD,SAAJ,CAAc,iCAAd,CAAN;EACD;;EACD,QAAIgoB,KAAK,CAAC3kB,IAAN,KAAe,KAAnB,EAA0B;EACxB,YAAM,IAAIzC,UAAJ,0BAAiConB,KAAK,CAAC3kB,IAAvC,EAAN;EACD;;EACD,WAAO,IAAIqoB,GAAJ,CAAQ,IAAR,EAAc1D,KAAd,CAAP;EACD;EAED;;;;;;;;EAMAM,EAAAA,OAAO,CAACqD,OAAD,EAAwB;EAAA,QAAdtrB,OAAc,uEAAJ,EAAI;EAC7B,UAAM;EAAEksB,MAAAA,WAAW,GAAG,KAAK1P,CAAL,CAAOpb;EAAvB,QAAmCpB,OAAzC;EAEAsrB,IAAAA,OAAO,GAAG,IAAIpkB,MAAJ,CAAWokB,OAAX,CAAV;;EACA,QAAI,KAAKlT,MAAT,EAAiB;EACfkT,MAAAA,OAAO,CAAChb,YAAR,CAAqB,KAAKib,KAA1B;;EACA,UAAI,KAAK5mB,KAAT,EAAgB;EACd2mB,QAAAA,OAAO,CAAC9a,YAAR,CAAqB,KAAKgb,MAA1B;EACD;EACF;;EAED,QAAIrD,WAAW,GAAGmD,OAAO,CAACvZ,IAAR,CAAa,KAAKyK,CAAlB,CAAlB;EACA,WAAO2L,WAAW,CAAC1R,SAAZ,CAAsB,CAAtB,EAAyB0R,WAAW,CAACjnB,IAAZ,GAAmB,CAA5C,EAA+C,CAA/C,EAAkDgrB,WAAW,GAAG,CAAhE,CAAP;EACD;EAED;;;;;;EAIAC,EAAAA,oBAAoB,GAAG;EACrB,QAAIjpB,GAAG,GAAG,CAAV;;EACA,SAAK,MAAMiP,CAAX,IAAgB,KAAKsZ,CAArB,EAAwB;EACtBvoB,MAAAA,GAAG,IAAIiP,CAAP;EACD;;EACD,WAAO,KAAKsZ,CAAL,CAAOzB,GAAP,CAAYnnB,KAAD,IAAWA,KAAK,GAAGK,GAA9B,CAAP;EACD;EAED;;;;;;EAIAkpB,EAAAA,qBAAqB,GAAG;EACtB,QAAIC,SAAS,GAAG,KAAKF,oBAAL,EAAhB;;EACA,SAAK,IAAItsB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGwsB,SAAS,CAACzsB,MAA9B,EAAsCC,CAAC,EAAvC,EAA2C;EACzCwsB,MAAAA,SAAS,CAACxsB,CAAD,CAAT,IAAgBwsB,SAAS,CAACxsB,CAAC,GAAG,CAAL,CAAzB;EACD;;EACD,WAAOwsB,SAAP;EACD;EAED;;;;;;EAIAC,EAAAA,eAAe,GAAG;EAChB,WAAO,KAAK9P,CAAZ;EACD;EAED;;;;;;EAIA+P,EAAAA,cAAc,GAAG;EACf,WAAO,KAAKd,CAAZ;EACD;EAED;;;;;;EAIAe,EAAAA,qBAAqB,GAAG;EACtB,WAAO,KAAKf,CAAL,CAAOzB,GAAP,CAAY9lB,CAAD,IAAOU,IAAI,CAACE,IAAL,CAAUZ,CAAV,CAAlB,CAAP;EACD;EAED;;;;;;EAIAuoB,EAAAA,WAAW,GAAG;EACZ,WAAO,KAAKjQ,CAAL,CAAOpF,SAAP,EAAP;EACD;EAED;;;;;;EAIArJ,EAAAA,MAAM,GAAG;EACP,WAAO;EACL/K,MAAAA,IAAI,EAAE,KADD;EAELoV,MAAAA,MAAM,EAAE,KAAKA,MAFR;EAGLzT,MAAAA,KAAK,EAAE,KAAKA,KAHP;EAIL4mB,MAAAA,KAAK,EAAE,KAAKA,KAJP;EAKLC,MAAAA,MAAM,EAAE,KAAKA,MALR;EAMLhP,MAAAA,CAAC,EAAE,KAAKA,CANH;EAOLiP,MAAAA,CAAC,EAAE,KAAKA;EAPH,KAAP;EASD;;EAEDI,EAAAA,OAAO,CAACP,OAAD,EAAU;EACf,QAAI,KAAKlT,MAAT,EAAiB;EACf,YAAMvU,IAAI,GAAGynB,OAAO,CAACznB,IAAR,CAAa,QAAb,CAAb;EACA,YAAM2nB,MAAM,GAAG,KAAK7mB,KAAL,GACX2mB,OAAO,CAACnT,iBAAR,CAA0B,QAA1B,EAAoC;EAAEtU,QAAAA;EAAF,OAApC,CADW,GAEX,IAFJ;EAGA,WAAK0nB,KAAL,GAAa1nB,IAAb;EACAynB,MAAAA,OAAO,CAAChb,YAAR,CAAqBzM,IAArB;;EACA,UAAI,KAAKc,KAAT,EAAgB;EACd,aAAK,IAAI9E,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG2rB,MAAM,CAAC5rB,MAA3B,EAAmCC,CAAC,EAApC,EAAwC;EACtC,cAAI2rB,MAAM,CAAC3rB,CAAD,CAAN,KAAc,CAAlB,EAAqB;EACnB,kBAAM,IAAIU,UAAJ,yEAC6DV,CAD7D,EAAN;EAGD;EACF;;EACD,aAAK2rB,MAAL,GAAcA,MAAd;EACAF,QAAAA,OAAO,CAAC9a,YAAR,CAAqBgb,MAArB;EACD;EACF;EACF;;EAEDG,EAAAA,4BAA4B,CAACL,OAAD,EAAU;EACpC,UAAMoB,GAAG,GAAG,IAAIC,uBAAJ,CAAQrB,OAAR,EAAiB;EAAElK,MAAAA,eAAe,EAAE;EAAnB,KAAjB,CAAZ;EACA,SAAK5E,CAAL,GAASkQ,GAAG,CAAC7K,iBAAb;EACA,SAAKrF,CAAL,CAAO3F,QAAP;EACA,SAAK4U,CAAL,GAASiB,GAAG,CAAC/K,eAAb;EACA,SAAK8J,CAAL,CAAOmB,OAAP;EACD;;EAzMc;;ECXV,SAASC,gBAAT,CAA0Bzd,CAA1B,EAA6B+H,CAA7B,EAAgC;EACnC,MAAIsI,CAAC,GAAG,CAAR;;EACA,OAAK,IAAI5f,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGuP,CAAC,CAACxP,MAAtB,EAA8BC,CAAC,EAA/B,EAAmC;EAC/B4f,IAAAA,CAAC,IAAI,CAACrQ,CAAC,CAACvP,CAAD,CAAD,GAAOsX,CAAC,CAACtX,CAAD,CAAT,KAAiBuP,CAAC,CAACvP,CAAD,CAAD,GAAOsX,CAAC,CAACtX,CAAD,CAAzB,CAAL;EACH;;EACD,SAAO4f,CAAP;EACH;AACD,EAAO,SAASqN,SAAT,CAAmB1d,CAAnB,EAAsB+H,CAAtB,EAAyB;EAC5B,SAAOvS,IAAI,CAACE,IAAL,CAAU+nB,gBAAgB,CAACzd,CAAD,EAAI+H,CAAJ,CAA1B,CAAP;EACH;;;;;;;;;;;;;;;ECCD,SAAS4V,cAAT,CAAwB1f,IAAxB,EAA8B2f,UAA9B,EAA0C;EACtC,QAAMptB,MAAM,GAAGyN,IAAI,CAACzN,MAApB;EACA,MAAIoG,MAAM,GAAG5F,KAAK,CAAC+B,IAAN,CAAW;EAACvC,IAAAA;EAAD,GAAX,EAAqBoqB,GAArB,CAAyB,MAAM5pB,KAAK,CAAC+B,IAAN,CAAW;EAACvC,IAAAA;EAAD,GAAX,CAA/B,CAAb,CAFsC;;EAKtC,OAAK,IAAIC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGD,MAApB,EAA4BC,CAAC,EAA7B,EAAiC;EAC7B,SAAK,IAAIsD,CAAC,GAAG,CAAb,EAAgBA,CAAC,IAAItD,CAArB,EAAwBsD,CAAC,EAAzB,EAA6B;EACzB6C,MAAAA,MAAM,CAACnG,CAAD,CAAN,CAAUsD,CAAV,IAAe6pB,UAAU,CAAC3f,IAAI,CAACxN,CAAD,CAAL,EAAUwN,IAAI,CAAClK,CAAD,CAAd,CAAzB;EACH;EACJ,GATqC;;;EAYtC,OAAK,IAAItD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGD,MAApB,EAA4BC,CAAC,EAA7B,EAAiC;EAC7B,SAAK,IAAIsD,CAAC,GAAGtD,CAAC,GAAG,CAAjB,EAAoBsD,CAAC,GAAGvD,MAAxB,EAAgCuD,CAAC,EAAjC,EAAqC;EACjC6C,MAAAA,MAAM,CAACnG,CAAD,CAAN,CAAUsD,CAAV,IAAe6C,MAAM,CAAC7C,CAAD,CAAN,CAAUtD,CAAV,CAAf;EACH;EACJ;;EAED,SAAOmG,MAAP;EACH;;EAED,SAAc,GAAG+mB,cAAjB;;;EC/BA;EACA,GAAC,YAAW;EACV,QAAIE,IAAJ,EAAUC,UAAV,EAAsB9hB,KAAtB,EAA6B+hB,OAA7B,EAAsCC,OAAtC,EAA+CC,QAA/C,EAAyDC,WAAzD,EAAsEC,WAAtE,EAAmFC,MAAnF,EAA2F1tB,GAA3F,EAAgG2tB,QAAhG,EAA0GC,SAA1G,EAAqHC,UAArH,EAAiIC,SAAjI,EAA4IC,OAA5I;;EAEAziB,IAAAA,KAAK,GAAGxG,IAAI,CAACwG,KAAb,EAAoBtL,GAAG,GAAG8E,IAAI,CAAC9E,GAA/B;;;;;EAOAotB,IAAAA,UAAU,GAAG,oBAAShpB,CAAT,EAAYuR,CAAZ,EAAe;EAC1B,UAAIvR,CAAC,GAAGuR,CAAR,EAAW;EACT,eAAO,CAAC,CAAR;EACD;;EACD,UAAIvR,CAAC,GAAGuR,CAAR,EAAW;EACT,eAAO,CAAP;EACD;;EACD,aAAO,CAAP;EACD,KARD;;;;;;;;;;;EAoBA+X,IAAAA,MAAM,GAAG,gBAASpX,CAAT,EAAYlS,CAAZ,EAAe4pB,EAAf,EAAmBC,EAAnB,EAAuBC,GAAvB,EAA4B;EACnC,UAAIC,GAAJ;;EACA,UAAIH,EAAE,IAAI,IAAV,EAAgB;EACdA,QAAAA,EAAE,GAAG,CAAL;EACD;;EACD,UAAIE,GAAG,IAAI,IAAX,EAAiB;EACfA,QAAAA,GAAG,GAAGd,UAAN;EACD;;EACD,UAAIY,EAAE,GAAG,CAAT,EAAY;EACV,cAAM,IAAIxe,KAAJ,CAAU,yBAAV,CAAN;EACD;;EACD,UAAIye,EAAE,IAAI,IAAV,EAAgB;EACdA,QAAAA,EAAE,GAAG3X,CAAC,CAACxW,MAAP;EACD;;EACD,aAAOkuB,EAAE,GAAGC,EAAZ,EAAgB;EACdE,QAAAA,GAAG,GAAG7iB,KAAK,CAAC,CAAC0iB,EAAE,GAAGC,EAAN,IAAY,CAAb,CAAX;;EACA,YAAIC,GAAG,CAAC9pB,CAAD,EAAIkS,CAAC,CAAC6X,GAAD,CAAL,CAAH,GAAiB,CAArB,EAAwB;EACtBF,UAAAA,EAAE,GAAGE,GAAL;EACD,SAFD,MAEO;EACLH,UAAAA,EAAE,GAAGG,GAAG,GAAG,CAAX;EACD;EACF;;EACD,aAAQ,GAAGjV,MAAH,CAAUrL,KAAV,CAAgByI,CAAhB,EAAmB,CAAC0X,EAAD,EAAKA,EAAE,GAAGA,EAAV,EAAcI,MAAd,CAAqBhqB,CAArB,CAAnB,GAA6CA,CAArD;EACD,KAvBD;;;;;;EA8BAmpB,IAAAA,QAAQ,GAAG,kBAASvqB,KAAT,EAAgBqrB,IAAhB,EAAsBH,GAAtB,EAA2B;EACpC,UAAIA,GAAG,IAAI,IAAX,EAAiB;EACfA,QAAAA,GAAG,GAAGd,UAAN;EACD;;EACDpqB,MAAAA,KAAK,CAACC,IAAN,CAAWorB,IAAX;EACA,aAAOP,SAAS,CAAC9qB,KAAD,EAAQ,CAAR,EAAWA,KAAK,CAAClD,MAAN,GAAe,CAA1B,EAA6BouB,GAA7B,CAAhB;EACD,KAND;;;;;;EAaAZ,IAAAA,OAAO,GAAG,iBAAStqB,KAAT,EAAgBkrB,GAAhB,EAAqB;EAC7B,UAAII,OAAJ,EAAaC,UAAb;;EACA,UAAIL,GAAG,IAAI,IAAX,EAAiB;EACfA,QAAAA,GAAG,GAAGd,UAAN;EACD;;EACDkB,MAAAA,OAAO,GAAGtrB,KAAK,CAAC0nB,GAAN,EAAV;;EACA,UAAI1nB,KAAK,CAAClD,MAAV,EAAkB;EAChByuB,QAAAA,UAAU,GAAGvrB,KAAK,CAAC,CAAD,CAAlB;EACAA,QAAAA,KAAK,CAAC,CAAD,CAAL,GAAWsrB,OAAX;;EACAP,QAAAA,OAAO,CAAC/qB,KAAD,EAAQ,CAAR,EAAWkrB,GAAX,CAAP;EACD,OAJD,MAIO;EACLK,QAAAA,UAAU,GAAGD,OAAb;EACD;;EACD,aAAOC,UAAP;EACD,KAdD;;;;;;;;;;;;;EA4BAd,IAAAA,WAAW,GAAG,qBAASzqB,KAAT,EAAgBqrB,IAAhB,EAAsBH,GAAtB,EAA2B;EACvC,UAAIK,UAAJ;;EACA,UAAIL,GAAG,IAAI,IAAX,EAAiB;EACfA,QAAAA,GAAG,GAAGd,UAAN;EACD;;EACDmB,MAAAA,UAAU,GAAGvrB,KAAK,CAAC,CAAD,CAAlB;EACAA,MAAAA,KAAK,CAAC,CAAD,CAAL,GAAWqrB,IAAX;;EACAN,MAAAA,OAAO,CAAC/qB,KAAD,EAAQ,CAAR,EAAWkrB,GAAX,CAAP;;EACA,aAAOK,UAAP;EACD,KATD;;;;;;EAgBAf,IAAAA,WAAW,GAAG,qBAASxqB,KAAT,EAAgBqrB,IAAhB,EAAsBH,GAAtB,EAA2B;EACvC,UAAIvD,IAAJ;;EACA,UAAIuD,GAAG,IAAI,IAAX,EAAiB;EACfA,QAAAA,GAAG,GAAGd,UAAN;EACD;;EACD,UAAIpqB,KAAK,CAAClD,MAAN,IAAgBouB,GAAG,CAAClrB,KAAK,CAAC,CAAD,CAAN,EAAWqrB,IAAX,CAAH,GAAsB,CAA1C,EAA6C;EAC3C1D,QAAAA,IAAI,GAAG,CAAC3nB,KAAK,CAAC,CAAD,CAAN,EAAWqrB,IAAX,CAAP,EAAyBA,IAAI,GAAG1D,IAAI,CAAC,CAAD,CAApC,EAAyC3nB,KAAK,CAAC,CAAD,CAAL,GAAW2nB,IAAI,CAAC,CAAD,CAAxD;;EACAoD,QAAAA,OAAO,CAAC/qB,KAAD,EAAQ,CAAR,EAAWkrB,GAAX,CAAP;EACD;;EACD,aAAOG,IAAP;EACD,KAVD;;;;;;EAiBAhB,IAAAA,OAAO,GAAG,iBAASrqB,KAAT,EAAgBkrB,GAAhB,EAAqB;EAC7B,UAAInuB,CAAJ,EAAOyuB,EAAP,EAAWC,AAAIC,IAAf,EAAqB/D,AAAMgE,KAA3B,EAAkCC,QAAlC,EAA4CC,SAA5C;;EACA,UAAIX,GAAG,IAAI,IAAX,EAAiB;EACfA,QAAAA,GAAG,GAAGd,UAAN;EACD;;EACDuB,MAAAA,KAAK,GAAI,YAAW;EAClBE,QAAAA,SAAS,GAAG,EAAZ;;EACA,aAAK,IAAIJ,EAAE,GAAG,CAAT,EAAY9D,IAAI,GAAGrf,KAAK,CAACtI,KAAK,CAAClD,MAAN,GAAe,CAAhB,CAA7B,EAAiD,KAAK6qB,IAAL,GAAY8D,EAAE,GAAG9D,IAAjB,GAAwB8D,EAAE,GAAG9D,IAA9E,EAAoF,KAAKA,IAAL,GAAY8D,EAAE,EAAd,GAAmBA,EAAE,EAAzG,EAA4G;EAAEI,UAAAA,SAAS,CAAC5rB,IAAV,CAAewrB,EAAf;EAAqB;;EACnI,eAAOI,SAAP;EACD,OAJO,CAILhhB,KAJK,CAIC,IAJD,EAIOif,OAJP,EAAR;;EAKA8B,MAAAA,QAAQ,GAAG,EAAX;;EACA,WAAKJ,EAAE,GAAG,CAAL,EAAQE,IAAI,GAAGC,KAAK,CAAC7uB,MAA1B,EAAkC0uB,EAAE,GAAGE,IAAvC,EAA6CF,EAAE,EAA/C,EAAmD;EACjDzuB,QAAAA,CAAC,GAAG4uB,KAAK,CAACH,EAAD,CAAT;;EACAI,QAAAA,QAAQ,CAAC3rB,IAAT,CAAc8qB,OAAO,CAAC/qB,KAAD,EAAQjD,CAAR,EAAWmuB,GAAX,CAArB;EACD;;EACD,aAAOU,QAAP;EACD,KAhBD;;;;;;;EAwBAf,IAAAA,UAAU,GAAG,oBAAS7qB,KAAT,EAAgBqrB,IAAhB,EAAsBH,GAAtB,EAA2B;EACtC,UAAIY,GAAJ;;EACA,UAAIZ,GAAG,IAAI,IAAX,EAAiB;EACfA,QAAAA,GAAG,GAAGd,UAAN;EACD;;EACD0B,MAAAA,GAAG,GAAG9rB,KAAK,CAAC+D,OAAN,CAAcsnB,IAAd,CAAN;;EACA,UAAIS,GAAG,KAAK,CAAC,CAAb,EAAgB;EACd;EACD;;EACDhB,MAAAA,SAAS,CAAC9qB,KAAD,EAAQ,CAAR,EAAW8rB,GAAX,EAAgBZ,GAAhB,CAAT;;EACA,aAAOH,OAAO,CAAC/qB,KAAD,EAAQ8rB,GAAR,EAAaZ,GAAb,CAAd;EACD,KAXD;;;;;;EAkBAP,IAAAA,QAAQ,GAAG,kBAAS3qB,KAAT,EAAgBoM,CAAhB,EAAmB8e,GAAnB,EAAwB;EACjC,UAAIa,IAAJ,EAAU7oB,MAAV,EAAkBsoB,EAAlB,EAAsBE,IAAtB,EAA4B/D,IAA5B;;EACA,UAAIuD,GAAG,IAAI,IAAX,EAAiB;EACfA,QAAAA,GAAG,GAAGd,UAAN;EACD;;EACDlnB,MAAAA,MAAM,GAAGlD,KAAK,CAACioB,KAAN,CAAY,CAAZ,EAAe7b,CAAf,CAAT;;EACA,UAAI,CAAClJ,MAAM,CAACpG,MAAZ,EAAoB;EAClB,eAAOoG,MAAP;EACD;;EACDmnB,MAAAA,OAAO,CAACnnB,MAAD,EAASgoB,GAAT,CAAP;EACAvD,MAAAA,IAAI,GAAG3nB,KAAK,CAACioB,KAAN,CAAY7b,CAAZ,CAAP;;EACA,WAAKof,EAAE,GAAG,CAAL,EAAQE,IAAI,GAAG/D,IAAI,CAAC7qB,MAAzB,EAAiC0uB,EAAE,GAAGE,IAAtC,EAA4CF,EAAE,EAA9C,EAAkD;EAChDO,QAAAA,IAAI,GAAGpE,IAAI,CAAC6D,EAAD,CAAX;EACAhB,QAAAA,WAAW,CAACtnB,MAAD,EAAS6oB,IAAT,EAAeb,GAAf,CAAX;EACD;;EACD,aAAOhoB,MAAM,CAACwR,IAAP,CAAYwW,GAAZ,EAAiBpB,OAAjB,EAAP;EACD,KAhBD;;;;;;EAuBAc,IAAAA,SAAS,GAAG,mBAAS5qB,KAAT,EAAgBoM,CAAhB,EAAmB8e,GAAnB,EAAwB;EAClC,UAAIa,IAAJ,EAAUhvB,CAAV,EAAaivB,GAAb,EAAkB9oB,MAAlB,EAA0BsoB,EAA1B,EAA8BC,EAA9B,EAAkCC,IAAlC,EAAwC/D,IAAxC,EAA8CgE,KAA9C,EAAqDC,QAArD;;EACA,UAAIV,GAAG,IAAI,IAAX,EAAiB;EACfA,QAAAA,GAAG,GAAGd,UAAN;EACD;;EACD,UAAIhe,CAAC,GAAG,EAAJ,IAAUpM,KAAK,CAAClD,MAApB,EAA4B;EAC1BoG,QAAAA,MAAM,GAAGlD,KAAK,CAACioB,KAAN,CAAY,CAAZ,EAAe7b,CAAf,EAAkBsI,IAAlB,CAAuBwW,GAAvB,CAAT;;EACA,YAAI,CAAChoB,MAAM,CAACpG,MAAZ,EAAoB;EAClB,iBAAOoG,MAAP;EACD;;EACD8oB,QAAAA,GAAG,GAAG9oB,MAAM,CAACA,MAAM,CAACpG,MAAP,GAAgB,CAAjB,CAAZ;EACA6qB,QAAAA,IAAI,GAAG3nB,KAAK,CAACioB,KAAN,CAAY7b,CAAZ,CAAP;;EACA,aAAKof,EAAE,GAAG,CAAL,EAAQE,IAAI,GAAG/D,IAAI,CAAC7qB,MAAzB,EAAiC0uB,EAAE,GAAGE,IAAtC,EAA4CF,EAAE,EAA9C,EAAkD;EAChDO,UAAAA,IAAI,GAAGpE,IAAI,CAAC6D,EAAD,CAAX;;EACA,cAAIN,GAAG,CAACa,IAAD,EAAOC,GAAP,CAAH,GAAiB,CAArB,EAAwB;EACtBtB,YAAAA,MAAM,CAACxnB,MAAD,EAAS6oB,IAAT,EAAe,CAAf,EAAkB,IAAlB,EAAwBb,GAAxB,CAAN;EACAhoB,YAAAA,MAAM,CAACwkB,GAAP;EACAsE,YAAAA,GAAG,GAAG9oB,MAAM,CAACA,MAAM,CAACpG,MAAP,GAAgB,CAAjB,CAAZ;EACD;EACF;;EACD,eAAOoG,MAAP;EACD;;EACDmnB,MAAAA,OAAO,CAACrqB,KAAD,EAAQkrB,GAAR,CAAP;EACAU,MAAAA,QAAQ,GAAG,EAAX;;EACA,WAAK7uB,CAAC,GAAG0uB,EAAE,GAAG,CAAT,EAAYE,KAAK,GAAG3uB,GAAG,CAACoP,CAAD,EAAIpM,KAAK,CAAClD,MAAV,CAA5B,EAA+C,KAAK6uB,KAAL,GAAaF,EAAE,GAAGE,KAAlB,GAA0BF,EAAE,GAAGE,KAA9E,EAAqF5uB,CAAC,GAAG,KAAK4uB,KAAL,GAAa,EAAEF,EAAf,GAAoB,EAAEA,EAA/G,EAAmH;EACjHG,QAAAA,QAAQ,CAAC3rB,IAAT,CAAcqqB,OAAO,CAACtqB,KAAD,EAAQkrB,GAAR,CAArB;EACD;;EACD,aAAOU,QAAP;EACD,KA5BD;;EA8BAd,IAAAA,SAAS,GAAG,mBAAS9qB,KAAT,EAAgBisB,QAAhB,EAA0BH,GAA1B,EAA+BZ,GAA/B,EAAoC;EAC9C,UAAIgB,OAAJ,EAAaC,MAAb,EAAqBC,SAArB;;EACA,UAAIlB,GAAG,IAAI,IAAX,EAAiB;EACfA,QAAAA,GAAG,GAAGd,UAAN;EACD;;EACD8B,MAAAA,OAAO,GAAGlsB,KAAK,CAAC8rB,GAAD,CAAf;;EACA,aAAOA,GAAG,GAAGG,QAAb,EAAuB;EACrBG,QAAAA,SAAS,GAAIN,GAAG,GAAG,CAAP,IAAa,CAAzB;EACAK,QAAAA,MAAM,GAAGnsB,KAAK,CAACosB,SAAD,CAAd;;EACA,YAAIlB,GAAG,CAACgB,OAAD,EAAUC,MAAV,CAAH,GAAuB,CAA3B,EAA8B;EAC5BnsB,UAAAA,KAAK,CAAC8rB,GAAD,CAAL,GAAaK,MAAb;EACAL,UAAAA,GAAG,GAAGM,SAAN;EACA;EACD;;EACD;EACD;;EACD,aAAOpsB,KAAK,CAAC8rB,GAAD,CAAL,GAAaI,OAApB;EACD,KAjBD;;EAmBAnB,IAAAA,OAAO,GAAG,iBAAS/qB,KAAT,EAAgB8rB,GAAhB,EAAqBZ,GAArB,EAA0B;EAClC,UAAImB,QAAJ,EAAcC,MAAd,EAAsBJ,OAAtB,EAA+BK,QAA/B,EAAyCN,QAAzC;;EACA,UAAIf,GAAG,IAAI,IAAX,EAAiB;EACfA,QAAAA,GAAG,GAAGd,UAAN;EACD;;EACDkC,MAAAA,MAAM,GAAGtsB,KAAK,CAAClD,MAAf;EACAmvB,MAAAA,QAAQ,GAAGH,GAAX;EACAI,MAAAA,OAAO,GAAGlsB,KAAK,CAAC8rB,GAAD,CAAf;EACAO,MAAAA,QAAQ,GAAG,IAAIP,GAAJ,GAAU,CAArB;;EACA,aAAOO,QAAQ,GAAGC,MAAlB,EAA0B;EACxBC,QAAAA,QAAQ,GAAGF,QAAQ,GAAG,CAAtB;;EACA,YAAIE,QAAQ,GAAGD,MAAX,IAAqB,EAAEpB,GAAG,CAAClrB,KAAK,CAACqsB,QAAD,CAAN,EAAkBrsB,KAAK,CAACusB,QAAD,CAAvB,CAAH,GAAwC,CAA1C,CAAzB,EAAuE;EACrEF,UAAAA,QAAQ,GAAGE,QAAX;EACD;;EACDvsB,QAAAA,KAAK,CAAC8rB,GAAD,CAAL,GAAa9rB,KAAK,CAACqsB,QAAD,CAAlB;EACAP,QAAAA,GAAG,GAAGO,QAAN;EACAA,QAAAA,QAAQ,GAAG,IAAIP,GAAJ,GAAU,CAArB;EACD;;EACD9rB,MAAAA,KAAK,CAAC8rB,GAAD,CAAL,GAAaI,OAAb;EACA,aAAOpB,SAAS,CAAC9qB,KAAD,EAAQisB,QAAR,EAAkBH,GAAlB,EAAuBZ,GAAvB,CAAhB;EACD,KApBD;;EAsBAf,IAAAA,IAAI,GAAI,YAAW;EACjBA,MAAAA,IAAI,CAAClqB,IAAL,GAAYsqB,QAAZ;EAEAJ,MAAAA,IAAI,CAACzC,GAAL,GAAW4C,OAAX;EAEAH,MAAAA,IAAI,CAACqC,OAAL,GAAe/B,WAAf;EAEAN,MAAAA,IAAI,CAACsC,OAAL,GAAejC,WAAf;EAEAL,MAAAA,IAAI,CAACE,OAAL,GAAeA,OAAf;EAEAF,MAAAA,IAAI,CAACU,UAAL,GAAkBA,UAAlB;EAEAV,MAAAA,IAAI,CAACQ,QAAL,GAAgBA,QAAhB;EAEAR,MAAAA,IAAI,CAACS,SAAL,GAAiBA,SAAjB;;EAEA,eAAST,IAAT,CAAce,GAAd,EAAmB;EACjB,aAAKA,GAAL,GAAWA,GAAG,IAAI,IAAP,GAAcA,GAAd,GAAoBd,UAA/B;EACA,aAAKsC,KAAL,GAAa,EAAb;EACD;;EAEDvC,MAAAA,IAAI,CAAC9tB,SAAL,CAAe4D,IAAf,GAAsB,UAASmB,CAAT,EAAY;EAChC,eAAOmpB,QAAQ,CAAC,KAAKmC,KAAN,EAAatrB,CAAb,EAAgB,KAAK8pB,GAArB,CAAf;EACD,OAFD;;EAIAf,MAAAA,IAAI,CAAC9tB,SAAL,CAAeqrB,GAAf,GAAqB,YAAW;EAC9B,eAAO4C,OAAO,CAAC,KAAKoC,KAAN,EAAa,KAAKxB,GAAlB,CAAd;EACD,OAFD;;EAIAf,MAAAA,IAAI,CAAC9tB,SAAL,CAAeswB,IAAf,GAAsB,YAAW;EAC/B,eAAO,KAAKD,KAAL,CAAW,CAAX,CAAP;EACD,OAFD;;EAIAvC,MAAAA,IAAI,CAAC9tB,SAAL,CAAeuwB,QAAf,GAA0B,UAASxrB,CAAT,EAAY;EACpC,eAAO,KAAKsrB,KAAL,CAAW3oB,OAAX,CAAmB3C,CAAnB,MAA0B,CAAC,CAAlC;EACD,OAFD;;EAIA+oB,MAAAA,IAAI,CAAC9tB,SAAL,CAAemwB,OAAf,GAAyB,UAASprB,CAAT,EAAY;EACnC,eAAOqpB,WAAW,CAAC,KAAKiC,KAAN,EAAatrB,CAAb,EAAgB,KAAK8pB,GAArB,CAAlB;EACD,OAFD;;EAIAf,MAAAA,IAAI,CAAC9tB,SAAL,CAAeowB,OAAf,GAAyB,UAASrrB,CAAT,EAAY;EACnC,eAAOopB,WAAW,CAAC,KAAKkC,KAAN,EAAatrB,CAAb,EAAgB,KAAK8pB,GAArB,CAAlB;EACD,OAFD;;EAIAf,MAAAA,IAAI,CAAC9tB,SAAL,CAAeguB,OAAf,GAAyB,YAAW;EAClC,eAAOA,OAAO,CAAC,KAAKqC,KAAN,EAAa,KAAKxB,GAAlB,CAAd;EACD,OAFD;;EAIAf,MAAAA,IAAI,CAAC9tB,SAAL,CAAewuB,UAAf,GAA4B,UAASzpB,CAAT,EAAY;EACtC,eAAOypB,UAAU,CAAC,KAAK6B,KAAN,EAAatrB,CAAb,EAAgB,KAAK8pB,GAArB,CAAjB;EACD,OAFD;;EAIAf,MAAAA,IAAI,CAAC9tB,SAAL,CAAewwB,KAAf,GAAuB,YAAW;EAChC,eAAO,KAAKH,KAAL,GAAa,EAApB;EACD,OAFD;;EAIAvC,MAAAA,IAAI,CAAC9tB,SAAL,CAAeywB,KAAf,GAAuB,YAAW;EAChC,eAAO,KAAKJ,KAAL,CAAW5vB,MAAX,KAAsB,CAA7B;EACD,OAFD;;EAIAqtB,MAAAA,IAAI,CAAC9tB,SAAL,CAAekF,IAAf,GAAsB,YAAW;EAC/B,eAAO,KAAKmrB,KAAL,CAAW5vB,MAAlB;EACD,OAFD;;EAIAqtB,MAAAA,IAAI,CAAC9tB,SAAL,CAAewP,KAAf,GAAuB,YAAW;EAChC,YAAIkhB,IAAJ;EACAA,QAAAA,IAAI,GAAG,IAAI5C,IAAJ,EAAP;EACA4C,QAAAA,IAAI,CAACL,KAAL,GAAa,KAAKA,KAAL,CAAWzE,KAAX,CAAiB,CAAjB,CAAb;EACA,eAAO8E,IAAP;EACD,OALD;;EAOA5C,MAAAA,IAAI,CAAC9tB,SAAL,CAAe2wB,OAAf,GAAyB,YAAW;EAClC,eAAO,KAAKN,KAAL,CAAWzE,KAAX,CAAiB,CAAjB,CAAP;EACD,OAFD;;EAIAkC,MAAAA,IAAI,CAAC9tB,SAAL,CAAe4wB,MAAf,GAAwB9C,IAAI,CAAC9tB,SAAL,CAAe4D,IAAvC;EAEAkqB,MAAAA,IAAI,CAAC9tB,SAAL,CAAe6wB,GAAf,GAAqB/C,IAAI,CAAC9tB,SAAL,CAAeswB,IAApC;EAEAxC,MAAAA,IAAI,CAAC9tB,SAAL,CAAe8wB,KAAf,GAAuBhD,IAAI,CAAC9tB,SAAL,CAAeswB,IAAtC;EAEAxC,MAAAA,IAAI,CAAC9tB,SAAL,CAAeiqB,GAAf,GAAqB6D,IAAI,CAAC9tB,SAAL,CAAeuwB,QAApC;EAEAzC,MAAAA,IAAI,CAAC9tB,SAAL,CAAe2O,IAAf,GAAsBmf,IAAI,CAAC9tB,SAAL,CAAewP,KAArC;EAEA,aAAOse,IAAP;EAED,KAzFM,EAAP;;EA2FA,KAAC,UAASrF,IAAT,EAAesI,OAAf,EAAwB;EACvB,MAEwC;EACtC,eAAOxF,cAAA,GAAiBwF,OAAO,EAA/B;EACD,OAFM;EAKR,KARD,EAQG,IARH,EAQS,YAAW;EAClB,aAAOjD,IAAP;EACD,KAVD;EAYD,GArXD,EAqXG3tB,IArXH,CAqXQ6wB,cArXR;;;ECDA,UAAc,GAAGC,IAAjB;;ECEe,MAAMC,OAAN,CAAc;EAC3B5qB,EAAAA,WAAW,GAAG;EACZ,SAAK6qB,QAAL,GAAgB,EAAhB;EACA,SAAKC,QAAL,GAAgB,CAAC,CAAjB;EACA,SAAKvvB,KAAL,GAAa,EAAb;EACD;EAED;;;;;;;EAKAwvB,EAAAA,GAAG,CAACrS,SAAD,EAAY;EACb,QAAIA,SAAS,GAAG,CAAhB,EAAmB,MAAM,IAAI5d,UAAJ,CAAe,qBAAf,CAAN;EACnB,QAAIqnB,IAAI,GAAG,IAAIyI,OAAJ,EAAX;EACAzI,IAAAA,IAAI,CAAC0I,QAAL,GAAgB,KAAKA,QAArB;EACA1I,IAAAA,IAAI,CAAC2I,QAAL,GAAgB,KAAKA,QAArB;EACA3I,IAAAA,IAAI,CAAC5mB,KAAL,GAAa,KAAKA,KAAlB;EACA,QAAIyvB,IAAI,GAAG,CAAC7I,IAAD,CAAX;EACA,QAAI8I,GAAG,GAAG,EAAV;;EACA,WAAOD,IAAI,CAAC7wB,MAAL,GAAc,CAArB,EAAwB;EACtB,UAAIyc,GAAG,GAAGoU,IAAI,CAAC1S,KAAL,EAAV;;EACA,UAAII,SAAS,IAAI9B,GAAG,CAACkU,QAArB,EAA+B;EAC7BG,QAAAA,GAAG,CAAC3tB,IAAJ,CAASsZ,GAAT;EACD,OAFD,MAEO;EACLoU,QAAAA,IAAI,GAAGA,IAAI,CAACvC,MAAL,CAAY7R,GAAG,CAACiU,QAAhB,CAAP;EACD;EACF;;EACD,WAAOI,GAAP;EACD;EAED;;;;;;;EAKAC,EAAAA,KAAK,CAACC,SAAD,EAAY;EACf,QAAI,CAAC5jB,MAAM,CAACC,SAAP,CAAiB2jB,SAAjB,CAAD,IAAgCA,SAAS,GAAG,CAAhD,EAAmD;EACjD,YAAM,IAAIrwB,UAAJ,CAAe,6CAAf,CAAN;EACD;;EAED,UAAMsvB,IAAI,GAAG,IAAI5C,MAAJ,CAAS,UAAU7W,CAAV,EAAaC,CAAb,EAAgB;EACpC,aAAOA,CAAC,CAACka,QAAF,GAAana,CAAC,CAACma,QAAtB;EACD,KAFY,CAAb;EAIAV,IAAAA,IAAI,CAAC9sB,IAAL,CAAU,IAAV;;EAEA,WAAO8sB,IAAI,CAACxrB,IAAL,KAAcusB,SAArB,EAAgC;EAC9B,UAAI7Z,KAAK,GAAG8Y,IAAI,CAACrF,GAAL,EAAZ;;EACA,UAAIzT,KAAK,CAACuZ,QAAN,CAAe1wB,MAAf,KAA0B,CAA9B,EAAiC;EAC/B;EACD;;EACDmX,MAAAA,KAAK,CAACuZ,QAAN,CAAeO,OAAf,CAAwBC,KAAD,IAAWjB,IAAI,CAAC9sB,IAAL,CAAU+tB,KAAV,CAAlC;EACD;;EAED,QAAIlJ,IAAI,GAAG,IAAIyI,OAAJ,EAAX;EACAzI,IAAAA,IAAI,CAAC0I,QAAL,GAAgBT,IAAI,CAACC,OAAL,EAAhB;EACAlI,IAAAA,IAAI,CAAC2I,QAAL,GAAgB,KAAKA,QAArB;EAEA,WAAO3I,IAAP;EACD;EAED;;;;;;;EAKAmJ,EAAAA,QAAQ,CAACC,EAAD,EAAK;EACX,aAASC,KAAT,CAAerJ,IAAf,EAAqBha,QAArB,EAA+B;EAC7BA,MAAAA,QAAQ,CAACga,IAAD,CAAR;;EACA,UAAIA,IAAI,CAAC0I,QAAT,EAAmB;EACjB,aAAK,IAAIzwB,CAAC,GAAG+nB,IAAI,CAAC0I,QAAL,CAAc1wB,MAAd,GAAuB,CAApC,EAAuCC,CAAC,IAAI,CAA5C,EAA+CA,CAAC,EAAhD,EAAoD;EAClDoxB,UAAAA,KAAK,CAACrJ,IAAI,CAAC0I,QAAL,CAAczwB,CAAd,CAAD,EAAmB+N,QAAnB,CAAL;EACD;EACF;EACF;;EACDqjB,IAAAA,KAAK,CAAC,IAAD,EAAOD,EAAP,CAAL;EACD;;EA7E0B;;ECAd,MAAME,WAAN,SAA0Bb,OAA1B,CAAkC;EAC/C5qB,EAAAA,WAAW,CAACzE,KAAD,EAAQ;EACjB;EACA,SAAKA,KAAL,GAAaA,KAAb;EACA,SAAKuvB,QAAL,GAAgB,CAAhB;EACA,SAAKD,QAAL,GAAgB,EAAhB;EACD;;EAN8C;;ECIjD;;;;;;;;EAOA,SAASa,UAAT,CAAoBC,QAApB,EAA8BC,QAA9B,EAAwCC,MAAxC,EAAgD;EAC9C,MAAIriB,CAAC,GAAG,MAAR;;EACA,OAAK,IAAIpP,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGuxB,QAAQ,CAACxxB,MAA7B,EAAqCC,CAAC,EAAtC,EAA0C;EACxC,SAAK,IAAIsD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGkuB,QAAQ,CAACzxB,MAA7B,EAAqCuD,CAAC,EAAtC,EAA0C;EACxC,UAAIsc,CAAC,GAAG6R,MAAM,CAACF,QAAQ,CAACvxB,CAAD,CAAT,CAAN,CAAoBwxB,QAAQ,CAACluB,CAAD,CAA5B,CAAR;EACA8L,MAAAA,CAAC,GAAGrK,IAAI,CAAC9E,GAAL,CAAS2f,CAAT,EAAYxQ,CAAZ,CAAJ;EACD;EACF;;EACD,SAAOA,CAAP;EACD;EAED;;;;;;;;;EAOA,SAASsiB,YAAT,CAAsBH,QAAtB,EAAgCC,QAAhC,EAA0CC,MAA1C,EAAkD;EAChD,MAAIriB,CAAC,GAAG,CAAC,CAAT;;EACA,OAAK,IAAIpP,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGuxB,QAAQ,CAACxxB,MAA7B,EAAqCC,CAAC,EAAtC,EAA0C;EACxC,SAAK,IAAIsD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGkuB,QAAQ,CAACzxB,MAA7B,EAAqCuD,CAAC,EAAtC,EAA0C;EACxC,UAAIsc,CAAC,GAAG6R,MAAM,CAACF,QAAQ,CAACvxB,CAAD,CAAT,CAAN,CAAoBwxB,QAAQ,CAACluB,CAAD,CAA5B,CAAR;EACA8L,MAAAA,CAAC,GAAGrK,IAAI,CAACpF,GAAL,CAASigB,CAAT,EAAYxQ,CAAZ,CAAJ;EACD;EACF;;EACD,SAAOA,CAAP;EACD;EAED;;;;;;;;;EAOA,SAASuiB,WAAT,CAAqBJ,QAArB,EAA+BC,QAA/B,EAAyCC,MAAzC,EAAiD;EAC/C,MAAIriB,CAAC,GAAG,CAAR;;EACA,OAAK,IAAIpP,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGuxB,QAAQ,CAACxxB,MAA7B,EAAqCC,CAAC,EAAtC,EAA0C;EACxC,SAAK,IAAIsD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGkuB,QAAQ,CAACzxB,MAA7B,EAAqCuD,CAAC,EAAtC,EAA0C;EACxC8L,MAAAA,CAAC,IAAIqiB,MAAM,CAACF,QAAQ,CAACvxB,CAAD,CAAT,CAAN,CAAoBwxB,QAAQ,CAACluB,CAAD,CAA5B,CAAL;EACD;EACF;;EACD,SAAO8L,CAAC,IAAImiB,QAAQ,CAACxxB,MAAT,GAAkByxB,QAAQ,CAACzxB,MAA/B,CAAR;EACD;EAED;;;;;;;;;EAOA,SAAS6xB,YAAT,CAAsBL,QAAtB,EAAgCC,QAAhC,EAA0CC,MAA1C,EAAkD;EAChD,MAAII,IAAI,GAAG,IAAItxB,KAAJ,CAAUgxB,QAAQ,CAACxxB,MAAT,GAAkByxB,QAAQ,CAACzxB,MAArC,CAAX;;EACA,OAAK,IAAIC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGuxB,QAAQ,CAACxxB,MAA7B,EAAqCC,CAAC,EAAtC,EAA0C;EACxC,SAAK,IAAIsD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGkuB,QAAQ,CAACzxB,MAA7B,EAAqCuD,CAAC,EAAtC,EAA0C;EACxCuuB,MAAAA,IAAI,CAAC7xB,CAAC,GAAGwxB,QAAQ,CAACzxB,MAAb,GAAsBuD,CAAvB,CAAJ,GAAgCmuB,MAAM,CAACF,QAAQ,CAACvxB,CAAD,CAAT,CAAN,CAAoBwxB,QAAQ,CAACluB,CAAD,CAA5B,CAAhC;EACD;EACF;;EACD,SAAO0nB,QAAM,CAAC6G,IAAD,CAAb;EACD;EAED;;;;;;;;;EAOA,SAASC,QAAT,CAAkBP,QAAlB,EAA4BC,QAA5B,EAAsCC,MAAtC,EAA8C;EAC5C,SACGG,YAAY,CAACL,QAAD,EAAWC,QAAX,EAAqBC,MAArB,CAAZ,GACCF,QAAQ,CAACxxB,MADV,GAECyxB,QAAQ,CAACzxB,MAFX,IAGCwxB,QAAQ,CAACxxB,MAAT,GAAkByxB,QAAQ,CAACzxB,MAH5B,CADF;EAMD;;EAED,SAAS2X,gBAAT,CAAwBnB,CAAxB,EAA2BC,CAA3B,EAA8B;EAC5B,SAAOD,CAAC,GAAGC,CAAX;EACD;;EAED,SAASwU,QAAT,CAAgBV,MAAhB,EAAwByH,aAAxB,EAAuC;EACrC,MAAIA,aAAa,KAAK1xB,SAAtB,EAAiC0xB,aAAa,GAAG,KAAhB;;EACjC,MAAI,CAACA,aAAL,EAAoB;EAClBzH,IAAAA,MAAM,GAAG,GAAG+D,MAAH,CAAU/D,MAAV,EAAkB3S,IAAlB,CAAuBD,gBAAvB,CAAT;EACD;;EACD,MAAIjK,CAAC,GAAG6c,MAAM,CAACvqB,MAAf;EACA,MAAIiyB,IAAI,GAAGjtB,IAAI,CAACwG,KAAL,CAAWkC,CAAC,GAAG,CAAf,CAAX;;EACA,MAAIA,CAAC,GAAG,CAAJ,KAAU,CAAd,EAAiB;EACf,WAAO,CAAC6c,MAAM,CAAC0H,IAAI,GAAG,CAAR,CAAN,GAAmB1H,MAAM,CAAC0H,IAAD,CAA1B,IAAoC,GAA3C;EACD,GAFD,MAEO;EACL,WAAO1H,MAAM,CAAC0H,IAAD,CAAb;EACD;EACF;EAED;;;;;;;;;;;;AAUA,EAAO,SAASC,KAAT,CAAezkB,IAAf,EAAmC;EAAA,MAAdrN,OAAc,uEAAJ,EAAI;EACxC,QAAM;EACJ+xB,IAAAA,gBAAgB,GAAGjF,SADf;EAEJkF,IAAAA,MAAM,GAAG,QAFL;EAGJC,IAAAA,gBAAgB,GAAG;EAHf,MAIFjyB,OAJJ;EAKA,MAAIkyB,UAAJ;EAEA,MAAIC,GAAG,GAAG9kB,IAAI,CAACzN,MAAf;EACA,MAAI2wB,QAAQ,GAAGljB,IAAf,CATwC;;EAUxC,MAAI,CAAC4kB,gBAAL,EAAuB;EACrB1B,IAAAA,QAAQ,GAAGxD,KAAc,CAAC1f,IAAD,EAAO0kB,gBAAP,CAAzB;EACD,GAZuC;;;EAexC,MAAI,OAAOC,MAAP,KAAkB,QAAtB,EAAgC;EAC9B,YAAQA,MAAR;EACE,WAAK,QAAL;EACEE,QAAAA,UAAU,GAAGf,UAAb;EACA;;EACF,WAAK,UAAL;EACEe,QAAAA,UAAU,GAAGX,YAAb;EACA;;EACF,WAAK,SAAL;EACEW,QAAAA,UAAU,GAAGV,WAAb;EACA;;EACF,WAAK,UAAL;EACEU,QAAAA,UAAU,GAAGT,YAAb;EACA;;EACF,WAAK,MAAL;EACES,QAAAA,UAAU,GAAGP,QAAb;EACA;;EACF;EACE,cAAM,IAAIpxB,UAAJ,sCAA6CyxB,MAA7C,EAAN;EAjBJ;EAmBD,GApBD,MAoBO,IAAI,OAAOA,MAAP,KAAkB,UAAtB,EAAkC;EACvC,UAAM,IAAIryB,SAAJ,CAAc,qCAAd,CAAN;EACD;;EAED,MAAI8wB,IAAI,GAAG,IAAIrwB,KAAJ,CAAU+xB,GAAV,CAAX;;EACA,OAAK,IAAItyB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG0wB,QAAQ,CAAC3wB,MAA7B,EAAqCC,CAAC,EAAtC,EAA0C;EACxC4wB,IAAAA,IAAI,CAAC5wB,CAAD,CAAJ,GAAU,IAAIqxB,WAAJ,CAAgBrxB,CAAhB,CAAV;EACD;;EACD,MAAIC,GAAG,GAAG,IAAV;EACA,MAAI2f,CAAC,GAAG,EAAR;EACA,MAAI2S,GAAG,GAAG,CAAV;;EAEA,SAAO3B,IAAI,CAAC7wB,MAAL,GAAc,CAArB,EAAwB;EACtB;EACA6f,IAAAA,CAAC,GAAG,EAAJ;EACA3f,IAAAA,GAAG,GAAG,IAAN;;EACA,SAAK,IAAIqD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGstB,IAAI,CAAC7wB,MAAzB,EAAiCuD,CAAC,EAAlC,EAAsC;EACpC,WAAK,IAAIsL,CAAC,GAAGtL,CAAC,GAAG,CAAjB,EAAoBsL,CAAC,GAAGgiB,IAAI,CAAC7wB,MAA7B,EAAqC6O,CAAC,EAAtC,EAA0C;EACxC,YAAI4jB,SAAJ,EAAeC,SAAf;;EACA,YAAI7B,IAAI,CAACttB,CAAD,CAAJ,YAAmB+tB,WAAvB,EAAoC;EAClCmB,UAAAA,SAAS,GAAG,CAAC5B,IAAI,CAACttB,CAAD,CAAJ,CAAQnC,KAAT,CAAZ;EACD,SAFD,MAEO;EACLqxB,UAAAA,SAAS,GAAG,IAAIjyB,KAAJ,CAAUqwB,IAAI,CAACttB,CAAD,CAAJ,CAAQnC,KAAR,CAAcpB,MAAxB,CAAZ;;EACA,eAAK,IAAIkH,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGurB,SAAS,CAACzyB,MAA9B,EAAsCkH,CAAC,EAAvC,EAA2C;EACzCurB,YAAAA,SAAS,CAACvrB,CAAD,CAAT,GAAe2pB,IAAI,CAACttB,CAAD,CAAJ,CAAQnC,KAAR,CAAc8F,CAAd,EAAiB9F,KAAhC;EACD;EACF;;EACD,YAAIyvB,IAAI,CAAChiB,CAAD,CAAJ,YAAmByiB,WAAvB,EAAoC;EAClCoB,UAAAA,SAAS,GAAG,CAAC7B,IAAI,CAAChiB,CAAD,CAAJ,CAAQzN,KAAT,CAAZ;EACD,SAFD,MAEO;EACLsxB,UAAAA,SAAS,GAAG,IAAIlyB,KAAJ,CAAUqwB,IAAI,CAAChiB,CAAD,CAAJ,CAAQzN,KAAR,CAAcpB,MAAxB,CAAZ;;EACA,eAAK,IAAI2d,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG+U,SAAS,CAAC1yB,MAA9B,EAAsC2d,CAAC,EAAvC,EAA2C;EACzC+U,YAAAA,SAAS,CAAC/U,CAAD,CAAT,GAAekT,IAAI,CAAChiB,CAAD,CAAJ,CAAQzN,KAAR,CAAcuc,CAAd,EAAiBvc,KAAhC;EACD;EACF;;EACDoxB,QAAAA,GAAG,GAAGF,UAAU,CAACG,SAAD,EAAYC,SAAZ,EAAuB/B,QAAvB,CAAV,CAA2CgC,OAA3C,CAAmD,CAAnD,CAAN;;EACA,YAAIH,GAAG,IAAI3S,CAAX,EAAc;EACZA,UAAAA,CAAC,CAAC2S,GAAD,CAAD,CAAOrvB,IAAP,CAAY,CAAC0tB,IAAI,CAACttB,CAAD,CAAL,EAAUstB,IAAI,CAAChiB,CAAD,CAAd,CAAZ;EACD,SAFD,MAEO;EACLgR,UAAAA,CAAC,CAAC2S,GAAD,CAAD,GAAS,CAAC,CAAC3B,IAAI,CAACttB,CAAD,CAAL,EAAUstB,IAAI,CAAChiB,CAAD,CAAd,CAAD,CAAT;EACD;;EACD3O,QAAAA,GAAG,GAAG8E,IAAI,CAAC9E,GAAL,CAASsyB,GAAT,EAActyB,GAAd,CAAN;EACD;EACF,KA/BqB;;;EAiCtB,QAAI0yB,IAAI,GAAG/S,CAAC,CAAC3f,GAAG,CAACyyB,OAAJ,CAAY,CAAZ,CAAD,CAAZ;EACA,QAAIE,SAAS,GAAG,IAAIryB,KAAJ,CAAUoyB,IAAI,CAAC5yB,MAAf,CAAhB;EACA,QAAIkb,KAAK,GAAG,CAAZ;;EACA,WAAO0X,IAAI,CAAC5yB,MAAL,GAAc,CAArB,EAAwB;EACtB,UAAIyc,GAAG,GAAGmW,IAAI,CAACzU,KAAL,EAAV;;EACA,YAAM2U,SAAS,GAAG,SAAZA,SAAY,CAAUxjB,CAAV,EAAa;EAC7B,eAAOmN,GAAG,CAACxV,OAAJ,CAAYqI,CAAZ,MAAmB,CAAC,CAA3B;EACD,OAFD;;EAGA,YAAMyjB,UAAU,GAAG,SAAbA,UAAa,CAAUzjB,CAAV,EAAa;EAC9B,eAAOmN,GAAG,CAACxV,OAAJ,CAAYqI,CAAZ,MAAmB,CAAC,CAA3B;EACD,OAFD;;EAGA,WAAK,IAAIiI,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGqb,IAAI,CAAC5yB,MAAzB,EAAiCuX,CAAC,EAAlC,EAAsC;EACpC,YAAIyb,GAAG,GAAGJ,IAAI,CAACrb,CAAD,CAAJ,CAAQ6M,MAAR,CAAe0O,SAAf,CAAV;;EACA,YAAIE,GAAG,CAAChzB,MAAJ,GAAa,CAAjB,EAAoB;EAClB,cAAIizB,IAAI,GAAGL,IAAI,CAACrb,CAAD,CAAJ,CAAQ6M,MAAR,CAAe2O,UAAf,CAAX;EACAtW,UAAAA,GAAG,GAAGA,GAAG,CAAC6R,MAAJ,CAAW2E,IAAX,CAAN;EACAL,UAAAA,IAAI,CAACxZ,MAAL,CAAY7B,CAAC,EAAb,EAAiB,CAAjB;EACD;EACF;;EACDsb,MAAAA,SAAS,CAAC3X,KAAK,EAAN,CAAT,GAAqBuB,GAArB;EACD;;EACDoW,IAAAA,SAAS,CAAC7yB,MAAV,GAAmBkb,KAAnB;;EAEA,SAAK,IAAIqE,EAAE,GAAG,CAAd,EAAiBA,EAAE,GAAGsT,SAAS,CAAC7yB,MAAhC,EAAwCuf,EAAE,EAA1C,EAA8C;EAC5C,UAAI2T,GAAG,GAAG,IAAIzC,OAAJ,EAAV;EACAyC,MAAAA,GAAG,CAACxC,QAAJ,GAAemC,SAAS,CAACtT,EAAD,CAAT,CAAc+O,MAAd,EAAf;EACA4E,MAAAA,GAAG,CAACvC,QAAJ,GAAezwB,GAAf;EACAgzB,MAAAA,GAAG,CAAC9xB,KAAJ,GAAY,IAAIZ,KAAJ,CAAU+xB,GAAV,CAAZ;EACA,UAAIY,QAAQ,GAAG,CAAf;;EACA,WAAK,IAAIC,EAAE,GAAG,CAAd,EAAiBA,EAAE,GAAGP,SAAS,CAACtT,EAAD,CAAT,CAAcvf,MAApC,EAA4CozB,EAAE,EAA9C,EAAkD;EAChD,YAAIP,SAAS,CAACtT,EAAD,CAAT,CAAc6T,EAAd,aAA6B9B,WAAjC,EAA8C;EAC5C4B,UAAAA,GAAG,CAAC9xB,KAAJ,CAAU+xB,QAAQ,EAAlB,IAAwBN,SAAS,CAACtT,EAAD,CAAT,CAAc6T,EAAd,CAAxB;EACD,SAFD,MAEO;EACLD,UAAAA,QAAQ,IAAIN,SAAS,CAACtT,EAAD,CAAT,CAAc6T,EAAd,EAAkBhyB,KAAlB,CAAwBpB,MAApC;EACAkzB,UAAAA,GAAG,CAAC9xB,KAAJ,GAAYyxB,SAAS,CAACtT,EAAD,CAAT,CAAc6T,EAAd,EAAkBhyB,KAAlB,CAAwBktB,MAAxB,CAA+B4E,GAAG,CAAC9xB,KAAnC,CAAZ;EACD;;EACDyvB,QAAAA,IAAI,CAACzX,MAAL,CAAYyX,IAAI,CAAC5pB,OAAL,CAAa4rB,SAAS,CAACtT,EAAD,CAAT,CAAc6T,EAAd,CAAb,CAAZ,EAA6C,CAA7C;EACD;;EACDF,MAAAA,GAAG,CAAC9xB,KAAJ,CAAUpB,MAAV,GAAmBmzB,QAAnB;EACAtC,MAAAA,IAAI,CAAC1tB,IAAL,CAAU+vB,GAAV;EACD;EACF;;EACD,SAAOrC,IAAI,CAAC,CAAD,CAAX;EACD;;EC9OD;;;;;;;;;EAQA,SAASoC,IAAT,CAAcI,SAAd,EAAyB5lB,IAAzB,EAA+BikB,MAA/B,EAAuC;EACrC,MAAIZ,GAAG,GAAG;EACRjR,IAAAA,CAAC,EAAE,CADK;EAERrQ,IAAAA,CAAC,EAAE;EAFK,GAAV;EAKA,MAAI8jB,EAAE,GAAG,IAAI9yB,KAAJ,CAAU6yB,SAAS,CAAC,CAAD,CAAT,CAAarzB,MAAvB,CAAT;;EACA,OAAK,IAAIkH,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGmsB,SAAS,CAAC,CAAD,CAAT,CAAarzB,MAAjC,EAAyCkH,CAAC,EAA1C,EAA8C;EAC5CosB,IAAAA,EAAE,CAACpsB,CAAD,CAAF,GAAQuG,IAAI,CAAC4lB,SAAS,CAAC,CAAD,CAAT,CAAansB,CAAb,CAAD,CAAZ;EACD;;EACD,MAAIqsB,EAAE,GAAG,IAAI/yB,KAAJ,CAAU6yB,SAAS,CAAC,CAAD,CAAT,CAAarzB,MAAvB,CAAT;;EACA,OAAK,IAAI2d,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG0V,SAAS,CAAC,CAAD,CAAT,CAAarzB,MAAjC,EAAyC2d,CAAC,EAA1C,EAA8C;EAC5C4V,IAAAA,EAAE,CAAC5V,CAAD,CAAF,GAAQlQ,IAAI,CAAC4lB,SAAS,CAAC,CAAD,CAAT,CAAa1V,CAAb,CAAD,CAAZ;EACD;;EAED,MAAImU,IAAJ,EAAU0B,KAAV;;EACA,OAAK,IAAIvzB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGqzB,EAAE,CAACtzB,MAAvB,EAA+BC,CAAC,EAAhC,EAAoC;EAClC6xB,IAAAA,IAAI,GAAG,CAAP;;EACA,SAAK,IAAIvuB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG+vB,EAAE,CAACtzB,MAAvB,EAA+BuD,CAAC,EAAhC,EAAoC;EAClC,UAAItD,CAAC,KAAKsD,CAAV,EAAa;EACXuuB,QAAAA,IAAI,IAAIJ,MAAM,CAAC4B,EAAE,CAACrzB,CAAD,CAAH,EAAQqzB,EAAE,CAAC/vB,CAAD,CAAV,CAAd;EACD;EACF;;EACDuuB,IAAAA,IAAI,IAAIwB,EAAE,CAACtzB,MAAH,GAAY,CAApB;EACAwzB,IAAAA,KAAK,GAAG,CAAR;;EACA,SAAK,IAAI3kB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG0kB,EAAE,CAACvzB,MAAvB,EAA+B6O,CAAC,EAAhC,EAAoC;EAClC2kB,MAAAA,KAAK,IAAI9B,MAAM,CAAC4B,EAAE,CAACrzB,CAAD,CAAH,EAAQszB,EAAE,CAAC1kB,CAAD,CAAV,CAAf;EACD;;EACD2kB,IAAAA,KAAK,IAAID,EAAE,CAACvzB,MAAZ;;EACA,QAAI8xB,IAAI,GAAG0B,KAAP,GAAe1C,GAAG,CAACjR,CAAvB,EAA0B;EACxBiR,MAAAA,GAAG,CAACjR,CAAJ,GAAQiS,IAAI,GAAG0B,KAAf;EACA1C,MAAAA,GAAG,CAACthB,CAAJ,GAAQvP,CAAR;EACD;EACF;;EACD,SAAO6wB,GAAP;EACD;EAED;;;;;;;;;;EAQA,SAAS2C,QAAT,CAAkBryB,KAAlB,EAAyBqM,IAAzB,EAA+BikB,MAA/B,EAAuC;EACrC,MAAII,IAAI,GAAG,CAAX;EACA,MAAI5W,KAAK,GAAG,CAAZ;;EACA,OAAK,IAAIjb,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGmB,KAAK,CAACpB,MAA1B,EAAkCC,CAAC,EAAnC,EAAuC;EACrC,SAAK,IAAIsD,CAAC,GAAGtD,CAAb,EAAgBsD,CAAC,GAAGnC,KAAK,CAACpB,MAA1B,EAAkCuD,CAAC,EAAnC,EAAuC;EACrCuuB,MAAAA,IAAI,IAAIJ,MAAM,CAACjkB,IAAI,CAACrM,KAAK,CAACnB,CAAD,CAAL,CAASmB,KAAV,CAAL,EAAuBqM,IAAI,CAACrM,KAAK,CAACmC,CAAD,CAAL,CAASnC,KAAV,CAA3B,CAAd;EACA8Z,MAAAA,KAAK;EACN;EACF;;EACD,SAAO4W,IAAI,GAAG5W,KAAd;EACD;EAED;;;;;;;;;AAOA,EAAO,SAASwY,KAAT,CAAejmB,IAAf,EAAmC;EAAA,MAAdrN,OAAc,uEAAJ,EAAI;EACxC,QAAM;EAAE+xB,IAAAA,gBAAgB,GAAGjF;EAArB,MAAmC9sB,OAAzC;EACA,MAAIuzB,IAAI,GAAG,IAAIlD,OAAJ,EAAX;EACAkD,EAAAA,IAAI,CAACjD,QAAL,GAAgB,IAAIlwB,KAAJ,CAAUiN,IAAI,CAACzN,MAAf,CAAhB;EACA2zB,EAAAA,IAAI,CAACvyB,KAAL,GAAa,IAAIZ,KAAJ,CAAUiN,IAAI,CAACzN,MAAf,CAAb;;EACA,OAAK,IAAI4zB,GAAG,GAAG,CAAf,EAAkBA,GAAG,GAAGnmB,IAAI,CAACzN,MAA7B,EAAqC4zB,GAAG,EAAxC,EAA4C;EAC1CD,IAAAA,IAAI,CAACjD,QAAL,CAAckD,GAAd,IAAqB,IAAItC,WAAJ,CAAgBsC,GAAhB,CAArB;EACAD,IAAAA,IAAI,CAACvyB,KAAL,CAAWwyB,GAAX,IAAkB,IAAItC,WAAJ,CAAgBsC,GAAhB,CAAlB;EACD;;EAEDD,EAAAA,IAAI,CAAChD,QAAL,GAAgB8C,QAAQ,CAACE,IAAI,CAACvyB,KAAN,EAAaqM,IAAb,EAAmB0kB,gBAAnB,CAAxB;EACA,MAAI9iB,CAAJ,EAAOwkB,CAAP,EAAUC,IAAV,EAAgBhC,IAAhB,EAAsBiC,KAAtB;EACA,MAAIlD,IAAI,GAAG,CAAC8C,IAAD,CAAX;;EACA,SAAO9C,IAAI,CAAC7wB,MAAL,GAAc,CAArB,EAAwB;EACtB6zB,IAAAA,CAAC,GAAG,CAAJ;EACAC,IAAAA,IAAI,GAAG,CAAP;;EACA,SAAK,IAAI7zB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG4wB,IAAI,CAAC7wB,MAAzB,EAAiCC,CAAC,EAAlC,EAAsC;EACpCoP,MAAAA,CAAC,GAAG,CAAJ;;EACA,WAAK,IAAI9L,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGstB,IAAI,CAAC5wB,CAAD,CAAJ,CAAQD,MAA5B,EAAoCuD,CAAC,EAArC,EAAyC;EACvC,aAAK,IAAImK,CAAC,GAAGnK,CAAC,GAAG,CAAjB,EAAoBmK,CAAC,GAAGmjB,IAAI,CAAC5wB,CAAD,CAAJ,CAAQD,MAAhC,EAAwC0N,CAAC,EAAzC,EAA6C;EAC3C2B,UAAAA,CAAC,GAAGrK,IAAI,CAACpF,GAAL,CACFuyB,gBAAgB,CACd1kB,IAAI,CAACojB,IAAI,CAAC5wB,CAAD,CAAJ,CAAQmB,KAAR,CAAcmC,CAAd,EAAiBnC,KAAlB,CADU,EAEdqM,IAAI,CAACojB,IAAI,CAAC5wB,CAAD,CAAJ,CAAQmB,KAAR,CAAcsM,CAAd,EAAiBtM,KAAlB,CAFU,CADd,EAKFiO,CALE,CAAJ;EAOD;EACF;;EACD,UAAIA,CAAC,GAAGwkB,CAAR,EAAW;EACTA,QAAAA,CAAC,GAAGxkB,CAAJ;EACAykB,QAAAA,IAAI,GAAG7zB,CAAP;EACD;EACF;;EACD4zB,IAAAA,CAAC,GAAG,CAAJ;;EACA,QAAIhD,IAAI,CAACiD,IAAD,CAAJ,CAAW1yB,KAAX,CAAiBpB,MAAjB,KAA4B,CAAhC,EAAmC;EACjC6wB,MAAAA,IAAI,CAACiD,IAAD,CAAJ,CAAWpD,QAAX,GAAsB,CAACG,IAAI,CAACiD,IAAD,CAAJ,CAAW1yB,KAAX,CAAiB,CAAjB,CAAD,EAAsByvB,IAAI,CAACiD,IAAD,CAAJ,CAAW1yB,KAAX,CAAiB,CAAjB,CAAtB,CAAtB;EACAyvB,MAAAA,IAAI,CAACiD,IAAD,CAAJ,CAAWnD,QAAX,GAAsBwB,gBAAgB,CACpC1kB,IAAI,CAACojB,IAAI,CAACiD,IAAD,CAAJ,CAAW1yB,KAAX,CAAiB,CAAjB,EAAoBA,KAArB,CADgC,EAEpCqM,IAAI,CAACojB,IAAI,CAACiD,IAAD,CAAJ,CAAW1yB,KAAX,CAAiB,CAAjB,EAAoBA,KAArB,CAFgC,CAAtC;EAID,KAND,MAMO,IAAIyvB,IAAI,CAACiD,IAAD,CAAJ,CAAW1yB,KAAX,CAAiBpB,MAAjB,KAA4B,CAAhC,EAAmC;EACxC6wB,MAAAA,IAAI,CAACiD,IAAD,CAAJ,CAAWpD,QAAX,GAAsB,CACpBG,IAAI,CAACiD,IAAD,CAAJ,CAAW1yB,KAAX,CAAiB,CAAjB,CADoB,EAEpByvB,IAAI,CAACiD,IAAD,CAAJ,CAAW1yB,KAAX,CAAiB,CAAjB,CAFoB,EAGpByvB,IAAI,CAACiD,IAAD,CAAJ,CAAW1yB,KAAX,CAAiB,CAAjB,CAHoB,CAAtB;EAKA,UAAIye,CAAC,GAAG,CACNsS,gBAAgB,CACd1kB,IAAI,CAACojB,IAAI,CAACiD,IAAD,CAAJ,CAAW1yB,KAAX,CAAiB,CAAjB,EAAoBA,KAArB,CADU,EAEdqM,IAAI,CAACojB,IAAI,CAACiD,IAAD,CAAJ,CAAW1yB,KAAX,CAAiB,CAAjB,EAAoBA,KAArB,CAFU,CADV,EAKN+wB,gBAAgB,CACd1kB,IAAI,CAACojB,IAAI,CAACiD,IAAD,CAAJ,CAAW1yB,KAAX,CAAiB,CAAjB,EAAoBA,KAArB,CADU,EAEdqM,IAAI,CAACojB,IAAI,CAACiD,IAAD,CAAJ,CAAW1yB,KAAX,CAAiB,CAAjB,EAAoBA,KAArB,CAFU,CALV,CAAR;EAUAyvB,MAAAA,IAAI,CAACiD,IAAD,CAAJ,CAAWnD,QAAX,GAAsB,CAAC9Q,CAAC,CAAC,CAAD,CAAD,GAAOA,CAAC,CAAC,CAAD,CAAT,IAAgB,CAAtC;EACD,KAjBM,MAiBA;EACL,UAAImU,CAAC,GAAG,IAAIvD,OAAJ,EAAR;EACA,UAAIwD,EAAE,GAAG,IAAIxD,OAAJ,EAAT;EACA,UAAI4C,SAAS,GAAG,CAAC,IAAI7yB,KAAJ,CAAUqwB,IAAI,CAACiD,IAAD,CAAJ,CAAW1yB,KAAX,CAAiBpB,MAA3B,CAAD,EAAqC,EAArC,CAAhB;;EACA,WAAK,IAAIk0B,GAAG,GAAG,CAAf,EAAkBA,GAAG,GAAGb,SAAS,CAAC,CAAD,CAAT,CAAarzB,MAArC,EAA6Ck0B,GAAG,EAAhD,EAAoD;EAClDb,QAAAA,SAAS,CAAC,CAAD,CAAT,CAAaa,GAAb,IAAoBA,GAApB;EACD;;EACD,WAAK,IAAI3U,EAAE,GAAG,CAAd,EAAiBA,EAAE,GAAG8T,SAAS,CAAC,CAAD,CAAT,CAAarzB,MAAnC,EAA2Cuf,EAAE,EAA7C,EAAiD;EAC/CuS,QAAAA,IAAI,GAAG,CAAP;;EACA,aAAK,IAAIsB,EAAE,GAAG,CAAd,EAAiBA,EAAE,GAAGC,SAAS,CAAC,CAAD,CAAT,CAAarzB,MAAnC,EAA2CozB,EAAE,EAA7C,EAAiD;EAC/C,cAAI7T,EAAE,KAAK6T,EAAX,EAAe;EACbtB,YAAAA,IAAI,IAAIK,gBAAgB,CACtB1kB,IAAI,CAACojB,IAAI,CAACiD,IAAD,CAAJ,CAAW1yB,KAAX,CAAiBiyB,SAAS,CAAC,CAAD,CAAT,CAAaD,EAAb,CAAjB,EAAmChyB,KAApC,CADkB,EAEtBqM,IAAI,CAACojB,IAAI,CAACiD,IAAD,CAAJ,CAAW1yB,KAAX,CAAiBiyB,SAAS,CAAC,CAAD,CAAT,CAAa9T,EAAb,CAAjB,EAAmCne,KAApC,CAFkB,CAAxB;EAID;EACF;;EACD0wB,QAAAA,IAAI,IAAIuB,SAAS,CAAC,CAAD,CAAT,CAAarzB,MAAb,GAAsB,CAA9B;;EACA,YAAI8xB,IAAI,GAAG+B,CAAX,EAAc;EACZA,UAAAA,CAAC,GAAG/B,IAAJ;EACAiC,UAAAA,KAAK,GAAGxU,EAAR;EACD;EACF;;EACD8T,MAAAA,SAAS,CAAC,CAAD,CAAT,GAAe,CAACU,KAAD,CAAf;EACAV,MAAAA,SAAS,CAAC,CAAD,CAAT,CAAaja,MAAb,CAAoB2a,KAApB,EAA2B,CAA3B;EACAjC,MAAAA,IAAI,GAAGmB,IAAI,CAACI,SAAD,EAAY5lB,IAAZ,EAAkB0kB,gBAAlB,CAAX;;EACA,aAAOL,IAAI,CAACjS,CAAL,GAAS,CAAhB,EAAmB;EACjBwT,QAAAA,SAAS,CAAC,CAAD,CAAT,CAAalwB,IAAb,CAAkBkwB,SAAS,CAAC,CAAD,CAAT,CAAavB,IAAI,CAACtiB,CAAlB,CAAlB;EACA6jB,QAAAA,SAAS,CAAC,CAAD,CAAT,CAAaja,MAAb,CAAoB0Y,IAAI,CAACtiB,CAAzB,EAA4B,CAA5B;EACAsiB,QAAAA,IAAI,GAAGmB,IAAI,CAACI,SAAD,EAAY5lB,IAAZ,EAAkB0kB,gBAAlB,CAAX;EACD;;EACD,UAAIgC,KAAK,GAAG,IAAI3zB,KAAJ,CAAU6yB,SAAS,CAAC,CAAD,CAAT,CAAarzB,MAAvB,CAAZ;EACAg0B,MAAAA,CAAC,CAAC5yB,KAAF,GAAU,IAAIZ,KAAJ,CAAU6yB,SAAS,CAAC,CAAD,CAAT,CAAarzB,MAAvB,CAAV;;EACA,WAAK,IAAIkH,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGitB,KAAK,CAACn0B,MAA1B,EAAkCkH,CAAC,EAAnC,EAAuC;EACrCitB,QAAAA,KAAK,CAACjtB,CAAD,CAAL,GAAWuG,IAAI,CAACojB,IAAI,CAACiD,IAAD,CAAJ,CAAW1yB,KAAX,CAAiBiyB,SAAS,CAAC,CAAD,CAAT,CAAansB,CAAb,CAAjB,EAAkC9F,KAAnC,CAAf;EACA4yB,QAAAA,CAAC,CAAC5yB,KAAF,CAAQ8F,CAAR,IAAa2pB,IAAI,CAACiD,IAAD,CAAJ,CAAW1yB,KAAX,CAAiBiyB,SAAS,CAAC,CAAD,CAAT,CAAansB,CAAb,CAAjB,CAAb;EACA8sB,QAAAA,CAAC,CAACtD,QAAF,CAAWxpB,CAAX,IAAgB2pB,IAAI,CAACiD,IAAD,CAAJ,CAAW1yB,KAAX,CAAiBiyB,SAAS,CAAC,CAAD,CAAT,CAAansB,CAAb,CAAjB,CAAhB;EACD;;EACD,UAAIktB,KAAK,GAAG,IAAI5zB,KAAJ,CAAU6yB,SAAS,CAAC,CAAD,CAAT,CAAarzB,MAAvB,CAAZ;EACAi0B,MAAAA,EAAE,CAAC7yB,KAAH,GAAW,IAAIZ,KAAJ,CAAU6yB,SAAS,CAAC,CAAD,CAAT,CAAarzB,MAAvB,CAAX;;EACA,WAAK,IAAI2d,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGyW,KAAK,CAACp0B,MAA1B,EAAkC2d,CAAC,EAAnC,EAAuC;EACrCyW,QAAAA,KAAK,CAACzW,CAAD,CAAL,GAAWlQ,IAAI,CAACojB,IAAI,CAACiD,IAAD,CAAJ,CAAW1yB,KAAX,CAAiBiyB,SAAS,CAAC,CAAD,CAAT,CAAa1V,CAAb,CAAjB,EAAkCvc,KAAnC,CAAf;EACA6yB,QAAAA,EAAE,CAAC7yB,KAAH,CAASuc,CAAT,IAAckT,IAAI,CAACiD,IAAD,CAAJ,CAAW1yB,KAAX,CAAiBiyB,SAAS,CAAC,CAAD,CAAT,CAAa1V,CAAb,CAAjB,CAAd;EACAsW,QAAAA,EAAE,CAACvD,QAAH,CAAY/S,CAAZ,IAAiBkT,IAAI,CAACiD,IAAD,CAAJ,CAAW1yB,KAAX,CAAiBiyB,SAAS,CAAC,CAAD,CAAT,CAAa1V,CAAb,CAAjB,CAAjB;EACD;;EACDqW,MAAAA,CAAC,CAACrD,QAAF,GAAa8C,QAAQ,CAACO,CAAC,CAAC5yB,KAAH,EAAUqM,IAAV,EAAgB0kB,gBAAhB,CAArB;EACA8B,MAAAA,EAAE,CAACtD,QAAH,GAAc8C,QAAQ,CAACQ,EAAE,CAAC7yB,KAAJ,EAAWqM,IAAX,EAAiB0kB,gBAAjB,CAAtB;EACAtB,MAAAA,IAAI,CAAC1tB,IAAL,CAAU6wB,CAAV;EACAnD,MAAAA,IAAI,CAAC1tB,IAAL,CAAU8wB,EAAV;EACApD,MAAAA,IAAI,CAACiD,IAAD,CAAJ,CAAWpD,QAAX,GAAsB,CAACsD,CAAD,EAAIC,EAAJ,CAAtB;EACD;;EACDpD,IAAAA,IAAI,CAACzX,MAAL,CAAY0a,IAAZ,EAAkB,CAAlB;EACD;;EACD,SAAOH,IAAP;EACD;;EC1LD;EACA;;;;;;;ECFA,MAAM9L,gBAAc,GAAG;EACnBsK,EAAAA,gBAAgB,EAAElF;EADC,CAAvB;AAGA,EAAe,SAASoH,aAAT,CAAuBC,WAAvB,EAAoC5yB,MAApC,EAAsE;EAAA,MAA1BtB,OAA0B,uEAAhBynB,gBAAgB;EACjF,QAAMsK,gBAAgB,GAAG/xB,OAAO,CAAC+xB,gBAAR,IAA4BtK,gBAAc,CAACsK,gBAApE;EACA,QAAMoC,kBAAkB,GAAGn0B,OAAO,CAACm0B,kBAAR,IAA8B1M,gBAAc,CAAC0M,kBAAxE;EACA,MAAIC,WAAW,GAAG,CAAC,CAAnB;;EACA,MAAI,OAAOD,kBAAP,KAA8B,UAAlC,EAA8C;EAC1C;EACA,QAAIE,MAAM,GAAGrnB,MAAM,CAACoQ,SAApB;;EACA,SAAK,IAAIja,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG+wB,WAAW,CAACt0B,MAAhC,EAAwCuD,CAAC,EAAzC,EAA6C;EACzC,YAAMmxB,GAAG,GAAGH,kBAAkB,CAAC7yB,MAAD,EAAS4yB,WAAW,CAAC/wB,CAAD,CAApB,CAA9B;;EACA,UAAImxB,GAAG,GAAGD,MAAV,EAAkB;EACdA,QAAAA,MAAM,GAAGC,GAAT;EACAF,QAAAA,WAAW,GAAGjxB,CAAd;EACH;EACJ;EACJ,GAVD,MAWK,IAAI,OAAO4uB,gBAAP,KAA4B,UAAhC,EAA4C;EAC7C;EACA,QAAIwC,OAAO,GAAGvnB,MAAM,CAACwnB,SAArB;;EACA,SAAK,IAAI30B,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGq0B,WAAW,CAACt0B,MAAhC,EAAwCC,CAAC,EAAzC,EAA6C;EACzC,YAAM6xB,IAAI,GAAGK,gBAAgB,CAACzwB,MAAD,EAAS4yB,WAAW,CAACr0B,CAAD,CAApB,CAA7B;;EACA,UAAI6xB,IAAI,GAAG6C,OAAX,EAAoB;EAChBA,QAAAA,OAAO,GAAG7C,IAAV;EACA0C,QAAAA,WAAW,GAAGv0B,CAAd;EACH;EACJ;EACJ,GAVI,MAWA;EACD,UAAM,IAAIyP,KAAJ,CAAU,iDAAV,CAAN;EACH;;EACD,SAAO8kB,WAAP;EACH;;ECjCD;;;;;;;;AAOA,EAAO,SAASK,uBAAT,CAAiCpnB,IAAjC,EAAuCkjB,QAAvC,EAAiD;EACtD,MAAIxD,cAAc,GAAG,IAAI3sB,KAAJ,CAAUiN,IAAI,CAACzN,MAAf,CAArB;;EACA,OAAK,IAAIC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGwN,IAAI,CAACzN,MAAzB,EAAiC,EAAEC,CAAnC,EAAsC;EACpC,SAAK,IAAIsD,CAAC,GAAGtD,CAAb,EAAgBsD,CAAC,GAAGkK,IAAI,CAACzN,MAAzB,EAAiC,EAAEuD,CAAnC,EAAsC;EACpC,UAAI,CAAC4pB,cAAc,CAACltB,CAAD,CAAnB,EAAwB;EACtBktB,QAAAA,cAAc,CAACltB,CAAD,CAAd,GAAoB,IAAIO,KAAJ,CAAUiN,IAAI,CAACzN,MAAf,CAApB;EACD;;EACD,UAAI,CAACmtB,cAAc,CAAC5pB,CAAD,CAAnB,EAAwB;EACtB4pB,QAAAA,cAAc,CAAC5pB,CAAD,CAAd,GAAoB,IAAI/C,KAAJ,CAAUiN,IAAI,CAACzN,MAAf,CAApB;EACD;;EACD,YAAM8xB,IAAI,GAAGnB,QAAQ,CAACljB,IAAI,CAACxN,CAAD,CAAL,EAAUwN,IAAI,CAAClK,CAAD,CAAd,CAArB;EACA4pB,MAAAA,cAAc,CAACltB,CAAD,CAAd,CAAkBsD,CAAlB,IAAuBuuB,IAAvB;EACA3E,MAAAA,cAAc,CAAC5pB,CAAD,CAAd,CAAkBtD,CAAlB,IAAuB6xB,IAAvB;EACD;EACF;;EACD,SAAO3E,cAAP;EACD;EAED;;;;;;;;;;AASA,EAAO,SAAS2H,eAAT,CAAyBrnB,IAAzB,EAA+BsnB,OAA/B,EAAwCC,SAAxC,EAAmDrE,QAAnD,EAA6D;EAClE,OAAK,IAAI1wB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGwN,IAAI,CAACzN,MAAzB,EAAiCC,CAAC,EAAlC,EAAsC;EACpC+0B,IAAAA,SAAS,CAAC/0B,CAAD,CAAT,GAAeo0B,aAAa,CAACU,OAAD,EAAUtnB,IAAI,CAACxN,CAAD,CAAd,EAAmB;EAC7CkyB,MAAAA,gBAAgB,EAAExB;EAD2B,KAAnB,CAA5B;EAGD;;EACD,SAAOqE,SAAP;EACD;EAED;;;;;;;;;;AASA,EAAO,SAASC,aAAT,CAAuBC,WAAvB,EAAoCznB,IAApC,EAA0CunB,SAA1C,EAAqDG,CAArD,EAAwD;EAC7D,QAAMC,IAAI,GAAG3nB,IAAI,CAAC,CAAD,CAAJ,CAAQzN,MAArB,CAD6D;;EAI7D,MAAI+0B,OAAO,GAAG,IAAIv0B,KAAJ,CAAU20B,CAAV,CAAd;EACA,MAAIE,UAAU,GAAG,IAAI70B,KAAJ,CAAU20B,CAAV,CAAjB;;EACA,OAAK,IAAIl1B,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGk1B,CAApB,EAAuBl1B,CAAC,EAAxB,EAA4B;EAC1B80B,IAAAA,OAAO,CAAC90B,CAAD,CAAP,GAAa,IAAIO,KAAJ,CAAU40B,IAAV,CAAb;EACAC,IAAAA,UAAU,CAACp1B,CAAD,CAAV,GAAgB,CAAhB;;EACA,SAAK,IAAIsD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG6xB,IAApB,EAA0B7xB,CAAC,EAA3B,EAA+B;EAC7BwxB,MAAAA,OAAO,CAAC90B,CAAD,CAAP,CAAWsD,CAAX,IAAgB,CAAhB;EACD;EACF,GAZ4D;;;EAe7D,OAAK,IAAImK,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGD,IAAI,CAACzN,MAAzB,EAAiC0N,CAAC,EAAlC,EAAsC;EACpC2nB,IAAAA,UAAU,CAACL,SAAS,CAACtnB,CAAD,CAAV,CAAV;;EACA,SAAK,IAAI4nB,GAAG,GAAG,CAAf,EAAkBA,GAAG,GAAGF,IAAxB,EAA8BE,GAAG,EAAjC,EAAqC;EACnCP,MAAAA,OAAO,CAACC,SAAS,CAACtnB,CAAD,CAAV,CAAP,CAAsB4nB,GAAtB,KAA8B7nB,IAAI,CAACC,CAAD,CAAJ,CAAQ4nB,GAAR,CAA9B;EACD;EACF,GApB4D;;;EAuB7D,OAAK,IAAIC,EAAE,GAAG,CAAd,EAAiBA,EAAE,GAAGJ,CAAtB,EAAyBI,EAAE,EAA3B,EAA+B;EAC7B,SAAK,IAAI1V,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGuV,IAApB,EAA0BvV,CAAC,EAA3B,EAA+B;EAC7B,UAAIwV,UAAU,CAACE,EAAD,CAAd,EAAoB;EAClBR,QAAAA,OAAO,CAACQ,EAAD,CAAP,CAAY1V,CAAZ,KAAkBwV,UAAU,CAACE,EAAD,CAA5B;EACD,OAFD,MAEO;EACLR,QAAAA,OAAO,CAACQ,EAAD,CAAP,CAAY1V,CAAZ,IAAiBqV,WAAW,CAACK,EAAD,CAAX,CAAgB1V,CAAhB,CAAjB;EACD;EACF;EACF;;EACD,SAAOkV,OAAP;EACD;EAED;;;;;;;;;;AASA,EAAO,SAASS,YAAT,CAAsBT,OAAtB,EAA+BU,UAA/B,EAA2CtD,gBAA3C,EAA6DuD,SAA7D,EAAwE;EAC7E,OAAK,IAAIz1B,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG80B,OAAO,CAAC/0B,MAA5B,EAAoCC,CAAC,EAArC,EAAyC;EACvC,QAAIkyB,gBAAgB,CAAC4C,OAAO,CAAC90B,CAAD,CAAR,EAAaw1B,UAAU,CAACx1B,CAAD,CAAvB,CAAhB,GAA8Cy1B,SAAlD,EAA6D;EAC3D,aAAO,KAAP;EACD;EACF;;EACD,SAAO,IAAP;EACD;;ECzGD,MAAMC,IAAI,GAAG,CAAb;EACA,MAAMC,SAAS,GAAG,IAAI,QAAtB;EACA,MAAMC,GAAG,GAAG,EAAZ;EACA,MAAMC,GAAG,GAAG,EAAZ;EACA,MAAMC,GAAG,GAAG,EAAZ;;EACA,SAASC,eAAT,CAAyB1mB,CAAzB,EAA4BD,CAA5B,EAA+B;EAC3BC,EAAAA,CAAC,MAAM,CAAP;EACAD,EAAAA,CAAC,MAAM,CAAP;EACA,QAAM4mB,GAAG,GAAG3mB,CAAC,GAAG,MAAhB;EACA,QAAM4mB,GAAG,GAAG5mB,CAAC,GAAG2mB,GAAhB;EACA,SAAQ,CAAEC,GAAG,GAAG7mB,CAAP,KAAc,CAAf,IAAoB4mB,GAAG,GAAG5mB,CAA3B,KAAkC,CAAzC;EACH;;AACD,EAAe,MAAM8mB,KAAN,CAAY;EACvBtwB,EAAAA,WAAW,GAAoB;EAAA,QAAnBijB,IAAmB,uEAAZsN,IAAI,CAACC,GAAL,EAAY;EAC3B,SAAKC,KAAL,GAAa,IAAIC,WAAJ,CAAgB,CAAhB,CAAb;EACA,SAAKC,IAAL,CAAU1N,IAAV;EACA,SAAK5b,MAAL,GAAc,KAAKupB,QAAL,CAAcC,IAAd,CAAmB,IAAnB,CAAd;EACH;EACD;;;;;EAGAC,EAAAA,SAAS,GAAG;EACR,SAAKC,SAAL;EACA,WAAQ,KAAKN,KAAL,CAAW,CAAX,IAAgB,KAAKA,KAAL,CAAW,CAAX,CAAjB,KAAoC,CAA3C;EACH;EACD;;;;;EAGAG,EAAAA,QAAQ,GAAG;EACP,WAAO,CAAC,KAAKE,SAAL,OAAqB,CAAtB,IAA2Bf,SAAlC;EACH;;EACDY,EAAAA,IAAI,CAAC1N,IAAD,EAAO;EACP,QAAI,CAAC1b,MAAM,CAACC,SAAP,CAAiByb,IAAjB,CAAL,EAA6B;EACzB,YAAM,IAAI/oB,SAAJ,CAAc,yBAAd,CAAN;EACH;;EACD,SAAKu2B,KAAL,CAAW,CAAX,IAAgBxN,IAAhB;EACA,SAAKwN,KAAL,CAAW,CAAX,IAAgB,CAAhB;EACA,SAAKA,KAAL,CAAW,CAAX,IAAgB,CAAhB;EACA,SAAKA,KAAL,CAAW,CAAX,IAAgB,CAAhB;;EACA,SAAK,IAAIr2B,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG01B,IAApB,EAA0B11B,CAAC,EAA3B,EAA+B;EAC3B,WAAKq2B,KAAL,CAAWr2B,CAAC,GAAG,CAAf,KACKA,CAAC,GACE+1B,eAAe,CAAC,UAAD,EAAa,KAAKM,KAAL,CAAYr2B,CAAC,GAAG,CAAL,GAAU,CAArB,IAA4B,KAAKq2B,KAAL,CAAYr2B,CAAC,GAAG,CAAL,GAAU,CAArB,MAA4B,EAA7B,KAAqC,CAA7E,CADnB,KAEI,CAHR;EAIH;;EACD,SAAK42B,mBAAL;;EACA,SAAK,IAAI52B,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG01B,IAApB,EAA0B11B,CAAC,EAA3B,EAA+B;EAC3B,WAAK22B,SAAL;EACH;EACJ;;EACDC,EAAAA,mBAAmB,GAAG;EAClB,QAAI,KAAKP,KAAL,CAAW,CAAX,MAAkB,CAAlB,IACA,KAAKA,KAAL,CAAW,CAAX,MAAkB,CADlB,IAEA,KAAKA,KAAL,CAAW,CAAX,MAAkB,CAFlB,IAGA,KAAKA,KAAL,CAAW,CAAX,MAAkB,CAHtB,EAGyB;EACrB,WAAKA,KAAL,CAAW,CAAX,IAAgB,EAAhB,CADqB;;EAErB,WAAKA,KAAL,CAAW,CAAX,IAAgB,EAAhB,CAFqB;;EAGrB,WAAKA,KAAL,CAAW,CAAX,IAAgB,EAAhB,CAHqB;;EAIrB,WAAKA,KAAL,CAAW,CAAX,IAAgB,EAAhB,CAJqB;EAKxB;EACJ;;EACDM,EAAAA,SAAS,GAAG;EACR,QAAIjc,CAAC,GAAG,KAAK2b,KAAL,CAAW,CAAX,CAAR;EACA3b,IAAAA,CAAC,IAAIA,CAAC,IAAIkb,GAAV;EACAlb,IAAAA,CAAC,IAAIA,CAAC,KAAKmb,GAAX;EACAnb,IAAAA,CAAC,IAAI,KAAK2b,KAAL,CAAW,CAAX,KAAiBP,GAAtB;EACA,SAAKO,KAAL,CAAW,CAAX,IAAgB,KAAKA,KAAL,CAAW,CAAX,CAAhB;EACA,SAAKA,KAAL,CAAW,CAAX,IAAgB,KAAKA,KAAL,CAAW,CAAX,CAAhB;EACA,SAAKA,KAAL,CAAW,CAAX,IAAgB,KAAKA,KAAL,CAAW,CAAX,CAAhB;EACA,SAAKA,KAAL,CAAW,CAAX,IAAgB3b,CAAhB;EACH;;EA1DsB;;ECZ3B,MAAMmc,cAAc,GAAG,UAAvB;;EACA,SAASC,YAAT,CAAsBxM,MAAtB,EAAkE;EAAA,MAApCnqB,OAAoC,uEAA1B,EAA0B;EAAA,MAAtB8M,MAAsB,uEAAblI,IAAI,CAACkI,MAAQ;EAC9D,QAAM;EAAEzI,IAAAA,IAAI,GAAG,CAAT;EAAYirB,IAAAA,OAAO,GAAG,KAAtB;EAA6BxL,IAAAA;EAA7B,MAA+C9jB,OAArD;EACA,MAAI42B,SAAJ;EACA,MAAIC,MAAJ;;EACA,MAAI,OAAO1M,MAAP,KAAkB,QAAtB,EAAgC;EAC5ByM,IAAAA,SAAS,GAAGE,QAAQ,CAAC3M,MAAD,CAApB;EACH,GAFD,MAGK;EACDyM,IAAAA,SAAS,GAAGzM,MAAM,CAACY,KAAP,EAAZ;EACH;;EACD,MAAIjH,aAAJ,EAAmB;EACf,QAAI,CAACwL,OAAL,EAAc;EACV,YAAM,IAAIhgB,KAAJ,CAAU,iEAAV,CAAN;EACH,KAHc;;;EAKf,QAAIwU,aAAa,CAAClkB,MAAd,KAAyBg3B,SAAS,CAACh3B,MAAvC,EAA+C;EAC3C,YAAM,IAAI0P,KAAJ,CAAU,6EAAV,CAAN;EACH;;EACDunB,IAAAA,MAAM,GAAG,CAAC/S,aAAa,CAAC,CAAD,CAAd,CAAT;;EACA,SAAK,IAAIjkB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGikB,aAAa,CAAClkB,MAAlC,EAA0CC,CAAC,EAA3C,EAA+C;EAC3Cg3B,MAAAA,MAAM,CAACh3B,CAAD,CAAN,GAAYg3B,MAAM,CAACh3B,CAAC,GAAG,CAAL,CAAN,GAAgBikB,aAAa,CAACjkB,CAAD,CAAzC;EACH;;EACD,QAAI+E,IAAI,CAAC0F,GAAL,CAAS,IAAIusB,MAAM,CAACA,MAAM,CAACj3B,MAAP,GAAgB,CAAjB,CAAnB,IAA0C82B,cAA9C,EAA8D;EAC1D,YAAM,IAAIpnB,KAAJ,8DAAgEunB,MAAM,CAACA,MAAM,CAACj3B,MAAP,GAAgB,CAAjB,CAAtE,EAAN;EACH;EACJ;;EACD,MAAI0vB,OAAO,KAAK,KAAZ,IAAqBjrB,IAAI,GAAGuyB,SAAS,CAACh3B,MAA1C,EAAkD;EAC9C,UAAM,IAAI0P,KAAJ,CAAU,0BAAV,CAAN;EACH;;EACD,QAAMtJ,MAAM,GAAG,EAAf;;EACA,OAAK,IAAInG,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGwE,IAApB,EAA0BxE,CAAC,EAA3B,EAA+B;EAC3B,UAAMmB,KAAK,GAAG+1B,WAAW,CAACH,SAAS,CAACh3B,MAAX,EAAmBkN,MAAnB,EAA2B+pB,MAA3B,CAAzB;EACA7wB,IAAAA,MAAM,CAACjD,IAAP,CAAY6zB,SAAS,CAAC51B,KAAD,CAArB;;EACA,QAAI,CAACsuB,OAAL,EAAc;EACVsH,MAAAA,SAAS,CAAC5d,MAAV,CAAiBhY,KAAjB,EAAwB,CAAxB;EACH;EACJ;;EACD,SAAOgF,MAAP;EACH;;EACD,SAAS8wB,QAAT,CAAkB5nB,CAAlB,EAAqB;EACjB,QAAMgV,GAAG,GAAG,EAAZ;;EACA,OAAK,IAAIrkB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGqP,CAApB,EAAuBrP,CAAC,EAAxB,EAA4B;EACxBqkB,IAAAA,GAAG,CAACnhB,IAAJ,CAASlD,CAAT;EACH;;EACD,SAAOqkB,GAAP;EACH;;EACD,SAAS6S,WAAT,CAAqB7nB,CAArB,EAAwBpC,MAAxB,EAAgC+pB,MAAhC,EAAwC;EACpC,QAAMhqB,IAAI,GAAGC,MAAM,EAAnB;;EACA,MAAI,CAAC+pB,MAAL,EAAa;EACT,WAAOjyB,IAAI,CAACwG,KAAL,CAAWyB,IAAI,GAAGqC,CAAlB,CAAP;EACH,GAFD,MAGK;EACD,QAAI8B,GAAG,GAAG,CAAV;;EACA,WAAOnE,IAAI,GAAGgqB,MAAM,CAAC7lB,GAAD,CAApB,EAA2B;EACvBA,MAAAA,GAAG;EACN;;EACD,WAAOA,GAAP;EACH;EACJ;;EC3DD;AACA,EAEA;;;;AAGA,EAAe,MAAM4X,MAAN,CAAa;EACxB;;;EAGAnjB,EAAAA,WAAW,GAA6B;EAAA,QAA5BuxB,YAA4B,uEAAbpyB,IAAI,CAACkI,MAAQ;;EACpC,QAAI,OAAOkqB,YAAP,KAAwB,QAA5B,EAAsC;EAClC,YAAMC,KAAK,GAAG,IAAIC,KAAJ,CAAUF,YAAV,CAAd;EACA,WAAKG,eAAL,GAAuBF,KAAK,CAACnqB,MAA7B;EACH,KAHD,MAIK;EACD,WAAKqqB,eAAL,GAAuBH,YAAvB;EACH;EACJ;;EACDI,EAAAA,MAAM,CAACjN,MAAD,EAASnqB,OAAT,EAAkB;EACpB,QAAI,OAAOmqB,MAAP,KAAkB,QAAtB,EAAgC;EAC5B,aAAOiN,YAAM,CAACjN,MAAD,EAASnqB,OAAT,EAAkB,KAAKm3B,eAAvB,CAAb;EACH;;EACD,WAAOC,YAAM,CAACjN,MAAD,EAASnqB,OAAT,EAAkB,KAAKm3B,eAAvB,CAAb;EACH;EACD;;;;;;EAIArqB,EAAAA,MAAM,GAAG;EACL,WAAO,KAAKqqB,eAAL,EAAP;EACH;EACD;;;;;;;EAKApqB,EAAAA,OAAO,CAACqV,GAAD,EAAMC,IAAN,EAAY;EACf,QAAIA,IAAI,KAAKniB,SAAb,EAAwB;EACpBmiB,MAAAA,IAAI,GAAGD,GAAP;EACAA,MAAAA,GAAG,GAAG,CAAN;EACH;;EACD,WAAOA,GAAG,GAAGxd,IAAI,CAACwG,KAAL,CAAW,KAAK+rB,eAAL,MAA0B9U,IAAI,GAAGD,GAAjC,CAAX,CAAb;EACH;EACD;;;;;;;EAKAiV,EAAAA,YAAY,CAAChzB,IAAD,EAAO;EACf,UAAM2B,MAAM,GAAG,EAAf;;EACA,SAAK,IAAInG,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGwE,IAApB,EAA0BxE,CAAC,EAA3B,EAA+B;EAC3BmG,MAAAA,MAAM,CAACjD,IAAP,CAAY,KAAK+J,MAAL,EAAZ;EACH;;EACD,WAAO9G,MAAP;EACH;;EAjDuB;;ECF5B;;;;;;;;;AAQA,EAAO,SAAS8G,MAAT,CAAgBO,IAAhB,EAAsB0nB,CAAtB,EAAyBrM,IAAzB,EAA+B;EACpC,QAAM5b,MAAM,GAAG,IAAI8b,MAAJ,CAAWF,IAAX,CAAf;EACA,SAAO5b,MAAM,CAACsqB,MAAP,CAAc/pB,IAAd,EAAoB;EAAEhJ,IAAAA,IAAI,EAAE0wB;EAAR,GAApB,CAAP;EACD;EAED;;;;;;;;;;AASA,EAAO,SAASuC,WAAT,CAAqBjqB,IAArB,EAA2B0nB,CAA3B,EAA8BhI,cAA9B,EAA8CrE,IAA9C,EAAoD;EACzD,QAAM5b,MAAM,GAAG,IAAI8b,MAAJ,CAAWF,IAAX,CAAf;EACA,MAAIgI,GAAG,GAAG,IAAItwB,KAAJ,CAAU20B,CAAV,CAAV,CAFyD;;EAIzDrE,EAAAA,GAAG,CAAC,CAAD,CAAH,GAAS9rB,IAAI,CAACwG,KAAL,CAAW0B,MAAM,CAACA,MAAP,KAAkBO,IAAI,CAACzN,MAAlC,CAAT;;EAEA,MAAIm1B,CAAC,GAAG,CAAR,EAAW;EACT;EACA,QAAIwC,OAAO,GAAG;EAAE7F,MAAAA,IAAI,EAAE,CAAC,CAAT;EAAY1wB,MAAAA,KAAK,EAAE,CAAC;EAApB,KAAd;;EACA,SAAK,IAAIsM,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGD,IAAI,CAACzN,MAAzB,EAAiC,EAAE0N,CAAnC,EAAsC;EACpC,UAAIyf,cAAc,CAAC2D,GAAG,CAAC,CAAD,CAAJ,CAAd,CAAuBpjB,CAAvB,IAA4BiqB,OAAO,CAAC7F,IAAxC,EAA8C;EAC5C6F,QAAAA,OAAO,CAAC7F,IAAR,GAAe3E,cAAc,CAAC2D,GAAG,CAAC,CAAD,CAAJ,CAAd,CAAuBpjB,CAAvB,CAAf;EACAiqB,QAAAA,OAAO,CAACv2B,KAAR,GAAgBsM,CAAhB;EACD;EACF;;EACDojB,IAAAA,GAAG,CAAC,CAAD,CAAH,GAAS6G,OAAO,CAACv2B,KAAjB;;EAEA,QAAI+zB,CAAC,GAAG,CAAR,EAAW;EACT;EACA,WAAK,IAAItmB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGsmB,CAApB,EAAuB,EAAEtmB,CAAzB,EAA4B;EAC1B,YAAI2J,MAAM,GAAG;EAAEsZ,UAAAA,IAAI,EAAE,CAAC,CAAT;EAAY1wB,UAAAA,KAAK,EAAE,CAAC;EAApB,SAAb;;EACA,aAAK,IAAIiO,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG5B,IAAI,CAACzN,MAAzB,EAAiC,EAAEqP,CAAnC,EAAsC;EACpC;EACA,cAAIuoB,WAAW,GAAG;EAAE9F,YAAAA,IAAI,EAAE1kB,MAAM,CAACwnB,SAAf;EAA0BxzB,YAAAA,KAAK,EAAE,CAAC;EAAlC,WAAlB;;EACA,eAAK,IAAIkO,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGT,CAApB,EAAuB,EAAES,CAAzB,EAA4B;EAC1B,gBACE6d,cAAc,CAAC7d,CAAD,CAAd,CAAkBD,CAAlB,IAAuBuoB,WAAW,CAAC9F,IAAnC,IACAhB,GAAG,CAAC7pB,OAAJ,CAAYoI,CAAZ,MAAmB,CAAC,CAFtB,EAGE;EACAuoB,cAAAA,WAAW,GAAG;EACZ9F,gBAAAA,IAAI,EAAE3E,cAAc,CAAC7d,CAAD,CAAd,CAAkBD,CAAlB,CADM;EAEZjO,gBAAAA,KAAK,EAAEiO;EAFK,eAAd;EAID;EACF;;EAED,cACEuoB,WAAW,CAAC9F,IAAZ,KAAqB1kB,MAAM,CAACwnB,SAA5B,IACAgD,WAAW,CAAC9F,IAAZ,GAAmBtZ,MAAM,CAACsZ,IAF5B,EAGE;EACAtZ,YAAAA,MAAM,GAAGlZ,MAAM,CAAC4oB,MAAP,CAAc,EAAd,EAAkB0P,WAAlB,CAAT;EACD;EACF;;EAED9G,QAAAA,GAAG,CAACjiB,CAAD,CAAH,GAAS2J,MAAM,CAACpX,KAAhB;EACD;EACF;EACF;;EAED,SAAO0vB,GAAG,CAAC1G,GAAJ,CAAShpB,KAAD,IAAWqM,IAAI,CAACrM,KAAD,CAAvB,CAAP;EACD;;AAGD,EAAO,SAASy2B,QAAT,CAAkB1c,CAAlB,EAAqBga,CAArB,EAAsC;EAAA,MAAd/0B,OAAc,uEAAJ,EAAI;EAC3C+a,EAAAA,CAAC,GAAG,IAAI7T,MAAJ,CAAW6T,CAAX,CAAJ;EACA,QAAM2c,QAAQ,GAAG3c,CAAC,CAAC7Z,IAAnB;EACA,QAAM4L,MAAM,GAAG,IAAI8b,MAAJ,CAAW5oB,OAAO,CAAC0oB,IAAnB,CAAf,CAH2C;;EAK3C,QAAMiM,OAAO,GAAG,EAAhB;EACA,QAAMgD,WAAW,GAAG33B,OAAO,CAAC23B,WAAR,IAAuB,IAAI/yB,IAAI,CAACwG,KAAL,CAAWxG,IAAI,CAAC0G,GAAL,CAASypB,CAAT,CAAX,CAA/C,CAN2C;;EAS3C,QAAM6C,cAAc,GAAG9qB,MAAM,CAACC,OAAP,CAAe2qB,QAAf,CAAvB;EACA/C,EAAAA,OAAO,CAAC5xB,IAAR,CAAagY,CAAC,CAACtL,MAAF,CAASmoB,cAAT,CAAb,EAV2C;;EAa3C,MAAIC,kBAAkB,GAAG,IAAI3wB,MAAJ,CAAW,CAAX,EAAc6T,CAAC,CAAC7Z,IAAhB,CAAzB;;EACA,OAAK,IAAIrB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGkb,CAAC,CAAC7Z,IAAtB,EAA4BrB,CAAC,EAA7B,EAAiC;EAC/Bg4B,IAAAA,kBAAkB,CAACtzB,GAAnB,CAAuB,CAAvB,EAA0B1E,CAA1B,EAA6BgtB,gBAAgB,CAAC9R,CAAC,CAACtL,MAAF,CAAS5P,CAAT,CAAD,EAAc80B,OAAO,CAAC,CAAD,CAArB,CAA7C;EACD;;EACD,MAAImD,wBAAwB,GAAG,CAACjB,MAAM,CAACgB,kBAAkB,CAACpoB,MAAnB,CAA0B,CAA1B,CAAD,CAAP,CAA/B;EACA,QAAM5O,MAAM,GAAG,IAAIi3B,wBAAwB,CAAC,CAAD,CAAxB,CAA4BJ,QAAQ,GAAG,CAAvC,CAAnB;EACA,MAAI5T,aAAa,GAAG5c,MAAM,CAACY,GAAP,CAAW+vB,kBAAX,EAA+Bh3B,MAA/B,CAApB,CAnB2C;;EAsB3C,OAAK,IAAIhB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGk1B,CAApB,EAAuBl1B,CAAC,EAAxB,EAA4B;EAC1B,UAAMk4B,YAAY,GAAGjrB,MAAM,CAACsqB,MAAP,CAAcM,QAAd,EAAwB;EAC3CpI,MAAAA,OAAO,EAAE,IADkC;EAE3CjrB,MAAAA,IAAI,EAAEszB,WAFqC;EAG3C7T,MAAAA,aAAa,EAAEA,aAAa,CAAC,CAAD;EAHe,KAAxB,CAArB;EAMA,UAAMkU,UAAU,GAAGjd,CAAC,CAAClD,SAAF,CAAYkgB,YAAZ,EAA0BhY,KAAK,CAAChF,CAAC,CAAC3Z,OAAH,CAA/B,CAAnB;EACA,UAAM62B,oBAAoB,GAAGC,kBAAkB,CAACF,UAAD,EAAajd,CAAb,CAA/C;EAEA,QAAIod,aAAJ;EACA,QAAIC,OAAJ;EACA,QAAIC,eAAJ;;EAEA,SAAK,IAAIl1B,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGw0B,WAApB,EAAiCx0B,CAAC,EAAlC,EAAsC;EACpC,YAAMm1B,cAAc,GAAGpxB,MAAM,CAACpH,GAAP,CAAW+3B,kBAAX,EAA+B,CAACI,oBAAoB,CAACxoB,MAArB,CAA4BtM,CAA5B,CAAD,CAA/B,CAAvB;EACA,YAAMo1B,MAAM,GAAGD,cAAc,CAACp1B,GAAf,EAAf;;EACA,UAAIi1B,aAAa,KAAKj4B,SAAlB,IAA+Bq4B,MAAM,GAAGH,OAA5C,EAAqD;EACnDD,QAAAA,aAAa,GAAGJ,YAAY,CAAC50B,CAAD,CAA5B;EACAi1B,QAAAA,OAAO,GAAGG,MAAV;EACAF,QAAAA,eAAe,GAAGC,cAAlB;EACD;EACF;;EACD3D,IAAAA,OAAO,CAAC90B,CAAD,CAAP,GAAakb,CAAC,CAACtL,MAAF,CAAS0oB,aAAT,CAAb;EACAN,IAAAA,kBAAkB,GAAGQ,eAArB;EACAP,IAAAA,wBAAwB,GAAG,CAACjB,MAAM,CAACgB,kBAAkB,CAACpoB,MAAnB,CAA0B,CAA1B,CAAD,CAAP,CAA3B;EACAqU,IAAAA,aAAa,GAAG5c,MAAM,CAACY,GAAP,CACd+vB,kBADc,EAEd,IAAIC,wBAAwB,CAAC,CAAD,CAAxB,CAA4BJ,QAAQ,GAAG,CAAvC,CAFU,CAAhB;EAID;;EACD,SAAO/C,OAAP;EACD;;EAED,SAASuD,kBAAT,CAA4BM,CAA5B,EAA+B/U,CAA/B,EAAkC;EAChC,QAAMzd,MAAM,GAAG,IAAIkB,MAAJ,CAAWsxB,CAAC,CAACt3B,IAAb,EAAmBuiB,CAAC,CAACviB,IAArB,CAAf;;EACA,OAAK,IAAIrB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG24B,CAAC,CAACt3B,IAAtB,EAA4BrB,CAAC,EAA7B,EAAiC;EAC/B,SAAK,IAAIsD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGsgB,CAAC,CAACviB,IAAtB,EAA4BiC,CAAC,EAA7B,EAAiC;EAC/B6C,MAAAA,MAAM,CAACzB,GAAP,CAAW1E,CAAX,EAAcsD,CAAd,EAAiB0pB,gBAAgB,CAAC2L,CAAC,CAAC/oB,MAAF,CAAS5P,CAAT,CAAD,EAAc4jB,CAAC,CAAChU,MAAF,CAAStM,CAAT,CAAd,CAAjC;EACD;EACF;;EACD,SAAO6C,MAAP;EACD;;EAED,SAAS+Z,KAAT,CAAezS,CAAf,EAAkB;EAChB,MAAIpL,CAAC,GAAG,EAAR;;EACA,OAAK,IAAIrC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGyN,CAApB,EAAuBzN,CAAC,EAAxB,EAA4B;EAC1BqC,IAAAA,CAAC,CAACa,IAAF,CAAOlD,CAAP;EACD;;EACD,SAAOqC,CAAP;EACD;;EAED,SAAS20B,MAAT,CAAgB3S,GAAhB,EAAqB;EACnB,MAAI2S,MAAM,GAAG,CAAC3S,GAAG,CAAC,CAAD,CAAJ,CAAb;;EACA,OAAK,IAAIrkB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGqkB,GAAG,CAACtkB,MAAxB,EAAgCC,CAAC,EAAjC,EAAqC;EACnCg3B,IAAAA,MAAM,CAACh3B,CAAD,CAAN,GAAYg3B,MAAM,CAACh3B,CAAC,GAAG,CAAL,CAAN,GAAgBqkB,GAAG,CAACrkB,CAAD,CAA/B;EACD;;EACD,SAAOg3B,MAAP;EACD;;EC7JD,MAAM4B,cAAc,GAAGpgB,MAAM,CAAC,UAAD,CAA7B;AAEA,EAAe,MAAMqgB,YAAN,CAAmB;EAChC;;;;;;;;;EASAjzB,EAAAA,WAAW,CAACkzB,QAAD,EAAWC,SAAX,EAAsBC,SAAtB,EAAiCC,UAAjC,EAA6CvI,QAA7C,EAAuD;EAChE,SAAKoI,QAAL,GAAgBA,QAAhB;EACA,SAAKC,SAAL,GAAiBA,SAAjB;EACA,SAAKC,SAAL,GAAiBA,SAAjB;EACA,SAAKC,UAAL,GAAkBA,UAAlB;EACA,SAAKL,cAAL,IAAuBlI,QAAvB;EACD;EAED;;;;;;;EAKAwI,EAAAA,OAAO,CAAC1rB,IAAD,EAAO;EACZ,UAAMunB,SAAS,GAAG,IAAIx0B,KAAJ,CAAUiN,IAAI,CAACzN,MAAf,CAAlB;EACA,UAAMg5B,SAAS,GAAG,KAAKA,SAAL,CAAe5O,GAAf,CAAmB,UAAUgP,QAAV,EAAoB;EACvD,aAAOA,QAAQ,CAACA,QAAhB;EACD,KAFiB,CAAlB;EAGA,WAAOtE,eAAe,CAACrnB,IAAD,EAAOurB,SAAP,EAAkBhE,SAAlB,EAA6B,KAAK6D,cAAL,CAA7B,CAAtB;EACD;EAED;;;;;;;;EAMAQ,EAAAA,kBAAkB,CAAC5rB,IAAD,EAAO;EACvB,QAAI6rB,iBAAiB,GAAG,KAAKN,SAAL,CAAe5O,GAAf,CAAmB,UAAUgP,QAAV,EAAoB;EAC7D,aAAO;EACLA,QAAAA,QAAQ,EAAEA,QADL;EAEL/Y,QAAAA,KAAK,EAAE,CAFF;EAGL5b,QAAAA,IAAI,EAAE;EAHD,OAAP;EAKD,KANuB,CAAxB;;EAQA,SAAK,IAAIxE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGwN,IAAI,CAACzN,MAAzB,EAAiCC,CAAC,EAAlC,EAAsC;EACpCq5B,MAAAA,iBAAiB,CAAC,KAAKP,QAAL,CAAc94B,CAAd,CAAD,CAAjB,CAAoCogB,KAApC,IAA6C,KAAKwY,cAAL,EAC3CprB,IAAI,CAACxN,CAAD,CADuC,EAE3C,KAAK+4B,SAAL,CAAe,KAAKD,QAAL,CAAc94B,CAAd,CAAf,CAF2C,CAA7C;EAIAq5B,MAAAA,iBAAiB,CAAC,KAAKP,QAAL,CAAc94B,CAAd,CAAD,CAAjB,CAAoCwE,IAApC;EACD;;EAED,SAAK,IAAIlB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKy1B,SAAL,CAAeh5B,MAAnC,EAA2CuD,CAAC,EAA5C,EAAgD;EAC9C,UAAI+1B,iBAAiB,CAAC/1B,CAAD,CAAjB,CAAqBkB,IAAzB,EAA+B;EAC7B60B,QAAAA,iBAAiB,CAAC/1B,CAAD,CAAjB,CAAqB8c,KAArB,IAA8BiZ,iBAAiB,CAAC/1B,CAAD,CAAjB,CAAqBkB,IAAnD;EACD,OAFD,MAEO;EACL60B,QAAAA,iBAAiB,CAAC/1B,CAAD,CAAjB,CAAqB8c,KAArB,GAA6B,IAA7B;EACD;EACF;;EAED,WAAO,IAAIyY,YAAJ,CACL,KAAKC,QADA,EAELO,iBAFK,EAGL,KAAKL,SAHA,EAIL,KAAKC,UAJA,EAKL,KAAKL,cAAL,CALK,CAAP;EAOD;;EArE+B;;ECOlC,MAAMhR,gBAAc,GAAG;EACrB0R,EAAAA,aAAa,EAAE,GADM;EAErB7D,EAAAA,SAAS,EAAE,IAFU;EAGrB8D,EAAAA,cAAc,EAAE,KAHK;EAIrBC,EAAAA,cAAc,EAAE,UAJK;EAKrBtH,EAAAA,gBAAgB,EAAElF;EALG,CAAvB;EAQA;;;;;;;;;;;;EAWA,SAASyM,IAAT,CAAc3E,OAAd,EAAuBtnB,IAAvB,EAA6BunB,SAA7B,EAAwCG,CAAxC,EAA2C/0B,OAA3C,EAAoD84B,UAApD,EAAgE;EAC9DlE,EAAAA,SAAS,GAAGF,eAAe,CACzBrnB,IADyB,EAEzBsnB,OAFyB,EAGzBC,SAHyB,EAIzB50B,OAAO,CAAC+xB,gBAJiB,CAA3B;EAMA,MAAIwH,UAAU,GAAG1E,aAAa,CAACF,OAAD,EAAUtnB,IAAV,EAAgBunB,SAAhB,EAA2BG,CAA3B,CAA9B;EACA,MAAI8D,SAAS,GAAGzD,YAAY,CAC1BmE,UAD0B,EAE1B5E,OAF0B,EAG1B30B,OAAO,CAAC+xB,gBAHkB,EAI1B/xB,OAAO,CAACs1B,SAJkB,CAA5B;EAMA,SAAO,IAAIoD,YAAJ,CACL9D,SADK,EAEL2E,UAFK,EAGLV,SAHK,EAILC,UAJK,EAKL94B,OAAO,CAAC+xB,gBALH,CAAP;EAOD;EAED;;;;;;;;;;;EASA,UAAUyH,eAAV,CAA0B7E,OAA1B,EAAmCtnB,IAAnC,EAAyCunB,SAAzC,EAAoDG,CAApD,EAAuD/0B,OAAvD,EAAgE;EAC9D,MAAI64B,SAAS,GAAG,KAAhB;EACA,MAAIY,UAAU,GAAG,CAAjB;EACA,MAAIC,UAAJ;;EACA,SAAO,CAACb,SAAD,IAAcY,UAAU,GAAGz5B,OAAO,CAACm5B,aAA1C,EAAyD;EACvDO,IAAAA,UAAU,GAAGJ,IAAI,CAAC3E,OAAD,EAAUtnB,IAAV,EAAgBunB,SAAhB,EAA2BG,CAA3B,EAA8B/0B,OAA9B,EAAuC,EAAEy5B,UAAzC,CAAjB;EACA,UAAMC,UAAU,CAACT,kBAAX,CAA8B5rB,IAA9B,CAAN;EACAwrB,IAAAA,SAAS,GAAGa,UAAU,CAACb,SAAvB;EACAlE,IAAAA,OAAO,GAAG+E,UAAU,CAACd,SAArB;EACD;EACF;EAED;;;;;;;;;;;;;;;;;;;;;;AAoBA,EAAe,SAASe,MAAT,CAAgBtsB,IAAhB,EAAsB0nB,CAAtB,EAAyB/0B,OAAzB,EAAkC;EAC/CA,EAAAA,OAAO,GAAGd,MAAM,CAAC4oB,MAAP,CAAc,EAAd,EAAkBL,gBAAlB,EAAkCznB,OAAlC,CAAV;;EAEA,MAAI+0B,CAAC,IAAI,CAAL,IAAUA,CAAC,GAAG1nB,IAAI,CAACzN,MAAnB,IAA6B,CAACoN,MAAM,CAACC,SAAP,CAAiB8nB,CAAjB,CAAlC,EAAuD;EACrD,UAAM,IAAIzlB,KAAJ,CACJ,kEADI,CAAN;EAGD;;EAED,MAAIqlB,OAAJ;;EACA,MAAIv0B,KAAK,CAACV,OAAN,CAAcM,OAAO,CAACq5B,cAAtB,CAAJ,EAA2C;EACzC,QAAIr5B,OAAO,CAACq5B,cAAR,CAAuBz5B,MAAvB,KAAkCm1B,CAAtC,EAAyC;EACvC,YAAM,IAAIzlB,KAAJ,CAAU,sDAAV,CAAN;EACD,KAFD,MAEO;EACLqlB,MAAAA,OAAO,GAAG30B,OAAO,CAACq5B,cAAlB;EACD;EACF,GAND,MAMO;EACL,YAAQr5B,OAAO,CAACq5B,cAAhB;EACE,WAAK,UAAL;EACE1E,QAAAA,OAAO,GAAG8C,QAAQ,CAACpqB,IAAD,EAAO0nB,CAAP,EAAU/0B,OAAV,CAAlB;EACA;;EACF,WAAK,QAAL;EACE20B,QAAAA,OAAO,GAAG7nB,MAAM,CAACO,IAAD,EAAO0nB,CAAP,EAAU/0B,OAAO,CAAC0oB,IAAlB,CAAhB;EACA;;EACF,WAAK,aAAL;EACEiM,QAAAA,OAAO,GAAG2C,WAAW,CACnBjqB,IADmB,EAEnB0nB,CAFmB,EAGnBN,uBAAuB,CAACpnB,IAAD,EAAOrN,OAAO,CAAC+xB,gBAAf,CAHJ,EAInB/xB,OAAO,CAAC0oB,IAJW,CAArB;EAMA;;EACF;EACE,cAAM,IAAIpZ,KAAJ,4CAC+BtP,OAAO,CAACq5B,cADvC,QAAN;EAhBJ;EAoBD,GArC8C;;;EAwC/C,MAAIr5B,OAAO,CAACm5B,aAAR,KAA0B,CAA9B,EAAiC;EAC/Bn5B,IAAAA,OAAO,CAACm5B,aAAR,GAAwBnsB,MAAM,CAACwnB,SAA/B;EACD;;EAED,MAAII,SAAS,GAAG,IAAIx0B,KAAJ,CAAUiN,IAAI,CAACzN,MAAf,CAAhB;;EACA,MAAII,OAAO,CAACo5B,cAAZ,EAA4B;EAC1B,WAAOI,eAAe,CAAC7E,OAAD,EAAUtnB,IAAV,EAAgBunB,SAAhB,EAA2BG,CAA3B,EAA8B/0B,OAA9B,CAAtB;EACD,GAFD,MAEO;EACL,QAAI64B,SAAS,GAAG,KAAhB;EACA,QAAIY,UAAU,GAAG,CAAjB;EACA,QAAIC,UAAJ;;EACA,WAAO,CAACb,SAAD,IAAcY,UAAU,GAAGz5B,OAAO,CAACm5B,aAA1C,EAAyD;EACvDO,MAAAA,UAAU,GAAGJ,IAAI,CAAC3E,OAAD,EAAUtnB,IAAV,EAAgBunB,SAAhB,EAA2BG,CAA3B,EAA8B/0B,OAA9B,EAAuC,EAAEy5B,UAAzC,CAAjB;EACAZ,MAAAA,SAAS,GAAGa,UAAU,CAACb,SAAvB;EACAlE,MAAAA,OAAO,GAAG+E,UAAU,CAACd,SAArB;EACD;;EACD,WAAOc,UAAU,CAACT,kBAAX,CAA8B5rB,IAA9B,CAAP;EACD;EACF;;ECtJD;;;;;;;;AAOA,EAAO,SAASusB,eAAT,CAAyB7e,CAAzB,EAA4BtF,CAA5B,EAA+B;EACpC,MAAIokB,QAAQ,GAAG9e,CAAC,CAAC3Z,OAAjB;EAEA,MAAI04B,OAAO,GAAG,CAAd;EACA,MAAIC,eAAe,GAAG,IAAI35B,KAAJ,CAAU,KAAV,CAAtB,CAJoC;;EAKpC,OAAK,IAAIP,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG4V,CAAC,CAAC7V,MAAtB,EAA8BC,CAAC,EAA/B,EAAmC;EACjC,QAAIk6B,eAAe,CAACtkB,CAAC,CAAC5V,CAAD,CAAF,CAAf,KAA0BK,SAA9B,EAAyC;EACvC65B,MAAAA,eAAe,CAACtkB,CAAC,CAAC5V,CAAD,CAAF,CAAf,GAAwB,CAAxB;EACAi6B,MAAAA,OAAO;EACR;;EACDC,IAAAA,eAAe,CAACtkB,CAAC,CAAC5V,CAAD,CAAF,CAAf;EACD;;EACD,MAAIm6B,gBAAgB,GAAG,IAAI55B,KAAJ,CAAU05B,OAAV,CAAvB;EACA,MAAIG,YAAY,GAAG,IAAI75B,KAAJ,CAAU05B,OAAV,CAAnB;;EACA,OAAKj6B,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGi6B,OAAhB,EAAyB,EAAEj6B,CAA3B,EAA8B;EAC5Bm6B,IAAAA,gBAAgB,CAACn6B,CAAD,CAAhB,GAAsB,IAAIqH,MAAJ,CAAW6yB,eAAe,CAACl6B,CAAD,CAA1B,EAA+Bg6B,QAA/B,CAAtB;EACAI,IAAAA,YAAY,CAACp6B,CAAD,CAAZ,GAAkB,CAAlB;EACD;;EACD,OAAKA,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGkb,CAAC,CAAC7Z,IAAlB,EAAwB,EAAErB,CAA1B,EAA6B;EAC3Bm6B,IAAAA,gBAAgB,CAACvkB,CAAC,CAAC5V,CAAD,CAAF,CAAhB,CAAuB8P,MAAvB,CAA8BsqB,YAAY,CAACxkB,CAAC,CAAC5V,CAAD,CAAF,CAA1C,EAAkDkb,CAAC,CAACtL,MAAF,CAAS5P,CAAT,CAAlD;EACAo6B,IAAAA,YAAY,CAACxkB,CAAC,CAAC5V,CAAD,CAAF,CAAZ;EACD;;EACD,SAAOm6B,gBAAP;EACD;;EC5BM,MAAME,UAAN,CAAiB;EACtB;;;;;;EAMAz0B,EAAAA,WAAW,CAAC00B,MAAD,EAASxS,KAAT,EAAgB;EACzB,QAAIwS,MAAJ,EAAY;EACV,WAAK5O,KAAL,GAAa5D,KAAK,CAAC4D,KAAnB;EACA,WAAK6O,sBAAL,GAA8BzS,KAAK,CAACyS,sBAApC;EACD;EACF;EAED;;;;;;;;;;;;EAUArT,EAAAA,KAAK,CAACgB,WAAD,EAAcC,cAAd,EAA8B;EACjC,QAAIqS,EAAE,GAAGz1B,IAAI,CAACE,IAAL,CAAU,IAAIF,IAAI,CAAC01B,EAAnB,CAAT,CADiC;;EAEjCvS,IAAAA,WAAW,GAAG7gB,MAAM,CAACI,WAAP,CAAmBygB,WAAnB,CAAd;;EAEA,QAAIA,WAAW,CAAC7mB,IAAZ,KAAqB8mB,cAAc,CAACpoB,MAAxC,EAAgD;EAC9C,YAAM,IAAIW,UAAJ,CACJ,wEADI,CAAN;EAGD;;EAED,QAAIy5B,gBAAgB,GAAGJ,eAAe,CAAC7R,WAAD,EAAcC,cAAd,CAAtC;EACA,QAAIoS,sBAAsB,GAAG,IAAIh6B,KAAJ,CAAU45B,gBAAgB,CAACp6B,MAA3B,CAA7B;EACA,SAAK2rB,KAAL,GAAa,IAAInrB,KAAJ,CAAU45B,gBAAgB,CAACp6B,MAA3B,CAAb;;EACA,SAAK,IAAIC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGm6B,gBAAgB,CAACp6B,MAArC,EAA6C,EAAEC,CAA/C,EAAkD;EAChD,UAAI0rB,KAAK,GAAGyO,gBAAgB,CAACn6B,CAAD,CAAhB,CAAoBgE,IAApB,CAAyB,QAAzB,CAAZ;EACA,UAAI02B,GAAG,GAAGP,gBAAgB,CAACn6B,CAAD,CAAhB,CAAoBsY,iBAApB,CAAsC,QAAtC,EAAgD;EACxDtU,QAAAA,IAAI,EAAE0nB;EADkD,OAAhD,CAAV;EAIA,UAAIiP,mBAAmB,GAAG51B,IAAI,CAAC0G,GAAL,CACxB0uB,gBAAgB,CAACn6B,CAAD,CAAhB,CAAoBqB,IAApB,GAA2B6mB,WAAW,CAAC7mB,IADf,CAA1B;EAGAk5B,MAAAA,sBAAsB,CAACv6B,CAAD,CAAtB,GAA4B,IAAIO,KAAJ,CAAUmrB,KAAK,CAAC3rB,MAAN,GAAe,CAAzB,CAA5B;EAEAw6B,MAAAA,sBAAsB,CAACv6B,CAAD,CAAtB,CAA0B,CAA1B,IAA+B26B,mBAA/B;;EACA,WAAK,IAAIr3B,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGooB,KAAK,CAAC3rB,MAAN,GAAe,CAAnC,EAAsC,EAAEuD,CAAxC,EAA2C;EACzC,YAAIs3B,UAAU,GAAGF,GAAG,CAACp3B,CAAC,GAAG,CAAL,CAApB;EACAi3B,QAAAA,sBAAsB,CAACv6B,CAAD,CAAtB,CAA0BsD,CAA1B,IAA+B,CAC7B,KAAKk3B,EAAE,GAAGI,UAAV,CAD6B,EAE7B,CAAC,CAAD,GAAKA,UAAL,GAAkBA,UAFW,CAA/B;EAID;;EAED,WAAKlP,KAAL,CAAW1rB,CAAX,IAAgB0rB,KAAhB;EACD;;EAED,SAAK6O,sBAAL,GAA8BA,sBAA9B;EACD;EAED;;;;;;;;EAMAnS,EAAAA,OAAO,CAACqD,OAAD,EAAU;EACfA,IAAAA,OAAO,GAAGpkB,MAAM,CAACI,WAAP,CAAmBgkB,OAAnB,CAAV;;EACA,QAAIA,OAAO,CAACpqB,IAAR,KAAiB,KAAKk5B,sBAAL,CAA4B,CAA5B,EAA+Bx6B,MAApD,EAA4D;EAC1D,YAAM,IAAIW,UAAJ,CACJ,6DADI,CAAN;EAGD;;EAED,QAAI4nB,WAAW,GAAG,IAAI/nB,KAAJ,CAAUkrB,OAAO,CAACpqB,IAAlB,CAAlB;;EAEA,SAAK,IAAIrB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGsoB,WAAW,CAACvoB,MAAhC,EAAwC,EAAEC,CAA1C,EAA6C;EAC3CsoB,MAAAA,WAAW,CAACtoB,CAAD,CAAX,GAAiB66B,eAAe,CAC9BpP,OAAO,CAAC7b,MAAR,CAAe5P,CAAf,CAD8B,EAE9B,KAAK0rB,KAFyB,EAG9B,KAAK6O,sBAHyB,CAAhC;EAKD;;EAED,WAAOjS,WAAP;EACD;EAED;;;;;;EAIApa,EAAAA,MAAM,GAAG;EACP,WAAO;EACL4sB,MAAAA,SAAS,EAAE,YADN;EAELpP,MAAAA,KAAK,EAAE,KAAKA,KAFP;EAGL6O,MAAAA,sBAAsB,EAAE,KAAKA;EAHxB,KAAP;EAKD;EAED;;;;;;;EAKA,SAAOhS,IAAP,CAAYT,KAAZ,EAAmB;EACjB,QAAIA,KAAK,CAACgT,SAAN,KAAoB,YAAxB,EAAsC;EACpC,YAAM,IAAIp6B,UAAJ,CACJ,oEADI,EAEJonB,KAAK,CAAC3kB,IAFF,CAAN;EAID;;EAED,WAAO,IAAIk3B,UAAJ,CAAe,IAAf,EAAqBvS,KAArB,CAAP;EACD;;EApHqB;EAuHxB;;;;;;;;;;EASA,SAAS+S,eAAT,CAAyBE,WAAzB,EAAsC/2B,IAAtC,EAA4Ci2B,OAA5C,EAAqD;EACnD,MAAIe,cAAc,GAAG,CAArB;EACA,MAAIC,cAAc,GAAG,CAAC,CAAtB,CAFmD;;EAKnD,OAAK,IAAIj7B,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGi6B,OAAO,CAACl6B,MAA5B,EAAoC,EAAEC,CAAtC,EAAyC;EACvC,QAAIk7B,kBAAkB,GAAGjB,OAAO,CAACj6B,CAAD,CAAP,CAAW,CAAX,CAAzB,CADuC;;EAEvC,SAAK,IAAIsD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG22B,OAAO,CAAC,CAAD,CAAP,CAAW,CAAX,EAAcl6B,MAAd,GAAuB,CAA3C,EAA8C,EAAEuD,CAAhD,EAAmD;EACjD43B,MAAAA,kBAAkB,IAAIC,uBAAuB,CAC3CJ,WAAW,CAACz3B,CAAC,GAAG,CAAL,CADgC,EAE3CU,IAAI,CAAChE,CAAD,CAAJ,CAAQsD,CAAC,GAAG,CAAZ,CAF2C,EAG3C22B,OAAO,CAACj6B,CAAD,CAAP,CAAWsD,CAAX,EAAc,CAAd,CAH2C,EAI3C22B,OAAO,CAACj6B,CAAD,CAAP,CAAWsD,CAAX,EAAc,CAAd,CAJ2C,CAA7C;EAMD;;EAED43B,IAAAA,kBAAkB,GAAGn2B,IAAI,CAACsG,GAAL,CAAS6vB,kBAAT,CAArB;;EACA,QAAIA,kBAAkB,GAAGF,cAAzB,EAAyC;EACvCA,MAAAA,cAAc,GAAGE,kBAAjB;EACAD,MAAAA,cAAc,GAAGj7B,CAAjB;EACD;EACF;;EAED,SAAOi7B,cAAP;EACD;EAED;;;;;;;;;;;EASA,SAASE,uBAAT,CAAiCn4B,KAAjC,EAAwCgB,IAAxC,EAA8Cw2B,EAA9C,EAAkDY,EAAlD,EAAsD;EACpDp4B,EAAAA,KAAK,GAAGA,KAAK,GAAGgB,IAAhB;EACA,SAAOe,IAAI,CAAC0G,GAAL,CAAS+uB,EAAE,GAAGz1B,IAAI,CAACsG,GAAL,CAAUrI,KAAK,GAAGA,KAAT,GAAkBo4B,EAA3B,CAAd,CAAP;EACD;;ECtKM,MAAMC,aAAN,CAAoB;EACzB;;;;;EAKAz1B,EAAAA,WAAW,CAACkiB,KAAD,EAAQ;EACjB,QAAIA,KAAJ,EAAW;EACT,WAAKwT,sBAAL,GAA8Bj0B,MAAM,CAACI,WAAP,CAC5BqgB,KAAK,CAACwT,sBADsB,CAA9B;EAGA,WAAKC,gBAAL,GAAwBl0B,MAAM,CAACI,WAAP,CAAmBqgB,KAAK,CAACyT,gBAAzB,CAAxB;EACD;EACF;EAED;;;;;;;EAKArU,EAAAA,KAAK,CAACgB,WAAD,EAAcC,cAAd,EAA8B;EACjCD,IAAAA,WAAW,GAAG7gB,MAAM,CAACI,WAAP,CAAmBygB,WAAnB,CAAd;;EAEA,QAAIA,WAAW,CAAC7mB,IAAZ,KAAqB8mB,cAAc,CAACpoB,MAAxC,EAAgD;EAC9C,YAAM,IAAIW,UAAJ,CACJ,wEADI,CAAN;EAGD;;EAED,QAAI86B,aAAa,GAAGzB,eAAe,CAAC7R,WAAD,EAAcC,cAAd,CAAnC;EAEA,SAAKoT,gBAAL,GAAwB,IAAIl0B,MAAJ,CAAWm0B,aAAa,CAACz7B,MAAzB,EAAiC,CAAjC,CAAxB;;EAEA,SAAK,IAAIC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGw7B,aAAa,CAACz7B,MAAlC,EAA0C,EAAEC,CAA5C,EAA+C;EAC7C,WAAKu7B,gBAAL,CAAsB72B,GAAtB,CAA0B1E,CAA1B,EAA6B,CAA7B,EAAgC+E,IAAI,CAAC0G,GAAL,CAC9B+vB,aAAa,CAACx7B,CAAD,CAAb,CAAiBqB,IAAjB,GAAwB6mB,WAAW,CAAC7mB,IADN,CAAhC;EAGD;;EAED,QAAI24B,QAAQ,GAAG9R,WAAW,CAAC3mB,OAA3B;EACA,SAAK+5B,sBAAL,GAA8B,IAAIj0B,MAAJ,CAAWm0B,aAAa,CAACz7B,MAAzB,EAAiCi6B,QAAjC,CAA9B;;EACA,SAAKh6B,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGw7B,aAAa,CAACz7B,MAA9B,EAAsC,EAAEC,CAAxC,EAA2C;EACzC,UAAIy7B,WAAW,GAAGp0B,MAAM,CAACI,WAAP,CAAmB+zB,aAAa,CAACx7B,CAAD,CAAhC,CAAlB;EACA,UAAI07B,KAAK,GAAGD,WAAW,CAACp4B,GAAZ,EAAZ;EACA,UAAIs4B,OAAO,GAAGD,KAAK,GAAG1B,QAAtB;EACA,WAAKsB,sBAAL,CAA4BxrB,MAA5B,CACE9P,CADF,EAEEqH,MAAM,CAACsF,SAAP,CAAiB8uB,WAAW,CACzBp4B,GADc,CACV,QADU,CAAjB,EAEGiE,GAFH,CAEO,CAFP,EAGGiB,GAHH,CAGOozB,OAHP,EAIG7tB,KAJH,CAIS8tB,SAJT,CAFF;EAQD;EACF;EAED;;;;;;;EAKAxT,EAAAA,OAAO,CAACqD,OAAD,EAAU;EACfA,IAAAA,OAAO,GAAGpkB,MAAM,CAACI,WAAP,CAAmBgkB,OAAnB,CAAV;EACA,QAAInD,WAAW,GAAG,IAAI/nB,KAAJ,CAAUkrB,OAAO,CAACpqB,IAAlB,CAAlB;;EACA,SAAK,IAAIrB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGyrB,OAAO,CAACpqB,IAA5B,EAAkC,EAAErB,CAApC,EAAuC;EACrC,UAAI6kB,cAAc,GAAG4G,OAAO,CAAC5b,YAAR,CAAqB7P,CAArB,CAArB;EACA,YAAM0D,CAAC,GAAG2D,MAAM,CAACuF,YAAP,CAAoB,KAAK0uB,sBAAL,CAC3BxsB,KAD2B,GAE3B4B,YAF2B,CAEdmU,cAFc,EAG3BxhB,GAH2B,CAGvB,KAHuB,CAApB,CAAV;EAIAilB,MAAAA,WAAW,CAACtoB,CAAD,CAAX,GAAiB0D,CAAC,CACf4D,GADc,CACV,KAAKi0B,gBADK,EAEdrqB,QAFc,GAEH,CAFG,CAAjB;EAGD;;EAED,WAAOoX,WAAP;EACD;EAED;;;;;;EAIApa,EAAAA,MAAM,GAAG;EACP,WAAO;EACL/K,MAAAA,IAAI,EAAE,eADD;EAELo4B,MAAAA,gBAAgB,EAAE,KAAKA,gBAFlB;EAGLD,MAAAA,sBAAsB,EAAE,KAAKA;EAHxB,KAAP;EAKD;EAED;;;;;;;EAKA,SAAO/S,IAAP,CAAYT,KAAZ,EAAmB;EACjB,QAAIA,KAAK,CAAC3kB,IAAN,KAAe,eAAnB,EAAoC;EAClC,YAAM,IAAIzC,UAAJ,WAAkBonB,KAAK,CAAC3kB,IAAxB,uCAAN;EACD;;EAED,WAAO,IAAIk4B,aAAJ,CAAkBvT,KAAlB,CAAP;EACD;;EArGwB;;EAwG3B,SAAS8T,SAAT,CAAmB57B,CAAnB,EAAsBsD,CAAtB,EAAyB;EACvB,OAAKoB,GAAL,CAAS1E,CAAT,EAAYsD,CAAZ,EAAeyB,IAAI,CAAC0G,GAAL,CAAS,KAAKlI,GAAL,CAASvD,CAAT,EAAYsD,CAAZ,CAAT,CAAf;EACD;;;;;;;;;EC9GD;;;;;;;;;;;;EAaA,SAASu4B,IAAT,CAAc5I,GAAd,EAAmBxP,SAAnB,EAA8B2L,MAA9B,EAAsC;EACpC,OAAK6D,GAAL,GAAWA,GAAX;EACA,OAAK1L,IAAL,GAAY,IAAZ;EACA,OAAKC,KAAL,GAAa,IAAb;EACA,OAAK4H,MAAL,GAAcA,MAAd;EACA,OAAK3L,SAAL,GAAiBA,SAAjB;EACD;;AAED,EAAe,MAAMqY,MAAN,CAAa;EAC1Bl2B,EAAAA,WAAW,CAACm2B,MAAD,EAASC,MAAT,EAAiB;EAC1B;EACA,QAAI,CAACz7B,KAAK,CAACV,OAAN,CAAck8B,MAAd,CAAL,EAA4B;EAC1B,WAAKE,UAAL,GAAkBF,MAAM,CAACE,UAAzB;EACA,WAAKlU,IAAL,GAAYgU,MAAZ;EACAG,MAAAA,aAAa,CAAC,KAAKnU,IAAN,CAAb;EACD,KAJD,MAIO;EACL,WAAKkU,UAAL,GAAkB,IAAI17B,KAAJ,CAAUw7B,MAAM,CAAC,CAAD,CAAN,CAAUh8B,MAApB,CAAlB;;EACA,WAAK,IAAIC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKi8B,UAAL,CAAgBl8B,MAApC,EAA4CC,CAAC,EAA7C,EAAiD;EAC/C,aAAKi8B,UAAL,CAAgBj8B,CAAhB,IAAqBA,CAArB;EACD;;EACD,WAAK+nB,IAAL,GAAYoU,SAAS,CAACJ,MAAD,EAAS,CAAT,EAAY,IAAZ,EAAkB,KAAKE,UAAvB,CAArB;EACD;;EACD,SAAKD,MAAL,GAAcA,MAAd;EACD,GAfyB;EAkB1B;;;EACA9tB,EAAAA,MAAM,GAAG;EACP,UAAM/H,MAAM,GAAGi2B,UAAU,CAAC,KAAKrU,IAAN,AAAA,CAAzB;EACA5hB,IAAAA,MAAM,CAAC81B,UAAP,GAAoB,KAAKA,UAAzB;EACA,WAAO91B,MAAP;EACD;;EAED+yB,EAAAA,OAAO,CAACmD,KAAD,EAAQC,QAAR,EAAkBC,WAAlB,EAA+B;EACpC,UAAMP,MAAM,GAAG,KAAKA,MAApB;EACA,UAAMC,UAAU,GAAG,KAAKA,UAAxB;EACA,QAAIj8B,CAAJ;EAEA,UAAMw8B,SAAS,GAAG,IAAIC,UAAJ,CAAe,UAAUx1B,CAAV,EAAa;EAC5C,aAAO,CAACA,CAAC,CAAC,CAAD,CAAT;EACD,KAFiB,CAAlB;;EAIA,aAASy1B,aAAT,CAAuB/U,IAAvB,EAA6B;EAC3B,YAAMlE,SAAS,GAAGwY,UAAU,CAACtU,IAAI,CAAClE,SAAN,CAA5B;EACA,YAAMkZ,WAAW,GAAGX,MAAM,CAACK,KAAD,EAAQ1U,IAAI,CAACsL,GAAb,CAA1B;EACA,YAAM2J,WAAW,GAAG,EAApB;EACA,UAAIC,SAAJ,EAAeC,cAAf,EAA+BC,UAA/B,EAA2C/8B,CAA3C;;EAEA,eAASg9B,QAAT,CAAkBrV,IAAlB,EAAwB+I,QAAxB,EAAkC;EAChC8L,QAAAA,SAAS,CAACt5B,IAAV,CAAe,CAACykB,IAAD,EAAO+I,QAAP,CAAf;;EACA,YAAI8L,SAAS,CAACh4B,IAAV,KAAmB83B,QAAvB,EAAiC;EAC/BE,UAAAA,SAAS,CAAC7R,GAAV;EACD;EACF;;EAED,WAAK3qB,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGi8B,UAAU,CAACl8B,MAA3B,EAAmCC,CAAC,IAAI,CAAxC,EAA2C;EACzC,YAAIA,CAAC,KAAK2nB,IAAI,CAAClE,SAAf,EAA0B;EACxBmZ,UAAAA,WAAW,CAACX,UAAU,CAACj8B,CAAD,CAAX,CAAX,GAA6Bq8B,KAAK,CAACJ,UAAU,CAACj8B,CAAD,CAAX,CAAlC;EACD,SAFD,MAEO;EACL48B,UAAAA,WAAW,CAACX,UAAU,CAACj8B,CAAD,CAAX,CAAX,GAA6B2nB,IAAI,CAACsL,GAAL,CAASgJ,UAAU,CAACj8B,CAAD,CAAnB,CAA7B;EACD;EACF;;EAED88B,MAAAA,cAAc,GAAGd,MAAM,CAACY,WAAD,EAAcjV,IAAI,CAACsL,GAAnB,CAAvB;;EAEA,UAAItL,IAAI,CAACH,KAAL,KAAe,IAAf,IAAuBG,IAAI,CAACJ,IAAL,KAAc,IAAzC,EAA+C;EAC7C,YAAIiV,SAAS,CAACh4B,IAAV,KAAmB83B,QAAnB,IAA+BK,WAAW,GAAGH,SAAS,CAAC5M,IAAV,GAAiB,CAAjB,CAAjD,EAAsE;EACpEoN,UAAAA,QAAQ,CAACrV,IAAD,EAAOgV,WAAP,CAAR;EACD;;EACD;EACD;;EAED,UAAIhV,IAAI,CAACH,KAAL,KAAe,IAAnB,EAAyB;EACvBqV,QAAAA,SAAS,GAAGlV,IAAI,CAACJ,IAAjB;EACD,OAFD,MAEO,IAAII,IAAI,CAACJ,IAAL,KAAc,IAAlB,EAAwB;EAC7BsV,QAAAA,SAAS,GAAGlV,IAAI,CAACH,KAAjB;EACD,OAFM,MAEA;EACL,YAAI6U,KAAK,CAAC5Y,SAAD,CAAL,GAAmBkE,IAAI,CAACsL,GAAL,CAASxP,SAAT,CAAvB,EAA4C;EAC1CoZ,UAAAA,SAAS,GAAGlV,IAAI,CAACJ,IAAjB;EACD,SAFD,MAEO;EACLsV,UAAAA,SAAS,GAAGlV,IAAI,CAACH,KAAjB;EACD;EACF;;EAEDkV,MAAAA,aAAa,CAACG,SAAD,CAAb;;EAEA,UAAIL,SAAS,CAACh4B,IAAV,KAAmB83B,QAAnB,IAA+BK,WAAW,GAAGH,SAAS,CAAC5M,IAAV,GAAiB,CAAjB,CAAjD,EAAsE;EACpEoN,QAAAA,QAAQ,CAACrV,IAAD,EAAOgV,WAAP,CAAR;EACD;;EAED,UACEH,SAAS,CAACh4B,IAAV,KAAmB83B,QAAnB,IACAv3B,IAAI,CAAC0F,GAAL,CAASqyB,cAAT,IAA2BN,SAAS,CAAC5M,IAAV,GAAiB,CAAjB,CAF7B,EAGE;EACA,YAAIiN,SAAS,KAAKlV,IAAI,CAACJ,IAAvB,EAA6B;EAC3BwV,UAAAA,UAAU,GAAGpV,IAAI,CAACH,KAAlB;EACD,SAFD,MAEO;EACLuV,UAAAA,UAAU,GAAGpV,IAAI,CAACJ,IAAlB;EACD;;EACD,YAAIwV,UAAU,KAAK,IAAnB,EAAyB;EACvBL,UAAAA,aAAa,CAACK,UAAD,CAAb;EACD;EACF;EACF;;EAED,QAAIR,WAAJ,EAAiB;EACf,WAAKv8B,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGs8B,QAAhB,EAA0Bt8B,CAAC,IAAI,CAA/B,EAAkC;EAChCw8B,QAAAA,SAAS,CAACt5B,IAAV,CAAe,CAAC,IAAD,EAAOq5B,WAAP,CAAf;EACD;EACF;;EAED,QAAI,KAAKxU,IAAT,EAAe;EACb2U,MAAAA,aAAa,CAAC,KAAK3U,IAAN,CAAb;EACD;;EAED,UAAM5hB,MAAM,GAAG,EAAf;;EACA,SAAKnG,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAG+E,IAAI,CAAC9E,GAAL,CAASq8B,QAAT,EAAmBE,SAAS,CAACS,OAAV,CAAkBl9B,MAArC,CAAhB,EAA8DC,CAAC,IAAI,CAAnE,EAAsE;EACpE,UAAIw8B,SAAS,CAACS,OAAV,CAAkBj9B,CAAlB,EAAqB,CAArB,CAAJ,EAA6B;EAC3BmG,QAAAA,MAAM,CAACjD,IAAP,CAAY,CAACs5B,SAAS,CAACS,OAAV,CAAkBj9B,CAAlB,EAAqB,CAArB,EAAwBizB,GAAzB,EAA8BuJ,SAAS,CAACS,OAAV,CAAkBj9B,CAAlB,EAAqB,CAArB,CAA9B,CAAZ;EACD;EACF;;EACD,WAAOmG,MAAP;EACD;;EAlHyB;;EAqH5B,SAASi2B,UAAT,CAAoBc,GAApB,EAAyB;EACvB,QAAMC,IAAI,GAAG,IAAItB,IAAJ,CAASqB,GAAG,CAACjK,GAAb,EAAkBiK,GAAG,CAACzZ,SAAtB,EAAiC,IAAjC,CAAb;EACA,MAAIyZ,GAAG,CAAC3V,IAAR,EAAc4V,IAAI,CAAC5V,IAAL,GAAY6U,UAAU,CAACc,GAAG,CAAC3V,IAAL,CAAtB;EACd,MAAI2V,GAAG,CAAC1V,KAAR,EAAe2V,IAAI,CAAC3V,KAAL,GAAa4U,UAAU,CAACc,GAAG,CAAC1V,KAAL,CAAvB;EACf,SAAO2V,IAAP;EACD;;EAED,SAAShB,SAAT,CAAmBJ,MAAnB,EAA2BqB,KAA3B,EAAkChO,MAAlC,EAA0C6M,UAA1C,EAAsD;EACpD,QAAM5G,GAAG,GAAG+H,KAAK,GAAGnB,UAAU,CAACl8B,MAA/B;;EAEA,MAAIg8B,MAAM,CAACh8B,MAAP,KAAkB,CAAtB,EAAyB;EACvB,WAAO,IAAP;EACD;;EACD,MAAIg8B,MAAM,CAACh8B,MAAP,KAAkB,CAAtB,EAAyB;EACvB,WAAO,IAAI87B,IAAJ,CAASE,MAAM,CAAC,CAAD,CAAf,EAAoB1G,GAApB,EAAyBjG,MAAzB,CAAP;EACD;;EAED2M,EAAAA,MAAM,CAACpkB,IAAP,CAAY,CAACpB,CAAD,EAAIC,CAAJ,KAAUD,CAAC,CAAC0lB,UAAU,CAAC5G,GAAD,CAAX,CAAD,GAAqB7e,CAAC,CAACylB,UAAU,CAAC5G,GAAD,CAAX,CAA5C;EAEA,QAAMrK,MAAM,GAAGjmB,IAAI,CAACwG,KAAL,CAAWwwB,MAAM,CAACh8B,MAAP,GAAgB,CAA3B,CAAf;EACA,QAAM4nB,IAAI,GAAG,IAAIkU,IAAJ,CAASE,MAAM,CAAC/Q,MAAD,CAAf,EAAyBqK,GAAzB,EAA8BjG,MAA9B,CAAb;EACAzH,EAAAA,IAAI,CAACJ,IAAL,GAAY4U,SAAS,CAACJ,MAAM,CAAC7Q,KAAP,CAAa,CAAb,EAAgBF,MAAhB,CAAD,EAA0BoS,KAAK,GAAG,CAAlC,EAAqCzV,IAArC,EAA2CsU,UAA3C,CAArB;EACAtU,EAAAA,IAAI,CAACH,KAAL,GAAa2U,SAAS,CAACJ,MAAM,CAAC7Q,KAAP,CAAaF,MAAM,GAAG,CAAtB,CAAD,EAA2BoS,KAAK,GAAG,CAAnC,EAAsCzV,IAAtC,EAA4CsU,UAA5C,CAAtB;EAEA,SAAOtU,IAAP;EACD;;EAED,SAASuU,aAAT,CAAuBnU,IAAvB,EAA6B;EAC3B,MAAIA,IAAI,CAACR,IAAT,EAAe;EACbQ,IAAAA,IAAI,CAACR,IAAL,CAAU6H,MAAV,GAAmBrH,IAAnB;EACAmU,IAAAA,aAAa,CAACnU,IAAI,CAACR,IAAN,CAAb;EACD;;EAED,MAAIQ,IAAI,CAACP,KAAT,EAAgB;EACdO,IAAAA,IAAI,CAACP,KAAL,CAAW4H,MAAX,GAAoBrH,IAApB;EACAmU,IAAAA,aAAa,CAACnU,IAAI,CAACP,KAAN,CAAb;EACD;EACF;EAGD;;;EACA,MAAMiV,UAAN,CAAiB;EACf72B,EAAAA,WAAW,CAACy3B,aAAD,EAAgB;EACzB,SAAKJ,OAAL,GAAe,EAAf;EACA,SAAKI,aAAL,GAAqBA,aAArB;EACD;;EAEDn6B,EAAAA,IAAI,CAACo6B,OAAD,EAAU;EACZ;EACA,SAAKL,OAAL,CAAa/5B,IAAb,CAAkBo6B,OAAlB,EAFY;;EAIZ,SAAKC,QAAL,CAAc,KAAKN,OAAL,CAAal9B,MAAb,GAAsB,CAApC;EACD;;EAED4qB,EAAAA,GAAG,GAAG;EACJ;EACA,QAAIxkB,MAAM,GAAG,KAAK82B,OAAL,CAAa,CAAb,CAAb,CAFI;;EAIJ,QAAIO,GAAG,GAAG,KAAKP,OAAL,CAAatS,GAAb,EAAV,CAJI;EAMJ;;EACA,QAAI,KAAKsS,OAAL,CAAal9B,MAAb,GAAsB,CAA1B,EAA6B;EAC3B,WAAKk9B,OAAL,CAAa,CAAb,IAAkBO,GAAlB;EACA,WAAKC,QAAL,CAAc,CAAd;EACD;;EACD,WAAOt3B,MAAP;EACD;;EAEDypB,EAAAA,IAAI,GAAG;EACL,WAAO,KAAKqN,OAAL,CAAa,CAAb,CAAP;EACD;;EAEDz4B,EAAAA,IAAI,GAAG;EACL,WAAO,KAAKy4B,OAAL,CAAal9B,MAApB;EACD;;EAEDw9B,EAAAA,QAAQ,CAACluB,CAAD,EAAI;EACV;EACA,QAAIiuB,OAAO,GAAG,KAAKL,OAAL,CAAa5tB,CAAb,CAAd,CAFU;;EAIV,WAAOA,CAAC,GAAG,CAAX,EAAc;EACZ;EACA,YAAMquB,OAAO,GAAG34B,IAAI,CAACwG,KAAL,CAAW,CAAC8D,CAAC,GAAG,CAAL,IAAU,CAArB,IAA0B,CAA1C;EACA,YAAM+f,MAAM,GAAG,KAAK6N,OAAL,CAAaS,OAAb,CAAf,CAHY;;EAKZ,UAAI,KAAKL,aAAL,CAAmBC,OAAnB,IAA8B,KAAKD,aAAL,CAAmBjO,MAAnB,CAAlC,EAA8D;EAC5D,aAAK6N,OAAL,CAAaS,OAAb,IAAwBJ,OAAxB;EACA,aAAKL,OAAL,CAAa5tB,CAAb,IAAkB+f,MAAlB,CAF4D;;EAI5D/f,QAAAA,CAAC,GAAGquB,OAAJ;EACD,OALD,MAKO;EACL;EACA;EACD;EACF;EACF;;EAEDD,EAAAA,QAAQ,CAACpuB,CAAD,EAAI;EACV;EACA,QAAItP,MAAM,GAAG,KAAKk9B,OAAL,CAAal9B,MAA1B;EACA,QAAIu9B,OAAO,GAAG,KAAKL,OAAL,CAAa5tB,CAAb,CAAd;EACA,QAAIsuB,SAAS,GAAG,KAAKN,aAAL,CAAmBC,OAAnB,CAAhB;;EAEA,WAAO,IAAP,EAAa;EACX;EACA,UAAIM,OAAO,GAAG,CAACvuB,CAAC,GAAG,CAAL,IAAU,CAAxB;EACA,UAAIwuB,OAAO,GAAGD,OAAO,GAAG,CAAxB,CAHW;EAKX;;EACA,UAAIE,IAAI,GAAG,IAAX,CANW;;EAQX,UAAID,OAAO,GAAG99B,MAAd,EAAsB;EACpB;EACA,YAAIg+B,MAAM,GAAG,KAAKd,OAAL,CAAaY,OAAb,CAAb;EACA,YAAIG,WAAW,GAAG,KAAKX,aAAL,CAAmBU,MAAnB,CAAlB,CAHoB;;EAKpB,YAAIC,WAAW,GAAGL,SAAlB,EAA6B;EAC3BG,UAAAA,IAAI,GAAGD,OAAP;EACD;EACF,OAhBU;;;EAkBX,UAAID,OAAO,GAAG79B,MAAd,EAAsB;EACpB,YAAIk+B,MAAM,GAAG,KAAKhB,OAAL,CAAaW,OAAb,CAAb;EACA,YAAIM,WAAW,GAAG,KAAKb,aAAL,CAAmBY,MAAnB,CAAlB;;EACA,YAAIC,WAAW,IAAIJ,IAAI,KAAK,IAAT,GAAgBH,SAAhB,GAA4BK,WAAhC,CAAf,EAA6D;EAC3DF,UAAAA,IAAI,GAAGF,OAAP;EACD;EACF,OAxBU;;;EA2BX,UAAIE,IAAI,KAAK,IAAb,EAAmB;EACjB,aAAKb,OAAL,CAAa5tB,CAAb,IAAkB,KAAK4tB,OAAL,CAAaa,IAAb,CAAlB;EACA,aAAKb,OAAL,CAAaa,IAAb,IAAqBR,OAArB;EACAjuB,QAAAA,CAAC,GAAGyuB,IAAJ;EACD,OAJD,MAIO;EACL;EACA;EACD;EACF;EACF;;EAlGc;;EC/KF,MAAMK,GAAN,CAAU;EACvB;;;;;;;EAOAv4B,EAAAA,WAAW,CAAC6lB,OAAD,EAAU2S,MAAV,EAAgC;EAAA,QAAdj+B,OAAc,uEAAJ,EAAI;;EACzC,QAAIsrB,OAAO,KAAK,IAAhB,EAAsB;EACpB,YAAM3D,KAAK,GAAGsW,MAAd;EACA,WAAKC,MAAL,GAAc,IAAIvC,MAAJ,CAAWhU,KAAK,CAACuW,MAAjB,EAAyBl+B,OAAzB,CAAd;EACA,WAAKyO,CAAL,GAASkZ,KAAK,CAAClZ,CAAf;EACA,WAAKqrB,OAAL,GAAe,IAAI3Q,GAAJ,CAAQxB,KAAK,CAACmS,OAAd,CAAf;EACA,WAAKqE,WAAL,GAAmBxW,KAAK,CAACwW,WAAzB;EACA;EACD;;EAED,UAAMrE,OAAO,GAAG,IAAI3Q,GAAJ,CAAQ8U,MAAR,CAAhB;EAEA,UAAM;EAAE1N,MAAAA,QAAQ,GAAG6N,SAAb;EAAgC3vB,MAAAA,CAAC,GAAGqrB,OAAO,CAACz1B,IAAR,GAAe;EAAnD,QAAyDrE,OAA/D;EAEA,UAAM47B,MAAM,GAAG,IAAIx7B,KAAJ,CAAUkrB,OAAO,CAAC1rB,MAAlB,CAAf;;EACA,SAAK,IAAIC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG+7B,MAAM,CAACh8B,MAA3B,EAAmC,EAAEC,CAArC,EAAwC;EACtC+7B,MAAAA,MAAM,CAAC/7B,CAAD,CAAN,GAAYyrB,OAAO,CAACzrB,CAAD,CAAP,CAAWkrB,KAAX,EAAZ;EACD;;EAED,SAAKlrB,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGo+B,MAAM,CAACr+B,MAAvB,EAA+B,EAAEC,CAAjC,EAAoC;EAClC+7B,MAAAA,MAAM,CAAC/7B,CAAD,CAAN,CAAUkD,IAAV,CAAek7B,MAAM,CAACp+B,CAAD,CAArB;EACD;;EAED,SAAKq+B,MAAL,GAAc,IAAIvC,MAAJ,CAAWC,MAAX,EAAmBrL,QAAnB,CAAd;EACA,SAAK9hB,CAAL,GAASA,CAAT;EACA,SAAKqrB,OAAL,GAAeA,OAAf;EACA,SAAKqE,WAAL,GAAmB5N,QAAQ,KAAK6N,SAAhC;EACD;EAED;;;;;;;;EAMA,SAAOhW,IAAP,CAAYT,KAAZ,EAAiD;EAAA,QAA9B4I,QAA8B,uEAAnB6N,SAAmB;;EAC/C,QAAIzW,KAAK,CAAC3kB,IAAN,KAAe,KAAnB,EAA0B;EACxB,YAAM,IAAIsM,KAAJ,0BAA4BqY,KAAK,CAAC3kB,IAAlC,EAAN;EACD;;EACD,QAAI,CAAC2kB,KAAK,CAACwW,WAAP,IAAsB5N,QAAQ,KAAK6N,SAAvC,EAA0D;EACxD,YAAM,IAAI9uB,KAAJ,CACJ,kFADI,CAAN;EAGD;;EACD,QAAIqY,KAAK,CAACwW,WAAN,IAAqB5N,QAAQ,KAAK6N,SAAtC,EAAyD;EACvD,YAAM,IAAI9uB,KAAJ,CACJ,2FADI,CAAN;EAGD;;EACD,WAAO,IAAI0uB,GAAJ,CAAQ,IAAR,EAAcrW,KAAd,EAAqB4I,QAArB,CAAP;EACD;EAED;;;;;;EAIAxiB,EAAAA,MAAM,GAAG;EACP,WAAO;EACL/K,MAAAA,IAAI,EAAE,KADD;EAELk7B,MAAAA,MAAM,EAAE,KAAKA,MAFR;EAGLzvB,MAAAA,CAAC,EAAE,KAAKA,CAHH;EAILqrB,MAAAA,OAAO,EAAE15B,KAAK,CAAC+B,IAAN,CAAW,KAAK23B,OAAhB,CAJJ;EAKLqE,MAAAA,WAAW,EAAE,KAAKA;EALb,KAAP;EAOD;EAED;;;;;;;EAKAlW,EAAAA,OAAO,CAACqD,OAAD,EAAU;EACf,QAAIlrB,KAAK,CAACV,OAAN,CAAc4rB,OAAd,CAAJ,EAA4B;EAC1B,UAAI,OAAOA,OAAO,CAAC,CAAD,CAAd,KAAsB,QAA1B,EAAoC;EAClC,eAAO+S,mBAAmB,CAAC,IAAD,EAAO/S,OAAP,CAA1B;EACD,OAFD,MAEO,IACLlrB,KAAK,CAACV,OAAN,CAAc4rB,OAAO,CAAC,CAAD,CAArB,KACA,OAAOA,OAAO,CAAC,CAAD,CAAP,CAAW,CAAX,CAAP,KAAyB,QAFpB,EAGL;EACA,cAAMnD,WAAW,GAAG,IAAI/nB,KAAJ,CAAUkrB,OAAO,CAAC1rB,MAAlB,CAApB;;EACA,aAAK,IAAIC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGyrB,OAAO,CAAC1rB,MAA5B,EAAoCC,CAAC,EAArC,EAAyC;EACvCsoB,UAAAA,WAAW,CAACtoB,CAAD,CAAX,GAAiBw+B,mBAAmB,CAAC,IAAD,EAAO/S,OAAO,CAACzrB,CAAD,CAAd,CAApC;EACD;;EACD,eAAOsoB,WAAP;EACD;EACF;;EACD,UAAM,IAAIxoB,SAAJ,CAAc,iDAAd,CAAN;EACD;;EA/FsB;;EAkGzB,SAAS0+B,mBAAT,CAA6BC,GAA7B,EAAkC1D,WAAlC,EAA+C;EAC7C,MAAI2D,aAAa,GAAGD,GAAG,CAACJ,MAAJ,CAAWnF,OAAX,CAAmB6B,WAAnB,EAAgC0D,GAAG,CAAC7vB,CAApC,CAApB;EACA,MAAI+vB,cAAc,GAAG,EAArB;EACA,MAAI1D,cAAc,GAAG,CAAC,CAAtB;EACA,MAAI2D,SAAS,GAAG,CAAC,CAAjB;EACA,MAAIC,WAAW,GAAGH,aAAa,CAAC,CAAD,CAAb,CAAiB,CAAjB,EAAoB3+B,MAApB,GAA6B,CAA/C;;EAEA,OAAK,IAAIu9B,OAAT,IAAoBmB,GAAG,CAACxE,OAAxB,EAAiC;EAC/B0E,IAAAA,cAAc,CAACrB,OAAD,CAAd,GAA0B,CAA1B;EACD;;EAED,OAAK,IAAIt9B,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG0+B,aAAa,CAAC3+B,MAAlC,EAA0C,EAAEC,CAA5C,EAA+C;EAC7C,QAAI8+B,YAAY,GAAGJ,aAAa,CAAC1+B,CAAD,CAAb,CAAiB,CAAjB,EAAoB6+B,WAApB,CAAnB;EACA,QAAIE,aAAa,GAAG,EAAEJ,cAAc,CAACG,YAAD,CAApC;;EACA,QAAIC,aAAa,GAAGH,SAApB,EAA+B;EAC7B3D,MAAAA,cAAc,GAAG6D,YAAjB;EACAF,MAAAA,SAAS,GAAGG,aAAZ;EACD;EACF;;EAED,SAAO9D,cAAP;EACD;;ECzHD;;;;;;;AAMA,EAAO,SAASrpB,IAAT,CAAcsJ,CAAd,EAAiB;EACtB,SAAOnW,IAAI,CAACE,IAAL,CAAUiW,CAAC,CAACpM,KAAF,GAAUhB,KAAV,CAAgBkxB,SAAhB,EAA2B37B,GAA3B,EAAV,CAAP;EACD;EAED;;;;;;;;;AAQA,EAAO,SAAS27B,SAAT,CAAmBh/B,CAAnB,EAAsBsD,CAAtB,EAAyB;EAC9B,OAAKoB,GAAL,CAAS1E,CAAT,EAAYsD,CAAZ,EAAe,KAAKC,GAAL,CAASvD,CAAT,EAAYsD,CAAZ,KAAkB,CAAjC;EACD;AAED,EAcA;;;;;;;;AAOA,EAAO,SAAS27B,kBAAT,CAA4Bh8B,KAA5B,EAAmC2K,QAAnC,EAA6C;EAClD,MAAIA,QAAJ,EAAc;EACZ,SAAK,IAAI5N,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGiD,KAAK,CAAClD,MAA1B,EAAkC,EAAEC,CAApC,EAAuC;EACrC,WAAK,IAAIsD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGL,KAAK,CAACjD,CAAD,CAAL,CAASD,MAA7B,EAAqC,EAAEuD,CAAvC,EAA0C;EACxC,YAAI0rB,IAAI,GAAG/rB,KAAK,CAACjD,CAAD,CAAL,CAASsD,CAAT,CAAX;EACAL,QAAAA,KAAK,CAACjD,CAAD,CAAL,CAASsD,CAAT,IAAc0rB,IAAI,KAAK,IAAT,GAAgB,IAAI3nB,MAAJ,CAAWpE,KAAK,CAACjD,CAAD,CAAL,CAASsD,CAAT,CAAX,CAAhB,GAA0CjD,SAAxD;EACD;EACF;EACF,GAPD,MAOO;EACL,SAAKL,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGiD,KAAK,CAAClD,MAAtB,EAA8B,EAAEC,CAAhC,EAAmC;EACjCiD,MAAAA,KAAK,CAACjD,CAAD,CAAL,GAAW,IAAIqH,MAAJ,CAAWpE,KAAK,CAACjD,CAAD,CAAhB,CAAX;EACD;EACF;;EAED,SAAOiD,KAAP;EACD;;ECxDD;;;;AAGA,EAAO,MAAMi8B,GAAN,CAAU;EACf;;;;;;;;EAQAt5B,EAAAA,WAAW,CAACzF,OAAD,EAAU2nB,KAAV,EAAiB;EAC1B,QAAI3nB,OAAO,KAAK,IAAhB,EAAsB;EACpB,WAAKg/B,KAAL,GAAarX,KAAK,CAACqX,KAAnB;EACA,WAAKC,OAAL,GAAetX,KAAK,CAACsX,OAArB;EACA,WAAKC,KAAL,GAAavX,KAAK,CAACuX,KAAnB;EACA,WAAKC,OAAL,GAAexX,KAAK,CAACwX,OAArB;EACA,WAAKC,GAAL,GAAWl4B,MAAM,CAACI,WAAP,CAAmBqgB,KAAK,CAACyX,GAAzB,CAAX;EACA,WAAKC,GAAL,GAAW1X,KAAK,CAAC0X,GAAjB;EACA,WAAK16B,KAAL,GAAagjB,KAAK,CAAChjB,KAAnB;EACA,WAAK26B,WAAL,GAAmB3X,KAAK,CAAC2X,WAAzB;EACA,WAAKhK,SAAL,GAAiB3N,KAAK,CAAC2N,SAAvB;EACD,KAVD,MAUO;EACL,UAAI;EACFA,QAAAA,SAAS,GAAG,IADV;EAEF3wB,QAAAA,KAAK,GAAG;EAFN,UAGA3E,OAHJ;EAIA,WAAKs1B,SAAL,GAAiBA,SAAjB;EACA,WAAK3wB,KAAL,GAAaA,KAAb;EACA,WAAK46B,aAAL,GAAqBv/B,OAAO,CAACu/B,aAA7B;EACD;EACF;EAED;;;;;;;;;;;;;;;;EAcAxY,EAAAA,KAAK,CAACgB,WAAD,EAAcO,cAAd,EAA8B;EACjCP,IAAAA,WAAW,GAAG7gB,MAAM,CAACI,WAAP,CAAmBygB,WAAnB,CAAd;EACAO,IAAAA,cAAc,GAAGphB,MAAM,CAACI,WAAP,CAAmBghB,cAAnB,CAAjB;;EAEA,QAAIP,WAAW,CAACnoB,MAAZ,KAAuB0oB,cAAc,CAAC1oB,MAA1C,EAAkD;EAChD,YAAM,IAAIW,UAAJ,CAAe,4DAAf,CAAN;EACD;;EAED,SAAKy+B,KAAL,GAAajX,WAAW,CAAClkB,IAAZ,CAAiB,QAAjB,CAAb;EACA,SAAKo7B,OAAL,GAAelX,WAAW,CAAC5P,iBAAZ,CAA8B,QAA9B,EAAwC;EAAEtU,MAAAA,IAAI,EAAE,KAAKm7B,KAAb;EAAoBp7B,MAAAA,QAAQ,EAAE;EAA9B,KAAxC,CAAf;EACA,SAAKs7B,KAAL,GAAa5W,cAAc,CAACzkB,IAAf,CAAoB,QAApB,CAAb;EACA,SAAKs7B,OAAL,GAAe7W,cAAc,CAACnQ,iBAAf,CAAiC,QAAjC,EAA2C;EAAEtU,MAAAA,IAAI,EAAE,KAAKq7B,KAAb;EAAoBt7B,MAAAA,QAAQ,EAAE;EAA9B,KAA3C,CAAf;;EAEA,QAAI,KAAKe,KAAT,EAAgB;EACdojB,MAAAA,WAAW,GAAGA,WAAW,CAACpZ,KAAZ,GAAoB2B,YAApB,CAAiC,KAAK0uB,KAAtC,EAA6CxuB,YAA7C,CAA0D,KAAKyuB,OAA/D,CAAd;EACA3W,MAAAA,cAAc,GAAGA,cAAc,CAAC3Z,KAAf,GAAuB2B,YAAvB,CAAoC,KAAK4uB,KAAzC,EAAgD1uB,YAAhD,CAA6D,KAAK2uB,OAAlE,CAAjB;EACD;;EAED,QAAI,KAAKI,aAAL,KAAuBr/B,SAA3B,EAAsC;EACpC,WAAKq/B,aAAL,GAAqB36B,IAAI,CAAC9E,GAAL,CAASioB,WAAW,CAAC7mB,IAAZ,GAAmB,CAA5B,EAA+B6mB,WAAW,CAAC3mB,OAA3C,CAArB;EACD;;EAED,QAAIo+B,EAAE,GAAGzX,WAAW,CAAC7mB,IAArB;EACA,QAAIu+B,EAAE,GAAG1X,WAAW,CAAC3mB,OAArB;EACA,QAAIs+B,EAAE,GAAGpX,cAAc,CAACpnB,IAAxB;EACA,QAAIy+B,EAAE,GAAGrX,cAAc,CAAClnB,OAAxB;EAEA,QAAIw+B,OAAO,GAAG7X,WAAW,CAACpZ,KAAZ,GAAoB7G,GAApB,CAAwBigB,WAAxB,EAAqC7kB,GAArC,EAAd,CA3BiC;;EA4BjC,QAAI28B,aAAa,GAAGvX,cAAc,CAAC3Z,KAAf,GAAuB7G,GAAvB,CAA2BwgB,cAA3B,EAA2CplB,GAA3C,EAApB;EAEA,QAAIoyB,SAAS,GAAG,KAAKA,SAArB;EACA,QAAIpmB,CAAC,GAAG,KAAKqwB,aAAb;EACA,QAAIO,CAAC,GAAG54B,MAAM,CAACwF,KAAP,CAAa8yB,EAAb,EAAiBtwB,CAAjB,CAAR;EACA,QAAI6wB,CAAC,GAAG74B,MAAM,CAACwF,KAAP,CAAa+yB,EAAb,EAAiBvwB,CAAjB,CAAR;EACA,QAAIsN,CAAC,GAAGtV,MAAM,CAACwF,KAAP,CAAagzB,EAAb,EAAiBxwB,CAAjB,CAAR;EACA,QAAI8wB,CAAC,GAAG94B,MAAM,CAACwF,KAAP,CAAaizB,EAAb,EAAiBzwB,CAAjB,CAAR;EACA,QAAIuU,CAAC,GAAGvc,MAAM,CAACwF,KAAP,CAAawC,CAAb,EAAgBA,CAAhB,CAAR;EACA,QAAI+wB,CAAC,GAAGF,CAAC,CAACpxB,KAAF,EAAR;EACA,QAAIF,CAAC,GAAG,CAAR;;EAEA,WAAO4W,IAAA,CAAWiD,cAAX,IAA6BgN,SAA7B,IAA0C7mB,CAAC,GAAGS,CAArD,EAAwD;EACtD,UAAIgxB,UAAU,GAAGnY,WAAW,CAAC3Q,SAAZ,EAAjB;EACA,UAAI+oB,UAAU,GAAG7X,cAAc,CAAClR,SAAf,EAAjB;EAEA,UAAIgpB,MAAM,GAAGC,cAAc,CAACtY,WAAW,CAACpZ,KAAZ,GAAoB7G,GAApB,CAAwBigB,WAAxB,CAAD,CAA3B;EACA,UAAIuY,MAAM,GAAGD,cAAc,CAAC/X,cAAc,CAAC3Z,KAAf,GAAuB7G,GAAvB,CAA2BwgB,cAA3B,CAAD,CAA3B;EAEA,UAAIiY,EAAE,GAAGxY,WAAW,CAAC/X,eAAZ,CAA4BowB,MAA5B,CAAT;EACA,UAAII,CAAC,GAAGlY,cAAc,CAACtY,eAAf,CAA+BswB,MAA/B,CAAR;EACA,UAAI/lB,CAAC,GAAGrT,MAAM,CAACwF,KAAP,CAAa8yB,EAAb,EAAiB,CAAjB,CAAR;;EAEA,aAAOna,IAAA,CAAWkb,EAAE,CAAC5xB,KAAH,GAAWnH,GAAX,CAAe+S,CAAf,CAAX,IAAgC+a,SAAvC,EAAkD;EAChD,YAAI7S,CAAC,GAAGyd,UAAU,CAACnuB,IAAX,CAAgByuB,CAAhB,CAAR;EACA/d,QAAAA,CAAC,CAACra,GAAF,CAAMid,IAAA,CAAW5C,CAAX,CAAN;EACAlI,QAAAA,CAAC,GAAGgmB,EAAJ;EACAA,QAAAA,EAAE,GAAGxY,WAAW,CAAChW,IAAZ,CAAiB0Q,CAAjB,CAAL;EACA,YAAItL,CAAC,GAAGgpB,UAAU,CAACpuB,IAAX,CAAgBwuB,EAAhB,CAAR;EACAppB,QAAAA,CAAC,CAAC/O,GAAF,CAAMid,IAAA,CAAWlO,CAAX,CAAN;EACAqpB,QAAAA,CAAC,GAAGlY,cAAc,CAACvW,IAAf,CAAoBoF,CAApB,CAAJ;EACD;;EAEDoD,MAAAA,CAAC,GAAGgmB,EAAJ;EACA,UAAIn6B,GAAG,GAAG85B,UAAU,CAACnuB,IAAX,CAAgBwI,CAAhB,CAAV;EACA,UAAIkmB,GAAG,GAAGlmB,CAAC,CAACnD,SAAF,GAAcrF,IAAd,CAAmBwI,CAAnB,EAAsBnX,GAAtB,CAA0B,CAA1B,EAA6B,CAA7B,CAAV;EACA,UAAIgM,CAAC,GAAGhJ,GAAG,CAACgC,GAAJ,CAAQq4B,GAAR,CAAR;EACA,UAAIC,KAAK,GAAGrb,IAAA,CAAWjW,CAAX,CAAZ;EACAA,MAAAA,CAAC,CAAChH,GAAF,CAAMs4B,KAAN;EACAnmB,MAAAA,CAAC,CAACzS,GAAF,CAAM44B,KAAN;EACAje,MAAAA,CAAC,CAAC3a,GAAF,CAAM44B,KAAN;EAEAt6B,MAAAA,GAAG,GAAGo6B,CAAC,CAACppB,SAAF,GAAcrF,IAAd,CAAmBwI,CAAnB,CAAN;EACAkmB,MAAAA,GAAG,GAAGlmB,CAAC,CAACnD,SAAF,GAAcrF,IAAd,CAAmBwI,CAAnB,EAAsBnX,GAAtB,CAA0B,CAA1B,EAA6B,CAA7B,CAAN;EACA,UAAIiT,CAAC,GAAGjQ,GAAG,CAACgC,GAAJ,CAAQq4B,GAAR,EAAar9B,GAAb,CAAiB,CAAjB,EAAoB,CAApB,CAAR;EACA2kB,MAAAA,WAAW,CAACvgB,GAAZ,CAAgB+S,CAAC,CAACxI,IAAF,CAAO3C,CAAC,CAACgI,SAAF,EAAP,CAAhB;EACAkR,MAAAA,cAAc,CAAC9gB,GAAf,CAAmB+S,CAAC,CAAC5L,KAAF,GAAU7G,GAAV,CAAcuO,CAAd,EAAiBtE,IAAjB,CAAsBoF,CAAC,CAACC,SAAF,EAAtB,CAAnB;EAEA0oB,MAAAA,CAAC,CAAC7vB,SAAF,CAAYxB,CAAZ,EAAe8L,CAAf;EACAwlB,MAAAA,CAAC,CAAC9vB,SAAF,CAAYxB,CAAZ,EAAeW,CAAf;EACAoN,MAAAA,CAAC,CAACvM,SAAF,CAAYxB,CAAZ,EAAe+xB,CAAf;EACAR,MAAAA,CAAC,CAAC/vB,SAAF,CAAYxB,CAAZ,EAAe0I,CAAf;EACA8oB,MAAAA,CAAC,CAAChwB,SAAF,CAAYxB,CAAZ,EAAegU,CAAf;EAEAgB,MAAAA,CAAC,CAAClf,GAAF,CAAMkK,CAAN,EAASA,CAAT,EAAY4H,CAAZ;EACA5H,MAAAA,CAAC;EACF;;EAEDA,IAAAA,CAAC;EACDqxB,IAAAA,CAAC,GAAGA,CAAC,CAACrpB,SAAF,CAAY,CAAZ,EAAeqpB,CAAC,CAAC5+B,IAAF,GAAS,CAAxB,EAA2B,CAA3B,EAA8BuN,CAA9B,CAAJ;EACAsxB,IAAAA,CAAC,GAAGA,CAAC,CAACtpB,SAAF,CAAY,CAAZ,EAAespB,CAAC,CAAC7+B,IAAF,GAAS,CAAxB,EAA2B,CAA3B,EAA8BuN,CAA9B,CAAJ;EACA+N,IAAAA,CAAC,GAAGA,CAAC,CAAC/F,SAAF,CAAY,CAAZ,EAAe+F,CAAC,CAACtb,IAAF,GAAS,CAAxB,EAA2B,CAA3B,EAA8BuN,CAA9B,CAAJ;EACAuxB,IAAAA,CAAC,GAAGA,CAAC,CAACvpB,SAAF,CAAY,CAAZ,EAAeupB,CAAC,CAAC9+B,IAAF,GAAS,CAAxB,EAA2B,CAA3B,EAA8BuN,CAA9B,CAAJ;EACAwxB,IAAAA,CAAC,GAAGA,CAAC,CAACxpB,SAAF,CAAY,CAAZ,EAAewpB,CAAC,CAAC/+B,IAAF,GAAS,CAAxB,EAA2B,CAA3B,EAA8BuN,CAA9B,CAAJ;EACAgV,IAAAA,CAAC,GAAGA,CAAC,CAAChN,SAAF,CAAY,CAAZ,EAAehI,CAAf,EAAkB,CAAlB,EAAqBA,CAArB,CAAJ,CA5FiC;EA+FjC;EACA;;EACA,SAAKkyB,OAAL,GAAed,aAAf;EACA,SAAKe,CAAL,GAAS7Y,WAAT;EACA,SAAK8Y,CAAL,GAASvY,cAAT;EACA,SAAKwX,CAAL,GAASA,CAAT;EACA,SAAKC,CAAL,GAASA,CAAT;EACA,SAAKvjB,CAAL,GAASA,CAAT;EACA,SAAKwjB,CAAL,GAASA,CAAT;EACA,SAAKC,CAAL,GAASA,CAAT;EACA,SAAKxc,CAAL,GAASA,CAAT;EACA,SAAK2b,GAAL,GAAWW,CAAC,CAAChuB,IAAF,CAAO0R,CAAP,EAAU1R,IAAV,CAAeiuB,CAAC,CAAC5oB,SAAF,EAAf,CAAX;EACA,SAAKioB,GAAL,GAAW9kB,CAAC,CAACnD,SAAF,GAAcrF,IAAd,CAAmBwI,CAAnB,EAAsBxI,IAAtB,CAA2B3C,CAAC,CAACgI,SAAF,GAAcrF,IAAd,CAAmB3C,CAAnB,CAA3B,EAAkDhH,GAAlD,CAAsDw3B,OAAtD,EAA+Dx8B,GAA/D,CAAmE,CAAnE,EAAsE,CAAtE,CAAX;EACD;EAED;;;;;;;EAKA6kB,EAAAA,OAAO,CAACqD,OAAD,EAAU;EACf,QAAIvQ,CAAC,GAAG7T,MAAM,CAACI,WAAP,CAAmBgkB,OAAnB,CAAR;;EACA,QAAI,KAAK3mB,KAAT,EAAgB;EACdoW,MAAAA,CAAC,GAAGA,CAAC,CAACzK,YAAF,CAAe,KAAK0uB,KAApB,EAA2BxuB,YAA3B,CAAwC,KAAKyuB,OAA7C,CAAJ;EACD;;EACD,QAAI/gB,CAAC,GAAGnD,CAAC,CAAChJ,IAAF,CAAO,KAAKqtB,GAAZ,CAAR;EACAlhB,IAAAA,CAAC,GAAGA,CAAC,CAAC3N,YAAF,CAAe,KAAK4uB,OAApB,EAA6B9uB,YAA7B,CAA0C,KAAK6uB,KAA/C,CAAJ;EACA,WAAOhhB,CAAP;EACD;EAED;;;;;;EAIAiO,EAAAA,oBAAoB,GAAG;EACrB,WAAO,KAAKkT,GAAZ;EACD;EAED;;;;;;EAIAtxB,EAAAA,MAAM,GAAG;EACP,WAAO;EACL/K,MAAAA,IAAI,EAAE,KADD;EAELq8B,MAAAA,GAAG,EAAE,KAAKA,GAFL;EAGLL,MAAAA,KAAK,EAAE,KAAKA,KAHP;EAILC,MAAAA,OAAO,EAAE,KAAKA,OAJT;EAKLC,MAAAA,KAAK,EAAE,KAAKA,KALP;EAMLC,MAAAA,OAAO,EAAE,KAAKA,OANT;EAOLC,MAAAA,GAAG,EAAE,KAAKA,GAPL;EAQL9J,MAAAA,SAAS,EAAE,KAAKA,SARX;EASL3wB,MAAAA,KAAK,EAAE,KAAKA;EATP,KAAP;EAWD;EAED;;;;;;;EAKA,SAAOyjB,IAAP,CAAYT,KAAZ,EAAmB;EACjB,QAAIA,KAAK,CAAC3kB,IAAN,KAAe,KAAnB,EAA0B;EACxB,YAAM,IAAIzC,UAAJ,0BAAiConB,KAAK,CAAC3kB,IAAvC,EAAN;EACD;;EACD,WAAO,IAAI+7B,GAAJ,CAAQ,IAAR,EAAcpX,KAAd,CAAP;EACD;;EA9Mc;EAiNjB;;;;;;;;EAOA,SAAS0Y,cAAT,CAAwBhzB,IAAxB,EAA8B;EAC5B,SAAOnG,MAAM,CAACsF,SAAP,CAAiBa,IAAI,CAACnK,GAAL,CAAS,QAAT,CAAjB,EAAqC6N,QAArC,GAAgD,CAAhD,CAAP;EACD;;EC7ND;;;;AAGA,EAAO,MAAM+vB,KAAN,CAAY;EACjB;;;;;;;;EAQAr7B,EAAAA,WAAW,CAACzF,OAAD,EAAU2nB,KAAV,EAAiB;EAC1B,QAAI3nB,OAAO,KAAK,IAAhB,EAAsB;EACpB,WAAK+nB,WAAL,GAAmB,IAAI7gB,MAAJ,CAAWygB,KAAK,CAACI,WAAjB,CAAnB;EACA,WAAKgZ,WAAL,GAAmB,IAAI75B,MAAJ,CAAWygB,KAAK,CAACoZ,WAAjB,CAAnB;EACA,WAAKC,QAAL,GAAgB,IAAI95B,MAAJ,CAAWygB,KAAK,CAACqZ,QAAjB,CAAhB;EACA,WAAKC,SAAL,GAAiB,IAAI/5B,MAAJ,CAAWygB,KAAK,CAACsZ,SAAjB,CAAjB;EACA,WAAKC,YAAL,GAAoBpC,kBAAkB,CAACnX,KAAK,CAACuZ,YAAP,EAAqB,KAArB,CAAtC;EACA,WAAKC,eAAL,GAAuBrC,kBAAkB,CAACnX,KAAK,CAACwZ,eAAP,EAAwB,KAAxB,CAAzC;EACA,WAAKC,UAAL,GAAkBzZ,KAAK,CAACyZ,UAAxB;EACA,WAAKC,aAAL,GAAqBvC,kBAAkB,CAACnX,KAAK,CAAC0Z,aAAP,EAAsB,KAAtB,CAAvC;EACA,WAAKC,MAAL,GAAcxC,kBAAkB,CAACnX,KAAK,CAAC2Z,MAAP,EAAe,KAAf,CAAhC;EACA,WAAKC,iBAAL,GAAyBzC,kBAAkB,CAACnX,KAAK,CAAC4Z,iBAAP,EAA0B,KAA1B,CAA3C;EACA,WAAKC,OAAL,GAAe1C,kBAAkB,CAACnX,KAAK,CAAC6Z,OAAP,EAAgB,IAAhB,CAAjC;EACA,WAAKC,MAAL,GAAc9Z,KAAK,CAAC8Z,MAApB;EACA,WAAKC,cAAL,GAAsB/Z,KAAK,CAAC+Z,cAA5B;EACA,WAAKC,cAAL,GAAsBha,KAAK,CAACga,cAA5B;EACD,KAfD,MAeO;EACL,UAAI3hC,OAAO,CAAC4hC,oBAAR,KAAiC1hC,SAArC,EAAgD;EAC9C,cAAM,IAAIK,UAAJ,CAAe,iCAAf,CAAN;EACD;;EACD,UAAIP,OAAO,CAAC6hC,oBAAR,KAAiC3hC,SAArC,EAAgD;EAC9C,cAAM,IAAIK,UAAJ,CAAe,iCAAf,CAAN;EACD;;EACD,UAAIP,OAAO,CAACyhC,MAAR,KAAmBvhC,SAAvB,EAAkC;EAChC,cAAM,IAAIK,UAAJ,CAAe,kBAAf,CAAN;EACD;;EAED,WAAKmhC,cAAL,GAAsB1hC,OAAO,CAAC6hC,oBAA9B;EACA,WAAKF,cAAL,GAAsB3hC,OAAO,CAAC4hC,oBAA9B;EACA,WAAKH,MAAL,GAAczhC,OAAO,CAACyhC,MAAtB;EACD;EACF;EAED;;;;;;;EAKA1a,EAAAA,KAAK,CAACgB,WAAD,EAAcO,cAAd,EAA8B;EACjCP,IAAAA,WAAW,GAAG7gB,MAAM,CAACI,WAAP,CAAmBygB,WAAnB,CAAd;EACAO,IAAAA,cAAc,GAAGphB,MAAM,CAACI,WAAP,CAAmBghB,cAAnB,CAAjB,CAFiC;;EAKjC,SAAKP,WAAL,GAAmBA,WAAW,CAACpZ,KAAZ,EAAnB;EAEA,QAAI6yB,OAAO,GAAG,KAAKC,MAAL,CAAYK,OAAZ,CAAoB/Z,WAApB,CAAd;EAEA,QAAIga,QAAQ,GAAG76B,MAAM,CAACiG,GAAP,CAAWq0B,OAAO,CAACtgC,IAAnB,EAAyBsgC,OAAO,CAACtgC,IAAjC,EAAuC,CAAvC,CAAf;EACA,QAAI4O,IAAI,GAAG0xB,OAAX;EACAA,IAAAA,OAAO,GAAG,IAAIphC,KAAJ,CAAU,KAAKshC,cAAL,GAAsB,CAAhC,CAAV;;EACA,SAAK,IAAI7hC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK6hC,cAAL,GAAsB,CAA1C,EAA6C7hC,CAAC,EAA9C,EAAkD;EAChD2hC,MAAAA,OAAO,CAAC3hC,CAAD,CAAP,GAAa,IAAIO,KAAJ,CAAU,KAAKshC,cAAL,GAAsB,CAAhC,CAAb;EACD;;EACDF,IAAAA,OAAO,CAAC,CAAD,CAAP,CAAW,CAAX,IAAgB1xB,IAAhB;EAEA,QAAI9J,MAAM,GAAG,IAAI6V,0BAAJ,CAA+ByM,cAAc,CAAClR,SAAf,GAA2BrF,IAA3B,CAAgCyvB,OAAO,CAAC,CAAD,CAAP,CAAW,CAAX,CAAhC,EAA+CzvB,IAA/C,CAAoDuW,cAApD,CAA/B,EAAoG;EAC/GxM,MAAAA,0BAA0B,EAAE,IADmF;EAE/GC,MAAAA,2BAA2B,EAAE;EAFkF,KAApG,CAAb;EAIA,QAAIglB,WAAW,GAAG/6B,MAAM,CAACoZ,mBAAzB;EACA,QAAI4iB,KAAK,GAAGh8B,MAAM,CAACqZ,cAAnB;EAEA0hB,IAAAA,WAAW,GAAGA,WAAW,CAACtqB,SAAZ,CAAsB,CAAtB,EAAyBsqB,WAAW,CAAC7/B,IAAZ,GAAmB,CAA5C,EAA+C,CAA/C,EAAkD,KAAKygC,cAAL,GAAsB,CAAxE,CAAd;EACAK,IAAAA,KAAK,GAAGA,KAAK,CAACvrB,SAAN,CAAgB,CAAhB,EAAmB,KAAKkrB,cAAL,GAAsB,CAAzC,EAA4C,CAA5C,EAA+C,KAAKA,cAAL,GAAsB,CAArE,CAAR;EAEA,QAAIV,SAAS,GAAG3Y,cAAc,CAACvW,IAAf,CAAoBgvB,WAApB,CAAhB;EAEA,QAAIG,YAAY,GAAG,IAAI9gC,KAAJ,CAAU,KAAKshC,cAAL,GAAsB,CAAhC,CAAnB;EACA,QAAIH,iBAAiB,GAAG,IAAInhC,KAAJ,CAAU,KAAKshC,cAAL,GAAsB,CAAhC,CAAxB;EACA,QAAIL,aAAa,GAAG,IAAIjhC,KAAJ,CAAU,KAAKshC,cAAf,CAApB;EACA,QAAIP,eAAe,GAAG,IAAI/gC,KAAJ,CAAU,KAAKshC,cAAf,CAAtB;EACA,QAAIN,UAAU,GAAG,IAAIhhC,KAAJ,CAAU,KAAKshC,cAAf,CAAjB;EACA,QAAIO,cAAc,GAAG,IAAI7hC,KAAJ,CAAU,KAAKshC,cAAf,CAArB;EAEA,QAAIV,QAAQ,GAAG95B,MAAM,CAACrC,GAAP,CAAWm9B,KAAX,EAAkB,CAAC,GAAnB,CAAf,CApCiC;;EAsCjChB,IAAAA,QAAQ,CAACrzB,KAAT,CAAe,UAAU9N,CAAV,EAAasD,CAAb,EAAgB;EAC7B,UAAI,KAAKC,GAAL,CAASvD,CAAT,EAAYsD,CAAZ,MAAmB8iB,QAAvB,EAAiC;EAC/B,aAAK1hB,GAAL,CAAS1E,CAAT,EAAYsD,CAAZ,EAAe,CAAf;EACD;EACF,KAJD;;EAMA,SAAK,IAAItD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK6hC,cAAzB,EAAyC,EAAE7hC,CAA3C,EAA8C;EAC5CqhC,MAAAA,YAAY,CAACrhC,CAAD,CAAZ,GAAkB2hC,OAAO,CAAC,CAAD,CAAP,CAAW3hC,CAAX,EAAcuX,SAAd,GAA0BrF,IAA1B,CAA+BkvB,SAA/B,EAA0ClvB,IAA1C,CAA+CivB,QAA/C,CAAlB;EAEA,UAAIkB,QAAQ,GAAGhB,YAAY,CAACrhC,CAAD,CAAZ,CAAgBuX,SAAhB,EAAf;EACAmqB,MAAAA,iBAAiB,CAAC1hC,CAAD,CAAjB,GAAuB+e,OAAO,CAACsjB,QAAQ,CAACnwB,IAAT,CAAcmvB,YAAY,CAACrhC,CAAD,CAA1B,CAAD,CAAP,CAAwCkS,IAAxC,CAA6CmwB,QAA7C,EAAuDnwB,IAAvD,CAA4DkvB,SAA5D,CAAvB;EAEAj7B,MAAAA,MAAM,GAAG,IAAI6V,0BAAJ,CAA+BqmB,QAAQ,CAACnwB,IAAT,CAAc7K,MAAM,CAACM,GAAP,CAAWg6B,OAAO,CAAC3hC,CAAD,CAAP,CAAWA,CAAX,CAAX,EAA0BqhC,YAAY,CAACrhC,CAAD,CAAZ,CAAgBkS,IAAhB,CAAqBmwB,QAArB,CAA1B,CAAd,EAAyEnwB,IAAzE,CAA8EmvB,YAAY,CAACrhC,CAAD,CAA1F,CAA/B,EAA+H;EACtIic,QAAAA,0BAA0B,EAAE,IAD0G;EAEtIC,QAAAA,2BAA2B,EAAE;EAFyG,OAA/H,CAAT;EAIA,UAAIomB,MAAM,GAAGn8B,MAAM,CAACoZ,mBAApB;EACA,UAAIgjB,MAAM,GAAGp8B,MAAM,CAACqZ,cAApB;EAEA8hB,MAAAA,eAAe,CAACthC,CAAD,CAAf,GAAqBsiC,MAAM,CAAC1rB,SAAP,CAAiB,CAAjB,EAAoB0rB,MAAM,CAACjhC,IAAP,GAAc,CAAlC,EAAqC,CAArC,EAAwC,CAAxC,CAArB;EACAkgC,MAAAA,UAAU,CAACvhC,CAAD,CAAV,GAAgBuiC,MAAM,CAACh/B,GAAP,CAAW,CAAX,EAAc,CAAd,CAAhB;EAEAi+B,MAAAA,aAAa,CAACxhC,CAAD,CAAb,GAAmBqH,MAAM,CAACM,GAAP,CAAWg6B,OAAO,CAAC3hC,CAAD,CAAP,CAAWA,CAAX,CAAX,EAA0BqhC,YAAY,CAACrhC,CAAD,CAAZ,CAAgBkS,IAAhB,CAAqBmwB,QAArB,CAA1B,EAA0DnwB,IAA1D,CAA+DmvB,YAAY,CAACrhC,CAAD,CAA3E,EAAgFkS,IAAhF,CAAqFovB,eAAe,CAACthC,CAAD,CAApG,EAAyGiI,GAAzG,CAA6GlD,IAAI,CAACC,GAAL,CAASu8B,UAAU,CAACvhC,CAAD,CAAnB,EAAwB,CAAC,GAAzB,CAA7G,CAAnB;EAEA,UAAIwiC,QAAQ,GAAGhB,aAAa,CAACxhC,CAAD,CAAb,CAAiBuX,SAAjB,EAAf;EACA6qB,MAAAA,cAAc,CAACpiC,CAAD,CAAd,GAAoBqH,MAAM,CAACpC,IAAP,CAAYu9B,QAAQ,CAACtwB,IAAT,CAAcsvB,aAAa,CAACxhC,CAAD,CAA3B,CAAZ,CAApB;EAEAwhC,MAAAA,aAAa,CAACxhC,CAAD,CAAb,GAAmBwhC,aAAa,CAACxhC,CAAD,CAAb,CAAiB2Q,YAAjB,CAA8ByxB,cAAc,CAACpiC,CAAD,CAA5C,CAAnB;EAEA,UAAIyiC,GAAG,GAAGp7B,MAAM,CAACM,GAAP,CAAWu6B,QAAX,EAAqBV,aAAa,CAACxhC,CAAD,CAAb,CAAiBkS,IAAjB,CAAsBsvB,aAAa,CAACxhC,CAAD,CAAb,CAAiBuX,SAAjB,EAAtB,CAArB,CAAV;EAEAoqB,MAAAA,OAAO,CAAC,CAAD,CAAP,CAAW3hC,CAAC,GAAG,CAAf,IAAoB2hC,OAAO,CAAC,CAAD,CAAP,CAAW3hC,CAAX,EAAckS,IAAd,CAAmBuwB,GAAnB,CAApB;EACAd,MAAAA,OAAO,CAAC3hC,CAAC,GAAG,CAAL,CAAP,CAAeA,CAAC,GAAG,CAAnB,IAAwByiC,GAAG,CAACvwB,IAAJ,CAASyvB,OAAO,CAAC3hC,CAAD,CAAP,CAAWA,CAAX,CAAT,EAAwBkS,IAAxB,CAA6BuwB,GAA7B,CAAxB;EACD;;EAED,QAAIC,YAAY,GAAGrB,YAAY,CAAC,KAAKQ,cAAN,CAAZ,GAAoCF,OAAO,CAAC,CAAD,CAAP,CAAW,KAAKE,cAAhB,EAAgCtqB,SAAhC,GAA4CrF,IAA5C,CAAiDkvB,SAAjD,EAA4DlvB,IAA5D,CAAiEivB,QAAjE,CAAvD;EAEA,QAAIwB,WAAW,GAAGD,YAAY,CAACnrB,SAAb,EAAlB;EACAmqB,IAAAA,iBAAiB,CAAC,KAAKG,cAAN,CAAjB,GAAyC9iB,OAAO,CAAC4jB,WAAW,CAACzwB,IAAZ,CAAiBwwB,YAAjB,CAAD,CAAP,CAAwCxwB,IAAxC,CAA6CywB,WAA7C,EAA0DzwB,IAA1D,CAA+DkvB,SAA/D,CAAzC;EAEA,SAAKF,WAAL,GAAmBA,WAAnB;EACA,SAAKC,QAAL,GAAgBA,QAAhB;EACA,SAAKC,SAAL,GAAiBA,SAAjB;EACA,SAAKC,YAAL,GAAoBA,YAApB;EACA,SAAKC,eAAL,GAAuBA,eAAvB;EACA,SAAKC,UAAL,GAAkBA,UAAlB;EACA,SAAKC,aAAL,GAAqBA,aAArB;EACA,SAAKC,MAAL,GAAcW,cAAd;EACA,SAAKV,iBAAL,GAAyBA,iBAAzB;EACA,SAAKC,OAAL,GAAeA,OAAf;EACD;EAED;;;;;;;EAKAvZ,EAAAA,OAAO,CAACC,SAAD,EAAY;EACjB,QAAIua,UAAU,GAAG,KAAKhB,MAAL,CAAYK,OAAZ,CAAoB5Z,SAApB,EAA+B,KAAKH,WAApC,CAAjB;EAEA,QAAIjY,IAAI,GAAG2yB,UAAX;EACAA,IAAAA,UAAU,GAAG,IAAIriC,KAAJ,CAAU,KAAKshC,cAAL,GAAsB,CAAhC,CAAb;;EACA,SAAK,IAAI7hC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK6hC,cAAL,GAAsB,CAA1C,EAA6C7hC,CAAC,EAA9C,EAAkD;EAChD4iC,MAAAA,UAAU,CAAC5iC,CAAD,CAAV,GAAgB,IAAIO,KAAJ,CAAU,KAAKshC,cAAL,GAAsB,CAAhC,CAAhB;EACD;;EACDe,IAAAA,UAAU,CAAC,CAAD,CAAV,CAAc,CAAd,IAAmB3yB,IAAnB;EAEA,QAAI4yB,gBAAgB,GAAG,IAAItiC,KAAJ,CAAU,KAAKshC,cAAf,CAAvB;EACA,QAAIR,YAAY,GAAG,IAAI9gC,KAAJ,CAAU,KAAKshC,cAAf,CAAnB;EAEA,QAAI7hC,CAAJ;;EACA,SAAKA,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAG,KAAK6hC,cAArB,EAAqC,EAAE7hC,CAAvC,EAA0C;EACxCqhC,MAAAA,YAAY,CAACrhC,CAAD,CAAZ,GAAkB4iC,UAAU,CAAC5iC,CAAD,CAAV,CAAc,CAAd,EAAiBkS,IAAjB,CAAsB,KAAKkvB,SAA3B,EAAsClvB,IAAtC,CAA2C,KAAKivB,QAAhD,CAAlB;EAEA0B,MAAAA,gBAAgB,CAAC7iC,CAAD,CAAhB,GAAsBqH,MAAM,CAACM,GAAP,CAAWi7B,UAAU,CAAC5iC,CAAD,CAAV,CAAcA,CAAd,CAAX,EAA6BqhC,YAAY,CAACrhC,CAAD,CAAZ,CAAgBkS,IAAhB,CAAqB,KAAKmvB,YAAL,CAAkBrhC,CAAlB,EAAqBuX,SAArB,EAArB,CAA7B,EAAqFrF,IAArF,CAA0F,KAAKmvB,YAAL,CAAkBrhC,CAAlB,CAA1F,EAAgHkS,IAAhH,CAAqH,KAAKovB,eAAL,CAAqBthC,CAArB,CAArH,EAA8IiI,GAA9I,CAAkJlD,IAAI,CAACC,GAAL,CAAS,KAAKu8B,UAAL,CAAgBvhC,CAAhB,CAAT,EAA6B,CAAC,GAA9B,CAAlJ,CAAtB;EAEA6iC,MAAAA,gBAAgB,CAAC7iC,CAAD,CAAhB,GAAsB6iC,gBAAgB,CAAC7iC,CAAD,CAAhB,CAAoB2Q,YAApB,CAAiC,KAAK8wB,MAAL,CAAYzhC,CAAZ,CAAjC,CAAtB;EAEA,UAAI8iC,aAAa,GAAG,KAAKtB,aAAL,CAAmBxhC,CAAnB,EAAsBuX,SAAtB,EAApB;EACAqrB,MAAAA,UAAU,CAAC5iC,CAAC,GAAG,CAAL,CAAV,CAAkB,CAAlB,IAAuBqH,MAAM,CAACM,GAAP,CAAWi7B,UAAU,CAAC5iC,CAAD,CAAV,CAAc,CAAd,CAAX,EAA6B6iC,gBAAgB,CAAC7iC,CAAD,CAAhB,CAAoBkS,IAApB,CAAyB4wB,aAAzB,EAAwC5wB,IAAxC,CAA6C,KAAKyvB,OAAL,CAAa,CAAb,EAAgB3hC,CAAhB,EAAmBuX,SAAnB,EAA7C,CAA7B,CAAvB;EAEA,UAAIwrB,EAAE,GAAG17B,MAAM,CAACM,GAAP,CAAWi7B,UAAU,CAAC5iC,CAAD,CAAV,CAAc,CAAd,CAAX,EAA6B4iC,UAAU,CAAC5iC,CAAD,CAAV,CAAcA,CAAd,EAAiBkS,IAAjB,CAAsB,KAAKsvB,aAAL,CAAmBxhC,CAAnB,CAAtB,EAA6CkS,IAA7C,CAAkD4wB,aAAlD,CAA7B,CAAT;EACA,UAAIE,EAAE,GAAGH,gBAAgB,CAAC7iC,CAAD,CAAhB,CAAoBkS,IAApB,CAAyB4wB,aAAzB,EAAwC5wB,IAAxC,CAA6C,KAAKyvB,OAAL,CAAa3hC,CAAb,EAAgBA,CAAhB,CAA7C,CAAT;EACA,UAAIijC,EAAE,GAAGD,EAAE,CAAC9wB,IAAH,CAAQ,KAAKsvB,aAAL,CAAmBxhC,CAAnB,CAAR,EAA+BkS,IAA/B,CAAoC4wB,aAApC,CAAT;EAEAF,MAAAA,UAAU,CAAC5iC,CAAC,GAAG,CAAL,CAAV,CAAkBA,CAAC,GAAG,CAAtB,IAA2B+iC,EAAE,CAACp7B,GAAH,CAAOq7B,EAAP,EAAW17B,GAAX,CAAe27B,EAAf,CAA3B;EACD;;EAED5B,IAAAA,YAAY,CAACrhC,CAAD,CAAZ,GAAkB4iC,UAAU,CAAC5iC,CAAD,CAAV,CAAc,CAAd,EAAiBkS,IAAjB,CAAsB,KAAKkvB,SAA3B,EAAsClvB,IAAtC,CAA2C,KAAKivB,QAAhD,CAAlB;EACA,QAAI+B,UAAU,GAAG7B,YAAY,CAACrhC,CAAD,CAAZ,CAAgBkS,IAAhB,CAAqB,KAAKwvB,iBAAL,CAAuB1hC,CAAvB,CAArB,EAAgDkS,IAAhD,CAAqD,KAAKgvB,WAAL,CAAiB3pB,SAAjB,EAArD,CAAjB;EAEA,WAAO;EACL2rB,MAAAA,UAAU,EAAEA,UADP;EAEL7B,MAAAA,YAAY,EAAEA,YAFT;EAGL8B,MAAAA,gBAAgB,EAAEN;EAHb,KAAP;EAKD;EAED;;;;;;EAIA30B,EAAAA,MAAM,GAAG;EACP,WAAO;EACL/K,MAAAA,IAAI,EAAE,QADD;EAEL+9B,MAAAA,WAAW,EAAE,KAAKA,WAFb;EAGLC,MAAAA,QAAQ,EAAE,KAAKA,QAHV;EAILC,MAAAA,SAAS,EAAE,KAAKA,SAJX;EAKLC,MAAAA,YAAY,EAAE,KAAKA,YALd;EAMLC,MAAAA,eAAe,EAAE,KAAKA,eANjB;EAOLC,MAAAA,UAAU,EAAE,KAAKA,UAPZ;EAQLC,MAAAA,aAAa,EAAE,KAAKA,aARf;EASLC,MAAAA,MAAM,EAAE,KAAKA,MATR;EAULC,MAAAA,iBAAiB,EAAE,KAAKA,iBAVnB;EAWLC,MAAAA,OAAO,EAAE,KAAKA,OAXT;EAYLzZ,MAAAA,WAAW,EAAE,KAAKA,WAZb;EAaL2Z,MAAAA,cAAc,EAAE,KAAKA,cAbhB;EAcLC,MAAAA,cAAc,EAAE,KAAKA;EAdhB,KAAP;EAgBD;EAED;;;;;;;;EAMA,SAAOvZ,IAAP,CAAYT,KAAZ,EAAmB8Z,MAAnB,EAA2B;EACzB,QAAI9Z,KAAK,CAAC3kB,IAAN,KAAe,QAAnB,EAA6B;EAC3B,YAAM,IAAIzC,UAAJ,0BAAiConB,KAAK,CAAC3kB,IAAvC,EAAN;EACD;;EAED,QAAI,CAACy+B,MAAL,EAAa;EACX,YAAM,IAAIlhC,UAAJ,CAAe,0CAAf,CAAN;EACD;;EAEDonB,IAAAA,KAAK,CAAC8Z,MAAN,GAAeA,MAAf;EACA,WAAO,IAAIX,KAAJ,CAAU,IAAV,EAAgBnZ,KAAhB,CAAP;EACD;;EA/NgB;;ECPnB;;;;;;;;;EASA,MAAMsb,eAAN,CAAsB;EAClBx9B,EAAAA,WAAW,CAAC1E,MAAD,EAASk9B,MAAT,EAAiB;EACxB,QAAIl9B,MAAM,CAACnB,MAAP,KAAkBmB,MAAM,CAAC,CAAD,CAAN,CAAUnB,MAAhC,EAAwC;EACpC,YAAM,IAAI0P,KAAJ,CAAU,iCAAV,CAAN;EACH;;EACD,QAAI2uB,MAAM,CAACr+B,MAAP,KAAkBmB,MAAM,CAACnB,MAA7B,EAAqC;EACjC,YAAM,IAAI0P,KAAJ,CAAU,yDAAV,CAAN;EACH;;EACD,SAAK2uB,MAAL,GAAcA,MAAd;EACA,SAAKl9B,MAAL,GAAcA,MAAd;EACH;;;;;;;;;;;;;;;EAeD,SAAOmiC,UAAP,CAAkBC,MAAlB,EAA0BC,SAA1B,EAAmD;EAAA,QAAdpjC,OAAc,uEAAJ,EAAI;;EAC/C,QAAIojC,SAAS,CAACxjC,MAAV,KAAqBujC,MAAM,CAACvjC,MAAhC,EAAwC;EACpC,YAAM,IAAI0P,KAAJ,CAAU,gDAAV,CAAN;EACH;;EACD,QAAI+zB,cAAJ;;EACA,QAAIrjC,OAAO,CAACi+B,MAAZ,EAAoB;EAChBoF,MAAAA,cAAc,GAAG,IAAIla,GAAJ,CAAQnpB,OAAO,CAACi+B,MAAhB,CAAjB;EACH,KAFD,MAEO;EACHoF,MAAAA,cAAc,GAAG,IAAIla,GAAJ,CAAQ,CAAC,GAAGga,MAAJ,EAAY,GAAGC,SAAf,CAAR,CAAjB;EACH;;EACDC,IAAAA,cAAc,GAAGjjC,KAAK,CAAC+B,IAAN,CAAWkhC,cAAX,CAAjB;;EACA,QAAIrjC,OAAO,CAACwX,IAAZ,EAAkB;EACd6rB,MAAAA,cAAc,CAAC7rB,IAAf,CAAoBxX,OAAO,CAACwX,IAA5B;EACH,KAb8C;;;EAgB/C,UAAMzW,MAAM,GAAGX,KAAK,CAAC+B,IAAN,CAAW;EAACvC,MAAAA,MAAM,EAAEyjC,cAAc,CAACzjC;EAAxB,KAAX,CAAf;;EACA,SAAK,IAAIC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGkB,MAAM,CAACnB,MAA3B,EAAmCC,CAAC,EAApC,EAAwC;EACpCkB,MAAAA,MAAM,CAAClB,CAAD,CAAN,GAAY,IAAIO,KAAJ,CAAUW,MAAM,CAACnB,MAAjB,CAAZ;EACAmB,MAAAA,MAAM,CAAClB,CAAD,CAAN,CAAU+M,IAAV,CAAe,CAAf;EACH;;EAED,SAAK,IAAI/M,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGujC,SAAS,CAACxjC,MAA9B,EAAsCC,CAAC,EAAvC,EAA2C;EACvC,YAAMyjC,SAAS,GAAGD,cAAc,CAACx8B,OAAf,CAAuBs8B,MAAM,CAACtjC,CAAD,CAA7B,CAAlB;EACA,YAAM0jC,YAAY,GAAGF,cAAc,CAACx8B,OAAf,CAAuBu8B,SAAS,CAACvjC,CAAD,CAAhC,CAArB;;EACA,UAAIyjC,SAAS,IAAI,CAAb,IAAkBC,YAAY,IAAI,CAAtC,EAAyC;EACrCxiC,QAAAA,MAAM,CAACuiC,SAAD,CAAN,CAAkBC,YAAlB;EACH;EACJ;;EAED,WAAO,IAAIN,eAAJ,CAAoBliC,MAApB,EAA4BsiC,cAA5B,CAAP;EACH;;;;;;;EAMDG,EAAAA,SAAS,GAAG;EACR,WAAO,KAAKziC,MAAZ;EACH;;EAED0iC,EAAAA,SAAS,GAAG;EACR,WAAO,KAAKxF,MAAZ;EACH;;;;;;;EAMDyF,EAAAA,aAAa,GAAG;EACZ,QAAIN,SAAS,GAAG,CAAhB;;EACA,SAAK,IAAIvjC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKkB,MAAL,CAAYnB,MAAhC,EAAwCC,CAAC,EAAzC,EAA6C;EACzC,WAAK,IAAIsD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKpC,MAAL,CAAYnB,MAAhC,EAAwCuD,CAAC,EAAzC,EAA6C;EACzCigC,QAAAA,SAAS,IAAI,KAAKriC,MAAL,CAAYlB,CAAZ,EAAesD,CAAf,CAAb;EACH;EACJ;;EACD,WAAOigC,SAAP;EACH;;;;;;;EAMDO,EAAAA,YAAY,GAAG;EACX,QAAI7oB,KAAK,GAAG,CAAZ;;EACA,SAAK,IAAIjb,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKkB,MAAL,CAAYnB,MAAhC,EAAwCC,CAAC,EAAzC,EAA6C;EACzCib,MAAAA,KAAK,IAAI,KAAK/Z,MAAL,CAAYlB,CAAZ,EAAeA,CAAf,CAAT;EACH;;EACD,WAAOib,KAAP;EACH;;;;;;;EAMD8oB,EAAAA,aAAa,GAAG;EACZ,WAAO,KAAKF,aAAL,KAAuB,KAAKC,YAAL,EAA9B;EACH;;;;;;;;EAODE,EAAAA,oBAAoB,CAACC,KAAD,EAAQ;EACxB,UAAM9iC,KAAK,GAAG,KAAK+iC,QAAL,CAAcD,KAAd,CAAd;EACA,WAAO,KAAK/iC,MAAL,CAAYC,KAAZ,EAAmBA,KAAnB,CAAP;EACH;;;;;;;;EAODgjC,EAAAA,oBAAoB,CAACF,KAAD,EAAQ;EACxB,UAAM9iC,KAAK,GAAG,KAAK+iC,QAAL,CAAcD,KAAd,CAAd;EACA,QAAIhpB,KAAK,GAAG,CAAZ;;EACA,SAAK,IAAIjb,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKkB,MAAL,CAAYnB,MAAhC,EAAwCC,CAAC,EAAzC,EAA6C;EACzC,WAAK,IAAIsD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKpC,MAAL,CAAYnB,MAAhC,EAAwCuD,CAAC,EAAzC,EAA6C;EACzC,YAAItD,CAAC,KAAKmB,KAAN,IAAemC,CAAC,KAAKnC,KAAzB,EAAgC;EAC5B8Z,UAAAA,KAAK,IAAI,KAAK/Z,MAAL,CAAYlB,CAAZ,EAAesD,CAAf,CAAT;EACH;EACJ;EACJ;;EACD,WAAO2X,KAAP;EACH;;;;;;;;EAODmpB,EAAAA,qBAAqB,CAACH,KAAD,EAAQ;EACzB,UAAM9iC,KAAK,GAAG,KAAK+iC,QAAL,CAAcD,KAAd,CAAd;EACA,QAAIhpB,KAAK,GAAG,CAAZ;;EACA,SAAK,IAAIjb,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKkB,MAAL,CAAYnB,MAAhC,EAAwCC,CAAC,EAAzC,EAA6C;EACzC,UAAIA,CAAC,KAAKmB,KAAV,EAAiB;EACb8Z,QAAAA,KAAK,IAAI,KAAK/Z,MAAL,CAAYlB,CAAZ,EAAemB,KAAf,CAAT;EACH;EACJ;;EACD,WAAO8Z,KAAP;EACH;;;;;;;;EAODopB,EAAAA,qBAAqB,CAACJ,KAAD,EAAQ;EACzB,UAAM9iC,KAAK,GAAG,KAAK+iC,QAAL,CAAcD,KAAd,CAAd;EACA,QAAIhpB,KAAK,GAAG,CAAZ;;EACA,SAAK,IAAIjb,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKkB,MAAL,CAAYnB,MAAhC,EAAwCC,CAAC,EAAzC,EAA6C;EACzC,UAAIA,CAAC,KAAKmB,KAAV,EAAiB;EACb8Z,QAAAA,KAAK,IAAI,KAAK/Z,MAAL,CAAYC,KAAZ,EAAmBnB,CAAnB,CAAT;EACH;EACJ;;EACD,WAAOib,KAAP;EACH;;;;;;;;EAODqpB,EAAAA,gBAAgB,CAACL,KAAD,EAAQ;EACpB,WAAO,KAAKD,oBAAL,CAA0BC,KAA1B,IAAmC,KAAKI,qBAAL,CAA2BJ,KAA3B,CAA1C;EACH;;;;;;;;EAODM,EAAAA,gBAAgB,CAACN,KAAD,EAAQ;EACpB,WAAO,KAAKE,oBAAL,CAA0BF,KAA1B,IAAmC,KAAKG,qBAAL,CAA2BH,KAA3B,CAA1C;EACH;;;;;;;;;EAQDC,EAAAA,QAAQ,CAACD,KAAD,EAAQ;EACZ,UAAM9iC,KAAK,GAAG,KAAKi9B,MAAL,CAAYp3B,OAAZ,CAAoBi9B,KAApB,CAAd;EACA,QAAI9iC,KAAK,KAAK,CAAC,CAAf,EAAkB,MAAM,IAAIsO,KAAJ,CAAU,0BAAV,CAAN;EAClB,WAAOtO,KAAP;EACH;;;;;;;;;EAQDqjC,EAAAA,mBAAmB,CAACP,KAAD,EAAQ;EACvB,WAAO,KAAKD,oBAAL,CAA0BC,KAA1B,IAAmC,KAAKK,gBAAL,CAAsBL,KAAtB,CAA1C;EACH;;;;;;;;;EAQDQ,EAAAA,mBAAmB,CAACR,KAAD,EAAQ;EACvB,WAAO,KAAKE,oBAAL,CAA0BF,KAA1B,IAAmC,KAAKM,gBAAL,CAAsBN,KAAtB,CAA1C;EACH;;;;;;;;;EAQDS,EAAAA,0BAA0B,CAACT,KAAD,EAAQ;EAC9B,UAAMU,EAAE,GAAG,KAAKX,oBAAL,CAA0BC,KAA1B,CAAX;EACA,WAAOU,EAAE,IAAIA,EAAE,GAAG,KAAKP,qBAAL,CAA2BH,KAA3B,CAAT,CAAT;EACH;;;;;;;;;EAQDW,EAAAA,0BAA0B,CAACX,KAAD,EAAQ;EAC9B,UAAMY,EAAE,GAAG,KAAKV,oBAAL,CAA0BF,KAA1B,CAAX;EACA,WAAOY,EAAE,IAAIA,EAAE,GAAG,KAAKR,qBAAL,CAA2BJ,KAA3B,CAAT,CAAT;EACH;;;;;;;;;EAQDa,EAAAA,oBAAoB,CAACb,KAAD,EAAQ;EACxB,WAAO,IAAI,KAAKO,mBAAL,CAAyBP,KAAzB,CAAX;EACH;;;;;;;;;EAQDc,EAAAA,oBAAoB,CAACd,KAAD,EAAQ;EACxB,WAAO,IAAI,KAAKQ,mBAAL,CAAyBR,KAAzB,CAAX;EACH;;;;;;;;;EAQDe,EAAAA,qBAAqB,CAACf,KAAD,EAAQ;EACzB,UAAMgB,EAAE,GAAG,KAAKb,qBAAL,CAA2BH,KAA3B,CAAX;EACA,WAAOgB,EAAE,IAAIA,EAAE,GAAG,KAAKjB,oBAAL,CAA0BC,KAA1B,CAAT,CAAT;EACH;;;;;;;;EAODiB,EAAAA,oBAAoB,CAACjB,KAAD,EAAQ;EACxB,UAAMkB,EAAE,GAAG,KAAKd,qBAAL,CAA2BJ,KAA3B,CAAX;EACA,WAAOkB,EAAE,IAAIA,EAAE,GAAG,KAAKnB,oBAAL,CAA0BC,KAA1B,CAAT,CAAT;EACH;;;;;;;;;EAQDmB,EAAAA,UAAU,CAACnB,KAAD,EAAQ;EACd,UAAMU,EAAE,GAAG,KAAKX,oBAAL,CAA0BC,KAA1B,CAAX;EACA,WAAO,IAAIU,EAAJ,IAAU,IAAIA,EAAJ,GAAS,KAAKP,qBAAL,CAA2BH,KAA3B,CAAT,GAA6C,KAAKI,qBAAL,CAA2BJ,KAA3B,CAAvD,CAAP;EACH;;;;;;;;;EAQDoB,EAAAA,iCAAiC,CAACpB,KAAD,EAAQ;EACrC,UAAMU,EAAE,GAAG,KAAKX,oBAAL,CAA0BC,KAA1B,CAAX;EACA,UAAMY,EAAE,GAAG,KAAKV,oBAAL,CAA0BF,KAA1B,CAAX;EACA,UAAMgB,EAAE,GAAG,KAAKb,qBAAL,CAA2BH,KAA3B,CAAX;EACA,UAAMkB,EAAE,GAAG,KAAKd,qBAAL,CAA2BJ,KAA3B,CAAX;EACA,WAAO,CAACU,EAAE,GAAGE,EAAL,GAAUI,EAAE,GAAGE,EAAhB,IAAsBpgC,IAAI,CAACE,IAAL,CAAU,CAAC0/B,EAAE,GAAGM,EAAN,KAAaN,EAAE,GAAGQ,EAAlB,KAAyBN,EAAE,GAAGI,EAA9B,KAAqCJ,EAAE,GAAGM,EAA1C,CAAV,CAA7B;EACH;;;;;;;;;EAQDG,EAAAA,eAAe,CAACrB,KAAD,EAAQ;EACnB,WAAO,KAAKO,mBAAL,CAAyBP,KAAzB,IAAkC,KAAKQ,mBAAL,CAAyBR,KAAzB,CAAlC,GAAoE,CAA3E;EACH;;;;;;;;EAODsB,EAAAA,aAAa,CAACtB,KAAD,EAAQ;EACjB,WAAO,KAAKS,0BAAL,CAAgCT,KAAhC,IAAyC,KAAKW,0BAAL,CAAgCX,KAAhC,CAAzC,GAAkF,CAAzF;EACH;;;;;;;;EAODuB,EAAAA,iBAAiB,CAACvB,KAAD,EAAQ;EACrB,WAAO,CACH,CACI,KAAKD,oBAAL,CAA0BC,KAA1B,CADJ,EAEI,KAAKI,qBAAL,CAA2BJ,KAA3B,CAFJ,CADG,EAKH,CACI,KAAKG,qBAAL,CAA2BH,KAA3B,CADJ,EAEI,KAAKE,oBAAL,CAA0BF,KAA1B,CAFJ,CALG,CAAP;EAUH;;;;;;;EAMDwB,EAAAA,WAAW,GAAG;EACV,QAAIC,OAAO,GAAG,CAAd;EACA,QAAIC,SAAS,GAAG,CAAhB;;EACA,SAAK,IAAI3lC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKkB,MAAL,CAAYnB,MAAhC,EAAwCC,CAAC,EAAzC,EAA6C;EACzC,WAAK,IAAIsD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKpC,MAAL,CAAYnB,MAAhC,EAAwCuD,CAAC,EAAzC,EAA6C;EACzC,YAAItD,CAAC,KAAKsD,CAAV,EAAaoiC,OAAO,IAAI,KAAKxkC,MAAL,CAAYlB,CAAZ,EAAesD,CAAf,CAAX,CAAb,KACKqiC,SAAS,IAAI,KAAKzkC,MAAL,CAAYlB,CAAZ,EAAesD,CAAf,CAAb;EACR;EACJ;;EACD,WAAOoiC,OAAO,IAAIA,OAAO,GAAGC,SAAd,CAAd;EACH;;;;;;;;;EASDC,EAAAA,QAAQ,CAACtC,MAAD,EAASC,SAAT,EAAoB;EACxB,UAAMsC,WAAW,GAAG,KAAK3B,QAAL,CAAcZ,MAAd,CAApB;EACA,UAAMwC,cAAc,GAAG,KAAK5B,QAAL,CAAcX,SAAd,CAAvB;EACA,WAAO,KAAKriC,MAAL,CAAY2kC,WAAZ,EAAyBC,cAAzB,CAAP;EACH;;;;;;;;EAOD,MAAIC,QAAJ,GAAe;EACX,WAAO,KAAKN,WAAL,EAAP;EACH;;;;;;;;EAOD,MAAI/J,KAAJ,GAAY;EACR,WAAO,KAAKmI,aAAL,EAAP;EACH;;EAhYiB;;EAmYtB,SAAc,GAAGT,eAAjB;;EC3YA,MAAMxb,gBAAc,GAAG;EACrB8C,EAAAA,IAAI,EAAE;EADe,CAAvB;;EAIA,SAAc,GAAG,aAAA,CAAWkJ,CAAX,EAAcoS,CAAd,EAAiB7lC,OAAjB,EAA0B;EACzCA,EAAAA,OAAO,GAAGd,MAAM,CAAC4oB,MAAP,CAAc,EAAd,EAAkBL,gBAAlB,EAAkCznB,OAAlC,CAAV;EACA,MAAIoW,CAAC,GAAG,IAAIhW,KAAJ,CAAUylC,CAAV,CAAR;EACA,MAAIxjC,CAAC,GAAG,IAAIjC,KAAJ,CAAUqzB,CAAV,CAAR;EACA,MAAIpd,CAAC,GAAG,IAAIjW,KAAJ,CAAUylC,CAAV,CAAR;EACA,MAAIz2B,CAAC,GAAG,IAAIhP,KAAJ,CAAUylC,CAAC,GAAG,CAAd,CAAR;EACA,MAAI3hC,CAAJ,EAAOuR,CAAP,EAAU+M,CAAV,CANyC;;EASzC,OAAK,IAAI3iB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGgmC,CAApB,EAAuBhmC,CAAC,EAAxB,EAA4B;EAC1BuW,IAAAA,CAAC,CAACvW,CAAD,CAAD,GAAOA,CAAP;EACA,QAAIA,CAAC,GAAGgmC,CAAC,GAAGpS,CAAZ,EAAepd,CAAC,CAACxW,CAAD,CAAD,GAAO,CAAP,CAAf,KACKwW,CAAC,CAACxW,CAAD,CAAD,GAAO,CAAP;EACN,GAbwC;;;EAgBzC,OAAKA,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAG4zB,CAAhB,EAAmB5zB,CAAC,EAApB,EAAwB;EACtBwC,IAAAA,CAAC,CAACxC,CAAD,CAAD,GAAOgmC,CAAC,GAAGpS,CAAJ,GAAQ5zB,CAAf;EACD,GAlBwC;;;EAqBzC,OAAKA,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGuP,CAAC,CAACxP,MAAlB,EAA0BC,CAAC,EAA3B,EAA+B;EAC7B,QAAIA,CAAC,KAAK,CAAV,EAAauP,CAAC,CAACvP,CAAD,CAAD,GAAOgmC,CAAC,GAAG,CAAX,CAAb,KACK,IAAIhmC,CAAC,IAAIgmC,CAAC,GAAGpS,CAAb,EAAgBrkB,CAAC,CAACvP,CAAD,CAAD,GAAO,CAAP,CAAhB,KACA,IAAIA,CAAC,IAAIgmC,CAAT,EAAYz2B,CAAC,CAACvP,CAAD,CAAD,GAAOA,CAAC,GAAGgmC,CAAJ,GAAQpS,CAAf,CAAZ,KACArkB,CAAC,CAACvP,CAAD,CAAD,GAAO,CAAC,CAAR;EACN;;EAED,WAASimC,OAAT,GAAmB;EACjB,QAAIjmC,CAAJ,EAAOsD,CAAP,EAAUsL,CAAV;EACAtL,IAAAA,CAAC,GAAG,CAAJ;;EACA,WAAOiM,CAAC,CAACjM,CAAD,CAAD,IAAQ,CAAf,EAAkB;EAChBA,MAAAA,CAAC;EACF;;EACD,QAAIiM,CAAC,CAACjM,CAAC,GAAG,CAAL,CAAD,KAAa,CAAjB,EAAoB;EAClB,WAAKtD,CAAC,GAAGsD,CAAC,GAAG,CAAb,EAAgBtD,CAAC,KAAK,CAAtB,EAAyBA,CAAC,EAA1B,EAA8B;EAC5BuP,QAAAA,CAAC,CAACvP,CAAD,CAAD,GAAO,CAAC,CAAR;EACD;;EACDuP,MAAAA,CAAC,CAACjM,CAAD,CAAD,GAAO,CAAP;EACAe,MAAAA,CAAC,GAAGse,CAAC,GAAG,CAAR;EACApT,MAAAA,CAAC,CAAC,CAAD,CAAD,GAAO,CAAP;EACAqG,MAAAA,CAAC,GAAGtS,CAAC,GAAG,CAAR;EACD,KARD,MAQO;EACL,UAAIA,CAAC,GAAG,CAAR,EAAW;EACTiM,QAAAA,CAAC,CAACjM,CAAC,GAAG,CAAL,CAAD,GAAW,CAAX;EACD;;EACD,SAAG;EACDA,QAAAA,CAAC;EACF,OAFD,QAGOiM,CAAC,CAACjM,CAAD,CAAD,GAAO,CAHd;;EAIAsL,MAAAA,CAAC,GAAGtL,CAAC,GAAG,CAAR;EACAtD,MAAAA,CAAC,GAAGsD,CAAJ;;EACA,aAAOiM,CAAC,CAACvP,CAAD,CAAD,KAAS,CAAhB,EAAmB;EACjBuP,QAAAA,CAAC,CAACvP,CAAC,EAAF,CAAD,GAAS,CAAC,CAAV;EACD;;EACD,UAAIuP,CAAC,CAACvP,CAAD,CAAD,KAAS,CAAC,CAAd,EAAiB;EACfuP,QAAAA,CAAC,CAACvP,CAAD,CAAD,GAAOuP,CAAC,CAACX,CAAD,CAAR;EACA+T,QAAAA,CAAC,GAAGpT,CAAC,CAACX,CAAD,CAAD,GAAO,CAAX;EACAvK,QAAAA,CAAC,GAAGrE,CAAC,GAAG,CAAR;EACA4V,QAAAA,CAAC,GAAGhH,CAAC,GAAG,CAAR;EACAW,QAAAA,CAAC,CAACX,CAAD,CAAD,GAAO,CAAC,CAAR;EACD,OAND,MAMO;EACL,YAAI5O,CAAC,KAAKuP,CAAC,CAAC,CAAD,CAAX,EAAgB;EACd,iBAAO,CAAP;EACD,SAFD,MAEO;EACLA,UAAAA,CAAC,CAACjM,CAAD,CAAD,GAAOiM,CAAC,CAACvP,CAAD,CAAR;EACA2iB,UAAAA,CAAC,GAAGpT,CAAC,CAACvP,CAAD,CAAD,GAAO,CAAX;EACAuP,UAAAA,CAAC,CAACvP,CAAD,CAAD,GAAO,CAAP;EACAqE,UAAAA,CAAC,GAAGf,CAAC,GAAG,CAAR;EACAsS,UAAAA,CAAC,GAAG5V,CAAC,GAAG,CAAR;EACD;EACF;EACF;;EACD,WAAO,CAAP;EACD;;EAED,MAAIG,OAAO,CAACuqB,IAAR,KAAiB,OAArB,EAA8B;EAC5B,UAAMloB,CAAC,CAAC0oB,KAAF,EAAN;;EACA,WAAO+a,OAAO,EAAd,EAAkB;EAChBzjC,MAAAA,CAAC,CAACmgB,CAAD,CAAD,GAAOpM,CAAC,CAAClS,CAAD,CAAR;EACA,YAAM7B,CAAC,CAAC0oB,KAAF,EAAN;EACD;EACF,GAND,MAMO,IAAI/qB,OAAO,CAACuqB,IAAR,KAAiB,MAArB,EAA6B;EAClC,UAAMlU,CAAC,CAAC0U,KAAF,EAAN;;EACA,WAAO+a,OAAO,EAAd,EAAkB;EAChBzvB,MAAAA,CAAC,CAACnS,CAAD,CAAD,GAAO,CAAP;EACAmS,MAAAA,CAAC,CAACZ,CAAD,CAAD,GAAO,CAAP;EACA,YAAMY,CAAC,CAAC0U,KAAF,EAAN;EACD;EACF,GAPM,MAOA;EACL,UAAM,IAAIzb,KAAJ,CAAU,cAAV,CAAN;EACD;EACF,CA5FD;;ECDA,MAAMy2B,EAAE,GAAG,EAAX;;;;;;;;;;;;;EAcAA,EAAE,CAACC,WAAH,GAAiB,UAAUC,UAAV,EAAsBpM,QAAtB,EAAgCoE,MAAhC,EAAwCiI,iBAAxC,EAA2D;EACxE,MAAI,OAAOjI,MAAP,KAAkB,UAAtB,EAAkC;EAC9B,QAAIrwB,QAAQ,GAAGqwB,MAAf;EACAA,IAAAA,MAAM,GAAGpE,QAAT;EACAA,IAAAA,QAAQ,GAAGoM,UAAX;EACA,WAAOF,EAAE,CAACI,SAAH,CAAatM,QAAb,EAAuBoE,MAAvB,EAA+B,CAA/B,EAAkCrwB,QAAlC,CAAP;EACH;;EACD,SAAOm4B,EAAE,CAACI,SAAH,CAAaF,UAAb,EAAyBpM,QAAzB,EAAmCoE,MAAnC,EAA2CiI,iBAA3C,EAA8D,CAA9D,CAAP;EACH,CARD;;;;;;;;;;;;;;;;EAwBAH,EAAE,CAACI,SAAH,GAAe,UAAUF,UAAV,EAAsBpM,QAAtB,EAAgCoE,MAAhC,EAAwCiI,iBAAxC,EAA2D92B,CAA3D,EAA8D;EACzE,MAAI,OAAO82B,iBAAP,KAA6B,UAAjC,EAA6C;EACzC,QAAIt4B,QAAQ,GAAGs4B,iBAAf;EACA92B,IAAAA,CAAC,GAAG6uB,MAAJ;EACAA,IAAAA,MAAM,GAAGpE,QAAT;EACAA,IAAAA,QAAQ,GAAGoM,UAAX;EACH;;EACD/f,EAAAA,KAAK,CAAC2T,QAAD,EAAWoE,MAAX,CAAL;EACA,QAAMmI,QAAQ,GAAGC,WAAW,CAACpI,MAAD,CAA5B;EACA,QAAMqI,eAAe,GAAGC,UAAU,CAACH,QAAQ,CAACxmC,MAAV,EAAkBwmC,QAAQ,CAACxmC,MAA3B,CAAlC;EAEA,MAAIimC,CAAC,GAAGhM,QAAQ,CAACj6B,MAAjB;EACA,MAAI4mC,GAAG,GAAGC,KAAY,CAACr3B,CAAD,EAAIy2B,CAAJ,CAAtB;EACA,MAAIa,MAAM,GAAG,IAAItmC,KAAJ,CAAUylC,CAAV,CAAb;;EACA,OAAK,IAAIhmC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGgmC,CAApB,EAAuBhmC,CAAC,EAAxB,EAA4B;EACxB6mC,IAAAA,MAAM,CAAC7mC,CAAD,CAAN,GAAYA,CAAZ;EACH;;EACD,OAAK,MAAM8mC,OAAX,IAAsBH,GAAtB,EAA2B;EACvB,QAAII,QAAQ,GAAGF,MAAM,CAAC3b,KAAP,EAAf;;EAEA,SAAK,IAAIlrB,CAAC,GAAG8mC,OAAO,CAAC/mC,MAAR,GAAiB,CAA9B,EAAiCC,CAAC,IAAI,CAAtC,EAAyCA,CAAC,EAA1C,EAA8C;EAC1C+mC,MAAAA,QAAQ,CAAC5tB,MAAT,CAAgB2tB,OAAO,CAAC9mC,CAAD,CAAvB,EAA4B,CAA5B;EACH;;EAED,QAAI+N,QAAJ,EAAc;EACVi5B,MAAAA,oBAAoB,CAAChN,QAAD,EAAWoE,MAAX,EAAmB0I,OAAnB,EAA4BC,QAA5B,EAAsCN,eAAtC,EAAuDF,QAAvD,EAAiEx4B,QAAjE,CAApB;EACH,KAFD,MAEO;EACHk5B,MAAAA,QAAQ,CAACb,UAAD,EAAapM,QAAb,EAAuBoE,MAAvB,EAA+BiI,iBAA/B,EAAkDS,OAAlD,EAA2DC,QAA3D,EAAqEN,eAArE,EAAsFF,QAAtF,CAAR;EACH;EAEJ;;EAED,SAAO,IAAInD,KAAJ,CAAoBqD,eAApB,EAAqCF,QAArC,CAAP;EACH,CAjCD;;;;;;;;;;;;;;EA8CAL,EAAE,CAACgB,KAAH,GAAW,UAAUd,UAAV,EAAsBpM,QAAtB,EAAgCoE,MAAhC,EAAwCiI,iBAAxC,EAA2Dz3B,CAA3D,EAA8D;EACrE,MAAI,OAAOy3B,iBAAP,KAA6B,UAAjC,EAA6C;EACzC,QAAIt4B,QAAQ,GAAGs4B,iBAAf;EACAz3B,IAAAA,CAAC,GAAGwvB,MAAJ;EACAA,IAAAA,MAAM,GAAGpE,QAAT;EACAA,IAAAA,QAAQ,GAAGoM,UAAX;EACH;;EACD/f,EAAAA,KAAK,CAAC2T,QAAD,EAAWoE,MAAX,CAAL;EACA,QAAMmI,QAAQ,GAAGC,WAAW,CAACpI,MAAD,CAA5B;EACA,QAAMqI,eAAe,GAAGC,UAAU,CAACH,QAAQ,CAACxmC,MAAV,EAAkBwmC,QAAQ,CAACxmC,MAA3B,CAAlC;EACA,MAAIimC,CAAC,GAAGhM,QAAQ,CAACj6B,MAAjB;EACA,MAAI8mC,MAAM,GAAG,IAAItmC,KAAJ,CAAUylC,CAAV,CAAb;;EACA,OAAK,IAAIhmC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGgmC,CAApB,EAAuBhmC,CAAC,EAAxB,EAA4B;EACxB6mC,IAAAA,MAAM,CAAC7mC,CAAD,CAAN,GAAYA,CAAZ;EACH;;EAED,MAAIyN,CAAC,GAAG1I,IAAI,CAACwG,KAAL,CAAWy6B,CAAC,GAAGp3B,CAAf,CAAR,CAhBqE;;EAkBrE,MAAIu4B,OAAO,GAAG,EAAd;EACA,MAAIC,KAAK,GAAG,EAAZ;;EACA,SAAOP,MAAM,CAAC9mC,MAAd,EAAsB;EAClB,QAAIsnC,KAAK,GAAGtiC,IAAI,CAACwG,KAAL,CAAWxG,IAAI,CAACkI,MAAL,KAAgB45B,MAAM,CAAC9mC,MAAlC,CAAZ;EACAonC,IAAAA,OAAO,CAACjkC,IAAR,CAAa2jC,MAAM,CAACQ,KAAD,CAAnB;EACAR,IAAAA,MAAM,CAAC1tB,MAAP,CAAckuB,KAAd,EAAqB,CAArB;;EACA,QAAIF,OAAO,CAACpnC,MAAR,KAAmB0N,CAAvB,EAA0B;EACtB25B,MAAAA,KAAK,CAAClkC,IAAN,CAAWikC,OAAX;EACAA,MAAAA,OAAO,GAAG,EAAV;EACH;EACJ;;EACD,MAAIA,OAAO,CAACpnC,MAAZ,EAAoBqnC,KAAK,CAAClkC,IAAN,CAAWikC,OAAX;EACpBC,EAAAA,KAAK,GAAGA,KAAK,CAAClc,KAAN,CAAY,CAAZ,EAAetc,CAAf,CAAR;;EAGA,OAAK5O,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGonC,KAAK,CAACrnC,MAAtB,EAA8BC,CAAC,EAA/B,EAAmC;EAC/B,QAAI8mC,OAAO,GAAGM,KAAK,CAACpnC,CAAD,CAAnB;EACA,QAAI+mC,QAAQ,GAAG,EAAf;;EACA,SAAK,IAAIzjC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG8jC,KAAK,CAACrnC,MAA1B,EAAkCuD,CAAC,EAAnC,EAAuC;EACnC,UAAIA,CAAC,KAAKtD,CAAV,EAAa+mC,QAAQ,GAAGA,QAAQ,CAAC1Y,MAAT,CAAgB+Y,KAAK,CAAC9jC,CAAD,CAArB,CAAX;EAChB;;EAED,QAAIyK,QAAJ,EAAc;EACVi5B,MAAAA,oBAAoB,CAAChN,QAAD,EAAWoE,MAAX,EAAmB0I,OAAnB,EAA4BC,QAA5B,EAAsCN,eAAtC,EAAuDF,QAAvD,EAAiEx4B,QAAjE,CAApB;EACH,KAFD,MAEO;EACHk5B,MAAAA,QAAQ,CAACb,UAAD,EAAapM,QAAb,EAAuBoE,MAAvB,EAA+BiI,iBAA/B,EAAkDS,OAAlD,EAA2DC,QAA3D,EAAqEN,eAArE,EAAsFF,QAAtF,CAAR;EACH;EACJ;;EAED,SAAO,IAAInD,KAAJ,CAAoBqD,eAApB,EAAqCF,QAArC,CAAP;EACH,CAhDD;;EAkDA,SAASlgB,KAAT,CAAe2T,QAAf,EAAyBoE,MAAzB,EAAiC;EAC7B,MAAIpE,QAAQ,CAACj6B,MAAT,KAAoBq+B,MAAM,CAACr+B,MAA/B,EAAuC;EACnC,UAAM,IAAI0P,KAAJ,CAAU,iDAAV,CAAN;EACH;EACJ;;EAED,SAASi3B,UAAT,CAAoBrlC,IAApB,EAA0BE,OAA1B,EAAmC;EAC/B,SAAO,IAAIhB,KAAJ,CAAUc,IAAV,EAAgB0L,IAAhB,CAAqB,CAArB,EAAwBod,GAAxB,CAA4B,MAAM,IAAI5pB,KAAJ,CAAUgB,OAAV,EAAmBwL,IAAnB,CAAwB,CAAxB,CAAlC,CAAP;EACH;;EAED,SAASy5B,WAAT,CAAqBniB,GAArB,EAA0B;EACtB,MAAI/R,CAAC,GAAG,IAAIgX,GAAJ,EAAR;;EACA,OAAK,IAAItpB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGqkB,GAAG,CAACtkB,MAAxB,EAAgCC,CAAC,EAAjC,EAAqC;EACjCsS,IAAAA,CAAC,CAAChL,GAAF,CAAM+c,GAAG,CAACrkB,CAAD,CAAT;EACH;;EACD,SAAOO,KAAK,CAAC+B,IAAN,CAAWgQ,CAAX,CAAP;EACH;;EAED,SAAS20B,QAAT,CAAkBb,UAAlB,EAA8BpM,QAA9B,EAAwCoE,MAAxC,EAAgDiI,iBAAhD,EAAmES,OAAnE,EAA4EC,QAA5E,EAAsFN,eAAtF,EAAuGF,QAAvG,EAAiH;EAC7G,QAAM;EAACe,IAAAA,YAAD;EAAeC,IAAAA,aAAf;EAA8BC,IAAAA,UAA9B;EAA0CC,IAAAA;EAA1C,MAAyDC,YAAY,CAAC1N,QAAD,EAAWoE,MAAX,EAAmB0I,OAAnB,EAA4BC,QAA5B,CAA3E;EAEA,MAAIY,UAAJ;;EACA,MAAIvB,UAAU,CAAC9mC,SAAX,CAAqB4nB,KAAzB,EAAgC;EAC5BygB,IAAAA,UAAU,GAAG,IAAIvB,UAAJ,CAAeC,iBAAf,CAAb;EACAsB,IAAAA,UAAU,CAACzgB,KAAX,CAAiBqgB,aAAjB,EAAgCE,WAAhC;EACH,GAHD,MAGO;EACHE,IAAAA,UAAU,GAAG,IAAIvB,UAAJ,CAAemB,aAAf,EAA8BE,WAA9B,EAA2CpB,iBAA3C,CAAb;EACH;;EAED,MAAIuB,eAAe,GAAGD,UAAU,CAACvf,OAAX,CAAmBkf,YAAnB,CAAtB;EACAO,EAAAA,qBAAqB,CAACpB,eAAD,EAAkBe,UAAlB,EAA8BI,eAA9B,EAA+CrB,QAA/C,CAArB;EACH;;EAED,SAASS,oBAAT,CAA8BhN,QAA9B,EAAwCoE,MAAxC,EAAgD0I,OAAhD,EAAyDC,QAAzD,EAAmEN,eAAnE,EAAoFF,QAApF,EAA8Fx4B,QAA9F,EAAwG;EACpG,QAAM;EAACu5B,IAAAA,YAAD;EAAeC,IAAAA,aAAf;EAA8BC,IAAAA,UAA9B;EAA0CC,IAAAA;EAA1C,MAAyDC,YAAY,CAAC1N,QAAD,EAAWoE,MAAX,EAAmB0I,OAAnB,EAA4BC,QAA5B,CAA3E;EACA,QAAMa,eAAe,GAAG75B,QAAQ,CAACw5B,aAAD,EAAgBE,WAAhB,EAA6BH,YAA7B,CAAhC;EACAO,EAAAA,qBAAqB,CAACpB,eAAD,EAAkBe,UAAlB,EAA8BI,eAA9B,EAA+CrB,QAA/C,CAArB;EACH;;EAED,SAASsB,qBAAT,CAA+BpB,eAA/B,EAAgDe,UAAhD,EAA4DI,eAA5D,EAA6ErB,QAA7E,EAAuF;EAEnF,OAAK,IAAIvmC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG4nC,eAAe,CAAC7nC,MAApC,EAA4CC,CAAC,EAA7C,EAAiD;EAC7C,UAAMyjC,SAAS,GAAG8C,QAAQ,CAACv/B,OAAT,CAAiBwgC,UAAU,CAACxnC,CAAD,CAA3B,CAAlB;EACA,UAAM0jC,YAAY,GAAG6C,QAAQ,CAACv/B,OAAT,CAAiB4gC,eAAe,CAAC5nC,CAAD,CAAhC,CAArB;;EACA,QAAIyjC,SAAS,GAAG,CAAZ,IAAiBC,YAAY,GAAG,CAApC,EAAuC;;EAEnCztB,MAAAA,OAAO,CAACC,IAAR,0CAA+C0xB,eAAe,CAAC5nC,CAAD,CAA9D;EACH;;EACDymC,IAAAA,eAAe,CAAChD,SAAD,CAAf,CAA2BC,YAA3B;EACH;EACJ;;EAGD,SAASgE,YAAT,CAAsB1N,QAAtB,EAAgCoE,MAAhC,EAAwC0I,OAAxC,EAAiDC,QAAjD,EAA2D;EACvD,SAAO;EACHO,IAAAA,YAAY,EAAER,OAAO,CAAC3c,GAAR,CAAY,UAAUhpB,KAAV,EAAiB;EACvC,aAAO64B,QAAQ,CAAC74B,KAAD,CAAf;EACH,KAFa,CADX;EAIHomC,IAAAA,aAAa,EAAER,QAAQ,CAAC5c,GAAT,CAAa,UAAUhpB,KAAV,EAAiB;EACzC,aAAO64B,QAAQ,CAAC74B,KAAD,CAAf;EACH,KAFc,CAJZ;EAOHqmC,IAAAA,UAAU,EAAEV,OAAO,CAAC3c,GAAR,CAAY,UAAUhpB,KAAV,EAAiB;EACrC,aAAOi9B,MAAM,CAACj9B,KAAD,CAAb;EACH,KAFW,CAPT;EAUHsmC,IAAAA,WAAW,EAAEV,QAAQ,CAAC5c,GAAT,CAAa,UAAUhpB,KAAV,EAAiB;EACvC,aAAOi9B,MAAM,CAACj9B,KAAD,CAAb;EACH,KAFY;EAVV,GAAP;EAcH;;EAED,SAAc,GAAG+kC,EAAjB;;EC5MA,SAAS4B,QAAT,CAAkB1jB,GAAlB,EAAuB;EACrB,SAAO,KAAK,IAAIrf,IAAI,CAACsG,GAAL,CAAS,CAAC+Y,GAAV,CAAT,CAAP;EACD;;EAED,SAAS2jB,MAAT,CAAgB3jB,GAAhB,EAAqB4jB,KAArB,EAA4B;EAC1B,SAAO5jB,GAAG,GAAG,CAAN,GAAU4jB,KAAK,IAAIjjC,IAAI,CAACsG,GAAL,CAAS+Y,GAAT,IAAgB,CAApB,CAAf,GAAwCA,GAA/C;EACD;;EAED,SAAS6jB,eAAT,CAAyB7jB,GAAzB,EAA8B4jB,KAA9B,EAAqC;EACnC,MAAIA,KAAK,GAAG,CAAZ,EAAe;EACb,WAAO,CAACjjC,IAAI,CAAC0G,GAAL,CAAS,IAAIu8B,KAAK,IAAI5jB,GAAG,GAAG4jB,KAAV,CAAlB,CAAD,GAAuCA,KAA9C;EACD;;EACD,MAAIA,KAAK,GAAG,CAAZ,EAAe;EACb,WAAQ,CAACjjC,IAAI,CAACsG,GAAL,CAAS28B,KAAK,GAAG5jB,GAAjB,IAAwB,CAAzB,IAA8B4jB,KAA/B,GAAwCA,KAA/C;EACD;;EACD,SAAO5jB,GAAP;EACD;;EAED,SAAS8jB,oBAAT,CAA8B9jB,GAA9B,EAAmC4jB,KAAnC,EAA0C;EACxC,MAAIA,KAAK,GAAG,CAAZ,EAAe;EACb,WAAO,KAAK,IAAIA,KAAK,IAAIA,KAAK,GAAG5jB,GAAZ,CAAd,CAAP;EACD,GAFD,MAEO;EACL,WAAOrf,IAAI,CAACsG,GAAL,CAAS28B,KAAK,GAAG5jB,GAAjB,CAAP;EACD;EACF;;EAED,MAAM+jB,oBAAoB,GAAG;EAC3Bj8B,EAAAA,IAAI,EAAE;EACJk8B,IAAAA,UAAU,EAAErjC,IAAI,CAACmH,IADb;EAEJm8B,IAAAA,QAAQ,EAAGjkB,GAAD,IAAS,IAAKA,GAAG,GAAGA;EAF1B,GADqB;EAK3BxL,EAAAA,QAAQ,EAAE;EACRwvB,IAAAA,UAAU,EAAGhkB,GAAD,IAASA,GADb;EAERikB,IAAAA,QAAQ,EAAE,MAAM;EAFR,GALiB;EAS3BP,EAAAA,QAAQ,EAAE;EACRM,IAAAA,UAAU,EAAEN,QADJ;EAERO,IAAAA,QAAQ,EAAGjkB,GAAD,IAAS0jB,QAAQ,CAAC1jB,GAAD,CAAR,IAAiB,IAAI0jB,QAAQ,CAAC1jB,GAAD,CAA7B;EAFX,GATiB;EAa3BkkB,EAAAA,MAAM,EAAE;EACNF,IAAAA,UAAU,EAAErjC,IAAI,CAAC+F,IADX;EAENu9B,IAAAA,QAAQ,EAAGjkB,GAAD,IAAS,KAAKA,GAAG,GAAGA,GAAN,GAAY,CAAjB;EAFb,GAbmB;EAiB3BmkB,EAAAA,QAAQ,EAAE;EACRH,IAAAA,UAAU,EAAGhkB,GAAD,IAASA,GAAG,IAAI,IAAIrf,IAAI,CAAC0F,GAAL,CAAS2Z,GAAT,CAAR,CADhB;EAERikB,IAAAA,QAAQ,EAAGjkB,GAAD,IAAS,KAAK,CAAC,IAAIrf,IAAI,CAAC0F,GAAL,CAAS2Z,GAAT,CAAL,KAAuB,IAAIrf,IAAI,CAAC0F,GAAL,CAAS2Z,GAAT,CAA3B,CAAL;EAFX,GAjBiB;EAqB3BokB,EAAAA,IAAI,EAAE;EACJJ,IAAAA,UAAU,EAAGhkB,GAAD,IAAUA,GAAG,GAAG,CAAN,GAAU,CAAV,GAAcA,GADhC;EAEJikB,IAAAA,QAAQ,EAAGjkB,GAAD,IAAUA,GAAG,GAAG,CAAN,GAAU,CAAV,GAAc;EAF9B,GArBqB;EAyB3BqkB,EAAAA,QAAQ,EAAE;EACRL,IAAAA,UAAU,EAAGhkB,GAAD,IAASrf,IAAI,CAAC0G,GAAL,CAAS,IAAI1G,IAAI,CAACsG,GAAL,CAAS+Y,GAAT,CAAb,CADb;EAERikB,IAAAA,QAAQ,EAAGjkB,GAAD,IAAS,KAAK,IAAIrf,IAAI,CAACsG,GAAL,CAAS,CAAC+Y,GAAV,CAAT;EAFX,GAzBiB;EA6B3BskB,EAAAA,IAAI,EAAE;EACJN,IAAAA,UAAU,EAAGhkB,GAAD,IAAU,CAACrf,IAAI,CAACE,IAAL,CAAUmf,GAAG,GAAGA,GAAN,GAAY,CAAtB,IAA2B,CAA5B,IAAiC,CAAlC,GAAuCA,GADxD;EAEJikB,IAAAA,QAAQ,EAAGjkB,GAAD,IAAUA,GAAG,IAAI,IAAIrf,IAAI,CAACE,IAAL,CAAUmf,GAAG,GAAGA,GAAN,GAAY,CAAtB,CAAR,CAAJ,GAAyC;EAFxD,GA7BqB;EAiC3BukB,EAAAA,QAAQ,EAAE;EACRP,IAAAA,UAAU,EAAErjC,IAAI,CAACgH,GADT;EAERs8B,IAAAA,QAAQ,EAAEtjC,IAAI,CAACoG;EAFP,GAjCiB;EAqC3By9B,EAAAA,IAAI,EAAE;EACJR,IAAAA,UAAU,EAAGhkB,GAAD,IAAUA,GAAG,KAAK,CAAR,GAAY,CAAZ,GAAgBrf,IAAI,CAACgH,GAAL,CAASqY,GAAT,IAAgBA,GADlD;EAEJikB,IAAAA,QAAQ,EAAGjkB,GAAD,IAAUA,GAAG,KAAK,CAAR,GAAY,CAAZ,GAAiBrf,IAAI,CAACoG,GAAL,CAASiZ,GAAT,IAAgBA,GAAjB,GAAyBrf,IAAI,CAACgH,GAAL,CAASqY,GAAT,KAAiBA,GAAG,GAAGA,GAAvB;EAFzD,GArCqB;EAyC3BykB,EAAAA,QAAQ,EAAE;EACRT,IAAAA,UAAU,EAAGhkB,GAAD,IAASrf,IAAI,CAACsG,GAAL,CAAS,EAAE+Y,GAAG,GAAGA,GAAR,CAAT,CADb;EAERikB,IAAAA,QAAQ,EAAGjkB,GAAD,IAAS,CAAC,CAAD,GAAKA,GAAL,GAAWrf,IAAI,CAACsG,GAAL,CAAS,EAAE+Y,GAAG,GAAGA,GAAR,CAAT;EAFtB,GAzCiB;EA6C3B,qBAAmB;EACjBgkB,IAAAA,UAAU,EAAE,CAAChkB,GAAD,EAAM4jB,KAAN,KAAiB5jB,GAAG,GAAG,CAAN,GAAU4jB,KAAK,GAAG5jB,GAAlB,GAAwBA,GADpC;EAEjBikB,IAAAA,QAAQ,EAAE,CAACjkB,GAAD,EAAM4jB,KAAN,KAAiB5jB,GAAG,GAAG,CAAN,GAAU4jB,KAAV,GAAkB;EAF5B,GA7CQ;EAiD3B,qBAAmB;EACjBI,IAAAA,UAAU,EAAEL,MADK;EAEjBM,IAAAA,QAAQ,EAAE,CAACjkB,GAAD,EAAM4jB,KAAN,KAAiB5jB,GAAG,GAAG,CAAN,GAAU2jB,MAAM,CAAC3jB,GAAD,EAAM4jB,KAAN,CAAN,GAAqBA,KAA/B,GAAuC;EAFjD,GAjDQ;EAqD3B,sBAAoB;EAClBI,IAAAA,UAAU,EAAEH,eADM;EAElBI,IAAAA,QAAQ,EAAEH;EAFQ;EArDO,CAA7B;;EA2DA,MAAMY,KAAN,CAAY;;;;;;;;;;;;EAYVljC,EAAAA,WAAW,CAACzF,OAAD,EAAU;EACnB,SAAK4oC,SAAL,GAAiB5oC,OAAO,CAAC4oC,SAAzB;EACA,SAAKC,UAAL,GAAkB7oC,OAAO,CAAC6oC,UAA1B;EACA,SAAKC,cAAL,GAAsB9oC,OAAO,CAAC8oC,cAA9B;EACA,SAAKC,OAAL,GAAe/oC,OAAO,CAAC+oC,OAAvB;EACA,SAAKd,UAAL,GAAkBjoC,OAAO,CAACioC,UAA1B;EACA,SAAKe,eAAL,GAAuBhpC,OAAO,CAACgpC,eAA/B;EAEA,QAAIC,gBAAgB,GAAGjB,oBAAoB,CAAChoC,OAAO,CAACioC,UAAT,CAA3C;EACA,QAAIiB,MAAM,GAAGD,gBAAgB,CAAChB,UAAjB,CAA4BroC,MAAzC;EAEA,QAAIupC,WAAW,GAAGD,MAAM,GAAG,CAAT,GAAcjlB,GAAD,IAASglB,gBAAgB,CAAChB,UAAjB,CAA4BhkB,GAA5B,EAAiCjkB,OAAO,CAACgpC,eAAzC,CAAtB,GAAkFC,gBAAgB,CAAChB,UAArH;EACA,QAAImB,WAAW,GAAGF,MAAM,GAAG,CAAT,GAAcjlB,GAAD,IAASglB,gBAAgB,CAACf,QAAjB,CAA0BjkB,GAA1B,EAA+BjkB,OAAO,CAACgpC,eAAvC,CAAtB,GAAgFC,gBAAgB,CAACf,QAAnH;;EAEA,SAAKmB,kBAAL,GAA0B,UAAUxpC,CAAV,EAAasD,CAAb,EAAgB;EACxC,WAAKoB,GAAL,CAAS1E,CAAT,EAAYsD,CAAZ,EAAegmC,WAAW,CAAC,KAAK/lC,GAAL,CAASvD,CAAT,EAAYsD,CAAZ,CAAD,CAA1B;EACD,KAFD;;EAGA,SAAK+kC,QAAL,GAAgB,UAAUroC,CAAV,EAAasD,CAAb,EAAgB;EAC9B,WAAKoB,GAAL,CAAS1E,CAAT,EAAYsD,CAAZ,EAAeimC,WAAW,CAAC,KAAKhmC,GAAL,CAASvD,CAAT,EAAYsD,CAAZ,CAAD,CAA1B;EACD,KAFD;;EAIA,QAAInD,OAAO,CAAC2nB,KAAZ,EAAmB;;EAEjB,WAAKsY,CAAL,GAASqJ,MAAQ,CAACpiC,MAAT,CAAgBI,WAAhB,CAA4BtH,OAAO,CAACigC,CAApC,CAAT;EACA,WAAK5pB,CAAL,GAASizB,MAAQ,CAACpiC,MAAT,CAAgBI,WAAhB,CAA4BtH,OAAO,CAACqW,CAApC,CAAT;EACD,KAJD,MAIO;;EAEL,WAAK4pB,CAAL,GAASqJ,MAAQ,CAACpiC,MAAT,CAAgB2F,IAAhB,CAAqB,KAAK+7B,SAA1B,EAAqC,KAAKC,UAA1C,CAAT;EACA,WAAKxyB,CAAL,GAASizB,MAAQ,CAACpiC,MAAT,CAAgBwF,KAAhB,CAAsB,CAAtB,EAAyB,KAAKm8B,UAA9B,CAAT;EAEA,WAAK5I,CAAL,CAAOtyB,KAAP,CAAa,UAAU9N,CAAV,EAAasD,CAAb,EAAgB;EAC3B,aAAKoB,GAAL,CAAS1E,CAAT,EAAYsD,CAAZ,EAAe,KAAKC,GAAL,CAASvD,CAAT,EAAYsD,CAAZ,IAAiByB,IAAI,CAACE,IAAL,CAAU9E,OAAO,CAAC4oC,SAAlB,CAAhC;EACD,OAFD;EAGD;EACF;;;;;;;;;EAQDW,EAAAA,OAAO,CAACxuB,CAAD,EAAI;EACT,QAAIyH,CAAC,GAAGzH,CAAC,CAAChJ,IAAF,CAAO,KAAKkuB,CAAZ,EAAe5vB,YAAf,CAA4B,KAAKgG,CAAjC,CAAR;EACAmM,IAAAA,CAAC,CAAC7U,KAAF,CAAQ,KAAK07B,kBAAb;EACA,SAAKjzB,CAAL,GAASoM,CAAC,CAAC7T,KAAF,EAAT;EACA,WAAO6T,CAAP;EACD;;;;;;;;;;EASDgnB,EAAAA,eAAe,CAACC,KAAD,EAAQrzB,CAAR,EAAW;EACxB,SAAKszB,EAAL,GAAUtzB,CAAC,CAACgB,SAAF,GAAcrF,IAAd,CAAmB03B,KAAnB,CAAV;EACA,SAAKE,EAAL,GAAUL,MAAQ,CAACpiC,MAAT,CAAgBsF,SAAhB,CAA0Bi9B,KAAK,CAACvmC,GAAN,CAAU,QAAV,CAA1B,CAAV;EAEA,QAAI0mC,KAAK,GAAGxzB,CAAC,CAACzH,KAAF,EAAZ;EACA,WAAO86B,KAAK,CAAC13B,IAAN,CAAW,KAAKkuB,CAAL,CAAO7oB,SAAP,EAAX,EAA+BtP,GAA/B,CAAmC8hC,KAAK,CAACj8B,KAAN,CAAY,KAAKu6B,QAAjB,CAAnC,CAAP;EACD;;;;;;;EAMD2B,EAAAA,MAAM,GAAG;EACP,SAAKH,EAAL,CAAQviC,GAAR,CAAY,KAAK84B,CAAL,CAAOtxB,KAAP,GAAe7G,GAAf,CAAmB,KAAKghC,cAAxB,CAAZ;EACA,SAAK7I,CAAL,CAAO94B,GAAP,CAAW,KAAKuiC,EAAL,CAAQ5hC,GAAR,CAAY,CAAC,KAAKihC,OAAlB,CAAX;EACA,SAAK1yB,CAAL,CAAOlP,GAAP,CAAW,KAAKwiC,EAAL,CAAQ7hC,GAAR,CAAY,CAAC,KAAKihC,OAAlB,CAAX;EACD;;;;;;;;EAODh7B,EAAAA,MAAM,GAAG;EACP,WAAO;EACL4Z,MAAAA,KAAK,EAAE,OADF;EAELihB,MAAAA,SAAS,EAAE,KAAKA,SAFX;EAGLC,MAAAA,UAAU,EAAE,KAAKA,UAHZ;EAILC,MAAAA,cAAc,EAAE,KAAKA,cAJhB;EAKLC,MAAAA,OAAO,EAAE,KAAKA,OALT;EAMLd,MAAAA,UAAU,EAAE,KAAKA,UANZ;EAOLhI,MAAAA,CAAC,EAAE,KAAKA,CAPH;EAQL5pB,MAAAA,CAAC,EAAE,KAAKA;EARH,KAAP;EAUD;;;;;;;;;EAQD,SAAO+R,IAAP,CAAYT,KAAZ,EAAmB;EACjB,QAAIA,KAAK,CAACA,KAAN,KAAgB,OAApB,EAA6B;EAC3B,YAAM,IAAIpnB,UAAJ,CAAe,wCAAf,CAAN;EACD;;EACD,WAAO,IAAIooC,KAAJ,CAAUhhB,KAAV,CAAP;EACD;;EAnHS;;EAsHZ,MAAMmiB,WAAN,SAA0BnB,KAA1B,CAAgC;EAC9BljC,EAAAA,WAAW,CAACzF,OAAD,EAAU;EACnB,UAAMA,OAAN;;EAEA,SAAKqpC,kBAAL,GAA0B,UAAUxpC,CAAV,EAAasD,CAAb,EAAgB;EACxC,WAAKoB,GAAL,CAAS1E,CAAT,EAAYsD,CAAZ,EAAeyB,IAAI,CAACsG,GAAL,CAAS,KAAK9H,GAAL,CAASvD,CAAT,EAAYsD,CAAZ,CAAT,CAAf;EACD,KAFD;EAGD;;EAED,SAAOilB,IAAP,CAAYT,KAAZ,EAAmB;EACjB,QAAIA,KAAK,CAACA,KAAN,KAAgB,OAApB,EAA6B;EAC3B,YAAM,IAAIpnB,UAAJ,CAAe,wCAAf,CAAN;EACD;;EAED,WAAO,IAAIupC,WAAJ,CAAgBniB,KAAhB,CAAP;EACD;;EAf6B;;EAkBhC,MAAMoiB,yBAAN,CAAgC;;;;;;;;;;;;;;EAc9BtkC,EAAAA,WAAW,CAACzF,OAAD,EAAU;EACnBA,IAAAA,OAAO,GAAGA,OAAO,IAAI,EAArB;;EACA,QAAIA,OAAO,CAAC2nB,KAAZ,EAAmB;;EAEjB,WAAKqiB,YAAL,GAAoBhqC,OAAO,CAACgqC,YAA5B;EACA,WAAKlR,UAAL,GAAkB94B,OAAO,CAAC84B,UAA1B;EACA,WAAKmR,YAAL,GAAoBjqC,OAAO,CAACiqC,YAA5B;EACA,WAAKnB,cAAL,GAAsB9oC,OAAO,CAAC8oC,cAA9B;EACA,WAAKoB,KAAL,GAAalqC,OAAO,CAACkqC,KAArB;EACA,WAAKjC,UAAL,GAAkBjoC,OAAO,CAACioC,UAA1B;EACA,WAAKe,eAAL,GAAuBhpC,OAAO,CAACgpC,eAA/B;EACA,WAAKrhB,KAAL,GAAa,IAAIvnB,KAAJ,CAAUJ,OAAO,CAACmqC,MAAR,CAAevqC,MAAzB,CAAb;;EAEA,WAAK,IAAIC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK8nB,KAAL,CAAW/nB,MAAX,GAAoB,CAAxC,EAA2C,EAAEC,CAA7C,EAAgD;EAC9C,aAAK8nB,KAAL,CAAW9nB,CAAX,IAAgB8oC,KAAK,CAACvgB,IAAN,CAAWpoB,OAAO,CAACmqC,MAAR,CAAetqC,CAAf,CAAX,CAAhB;EACD;;EACD,WAAK8nB,KAAL,CAAW,KAAKA,KAAL,CAAW/nB,MAAX,GAAoB,CAA/B,IAAoCkqC,WAAW,CAAC1hB,IAAZ,CAAiBpoB,OAAO,CAACmqC,MAAR,CAAe,KAAKxiB,KAAL,CAAW/nB,MAAX,GAAoB,CAAnC,CAAjB,CAApC;EACD,KAfD,MAeO;;EAEL,WAAKoqC,YAAL,GAAoBhqC,OAAO,CAACgqC,YAAR,IAAwB,CAAC,EAAD,CAA5C;EACA,WAAKlR,UAAL,GAAkB94B,OAAO,CAAC84B,UAAR,IAAsB,EAAxC;EAEA,WAAKmR,YAAL,GAAoBjqC,OAAO,CAACiqC,YAAR,IAAwB,IAA5C;EACA,WAAKnB,cAAL,GAAsB9oC,OAAO,CAAC8oC,cAAR,IAA0B,IAAhD;EAEA,WAAKb,UAAL,GAAkBjoC,OAAO,CAACioC,UAAR,IAAsB,MAAxC;EACA,WAAKe,eAAL,GAAuBhpC,OAAO,CAACgpC,eAAR,IAA2B,CAAlD;;EACA,UAAI,EAAE,KAAKf,UAAL,IAAmB/oC,MAAM,CAACkrC,IAAP,CAAYpC,oBAAZ,CAArB,CAAJ,EAA6D;EAC3D,aAAKC,UAAL,GAAkB,MAAlB;EACD;EACF;EACF;;;;;;;;;EAQDoC,EAAAA,YAAY,CAACzB,SAAD,EAAYC,UAAZ,EAAwB;EAClC,QAAIxkC,IAAI,GAAG,KAAK,KAAK2lC,YAAL,CAAkBpqC,MAAlB,GAA2B,CAAhC,CAAX;EACA,SAAK+nB,KAAL,GAAa,IAAIvnB,KAAJ,CAAUiE,IAAV,CAAb,CAFkC;;EAKlC,SAAKsjB,KAAL,CAAW,CAAX,IAAgB,IAAIghB,KAAJ,CAAU;EACxBC,MAAAA,SAAS,EAAEA,SADa;EAExBC,MAAAA,UAAU,EAAE,KAAKmB,YAAL,CAAkB,CAAlB,CAFY;EAGxB/B,MAAAA,UAAU,EAAE,KAAKA,UAHO;EAIxBe,MAAAA,eAAe,EAAE,KAAKA,eAJE;EAKxBF,MAAAA,cAAc,EAAE,KAAKA,cALG;EAMxBC,MAAAA,OAAO,EAAE,KAAKkB;EANU,KAAV,CAAhB,CALkC;;EAelC,SAAK,IAAIpqC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKmqC,YAAL,CAAkBpqC,MAAtC,EAA8C,EAAEC,CAAhD,EAAmD;EACjD,WAAK8nB,KAAL,CAAW9nB,CAAX,IAAgB,IAAI8oC,KAAJ,CAAU;EACxBC,QAAAA,SAAS,EAAE,KAAKoB,YAAL,CAAkBnqC,CAAC,GAAG,CAAtB,CADa;EAExBgpC,QAAAA,UAAU,EAAE,KAAKmB,YAAL,CAAkBnqC,CAAlB,CAFY;EAGxBooC,QAAAA,UAAU,EAAE,KAAKA,UAHO;EAIxBe,QAAAA,eAAe,EAAE,KAAKA,eAJE;EAKxBF,QAAAA,cAAc,EAAE,KAAKA,cALG;EAMxBC,QAAAA,OAAO,EAAE,KAAKkB;EANU,OAAV,CAAhB;EAQD,KAxBiC;;;EA2BlC,SAAKtiB,KAAL,CAAWtjB,IAAI,GAAG,CAAlB,IAAuB,IAAIylC,WAAJ,CAAgB;EACrClB,MAAAA,SAAS,EAAE,KAAKoB,YAAL,CAAkB,KAAKA,YAAL,CAAkBpqC,MAAlB,GAA2B,CAA7C,CAD0B;EAErCipC,MAAAA,UAAU,EAAEA,UAFyB;EAGrCZ,MAAAA,UAAU,EAAE,KAAKA,UAHoB;EAIrCe,MAAAA,eAAe,EAAE,KAAKA,eAJe;EAKrCF,MAAAA,cAAc,EAAE,KAAKA,cALgB;EAMrCC,MAAAA,OAAO,EAAE,KAAKkB;EANuB,KAAhB,CAAvB;EAQD;;;;;;;;EAODljB,EAAAA,KAAK,CAAC8S,QAAD,EAAWoE,MAAX,EAAmB;EACtBpE,IAAAA,QAAQ,GAAGyP,MAAQ,CAACpiC,MAAT,CAAgBI,WAAhB,CAA4BuyB,QAA5B,CAAX;EACA,SAAKqQ,KAAL,GAAaI,WAAW,CAACrM,MAAD,CAAxB;EAEA,QAAI2K,SAAS,GAAG/O,QAAQ,CAACz4B,OAAzB;EACA,QAAIynC,UAAU,GAAG3pC,MAAM,CAACkrC,IAAP,CAAY,KAAKF,KAAL,CAAWK,MAAvB,EAA+B3qC,MAAhD;;EAEA,QAAI,CAAC,KAAK+nB,KAAV,EAAiB;EACf,WAAK0iB,YAAL,CAAkBzB,SAAlB,EAA6BC,UAA7B;EACD;;EAED,SAAK,IAAIhpC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKi5B,UAAzB,EAAqC,EAAEj5B,CAAvC,EAA0C;EACxC,UAAIikB,aAAa,GAAG,KAAK0mB,SAAL,CAAe3Q,QAAf,CAApB;EACA,WAAK2P,eAAL,CAAqB3P,QAArB,EAA+BoE,MAA/B,EAAuCna,aAAvC;EACD;EACF;;;;;;;;;EAQD0mB,EAAAA,SAAS,CAACzvB,CAAD,EAAI;EACX,QAAItb,KAAK,GAAGsb,CAAZ;;EACA,SAAK,IAAIlb,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK8nB,KAAL,CAAW/nB,MAA/B,EAAuC,EAAEC,CAAzC,EAA4C;EAC1CJ,MAAAA,KAAK,GAAG,KAAKkoB,KAAL,CAAW9nB,CAAX,EAAc0pC,OAAd,CAAsB9pC,KAAtB,CAAR;EACD,KAJU;;;EAOX,WAAOA,KAAK,CAACmR,eAAN,CAAsBnR,KAAK,CAACyD,GAAN,CAAU,KAAV,CAAtB,CAAP;EACD;;;;;;;;;;;EAUDsmC,EAAAA,eAAe,CAAC3P,QAAD,EAAWoE,MAAX,EAAmBna,aAAnB,EAAkC;EAC/C,SAAK,IAAIjkB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGikB,aAAa,CAAC5iB,IAAlC,EAAwC,EAAErB,CAA1C,EAA6C;EAC3CikB,MAAAA,aAAa,CAACvf,GAAd,CAAkB1E,CAAlB,EAAqB,KAAKqqC,KAAL,CAAWK,MAAX,CAAkBtM,MAAM,CAACp+B,CAAD,CAAxB,CAArB,EAAmDikB,aAAa,CAAC1gB,GAAd,CAAkBvD,CAAlB,EAAqB,KAAKqqC,KAAL,CAAWK,MAAX,CAAkBtM,MAAM,CAACp+B,CAAD,CAAxB,CAArB,IAAqD,CAAxG;EACD,KAH8C;;;EAM/C,QAAI4pC,KAAK,GAAG3lB,aAAZ;;EACA,SAAKjkB,CAAC,GAAG,KAAK8nB,KAAL,CAAW/nB,MAAX,GAAoB,CAA7B,EAAgCC,CAAC,IAAI,CAArC,EAAwC,EAAEA,CAA1C,EAA6C;EAC3C,UAAIuW,CAAC,GAAGvW,CAAC,GAAG,CAAJ,GAAQ,KAAK8nB,KAAL,CAAW9nB,CAAC,GAAG,CAAf,EAAkBuW,CAA1B,GAA8ByjB,QAAtC;EACA4P,MAAAA,KAAK,GAAG,KAAK9hB,KAAL,CAAW9nB,CAAX,EAAc2pC,eAAd,CAA8BC,KAA9B,EAAqCrzB,CAArC,CAAR;EACD;;EAED,SAAKvW,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAG,KAAK8nB,KAAL,CAAW/nB,MAA3B,EAAmC,EAAEC,CAArC,EAAwC;EACtC,WAAK8nB,KAAL,CAAW9nB,CAAX,EAAcgqC,MAAd;EACD;EACF;;;;;;;;EAOD5hB,EAAAA,OAAO,CAAC4R,QAAD,EAAW;EAChBA,IAAAA,QAAQ,GAAGyP,MAAQ,CAACpiC,MAAT,CAAgBI,WAAhB,CAA4BuyB,QAA5B,CAAX;EACA,QAAI4Q,OAAO,GAAG,IAAIrqC,KAAJ,CAAUy5B,QAAQ,CAAC34B,IAAnB,CAAd;EACA,QAAI4iB,aAAa,GAAG,KAAK0mB,SAAL,CAAe3Q,QAAf,CAApB;;EACA,SAAK,IAAIh6B,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGg6B,QAAQ,CAAC34B,IAA7B,EAAmC,EAAErB,CAArC,EAAwC;EACtC4qC,MAAAA,OAAO,CAAC5qC,CAAD,CAAP,GAAa,KAAKqqC,KAAL,CAAWO,OAAX,CAAmB3mB,aAAa,CAAC5S,WAAd,CAA0BrR,CAA1B,EAA6B,CAA7B,CAAnB,CAAb;EACD;;EAED,WAAO4qC,OAAP;EACD;;;;;;;EAMD18B,EAAAA,MAAM,GAAG;EACP,QAAI4Z,KAAK,GAAG;EACVA,MAAAA,KAAK,EAAE,KADG;EAEVqiB,MAAAA,YAAY,EAAE,KAAKA,YAFT;EAGVlR,MAAAA,UAAU,EAAE,KAAKA,UAHP;EAIVmR,MAAAA,YAAY,EAAE,KAAKA,YAJT;EAKVnB,MAAAA,cAAc,EAAE,KAAKA,cALX;EAMVb,MAAAA,UAAU,EAAE,KAAKA,UANP;EAOVe,MAAAA,eAAe,EAAE,KAAKA,eAPZ;EAQVkB,MAAAA,KAAK,EAAE,KAAKA,KARF;EASVC,MAAAA,MAAM,EAAE,IAAI/pC,KAAJ,CAAU,KAAKunB,KAAL,CAAW/nB,MAArB;EATE,KAAZ;;EAYA,SAAK,IAAIC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK8nB,KAAL,CAAW/nB,MAA/B,EAAuC,EAAEC,CAAzC,EAA4C;EAC1C8nB,MAAAA,KAAK,CAACwiB,MAAN,CAAatqC,CAAb,IAAkB,KAAK8nB,KAAL,CAAW9nB,CAAX,EAAckO,MAAd,EAAlB;EACD;;EAED,WAAO4Z,KAAP;EACD;;;;;;;;EAOD,SAAOS,IAAP,CAAYT,KAAZ,EAAmB;EACjB,QAAIA,KAAK,CAACA,KAAN,KAAgB,KAApB,EAA2B;EACzB,YAAM,IAAIpnB,UAAJ,CAAe,iDAAf,CAAN;EACD;;EAED,WAAO,IAAIwpC,yBAAJ,CAA8BpiB,KAA9B,CAAP;EACD;;EA5M6B;;;;;;;;;;EAsNhC,SAAS2iB,WAAT,CAAqBxnC,KAArB,EAA4B;EAC1B,MAAIynC,MAAM,GAAG,EAAb;EACA,MAAIE,OAAO,GAAG,EAAd;EACA,MAAIzpC,KAAK,GAAG,CAAZ;;EACA,OAAK,IAAInB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGiD,KAAK,CAAClD,MAA1B,EAAkCC,CAAC,IAAI,CAAvC,EAA0C;EACxC,QAAI0qC,MAAM,CAACznC,KAAK,CAACjD,CAAD,CAAN,CAAN,KAAqBK,SAAzB,EAAoC;EAClCqqC,MAAAA,MAAM,CAACznC,KAAK,CAACjD,CAAD,CAAN,CAAN,GAAmBmB,KAAnB;EACAypC,MAAAA,OAAO,CAACzpC,KAAD,CAAP,GAAiB8B,KAAK,CAACjD,CAAD,CAAtB;EACAmB,MAAAA,KAAK;EACN;EACF;;EAED,SAAO;EACLupC,IAAAA,MAAM,EAAEA,MADH;EAELE,IAAAA,OAAO,EAAEA;EAFJ,GAAP;EAID;;EAED,4BAAc,GAAGV,yBAAjB;;ECzcA,SAASW,UAAT,CAAoBxmC,CAApB,EAAuBuR,CAAvB,EAA0Bk1B,OAA1B,EAAmCC,GAAnC,EAAwC;EACpC,OAAK1mC,CAAL,GAASA,CAAT;EACA,OAAKuR,CAAL,GAASA,CAAT;EACA,OAAKk1B,OAAL,GAAeA,OAAf;EACA,OAAKC,GAAL,GAAWA,GAAX;EACA,OAAKC,SAAL,GAAiB,EAAjB;EACH;;EAEDH,UAAU,CAACvrC,SAAX,CAAqB2rC,aAArB,GAAqC,SAASA,aAAT,CAAuBC,MAAvB,EAA+Bd,YAA/B,EAA6Ce,SAA7C,EAAwD;EACzF,OAAK,IAAInrC,CAAC,GAAG,CAAR,EAAWsf,EAAE,GAAG,KAAKwrB,OAAL,CAAa/qC,MAAlC,EAA0CC,CAAC,GAAGsf,EAA9C,EAAkDtf,CAAC,EAAnD,EAAuD;EACnD,SAAK8qC,OAAL,CAAa9qC,CAAb,KAAmBoqC,YAAY,GAAGe,SAAf,IAA4BD,MAAM,CAAClrC,CAAD,CAAN,GAAY,KAAK8qC,OAAL,CAAa9qC,CAAb,CAAxC,CAAnB;EACH;EACJ,CAJD;;EAMA6qC,UAAU,CAACvrC,SAAX,CAAqB8rC,WAArB,GAAmC,SAASA,WAAT,CAAqBC,SAArB,EAAgC;EAC/D,SAAOtmC,IAAI,CAACpF,GAAL,CAASoF,IAAI,CAAC0F,GAAL,CAAS,KAAKpG,CAAL,GAASgnC,SAAS,CAAChnC,CAA5B,CAAT,EAAyCU,IAAI,CAAC0F,GAAL,CAAS,KAAKmL,CAAL,GAASy1B,SAAS,CAACz1B,CAA5B,CAAzC,CAAP;EACH,CAFD;;EAIAi1B,UAAU,CAACvrC,SAAX,CAAqBgsC,gBAArB,GAAwC,SAASA,gBAAT,CAA0BD,SAA1B,EAAqC;EACzE,MAAIE,KAAK,GAAGxmC,IAAI,CAAC0F,GAAL,CAAS,KAAKpG,CAAL,GAASgnC,SAAS,CAAChnC,CAA5B,CAAZ;EAAA,MACImnC,KAAK,GAAGzmC,IAAI,CAAC0F,GAAL,CAAS,KAAKmL,CAAL,GAASy1B,SAAS,CAACz1B,CAA5B,CADZ;EAEA,SAAO7Q,IAAI,CAACpF,GAAL,CAASoF,IAAI,CAAC9E,GAAL,CAASsrC,KAAT,EAAgB,KAAKR,GAAL,CAASU,OAAT,CAAiBpnC,CAAjB,GAAqBknC,KAArC,CAAT,EAAsDxmC,IAAI,CAAC9E,GAAL,CAASurC,KAAT,EAAgB,KAAKT,GAAL,CAASU,OAAT,CAAiB71B,CAAjB,GAAqB41B,KAArC,CAAtD,CAAP;EACH,CAJD;;EAMAX,UAAU,CAACvrC,SAAX,CAAqBosC,YAArB,GAAoC,SAASA,YAAT,CAAsBC,EAAtB,EAA0B;EAC1D,MAAI,CAAC,KAAKX,SAAL,CAAeW,EAAf,CAAL,EAAyB;EACrB,SAAKX,SAAL,CAAeW,EAAf,IAAqB,IAAIprC,KAAJ,CAAU,CAAV,CAArB,CADqB;;EAIrB,QAAImD,CAAJ;;EACA,QAAI,KAAKioC,EAAL,IAAW,CAAf,EAAkB;EACdjoC,MAAAA,CAAC,GAAG,KAAKioC,EAAL,IAAW,CAAf;EACH,KAFD,MAEO,IAAI,KAAKZ,GAAL,CAASa,KAAb,EAAoB;EACvBloC,MAAAA,CAAC,GAAG,KAAKqnC,GAAL,CAASU,OAAT,CAAiBE,EAAjB,IAAuB,CAA3B;EACH;;EACD,QAAI,OAAOjoC,CAAP,KAAa,WAAjB,EAA8B;EAC1B,UAAIW,CAAJ,EAAOuR,CAAP;;EACA,UAAI+1B,EAAE,KAAK,GAAX,EAAgB;EACZtnC,QAAAA,CAAC,GAAGX,CAAJ;EACAkS,QAAAA,CAAC,GAAG,KAAKA,CAAT;EACH,OAHD,MAGO;EACHvR,QAAAA,CAAC,GAAG,KAAKA,CAAT;EACAuR,QAAAA,CAAC,GAAGlS,CAAJ;EACH;;EACD,WAAKsnC,SAAL,CAAeW,EAAf,EAAmB,CAAnB,IAAwB,KAAKZ,GAAL,CAASpb,KAAT,CAAetrB,CAAf,EAAkBuR,CAAlB,CAAxB;EACH,KApBoB;;;EAuBrB,QAAIgN,CAAJ;;EACA,QAAI,KAAK+oB,EAAL,IAAY,KAAKZ,GAAL,CAASU,OAAT,CAAiBE,EAAjB,IAAuB,CAAvC,EAA2C;EACvC/oB,MAAAA,CAAC,GAAG,KAAK+oB,EAAL,IAAW,CAAf;EACH,KAFD,MAEO,IAAI,KAAKZ,GAAL,CAASa,KAAb,EAAoB;EACvBhpB,MAAAA,CAAC,GAAG,CAAJ;EACH;;EACD,QAAI,OAAOA,CAAP,KAAa,WAAjB,EAA8B;EAC1B,UAAI+oB,EAAE,KAAK,GAAX,EAAgB;EACZtnC,QAAAA,CAAC,GAAGue,CAAJ;EACAhN,QAAAA,CAAC,GAAG,KAAKA,CAAT;EACH,OAHD,MAGO;EACHvR,QAAAA,CAAC,GAAG,KAAKA,CAAT;EACAuR,QAAAA,CAAC,GAAGgN,CAAJ;EACH;;EACD,WAAKooB,SAAL,CAAeW,EAAf,EAAmB,CAAnB,IAAwB,KAAKZ,GAAL,CAASpb,KAAT,CAAetrB,CAAf,EAAkBuR,CAAlB,CAAxB;EACH;EACJ;;EACD,SAAO,KAAKo1B,SAAL,CAAeW,EAAf,CAAP;EACH,CA1CD;;EA4CAd,UAAU,CAACvrC,SAAX,CAAqBusC,MAArB,GAA8B,SAASA,MAAT,CAAgBF,EAAhB,EAAoBrO,OAApB,EAA6B;EACvD,MAAI0N,SAAS,GAAG,KAAKU,YAAL,CAAkBC,EAAlB,CAAhB;EAAA,MACIjb,QAAQ,GAAG,KAAKqa,GAAL,CAASra,QADxB;EAAA,MAEIob,YAFJ;EAAA,MAGIC,SAHJ;;EAIA,MAAGf,SAAS,CAAC,CAAD,CAAZ,EAAiB;EACb,QAAIA,SAAS,CAAC,CAAD,CAAb,EAAkB;EACd,UAAIgB,KAAK,GAAGtb,QAAQ,CAAC4M,OAAD,EAAU0N,SAAS,CAAC,CAAD,CAAT,CAAaF,OAAvB,CAApB;EAAA,UACImB,KAAK,GAAGvb,QAAQ,CAAC4M,OAAD,EAAU0N,SAAS,CAAC,CAAD,CAAT,CAAaF,OAAvB,CADpB;;EAEA,UAAGkB,KAAK,GAAGC,KAAX,EAAkB;EACdH,QAAAA,YAAY,GAAGd,SAAS,CAAC,CAAD,CAAxB;EACAe,QAAAA,SAAS,GAAG,CAAC,CAAb;EACH,OAHD,MAGO;EACHD,QAAAA,YAAY,GAAGd,SAAS,CAAC,CAAD,CAAxB;EACAe,QAAAA,SAAS,GAAG,CAAZ;EACH;EACJ,KAVD,MAUO;EACHD,MAAAA,YAAY,GAAGd,SAAS,CAAC,CAAD,CAAxB;EACAe,MAAAA,SAAS,GAAG,CAAC,CAAb;EACH;EACJ,GAfD,MAeO;EACHD,IAAAA,YAAY,GAAGd,SAAS,CAAC,CAAD,CAAxB;EACAe,IAAAA,SAAS,GAAG,CAAZ;EACH;;EACD,MAAIG,IAAI,GAAG,IAAIxb,QAAQ,CAAC4M,OAAD,EAAU,KAAKwN,OAAf,CAAvB;EAAA,MACIqB,IAAI,GAAG,IAAIzb,QAAQ,CAAC4M,OAAD,EAAUwO,YAAY,CAAChB,OAAvB,CADvB;EAEA,MAAI9pC,MAAM,GAAI,CAACkrC,IAAI,GAAGC,IAAR,KAAiB,IAAID,IAAJ,GAAWC,IAA5B,CAAd;EACA,SAAO,MAAM,MAAMnrC,MAAN,GAAe+qC,SAA5B;EACH,CA5BD;;EA8BAlB,UAAU,CAACvrC,SAAX,CAAqB8sC,WAArB,GAAmC,SAASA,WAAT,CAAqB9O,OAArB,EAA8B;EAC7D,SAAO,CACH,KAAKuO,MAAL,CAAY,GAAZ,EAAiBvO,OAAjB,CADG,EAEH,KAAKuO,MAAL,CAAY,GAAZ,EAAiBvO,OAAjB,CAFG,CAAP;EAIH,CALD;;EAOA,cAAc,GAAGuN,UAAjB;;ECvGA,SAASwB,aAAT,CAAuBhoC,CAAvB,EAA0BuR,CAA1B,EAA6Bk1B,OAA7B,EAAsCC,GAAtC,EAA2C;EAEvCF,EAAAA,UAAU,CAACprC,IAAX,CAAgB,IAAhB,EAAsB4E,CAAtB,EAAyBuR,CAAzB,EAA4Bk1B,OAA5B,EAAqCC,GAArC;EAEA,OAAKuB,EAAL,GAAUjoC,CAAC,GAAGU,IAAI,CAACwG,KAAL,CAAWqK,CAAC,GAAG,CAAf,CAAd;EACA,OAAK+M,CAAL,GAAS,IAAI,KAAK2pB,EAAT,GAAc12B,CAAvB;EAEH;;EAEDy2B,aAAa,CAAC/sC,SAAd,GAA0B,IAAIurC,UAAJ,EAA1B;EACAwB,aAAa,CAAC/sC,SAAd,CAAwBsG,WAAxB,GAAsCymC,aAAtC;;EAEAA,aAAa,CAAC/sC,SAAd,CAAwB8rC,WAAxB,GAAsC,SAASmB,oBAAT,CAA8BlB,SAA9B,EAAyC;EAC3E,SAAOtmC,IAAI,CAACpF,GAAL,CAASoF,IAAI,CAAC0F,GAAL,CAAS,KAAK6hC,EAAL,GAAUjB,SAAS,CAACiB,EAA7B,CAAT,EAA2CvnC,IAAI,CAAC0F,GAAL,CAAS,KAAKmL,CAAL,GAASy1B,SAAS,CAACz1B,CAA5B,CAA3C,EAA2E7Q,IAAI,CAAC0F,GAAL,CAAS,KAAKkY,CAAL,GAAS0oB,SAAS,CAAC1oB,CAA5B,CAA3E,CAAP;EACH,CAFD;;EAIA0pB,aAAa,CAAC/sC,SAAd,CAAwBgsC,gBAAxB,GAA2C,SAASA,gBAAT,CAA0BD,SAA1B,EAAqC;EAC5E,MAAIE,KAAK,GAAGxmC,IAAI,CAAC0F,GAAL,CAAS,KAAK6hC,EAAL,GAAUjB,SAAS,CAACiB,EAA7B,CAAZ;EAAA,MACId,KAAK,GAAGzmC,IAAI,CAAC0F,GAAL,CAAS,KAAKmL,CAAL,GAASy1B,SAAS,CAACz1B,CAA5B,CADZ;EAAA,MAEI42B,KAAK,GAAGznC,IAAI,CAAC0F,GAAL,CAAS,KAAKkY,CAAL,GAAS0oB,SAAS,CAAC1oB,CAA5B,CAFZ;EAGA,SAAO5d,IAAI,CAACpF,GAAL,CAASoF,IAAI,CAAC9E,GAAL,CAASsrC,KAAT,EAAgB,KAAKR,GAAL,CAASU,OAAT,CAAiBpnC,CAAjB,GAAqBknC,KAArC,CAAT,EAAsDxmC,IAAI,CAAC9E,GAAL,CAASurC,KAAT,EAAgB,KAAKT,GAAL,CAASU,OAAT,CAAiB71B,CAAjB,GAAqB41B,KAArC,CAAtD,EAAmGzmC,IAAI,CAAC9E,GAAL,CAASusC,KAAT,EAAgB,KAAKzB,GAAL,CAASU,OAAT,CAAiB9oB,CAAjB,GAAqB6pB,KAArC,CAAnG,CAAP;EACH,CALD;;EAOAH,aAAa,CAAC/sC,SAAd,CAAwB8sC,WAAxB,GAAsC,SAASA,WAAT,GAAuB;EACzD,QAAM,IAAI38B,KAAJ,CAAU,sEAAV,CAAN;EACH,CAFD;;EAIA,iBAAc,GAAG48B,aAAjB;;ECxBA,IAAIzkB,gBAAc,GAAG;EACjB6kB,EAAAA,MAAM,EAAE,CADS;EAEjBC,EAAAA,UAAU,EAAE3nC,IAAI,CAACkI,MAFA;EAGjByjB,EAAAA,QAAQ,EAAEic,eAHO;EAIjB1T,EAAAA,UAAU,EAAE,EAJK;EAKjBmR,EAAAA,YAAY,EAAE,GALG;EAMjBwC,EAAAA,QAAQ,EAAE,MANO;EAOjBhB,EAAAA,KAAK,EAAE,IAPU;EAQjBzZ,EAAAA,MAAM,EAAE;EARS,CAArB;;EAWA,SAAS0a,GAAT,CAAaxoC,CAAb,EAAgBuR,CAAhB,EAAmBzV,OAAnB,EAA4Bm6B,MAA5B,EAAoC;EAEhC,OAAKj2B,CAAL,GAASA,CAAT;EACA,OAAKuR,CAAL,GAASA,CAAT;EAEAzV,EAAAA,OAAO,GAAGA,OAAO,IAAI,EAArB;EACA,OAAKA,OAAL,GAAe,EAAf;;EACA,OAAK,IAAIH,CAAT,IAAc4nB,gBAAd,EAA8B;EAC1B,QAAIznB,OAAO,CAAC2sC,cAAR,CAAuB9sC,CAAvB,CAAJ,EAA+B;EAC3B,WAAKG,OAAL,CAAaH,CAAb,IAAkBG,OAAO,CAACH,CAAD,CAAzB;EACH,KAFD,MAEO;EACH,WAAKG,OAAL,CAAaH,CAAb,IAAkB4nB,gBAAc,CAAC5nB,CAAD,CAAhC;EACH;EACJ;;EAED,MAAI,OAAO,KAAKG,OAAL,CAAassC,MAApB,KAA+B,QAAnC,EAA6C;EACzC,SAAKM,UAAL,GAAkB,KAAK5sC,OAAL,CAAassC,MAA/B;EACH,GAFD,MAEO,IAAIlsC,KAAK,CAACV,OAAN,CAAc,KAAKM,OAAL,CAAassC,MAA3B,CAAJ,EAAwC;EAC3C,SAAKM,UAAL,GAAkB,KAAK5sC,OAAL,CAAassC,MAAb,CAAoB1sC,MAAtC;EACA,QAAIitC,UAAU,GAAGC,aAAa,CAAC,KAAK9sC,OAAL,CAAassC,MAAd,CAA9B;EACA,SAAKS,SAAL,GAAiBF,UAAU,CAACE,SAA5B;EACA,SAAKC,OAAL,GAAeH,UAAU,CAACG,OAA1B;EACH,GALM,MAKA;EACH,UAAM,IAAI19B,KAAJ,CAAU,2BAAV,CAAN;EACH;;EAED,MAAI,KAAKtP,OAAL,CAAaysC,QAAb,KAA0B,MAA9B,EAAsC;EAClC,SAAKQ,QAAL,GAAgBvC,UAAhB;EACA,SAAKY,OAAL,GAAe;EACXpnC,MAAAA,CAAC,EAAEA,CADQ;EAEXuR,MAAAA,CAAC,EAAEA;EAFQ,KAAf;EAIH,GAND,MAMO;EACH,SAAKw3B,QAAL,GAAgBf,aAAhB;EACA,QAAIgB,EAAE,GAAG,KAAKhpC,CAAL,GAASU,IAAI,CAACwG,KAAL,CAAW,KAAKqK,CAAL,GAAS,CAApB,CAAlB;EACA,SAAK61B,OAAL,GAAe;EACXpnC,MAAAA,CAAC,EAAEgpC,EADQ;EAEXz3B,MAAAA,CAAC,EAAE,KAAKA,CAFG;EAGX+M,MAAAA,CAAC,EAAE,EAAE,IAAI0qB,EAAJ,GAAS,KAAKz3B,CAAhB;EAHQ,KAAf;EAKH;;EAED,OAAKg2B,KAAL,GAAa,KAAKzrC,OAAL,CAAayrC,KAA1B;EACA,OAAK0B,cAAL,GAAsB,KAAK1B,KAAL,GAAa,kBAAb,GAAkC,aAAxD;EAEA,OAAKlb,QAAL,GAAgB,KAAKvwB,OAAL,CAAauwB,QAA7B;EAEA,OAAK6L,WAAL,GAAmBgR,cAAc,CAAC,KAAK7c,QAAN,EAAgB,KAAKqc,UAArB,CAAjC;;EAEA,MAAIzS,MAAM,KAAK,IAAf,EAAqB;;EACjB,SAAKkT,IAAL,GAAY,IAAZ;EACA;EACH;;EACD,MAAI,EAAEnpC,CAAC,GAAG,CAAJ,IAASuR,CAAC,GAAG,CAAf,CAAJ,EAAuB;EACnB,UAAM,IAAInG,KAAJ,CAAU,0BAAV,CAAN;EACH;;EAED,OAAKg+B,KAAL,GAAa;EACTC,IAAAA,OAAO,EAAE,CADA;EAETC,IAAAA,MAAM,EAAE;EAFC,GAAb;EAKA,OAAKjB,UAAL,GAAkB,KAAKvsC,OAAL,CAAausC,UAA/B;EAEA,OAAKkB,cAAL,GAAsB,CAAtB;EACA,OAAK3U,UAAL,GAAkB,KAAK94B,OAAL,CAAa84B,UAA/B;EAEA,OAAK4U,iBAAL,GAAyB,KAAKzD,YAAL,GAAoB,KAAKjqC,OAAL,CAAaiqC,YAA1D;EAEA,OAAK0D,SAAL,GAAiB/oC,IAAI,CAACwG,KAAL,CAAWxG,IAAI,CAACpF,GAAL,CAAS0E,CAAT,EAAYuR,CAAZ,IAAiB,CAA5B,CAAjB;EAEA,OAAKm4B,eAAL,GAAuB,KAAK5tC,OAAL,CAAagyB,MAApC;;EAEA,OAAK6b,UAAL;;EAEA,OAAKR,IAAL,GAAY,KAAZ;EACH;;EAEDX,GAAG,CAACtkB,IAAJ,GAAW,SAAS0lB,SAAT,CAAmBnmB,KAAnB,EAA0B4I,QAA1B,EAAoC;EAC3C,MAAI5I,KAAK,CAAC3kB,IAAN,KAAe,KAAnB,EAA0B;EACtB,QAAIkB,CAAC,GAAGyjB,KAAK,CAACta,IAAN,CAAWzN,MAAnB;EAAA,QACI6V,CAAC,GAAGkS,KAAK,CAACta,IAAN,CAAW,CAAX,EAAczN,MADtB;;EAEA,QAAI2wB,QAAJ,EAAc;EACV5I,MAAAA,KAAK,CAAC3nB,OAAN,CAAcuwB,QAAd,GAAyBA,QAAzB;EACH,KAFD,MAEO,IAAI5I,KAAK,CAAC3nB,OAAN,CAAcuwB,QAAlB,EAA4B;EAC/B5I,MAAAA,KAAK,CAAC3nB,OAAN,CAAcuwB,QAAd,GAAyBwd,IAAI,CAAC,MAAMpmB,KAAK,CAAC3nB,OAAN,CAAcuwB,QAApB,GAA+B,GAAhC,CAA7B;EACH;;EACD,QAAIqa,GAAG,GAAG,IAAI8B,GAAJ,CAAQxoC,CAAR,EAAWuR,CAAX,EAAckS,KAAK,CAAC3nB,OAApB,EAA6B,IAA7B,CAAV;EACA4qC,IAAAA,GAAG,CAACpb,KAAJ,GAAY,IAAIpvB,KAAJ,CAAU8D,CAAV,CAAZ;;EACA,SAAK,IAAIrE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGqE,CAApB,EAAuBrE,CAAC,EAAxB,EAA4B;EACxB+qC,MAAAA,GAAG,CAACpb,KAAJ,CAAU3vB,CAAV,IAAe,IAAIO,KAAJ,CAAUqV,CAAV,CAAf;;EACA,WAAK,IAAItS,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGsS,CAApB,EAAuBtS,CAAC,EAAxB,EAA4B;EACxBynC,QAAAA,GAAG,CAACpb,KAAJ,CAAU3vB,CAAV,EAAasD,CAAb,IAAkB,IAAIynC,GAAG,CAACqC,QAAR,CAAiBptC,CAAjB,EAAoBsD,CAApB,EAAuBwkB,KAAK,CAACta,IAAN,CAAWxN,CAAX,EAAcsD,CAAd,CAAvB,EAAyCynC,GAAzC,CAAlB;EACH;EACJ;;EACD,WAAOA,GAAP;EACH,GAjBD,MAiBO;EACH,UAAM,IAAIt7B,KAAJ,CAAU,uBAAV,CAAN;EACH;EACJ,CArBD;;EAuBAo9B,GAAG,CAACvtC,SAAJ,CAAc6uC,MAAd,GAAuB,SAASC,WAAT,CAAqBC,eAArB,EAAsC;EACzD,MAAI,CAAC,KAAKb,IAAV,EAAgB;EACZ,UAAM,IAAI/9B,KAAJ,CAAU,wBAAV,CAAN;EACH;;EACD,MAAIqY,KAAK,GAAG;EACR3kB,IAAAA,IAAI,EAAE;EADE,GAAZ;EAGA2kB,EAAAA,KAAK,CAAC3nB,OAAN,GAAgB;EACZssC,IAAAA,MAAM,EAAE,KAAKtsC,OAAL,CAAassC,MADT;EAEZG,IAAAA,QAAQ,EAAE,KAAKzsC,OAAL,CAAaysC,QAFX;EAGZhB,IAAAA,KAAK,EAAE,KAAKzrC,OAAL,CAAayrC;EAHR,GAAhB;EAKA9jB,EAAAA,KAAK,CAACta,IAAN,GAAa,IAAIjN,KAAJ,CAAU,KAAK8D,CAAf,CAAb;;EACA,OAAK,IAAIrE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKqE,CAAzB,EAA4BrE,CAAC,EAA7B,EAAiC;EAC7B8nB,IAAAA,KAAK,CAACta,IAAN,CAAWxN,CAAX,IAAgB,IAAIO,KAAJ,CAAU,KAAKqV,CAAf,CAAhB;;EACA,SAAK,IAAItS,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKsS,CAAzB,EAA4BtS,CAAC,EAA7B,EAAiC;EAC7BwkB,MAAAA,KAAK,CAACta,IAAN,CAAWxN,CAAX,EAAcsD,CAAd,IAAmB,KAAKqsB,KAAL,CAAW3vB,CAAX,EAAcsD,CAAd,EAAiBwnC,OAApC;EACH;EACJ;;EACD,MAAIuD,eAAJ,EAAqB;EACjBvmB,IAAAA,KAAK,CAAC3nB,OAAN,CAAcuwB,QAAd,GAAyB,KAAKA,QAAL,CAActxB,QAAd,EAAzB;EACH;;EACD,SAAO0oB,KAAP;EACH,CAvBD;;EAyBA+kB,GAAG,CAACvtC,SAAJ,CAAc0uC,UAAd,GAA2B,SAASM,SAAT,GAAqB;EAC5C,MAAIlY,GAAG,GAAGD,IAAI,CAACC,GAAL,EAAV;EAAA,MACIp2B,CADJ;EAAA,MACOsD,CADP;EAAA,MACUsL,CADV;EAEA,OAAK+gB,KAAL,GAAa,IAAIpvB,KAAJ,CAAU,KAAK8D,CAAf,CAAb;;EACA,OAAKrE,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAG,KAAKqE,CAArB,EAAwBrE,CAAC,EAAzB,EAA6B;EACzB,SAAK2vB,KAAL,CAAW3vB,CAAX,IAAgB,IAAIO,KAAJ,CAAU,KAAKqV,CAAf,CAAhB;;EACA,SAAKtS,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAG,KAAKsS,CAArB,EAAwBtS,CAAC,EAAzB,EAA6B;EACzB,UAAIwnC,OAAO,GAAG,IAAIvqC,KAAJ,CAAU,KAAKwsC,UAAf,CAAd;;EACA,WAAKn+B,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAG,KAAKm+B,UAArB,EAAiCn+B,CAAC,EAAlC,EAAsC;EAClCk8B,QAAAA,OAAO,CAACl8B,CAAD,CAAP,GAAa,KAAK89B,UAAL,EAAb;EACH;;EACD,WAAK/c,KAAL,CAAW3vB,CAAX,EAAcsD,CAAd,IAAmB,IAAI,KAAK8pC,QAAT,CAAkBptC,CAAlB,EAAqBsD,CAArB,EAAwBwnC,OAAxB,EAAiC,IAAjC,CAAnB;EACH;EACJ;;EACD,OAAK2C,KAAL,CAAWa,SAAX,GAAuBnY,IAAI,CAACC,GAAL,KAAaA,GAApC;EACH,CAfD;;EAiBAyW,GAAG,CAACvtC,SAAJ,CAAcivC,WAAd,GAA4B,SAASA,WAAT,CAAqBrmB,WAArB,EAAkC;EAC1D,MAAI,KAAKA,WAAT,EAAsB;EAClB,UAAM,IAAIzY,KAAJ,CAAU,mCAAV,CAAN;EACH;;EACD,MAAI2mB,GAAG,GAAGD,IAAI,CAACC,GAAL,EAAV;EACA,MAAIoY,YAAY,GAAGtmB,WAAnB;EACA,MAAIloB,CAAJ;EAAA,MAAOyN,CAAC,GAAGya,WAAW,CAACnoB,MAAvB;;EACA,MAAI,KAAKmtC,SAAT,EAAoB;EAChBsB,IAAAA,YAAY,GAAG,IAAIjuC,KAAJ,CAAUkN,CAAV,CAAf;;EACA,SAAKzN,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGyN,CAAhB,EAAmBzN,CAAC,EAApB,EAAwB;EACpBwuC,MAAAA,YAAY,CAACxuC,CAAD,CAAZ,GAAkB,KAAKktC,SAAL,CAAehlB,WAAW,CAACloB,CAAD,CAA1B,CAAlB;EACH;EACJ;;EACD,OAAKyuC,aAAL,GAAqB,KAAKxV,UAAL,GAAkBxrB,CAAvC;;EAEA,MAAI,KAAKsgC,eAAL,KAAyB,QAA7B,EAAuC;EACnC,SAAKW,YAAL,GAAoB,KAAKD,aAAL,GAAqB1pC,IAAI,CAAC0G,GAAL,CAAS,KAAKqiC,SAAd,CAAzC;EACH,GAFD,MAEO;EACH,SAAKY,YAAL,GAAoBjhC,CAAC,GAAG1I,IAAI,CAAC0G,GAAL,CAAS,KAAKqiC,SAAd,CAAxB;EACH;;EACD,OAAK5lB,WAAL,GAAmBsmB,YAAnB;EACA,OAAKf,KAAL,CAAWc,WAAX,GAAyBpY,IAAI,CAACC,GAAL,KAAaA,GAAtC;EACH,CAtBD;;EAwBAyW,GAAG,CAACvtC,SAAJ,CAAcqvC,QAAd,GAAyB,SAASA,QAAT,GAAoB;EACzC,MAAI,KAAKnB,IAAT,EAAe;EAEX,WAAO,KAAP;EAEH,GAJD,MAIO,IAAI,KAAKiB,aAAL,KAAuB,CAA3B,EAA8B;EAEjC,QAAIG,mBAAJ,EACIhmB,aADJ,EAEIimB,iBAFJ;;EAIA,QAAI,KAAKd,eAAL,KAAyB,QAA7B,EAAuC;;EACnCa,MAAAA,mBAAmB,GAAG,KAAKd,SAAL,GAAiB/oC,IAAI,CAACsG,GAAL,CAAS,CAAC,KAAKuiC,cAAN,GAAuB,KAAKc,YAArC,CAAvC;EACA9lB,MAAAA,aAAa,GAAGkmB,cAAc,CAAC,KAAK5mB,WAAN,EAAmB,KAAKwkB,UAAxB,CAA9B;;EACA,WAAK1gB,OAAL,CAAapD,aAAb,EAA4BgmB,mBAA5B;;EACA,WAAKxE,YAAL,GAAoB,KAAKyD,iBAAL,GAAyB9oC,IAAI,CAACsG,GAAL,CAAS,CAAC,KAAKuiC,cAAN,GAAuB,KAAKa,aAArC,CAA7C;EACH,KALD,MAKO;;EACHI,MAAAA,iBAAiB,GAAG,CAAC9pC,IAAI,CAACwG,KAAL,CAAW,KAAKqiC,cAAL,GAAsB,KAAK1lB,WAAL,CAAiBnoB,MAAlD,CAArB;EACA6uC,MAAAA,mBAAmB,GAAG,KAAKd,SAAL,GAAiB/oC,IAAI,CAACsG,GAAL,CAASwjC,iBAAiB,GAAG,KAAKH,YAAlC,CAAvC;EACA9lB,MAAAA,aAAa,GAAG,KAAKV,WAAL,CAAiB,KAAK0lB,cAAL,GAAsB,KAAK1lB,WAAL,CAAiBnoB,MAAxD,CAAhB;;EACA,WAAKisB,OAAL,CAAapD,aAAb,EAA4BgmB,mBAA5B;;EACA,UAAK,CAAC,KAAKhB,cAAL,GAAsB,CAAvB,IAA4B,KAAK1lB,WAAL,CAAiBnoB,MAA9C,KAA0D,CAA9D,EAAiE;EAC7D,aAAKqqC,YAAL,GAAoB,KAAKyD,iBAAL,GAAyB9oC,IAAI,CAACsG,GAAL,CAASwjC,iBAAiB,GAAG9pC,IAAI,CAACwG,KAAL,CAAW,KAAKkjC,aAAL,GAAqB,KAAKvmB,WAAL,CAAiBnoB,MAAjD,CAA7B,CAA7C;EACH;EACJ;;EAED,SAAK6tC,cAAL;EAEA,WAAO,IAAP;EAEH,GAzBM,MAyBA;EAEH,SAAKJ,IAAL,GAAY,IAAZ;EACA,WAAO,KAAP;EAEH;EACJ,CApCD;;EAsCAX,GAAG,CAACvtC,SAAJ,CAAc0sB,OAAd,GAAwB,SAAS2hB,MAAT,CAAgB/kB,aAAhB,EAA+BgmB,mBAA/B,EAAoD;EACxE,MAAIxY,GAAG,GAAGD,IAAI,CAACC,GAAL,EAAV;EAAA,MACI/xB,CADJ;EAAA,MACOuR,CADP;EAAA,MACUic,IADV;EAAA,MACgBsZ,SADhB;;EAGA,MAAI4D,GAAG,GAAG,KAAKC,qBAAL,CAA2BpmB,aAA3B,CAAV;;EAEA,MAAIqmB,IAAI,GAAG9Y,IAAI,CAACC,GAAL,EAAX;EACA,OAAKqX,KAAL,CAAWC,OAAX,IAAsBuB,IAAI,GAAG7Y,GAA7B;EAEA,MAAI8Y,WAAW,GAAGnqC,IAAI,CAACwG,KAAL,CAAWqjC,mBAAX,CAAlB;EACA,MAAIO,IAAI,GAAGJ,GAAG,CAAC1qC,CAAJ,GAAQ6qC,WAAnB;EAAA,MACIE,IAAI,GAAGL,GAAG,CAAC1qC,CAAJ,GAAQ6qC,WADnB;EAAA,MAEIG,IAAI,GAAGN,GAAG,CAACn5B,CAAJ,GAAQs5B,WAFnB;EAAA,MAGII,IAAI,GAAGP,GAAG,CAACn5B,CAAJ,GAAQs5B,WAHnB;;EAKA,OAAK7qC,CAAC,GAAG8qC,IAAT,EAAe9qC,CAAC,IAAI+qC,IAApB,EAA0B/qC,CAAC,EAA3B,EAA+B;EAC3B,QAAIkrC,IAAI,GAAGlrC,CAAX;;EACA,QAAIA,CAAC,GAAG,CAAR,EAAW;EACPkrC,MAAAA,IAAI,IAAI,KAAKlrC,CAAb;EACH,KAFD,MAEO,IAAIA,CAAC,IAAI,KAAKA,CAAd,EAAiB;EACpBkrC,MAAAA,IAAI,IAAI,KAAKlrC,CAAb;EACH;;EACD,SAAKuR,CAAC,GAAGy5B,IAAT,EAAez5B,CAAC,IAAI05B,IAApB,EAA0B15B,CAAC,EAA3B,EAA+B;EAC3B,UAAI45B,IAAI,GAAG55B,CAAX;;EACA,UAAIA,CAAC,GAAG,CAAR,EAAW;EACP45B,QAAAA,IAAI,IAAI,KAAK55B,CAAb;EACH,OAFD,MAEO,IAAIA,CAAC,IAAI,KAAKA,CAAd,EAAiB;EACpB45B,QAAAA,IAAI,IAAI,KAAK55B,CAAb;EACH;;EAEDic,MAAAA,IAAI,GAAGkd,GAAG,CAAC,KAAKzB,cAAN,CAAH,CAAyB,KAAK3d,KAAL,CAAW4f,IAAX,EAAiBC,IAAjB,CAAzB,CAAP;;EAEA,UAAI3d,IAAI,GAAG+c,mBAAX,EAAgC;EAC5BzD,QAAAA,SAAS,GAAGpmC,IAAI,CAACsG,GAAL,CAAS,CAACwmB,IAAD,IAAS,IAAI+c,mBAAb,CAAT,CAAZ;EACA,aAAKjf,KAAL,CAAW4f,IAAX,EAAiBC,IAAjB,EAAuBvE,aAAvB,CAAqCriB,aAArC,EAAoD,KAAKwhB,YAAzD,EAAuEe,SAAvE;EACH;EAEJ;EACJ;;EAED,OAAKsC,KAAL,CAAWE,MAAX,IAAsBxX,IAAI,CAACC,GAAL,KAAa6Y,IAAnC;EAEH,CA1CD;;EA4CApC,GAAG,CAACvtC,SAAJ,CAAc4nB,KAAd,GAAsB,SAASA,KAAT,CAAegB,WAAf,EAA4B;EAC9C,MAAI,CAAC,KAAKslB,IAAV,EAAgB;EACZ,SAAKe,WAAL,CAAiBrmB,WAAjB;;EACA,WAAO,KAAKymB,QAAL,EAAP,EAAwB;EAE3B;EACJ,CAND;;EAQA9B,GAAG,CAACvtC,SAAJ,CAAcmwC,iBAAd,GAAkC,SAASA,iBAAT,GAA6B;EAC3D,MAAItpC,MAAM,GAAG,IAAI5F,KAAJ,CAAU,KAAK8D,CAAf,CAAb;;EACA,OAAK,IAAIrE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKqE,CAAzB,EAA4BrE,CAAC,EAA7B,EAAiC;EAC7BmG,IAAAA,MAAM,CAACnG,CAAD,CAAN,GAAY,IAAIO,KAAJ,CAAU,KAAKqV,CAAf,CAAZ;;EACA,SAAK,IAAItS,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKsS,CAAzB,EAA4BtS,CAAC,EAA7B,EAAiC;EAC7B,UAAIqkB,IAAI,GAAG,KAAKgI,KAAL,CAAW3vB,CAAX,EAAcsD,CAAd,CAAX;EACA6C,MAAAA,MAAM,CAACnG,CAAD,CAAN,CAAUsD,CAAV,IAAe,KAAK6pC,OAAL,GAAe,KAAKA,OAAL,CAAaxlB,IAAI,CAACmjB,OAAlB,CAAf,GAA4CnjB,IAAI,CAACmjB,OAAhE;EACH;EACJ;;EACD,SAAO3kC,MAAP;EACH,CAVD;;EAYA0mC,GAAG,CAACvtC,SAAJ,CAAc0vC,qBAAd,GAAsC,SAASU,oBAAT,CAA8BC,SAA9B,EAAyC;EAE3E,MAAIZ,GAAJ;EAAA,MACIa,MAAM,GAAGxpB,QADb;EAAA,MAEIyL,IAFJ;;EAIA,OAAK,IAAI7xB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKqE,CAAzB,EAA4BrE,CAAC,EAA7B,EAAiC;EAC7B,SAAK,IAAIsD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKsS,CAAzB,EAA4BtS,CAAC,EAA7B,EAAiC;EAC7BuuB,MAAAA,IAAI,GAAG,KAAKnB,QAAL,CAAc,KAAKf,KAAL,CAAW3vB,CAAX,EAAcsD,CAAd,EAAiBwnC,OAA/B,EAAwC6E,SAAxC,CAAP;;EACA,UAAI9d,IAAI,GAAG+d,MAAX,EAAmB;EACfA,QAAAA,MAAM,GAAG/d,IAAT;EACAkd,QAAAA,GAAG,GAAG,KAAKpf,KAAL,CAAW3vB,CAAX,EAAcsD,CAAd,CAAN;EACH;EACJ;EACJ;;EAED,SAAOyrC,GAAP;EAEH,CAlBD;;EAoBAlC,GAAG,CAACvtC,SAAJ,CAAc8oB,OAAd,GAAwB,SAASA,OAAT,CAAiB5a,IAAjB,EAAuBqiC,eAAvB,EAAwC;EAC5D,MAAI,OAAOriC,IAAP,KAAgB,SAApB,EAA+B;EAC3BqiC,IAAAA,eAAe,GAAGriC,IAAlB;EACAA,IAAAA,IAAI,GAAG,IAAP;EACH;;EACD,MAAI,CAACA,IAAL,EAAW;EACPA,IAAAA,IAAI,GAAG,KAAK0a,WAAZ;EACH;;EACD,MAAI3nB,KAAK,CAACV,OAAN,CAAc2N,IAAd,MAAwBjN,KAAK,CAACV,OAAN,CAAc2N,IAAI,CAAC,CAAD,CAAlB,KAA2B,OAAOA,IAAI,CAAC,CAAD,CAAX,KAAmB,QAAtE,CAAJ,EAAsF;;EAClF,QAAIsiC,IAAI,GAAG,IAAX;EACA,WAAOtiC,IAAI,CAAC2c,GAAL,CAAS,UAAUmT,OAAV,EAAmB;EAC/B,aAAOwS,IAAI,CAACC,QAAL,CAAczS,OAAd,EAAuBuS,eAAvB,CAAP;EACH,KAFM,CAAP;EAGH,GALD,MAKO;;EACH,WAAO,KAAKE,QAAL,CAAcviC,IAAd,EAAoBqiC,eAApB,CAAP;EACH;EACJ,CAhBD;;EAkBAhD,GAAG,CAACvtC,SAAJ,CAAcywC,QAAd,GAAyB,SAASA,QAAT,CAAkBzS,OAAlB,EAA2BuS,eAA3B,EAA4C;EACjE,MAAI,CAACtvC,KAAK,CAACV,OAAN,CAAcy9B,OAAd,CAAL,EAA6B;EACzBA,IAAAA,OAAO,GAAG,KAAK4P,SAAL,CAAe5P,OAAf,CAAV;EACH;;EACD,MAAIyR,GAAG,GAAG,KAAKC,qBAAL,CAA2B1R,OAA3B,CAAV;;EACA,MAAIn3B,MAAM,GAAG,CAAC4oC,GAAG,CAAC1qC,CAAL,EAAQ0qC,GAAG,CAACn5B,CAAZ,CAAb;;EACA,MAAIi6B,eAAJ,EAAqB;EACjB1pC,IAAAA,MAAM,CAAC,CAAD,CAAN,GAAY4oC,GAAG,CAAC3C,WAAJ,CAAgB9O,OAAhB,CAAZ;EACH;;EACD,SAAOn3B,MAAP;EACH,CAVD;;;EAaA0mC,GAAG,CAACvtC,SAAJ,CAAc0wC,oBAAd,GAAqC,SAASA,oBAAT,GAAgC;EACjE,MAAIC,GAAG,GAAG,KAAKC,MAAL,EAAV;EAAA,MACIziC,CAAC,GAAGwiC,GAAG,CAAClwC,MADZ;EAAA,MAEIsD,GAAG,GAAG,CAFV;;EAGA,OAAK,IAAIrD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGyN,CAApB,EAAuBzN,CAAC,EAAxB,EAA4B;EACxBqD,IAAAA,GAAG,IAAI4sC,GAAG,CAACjwC,CAAD,CAAV;EACH;;EACD,SAAOqD,GAAG,GAAGoK,CAAb;EACH,CARD;;EAUAo/B,GAAG,CAACvtC,SAAJ,CAAc4wC,MAAd,GAAuB,SAASA,MAAT,CAAgBzkB,OAAhB,EAAyB;EAC5C,MAAI,CAACA,OAAL,EAAc;EACVA,IAAAA,OAAO,GAAG,KAAKvD,WAAf;EACH;;EACD,MAAIza,CAAC,GAAGge,OAAO,CAAC1rB,MAAhB;EAAA,MACIgvC,GADJ;EAAA,MAEI5oC,MAAM,GAAG,IAAI5F,KAAJ,CAAUkN,CAAV,CAFb;;EAGA,OAAK,IAAIzN,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGyN,CAApB,EAAuBzN,CAAC,EAAxB,EAA4B;EACxB+uC,IAAAA,GAAG,GAAG,KAAKC,qBAAL,CAA2BvjB,OAAO,CAACzrB,CAAD,CAAlC,CAAN;EACAmG,IAAAA,MAAM,CAACnG,CAAD,CAAN,GAAY+E,IAAI,CAACE,IAAL,CAAU,KAAKyrB,QAAL,CAAcjF,OAAO,CAACzrB,CAAD,CAArB,EAA0B+uC,GAAG,CAACjE,OAA9B,CAAV,CAAZ;EACH;;EACD,SAAO3kC,MAAP;EACH,CAZD;;EAcA,SAAS8mC,aAAT,CAAuBR,MAAvB,EAA+B;EAC3B,MAAIh/B,CAAC,GAAGg/B,MAAM,CAAC1sC,MAAf;EAAA,MACIowC,WAAW,GAAG,IAAI5vC,KAAJ,CAAUkN,CAAV,CADlB;EAAA,MAEI2iC,aAAa,GAAG,IAAI7vC,KAAJ,CAAUkN,CAAV,CAFpB;;EAGA,OAAK,IAAIzN,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGyN,CAApB,EAAuBzN,CAAC,EAAxB,EAA4B;EACxBmwC,IAAAA,WAAW,CAACnwC,CAAD,CAAX,GAAiBqwC,aAAa,CAAC5D,MAAM,CAACzsC,CAAD,CAAN,CAAUkgB,KAAX,CAA9B;EACAkwB,IAAAA,aAAa,CAACpwC,CAAD,CAAb,GAAmBswC,eAAe,CAAC7D,MAAM,CAACzsC,CAAD,CAAN,CAAUkgB,KAAX,CAAlC;EACH;;EACD,SAAO;EACHgtB,IAAAA,SAAS,EAAE,SAASA,SAAT,CAAmBlqC,KAAnB,EAA0B;EACjC,UAAImD,MAAM,GAAG,IAAI5F,KAAJ,CAAUkN,CAAV,CAAb;;EACA,WAAK,IAAIzN,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGyN,CAApB,EAAuBzN,CAAC,EAAxB,EAA4B;EACxBmG,QAAAA,MAAM,CAACnG,CAAD,CAAN,GAAYmwC,WAAW,CAACnwC,CAAD,CAAX,CAAegD,KAAK,CAACypC,MAAM,CAACzsC,CAAD,CAAN,CAAUmD,IAAX,CAApB,CAAZ;EACH;;EACD,aAAOgD,MAAP;EACH,KAPE;EAQHgnC,IAAAA,OAAO,EAAE,SAASA,OAAT,CAAiBnqC,KAAjB,EAAwB;EAC7B,UAAImD,MAAM,GAAG,EAAb;;EACA,WAAK,IAAInG,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGyN,CAApB,EAAuBzN,CAAC,EAAxB,EAA4B;EACxBmG,QAAAA,MAAM,CAACsmC,MAAM,CAACzsC,CAAD,CAAN,CAAUmD,IAAX,CAAN,GAAyBitC,aAAa,CAACpwC,CAAD,CAAb,CAAiBgD,KAAK,CAAChD,CAAD,CAAtB,CAAzB;EACH;;EACD,aAAOmG,MAAP;EACH;EAdE,GAAP;EAgBH;;EAED,SAASkqC,aAAT,CAAuBE,MAAvB,EAA+B;EAC3B,SAAO,SAASC,UAAT,CAAoBxtC,KAApB,EAA2B;EAC9B,WAAO,CAACA,KAAK,GAAGutC,MAAM,CAAC,CAAD,CAAf,KAAuBA,MAAM,CAAC,CAAD,CAAN,GAAYA,MAAM,CAAC,CAAD,CAAzC,CAAP;EACH,GAFD;EAGH;;EAED,SAASD,eAAT,CAAyBC,MAAzB,EAAiC;EAC7B,SAAO,SAASE,YAAT,CAAsBztC,KAAtB,EAA6B;EAChC,WAAQutC,MAAM,CAAC,CAAD,CAAN,GAAYvtC,KAAK,IAAIutC,MAAM,CAAC,CAAD,CAAN,GAAYA,MAAM,CAAC,CAAD,CAAtB,CAAzB;EACH,GAFD;EAGH;;EAED,SAAS5D,eAAT,CAAyBp2B,CAAzB,EAA4BC,CAA5B,EAA+B;EAC3B,MAAIoJ,CAAC,GAAG,CAAR;;EACA,OAAK,IAAI5f,CAAC,GAAG,CAAR,EAAWsf,EAAE,GAAG/I,CAAC,CAACxW,MAAvB,EAA+BC,CAAC,GAAGsf,EAAnC,EAAuCtf,CAAC,EAAxC,EAA4C;EACxC4f,IAAAA,CAAC,IAAI,CAACrJ,CAAC,CAACvW,CAAD,CAAD,GAAOwW,CAAC,CAACxW,CAAD,CAAT,KAAiBuW,CAAC,CAACvW,CAAD,CAAD,GAAOwW,CAAC,CAACxW,CAAD,CAAzB,CAAL;EACH;;EACD,SAAO4f,CAAP;EACH;;EAED,SAASkvB,cAAT,CAAwBzqB,GAAxB,EAA6BqoB,UAA7B,EAAyC;EACrC,SAAOroB,GAAG,CAACtf,IAAI,CAACwG,KAAL,CAAWmhC,UAAU,KAAKroB,GAAG,CAACtkB,MAA9B,CAAD,CAAV;EACH;;EAED,SAASwtC,cAAT,CAAwB7c,QAAxB,EAAkCqc,UAAlC,EAA8C;EAC1C,MAAI2D,IAAI,GAAG,IAAInwC,KAAJ,CAAUwsC,UAAV,CAAX;EAAA,MACI4D,GAAG,GAAG,IAAIpwC,KAAJ,CAAUwsC,UAAV,CADV;;EAEA,OAAK,IAAI/sC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG+sC,UAApB,EAAgC/sC,CAAC,EAAjC,EAAqC;EACjC0wC,IAAAA,IAAI,CAAC1wC,CAAD,CAAJ,GAAU,CAAV;EACA2wC,IAAAA,GAAG,CAAC3wC,CAAD,CAAH,GAAS,CAAT;EACH;;EACD,SAAO0wB,QAAQ,CAACggB,IAAD,EAAOC,GAAP,CAAf;EACH;;EAED,SAAc,GAAG9D,GAAjB;;ECpae,SAAS+D,gBAAT,CAA0B5tC,KAA1B,EAAiC6tC,MAAjC,EAAyC;EACtD,MAAI7tC,KAAK,GAAG,CAAZ,EAAe;EACbA,IAAAA,KAAK,GAAG,IAAIA,KAAZ;;EACA,QAAI,OAAO6tC,MAAP,KAAkB,QAAtB,EAAgC;EAC9B,yBAAY7tC,KAAK,CAAC4D,WAAN,CAAkBiqC,MAAlB,CAAZ;EACD,KAFD,MAEO;EACL,yBAAY7tC,KAAK,CAAC5D,QAAN,EAAZ;EACD;EACF,GAPD,MAOO;EACL,QAAI,OAAOyxC,MAAP,KAAkB,QAAtB,EAAgC;EAC9B,aAAO7tC,KAAK,CAAC4D,WAAN,CAAkBiqC,MAAlB,CAAP;EACD,KAFD,MAEO;EACL,aAAO7tC,KAAK,CAAC5D,QAAN,EAAP;EACD;EACF;EACF;;ECfc,SAAS0xC,cAAT,CAAwBzsC,CAAxB,EAA2BuR,CAA3B,EAA8B;EAC3C,MAAI,CAACrV,KAAK,CAACV,OAAN,CAAcwE,CAAd,CAAD,IAAqB,CAAC9D,KAAK,CAACV,OAAN,CAAc+V,CAAd,CAA1B,EAA4C;EAC1C,UAAM,IAAI9V,SAAJ,CAAc,wBAAd,CAAN;EACD;;EACD,MAAIuE,CAAC,CAACtE,MAAF,KAAa6V,CAAC,CAAC7V,MAAnB,EAA2B;EACzB,UAAM,IAAIW,UAAJ,CAAe,0CAAf,CAAN;EACD;EACF;;ECJc,MAAMqwC,cAAN,CAAqB;EAClCnrC,EAAAA,WAAW,GAAG;EACZ,QAAIorC,GAAG,CAAC9F,MAAJ,KAAe6F,cAAnB,EAAmC;EACjC,YAAM,IAAIthC,KAAJ,CAAU,mCAAV,CAAN;EACD;EACF;;EAED2Y,EAAAA,OAAO,CAAC/jB,CAAD,EAAI;EACT,QAAI,OAAOA,CAAP,KAAa,QAAjB,EAA2B;EACzB,aAAO,KAAK0rC,QAAL,CAAc1rC,CAAd,CAAP;EACD,KAFD,MAEO,IAAI9D,KAAK,CAACV,OAAN,CAAcwE,CAAd,CAAJ,EAAsB;EAC3B,YAAMuR,CAAC,GAAG,EAAV;;EACA,WAAK,IAAI5V,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGqE,CAAC,CAACtE,MAAtB,EAA8BC,CAAC,EAA/B,EAAmC;EACjC4V,QAAAA,CAAC,CAAC1S,IAAF,CAAO,KAAK6sC,QAAL,CAAc1rC,CAAC,CAACrE,CAAD,CAAf,CAAP;EACD;;EACD,aAAO4V,CAAP;EACD,KANM,MAMA;EACL,YAAM,IAAI9V,SAAJ,CAAc,6BAAd,CAAN;EACD;EACF;;EAEDiwC,EAAAA,QAAQ,GAAG;EACT,UAAM,IAAItgC,KAAJ,CAAU,8BAAV,CAAN;EACD;;EAEDyX,EAAAA,KAAK,GAAG;EAEP;;EAED9nB,EAAAA,QAAQ,GAAG;EACT,WAAO,EAAP;EACD;;EAED6xC,EAAAA,OAAO,GAAG;EACR,WAAO,EAAP;EACD;EAED;;;;;;;;EAMAC,EAAAA,KAAK,CAAC7sC,CAAD,EAAIuR,CAAJ,EAAO;EACV,QAAI,CAACrV,KAAK,CAACV,OAAN,CAAcwE,CAAd,CAAD,IAAqB,CAAC9D,KAAK,CAACV,OAAN,CAAc+V,CAAd,CAAtB,IAA0CvR,CAAC,CAACtE,MAAF,KAAa6V,CAAC,CAAC7V,MAA7D,EAAqE;EACnE,YAAM,IAAI0P,KAAJ,CAAU,2CAAV,CAAN;EACD;;EAED,UAAMJ,CAAC,GAAGhL,CAAC,CAACtE,MAAZ;EACA,UAAMoxC,EAAE,GAAG,IAAI5wC,KAAJ,CAAU8O,CAAV,CAAX;;EACA,SAAK,IAAIrP,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGqP,CAApB,EAAuBrP,CAAC,EAAxB,EAA4B;EAC1BmxC,MAAAA,EAAE,CAACnxC,CAAD,CAAF,GAAQ,KAAK+vC,QAAL,CAAc1rC,CAAC,CAACrE,CAAD,CAAf,CAAR;EACD;;EAED,QAAIoxC,IAAI,GAAG,CAAX;EACA,QAAIC,IAAI,GAAG,CAAX;EACA,QAAIC,IAAI,GAAG,CAAX;EACA,QAAIC,IAAI,GAAG,CAAX;EACA,QAAIC,QAAQ,GAAG,CAAf;EACA,QAAIC,QAAQ,GAAG,CAAf;EACA,QAAIC,EAAE,GAAG,CAAT;;EACA,SAAK,IAAI1xC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGqP,CAApB,EAAuBrP,CAAC,EAAxB,EAA4B;EAC1BoxC,MAAAA,IAAI,IAAID,EAAE,CAACnxC,CAAD,CAAV;EACAqxC,MAAAA,IAAI,IAAIz7B,CAAC,CAAC5V,CAAD,CAAT;EACAwxC,MAAAA,QAAQ,IAAIL,EAAE,CAACnxC,CAAD,CAAF,GAAQmxC,EAAE,CAACnxC,CAAD,CAAtB;EACAyxC,MAAAA,QAAQ,IAAI77B,CAAC,CAAC5V,CAAD,CAAD,GAAO4V,CAAC,CAAC5V,CAAD,CAApB;EACA0xC,MAAAA,EAAE,IAAIP,EAAE,CAACnxC,CAAD,CAAF,GAAQ4V,CAAC,CAAC5V,CAAD,CAAf;;EACA,UAAI4V,CAAC,CAAC5V,CAAD,CAAD,KAAS,CAAb,EAAgB;EACdsxC,QAAAA,IAAI,IAAK,CAAC17B,CAAC,CAAC5V,CAAD,CAAD,GAAOmxC,EAAE,CAACnxC,CAAD,CAAV,KAAkB4V,CAAC,CAAC5V,CAAD,CAAD,GAAOmxC,EAAE,CAACnxC,CAAD,CAA3B,CAAD,GAAoC4V,CAAC,CAAC5V,CAAD,CAA7C;EACD;;EACDuxC,MAAAA,IAAI,IAAI,CAAC37B,CAAC,CAAC5V,CAAD,CAAD,GAAOmxC,EAAE,CAACnxC,CAAD,CAAV,KAAkB4V,CAAC,CAAC5V,CAAD,CAAD,GAAOmxC,EAAE,CAACnxC,CAAD,CAA3B,CAAR;EACD;;EAED,UAAMqC,CAAC,GACL,CAACgN,CAAC,GAAGqiC,EAAJ,GAASN,IAAI,GAAGC,IAAjB,IACAtsC,IAAI,CAACE,IAAL,CAAU,CAACoK,CAAC,GAAGmiC,QAAJ,GAAeJ,IAAI,GAAGA,IAAvB,KAAgC/hC,CAAC,GAAGoiC,QAAJ,GAAeJ,IAAI,GAAGA,IAAtD,CAAV,CAFF;EAIA,WAAO;EACLhvC,MAAAA,CAAC,EAAEA,CADE;EAEL0T,MAAAA,EAAE,EAAE1T,CAAC,GAAGA,CAFH;EAGLivC,MAAAA,IAAI,EAAEA,IAHD;EAILC,MAAAA,IAAI,EAAExsC,IAAI,CAACE,IAAL,CAAUssC,IAAI,GAAGliC,CAAjB;EAJD,KAAP;EAMD;;EAnFiC;;ECGrB,MAAMsiC,oBAAN,SAAmCZ,cAAnC,CAAkD;EAC/DnrC,EAAAA,WAAW,CAACvB,CAAD,EAAIuR,CAAJ,EAAOg8B,MAAP,EAAe;EACxB;;EACA,QAAIvtC,CAAC,KAAK,IAAV,EAAgB;EACd,WAAKutC,MAAL,GAAch8B,CAAC,CAACg8B,MAAhB;EACA,WAAKC,MAAL,GAAcj8B,CAAC,CAACi8B,MAAhB;EACA,WAAKC,YAAL,GAAoBl8B,CAAC,CAACk8B,YAAtB;EACD,KAJD,MAIO;EACLC,MAAAA,cAAgB,CAAC1tC,CAAD,EAAIuR,CAAJ,CAAhB;EACAo8B,MAAAA,OAAO,CAAC,IAAD,EAAO3tC,CAAP,EAAUuR,CAAV,EAAag8B,MAAb,CAAP;EACD;EACF;;EAED7B,EAAAA,QAAQ,CAAC1rC,CAAD,EAAI;EACV,QAAIuR,CAAC,GAAG,CAAR;;EACA,SAAK,IAAIhH,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKijC,MAAL,CAAY9xC,MAAhC,EAAwC6O,CAAC,EAAzC,EAA6C;EAC3CgH,MAAAA,CAAC,IAAI,KAAKk8B,YAAL,CAAkBljC,CAAlB,IAAuB7J,IAAI,CAACC,GAAL,CAASX,CAAT,EAAY,KAAKwtC,MAAL,CAAYjjC,CAAZ,CAAZ,CAA5B;EACD;;EACD,WAAOgH,CAAP;EACD;;EAED1H,EAAAA,MAAM,GAAG;EACP,WAAO;EACL/K,MAAAA,IAAI,EAAE,sBADD;EAELyuC,MAAAA,MAAM,EAAE,KAAKA,MAFR;EAGLC,MAAAA,MAAM,EAAE,KAAKA,MAHR;EAILC,MAAAA,YAAY,EAAE,KAAKA;EAJd,KAAP;EAMD;;EAED1yC,EAAAA,QAAQ,CAAC6yC,SAAD,EAAY;EAClB,WAAO,KAAKC,UAAL,CAAgBD,SAAhB,EAA2B,KAA3B,CAAP;EACD;;EAEDhB,EAAAA,OAAO,CAACgB,SAAD,EAAY;EACjB,WAAO,KAAKC,UAAL,CAAgBD,SAAhB,EAA2B,IAA3B,CAAP;EACD;;EAEDC,EAAAA,UAAU,CAACD,SAAD,EAAYE,OAAZ,EAAqB;EAC7B,QAAIC,GAAG,GAAG,GAAV;EACA,QAAIC,QAAQ,GAAG,EAAf;EACA,QAAI5E,KAAK,GAAG,KAAZ;;EACA,QAAI0E,OAAJ,EAAa;EACXC,MAAAA,GAAG,GAAG,IAAN;EACAC,MAAAA,QAAQ,GAAG,GAAX;EACA5E,MAAAA,KAAK,GAAG,EAAR;EACD;;EAED,QAAI6E,EAAE,GAAG,EAAT;EACA,QAAIC,GAAG,GAAG,EAAV;;EACA,SAAK,IAAI3jC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKkjC,YAAL,CAAkB/xC,MAAtC,EAA8C6O,CAAC,EAA/C,EAAmD;EACjD2jC,MAAAA,GAAG,GAAG,EAAN;;EACA,UAAI,KAAKT,YAAL,CAAkBljC,CAAlB,MAAyB,CAA7B,EAAgC;EAC9B,YAAI,KAAKijC,MAAL,CAAYjjC,CAAZ,MAAmB,CAAvB,EAA0B;EACxB2jC,UAAAA,GAAG,GAAG3B,gBAAgB,CAAC,KAAKkB,YAAL,CAAkBljC,CAAlB,CAAD,EAAuBqjC,SAAvB,CAAtB;EACD,SAFD,MAEO;EACL,cAAI,KAAKJ,MAAL,CAAYjjC,CAAZ,MAAmB,CAAvB,EAA0B;EACxB2jC,YAAAA,GAAG,aACE3B,gBAAgB,CAAC,KAAKkB,YAAL,CAAkBljC,CAAlB,CAAD,EAAuBqjC,SAAvB,CAAhB,GAAoDxE,KADtD,MAAH;EAED,WAHD,MAGO;EACL8E,YAAAA,GAAG,aACE3B,gBAAgB,CAAC,KAAKkB,YAAL,CAAkBljC,CAAlB,CAAD,EAAuBqjC,SAAvB,CAAhB,GACHxE,KAFC,cAIC2E,GAJD,SAKE,KAAKP,MAAL,CAAYjjC,CAAZ,CALF,SAMEyjC,QANF,CAAH;EAOD;EACF;;EAED,YAAI,KAAKP,YAAL,CAAkBljC,CAAlB,IAAuB,CAAvB,IAA4BA,CAAC,KAAK,KAAKkjC,YAAL,CAAkB/xC,MAAlB,GAA2B,CAAjE,EAAoE;EAClEwyC,UAAAA,GAAG,gBAASA,GAAT,CAAH;EACD,SAFD,MAEO,IAAI3jC,CAAC,KAAK,KAAKkjC,YAAL,CAAkB/xC,MAAlB,GAA2B,CAArC,EAAwC;EAC7CwyC,UAAAA,GAAG,cAAOA,GAAP,CAAH;EACD;EACF;;EACDD,MAAAA,EAAE,GAAGC,GAAG,GAAGD,EAAX;EACD;;EACD,QAAIA,EAAE,CAACE,MAAH,CAAU,CAAV,MAAiB,GAArB,EAA0B;EACxBF,MAAAA,EAAE,GAAGA,EAAE,CAACpnB,KAAH,CAAS,CAAT,CAAL;EACD;;EAED,4BAAiBonB,EAAjB;EACD;;EAED,SAAO/pB,IAAP,CAAYkqB,IAAZ,EAAkB;EAChB,QAAIA,IAAI,CAACtvC,IAAL,KAAc,sBAAlB,EAA0C;EACxC,YAAM,IAAIrD,SAAJ,CAAc,mCAAd,CAAN;EACD;;EACD,WAAO,IAAI6xC,oBAAJ,CAAyB,IAAzB,EAA+Bc,IAA/B,CAAP;EACD;;EA1F8D;;EA6FjE,SAAST,OAAT,CAAiBU,EAAjB,EAAqBruC,CAArB,EAAwBuR,CAAxB,EAA2Bg8B,MAA3B,EAAmC;EACjC,QAAMviC,CAAC,GAAGhL,CAAC,CAACtE,MAAZ;EACA,MAAI8xC,MAAJ;;EACA,MAAItxC,KAAK,CAACV,OAAN,CAAc+xC,MAAd,CAAJ,EAA2B;EACzBC,IAAAA,MAAM,GAAGD,MAAT;EACAA,IAAAA,MAAM,GAAGC,MAAM,CAAC9xC,MAAhB;EACD,GAHD,MAGO;EACL6xC,IAAAA,MAAM;EACNC,IAAAA,MAAM,GAAG,IAAItxC,KAAJ,CAAUqxC,MAAV,CAAT;;EACA,SAAK,IAAIhjC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGgjC,MAApB,EAA4BhjC,CAAC,EAA7B,EAAiC;EAC/BijC,MAAAA,MAAM,CAACjjC,CAAD,CAAN,GAAYA,CAAZ;EACD;EACF;;EACD,QAAMoyB,CAAC,GAAG,IAAI35B,MAAJ,CAAWgI,CAAX,EAAcuiC,MAAd,CAAV;EACA,QAAMvzB,CAAC,GAAG,IAAIhX,MAAJ,CAAW,CAACuO,CAAD,CAAX,CAAV;;EACA,OAAK,IAAIhH,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGgjC,MAApB,EAA4BhjC,CAAC,EAA7B,EAAiC;EAC/B,SAAK,IAAI5O,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGqP,CAApB,EAAuBrP,CAAC,EAAxB,EAA4B;EAC1B,UAAI6xC,MAAM,CAACjjC,CAAD,CAAN,KAAc,CAAlB,EAAqB;EACnBoyB,QAAAA,CAAC,CAACt8B,GAAF,CAAM1E,CAAN,EAAS4O,CAAT,EAAY,CAAZ;EACD,OAFD,MAEO;EACLoyB,QAAAA,CAAC,CAACt8B,GAAF,CAAM1E,CAAN,EAAS4O,CAAT,EAAY7J,IAAI,CAACC,GAAL,CAASX,CAAC,CAACrE,CAAD,CAAV,EAAe6xC,MAAM,CAACjjC,CAAD,CAArB,CAAZ;EACD;EACF;EACF;;EAED,QAAM+jC,EAAE,GAAG,IAAI14B,mBAAJ,CAAwB+mB,CAAxB,CAAX;EACA,QAAMrI,CAAC,GAAGga,EAAE,CAACzgC,IAAH,CAAQ8uB,CAAR,CAAV;EACA,QAAMpd,CAAC,GAAG+uB,EAAE,CAACzgC,IAAH,CAAQ,IAAI+H,mBAAJ,CAAwBoE,CAAxB,CAAR,CAAV;EAEAq0B,EAAAA,EAAE,CAACd,MAAH,GAAYA,MAAM,GAAG,CAArB;EACAc,EAAAA,EAAE,CAACb,MAAH,GAAYA,MAAZ;EACAa,EAAAA,EAAE,CAACZ,YAAH,GAAkB92B,KAAK,CAAC2d,CAAD,EAAI/U,CAAJ,CAAL,CAAYliB,SAAZ,EAAlB;EACD;;EC9Hc,MAAMkxC,sBAAN,SAAqC7B,cAArC,CAAoD;EACjEnrC,EAAAA,WAAW,CAACvB,CAAD,EAAIuR,CAAJ,EAAO;EAChB;;EACA,QAAIvR,CAAC,KAAK,IAAV,EAAgB;EACd,WAAKwuC,KAAL,GAAaj9B,CAAC,CAACi9B,KAAf;EACA,WAAKC,SAAL,GAAiBl9B,CAAC,CAACk9B,SAAnB;EACA,WAAKhB,YAAL,GAAoB,CAACl8B,CAAC,CAACk9B,SAAH,EAAcl9B,CAAC,CAACi9B,KAAhB,CAApB;EACD,KAJD,MAIO;EACLd,MAAAA,cAAgB,CAAC1tC,CAAD,EAAIuR,CAAJ,CAAhB;EACAo8B,MAAAA,SAAO,CAAC,IAAD,EAAO3tC,CAAP,EAAUuR,CAAV,CAAP;EACD;EACF;;EAED1H,EAAAA,MAAM,GAAG;EACP,WAAO;EACL/K,MAAAA,IAAI,EAAE,wBADD;EAEL0vC,MAAAA,KAAK,EAAE,KAAKA,KAFP;EAGLC,MAAAA,SAAS,EAAE,KAAKA;EAHX,KAAP;EAKD;;EAED/C,EAAAA,QAAQ,CAAC1rC,CAAD,EAAI;EACV,WAAO,KAAKwuC,KAAL,GAAaxuC,CAAb,GAAiB,KAAKyuC,SAA7B;EACD;;EAEDC,EAAAA,QAAQ,CAACn9B,CAAD,EAAI;EACV,WAAO,CAACA,CAAC,GAAG,KAAKk9B,SAAV,IAAuB,KAAKD,KAAnC;EACD;;EAEDzzC,EAAAA,QAAQ,CAAC6yC,SAAD,EAAY;EAClB,QAAI9rC,MAAM,GAAG,SAAb;;EACA,QAAI,KAAK0sC,KAAL,KAAe,CAAnB,EAAsB;EACpB,YAAMG,OAAO,GAAGpC,gBAAgB,CAAC,KAAKiC,KAAN,EAAaZ,SAAb,CAAhC;EACA9rC,MAAAA,MAAM,cAAO6sC,OAAO,KAAK,GAAZ,GAAkB,EAAlB,aAA0BA,OAA1B,QAAP,MAAN;;EACA,UAAI,KAAKF,SAAL,KAAmB,CAAvB,EAA0B;EACxB,cAAMG,YAAY,GAAGluC,IAAI,CAAC0F,GAAL,CAAS,KAAKqoC,SAAd,CAArB;EACA,cAAMI,QAAQ,GAAGD,YAAY,KAAK,KAAKH,SAAtB,GAAkC,GAAlC,GAAwC,GAAzD;EACA3sC,QAAAA,MAAM,eAAQ+sC,QAAR,cAAoBtC,gBAAgB,CAACqC,YAAD,EAAehB,SAAf,CAApC,CAAN;EACD;EACF,KARD,MAQO;EACL9rC,MAAAA,MAAM,IAAIyqC,gBAAgB,CAAC,KAAKkC,SAAN,EAAiBb,SAAjB,CAA1B;EACD;;EACD,WAAO9rC,MAAP;EACD;;EAED8qC,EAAAA,OAAO,CAACgB,SAAD,EAAY;EACjB,WAAO,KAAK7yC,QAAL,CAAc6yC,SAAd,CAAP;EACD;;EAED,SAAO1pB,IAAP,CAAYkqB,IAAZ,EAAkB;EAChB,QAAIA,IAAI,CAACtvC,IAAL,KAAc,wBAAlB,EAA4C;EAC1C,YAAM,IAAIrD,SAAJ,CAAc,iBAAd,CAAN;EACD;;EACD,WAAO,IAAI8yC,sBAAJ,CAA2B,IAA3B,EAAiCH,IAAjC,CAAP;EACD;;EAtDgE;;EAyDnE,SAAST,SAAT,CAAiBmB,GAAjB,EAAsB9uC,CAAtB,EAAyBuR,CAAzB,EAA4B;EAC1B,QAAMvG,CAAC,GAAGhL,CAAC,CAACtE,MAAZ;EACA,MAAIqxC,IAAI,GAAG,CAAX;EACA,MAAIC,IAAI,GAAG,CAAX;EAEA,MAAIG,QAAQ,GAAG,CAAf;EACA,MAAIE,EAAE,GAAG,CAAT;;EAEA,OAAK,IAAI1xC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGqP,CAApB,EAAuBrP,CAAC,EAAxB,EAA4B;EAC1BoxC,IAAAA,IAAI,IAAI/sC,CAAC,CAACrE,CAAD,CAAT;EACAqxC,IAAAA,IAAI,IAAIz7B,CAAC,CAAC5V,CAAD,CAAT;EACAwxC,IAAAA,QAAQ,IAAIntC,CAAC,CAACrE,CAAD,CAAD,GAAOqE,CAAC,CAACrE,CAAD,CAApB;EACA0xC,IAAAA,EAAE,IAAIrtC,CAAC,CAACrE,CAAD,CAAD,GAAO4V,CAAC,CAAC5V,CAAD,CAAd;EACD;;EAED,QAAMozC,SAAS,GAAG/jC,CAAC,GAAGqiC,EAAJ,GAASN,IAAI,GAAGC,IAAlC;EACA8B,EAAAA,GAAG,CAACN,KAAJ,GAAYO,SAAS,IAAI/jC,CAAC,GAAGmiC,QAAJ,GAAeJ,IAAI,GAAGA,IAA1B,CAArB;EACA+B,EAAAA,GAAG,CAACL,SAAJ,GAAiB,IAAIzjC,CAAL,GAAUgiC,IAAV,GAAiB8B,GAAG,CAACN,KAAJ,IAAa,IAAIxjC,CAAjB,IAAsB+hC,IAAvD;EACA+B,EAAAA,GAAG,CAACrB,YAAJ,GAAmB,CAACqB,GAAG,CAACL,SAAL,EAAgBK,GAAG,CAACN,KAApB,CAAnB;EACD;;EC3Ec,MAAMQ,qBAAN,SAAoCtC,cAApC,CAAmD;EAChEnrC,EAAAA,WAAW,CAACvB,CAAD,EAAIuR,CAAJ,EAAO;EAChB;;EACA,QAAIvR,CAAC,KAAK,IAAV,EAAgB;EACd,WAAKs0B,CAAL,GAAS/iB,CAAC,CAAC+iB,CAAX;EACA,WAAK/U,CAAL,GAAShO,CAAC,CAACgO,CAAX;EACD,KAHD,MAGO;EACLmuB,MAAAA,cAAgB,CAAC1tC,CAAD,EAAIuR,CAAJ,CAAhB;EACAo8B,MAAAA,SAAO,CAAC,IAAD,EAAO3tC,CAAP,EAAUuR,CAAV,CAAP;EACD;EACF;;EAEDm6B,EAAAA,QAAQ,CAACnwC,KAAD,EAAQ;EACd,WAAO,KAAKgkB,CAAL,GAAS7e,IAAI,CAACsG,GAAL,CAASzL,KAAK,GAAG,KAAK+4B,CAAtB,CAAhB;EACD;;EAEDzqB,EAAAA,MAAM,GAAG;EACP,WAAO;EACL/K,MAAAA,IAAI,EAAE,uBADD;EAELw1B,MAAAA,CAAC,EAAE,KAAKA,CAFH;EAGL/U,MAAAA,CAAC,EAAE,KAAKA;EAHH,KAAP;EAKD;;EAEDxkB,EAAAA,QAAQ,CAAC6yC,SAAD,EAAY;EAClB,4BAEIrB,gBAAgB,CAAC,KAAKhtB,CAAN,EAASquB,SAAT,CAFpB,mBAIIrB,gBAAgB,CAAC,KAAKjY,CAAN,EAASsZ,SAAT,CAJpB;EAOD;;EAEDhB,EAAAA,OAAO,CAACgB,SAAD,EAAY;EACjB,QAAI,KAAKtZ,CAAL,IAAU,CAAd,EAAiB;EACf,8BAEIiY,gBAAgB,CAAC,KAAKhtB,CAAN,EAASquB,SAAT,CAFpB,gBAIIrB,gBAAgB,CAAC,KAAKjY,CAAN,EAASsZ,SAAT,CAJpB;EAOD,KARD,MAQO;EACL,qCAEIrB,gBAAgB,CAAC,KAAKhtB,CAAN,EAASquB,SAAT,CAFpB,kBAIIrB,gBAAgB,CAAC,CAAC,KAAKjY,CAAP,EAAUsZ,SAAV,CAJpB;EAOD;EACF;;EAED,SAAO1pB,IAAP,CAAYkqB,IAAZ,EAAkB;EAChB,QAAIA,IAAI,CAACtvC,IAAL,KAAc,uBAAlB,EAA2C;EACzC,YAAM,IAAIrD,SAAJ,CAAc,oCAAd,CAAN;EACD;;EACD,WAAO,IAAIuzC,qBAAJ,CAA0B,IAA1B,EAAgCZ,IAAhC,CAAP;EACD;;EA3D+D;;EA8DlE,SAAST,SAAT,CAAiBsB,EAAjB,EAAqBjvC,CAArB,EAAwBuR,CAAxB,EAA2B;EACzB,QAAMvG,CAAC,GAAGhL,CAAC,CAACtE,MAAZ;EACA,QAAMwzC,EAAE,GAAG,IAAIhzC,KAAJ,CAAU8O,CAAV,CAAX;;EACA,OAAK,IAAIrP,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGqP,CAApB,EAAuBrP,CAAC,EAAxB,EAA4B;EAC1BuzC,IAAAA,EAAE,CAACvzC,CAAD,CAAF,GAAQ+E,IAAI,CAAC0G,GAAL,CAASmK,CAAC,CAAC5V,CAAD,CAAV,CAAR;EACD;;EAED,QAAMwzC,MAAM,GAAG,IAAIZ,sBAAJ,CAA2BvuC,CAA3B,EAA8BkvC,EAA9B,CAAf;EACAD,EAAAA,EAAE,CAAC3a,CAAH,GAAO6a,MAAM,CAACX,KAAd;EACAS,EAAAA,EAAE,CAAC1vB,CAAH,GAAO7e,IAAI,CAACsG,GAAL,CAASmoC,MAAM,CAACV,SAAhB,CAAP;EACD;;ECxEc,MAAMW,eAAN,SAA8B1C,cAA9B,CAA6C;EAC1DnrC,EAAAA,WAAW,CAACvB,CAAD,EAAIuR,CAAJ,EAAO;EAChB;;EACA,QAAIvR,CAAC,KAAK,IAAV,EAAgB;EACd;EACA,WAAKs0B,CAAL,GAAS/iB,CAAC,CAAC+iB,CAAX;EACA,WAAK/U,CAAL,GAAShO,CAAC,CAACgO,CAAX;EACD,KAJD,MAIO;EACLmuB,MAAAA,cAAgB,CAAC1tC,CAAD,EAAIuR,CAAJ,CAAhB;EACAo8B,MAAAA,SAAO,CAAC,IAAD,EAAO3tC,CAAP,EAAUuR,CAAV,CAAP;EACD;EACF;;EAEDm6B,EAAAA,QAAQ,CAAC2D,SAAD,EAAY;EAClB,WAAO,KAAK/a,CAAL,GAAS5zB,IAAI,CAACC,GAAL,CAAS0uC,SAAT,EAAoB,KAAK9vB,CAAzB,CAAhB;EACD;;EAED1V,EAAAA,MAAM,GAAG;EACP,WAAO;EACL/K,MAAAA,IAAI,EAAE,iBADD;EAELw1B,MAAAA,CAAC,EAAE,KAAKA,CAFH;EAGL/U,MAAAA,CAAC,EAAE,KAAKA;EAHH,KAAP;EAKD;;EAEDxkB,EAAAA,QAAQ,CAAC6yC,SAAD,EAAY;EAClB,4BAAiBrB,gBAAgB,CAC/B,KAAKjY,CAD0B,EAE/BsZ,SAF+B,CAAjC,kBAGSrB,gBAAgB,CAAC,KAAKhtB,CAAN,EAASquB,SAAT,CAHzB;EAID;;EAEDhB,EAAAA,OAAO,CAACgB,SAAD,EAAY;EACjB,QAAI0B,KAAK,GAAG,EAAZ;;EACA,QAAI,KAAK/vB,CAAL,IAAU,CAAd,EAAiB;EACf+vB,MAAAA,KAAK,oBAAa/C,gBAAgB,CAChC,KAAKjY,CAD2B,EAEhCsZ,SAFgC,CAA7B,gBAGErB,gBAAgB,CAAC,KAAKhtB,CAAN,EAASquB,SAAT,CAHlB,MAAL;EAID,KALD,MAKO;EACL0B,MAAAA,KAAK,2BAAoB/C,gBAAgB,CACvC,KAAKjY,CADkC,EAEvCsZ,SAFuC,CAApC,kBAGIrB,gBAAgB,CAAC,CAAC,KAAKhtB,CAAP,EAAUquB,SAAV,CAHpB,OAAL;EAID;;EACD0B,IAAAA,KAAK,GAAGA,KAAK,CAAClkB,OAAN,CAAc,iBAAd,EAAiC,QAAjC,CAAR;EACA,WAAOkkB,KAAP;EACD;;EAED,SAAOprB,IAAP,CAAYkqB,IAAZ,EAAkB;EAChB,QAAIA,IAAI,CAACtvC,IAAL,KAAc,iBAAlB,EAAqC;EACnC,YAAM,IAAIrD,SAAJ,CAAc,8BAAd,CAAN;EACD;;EACD,WAAO,IAAI2zC,eAAJ,CAAoB,IAApB,EAA0BhB,IAA1B,CAAP;EACD;;EAtDyD;;EAyD5D,SAAST,SAAT,CAAiBU,EAAjB,EAAqBruC,CAArB,EAAwBuR,CAAxB,EAA2B;EACzB,QAAMvG,CAAC,GAAGhL,CAAC,CAACtE,MAAZ;EACA,QAAM6zC,EAAE,GAAG,IAAIrzC,KAAJ,CAAU8O,CAAV,CAAX;EACA,QAAMkkC,EAAE,GAAG,IAAIhzC,KAAJ,CAAU8O,CAAV,CAAX;;EACA,OAAK,IAAIrP,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGqP,CAApB,EAAuBrP,CAAC,EAAxB,EAA4B;EAC1B4zC,IAAAA,EAAE,CAAC5zC,CAAD,CAAF,GAAQ+E,IAAI,CAAC0G,GAAL,CAASpH,CAAC,CAACrE,CAAD,CAAV,CAAR;EACAuzC,IAAAA,EAAE,CAACvzC,CAAD,CAAF,GAAQ+E,IAAI,CAAC0G,GAAL,CAASmK,CAAC,CAAC5V,CAAD,CAAV,CAAR;EACD;;EAED,QAAMwzC,MAAM,GAAG,IAAIZ,sBAAJ,CAA2BgB,EAA3B,EAA+BL,EAA/B,CAAf;EACAb,EAAAA,EAAE,CAAC/Z,CAAH,GAAO5zB,IAAI,CAACsG,GAAL,CAASmoC,MAAM,CAACV,SAAhB,CAAP;EACAJ,EAAAA,EAAE,CAAC9uB,CAAH,GAAO4vB,MAAM,CAACX,KAAd;EACD;;ECzEc,MAAMgB,4BAAN,CAAmC;EAChDjuC,EAAAA,WAAW,CAACvB,CAAD,EAAIuR,CAAJ,EAAqB;EAAA,QAAdzV,OAAc,uEAAJ,EAAI;EAC9B,UAAM;EAAE2yC,MAAAA,SAAS,GAAG,IAAd;EAAoBgB,MAAAA,UAAU,GAAG;EAAjC,QAA0C3zC,OAAhD;EACA,SAAK2zC,UAAL,GAAkBA,UAAlB;;EACA,QAAIzvC,CAAC,KAAK,IAAV,EAAgB;EACd,WAAKymC,OAAL,GAAel1B,CAAC,CAACk1B,OAAjB;EACA,WAAKJ,MAAL,GAAc90B,CAAC,CAAC80B,MAAhB;EACA,WAAKE,OAAL,GAAeh1B,CAAC,CAACg1B,OAAjB;EACA,WAAKkI,SAAL,GAAiBl9B,CAAC,CAACk9B,SAAnB;EACD,KALD,MAKO;EACLzuC,MAAAA,CAAC,GAAG,IAAIgD,MAAJ,CAAWhD,CAAX,CAAJ;EACAuR,MAAAA,CAAC,GAAG,IAAIvO,MAAJ,CAAWuO,CAAX,CAAJ;;EACA,UAAIk9B,SAAJ,EAAe;EACbzuC,QAAAA,CAAC,CAACkV,SAAF,CAAY,IAAIhZ,KAAJ,CAAU8D,CAAC,CAAChD,IAAZ,EAAkB0L,IAAlB,CAAuB,CAAvB,CAAZ;EACD;;EACD,UAAIgnC,EAAE,GAAG1vC,CAAC,CAACkT,SAAF,EAAT;EACA,YAAMy8B,EAAE,GAAGD,EAAE,CACV7hC,IADQ,CACH7N,CADG,CAAX;EAEA,YAAMsnC,EAAE,GAAGoI,EAAE,CACV7hC,IADQ,CACH0D,CADG,CAAX;EAEA,YAAMq+B,KAAK,GAAG,IAAInzB,0BAAJ,CAAQkzB,EAAR,EACXj1B,OADW,EAAd;EAEA,YAAMm1B,IAAI,GAAGvI,EAAE,CACZp0B,SADU,GAEVrF,IAFU,CAEL+hC,KAFK,EAGV18B,SAHU,EAAb;EAIA,WAAKuzB,OAAL,GAAeoJ,IAAI,CAAClmC,SAAL,EAAf;EACA,WAAK08B,MAAL,GAAcrmC,CAAC,CAAC9C,OAAhB;EACA,WAAKqpC,OAAL,GAAeh1B,CAAC,CAACrU,OAAjB;EACA,UAAIuxC,SAAJ,EAAe,KAAKpI,MAAL;EACf,WAAKoI,SAAL,GAAiBA,SAAjB;;EACA,UAAIgB,UAAJ,EAAgB;EACd;;;;;;EAMA,cAAMK,YAAY,GAAG9vC,CAAC,CAAC6N,IAAF,CAAOgiC,IAAP,CAArB;EACA,cAAME,SAAS,GAAGx+B,CAAC,CAAC9G,KAAF,GAAUtH,IAAV,CAAe2sC,YAAY,CAACxkC,GAAb,EAAf,CAAlB;EACA,cAAMzL,QAAQ,GACZkwC,SAAS,CACNpmC,SADH,GAEGmc,GAFH,CAEQkqB,EAAD,IAAQtvC,IAAI,CAACC,GAAL,CAASqvC,EAAE,CAAC,CAAD,CAAX,EAAgB,CAAhB,CAFf,EAGGC,MAHH,CAGU,CAAC/9B,CAAD,EAAIC,CAAJ,KAAUD,CAAC,GAAGC,CAHxB,KAICZ,CAAC,CAACvU,IAAF,GAASgD,CAAC,CAAC9C,OAJZ,CADF;EAMA,aAAKgzC,QAAL,GAAgBxvC,IAAI,CAACE,IAAL,CAAUf,QAAV,CAAhB;EACA,aAAKswC,cAAL,GAAsB5zB,aAAa,CAACozB,EAAD,CAAb,CAAkB/rC,GAAlB,CAAsB/D,QAAtB,CAAtB;EACA,aAAKuwC,SAAL,GAAiB,KAAKD,cAAL,CACd77B,QADc,GAEdwR,GAFc,CAETvK,CAAD,IAAO7a,IAAI,CAACE,IAAL,CAAU2a,CAAV,CAFG,CAAjB;EAGA,aAAK80B,MAAL,GAAc,KAAK5J,OAAL,CAAa3gB,GAAb,CAAiB,CAACvK,CAAD,EAAI5f,CAAJ,KAC5B,KAAKy0C,SAAL,CAAez0C,CAAf,MAAsB,CAAtB,GAA0B,CAA1B,GAA8B4f,CAAC,CAAC,CAAD,CAAD,GAAO,KAAK60B,SAAL,CAAez0C,CAAf,CAD1B,CAAd;EAGD;EACF;EACF;;EAEDooB,EAAAA,OAAO,CAAC/jB,CAAD,EAAI;EACT,QAAI9D,KAAK,CAACV,OAAN,CAAcwE,CAAd,CAAJ,EAAsB;EACpB,UAAI,OAAOA,CAAC,CAAC,CAAD,CAAR,KAAgB,QAApB,EAA8B;EAC5B,eAAO,KAAK0rC,QAAL,CAAc1rC,CAAd,CAAP;EACD,OAFD,MAEO,IAAI9D,KAAK,CAACV,OAAN,CAAcwE,CAAC,CAAC,CAAD,CAAf,CAAJ,EAAyB;EAC9B,cAAMuR,CAAC,GAAG,IAAIrV,KAAJ,CAAU8D,CAAC,CAACtE,MAAZ,CAAV;;EACA,aAAK,IAAIC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGqE,CAAC,CAACtE,MAAtB,EAA8BC,CAAC,EAA/B,EAAmC;EACjC4V,UAAAA,CAAC,CAAC5V,CAAD,CAAD,GAAO,KAAK+vC,QAAL,CAAc1rC,CAAC,CAACrE,CAAD,CAAf,CAAP;EACD;;EACD,eAAO4V,CAAP;EACD;EACF,KAVD,MAUO,IAAIvO,MAAM,CAACuG,QAAP,CAAgBvJ,CAAhB,CAAJ,EAAwB;EAC7B,YAAMuR,CAAC,GAAG,IAAIvO,MAAJ,CAAWhD,CAAC,CAAChD,IAAb,EAAmB,KAAKupC,OAAxB,CAAV;;EACA,WAAK,IAAI5qC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGqE,CAAC,CAAChD,IAAtB,EAA4BrB,CAAC,EAA7B,EAAiC;EAC/B4V,QAAAA,CAAC,CAAC9F,MAAF,CAAS9P,CAAT,EAAY,KAAK+vC,QAAL,CAAc1rC,CAAC,CAACuL,MAAF,CAAS5P,CAAT,CAAd,CAAZ;EACD;;EACD,aAAO4V,CAAP;EACD;;EACD,UAAM,IAAI9V,SAAJ,CAAc,wCAAd,CAAN;EACD;;EAEDiwC,EAAAA,QAAQ,CAAC1rC,CAAD,EAAI;EACV,UAAM8B,MAAM,GAAG,IAAI5F,KAAJ,CAAU,KAAKqqC,OAAf,CAAf;;EACA,QAAI,KAAKkI,SAAT,EAAoB;EAClB,WAAK,IAAI9yC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK4qC,OAAzB,EAAkC5qC,CAAC,EAAnC,EAAuC;EACrCmG,QAAAA,MAAM,CAACnG,CAAD,CAAN,GAAY,KAAK8qC,OAAL,CAAa,KAAKJ,MAAlB,EAA0B1qC,CAA1B,CAAZ;EACD;EACF,KAJD,MAIO;EACLmG,MAAAA,MAAM,CAAC4G,IAAP,CAAY,CAAZ;EACD;;EACD,SAAK,IAAI/M,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK0qC,MAAzB,EAAiC1qC,CAAC,EAAlC,EAAsC;EACpC,WAAK,IAAIsD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKsnC,OAAzB,EAAkCtnC,CAAC,EAAnC,EAAuC;EACrC6C,QAAAA,MAAM,CAAC7C,CAAD,CAAN,IAAa,KAAKwnC,OAAL,CAAa9qC,CAAb,EAAgBsD,CAAhB,IAAqBe,CAAC,CAACrE,CAAD,CAAnC;EACD;EACF;;EACD,WAAOmG,MAAP;EACD;;EAED+qC,EAAAA,KAAK,GAAG;EACN,UAAM,IAAIzhC,KAAJ,CAAU,qCAAV,CAAN;EACD;;EAEDvB,EAAAA,MAAM,GAAG;EACP,WAAO;EACL/K,MAAAA,IAAI,EAAE,8BADD;EAEL2nC,MAAAA,OAAO,EAAE,KAAKA,OAFT;EAGLJ,MAAAA,MAAM,EAAE,KAAKA,MAHR;EAILE,MAAAA,OAAO,EAAE,KAAKA,OAJT;EAKLkI,MAAAA,SAAS,EAAE,KAAKA,SALX;EAML6B,MAAAA,OAAO,EAAE,KAAKb,UAAL,GACL;EACAc,QAAAA,oBAAoB,EAAE;EACpBC,UAAAA,aAAa,EAAE,KAAKN,QADA;EAEpBO,UAAAA,YAAY,EAAE,KAAKlK;EAFC,SADtB;EAKAmK,QAAAA,SAAS,EAAE,KAAKjK,OAAL,CAAa3gB,GAAb,CAAiB,CAACvK,CAAD,EAAI5f,CAAJ,KAAU;EACpC,iBAAO;EACLikC,YAAAA,KAAK,EACDjkC,CAAC,KAAK,KAAK8qC,OAAL,CAAa/qC,MAAb,GAAsB,CAA5B,GACI,WADJ,wBAEkBC,CAAC,GAAG,CAFtB,CAFC;EAKL8xC,YAAAA,YAAY,EAAElyB,CALT;EAMLi1B,YAAAA,aAAa,EAAE,KAAKJ,SAAL,CAAez0C,CAAf,CANV;EAOLg1C,YAAAA,KAAK,EAAE,KAAKN,MAAL,CAAY10C,CAAZ;EAPF,WAAP;EASD,SAVU;EALX,OADK,GAkBLK;EAxBC,KAAP;EA0BD;;EAED,SAAOkoB,IAAP,CAAYT,KAAZ,EAAmB;EACjB,QAAIA,KAAK,CAAC3kB,IAAN,KAAe,8BAAnB,EAAmD;EACjD,YAAM,IAAIsM,KAAJ,CAAU,iBAAV,CAAN;EACD;;EACD,WAAO,IAAIokC,4BAAJ,CAAiC,IAAjC,EAAuC/rB,KAAvC,CAAP;EACD;;EAtI+C;;ECAlD,MAAM;EAAEkF,oBAAAA;EAAF,IAAuBuD,WAA7B;EAEA,MAAM3I,gBAAc,GAAG;EACrBqtB,EAAAA,KAAK,EAAE;EADc,CAAvB;;EAIA,MAAMC,cAAN,CAAqB;EACnBtvC,EAAAA,WAAW,CAACzF,OAAD,EAAU;EACnBA,IAAAA,OAAO,GAAGd,MAAM,CAAC4oB,MAAP,CAAc,EAAd,EAAkBL,gBAAlB,EAAkCznB,OAAlC,CAAV;EACA,SAAK80C,KAAL,GAAa90C,OAAO,CAAC80C,KAArB;EACA,SAAKtZ,OAAL,GAAe,IAAIx7B,OAAO,CAAC80C,KAAZ,GAAoB90C,OAAO,CAAC80C,KAA3C;EACD;;EACDhT,EAAAA,OAAO,CAAC59B,CAAD,EAAIuR,CAAJ,EAAO;EACZ,UAAM8a,QAAQ,GAAG1D,kBAAgB,CAAC3oB,CAAD,EAAIuR,CAAJ,CAAjC;EACA,WAAO7Q,IAAI,CAACsG,GAAL,CAAS,CAACqlB,QAAD,GAAY,KAAKiL,OAA1B,CAAP;EACD;;EATkB;;EAYrB,kBAAc,GAAGuZ,cAAjB;;EClBA,MAAMttB,gBAAc,GAAG;EACrBgqB,EAAAA,MAAM,EAAE,CADa;EAErBuD,EAAAA,QAAQ,EAAE,CAFW;EAGrBrwC,EAAAA,KAAK,EAAE;EAHc,CAAvB;;EAMA,MAAMswC,gBAAN,CAAuB;EACrBxvC,EAAAA,WAAW,CAACzF,OAAD,EAAU;EACnBA,IAAAA,OAAO,GAAGd,MAAM,CAAC4oB,MAAP,CAAc,EAAd,EAAkBL,gBAAlB,EAAkCznB,OAAlC,CAAV;EAEA,SAAKyxC,MAAL,GAAczxC,OAAO,CAACyxC,MAAtB;EACA,SAAKuD,QAAL,GAAgBh1C,OAAO,CAACg1C,QAAxB;EACA,SAAKrwC,KAAL,GAAa3E,OAAO,CAAC2E,KAArB;EACD;;EAEDm9B,EAAAA,OAAO,CAAC59B,CAAD,EAAIuR,CAAJ,EAAO;EACZ,QAAIvS,GAAG,GAAG,CAAV;;EACA,SAAK,IAAIrD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGqE,CAAC,CAACtE,MAAtB,EAA8BC,CAAC,EAA/B,EAAmC;EACjCqD,MAAAA,GAAG,IAAIgB,CAAC,CAACrE,CAAD,CAAD,GAAO4V,CAAC,CAAC5V,CAAD,CAAf;EACD;;EACD,WAAO+E,IAAI,CAACC,GAAL,CAAS,KAAKF,KAAL,GAAazB,GAAb,GAAmB,KAAK8xC,QAAjC,EAA2C,KAAKvD,MAAhD,CAAP;EACD;;EAfoB;;EAkBvB,oBAAc,GAAGwD,gBAAjB;;ECxBA,MAAMxtB,gBAAc,GAAG;EACrBtK,EAAAA,KAAK,EAAE,IADc;EAErB63B,EAAAA,QAAQ,EAAE,CAACpwC,IAAI,CAACg8B;EAFK,CAAvB;;EAKA,MAAMsU,aAAN,CAAoB;EAClBzvC,EAAAA,WAAW,CAACzF,OAAD,EAAU;EACnBA,IAAAA,OAAO,GAAGd,MAAM,CAAC4oB,MAAP,CAAc,EAAd,EAAkBL,gBAAlB,EAAkCznB,OAAlC,CAAV;EACA,SAAKmd,KAAL,GAAand,OAAO,CAACmd,KAArB;EACA,SAAK63B,QAAL,GAAgBh1C,OAAO,CAACg1C,QAAxB;EACD;;EAEDlT,EAAAA,OAAO,CAAC59B,CAAD,EAAIuR,CAAJ,EAAO;EACZ,QAAIvS,GAAG,GAAG,CAAV;;EACA,SAAK,IAAIrD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGqE,CAAC,CAACtE,MAAtB,EAA8BC,CAAC,EAA/B,EAAmC;EACjCqD,MAAAA,GAAG,IAAIgB,CAAC,CAACrE,CAAD,CAAD,GAAO4V,CAAC,CAAC5V,CAAD,CAAf;EACD;;EACD,WAAO+E,IAAI,CAACmH,IAAL,CAAU,KAAKoR,KAAL,GAAaja,GAAb,GAAmB,KAAK8xC,QAAlC,CAAP;EACD;;EAbiB;;EAgBpB,iBAAc,GAAGE,aAAjB;;ECrBA,MAAMztB,gBAAc,GAAG;EACrBqtB,EAAAA,KAAK,EAAE,CADc;EAErBrD,EAAAA,MAAM,EAAE;EAFa,CAAvB;;EAKA,MAAM0D,WAAN,CAAkB;EAChB1vC,EAAAA,WAAW,CAACzF,OAAD,EAAU;EACnBA,IAAAA,OAAO,GAAGd,MAAM,CAAC4oB,MAAP,CAAc,EAAd,EAAkBL,gBAAlB,EAAkCznB,OAAlC,CAAV;EACA,SAAK80C,KAAL,GAAa90C,OAAO,CAAC80C,KAArB;EACA,SAAKrD,MAAL,GAAczxC,OAAO,CAACyxC,MAAtB;EACD;;EAED3P,EAAAA,OAAO,CAAC59B,CAAD,EAAIuR,CAAJ,EAAO;EACZ,QAAIvS,GAAG,GAAG,CAAV;EACA,QAAIivB,GAAG,GAAGvtB,IAAI,CAAC9E,GAAL,CAASoE,CAAC,CAACtE,MAAX,EAAmB6V,CAAC,CAAC7V,MAArB,CAAV;;EACA,SAAK,IAAIC,CAAC,GAAG,CAAb,EAAgBA,CAAC,IAAIsyB,GAArB,EAA0B,EAAEtyB,CAA5B,EAA+B;EAC7BqD,MAAAA,GAAG,IAAI0B,IAAI,CAACC,GAAL,CACLD,IAAI,CAACsG,GAAL,CACE,CAAC,KAAK4pC,KAAN,GACElwC,IAAI,CAACC,GAAL,CAASD,IAAI,CAACC,GAAL,CAASX,CAAC,CAACrE,CAAC,GAAG,CAAL,CAAV,EAAmBA,CAAnB,IAAwB+E,IAAI,CAACC,GAAL,CAAS4Q,CAAC,CAAC5V,CAAC,GAAG,CAAL,CAAV,EAAmBA,CAAnB,CAAjC,EAAwD,CAAxD,CAFJ,CADK,EAKL,KAAK4xC,MALA,CAAP;EAOD;;EACD,WAAOvuC,GAAP;EACD;;EApBe;;EAuBlB,eAAc,GAAGiyC,WAAjB;;EC5BA,MAAM;EAAEtoB,oBAAAA;EAAF,IAAuBuD,WAA7B;EAEA,MAAM3I,gBAAc,GAAG;EACrBqtB,EAAAA,KAAK,EAAE;EADc,CAAvB;;EAIA,MAAMM,YAAN,CAAmB;EACjB3vC,EAAAA,WAAW,CAACzF,OAAD,EAAU;EACnBA,IAAAA,OAAO,GAAGd,MAAM,CAAC4oB,MAAP,CAAc,EAAd,EAAkBL,gBAAlB,EAAkCznB,OAAlC,CAAV;EACA,SAAK80C,KAAL,GAAa90C,OAAO,CAAC80C,KAArB;EACD;;EAEDhT,EAAAA,OAAO,CAAC59B,CAAD,EAAIuR,CAAJ,EAAO;EACZ,WAAO,KAAK,IAAIoX,kBAAgB,CAAC3oB,CAAD,EAAIuR,CAAJ,CAAhB,IAA0B,KAAKq/B,KAAL,GAAa,KAAKA,KAA5C,CAAT,CAAP;EACD;;EARgB;;EAWnB,gBAAc,GAAGM,YAAjB;;ECjBA,MAAM;EAAEtoB,aAAAA;EAAF,IAAgBsD,WAAtB;EAEA,MAAM3I,gBAAc,GAAG;EACrBqtB,EAAAA,KAAK,EAAE;EADc,CAAvB;;EAIA,MAAMO,iBAAN,CAAwB;EACtB5vC,EAAAA,WAAW,CAACzF,OAAD,EAAU;EACnBA,IAAAA,OAAO,GAAGd,MAAM,CAAC4oB,MAAP,CAAc,EAAd,EAAkBL,gBAAlB,EAAkCznB,OAAlC,CAAV;EACA,SAAK80C,KAAL,GAAa90C,OAAO,CAAC80C,KAArB;EACA,SAAKtZ,OAAL,GAAe,IAAIx7B,OAAO,CAAC80C,KAAZ,GAAoB90C,OAAO,CAAC80C,KAA3C;EACD;;EAEDhT,EAAAA,OAAO,CAAC59B,CAAD,EAAIuR,CAAJ,EAAO;EACZ,UAAM8a,QAAQ,GAAGzD,WAAS,CAAC5oB,CAAD,EAAIuR,CAAJ,CAA1B;EACA,WAAO7Q,IAAI,CAACsG,GAAL,CAAS,CAACqlB,QAAD,GAAY,KAAKiL,OAA1B,CAAP;EACD;;EAVqB;;EAaxB,qBAAc,GAAG6Z,iBAAjB;;ECnBA,MAAMC,2BAAN,CAAkC;EAChCxT,EAAAA,OAAO,CAAC59B,CAAD,EAAIuR,CAAJ,EAAO;EACZ,QAAI3V,GAAG,GAAG8E,IAAI,CAAC9E,GAAL,CAASoE,CAAC,CAACtE,MAAX,EAAmB6V,CAAC,CAAC7V,MAArB,CAAV;EACA,QAAIsD,GAAG,GAAG,CAAV;;EACA,SAAK,IAAIrD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGC,GAApB,EAAyB,EAAED,CAA3B,EAA8B;EAC5BqD,MAAAA,GAAG,IAAI0B,IAAI,CAAC9E,GAAL,CAASoE,CAAC,CAACrE,CAAD,CAAV,EAAe4V,CAAC,CAAC5V,CAAD,CAAhB,CAAP;EACD;;EAED,WAAOqD,GAAP;EACD;;EAT+B;;EAYlC,+BAAc,GAAGoyC,2BAAjB;;ECZA,MAAM;EAAExoB,aAAAA;EAAF,IAAgBsD,WAAtB;EAEA,MAAM3I,gBAAc,GAAG;EACrBqtB,EAAAA,KAAK,EAAE;EADc,CAAvB;;EAIA,MAAMS,eAAN,CAAsB;EACpB9vC,EAAAA,WAAW,CAACzF,OAAD,EAAU;EACnBA,IAAAA,OAAO,GAAGd,MAAM,CAAC4oB,MAAP,CAAc,EAAd,EAAkBL,gBAAlB,EAAkCznB,OAAlC,CAAV;EACA,SAAK80C,KAAL,GAAa90C,OAAO,CAAC80C,KAArB;EACD;;EAEDhT,EAAAA,OAAO,CAAC59B,CAAD,EAAIuR,CAAJ,EAAO;EACZ,UAAM8a,QAAQ,GAAGzD,WAAS,CAAC5oB,CAAD,EAAIuR,CAAJ,CAA1B;EACA,WAAO7Q,IAAI,CAACsG,GAAL,CAAS,CAACqlB,QAAD,GAAY,KAAKukB,KAA1B,CAAP;EACD;;EATmB;;EAYtB,mBAAc,GAAGS,eAAjB;;EClBA,MAAM;EAAE1oB,oBAAAA;EAAF,IAAuBuD,WAA7B;EAEA,MAAM3I,gBAAc,GAAG;EACrButB,EAAAA,QAAQ,EAAE;EADW,CAAvB;;EAIA,MAAMQ,oBAAN,CAA2B;EACzB/vC,EAAAA,WAAW,CAACzF,OAAD,EAAU;EACnBA,IAAAA,OAAO,GAAGd,MAAM,CAAC4oB,MAAP,CAAc,EAAd,EAAkBL,gBAAlB,EAAkCznB,OAAlC,CAAV;EACA,SAAKg1C,QAAL,GAAgBh1C,OAAO,CAACg1C,QAAxB;EACD;;EAEDlT,EAAAA,OAAO,CAAC59B,CAAD,EAAIuR,CAAJ,EAAO;EACZ,WAAO7Q,IAAI,CAACE,IAAL,CAAU+nB,kBAAgB,CAAC3oB,CAAD,EAAIuR,CAAJ,CAAhB,GAAyB,KAAKu/B,QAAL,GAAgB,KAAKA,QAAxD,CAAP;EACD;;EARwB;;EAW3B,wBAAc,GAAGQ,oBAAjB;;ECjBA,MAAM;EAAE3oB,oBAAAA;EAAF,IAAuBuD,WAA7B;EAEA,MAAM3I,gBAAc,GAAG;EACrButB,EAAAA,QAAQ,EAAE;EADW,CAAvB;;EAIA,MAAMS,uBAAN,CAA8B;EAC5BhwC,EAAAA,WAAW,CAACzF,OAAD,EAAU;EACnBA,IAAAA,OAAO,GAAGd,MAAM,CAAC4oB,MAAP,CAAc,EAAd,EAAkBL,gBAAlB,EAAkCznB,OAAlC,CAAV;EACA,SAAKg1C,QAAL,GAAgBh1C,OAAO,CAACg1C,QAAxB;EACD;;EAEDlT,EAAAA,OAAO,CAAC59B,CAAD,EAAIuR,CAAJ,EAAO;EACZ,UAAM8a,QAAQ,GAAG1D,kBAAgB,CAAC3oB,CAAD,EAAIuR,CAAJ,CAAjC;EACA,WAAO,IAAI8a,QAAQ,IAAIA,QAAQ,GAAG,KAAKykB,QAApB,CAAnB;EACD;;EAT2B;;EAY9B,2BAAc,GAAGS,uBAAjB;;EClBA,MAAM;EAAEvuC,UAAAA,QAAF;EAAU4S,uBAAAA;EAAV,IAAkCsW,MAAxC;EAaA,MAAMslB,UAAU,GAAG;EACjBhN,EAAAA,QAAQ,EAAEqM,cADO;EAEjBY,EAAAA,GAAG,EAAEZ,cAFY;EAGjBa,EAAAA,UAAU,EAAEX,gBAHK;EAIjBY,EAAAA,IAAI,EAAEZ,gBAJW;EAKjBa,EAAAA,KAAK,EAAEX,WALU;EAMjBY,EAAAA,MAAM,EAAEX,YANS;EAOjB1uC,EAAAA,WAAW,EAAE2uC,iBAPI;EAQjBW,EAAAA,SAAS,EAAEC,2BARM;EASjBn2C,EAAAA,GAAG,EAAEm2C,2BATY;EAUjBC,EAAAA,SAAS,EAAEX,eAVM;EAWjBY,EAAAA,cAAc,EAAEX,oBAXC;EAYjBY,EAAAA,QAAQ,EAAEC,uBAZO;EAajBC,EAAAA,OAAO,EAAEpB,aAbQ;EAcjBqB,EAAAA,GAAG,EAAErB;EAdY,CAAnB;;EAiBA,MAAMsB,MAAN,CAAa;EACX/wC,EAAAA,WAAW,CAACiM,IAAD,EAAO1R,OAAP,EAAgB;EACzB,SAAK01C,UAAL,GAAkBhkC,IAAlB;EACA,QAAIA,IAAI,KAAK,QAAb,EAAuB;;EAEvB,QAAI,OAAOA,IAAP,KAAgB,QAApB,EAA8B;EAC5BA,MAAAA,IAAI,GAAGA,IAAI,CAAC+kC,WAAL,EAAP;EAEA,UAAIC,iBAAiB,GAAGhB,UAAU,CAAChkC,IAAD,CAAlC;;EACA,UAAIglC,iBAAJ,EAAuB;EACrB,aAAKC,cAAL,GAAsB,IAAID,iBAAJ,CAAsB12C,OAAtB,CAAtB;EACD,OAFD,MAEO;EACL,cAAM,IAAIsP,KAAJ,oCAAsCoC,IAAtC,EAAN;EACD;EACF,KATD,MASO,IAAI,OAAOA,IAAP,KAAgB,QAAhB,IAA4B,OAAOA,IAAI,CAACowB,OAAZ,KAAwB,UAAxD,EAAoE;EACzE,WAAK6U,cAAL,GAAsBjlC,IAAtB;EACD,KAFM,MAEA;EACL,YAAM,IAAI/R,SAAJ,CACJ,wDADI,CAAN;EAGD;EACF;;EAEDmiC,EAAAA,OAAO,CAACyI,MAAD,EAASqM,SAAT,EAAoB;EACzBrM,IAAAA,MAAM,GAAGrjC,QAAM,CAACI,WAAP,CAAmBijC,MAAnB,CAAT;;EACA,QAAIqM,SAAS,KAAK12C,SAAlB,EAA6B;EAC3B02C,MAAAA,SAAS,GAAGrM,MAAZ;EACD,KAFD,MAEO;EACLqM,MAAAA,SAAS,GAAG1vC,QAAM,CAACI,WAAP,CAAmBsvC,SAAnB,CAAZ;EACD;;EACD,QAAI,KAAKlB,UAAL,KAAoB,QAAxB,EAAkC;EAChC,aAAOnL,MAAM,CAACx4B,IAAP,CAAY,IAAI+H,qBAAJ,CAAwB88B,SAAxB,CAAZ,CAAP;EACD;;EAED,UAAMC,YAAY,GAAG,IAAI3vC,QAAJ,CAAWqjC,MAAM,CAACrpC,IAAlB,EAAwB01C,SAAS,CAAC11C,IAAlC,CAArB;;EACA,QAAIqpC,MAAM,KAAKqM,SAAf,EAA0B;;EAExB,WAAK,IAAI/2C,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG0qC,MAAM,CAACrpC,IAA3B,EAAiCrB,CAAC,EAAlC,EAAsC;EACpC,aAAK,IAAIsD,CAAC,GAAGtD,CAAb,EAAgBsD,CAAC,GAAGonC,MAAM,CAACrpC,IAA3B,EAAiCiC,CAAC,EAAlC,EAAsC;EACpC,gBAAMN,KAAK,GAAG,KAAK8zC,cAAL,CAAoB7U,OAApB,CACZyI,MAAM,CAAC96B,MAAP,CAAc5P,CAAd,CADY,EAEZ0qC,MAAM,CAAC96B,MAAP,CAActM,CAAd,CAFY,CAAd;EAIA0zC,UAAAA,YAAY,CAACtyC,GAAb,CAAiB1E,CAAjB,EAAoBsD,CAApB,EAAuBN,KAAvB;EACAg0C,UAAAA,YAAY,CAACtyC,GAAb,CAAiBpB,CAAjB,EAAoBtD,CAApB,EAAuBgD,KAAvB;EACD;EACF;EACF,KAZD,MAYO;EACL,WAAK,IAAIhD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG0qC,MAAM,CAACrpC,IAA3B,EAAiCrB,CAAC,EAAlC,EAAsC;EACpC,aAAK,IAAIsD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGyzC,SAAS,CAAC11C,IAA9B,EAAoCiC,CAAC,EAArC,EAAyC;EACvC0zC,UAAAA,YAAY,CAACtyC,GAAb,CACE1E,CADF,EAEEsD,CAFF,EAGE,KAAKwzC,cAAL,CAAoB7U,OAApB,CAA4ByI,MAAM,CAAC96B,MAAP,CAAc5P,CAAd,CAA5B,EAA8C+2C,SAAS,CAACnnC,MAAV,CAAiBtM,CAAjB,CAA9C,CAHF;EAKD;EACF;EACF;;EACD,WAAO0zC,YAAP;EACD;;EA3DU;;EA8Db,UAAc,GAAGL,MAAjB;;ECxFe,MAAMM,kBAAN,SAAiClG,cAAjC,CAAgD;EAC7D;;;;;;;EAOAnrC,EAAAA,WAAW,CAACvB,CAAD,EAAIuR,CAAJ,EAAO;EAChB;;EACA,QAAIvR,CAAC,KAAK,IAAV,EAAgB;EACd;EACA,WAAKwuC,KAAL,GAAaj9B,CAAC,CAACi9B,KAAf;EACA,WAAKC,SAAL,GAAiBl9B,CAAC,CAACk9B,SAAnB;EACA,WAAKhB,YAAL,GAAoBl8B,CAAC,CAACk8B,YAAtB;EACD,KALD,MAKO;EACL;EACAC,MAAAA,cAAgB,CAAC1tC,CAAD,EAAIuR,CAAJ,CAAhB;EACAshC,MAAAA,QAAQ,CAAC,IAAD,EAAO7yC,CAAP,EAAUuR,CAAV,CAAR;EACD;EACF;;EAED1H,EAAAA,MAAM,GAAG;EACP,WAAO;EACL/K,MAAAA,IAAI,EAAE,oBADD;EAEL0vC,MAAAA,KAAK,EAAE,KAAKA,KAFP;EAGLC,MAAAA,SAAS,EAAE,KAAKA;EAHX,KAAP;EAKD;;EAED/C,EAAAA,QAAQ,CAACnwC,KAAD,EAAQ;EACd,WAAO,KAAKizC,KAAL,GAAajzC,KAAb,GAAqB,KAAKkzC,SAAjC;EACD;;EAEDC,EAAAA,QAAQ,CAACnzC,KAAD,EAAQ;EACd,WAAO,CAACA,KAAK,GAAG,KAAKkzC,SAAd,IAA2B,KAAKD,KAAvC;EACD;;EAEDzzC,EAAAA,QAAQ,CAAC6yC,SAAD,EAAY;EAClB,QAAI9rC,MAAM,GAAG,SAAb;;EACA,QAAI,KAAK0sC,KAAT,EAAgB;EACd,UAAIG,OAAO,GAAGpC,gBAAgB,CAAC,KAAKiC,KAAN,EAAaZ,SAAb,CAA9B;EACA9rC,MAAAA,MAAM,cAAOpB,IAAI,CAAC0F,GAAL,CAASuoC,OAAO,GAAG,CAAnB,IAAwB,IAAxB,GAA+B,EAA/B,aAAuCA,OAAvC,QAAP,MAAN;;EACA,UAAI,KAAKF,SAAT,EAAoB;EAClB,YAAIG,YAAY,GAAGluC,IAAI,CAAC0F,GAAL,CAAS,KAAKqoC,SAAd,CAAnB;EACA,YAAII,QAAQ,GAAGD,YAAY,KAAK,KAAKH,SAAtB,GAAkC,GAAlC,GAAwC,GAAvD;EACA3sC,QAAAA,MAAM,eACA+sC,QADA,cACYtC,gBAAgB,CAACqC,YAAD,EAAehB,SAAf,CAD5B,CAAN;EAED;EACF,KATD,MASO;EACL9rC,MAAAA,MAAM,IAAIyqC,gBAAgB,CAAC,KAAKkC,SAAN,EAAiBb,SAAjB,CAA1B;EACD;;EACD,WAAO9rC,MAAP;EACD;;EAED8qC,EAAAA,OAAO,CAACgB,SAAD,EAAY;EACjB,WAAO,KAAK7yC,QAAL,CAAc6yC,SAAd,CAAP;EACD;;EAED,SAAO1pB,IAAP,CAAYkqB,IAAZ,EAAkB;EAChB,QAAIA,IAAI,CAACtvC,IAAL,KAAc,oBAAlB,EAAwC;EACtC,YAAM,IAAIrD,SAAJ,CAAc,uBAAd,CAAN;EACD;;EACD,WAAO,IAAIm3C,kBAAJ,CAAuB,IAAvB,EAA6BxE,IAA7B,CAAP;EACD;;EAhE4D;;EAmE/D,SAASyE,QAAT,CAAkBzxB,UAAlB,EAA8BphB,CAA9B,EAAiCuR,CAAjC,EAAoC;EAClC,MAAI0c,GAAG,GAAGjuB,CAAC,CAACtE,MAAZ;EACA,MAAIo3C,MAAM,GAAG,IAAI52C,KAAJ,CAAU+xB,GAAG,GAAGA,GAAhB,CAAb;EACA,MAAIrX,KAAK,GAAG,CAAZ;;EACA,OAAK,IAAIjb,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGsyB,GAApB,EAAyB,EAAEtyB,CAA3B,EAA8B;EAC5B,SAAK,IAAIsD,CAAC,GAAGtD,CAAC,GAAG,CAAjB,EAAoBsD,CAAC,GAAGgvB,GAAxB,EAA6B,EAAEhvB,CAA/B,EAAkC;EAChC,UAAIe,CAAC,CAACrE,CAAD,CAAD,KAASqE,CAAC,CAACf,CAAD,CAAd,EAAmB;EACjB6zC,QAAAA,MAAM,CAACl8B,KAAK,EAAN,CAAN,GAAkB,CAACrF,CAAC,CAACtS,CAAD,CAAD,GAAOsS,CAAC,CAAC5V,CAAD,CAAT,KAAiBqE,CAAC,CAACf,CAAD,CAAD,GAAOe,CAAC,CAACrE,CAAD,CAAzB,CAAlB;EACD;EACF;EACF;;EACDm3C,EAAAA,MAAM,CAACp3C,MAAP,GAAgBkb,KAAhB;EACA,MAAIm8B,WAAW,GAAGpsB,MAAM,CAACmsB,MAAD,CAAxB;EAEA,MAAIE,IAAI,GAAG,IAAI92C,KAAJ,CAAU+xB,GAAV,CAAX;;EACA,OAAK,IAAItyB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGsyB,GAApB,EAAyB,EAAEtyB,CAA3B,EAA8B;EAC5Bq3C,IAAAA,IAAI,CAACr3C,CAAD,CAAJ,GAAU4V,CAAC,CAAC5V,CAAD,CAAD,GAAOo3C,WAAW,GAAG/yC,CAAC,CAACrE,CAAD,CAAhC;EACD;;EAEDylB,EAAAA,UAAU,CAACotB,KAAX,GAAmBuE,WAAnB;EACA3xB,EAAAA,UAAU,CAACqtB,SAAX,GAAuB9nB,MAAM,CAACqsB,IAAD,CAA7B;EACA5xB,EAAAA,UAAU,CAACqsB,YAAX,GAA0B,CAACrsB,UAAU,CAACqtB,SAAZ,EAAuBrtB,UAAU,CAACotB,KAAlC,CAA1B;EACD;;ECzFD;;;;;;;AAMA,EAAe,MAAMyE,0BAAN,SAAyCvG,cAAzC,CAAwD;EACrEnrC,EAAAA,WAAW,CAACvB,CAAD,EAAIuR,CAAJ,EAAOg8B,MAAP,EAAe;EACxB;;EACA,QAAIvtC,CAAC,KAAK,IAAV,EAAgB;EACd,WAAKutC,MAAL,GAAch8B,CAAC,CAACg8B,MAAhB;EACA,WAAKC,MAAL,GAAcj8B,CAAC,CAACi8B,MAAhB;EACA,WAAKC,YAAL,GAAoBl8B,CAAC,CAACk8B,YAAtB;EACD,KAJD,MAIO;EACLC,MAAAA,cAAgB,CAAC1tC,CAAD,EAAIuR,CAAJ,CAAhB;EACA2hC,MAAAA,gBAAgB,CAAC,IAAD,EAAOlzC,CAAP,EAAUuR,CAAV,EAAag8B,MAAb,CAAhB;EACD;EACF;;EAED1jC,EAAAA,MAAM,GAAG;EACP,WAAO;EACL/K,MAAAA,IAAI,EAAE,4BADD;EAELyuC,MAAAA,MAAM,EAAE,KAAKA,MAFR;EAGLC,MAAAA,MAAM,EAAE,KAAKA,MAHR;EAILC,MAAAA,YAAY,EAAE,KAAKA;EAJd,KAAP;EAMD;;EAED/B,EAAAA,QAAQ,CAAC1rC,CAAD,EAAI;EACV,WAAO+jB,OAAO,CAAC/jB,CAAD,EAAI,KAAKwtC,MAAT,EAAiB,KAAKC,YAAtB,CAAd;EACD;EAED;;;;;;;EAKA1yC,EAAAA,QAAQ,CAAC6yC,SAAD,EAAY;EAClB,WAAO,KAAKC,UAAL,CAAgBD,SAAhB,EAA2B,KAA3B,CAAP;EACD;EAED;;;;;;;EAKAhB,EAAAA,OAAO,CAACgB,SAAD,EAAY;EACjB,WAAO,KAAKC,UAAL,CAAgBD,SAAhB,EAA2B,IAA3B,CAAP;EACD;;EAEDC,EAAAA,UAAU,CAACD,SAAD,EAAYE,OAAZ,EAAqB;EAC7B,QAAIC,GAAG,GAAG,GAAV;EACA,QAAIC,QAAQ,GAAG,EAAf;EACA,QAAI5E,KAAK,GAAG,KAAZ;;EACA,QAAI0E,OAAJ,EAAa;EACXC,MAAAA,GAAG,GAAG,IAAN;EACAC,MAAAA,QAAQ,GAAG,GAAX;EACA5E,MAAAA,KAAK,GAAG,EAAR;EACD;;EAED,QAAI6E,EAAE,GAAG,EAAT;EACA,QAAIC,GAAG,GAAG,EAAV;;EACA,SAAK,IAAI3jC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKkjC,YAAL,CAAkB/xC,MAAtC,EAA8C6O,CAAC,EAA/C,EAAmD;EACjD2jC,MAAAA,GAAG,GAAG,EAAN;;EACA,UAAI,KAAKT,YAAL,CAAkBljC,CAAlB,MAAyB,CAA7B,EAAgC;EAC9B,YAAI,KAAKijC,MAAL,CAAYjjC,CAAZ,MAAmB,CAAvB,EAA0B;EACxB2jC,UAAAA,GAAG,GAAG3B,gBAAgB,CAAC,KAAKkB,YAAL,CAAkBljC,CAAlB,CAAD,EAAuBqjC,SAAvB,CAAtB;EACD,SAFD,MAEO;EACL,cAAI,KAAKJ,MAAL,CAAYjjC,CAAZ,MAAmB,CAAvB,EAA0B;EACxB2jC,YAAAA,GAAG,aAAM3B,gBAAgB,CAAC,KAAKkB,YAAL,CAAkBljC,CAAlB,CAAD,EAAuBqjC,SAAvB,CAAhB,GACPxE,KADC,MAAH;EAED,WAHD,MAGO;EACL8E,YAAAA,GAAG,aAAM3B,gBAAgB,CAAC,KAAKkB,YAAL,CAAkBljC,CAAlB,CAAD,EAAuBqjC,SAAvB,CAAhB,GACPxE,KADC,cACQ2E,GADR,SACc,KAAKP,MAAL,CAAYjjC,CAAZ,CADd,SAC+ByjC,QAD/B,CAAH;EAED;EACF;;EAED,YAAI,KAAKP,YAAL,CAAkBljC,CAAlB,IAAuB,CAAvB,IAA4BA,CAAC,KAAK,KAAKkjC,YAAL,CAAkB/xC,MAAlB,GAA2B,CAAjE,EAAoE;EAClEwyC,UAAAA,GAAG,gBAASA,GAAT,CAAH;EACD,SAFD,MAEO,IAAI3jC,CAAC,KAAK,KAAKkjC,YAAL,CAAkB/xC,MAAlB,GAA2B,CAArC,EAAwC;EAC7CwyC,UAAAA,GAAG,cAAOA,GAAP,CAAH;EACD;EACF;;EACDD,MAAAA,EAAE,GAAGC,GAAG,GAAGD,EAAX;EACD;;EACD,QAAIA,EAAE,CAACE,MAAH,CAAU,CAAV,MAAiB,GAArB,EAA0B;EACxBF,MAAAA,EAAE,GAAGA,EAAE,CAACpnB,KAAH,CAAS,CAAT,CAAL;EACD;;EAED,4BAAiBonB,EAAjB;EACD;;EAED,SAAO/pB,IAAP,CAAYkqB,IAAZ,EAAkB;EAChB,QAAIA,IAAI,CAACtvC,IAAL,KAAc,4BAAlB,EAAgD;EAC9C,YAAM,IAAIrD,SAAJ,CAAc,wCAAd,CAAN;EACD;;EACD,WAAO,IAAIw3C,0BAAJ,CAA+B,IAA/B,EAAqC7E,IAArC,CAAP;EACD;;EA3FoE;;EA8FvE,SAAS8E,gBAAT,CAA0B9xB,UAA1B,EAAsCphB,CAAtC,EAAyCuR,CAAzC,EAA4Cg8B,MAA5C,EAAoD;EAClD,MAAIC,MAAM,GAAGtxC,KAAK,CAACqxC,MAAD,CAAL,CACV7kC,IADU,CACL,CADK,EAEVod,GAFU,CAEN,CAACqtB,CAAD,EAAIr2C,KAAJ,KAAcA,KAFR,CAAb;EAIA,QAAMs2C,MAAM,GAAGC,eAAe,CAACrzC,CAAD,EAAIuR,CAAJ,EAAOg8B,MAAP,CAA9B;EAEA,MAAI3xC,GAAJ;;EACA,OAAK,IAAID,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGy3C,MAAM,CAAC13C,MAA3B,EAAmCC,CAAC,EAApC,EAAwC;EACtC,QAAI23C,KAAK,GAAGF,MAAM,CAACz3C,CAAD,CAAlB;EACA,QAAI8xC,YAAY,GAAG8F,gBAAgB,CAACD,KAAD,EAAQ9F,MAAR,CAAnC;EAEA,QAAIuC,SAAS,GAAG/vC,CAAC,CAAC6mB,KAAF,EAAhB;;EACA,SAAK,IAAI5nB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGe,CAAC,CAACtE,MAAtB,EAA8BuD,CAAC,EAA/B,EAAmC;EACjC8wC,MAAAA,SAAS,CAAC9wC,CAAD,CAAT,GAAesS,CAAC,CAACtS,CAAD,CAAD,GAAO8kB,OAAO,CAAC/jB,CAAC,CAACf,CAAD,CAAF,EAAOuuC,MAAP,EAAeC,YAAf,CAA7B;EACAsC,MAAAA,SAAS,CAAC9wC,CAAD,CAAT,GAAe;EACbu0C,QAAAA,QAAQ,EAAEzD,SAAS,CAAC9wC,CAAD,CAAT,GAAe8wC,SAAS,CAAC9wC,CAAD,CADrB;EAEbwuC,QAAAA;EAFa,OAAf;EAID;;EAED,QAAI9mB,MAAM,GAAG8sB,eAAe,CAAC1D,SAAD,CAA5B;;EACA,QAAI,CAACn0C,GAAD,IAAQ+qB,MAAM,CAAC6sB,QAAP,GAAkB53C,GAAG,CAAC43C,QAAlC,EAA4C;EAC1C53C,MAAAA,GAAG,GAAG+qB,MAAN;EACD;EACF;;EAEDvF,EAAAA,UAAU,CAACmsB,MAAX,GAAoBA,MAApB;EACAnsB,EAAAA,UAAU,CAACosB,MAAX,GAAoBA,MAApB;EACApsB,EAAAA,UAAU,CAACqsB,YAAX,GAA0B7xC,GAAG,CAAC6xC,YAA9B;EACD;EAED;;;;;;;;;EAOA,SAAS4F,eAAT,CAAyBrzC,CAAzB,EAA4BuR,CAA5B,EAA+Bg8B,MAA/B,EAAuC;EACrC,MAAItf,GAAG,GAAGvtB,IAAI,CAACwG,KAAL,CAAWlH,CAAC,CAACtE,MAAF,GAAW6xC,MAAtB,CAAV;EACA,MAAI6F,MAAM,GAAG,IAAIl3C,KAAJ,CAAU+xB,GAAV,CAAb;;EAEA,OAAK,IAAItyB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGqE,CAAC,CAACtE,MAAtB,EAA8BC,CAAC,EAA/B,EAAmC;EACjC,QAAI+uB,GAAG,GAAGhqB,IAAI,CAACwG,KAAL,CAAWxG,IAAI,CAACkI,MAAL,KAAgBqlB,GAA3B,CAAV;EAEA,QAAIylB,OAAO,GAAG,CAAd;;EACA,WAAOA,OAAO,GAAG1zC,CAAC,CAACtE,MAAnB,EAA2B;EACzB,UAAI,CAAC03C,MAAM,CAAC1oB,GAAD,CAAX,EAAkB;EAChB0oB,QAAAA,MAAM,CAAC1oB,GAAD,CAAN,GAAc,CACZ;EACE1qB,UAAAA,CAAC,EAAEA,CAAC,CAACrE,CAAD,CADN;EAEE4V,UAAAA,CAAC,EAAEA,CAAC,CAAC5V,CAAD;EAFN,SADY,CAAd;EAMA;EACD,OARD,MAQO,IAAIy3C,MAAM,CAAC1oB,GAAD,CAAN,CAAYhvB,MAAZ,GAAqB6xC,MAAzB,EAAiC;EACtC6F,QAAAA,MAAM,CAAC1oB,GAAD,CAAN,CAAY7rB,IAAZ,CAAiB;EACfmB,UAAAA,CAAC,EAAEA,CAAC,CAACrE,CAAD,CADW;EAEf4V,UAAAA,CAAC,EAAEA,CAAC,CAAC5V,CAAD;EAFW,SAAjB;EAIA;EACD,OANM,MAMA;EACL+3C,QAAAA,OAAO;EACPhpB,QAAAA,GAAG,GAAG,CAACA,GAAG,GAAG,CAAP,IAAYuD,GAAlB;EACD;EACF;;EAED,QAAIylB,OAAO,KAAK1zC,CAAC,CAACtE,MAAlB,EAA0B;EACxB,aAAO03C,MAAP;EACD;EACF;;EACD,SAAOA,MAAP;EACD;EAED;;;;;;;;EAMA,SAASG,gBAAT,CAA0BD,KAA1B,EAAiC9F,MAAjC,EAAyC;EACvC,MAAI32B,CAAC,GAAGy8B,KAAK,CAACzsB,KAAN,EAAR;EACA,MAAI7M,CAAC,GAAGs5B,KAAK,CAACzsB,KAAN,EAAR;;EACA,OAAK,IAAIlrB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGkb,CAAC,CAACnb,MAAtB,EAA8BC,CAAC,EAA/B,EAAmC;EACjCqe,IAAAA,CAAC,CAACre,CAAD,CAAD,GAAO,CAAC23C,KAAK,CAAC33C,CAAD,CAAL,CAAS4V,CAAV,CAAP;EACAsF,IAAAA,CAAC,CAAClb,CAAD,CAAD,GAAO,IAAIO,KAAJ,CAAUsxC,MAAM,CAAC9xC,MAAjB,CAAP;;EACA,SAAK,IAAIuD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGuuC,MAAM,CAAC9xC,MAA3B,EAAmCuD,CAAC,EAApC,EAAwC;EACtC4X,MAAAA,CAAC,CAAClb,CAAD,CAAD,CAAKsD,CAAL,IAAUyB,IAAI,CAACC,GAAL,CAAS2yC,KAAK,CAAC33C,CAAD,CAAL,CAASqE,CAAlB,EAAqBwtC,MAAM,CAACvuC,CAAD,CAA3B,CAAV;EACD;EACF;;EAED,SAAO0X,KAAK,CAACE,CAAD,EAAImD,CAAJ,CAAL,CAAY3c,SAAZ,EAAP;EACD;;EAED,SAAS0mB,OAAT,CAAiB/jB,CAAjB,EAAoBwtC,MAApB,EAA4BC,YAA5B,EAA0C;EACxC,MAAIl8B,CAAC,GAAG,CAAR;;EACA,OAAK,IAAIhH,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGijC,MAAM,CAAC9xC,MAA3B,EAAmC6O,CAAC,EAApC,EAAwC;EACtCgH,IAAAA,CAAC,IAAIk8B,YAAY,CAACljC,CAAD,CAAZ,GAAkB7J,IAAI,CAACC,GAAL,CAASX,CAAT,EAAYwtC,MAAM,CAACjjC,CAAD,CAAlB,CAAvB;EACD;;EACD,SAAOgH,CAAP;EACD;;EAED,SAASkiC,eAAT,CAAyB1D,SAAzB,EAAoC;EAClCA,EAAAA,SAAS,CAACz8B,IAAV,CAAe,CAACpB,CAAD,EAAIC,CAAJ,KAAUD,CAAC,CAACshC,QAAF,GAAarhC,CAAC,CAACqhC,QAAxC;EAEA,MAAIpqC,CAAC,GAAG2mC,SAAS,CAACr0C,MAAlB;EACA,MAAIiyB,IAAI,GAAGjtB,IAAI,CAACwG,KAAL,CAAWkC,CAAC,GAAG,CAAf,CAAX;EACA,SAAOA,CAAC,GAAG,CAAJ,KAAU,CAAV,GAAc2mC,SAAS,CAACpiB,IAAI,GAAG,CAAR,CAAvB,GAAoCoiB,SAAS,CAACpiB,IAAD,CAApD;EACD;;ECvND;;;;;;;;AAQA,EAAe,SAASgmB,gBAAT,CACbxqC,IADa,EAEbyqC,UAFa,EAGbC,qBAHa,EAIb;EACA,MAAI93B,KAAK,GAAG,CAAZ;EACA,QAAM+3B,IAAI,GAAGD,qBAAqB,CAACD,UAAD,CAAlC;;EAEA,OAAK,IAAIj4C,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGwN,IAAI,CAACnJ,CAAL,CAAOtE,MAA3B,EAAmCC,CAAC,EAApC,EAAwC;EACtCogB,IAAAA,KAAK,IAAIrb,IAAI,CAAC0F,GAAL,CAAS+C,IAAI,CAACoI,CAAL,CAAO5V,CAAP,IAAYm4C,IAAI,CAAC3qC,IAAI,CAACnJ,CAAL,CAAOrE,CAAP,CAAD,CAAzB,CAAT;EACD;;EAED,SAAOogB,KAAP;EACD;;ECnBD;;;;;;;;;;;EAUA,SAASg4B,gBAAT,CACE5qC,IADF,EAEE6qC,aAFF,EAGEhP,MAHF,EAIEiP,kBAJF,EAKEC,aALF,EAME;EACA,QAAMlpC,CAAC,GAAGg6B,MAAM,CAACtpC,MAAjB;EACA,QAAMqP,CAAC,GAAG5B,IAAI,CAACnJ,CAAL,CAAOtE,MAAjB;EAEA,MAAI8wB,GAAG,GAAG,IAAItwB,KAAJ,CAAU8O,CAAV,CAAV;;EAEA,OAAK,IAAI24B,KAAK,GAAG,CAAjB,EAAoBA,KAAK,GAAG34B,CAA5B,EAA+B24B,KAAK,EAApC,EAAwC;EACtCnX,IAAAA,GAAG,CAACmX,KAAD,CAAH,GAAa,IAAIznC,KAAJ,CAAU6O,CAAV,CAAb;EACA,QAAIopC,SAAS,GAAGnP,MAAM,CAAChb,MAAP,EAAhB;EACAmqB,IAAAA,SAAS,CAACxQ,KAAD,CAAT,IAAoBsQ,kBAApB;EACA,QAAIG,SAAS,GAAGF,aAAa,CAACC,SAAD,CAA7B;;EAEA,SAAK,IAAInc,KAAK,GAAG,CAAjB,EAAoBA,KAAK,GAAGjtB,CAA5B,EAA+BitB,KAAK,EAApC,EAAwC;EACtCxL,MAAAA,GAAG,CAACmX,KAAD,CAAH,CAAW3L,KAAX,IAAoBgc,aAAa,CAAChc,KAAD,CAAb,GAAuBoc,SAAS,CAACjrC,IAAI,CAACnJ,CAAL,CAAOg4B,KAAP,CAAD,CAApD;EACD;EACF;;EACD,SAAO,IAAIh1B,MAAJ,CAAWwpB,GAAX,CAAP;EACD;EAED;;;;;;;;;EAOA,SAAS6nB,cAAT,CAAwBlrC,IAAxB,EAA8B6qC,aAA9B,EAA6C;EAC3C,QAAMjpC,CAAC,GAAG5B,IAAI,CAACnJ,CAAL,CAAOtE,MAAjB;EAEA,MAAI8wB,GAAG,GAAG,IAAItwB,KAAJ,CAAU6O,CAAV,CAAV;;EAEA,OAAK,IAAIitB,KAAK,GAAG,CAAjB,EAAoBA,KAAK,GAAGjtB,CAA5B,EAA+BitB,KAAK,EAApC,EAAwC;EACtCxL,IAAAA,GAAG,CAACwL,KAAD,CAAH,GAAa,CAAC7uB,IAAI,CAACoI,CAAL,CAAOymB,KAAP,IAAgBgc,aAAa,CAAChc,KAAD,CAA9B,CAAb;EACD;;EAED,SAAO,IAAIh1B,MAAJ,CAAWwpB,GAAX,CAAP;EACD;EAED;;;;;;;;;;;;AAUA,EAAe,SAAS4I,MAAT,CACbjsB,IADa,EAEb67B,MAFa,EAGbsP,OAHa,EAIbL,kBAJa,EAKbJ,qBALa,EAMb;EACA,MAAIl1C,KAAK,GAAG21C,OAAO,GAAGL,kBAAV,GAA+BA,kBAA3C;EACA,MAAI1/B,QAAQ,GAAGvR,MAAM,CAACiG,GAAP,CAAW+7B,MAAM,CAACtpC,MAAlB,EAA0BspC,MAAM,CAACtpC,MAAjC,EAAyCiD,KAAzC,CAAf;EAEA,QAAMm1C,IAAI,GAAGD,qBAAqB,CAAC7O,MAAD,CAAlC;EACA,MAAIgP,aAAa,GAAG7qC,IAAI,CAACnJ,CAAL,CAAO8lB,GAAP,CAAYljB,CAAD,IAAOkxC,IAAI,CAAClxC,CAAD,CAAtB,CAApB;EAEA,MAAI2xC,YAAY,GAAGR,gBAAgB,CACjC5qC,IADiC,EAEjC6qC,aAFiC,EAGjChP,MAHiC,EAIjCiP,kBAJiC,EAKjCJ,qBALiC,CAAnC;EAOA,MAAIW,UAAU,GAAGH,cAAc,CAAClrC,IAAD,EAAO6qC,aAAP,CAA/B;EACA,MAAIS,aAAa,GAAG/5B,OAAO,CACzBnG,QAAQ,CAACtR,GAAT,CAAasxC,YAAY,CAAC1mC,IAAb,CAAkB0mC,YAAY,CAACrhC,SAAb,EAAlB,CAAb,CADyB,CAA3B;EAIA8xB,EAAAA,MAAM,GAAG,IAAIhiC,MAAJ,CAAW,CAACgiC,MAAD,CAAX,CAAT;EACAA,EAAAA,MAAM,GAAGA,MAAM,CAAC1hC,GAAP,CACPmxC,aAAa,CACV5mC,IADH,CACQ0mC,YADR,EAEG1mC,IAFH,CAEQ2mC,UAFR,EAGG5wC,GAHH,CAGOqwC,kBAHP,EAIG/gC,SAJH,EADO,CAAT;EAQA,SAAO8xB,MAAM,CAAC3nC,SAAP,EAAP;EACD;;EClGD;;;;;;;;;;;;;;;AAcA,EAAe,SAASq3C,kBAAT,CACbvrC,IADa,EAEb0qC,qBAFa,EAIb;EAAA,MADA/3C,OACA,uEADU,EACV;EACA,MAAI;EACFm5B,IAAAA,aAAa,GAAG,GADd;EAEFgf,IAAAA,kBAAkB,GAAG,KAFnB;EAGFK,IAAAA,OAAO,GAAG,CAHR;EAIFK,IAAAA,cAAc,GAAG,KAJf;EAKFC,IAAAA,SALE;EAMFC,IAAAA,SANE;EAOFC,IAAAA;EAPE,MAQAh5C,OARJ;;EAUA,MAAIw4C,OAAO,IAAI,CAAf,EAAkB;EAChB,UAAM,IAAIlpC,KAAJ,CAAU,8CAAV,CAAN;EACD,GAFD,MAEO,IAAI,CAACjC,IAAI,CAACnJ,CAAN,IAAW,CAACmJ,IAAI,CAACoI,CAArB,EAAwB;EAC7B,UAAM,IAAInG,KAAJ,CAAU,+CAAV,CAAN;EACD,GAFM,MAEA,IACL,CAAClP,KAAK,CAACV,OAAN,CAAc2N,IAAI,CAACnJ,CAAnB,CAAD,IACAmJ,IAAI,CAACnJ,CAAL,CAAOtE,MAAP,GAAgB,CADhB,IAEA,CAACQ,KAAK,CAACV,OAAN,CAAc2N,IAAI,CAACoI,CAAnB,CAFD,IAGApI,IAAI,CAACoI,CAAL,CAAO7V,MAAP,GAAgB,CAJX,EAKL;EACA,UAAM,IAAI0P,KAAJ,CACJ,sEADI,CAAN;EAGD,GATM,MASA,IAAIjC,IAAI,CAACnJ,CAAL,CAAOtE,MAAP,KAAkByN,IAAI,CAACoI,CAAL,CAAO7V,MAA7B,EAAqC;EAC1C,UAAM,IAAI0P,KAAJ,CAAU,qDAAV,CAAN;EACD;;EAED,MAAIwoC,UAAU,GACZkB,aAAa,IAAI,IAAI54C,KAAJ,CAAU23C,qBAAqB,CAACn4C,MAAhC,EAAwCgN,IAAxC,CAA6C,CAA7C,CADnB;EAEA,MAAIqsC,MAAM,GAAGnB,UAAU,CAACl4C,MAAxB;EACAm5C,EAAAA,SAAS,GAAGA,SAAS,IAAI,IAAI34C,KAAJ,CAAU64C,MAAV,EAAkBrsC,IAAlB,CAAuBI,MAAM,CAACksC,gBAA9B,CAAzB;EACAJ,EAAAA,SAAS,GAAGA,SAAS,IAAI,IAAI14C,KAAJ,CAAU64C,MAAV,EAAkBrsC,IAAlB,CAAuBI,MAAM,CAACmsC,gBAA9B,CAAzB;;EAEA,MAAIJ,SAAS,CAACn5C,MAAV,KAAqBk5C,SAAS,CAACl5C,MAAnC,EAA2C;EACzC,UAAM,IAAI0P,KAAJ,CAAU,+CAAV,CAAN;EACD;;EAED,MAAI,CAAClP,KAAK,CAACV,OAAN,CAAco4C,UAAd,CAAL,EAAgC;EAC9B,UAAM,IAAIxoC,KAAJ,CAAU,gCAAV,CAAN;EACD;;EAED,MAAI2Q,KAAK,GAAG43B,gBAAgB,CAACxqC,IAAD,EAAOyqC,UAAP,EAAmBC,qBAAnB,CAA5B;EAEA,MAAIlf,SAAS,GAAG5Y,KAAK,IAAI44B,cAAzB;;EAEA,OACE,IAAIO,SAAS,GAAG,CADlB,EAEEA,SAAS,GAAGjgB,aAAZ,IAA6B,CAACN,SAFhC,EAGEugB,SAAS,EAHX,EAIE;EACAtB,IAAAA,UAAU,GAAGxe,MAAI,CACfjsB,IADe,EAEfyqC,UAFe,EAGfU,OAHe,EAIfL,kBAJe,EAKfJ,qBALe,CAAjB;;EAQA,SAAK,IAAItpC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGwqC,MAApB,EAA4BxqC,CAAC,EAA7B,EAAiC;EAC/BqpC,MAAAA,UAAU,CAACrpC,CAAD,CAAV,GAAgB7J,IAAI,CAAC9E,GAAL,CACd8E,IAAI,CAACpF,GAAL,CAASs5C,SAAS,CAACrqC,CAAD,CAAlB,EAAuBqpC,UAAU,CAACrpC,CAAD,CAAjC,CADc,EAEdsqC,SAAS,CAACtqC,CAAD,CAFK,CAAhB;EAID;;EAEDwR,IAAAA,KAAK,GAAG43B,gBAAgB,CAACxqC,IAAD,EAAOyqC,UAAP,EAAmBC,qBAAnB,CAAxB;EACA,QAAI16B,KAAK,CAAC4C,KAAD,CAAT,EAAkB;EAClB4Y,IAAAA,SAAS,GAAG5Y,KAAK,IAAI44B,cAArB;EACD;;EAED,SAAO;EACLQ,IAAAA,eAAe,EAAEvB,UADZ;EAELwB,IAAAA,cAAc,EAAEr5B,KAFX;EAGL6Y,IAAAA,UAAU,EAAEsgB;EAHP,GAAP;EAKD;;ECjGD,gBAAc,GAAG,qBAAA,CAASG,QAAT,EAAmBC,MAAnB,EAA2BC,UAA3B,EAAuCr3B,GAAvC,EAA4CC,IAA5C,EAAkD;EACjE,MAAI4L,GAAJ,EAASD,GAAT;EAEA,MAAG5L,GAAG,KAAKliB,SAAX,EACEkiB,GAAG,GAAG,CAAN,CADF,KAGK;EACHA,IAAAA,GAAG,GAAGA,GAAG,GAAC,CAAV;EACA,QAAGA,GAAG,GAAG,CAAN,IAAWA,GAAG,IAAIm3B,QAAQ,CAAC35C,MAA9B,EACE,MAAM,IAAIW,UAAJ,CAAe,qBAAf,CAAN;EACH;EAED,MAAG8hB,IAAI,KAAKniB,SAAZ,EACEmiB,IAAI,GAAGk3B,QAAQ,CAAC35C,MAAT,GAAkB,CAAzB,CADF,KAGK;EACHyiB,IAAAA,IAAI,GAAGA,IAAI,GAAC,CAAZ;EACA,QAAGA,IAAI,GAAGD,GAAP,IAAcC,IAAI,IAAIk3B,QAAQ,CAAC35C,MAAlC,EACE,MAAM,IAAIW,UAAJ,CAAe,qBAAf,CAAN;EACH;;EAED,SAAM6hB,GAAG,IAAIC,IAAb,EAAmB;;;EAGjB4L,IAAAA,GAAG,GAAG7L,GAAG,IAAIC,IAAI,GAAGD,GAAP,IAAc,CAAlB,CAAT;EACA4L,IAAAA,GAAG,GAAG,CAACyrB,UAAU,CAACF,QAAQ,CAACtrB,GAAD,CAAT,EAAgBurB,MAAhB,EAAwBvrB,GAAxB,EAA6BsrB,QAA7B,CAAjB;;;EAGA,QAAGvrB,GAAG,GAAG,GAAT,EACE5L,GAAG,GAAI6L,GAAG,GAAG,CAAb;;EADF,SAIK,IAAGD,GAAG,GAAG,GAAT,EACH3L,IAAI,GAAG4L,GAAG,GAAG,CAAb;;EADG,WAKH,OAAOA,GAAP;EACH;;;;EAGD,SAAO,CAAC7L,GAAR;EACD,CA1CD;;ECEA,SAASs3B,YAAT,CAAsBC,MAAtB,EAA8B;EAC7B,MAAI,OAAOA,MAAP,KAAkB,QAAlB,IAA8B3sC,MAAM,CAACqQ,KAAP,CAAas8B,MAAb,CAAlC,EAAwD;EACvD,UAAM,IAAIh6C,SAAJ,CAAc,mBAAd,CAAN;EACA;EACD;;EAED,aAAiB,GAAG,CAACynB,IAAD,EAAOC,KAAP,KAAiB;EACpCqyB,EAAAA,YAAY,CAACtyB,IAAD,CAAZ;EACAsyB,EAAAA,YAAY,CAACryB,KAAD,CAAZ;EACA,SAAOD,IAAI,GAAGC,KAAd;EACA,CAJD;;EAMA,cAAkB,GAAG,CAACD,IAAD,EAAOC,KAAP,KAAiB;EACrCqyB,EAAAA,YAAY,CAACtyB,IAAD,CAAZ;EACAsyB,EAAAA,YAAY,CAACryB,KAAD,CAAZ;EACA,SAAOA,KAAK,GAAGD,IAAf;EACA,CAJD;;;;;;;;;;;;;;ECXO,MAAMwyB,YAAY,GAAG,UAArB;EAEP,MAAMC,YAAY,GAAG;EAEnBD,YAFmB;EAInB;EACA,CALmB,EAMnB,EANmB,EAOnB,EAPmB,EAQnB,EARmB,EASnB,EATmB,EAUnB,GAVmB,EAWnB,GAXmB,EAYnB,GAZmB,EAanB,IAbmB,EAcnB,IAdmB,EAenB,IAfmB,EAgBnB,KAhBmB,EAiBnB,KAjBmB,EAkBnB,KAlBmB,EAmBnB,MAnBmB,EAoBnB,MApBmB,EAqBnB,MArBmB,EAsBnB,MAtBmB,EAuBnB,OAvBmB,EAwBnB,OAxBmB,EAyBnB,OAzBmB,EA0BnB,QA1BmB,EA2BnB,QA3BmB,EA4BnB,QA5BmB,EA6BnB,SA7BmB,EA8BnB,SA9BmB,EA+BnB,SA/BmB,EAgCnB,SAhCmB,EAiCnB,UAjCmB;EAoCnB,GApCmB,EAqCnB,GArCmB,EAsCnB,IAtCmB,EAuCnB,IAvCmB,EAwCnB,IAxCmB,EAyCnB,KAzCmB,EA0CnB,KA1CmB,EA2CnB,KA3CmB,EA4CnB,MA5CmB,EA6CnB,MA7CmB,EA8CnB,MA9CmB,EA+CnB,MA/CmB,EAgDnB,OAhDmB,EAiDnB,OAjDmB,EAkDnB,OAlDmB,EAmDnB,QAnDmB,EAoDnB,QApDmB,EAqDnB,QArDmB,EAsDnB,SAtDmB,EAuDnB,SAvDmB,EAwDnB,SAxDmB,EAyDnB,SAzDmB,EA0DnB,UA1DmB;EA6DnB,GA7DmB,EA8DnB,IA9DmB,EA+DnB,IA/DmB,EAgEnB,IAhEmB,EAiEnB,KAjEmB,EAkEnB,KAlEmB,EAmEnB,KAnEmB,EAoEnB,MApEmB,EAqEnB,MArEmB,EAsEnB,MAtEmB,EAuEnB,MAvEmB,EAwEnB,OAxEmB,EAyEnB,OAzEmB,EA0EnB,OA1EmB,EA2EnB,QA3EmB,EA4EnB,QA5EmB,EA6EnB,QA7EmB,EA8EnB,SA9EmB,EA+EnB,SA/EmB,EAgFnB,SAhFmB,EAiFnB,UAjFmB,EAkFnB,UAlFmB;EAqFnB,IArFmB,EAsFnB,IAtFmB,EAuFnB,IAvFmB,EAwFnB,IAxFmB,EAyFnB,KAzFmB,EA0FnB,KA1FmB,EA2FnB,KA3FmB,EA4FnB,MA5FmB,EA6FnB,MA7FmB,EA8FnB,MA9FmB,EA+FnB,OA/FmB,EAgGnB,OAhGmB,EAiGnB,OAjGmB,EAkGnB,OAlGmB,EAmGnB,QAnGmB,EAoGnB,QApGmB,EAqGnB,QArGmB,EAsGnB,SAtGmB,EAuGnB,SAvGmB,EAwGnB,SAxGmB,EAyGnB,UAzGmB;EA4GnB,EA5GmB,EA6GnB,EA7GmB,EA8GnB,GA9GmB,EA+GnB,GA/GmB,EAgHnB,GAhHmB,EAiHnB,IAjHmB,EAkHnB,IAlHmB,EAmHnB,IAnHmB,EAoHnB,IApHmB,EAqHnB,KArHmB,EAsHnB,KAtHmB,EAuHnB,KAvHmB,EAwHnB,MAxHmB,EAyHnB,MAzHmB,EA0HnB,MA1HmB,EA2HnB,OA3HmB,EA4HnB,OA5HmB,EA6HnB,OA7HmB,EA8HnB,OA9HmB,EA+HnB,QA/HmB,EAgInB,QAhImB,EAiInB,QAjImB,EAkInB,SAlImB,EAmInB,SAnImB,EAoInB,SApImB,EAqInB,UArImB;EAwInB,GAxImB,EAyInB,IAzImB,EA0InB,IA1ImB,EA2InB,IA3ImB,EA4InB,IA5ImB,EA6InB,KA7ImB,EA8InB,KA9ImB,EA+InB,KA/ImB,EAgJnB,MAhJmB,EAiJnB,MAjJmB,EAkJnB,MAlJmB,EAmJnB,OAnJmB,EAoJnB,OApJmB,EAqJnB,OArJmB,EAsJnB,OAtJmB,EAuJnB,QAvJmB,EAwJnB,QAxJmB,EAyJnB,QAzJmB,EA0JnB,SA1JmB,EA2JnB,SA3JmB,EA4JnB,SA5JmB,EA6JnB,UA7JmB;EAgKnB,GAhKmB,EAiKnB,GAjKmB,EAkKnB,IAlKmB,EAmKnB,IAnKmB,EAoKnB,IApKmB,EAqKnB,KArKmB,EAsKnB,KAtKmB,EAuKnB,KAvKmB,EAwKnB,KAxKmB,EAyKnB,MAzKmB,EA0KnB,MA1KmB,EA2KnB,MA3KmB,EA4KnB,OA5KmB,EA6KnB,OA7KmB,EA8KnB,OA9KmB,EA+KnB,QA/KmB,EAgLnB,QAhLmB,EAiLnB,QAjLmB,EAkLnB,QAlLmB,EAmLnB,SAnLmB,EAoLnB,SApLmB,EAqLnB,SArLmB,EAsLnB,UAtLmB;EAyLnB,CAzLmB,EA0LnB,CA1LmB,EA2LnB,EA3LmB,EA4LnB,EA5LmB,EA6LnB,EA7LmB,EA8LnB,GA9LmB,EA+LnB,GA/LmB,EAgMnB,GAhMmB,EAiMnB,IAjMmB,EAkMnB,IAlMmB,EAmMnB,IAnMmB,EAoMnB,KApMmB,EAqMnB,KArMmB,EAsMnB,KAtMmB,EAuMnB,KAvMmB,EAwMnB,MAxMmB,EAyMnB,MAzMmB,EA0MnB,MA1MmB,EA2MnB,OA3MmB,EA4MnB,OA5MmB,EA6MnB,OA7MmB,EA8MnB,QA9MmB,EA+MnB,QA/MmB,EAgNnB,QAhNmB,EAiNnB,QAjNmB,EAkNnB,SAlNmB,EAmNnB,SAnNmB,EAoNnB,SApNmB,EAqNnB,UArNmB;EAwNnB,EAxNmB,EAyNnB,EAzNmB,EA0NnB,GA1NmB,EA2NnB,GA3NmB,EA4NnB,GA5NmB,EA6NnB,IA7NmB,EA8NnB,IA9NmB,EA+NnB,IA/NmB,EAgOnB,KAhOmB,EAiOnB,KAjOmB,EAkOnB,KAlOmB,EAmOnB,KAnOmB,EAoOnB,MApOmB,EAqOnB,MArOmB,EAsOnB,MAtOmB,EAuOnB,OAvOmB,EAwOnB,OAxOmB,EAyOnB,OAzOmB,EA0OnB,QA1OmB,EA2OnB,QA3OmB,EA4OnB,QA5OmB,EA6OnB,QA7OmB,EA8OnB,SA9OmB,EA+OnB,SA/OmB,EAgPnB,SAhPmB,EAiPnB,UAjPmB;EAoPnB,GApPmB,EAqPnB,GArPmB,EAsPnB,IAtPmB,EAuPnB,IAvPmB,EAwPnB,IAxPmB,EAyPnB,KAzPmB,EA0PnB,KA1PmB,EA2PnB,KA3PmB,EA4PnB,KA5PmB,EA6PnB,MA7PmB,EA8PnB,MA9PmB,EA+PnB,MA/PmB,EAgQnB,OAhQmB,EAiQnB,OAjQmB,EAkQnB,OAlQmB,EAmQnB,QAnQmB,EAoQnB,QApQmB,EAqQnB,QArQmB,EAsQnB,SAtQmB,EAuQnB,SAvQmB,EAwQnB,SAxQmB,EAyQnB,SAzQmB,EA0QnB,UA1QmB;EA6QnB,EA7QmB,EA8QnB,EA9QmB,EA+QnB,EA/QmB,EAgRnB,GAhRmB,EAiRnB,GAjRmB,EAkRnB,GAlRmB,EAmRnB,IAnRmB,EAoRnB,IApRmB,EAqRnB,IArRmB,EAsRnB,IAtRmB,EAuRnB,KAvRmB,EAwRnB,KAxRmB,EAyRnB,KAzRmB,EA0RnB,MA1RmB,EA2RnB,MA3RmB,EA4RnB,MA5RmB,EA6RnB,OA7RmB,EA8RnB,OA9RmB,EA+RnB,OA/RmB,EAgSnB,OAhSmB,EAiSnB,QAjSmB,EAkSnB,QAlSmB,EAmSnB,QAnSmB,EAoSnB,SApSmB,EAqSnB,SArSmB,EAsSnB,SAtSmB,EAuSnB,UAvSmB;EA0SnB,EA1SmB,EA2SnB,EA3SmB,EA4SnB,EA5SmB,EA6SnB,GA7SmB,EA8SnB,GA9SmB,EA+SnB,GA/SmB,EAgTnB,IAhTmB,EAiTnB,IAjTmB,EAkTnB,IAlTmB,EAmTnB,KAnTmB,EAoTnB,KApTmB,EAqTnB,KArTmB,EAsTnB,KAtTmB,EAuTnB,MAvTmB,EAwTnB,MAxTmB,EAyTnB,MAzTmB,EA0TnB,OA1TmB,EA2TnB,OA3TmB,EA4TnB,OA5TmB,EA6TnB,QA7TmB,EA8TnB,QA9TmB,EA+TnB,QA/TmB,EAgUnB,QAhUmB,EAiUnB,SAjUmB,EAkUnB,SAlUmB,EAmUnB,SAnUmB,EAoUnB,UApUmB;EAuUnB,EAvUmB,EAwUnB,GAxUmB,EAyUnB,GAzUmB,EA0UnB,GA1UmB,EA2UnB,GA3UmB,EA4UnB,IA5UmB,EA6UnB,IA7UmB,EA8UnB,IA9UmB,EA+UnB,KA/UmB,EAgVnB,KAhVmB,EAiVnB,KAjVmB,EAkVnB,MAlVmB,EAmVnB,MAnVmB,EAoVnB,MApVmB,EAqVnB,MArVmB,EAsVnB,OAtVmB,EAuVnB,OAvVmB,EAwVnB,OAxVmB,EAyVnB,QAzVmB,EA0VnB,QA1VmB,EA2VnB,QA3VmB,EA4VnB,SA5VmB,EA6VnB,SA7VmB,EA8VnB,SA9VmB,EA+VnB,SA/VmB,EAgWnB,UAhWmB,CAArB;EAmWAC,YAAY,CAACriC,IAAb,CAAkBsiC,SAAlB;AAEA,EAAO,SAASC,SAAT,CAAmBl3C,KAAnB,EAA0B;EAC/B,MAAI7B,KAAK,GAAGg5C,YAAY,CAACH,YAAD,EAAeh3C,KAAf,EAAsBi3C,SAAtB,CAAxB;;EACA,MAAI94C,KAAK,GAAG,CAAZ,EAAe;EACbA,IAAAA,KAAK,GAAG,CAACA,KAAT;EACD;;EACD,SAAO64C,YAAY,CAAC74C,KAAD,CAAnB;EACD;;EC9WD,MAAMi5C,IAAI,GAAG,CAAb;EACA,MAAMC,IAAI,GAAG,CAAb;EACA,MAAMC,OAAO,GAAG,CAAhB;EAEA,MAAMC,sBAAsB,GAAG,GAA/B;EACA,MAAMC,oBAAoB,GAAG,IAAI,CAAjC;EACA,MAAMC,oBAAoB,GAAG,IAAI,CAAjC;AAEA,EAAe,MAAMC,SAAN,CAAgB;EAC7B90C,EAAAA,WAAW,GAAe;EAAA,QAAdzF,OAAc,uEAAJ,EAAI;;EACxB,QAAIA,OAAO,YAAYu6C,SAAvB,EAAkC;EAChC,WAAKC,KAAL,GAAax6C,OAAO,CAACw6C,KAAR,CAAczvB,KAAd,EAAb;EACA,WAAKZ,MAAL,GAAcnqB,OAAO,CAACmqB,MAAR,CAAeY,KAAf,EAAd;EACA,WAAKmL,KAAL,GAAal2B,OAAO,CAACk2B,KAAR,CAAcnL,KAAd,EAAb;EACA,WAAK0vB,aAAL,GAAqBz6C,OAAO,CAACy6C,aAA7B;EACA,WAAKC,aAAL,GAAqB16C,OAAO,CAAC06C,aAA7B;EACA,WAAKtU,QAAL,GAAgBpmC,OAAO,CAAComC,QAAxB;EACA,WAAKuU,WAAL,GAAmB36C,OAAO,CAAC26C,WAA3B;EACA,WAAKC,YAAL,GAAoB56C,OAAO,CAAC46C,YAA5B;EACA,WAAKC,aAAL,GAAqB76C,OAAO,CAAC06C,aAA7B;EACA;EACD;;EAED,UAAMI,eAAe,GACnB96C,OAAO,CAAC86C,eAAR,KAA4B56C,SAA5B,GACIk6C,sBADJ,GAEIp6C,OAAO,CAAC86C,eAHd;;EAIA,QAAIA,eAAe,GAAG,CAAtB,EAAyB;EACvB,YAAM,IAAIv6C,UAAJ,wDAC4Cu6C,eAD5C,EAAN;EAGD;;EAED,UAAML,aAAa,GACjBz6C,OAAO,CAACy6C,aAAR,KAA0Bv6C,SAA1B,GACIm6C,oBADJ,GAEIr6C,OAAO,CAACy6C,aAHd;EAIA,UAAMC,aAAa,GACjB16C,OAAO,CAAC06C,aAAR,KAA0Bx6C,SAA1B,GACIo6C,oBADJ,GAEIt6C,OAAO,CAAC06C,aAHd;;EAIA,QAAID,aAAa,GAAG,CAAhB,IAAqBA,aAAa,IAAI,CAA1C,EAA6C;EAC3C,YAAM,IAAIl6C,UAAJ,kCAAyCk6C,aAAzC,EAAN;EACD;;EACD,QAAIC,aAAa,IAAI,CAAjB,IAAsBA,aAAa,IAAI,CAA3C,EAA8C;EAC5C,YAAM,IAAIn6C,UAAJ,kCAAyCm6C,aAAzC,EAAN;EACD;;EACD,QAAID,aAAa,IAAIC,aAArB,EAAoC;EAClC,YAAM,IAAIn6C,UAAJ,0BACck6C,aADd,mDACoEC,aADpE,OAAN;EAGD;;EAED,QAAIK,QAAQ,GAAGD,eAAf,CA5CwB;EA8CxB;EACA;;EACAC,IAAAA,QAAQ,GAAIA,QAAQ,GAAGL,aAAZ,GAA6B,CAAxC;EACAK,IAAAA,QAAQ,GAAGhB,SAAS,CAACgB,QAAD,CAApB;EACA,QAAIA,QAAQ,KAAK,CAAjB,EAAoBA,QAAQ,GAAG,CAAX;EAEpB,SAAKP,KAAL,GAAa53C,UAAQ,CAACm4C,QAAD,CAArB;EACA,SAAK5wB,MAAL,GAAcvnB,UAAQ,CAACm4C,QAAD,CAAtB;EACA,SAAK7kB,KAAL,GAAatzB,UAAQ,CAACm4C,QAAD,CAArB;EAEA,SAAKN,aAAL,GAAqBA,aAArB;;EACA,QAAIM,QAAQ,KAAKnB,YAAjB,EAA+B;EAC7B,WAAKc,aAAL,GAAqB,CAArB;EACD,KAFD,MAEO;EACL,WAAKA,aAAL,GAAqBA,aAArB;EACD;;EAED,SAAKtU,QAAL,GAAgB,CAAhB;EACA,SAAKuU,WAAL,GAAmBI,QAAnB;EAEA,SAAKH,YAAL,GAAoB,CAApB;EACA,SAAKC,aAAL,GAAqBG,mBAAmB,CAACD,QAAD,EAAW,KAAKL,aAAhB,CAAxC;EACD;;EAED/rC,EAAAA,KAAK,GAAG;EACN,WAAO,IAAI4rC,SAAJ,CAAc,IAAd,CAAP;EACD;;EAED,MAAIl2C,IAAJ,GAAW;EACT,WAAO,KAAK+hC,QAAZ;EACD;;EAEDhjC,EAAAA,GAAG,CAAC63C,GAAD,EAAM;EACP,UAAMp7C,CAAC,GAAG,KAAKq7C,UAAL,CAAgBD,GAAhB,CAAV;EACA,QAAIp7C,CAAC,GAAG,CAAR,EAAW,OAAO,CAAP;EACX,WAAO,KAAKsqB,MAAL,CAAYtqB,CAAZ,CAAP;EACD;;EAED0E,EAAAA,GAAG,CAAC02C,GAAD,EAAMp4C,KAAN,EAAa;EACd,QAAIhD,CAAC,GAAG,KAAKs7C,gBAAL,CAAsBF,GAAtB,CAAR;;EACA,QAAIp7C,CAAC,GAAG,CAAR,EAAW;EACTA,MAAAA,CAAC,GAAG,CAACA,CAAD,GAAK,CAAT;EACA,WAAKsqB,MAAL,CAAYtqB,CAAZ,IAAiBgD,KAAjB;EACA,aAAO,KAAP;EACD;;EAED,QAAI,KAAKujC,QAAL,GAAgB,KAAKyU,aAAzB,EAAwC;EACtC,YAAMO,WAAW,GAAGC,kBAAkB,CACpC,KAAKjV,QAAL,GAAgB,CADoB,EAEpC,KAAKqU,aAF+B,EAGpC,KAAKC,aAH+B,CAAtC;EAKA,WAAKY,MAAL,CAAYF,WAAZ;EACA,aAAO,KAAK72C,GAAL,CAAS02C,GAAT,EAAcp4C,KAAd,CAAP;EACD;;EAED,SAAK23C,KAAL,CAAW36C,CAAX,IAAgBo7C,GAAhB;EACA,SAAK9wB,MAAL,CAAYtqB,CAAZ,IAAiBgD,KAAjB;EACA,QAAI,KAAKqzB,KAAL,CAAWr2B,CAAX,MAAkBo6C,IAAtB,EAA4B,KAAKU,WAAL;EAC5B,SAAKzkB,KAAL,CAAWr2B,CAAX,IAAgBq6C,IAAhB;EACA,SAAK9T,QAAL;;EAEA,QAAI,KAAKuU,WAAL,GAAmB,CAAvB,EAA0B;EACxB,YAAMS,WAAW,GAAGC,kBAAkB,CACpC,KAAKjV,QAAL,GAAgB,CADoB,EAEpC,KAAKqU,aAF+B,EAGpC,KAAKC,aAH+B,CAAtC;EAKA,WAAKY,MAAL,CAAYF,WAAZ;EACD;;EAED,WAAO,IAAP;EACD;;EAEDG,EAAAA,MAAM,CAACN,GAAD,EAAMO,QAAN,EAAgB;EACpB,UAAM37C,CAAC,GAAG,KAAKq7C,UAAL,CAAgBD,GAAhB,CAAV;EACA,QAAIp7C,CAAC,GAAG,CAAR,EAAW,OAAO,KAAP;EAEX,SAAKq2B,KAAL,CAAWr2B,CAAX,IAAgBs6C,OAAhB;EACA,SAAK/T,QAAL;EAEA,QAAI,CAACoV,QAAL,EAAe,KAAKC,mBAAL;EAEf,WAAO,IAAP;EACD;;EAEDC,EAAAA,MAAM,CAACT,GAAD,EAAMO,QAAN,EAAgB;EACpB,UAAM37C,CAAC,GAAG,KAAKq7C,UAAL,CAAgBD,GAAhB,CAAV;EACA,QAAIp7C,CAAC,GAAG,CAAR,EAAW,OAAO,KAAP;EAEX,SAAKq2B,KAAL,CAAWr2B,CAAX,IAAgBo6C,IAAhB;EACA,SAAK7T,QAAL;EAEA,QAAI,CAACoV,QAAL,EAAe,KAAKC,mBAAL;EAEf,WAAO,IAAP;EACD;;EAEDA,EAAAA,mBAAmB,GAAG;EACpB,QAAI,KAAKrV,QAAL,GAAgB,KAAKwU,YAAzB,EAAuC;EACrC,YAAMQ,WAAW,GAAGO,oBAAoB,CACtC,KAAKvV,QADiC,EAEtC,KAAKqU,aAFiC,EAGtC,KAAKC,aAHiC,CAAxC;EAKA,WAAKY,MAAL,CAAYF,WAAZ;EACD;EACF;;EAEDQ,EAAAA,WAAW,CAACX,GAAD,EAAM;EACf,WAAO,KAAKC,UAAL,CAAgBD,GAAhB,KAAwB,CAA/B;EACD;;EAEDC,EAAAA,UAAU,CAACD,GAAD,EAAM;EACd,UAAMT,KAAK,GAAG,KAAKA,KAAnB;EACA,UAAMtkB,KAAK,GAAG,KAAKA,KAAnB;EACA,UAAMt2B,MAAM,GAAG,KAAK46C,KAAL,CAAW56C,MAA1B;EAEA,UAAMi8C,IAAI,GAAGZ,GAAG,GAAG,UAAnB;EACA,QAAIp7C,CAAC,GAAGg8C,IAAI,GAAGj8C,MAAf;EACA,QAAIk8C,SAAS,GAAGD,IAAI,IAAIj8C,MAAM,GAAG,CAAb,CAApB;EACA,QAAIk8C,SAAS,KAAK,CAAlB,EAAqBA,SAAS,GAAG,CAAZ;;EAErB,WAAO5lB,KAAK,CAACr2B,CAAD,CAAL,KAAao6C,IAAb,KAAsB/jB,KAAK,CAACr2B,CAAD,CAAL,KAAas6C,OAAb,IAAwBK,KAAK,CAAC36C,CAAD,CAAL,KAAao7C,GAA3D,CAAP,EAAwE;EACtEp7C,MAAAA,CAAC,IAAIi8C,SAAL;EACA,UAAIj8C,CAAC,GAAG,CAAR,EAAWA,CAAC,IAAID,MAAL;EACZ;;EAED,QAAIs2B,KAAK,CAACr2B,CAAD,CAAL,KAAao6C,IAAjB,EAAuB,OAAO,CAAC,CAAR;EACvB,WAAOp6C,CAAP;EACD;;EAEDk8C,EAAAA,aAAa,CAACl5C,KAAD,EAAQ;EACnB,WAAO,KAAKm5C,YAAL,CAAkBn5C,KAAlB,KAA4B,CAAnC;EACD;;EAEDm5C,EAAAA,YAAY,CAACn5C,KAAD,EAAQ;EAClB,UAAMsnB,MAAM,GAAG,KAAKA,MAApB;EACA,UAAM+L,KAAK,GAAG,KAAKA,KAAnB;;EAEA,SAAK,IAAIr2B,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGq2B,KAAK,CAACt2B,MAA1B,EAAkCC,CAAC,EAAnC,EAAuC;EACrC,UAAIq2B,KAAK,CAACr2B,CAAD,CAAL,KAAaq6C,IAAb,IAAqB/vB,MAAM,CAACtqB,CAAD,CAAN,KAAcgD,KAAvC,EAA8C;EAC5C,eAAOhD,CAAP;EACD;EACF;;EAED,WAAO,CAAC,CAAR;EACD;;EAEDs7C,EAAAA,gBAAgB,CAACF,GAAD,EAAM;EACpB,UAAMT,KAAK,GAAG,KAAKA,KAAnB;EACA,UAAMtkB,KAAK,GAAG,KAAKA,KAAnB;EACA,UAAMt2B,MAAM,GAAG46C,KAAK,CAAC56C,MAArB;EAEA,UAAMi8C,IAAI,GAAGZ,GAAG,GAAG,UAAnB;EACA,QAAIp7C,CAAC,GAAGg8C,IAAI,GAAGj8C,MAAf;EACA,QAAIk8C,SAAS,GAAGD,IAAI,IAAIj8C,MAAM,GAAG,CAAb,CAApB;EACA,QAAIk8C,SAAS,KAAK,CAAlB,EAAqBA,SAAS,GAAG,CAAZ;;EAErB,WAAO5lB,KAAK,CAACr2B,CAAD,CAAL,KAAaq6C,IAAb,IAAqBM,KAAK,CAAC36C,CAAD,CAAL,KAAao7C,GAAzC,EAA8C;EAC5Cp7C,MAAAA,CAAC,IAAIi8C,SAAL;EACA,UAAIj8C,CAAC,GAAG,CAAR,EAAWA,CAAC,IAAID,MAAL;EACZ;;EAED,QAAIs2B,KAAK,CAACr2B,CAAD,CAAL,KAAas6C,OAAjB,EAA0B;EACxB,YAAMh3C,CAAC,GAAGtD,CAAV;;EACA,aAAOq2B,KAAK,CAACr2B,CAAD,CAAL,KAAao6C,IAAb,KAAsB/jB,KAAK,CAACr2B,CAAD,CAAL,KAAas6C,OAAb,IAAwBK,KAAK,CAAC36C,CAAD,CAAL,KAAao7C,GAA3D,CAAP,EAAwE;EACtEp7C,QAAAA,CAAC,IAAIi8C,SAAL;EACA,YAAIj8C,CAAC,GAAG,CAAR,EAAWA,CAAC,IAAID,MAAL;EACZ;;EACD,UAAIs2B,KAAK,CAACr2B,CAAD,CAAL,KAAao6C,IAAjB,EAAuBp6C,CAAC,GAAGsD,CAAJ;EACxB;;EAED,QAAI+yB,KAAK,CAACr2B,CAAD,CAAL,KAAaq6C,IAAjB,EAAuB;EACrB,aAAO,CAACr6C,CAAD,GAAK,CAAZ;EACD;;EAED,WAAOA,CAAP;EACD;;EAEDo8C,EAAAA,cAAc,CAACC,WAAD,EAAc;EAC1B,QAAI,KAAK1B,KAAL,CAAW56C,MAAX,GAAoBs8C,WAAxB,EAAqC;EACnC,YAAMd,WAAW,GAAGrB,SAAS,CAACmC,WAAD,CAA7B;EACA,WAAKZ,MAAL,CAAYF,WAAZ;EACD;EACF;;EAEDE,EAAAA,MAAM,CAACF,WAAD,EAAc;EAClB,UAAMe,WAAW,GAAG,KAAK3B,KAAL,CAAW56C,MAA/B;EAEA,QAAIw7C,WAAW,IAAI,KAAKhV,QAAxB,EAAkC,MAAM,IAAI92B,KAAJ,CAAU,YAAV,CAAN;EAElC,UAAM8sC,QAAQ,GAAG,KAAK5B,KAAtB;EACA,UAAM6B,SAAS,GAAG,KAAKlyB,MAAvB;EACA,UAAMmyB,QAAQ,GAAG,KAAKpmB,KAAtB;EAEA,UAAMqmB,QAAQ,GAAG35C,UAAQ,CAACw4C,WAAD,CAAzB;EACA,UAAMoB,SAAS,GAAG55C,UAAQ,CAACw4C,WAAD,CAA1B;EACA,UAAMqB,QAAQ,GAAG75C,UAAQ,CAACw4C,WAAD,CAAzB;EAEA,SAAKR,YAAL,GAAoB8B,kBAAkB,CAACtB,WAAD,EAAc,KAAKX,aAAnB,CAAtC;EACA,SAAKI,aAAL,GAAqBG,mBAAmB,CAACI,WAAD,EAAc,KAAKV,aAAnB,CAAxC;EAEA,SAAKF,KAAL,GAAa+B,QAAb;EACA,SAAKpyB,MAAL,GAAcqyB,SAAd;EACA,SAAKtmB,KAAL,GAAaumB,QAAb;EACA,SAAK9B,WAAL,GAAmBS,WAAW,GAAG,KAAKhV,QAAtC;;EAEA,SAAK,IAAIvmC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGs8C,WAApB,EAAiCt8C,CAAC,EAAlC,EAAsC;EACpC,UAAIy8C,QAAQ,CAACz8C,CAAD,CAAR,KAAgBq6C,IAApB,EAA0B;EACxB,YAAI/c,OAAO,GAAGif,QAAQ,CAACv8C,CAAD,CAAtB;EACA,YAAImB,KAAK,GAAG,KAAKm6C,gBAAL,CAAsBhe,OAAtB,CAAZ;EACAof,QAAAA,QAAQ,CAACv7C,KAAD,CAAR,GAAkBm8B,OAAlB;EACAqf,QAAAA,SAAS,CAACx7C,KAAD,CAAT,GAAmBq7C,SAAS,CAACx8C,CAAD,CAA5B;EACA48C,QAAAA,QAAQ,CAACz7C,KAAD,CAAR,GAAkBk5C,IAAlB;EACD;EACF;EACF;;EAEDyC,EAAAA,UAAU,CAAC/uC,QAAD,EAAW;EACnB,SAAK,IAAI/N,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKq2B,KAAL,CAAWt2B,MAA/B,EAAuCC,CAAC,EAAxC,EAA4C;EAC1C,UAAI,KAAKq2B,KAAL,CAAWr2B,CAAX,MAAkBq6C,IAAtB,EAA4B;EAC1B,YAAI,CAACtsC,QAAQ,CAAC,KAAK4sC,KAAL,CAAW36C,CAAX,CAAD,CAAb,EAA8B,OAAO,KAAP;EAC/B;EACF;;EACD,WAAO,IAAP;EACD;;EAED+8C,EAAAA,YAAY,CAAChvC,QAAD,EAAW;EACrB,SAAK,IAAI/N,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKq2B,KAAL,CAAWt2B,MAA/B,EAAuCC,CAAC,EAAxC,EAA4C;EAC1C,UAAI,KAAKq2B,KAAL,CAAWr2B,CAAX,MAAkBq6C,IAAtB,EAA4B;EAC1B,YAAI,CAACtsC,QAAQ,CAAC,KAAKuc,MAAL,CAAYtqB,CAAZ,CAAD,CAAb,EAA+B,OAAO,KAAP;EAChC;EACF;;EACD,WAAO,IAAP;EACD;;EAEDg9C,EAAAA,WAAW,CAACjvC,QAAD,EAAW;EACpB,SAAK,IAAI/N,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKq2B,KAAL,CAAWt2B,MAA/B,EAAuCC,CAAC,EAAxC,EAA4C;EAC1C,UAAI,KAAKq2B,KAAL,CAAWr2B,CAAX,MAAkBq6C,IAAtB,EAA4B;EAC1B,YAAI,CAACtsC,QAAQ,CAAC,KAAK4sC,KAAL,CAAW36C,CAAX,CAAD,EAAgB,KAAKsqB,MAAL,CAAYtqB,CAAZ,CAAhB,CAAb,EAA8C,OAAO,KAAP;EAC/C;EACF;;EACD,WAAO,IAAP;EACD;;EAnS4B;;EAsS/B,SAAS68C,kBAAT,CAA4B3B,QAA5B,EAAsC+B,OAAtC,EAA+C;EAC7C,SAAQ/B,QAAQ,GAAG+B,OAAZ,GAAuB,CAA9B;EACD;;EAED,SAAS9B,mBAAT,CAA6BD,QAA7B,EAAuCgC,OAAvC,EAAgD;EAC9C,SAAOn4C,IAAI,CAAC9E,GAAL,CAASi7C,QAAQ,GAAG,CAApB,EAAwBA,QAAQ,GAAGgC,OAAZ,GAAuB,CAA9C,CAAP;EACD;;EAED,SAAS1B,kBAAT,CAA4Bh3C,IAA5B,EAAkCy4C,OAAlC,EAA2CC,OAA3C,EAAoD;EAClD,SAAOhD,SAAS,CACdn1C,IAAI,CAACpF,GAAL,CAAS6E,IAAI,GAAG,CAAhB,EAAqB,IAAIA,IAAL,IAAc,IAAIy4C,OAAJ,GAAcC,OAA5B,CAAD,GAAyC,CAA5D,CADc,CAAhB;EAGD;;EAED,SAASpB,oBAAT,CAA8Bt3C,IAA9B,EAAoCy4C,OAApC,EAA6CC,OAA7C,EAAsD;EACpD,SAAOhD,SAAS,CACdn1C,IAAI,CAACpF,GAAL,CAAS6E,IAAI,GAAG,CAAhB,EAAqB,IAAIA,IAAL,IAAcy4C,OAAO,GAAG,IAAIC,OAA5B,CAAD,GAAyC,CAA5D,CADc,CAAhB;EAGD;;EAED,SAASn6C,UAAT,CAAkByB,IAAlB,EAAwB;EACtB,SAAOjE,KAAK,CAACiE,IAAD,CAAL,CAAYuI,IAAZ,CAAiB,CAAjB,CAAP;EACD;;ECpUM,MAAMowC,YAAN,CAAmB;EACxBv3C,EAAAA,WAAW,CAACvE,IAAD,EAAOE,OAAP,EAA8B;EAAA,QAAdpB,OAAc,uEAAJ,EAAI;;EACvC,QAAIkB,IAAI,YAAY87C,YAApB,EAAkC;EAChC;EACA,YAAMhrC,KAAK,GAAG9Q,IAAd;;EACA,WAAK+7C,KAAL,CACEjrC,KAAK,CAAC9Q,IADR,EAEE8Q,KAAK,CAAC5Q,OAFR,EAGE4Q,KAAK,CAACkrC,QAAN,CAAevuC,KAAf,EAHF,EAIEqD,KAAK,CAACmM,SAJR;;EAMA;EACD;;EAED,QAAI/d,KAAK,CAACV,OAAN,CAAcwB,IAAd,CAAJ,EAAyB;EACvB,YAAMH,MAAM,GAAGG,IAAf;EACAA,MAAAA,IAAI,GAAGH,MAAM,CAACnB,MAAd;EACAI,MAAAA,OAAO,GAAGoB,OAAO,IAAI,EAArB;EACAA,MAAAA,OAAO,GAAGL,MAAM,CAAC,CAAD,CAAN,CAAUnB,MAApB;;EACA,WAAKq9C,KAAL,CAAW/7C,IAAX,EAAiBE,OAAjB,EAA0B,IAAIm5C,SAAJ,CAAcv6C,OAAd,CAA1B,EAAkDA,OAAO,CAACme,SAA1D;;EACA,WAAK,IAAIte,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGqB,IAApB,EAA0BrB,CAAC,EAA3B,EAA+B;EAC7B,aAAK,IAAIsD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG/B,OAApB,EAA6B+B,CAAC,EAA9B,EAAkC;EAChC,cAAIN,KAAK,GAAG9B,MAAM,CAAClB,CAAD,CAAN,CAAUsD,CAAV,CAAZ;EACA,cAAI,KAAKgb,SAAL,IAAkBvZ,IAAI,CAAC0F,GAAL,CAASzH,KAAT,IAAkB,KAAKsb,SAA7C,EAAwDtb,KAAK,GAAG,CAAR;;EACxD,cAAIA,KAAK,KAAK,CAAd,EAAiB;EACf,iBAAKq6C,QAAL,CAAc34C,GAAd,CAAkB1E,CAAC,GAAGuB,OAAJ,GAAc+B,CAAhC,EAAmCpC,MAAM,CAAClB,CAAD,CAAN,CAAUsD,CAAV,CAAnC;EACD;EACF;EACF;EACF,KAfD,MAeO;EACL,WAAK85C,KAAL,CAAW/7C,IAAX,EAAiBE,OAAjB,EAA0B,IAAIm5C,SAAJ,CAAcv6C,OAAd,CAA1B,EAAkDA,OAAO,CAACme,SAA1D;EACD;EACF;;EAED8+B,EAAAA,KAAK,CAAC/7C,IAAD,EAAOE,OAAP,EAAgB87C,QAAhB,EAA0B/+B,SAA1B,EAAqC;EACxC,SAAKjd,IAAL,GAAYA,IAAZ;EACA,SAAKE,OAAL,GAAeA,OAAf;EACA,SAAK87C,QAAL,GAAgBA,QAAhB;EACA,SAAK/+B,SAAL,GAAiBA,SAAS,IAAI,CAA9B;EACD;;EAED,SAAOhR,GAAP,GAAqC;EAAA,QAA1BjM,IAA0B,uEAAnB,CAAmB;EAAA,QAAhBE,OAAgB,uEAANF,IAAM;EACnC,UAAMpB,GAAG,GAAG8E,IAAI,CAAC9E,GAAL,CAASoB,IAAT,EAAeE,OAAf,CAAZ;EACA,UAAML,MAAM,GAAG,IAAIi8C,YAAJ,CAAiB97C,IAAjB,EAAuBE,OAAvB,EAAgC;EAAE05C,MAAAA,eAAe,EAAEh7C;EAAnB,KAAhC,CAAf;;EACA,SAAK,IAAID,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGC,GAApB,EAAyBD,CAAC,EAA1B,EAA8B;EAC5BkB,MAAAA,MAAM,CAACwD,GAAP,CAAW1E,CAAX,EAAcA,CAAd,EAAiB,CAAjB;EACD;;EACD,WAAOkB,MAAP;EACD;;EAED4N,EAAAA,KAAK,GAAG;EACN,WAAO,IAAIquC,YAAJ,CAAiB,IAAjB,CAAP;EACD;;EAEDnvC,EAAAA,SAAS,GAAG;EACV,UAAMC,IAAI,GAAG,IAAI1N,KAAJ,CAAU,KAAKc,IAAf,CAAb;;EACA,SAAK,IAAIrB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKqB,IAAzB,EAA+BrB,CAAC,EAAhC,EAAoC;EAClCiO,MAAAA,IAAI,CAACjO,CAAD,CAAJ,GAAU,IAAIO,KAAJ,CAAU,KAAKgB,OAAf,CAAV;;EACA,WAAK,IAAI+B,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK/B,OAAzB,EAAkC+B,CAAC,EAAnC,EAAuC;EACrC2K,QAAAA,IAAI,CAACjO,CAAD,CAAJ,CAAQsD,CAAR,IAAa,KAAKC,GAAL,CAASvD,CAAT,EAAYsD,CAAZ,CAAb;EACD;EACF;;EACD,WAAO2K,IAAP;EACD;;EAEDK,EAAAA,QAAQ,GAAG;EACT,WAAO,KAAKjN,IAAL,KAAc,KAAKE,OAA1B;EACD;;EAEDgN,EAAAA,WAAW,GAAG;EACZ,QAAI,CAAC,KAAKD,QAAL,EAAL,EAAsB,OAAO,KAAP;EAEtB,QAAIgvC,SAAS,GAAG,IAAhB;EACA,SAAKC,cAAL,CAAoB,CAACv9C,CAAD,EAAIsD,CAAJ,EAAOI,CAAP,KAAa;EAC/B,UAAI,KAAKH,GAAL,CAASD,CAAT,EAAYtD,CAAZ,MAAmB0D,CAAvB,EAA0B;EACxB45C,QAAAA,SAAS,GAAG,KAAZ;EACA,eAAO,KAAP;EACD;;EACD,aAAO55C,CAAP;EACD,KAND;EAOA,WAAO45C,SAAP;EACD;EAED;;;;;;EAIAE,EAAAA,SAAS,GAAG;EACV,QAAIv9C,GAAG,GAAG,KAAKsB,OAAf;EACA,QAAI5B,GAAG,GAAG,CAAC,CAAX;EACA,SAAK49C,cAAL,CAAoB,CAACv9C,CAAD,EAAIsD,CAAJ,EAAOI,CAAP,KAAa;EAC/B,UAAIsvB,IAAI,GAAGhzB,CAAC,GAAGsD,CAAf;EACArD,MAAAA,GAAG,GAAG8E,IAAI,CAAC9E,GAAL,CAASA,GAAT,EAAc+yB,IAAd,CAAN;EACArzB,MAAAA,GAAG,GAAGoF,IAAI,CAACpF,GAAL,CAASA,GAAT,EAAcqzB,IAAd,CAAN;EACA,aAAOtvB,CAAP;EACD,KALD;EAMA,WAAO/D,GAAG,GAAGM,GAAb;EACD;EAED;;;;;;;EAKAw9C,EAAAA,QAAQ,CAACC,KAAD,EAAQ;EACd,QAAIF,SAAS,GAAG,KAAKA,SAAL,EAAhB;EACA,WAAOA,SAAS,IAAIE,KAApB;EACD;;EAED,MAAIC,WAAJ,GAAkB;EAChB,WAAO,KAAKN,QAAL,CAAc74C,IAArB;EACD;;EAED,MAAIA,IAAJ,GAAW;EACT,WAAO,KAAKnD,IAAL,GAAY,KAAKE,OAAxB;EACD;;EAEDgC,EAAAA,GAAG,CAACxB,GAAD,EAAME,MAAN,EAAc;EACf,WAAO,KAAKo7C,QAAL,CAAc95C,GAAd,CAAkBxB,GAAG,GAAG,KAAKR,OAAX,GAAqBU,MAAvC,CAAP;EACD;;EAEDyC,EAAAA,GAAG,CAAC3C,GAAD,EAAME,MAAN,EAAce,KAAd,EAAqB;EACtB,QAAI,KAAKsb,SAAL,IAAkBvZ,IAAI,CAAC0F,GAAL,CAASzH,KAAT,IAAkB,KAAKsb,SAA7C,EAAwDtb,KAAK,GAAG,CAAR;;EACxD,QAAIA,KAAK,KAAK,CAAd,EAAiB;EACf,WAAKq6C,QAAL,CAAc3B,MAAd,CAAqB35C,GAAG,GAAG,KAAKR,OAAX,GAAqBU,MAA1C;EACD,KAFD,MAEO;EACL,WAAKo7C,QAAL,CAAc34C,GAAd,CAAkB3C,GAAG,GAAG,KAAKR,OAAX,GAAqBU,MAAvC,EAA+Ce,KAA/C;EACD;;EACD,WAAO,IAAP;EACD;;EAEDkP,EAAAA,IAAI,CAACC,KAAD,EAAQ;EACV,QAAI,KAAK5Q,OAAL,KAAiB4Q,KAAK,CAAC9Q,IAA3B,EAAiC;EAC/B;EACA4U,MAAAA,OAAO,CAACC,IAAR,CACE,mFADF;EAGD;;EAED,UAAM9G,CAAC,GAAG,KAAK/N,IAAf;EACA,UAAMkO,CAAC,GAAG4C,KAAK,CAAC5Q,OAAhB;EAEA,UAAM4E,MAAM,GAAG,IAAIg3C,YAAJ,CAAiB/tC,CAAjB,EAAoBG,CAApB,CAAf;EACA,SAAKguC,cAAL,CAAoB,CAACv9C,CAAD,EAAIsD,CAAJ,EAAOs6C,EAAP,KAAc;EAChCzrC,MAAAA,KAAK,CAACorC,cAAN,CAAqB,CAAC3uC,CAAD,EAAInB,CAAJ,EAAOowC,EAAP,KAAc;EACjC,YAAIv6C,CAAC,KAAKsL,CAAV,EAAa;EACXzI,UAAAA,MAAM,CAACzB,GAAP,CAAW1E,CAAX,EAAcyN,CAAd,EAAiBtH,MAAM,CAAC5C,GAAP,CAAWvD,CAAX,EAAcyN,CAAd,IAAmBmwC,EAAE,GAAGC,EAAzC;EACD;;EACD,eAAOA,EAAP;EACD,OALD;EAMA,aAAOD,EAAP;EACD,KARD;EASA,WAAOz3C,MAAP;EACD;;EAEDkR,EAAAA,gBAAgB,CAAClF,KAAD,EAAQ;EACtB,UAAM/C,CAAC,GAAG,KAAK/N,IAAf;EACA,UAAMgO,CAAC,GAAG,KAAK9N,OAAf;EACA,UAAMgO,CAAC,GAAG4C,KAAK,CAAC9Q,IAAhB;EACA,UAAMiW,CAAC,GAAGnF,KAAK,CAAC5Q,OAAhB;EAEA,UAAM4E,MAAM,GAAG,IAAIg3C,YAAJ,CAAiB/tC,CAAC,GAAGG,CAArB,EAAwBF,CAAC,GAAGiI,CAA5B,EAA+B;EAC5C2jC,MAAAA,eAAe,EAAE,KAAK0C,WAAL,GAAmBxrC,KAAK,CAACwrC;EADE,KAA/B,CAAf;EAGA,SAAKJ,cAAL,CAAoB,CAACv9C,CAAD,EAAIsD,CAAJ,EAAOs6C,EAAP,KAAc;EAChCzrC,MAAAA,KAAK,CAACorC,cAAN,CAAqB,CAAC3uC,CAAD,EAAInB,CAAJ,EAAOowC,EAAP,KAAc;EACjC13C,QAAAA,MAAM,CAACzB,GAAP,CAAW6K,CAAC,GAAGvP,CAAJ,GAAQ4O,CAAnB,EAAsB0I,CAAC,GAAGhU,CAAJ,GAAQmK,CAA9B,EAAiCmwC,EAAE,GAAGC,EAAtC;EACA,eAAOA,EAAP;EACD,OAHD;EAIA,aAAOD,EAAP;EACD,KAND;EAOA,WAAOz3C,MAAP;EACD;;EAEDo3C,EAAAA,cAAc,CAACxvC,QAAD,EAAW;EACvB,SAAKsvC,QAAL,CAAcL,WAAd,CAA0B,CAAC5B,GAAD,EAAMp4C,KAAN,KAAgB;EACxC,YAAMhD,CAAC,GAAIo7C,GAAG,GAAG,KAAK75C,OAAZ,GAAuB,CAAjC;EACA,YAAM+B,CAAC,GAAG83C,GAAG,GAAG,KAAK75C,OAArB;EACA,UAAIc,CAAC,GAAG0L,QAAQ,CAAC/N,CAAD,EAAIsD,CAAJ,EAAON,KAAP,CAAhB;EACA,UAAIX,CAAC,KAAK,KAAV,EAAiB,OAAO,KAAP,CAJuB;;EAKxC,UAAI,KAAKic,SAAL,IAAkBvZ,IAAI,CAAC0F,GAAL,CAASpI,CAAT,IAAc,KAAKic,SAAzC,EAAoDjc,CAAC,GAAG,CAAJ;;EACpD,UAAIA,CAAC,KAAKW,KAAV,EAAiB;EACf,YAAIX,CAAC,KAAK,CAAV,EAAa;EACX,eAAKg7C,QAAL,CAAc3B,MAAd,CAAqBN,GAArB,EAA0B,IAA1B;EACD,SAFD,MAEO;EACL,eAAKiC,QAAL,CAAc34C,GAAd,CAAkB02C,GAAlB,EAAuB/4C,CAAvB;EACD;EACF;;EACD,aAAO,IAAP;EACD,KAdD;EAeA,SAAKg7C,QAAL,CAAczB,mBAAd;EACA,WAAO,IAAP;EACD;;EAEDkC,EAAAA,WAAW,GAAG;EACZ,UAAMH,WAAW,GAAG,KAAKA,WAAzB;EACA,UAAMt8C,IAAI,GAAG,IAAId,KAAJ,CAAUo9C,WAAV,CAAb;EACA,UAAMp8C,OAAO,GAAG,IAAIhB,KAAJ,CAAUo9C,WAAV,CAAhB;EACA,UAAMrzB,MAAM,GAAG,IAAI/pB,KAAJ,CAAUo9C,WAAV,CAAf;EACA,QAAIxsC,GAAG,GAAG,CAAV;EACA,SAAKosC,cAAL,CAAoB,CAACv9C,CAAD,EAAIsD,CAAJ,EAAON,KAAP,KAAiB;EACnC3B,MAAAA,IAAI,CAAC8P,GAAD,CAAJ,GAAYnR,CAAZ;EACAuB,MAAAA,OAAO,CAAC4P,GAAD,CAAP,GAAe7N,CAAf;EACAgnB,MAAAA,MAAM,CAACnZ,GAAD,CAAN,GAAcnO,KAAd;EACAmO,MAAAA,GAAG;EACH,aAAOnO,KAAP;EACD,KAND;EAOA,WAAO;EAAE3B,MAAAA,IAAF;EAAQE,MAAAA,OAAR;EAAiB+oB,MAAAA;EAAjB,KAAP;EACD;;EAEDyzB,EAAAA,YAAY,CAACC,YAAD,EAAe;EACzB,QAAIA,YAAY,KAAK,CAAjB,IAAsBA,YAAY,KAAK,KAAK1/B,SAAhD,EAA2D;EACzD,WAAKA,SAAL,GAAiB0/B,YAAjB;EACA,WAAKT,cAAL,CAAoB,CAACv9C,CAAD,EAAIsD,CAAJ,EAAOI,CAAP,KAAaA,CAAjC;EACD;;EACD,WAAO,IAAP;EACD;EAED;;;;;EAGA6T,EAAAA,SAAS,GAAG;EACV,QAAI0mC,KAAK,GAAG,IAAId,YAAJ,CAAiB,KAAK57C,OAAtB,EAA+B,KAAKF,IAApC,EAA0C;EACpD45C,MAAAA,eAAe,EAAE,KAAK0C;EAD8B,KAA1C,CAAZ;EAGA,SAAKJ,cAAL,CAAoB,CAACv9C,CAAD,EAAIsD,CAAJ,EAAON,KAAP,KAAiB;EACnCi7C,MAAAA,KAAK,CAACv5C,GAAN,CAAUpB,CAAV,EAAatD,CAAb,EAAgBgD,KAAhB;EACA,aAAOA,KAAP;EACD,KAHD;EAIA,WAAOi7C,KAAP;EACD;;EAtOuB;EAyO1Bd,YAAY,CAAC79C,SAAb,CAAuBuO,KAAvB,GAA+B,QAA/B;EAEAsvC,YAAY,CAACvkC,QAAb,GAAwBukC,YAAY,CAAC7vC,GAArC;EACA6vC,YAAY,CAAC79C,SAAb,CAAuBwZ,aAAvB,GAAuCqkC,YAAY,CAAC79C,SAAb,CAAuB+X,gBAA9D;EAEA;;;;EAIA,IAAI6mC,eAAe,uIAAnB;EAOA,IAAIC,qBAAqB,8GAAzB;EAOA,IAAIC,qBAAqB,gLAAzB;EAUA,IAAIC,cAAc,kIAAlB;EAOA,IAAIC,aAAa,uGAAjB;EAOA,IAAIC,YAAY,sHAAhB;EAOA,MAAMC,SAAS,GAAG;EAEhB,CAAC,GAAD,EAAM,KAAN,CAFgB,EAGhB,CAAC,GAAD,EAAM,KAAN,EAAa,UAAb,CAHgB,EAIhB,CAAC,GAAD,EAAM,KAAN,EAAa,UAAb,CAJgB,EAKhB,CAAC,GAAD,EAAM,KAAN,EAAa,QAAb,CALgB,EAMhB,CAAC,GAAD,EAAM,KAAN,EAAa,SAAb,CANgB;EAQhB,CAAC,GAAD,EAAM,KAAN,CARgB,EAShB,CAAC,GAAD,EAAM,IAAN,CATgB,EAUhB,CAAC,GAAD,EAAM,KAAN,CAVgB,EAWhB,CAAC,IAAD,EAAO,WAAP,CAXgB,EAYhB,CAAC,IAAD,EAAO,2BAAP,CAZgB,EAahB,CAAC,KAAD,EAAQ,YAAR,EAAsB,oBAAtB,CAbgB,CAAlB;;EAgBA,KAAK,MAAMtL,QAAX,IAAuBsL,SAAvB,EAAkC;EAChC,OAAK,IAAIx+C,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGkzC,QAAQ,CAACnzC,MAA7B,EAAqCC,CAAC,EAAtC,EAA0C;EACxCm9C,IAAAA,YAAY,CAAC79C,SAAb,CAAuB4zC,QAAQ,CAAClzC,CAAD,CAA/B,IAAsCkuC,IAAI,CACxCuQ,oBAAoB,CAACP,eAAD,EAAkB;EACpC/6C,MAAAA,IAAI,EAAE+vC,QAAQ,CAAClzC,CAAD,CADsB;EAEpC0+C,MAAAA,EAAE,EAAExL,QAAQ,CAAC,CAAD;EAFwB,KAAlB,CADoB,CAA1C;EAMAiK,IAAAA,YAAY,CAAC79C,SAAb,WAA0B4zC,QAAQ,CAAClzC,CAAD,CAAlC,UAA4CkuC,IAAI,CAC9CuQ,oBAAoB,CAACN,qBAAD,EAAwB;EAC1Ch7C,MAAAA,IAAI,YAAK+vC,QAAQ,CAAClzC,CAAD,CAAb,MADsC;EAE1C0+C,MAAAA,EAAE,EAAExL,QAAQ,CAAC,CAAD;EAF8B,KAAxB,CAD0B,CAAhD;EAMAiK,IAAAA,YAAY,CAAC79C,SAAb,WAA0B4zC,QAAQ,CAAClzC,CAAD,CAAlC,UAA4CkuC,IAAI,CAC9CuQ,oBAAoB,CAACL,qBAAD,EAAwB;EAC1Cj7C,MAAAA,IAAI,YAAK+vC,QAAQ,CAAClzC,CAAD,CAAb,MADsC;EAE1C0+C,MAAAA,EAAE,EAAExL,QAAQ,CAAC,CAAD;EAF8B,KAAxB,CAD0B,CAAhD;EAOAiK,IAAAA,YAAY,CAACjK,QAAQ,CAAClzC,CAAD,CAAT,CAAZ,GAA4BkuC,IAAI,CAC9BuQ,oBAAoB,CAACJ,cAAD,EAAiB;EAAEl7C,MAAAA,IAAI,EAAE+vC,QAAQ,CAAClzC,CAAD;EAAhB,KAAjB,CADU,CAAhC;EAGD;EACF;;EAED,IAAI2+C,OAAO,GAAG,CAAC,CAAC,GAAD,EAAM,KAAN,CAAD,CAAd;EAEA,CACE,KADF,EAEE,MAFF,EAGE,OAHF,EAIE,MAJF,EAKE,OALF,EAME,MANF,EAOE,OAPF,EAQE,MARF,EASE,MATF,EAUE,OAVF,EAWE,KAXF,EAYE,MAZF,EAaE,KAbF,EAcE,OAdF,EAeE,OAfF,EAgBE,QAhBF,EAiBE,KAjBF,EAkBE,OAlBF,EAmBE,OAnBF,EAoBE,MApBF,EAqBE,OArBF,EAsBE,MAtBF,EAuBE,KAvBF,EAwBE,MAxBF,EAyBE,MAzBF,EA0BE,KA1BF,EA2BE,MA3BF,EA4BE,OA5BF,EA6BE3tB,OA7BF,CA6BU,UAAU4tB,UAAV,EAAsB;EAC9BD,EAAAA,OAAO,CAACz7C,IAAR,CAAa,gBAAS07C,UAAT,GAAuBA,UAAvB,CAAb;EACD,CA/BD;;EAiCA,KAAK,MAAMzsB,MAAX,IAAqBwsB,OAArB,EAA8B;EAC5B,OAAK,IAAI3+C,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGmyB,MAAM,CAACpyB,MAA3B,EAAmCC,CAAC,EAApC,EAAwC;EACtCm9C,IAAAA,YAAY,CAAC79C,SAAb,CAAuB6yB,MAAM,CAACnyB,CAAD,CAA7B,IAAoCkuC,IAAI,CACtCuQ,oBAAoB,CAACH,aAAD,EAAgB;EAClCn7C,MAAAA,IAAI,EAAEgvB,MAAM,CAACnyB,CAAD,CADsB;EAElCmyB,MAAAA,MAAM,EAAEA,MAAM,CAAC,CAAD;EAFoB,KAAhB,CADkB,CAAxC;EAMAgrB,IAAAA,YAAY,CAAChrB,MAAM,CAACnyB,CAAD,CAAP,CAAZ,GAA0BkuC,IAAI,CAC5BuQ,oBAAoB,CAACF,YAAD,EAAe;EAAEp7C,MAAAA,IAAI,EAAEgvB,MAAM,CAACnyB,CAAD;EAAd,KAAf,CADQ,CAA9B;EAGD;EACF;;EAED,SAASy+C,oBAAT,CAA8BI,QAA9B,EAAwCv0B,MAAxC,EAAgD;EAC9C,OAAK,MAAMtqB,CAAX,IAAgBsqB,MAAhB,EAAwB;EACtBu0B,IAAAA,QAAQ,GAAGA,QAAQ,CAACpvB,OAAT,CAAiB,IAAIqvB,MAAJ,YAAe9+C,CAAf,QAAqB,GAArB,CAAjB,EAA4CsqB,MAAM,CAACtqB,CAAD,CAAlD,CAAX;EACD;;EACD,SAAO6+C,QAAP;EACD;;EClYc,SAASE,iBAAT,CAA2BxoC,CAA3B,EAA8BC,CAA9B,EAAiC;EAC9C,MAAIxW,CAAC,GAAG,CAAR;EACA,MAAIsf,EAAE,GAAG/I,CAAC,CAACxW,MAAX;EACA,MAAI6f,CAAC,GAAG,CAAR;;EACA,SAAO5f,CAAC,GAAGsf,EAAX,EAAetf,CAAC,EAAhB,EAAoB;EAClB4f,IAAAA,CAAC,IAAK,CAACrJ,CAAC,CAACvW,CAAD,CAAD,GAAOwW,CAAC,CAACxW,CAAD,CAAT,KAAiBuW,CAAC,CAACvW,CAAD,CAAD,GAAOwW,CAAC,CAACxW,CAAD,CAAzB,KAAiCuW,CAAC,CAACvW,CAAD,CAAD,GAAOwW,CAAC,CAACxW,CAAD,CAAzC,CAAD,IAAmDuW,CAAC,CAACvW,CAAD,CAAD,GAAOwW,CAAC,CAACxW,CAAD,CAA3D,CAAL;EACD;;EACD,SAAO,IAAI4f,CAAX;EACD;;ECRc,SAASo/B,GAAT,CAAazoC,CAAb,EAAgBC,CAAhB,EAAmB;EAChC,MAAI8I,EAAE,GAAG/I,CAAC,CAACxW,MAAX;EACA,MAAIJ,GAAG,GAAG,CAAV;EACA,MAAIkxB,GAAG,GAAG,CAAV;EACA,MAAIrU,GAAG,GAAG,CAAV;;EACA,OAAK,IAAIxc,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGsf,EAApB,EAAwBtf,CAAC,EAAzB,EAA6B;EAC3Bwc,IAAAA,GAAG,GAAGzX,IAAI,CAAC0F,GAAL,CAAS8L,CAAC,CAACvW,CAAD,CAAD,GAAOwW,CAAC,CAACxW,CAAD,CAAjB,CAAN;EACA6wB,IAAAA,GAAG,IAAIrU,GAAP;;EACA,QAAI7c,GAAG,GAAG6c,GAAV,EAAe;EACb7c,MAAAA,GAAG,GAAG6c,GAAN;EACD;EACF;;EACD,SAAO,CAAC7c,GAAG,GAAGkxB,GAAP,IAAc,CAArB;EACD;;ECbc,SAASouB,aAAT,CAAuB1oC,CAAvB,EAA0BC,CAA1B,EAA6B;EAC1C,MAAI8I,EAAE,GAAG/I,CAAC,CAACxW,MAAX;EACA,MAAI8wB,GAAG,GAAG,CAAV;;EACA,OAAK,IAAI7wB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGsf,EAApB,EAAwBtf,CAAC,EAAzB,EAA6B;EAC3B6wB,IAAAA,GAAG,IAAI9rB,IAAI,CAACE,IAAL,CAAUsR,CAAC,CAACvW,CAAD,CAAD,GAAOwW,CAAC,CAACxW,CAAD,CAAlB,CAAP;EACD;;EACD,SAAO,CAAC+E,IAAI,CAAC0G,GAAL,CAASolB,GAAT,CAAR;EACD;;ECPc,SAASquB,QAAT,CAAkB3oC,CAAlB,EAAqBC,CAArB,EAAwB;EACrC,MAAI8I,EAAE,GAAG/I,CAAC,CAACxW,MAAX;EACA,MAAI8wB,GAAG,GAAG,CAAV;;EACA,OAAK,IAAI7wB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGsf,EAApB,EAAwBtf,CAAC,EAAzB,EAA6B;EAC3B6wB,IAAAA,GAAG,IAAI9rB,IAAI,CAAC0F,GAAL,CAAS8L,CAAC,CAACvW,CAAD,CAAD,GAAOwW,CAAC,CAACxW,CAAD,CAAjB,KAAyBuW,CAAC,CAACvW,CAAD,CAAD,GAAOwW,CAAC,CAACxW,CAAD,CAAjC,CAAP;EACD;;EACD,SAAO6wB,GAAP;EACD;;ECPc,SAASsuB,SAAT,CAAmB5oC,CAAnB,EAAsBC,CAAtB,EAAyB;EACtC,MAAI8I,EAAE,GAAG/I,CAAC,CAACxW,MAAX;EACA,MAAIJ,GAAG,GAAG,CAAV;EACA,MAAI6c,GAAG,GAAG,CAAV;;EACA,OAAK,IAAIxc,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGsf,EAApB,EAAwBtf,CAAC,EAAzB,EAA6B;EAC3Bwc,IAAAA,GAAG,GAAGzX,IAAI,CAAC0F,GAAL,CAAS8L,CAAC,CAACvW,CAAD,CAAD,GAAOwW,CAAC,CAACxW,CAAD,CAAjB,CAAN;;EACA,QAAIL,GAAG,GAAG6c,GAAV,EAAe;EACb7c,MAAAA,GAAG,GAAG6c,GAAN;EACD;EACF;;EACD,SAAO7c,GAAP;EACD;;ECXc,SAASy/C,KAAT,CAAe7oC,CAAf,EAAkBC,CAAlB,EAAqB;EAClC,MAAIxW,CAAC,GAAG,CAAR;EACA,MAAIsf,EAAE,GAAG/I,CAAC,CAACxW,MAAX;EACA,MAAI6f,CAAC,GAAG,CAAR;;EACA,SAAO5f,CAAC,GAAGsf,EAAX,EAAetf,CAAC,EAAhB,EAAoB;EAClB4f,IAAAA,CAAC,IAAI7a,IAAI,CAACE,IAAL,CACF,CAACsR,CAAC,CAACvW,CAAD,CAAD,GAAOwW,CAAC,CAACxW,CAAD,CAAT,KAAiBuW,CAAC,CAACvW,CAAD,CAAD,GAAOwW,CAAC,CAACxW,CAAD,CAAzB,CAAD,IAAmC,CAACuW,CAAC,CAACvW,CAAD,CAAD,GAAOwW,CAAC,CAACxW,CAAD,CAAT,KAAiBuW,CAAC,CAACvW,CAAD,CAAD,GAAOwW,CAAC,CAACxW,CAAD,CAAzB,CAAnC,CADG,CAAL;EAGD;;EACD,SAAO,IAAI4f,CAAX;EACD;;ECVc,SAASy/B,qBAAT,CAA+B9oC,CAA/B,EAAkCC,CAAlC,EAAqC;EAClD,MAAI8oC,EAAE,GAAG,CAAT;EACA,MAAIC,IAAI,GAAG,CAAX;;EACA,OAAK,IAAIv/C,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGuW,CAAC,CAACxW,MAAtB,EAA8BC,CAAC,EAA/B,EAAmC;EACjCs/C,IAAAA,EAAE,IAAIv6C,IAAI,CAAC9E,GAAL,CAASsW,CAAC,CAACvW,CAAD,CAAV,EAAewW,CAAC,CAACxW,CAAD,CAAhB,CAAN;EACAu/C,IAAAA,IAAI,IAAIhpC,CAAC,CAACvW,CAAD,CAAD,GAAOwW,CAAC,CAACxW,CAAD,CAAhB;EACD;;EACD,SAAQ,IAAIs/C,EAAL,GAAWC,IAAlB;EACD;;ECNc,SAASC,mBAAT,CAA6BjpC,CAA7B,EAAgCC,CAAhC,EAAmC;EAChD,SAAO,IAAI6oC,qBAAqB,CAAC9oC,CAAD,EAAIC,CAAJ,CAAhC;EACD;;ECJc,SAASipC,IAAT,CAAclpC,CAAd,EAAiBC,CAAjB,EAAoB;EACjC,MAAI8I,EAAE,GAAG/I,CAAC,CAACxW,MAAX;EACA,MAAIwP,CAAC,GAAG,CAAR;EACA,MAAImwC,EAAE,GAAG,CAAT;EACA,MAAIC,EAAE,GAAG,CAAT;;EACA,OAAK,IAAI3/C,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGsf,EAApB,EAAwBtf,CAAC,EAAzB,EAA6B;EAC3BuP,IAAAA,CAAC,IAAIgH,CAAC,CAACvW,CAAD,CAAD,GAAOuW,CAAC,CAACvW,CAAD,CAAb;EACA0/C,IAAAA,EAAE,IAAIlpC,CAAC,CAACxW,CAAD,CAAD,GAAOwW,CAAC,CAACxW,CAAD,CAAd;EACA2/C,IAAAA,EAAE,IAAI,CAACppC,CAAC,CAACvW,CAAD,CAAD,GAAOwW,CAAC,CAACxW,CAAD,CAAT,KAAiBuW,CAAC,CAACvW,CAAD,CAAD,GAAOwW,CAAC,CAACxW,CAAD,CAAzB,CAAN;EACD;;EACD,SAAO2/C,EAAE,IAAIpwC,CAAC,GAAGmwC,EAAR,CAAT;EACD;;ECXc,SAASE,UAAT,CAAoBrpC,CAApB,EAAuBC,CAAvB,EAA0B;EACvC,MAAIxW,CAAC,GAAG,CAAR;EACA,MAAIsf,EAAE,GAAG/I,CAAC,CAACxW,MAAX;EACA,MAAI6f,CAAC,GAAG,CAAR;;EACA,SAAO5f,CAAC,GAAGsf,EAAX,EAAetf,CAAC,EAAhB,EAAoB;EAClB4f,IAAAA,CAAC,IAAK,CAACrJ,CAAC,CAACvW,CAAD,CAAD,GAAOwW,CAAC,CAACxW,CAAD,CAAT,KAAiBuW,CAAC,CAACvW,CAAD,CAAD,GAAOwW,CAAC,CAACxW,CAAD,CAAzB,CAAD,IAAmC,CAACuW,CAAC,CAACvW,CAAD,CAAD,GAAOwW,CAAC,CAACxW,CAAD,CAAT,KAAiBuW,CAAC,CAACvW,CAAD,CAAD,GAAOwW,CAAC,CAACxW,CAAD,CAAzB,CAAnC,CAAL;EACD;;EACD,SAAO,IAAI4f,CAAX;EACD;;ECRc,SAASigC,QAAT,CAAkBtpC,CAAlB,EAAqBC,CAArB,EAAwB;EACrC,MAAI8I,EAAE,GAAG/I,CAAC,CAACxW,MAAX;EACA,MAAI8wB,GAAG,GAAG,CAAV;;EACA,OAAK,IAAI7wB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGsf,EAApB,EAAwBtf,CAAC,EAAzB,EAA6B;EAC3B6wB,IAAAA,GAAG,IAAI9rB,IAAI,CAACE,IAAL,CAAUsR,CAAC,CAACvW,CAAD,CAAD,GAAOwW,CAAC,CAACxW,CAAD,CAAlB,CAAP;EACD;;EACD,SAAO6wB,GAAP;EACD;;ECPc,SAASivB,KAAT,CAAevpC,CAAf,EAAkBC,CAAlB,EAAqB;EAClC,MAAI8I,EAAE,GAAG/I,CAAC,CAACxW,MAAX;EACA,MAAI8wB,GAAG,GAAG,CAAV;;EACA,OAAK,IAAI7wB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGsf,EAApB,EAAwBtf,CAAC,EAAzB,EAA6B;EAC3B6wB,IAAAA,GAAG,IAAI9rB,IAAI,CAAC0F,GAAL,CAAS8L,CAAC,CAACvW,CAAD,CAAD,GAAOwW,CAAC,CAACxW,CAAD,CAAjB,CAAP;EACD;;EACD,SAAO6wB,GAAG,GAAGvR,EAAb;EACD;;ECPc,SAASygC,YAAT,CAAsBxpC,CAAtB,EAAyBC,CAAzB,EAA4B;EACzC,MAAI8I,EAAE,GAAG/I,CAAC,CAACxW,MAAX;EACA,MAAI8wB,GAAG,GAAG,CAAV;;EACA,OAAK,IAAI7wB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGsf,EAApB,EAAwBtf,CAAC,EAAzB,EAA6B;EAC3B6wB,IAAAA,GAAG,IAAKta,CAAC,CAACvW,CAAD,CAAD,GAAOwW,CAAC,CAACxW,CAAD,CAAT,IAAiBuW,CAAC,CAACvW,CAAD,CAAD,GAAOwW,CAAC,CAACxW,CAAD,CAAzB,CAAP;EACD;;EACD,SAAO,IAAI6wB,GAAX;EACD;;ECPc,SAASmvB,SAAT,CAAmBzpC,CAAnB,EAAsBC,CAAtB,EAAyB;EACtC,MAAI8I,EAAE,GAAG/I,CAAC,CAACxW,MAAX;EACA,MAAI8wB,GAAG,GAAG,CAAV;;EACA,OAAK,IAAI7wB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGsf,EAApB,EAAwBtf,CAAC,EAAzB,EAA6B;EAC3B6wB,IAAAA,GAAG,IAAI9rB,IAAI,CAACE,IAAL,CAAUsR,CAAC,CAACvW,CAAD,CAAD,GAAOwW,CAAC,CAACxW,CAAD,CAAlB,CAAP;EACD;;EACD,SAAO,IAAI+E,IAAI,CAACE,IAAL,CAAU,IAAI4rB,GAAd,CAAX;EACD;;ECPc,SAASovB,YAAT,CAAsB1pC,CAAtB,EAAyBC,CAAzB,EAA4B;EACzC,MAAI8I,EAAE,GAAG/I,CAAC,CAACxW,MAAX;EACA,MAAI8wB,GAAG,GAAG,CAAV;;EACA,OAAK,IAAI7wB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGsf,EAApB,EAAwBtf,CAAC,EAAzB,EAA6B;EAC3B6wB,IAAAA,GAAG,IAAIta,CAAC,CAACvW,CAAD,CAAD,GAAOwW,CAAC,CAACxW,CAAD,CAAf;EACD;;EACD,SAAO6wB,GAAP;EACD;;ECPc,SAASqvB,YAAT,CAAsB3pC,CAAtB,EAAyBC,CAAzB,EAA4B;EACzC,MAAI8I,EAAE,GAAG/I,CAAC,CAACxW,MAAX;EACA,MAAI8wB,GAAG,GAAG,CAAV;;EACA,OAAK,IAAI7wB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGsf,EAApB,EAAwBtf,CAAC,EAAzB,EAA6B;EAC3B6wB,IAAAA,GAAG,IAAI9rB,IAAI,CAAC9E,GAAL,CAASsW,CAAC,CAACvW,CAAD,CAAV,EAAewW,CAAC,CAACxW,CAAD,CAAhB,CAAP;EACD;;EACD,SAAO,IAAI6wB,GAAX;EACD;;ECPc,SAASsvB,OAAT,CAAiB5pC,CAAjB,EAAoBC,CAApB,EAAuB;EACpC,MAAI8I,EAAE,GAAG/I,CAAC,CAACxW,MAAX;EACA,MAAIgjC,EAAE,GAAG,CAAT;EACA,MAAIC,EAAE,GAAG,CAAT;EACA,MAAI0c,EAAE,GAAG,CAAT;EACA,MAAIC,EAAE,GAAG,CAAT;;EACA,OAAK,IAAI3/C,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGsf,EAApB,EAAwBtf,CAAC,EAAzB,EAA6B;EAC3B+iC,IAAAA,EAAE,IAAIxsB,CAAC,CAACvW,CAAD,CAAD,GAAOwW,CAAC,CAACxW,CAAD,CAAd;EACAgjC,IAAAA,EAAE,IAAIzsB,CAAC,CAACvW,CAAD,CAAD,GAAOuW,CAAC,CAACvW,CAAD,CAAd;EACA0/C,IAAAA,EAAE,IAAIlpC,CAAC,CAACxW,CAAD,CAAD,GAAOwW,CAAC,CAACxW,CAAD,CAAd;EACA2/C,IAAAA,EAAE,IAAI,CAACppC,CAAC,CAACvW,CAAD,CAAD,GAAOwW,CAAC,CAACxW,CAAD,CAAT,KAAiBuW,CAAC,CAACvW,CAAD,CAAD,GAAOwW,CAAC,CAACxW,CAAD,CAAzB,CAAN;EACD;;EACD,SAAO2/C,EAAE,IAAI3c,EAAE,GAAG0c,EAAL,GAAU3c,EAAd,CAAT;EACD;;ECbc,SAASqd,QAAT,CAAkB7pC,CAAlB,EAAqBC,CAArB,EAAwB;EACrC,MAAI8I,EAAE,GAAG/I,CAAC,CAACxW,MAAX;EACA,MAAI8wB,GAAG,GAAG,CAAV;;EACA,OAAK,IAAI7wB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGsf,EAApB,EAAwBtf,CAAC,EAAzB,EAA6B;EAC3B6wB,IAAAA,GAAG,IAAI,CAACta,CAAC,CAACvW,CAAD,CAAD,GAAOwW,CAAC,CAACxW,CAAD,CAAT,IAAgB+E,IAAI,CAAC0G,GAAL,CAAS8K,CAAC,CAACvW,CAAD,CAAD,GAAOwW,CAAC,CAACxW,CAAD,CAAjB,CAAvB;EACD;;EACD,SAAO6wB,GAAP;EACD;;ECPc,SAASwvB,gBAAT,CAA0B9pC,CAA1B,EAA6BC,CAA7B,EAAgC;EAC7C,MAAI8I,EAAE,GAAG/I,CAAC,CAACxW,MAAX;EACA,MAAI8wB,GAAG,GAAG,CAAV;;EACA,OAAK,IAAI7wB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGsf,EAApB,EAAwBtf,CAAC,EAAzB,EAA6B;EAC3B6wB,IAAAA,GAAG,IACD,CAACta,CAAC,CAACvW,CAAD,CAAD,GAAO+E,IAAI,CAAC0G,GAAL,CAAS8K,CAAC,CAACvW,CAAD,CAAV,CAAP,GAAwBwW,CAAC,CAACxW,CAAD,CAAD,GAAO+E,IAAI,CAAC0G,GAAL,CAAS+K,CAAC,CAACxW,CAAD,CAAV,CAAhC,IAAkD,CAAlD,GACC,CAACuW,CAAC,CAACvW,CAAD,CAAD,GAAOwW,CAAC,CAACxW,CAAD,CAAT,IAAgB,CAAjB,GAAsB+E,IAAI,CAAC0G,GAAL,CAAS,CAAC8K,CAAC,CAACvW,CAAD,CAAD,GAAOwW,CAAC,CAACxW,CAAD,CAAT,IAAgB,CAAzB,CAFxB;EAGD;;EACD,SAAO6wB,GAAP;EACD;;ECTc,SAASyvB,aAAT,CAAuB/pC,CAAvB,EAA0BC,CAA1B,EAA6B;EAC1C,MAAI8I,EAAE,GAAG/I,CAAC,CAACxW,MAAX;EACA,MAAIwP,CAAC,GAAG,CAAR;EACA,MAAI+H,CAAC,GAAG,CAAR;;EACA,OAAK,IAAItX,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGsf,EAApB,EAAwBtf,CAAC,EAAzB,EAA6B;EAC3BuP,IAAAA,CAAC,IAAIgH,CAAC,CAACvW,CAAD,CAAD,GAAO+E,IAAI,CAAC0G,GAAL,CAAU,IAAI8K,CAAC,CAACvW,CAAD,CAAN,IAAcuW,CAAC,CAACvW,CAAD,CAAD,GAAOwW,CAAC,CAACxW,CAAD,CAAtB,CAAT,CAAZ;EACAsX,IAAAA,CAAC,IAAId,CAAC,CAACxW,CAAD,CAAD,GAAO+E,IAAI,CAAC0G,GAAL,CAAU,IAAI+K,CAAC,CAACxW,CAAD,CAAN,IAAcuW,CAAC,CAACvW,CAAD,CAAD,GAAOwW,CAAC,CAACxW,CAAD,CAAtB,CAAT,CAAZ;EACD;;EACD,SAAO,CAACuP,CAAC,GAAG+H,CAAL,IAAU,CAAjB;EACD;;ECTc,SAASipC,WAAT,CAAqBhqC,CAArB,EAAwBC,CAAxB,EAA2B;EACxC,MAAI8I,EAAE,GAAG/I,CAAC,CAACxW,MAAX;EACA,MAAI8wB,GAAG,GAAG,CAAV;;EACA,OAAK,IAAI7wB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGsf,EAApB,EAAwBtf,CAAC,EAAzB,EAA6B;EAC3B6wB,IAAAA,GAAG,IAAIta,CAAC,CAACvW,CAAD,CAAD,GAAO+E,IAAI,CAAC0G,GAAL,CAAU,IAAI8K,CAAC,CAACvW,CAAD,CAAN,IAAcuW,CAAC,CAACvW,CAAD,CAAD,GAAOwW,CAAC,CAACxW,CAAD,CAAtB,CAAT,CAAd;EACD;;EACD,SAAO6wB,GAAP;EACD;;ECPc,SAAS2vB,UAAT,CAAoBjqC,CAApB,EAAuBC,CAAvB,EAA0B;EACvC,MAAI8I,EAAE,GAAG/I,CAAC,CAACxW,MAAX;EACA,MAAIu/C,EAAE,GAAG,CAAT;EACA,MAAIC,IAAI,GAAG,CAAX;;EACA,OAAK,IAAIv/C,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGsf,EAApB,EAAwBtf,CAAC,EAAzB,EAA6B;EAC3Bs/C,IAAAA,EAAE,IAAIv6C,IAAI,CAAC0F,GAAL,CAAS8L,CAAC,CAACvW,CAAD,CAAD,GAAOwW,CAAC,CAACxW,CAAD,CAAjB,CAAN;EACAu/C,IAAAA,IAAI,IAAIx6C,IAAI,CAAC9E,GAAL,CAASsW,CAAC,CAACvW,CAAD,CAAV,EAAewW,CAAC,CAACxW,CAAD,CAAhB,CAAR;EACD;;EACD,SAAOs/C,EAAE,GAAGC,IAAZ;EACD;;ECTc,SAASkB,eAAT,CAAyBlqC,CAAzB,EAA4BC,CAA5B,EAA+B;EAC5C,MAAI8I,EAAE,GAAG/I,CAAC,CAACxW,MAAX;EACA,MAAI8wB,GAAG,GAAG,CAAV;;EACA,OAAK,IAAI7wB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGsf,EAApB,EAAwBtf,CAAC,EAAzB,EAA6B;EAC3B6wB,IAAAA,GAAG,IAAIta,CAAC,CAACvW,CAAD,CAAD,GAAO+E,IAAI,CAAC0G,GAAL,CAAS8K,CAAC,CAACvW,CAAD,CAAD,GAAOwW,CAAC,CAACxW,CAAD,CAAjB,CAAd;EACD;;EACD,SAAO6wB,GAAP;EACD;;ECPc,SAAS6vB,eAAT,CAAyBnqC,CAAzB,EAA4BC,CAA5B,EAA+B;EAC5C,MAAI8I,EAAE,GAAG/I,CAAC,CAACxW,MAAX;EACA,MAAIwP,CAAC,GAAG,CAAR;EACA,MAAIyzB,EAAE,GAAG,CAAT;EACA,MAAI2c,EAAE,GAAG,CAAT;;EACA,OAAK,IAAI3/C,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGsf,EAApB,EAAwBtf,CAAC,EAAzB,EAA6B;EAC3BuP,IAAAA,CAAC,IAAIgH,CAAC,CAACvW,CAAD,CAAD,GAAOwW,CAAC,CAACxW,CAAD,CAAb;EACAgjC,IAAAA,EAAE,IAAIzsB,CAAC,CAACvW,CAAD,CAAD,GAAOuW,CAAC,CAACvW,CAAD,CAAd;EACA2/C,IAAAA,EAAE,IAAInpC,CAAC,CAACxW,CAAD,CAAD,GAAOwW,CAAC,CAACxW,CAAD,CAAd;EACD;;EACD,SAAOuP,CAAC,IAAIyzB,EAAE,GAAG2c,EAAL,GAAUpwC,CAAd,CAAR;EACD;;ECXc,SAASoxC,YAAT,CAAsBpqC,CAAtB,EAAyBC,CAAzB,EAA4B;EACzC,MAAI8I,EAAE,GAAG/I,CAAC,CAACxW,MAAX;EACA,MAAI8wB,GAAG,GAAG,CAAV;;EACA,OAAK,IAAI7wB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGsf,EAApB,EAAwBtf,CAAC,EAAzB,EAA6B;EAC3B6wB,IAAAA,GAAG,IACD9rB,IAAI,CAACC,GAAL,CAASuR,CAAC,CAACvW,CAAD,CAAD,GAAOuW,CAAC,CAACvW,CAAD,CAAR,GAAcwW,CAAC,CAACxW,CAAD,CAAD,GAAOwW,CAAC,CAACxW,CAAD,CAA/B,EAAoC,CAApC,KAA0C,IAAI+E,IAAI,CAACC,GAAL,CAASuR,CAAC,CAACvW,CAAD,CAAD,GAAOwW,CAAC,CAACxW,CAAD,CAAjB,EAAsB,GAAtB,CAA9C,CADF;EAED;;EACD,SAAO6wB,GAAP;EACD;;ECRc,SAAS+vB,UAAT,CAAoBrqC,CAApB,EAAuBC,CAAvB,EAA0B;EACvC,MAAI8I,EAAE,GAAG/I,CAAC,CAACxW,MAAX;EACA,MAAI8wB,GAAG,GAAG,CAAV;;EACA,OAAK,IAAI7wB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGsf,EAApB,EAAwBtf,CAAC,EAAzB,EAA6B;EAC3B6wB,IAAAA,GAAG,IAAI9rB,IAAI,CAAC0G,GAAL,CAAS1G,IAAI,CAAC0F,GAAL,CAAS8L,CAAC,CAACvW,CAAD,CAAD,GAAOwW,CAAC,CAACxW,CAAD,CAAjB,IAAwB,CAAjC,CAAP;EACD;;EACD,SAAO6wB,GAAP;EACD;;ECPc,SAASgwB,SAAT,CAAmBtqC,CAAnB,EAAsBC,CAAtB,EAAyB;EACtC,MAAIxW,CAAC,GAAG,CAAR;EACA,MAAIsf,EAAE,GAAG/I,CAAC,CAACxW,MAAX;EACA,MAAI6f,CAAC,GAAG,CAAR;;EACA,SAAO5f,CAAC,GAAGsf,EAAX,EAAetf,CAAC,EAAhB,EAAoB;EAClB4f,IAAAA,CAAC,IAAI7a,IAAI,CAAC0F,GAAL,CAAS8L,CAAC,CAACvW,CAAD,CAAD,GAAOwW,CAAC,CAACxW,CAAD,CAAjB,CAAL;EACD;;EACD,SAAO4f,CAAP;EACD;;ECRc,SAASkhC,QAAT,CAAkBvqC,CAAlB,EAAqBC,CAArB,EAAwB;EACrC,MAAI8I,EAAE,GAAG/I,CAAC,CAACxW,MAAX;EACA,MAAI8wB,GAAG,GAAG,CAAV;;EACA,OAAK,IAAI7wB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGsf,EAApB,EAAwBtf,CAAC,EAAzB,EAA6B;EAC3B6wB,IAAAA,GAAG,IAAI9rB,IAAI,CAACE,IAAL,CAAUsR,CAAC,CAACvW,CAAD,CAAD,GAAOwW,CAAC,CAACxW,CAAD,CAAlB,CAAP;EACD;;EACD,SAAO+E,IAAI,CAACE,IAAL,CAAU,IAAI,IAAI4rB,GAAlB,CAAP;EACD;;ECPc,SAASkwB,SAAT,CAAmBxqC,CAAnB,EAAsBC,CAAtB,EAAyBjH,CAAzB,EAA4B;EACzC,MAAIvP,CAAC,GAAG,CAAR;EACA,MAAIsf,EAAE,GAAG/I,CAAC,CAACxW,MAAX;EACA,MAAI6f,CAAC,GAAG,CAAR;;EACA,SAAO5f,CAAC,GAAGsf,EAAX,EAAetf,CAAC,EAAhB,EAAoB;EAClB4f,IAAAA,CAAC,IAAI7a,IAAI,CAACC,GAAL,CAASD,IAAI,CAAC0F,GAAL,CAAS8L,CAAC,CAACvW,CAAD,CAAD,GAAOwW,CAAC,CAACxW,CAAD,CAAjB,CAAT,EAAgCuP,CAAhC,CAAL;EACD;;EACD,SAAOxK,IAAI,CAACC,GAAL,CAAS4a,CAAT,EAAY,IAAIrQ,CAAhB,CAAP;EACD;;ECRc,SAASyxC,MAAT,CAAgBzqC,CAAhB,EAAmBC,CAAnB,EAAsB;EACnC,MAAI8I,EAAE,GAAG/I,CAAC,CAACxW,MAAX;EACA,MAAIu/C,EAAE,GAAG,CAAT;EACA,MAAIC,IAAI,GAAG,CAAX;;EACA,OAAK,IAAIv/C,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGsf,EAApB,EAAwBtf,CAAC,EAAzB,EAA6B;EAC3Bs/C,IAAAA,EAAE,IAAIv6C,IAAI,CAAC9E,GAAL,CAASsW,CAAC,CAACvW,CAAD,CAAV,EAAewW,CAAC,CAACxW,CAAD,CAAhB,CAAN;EACAu/C,IAAAA,IAAI,IAAIhpC,CAAC,CAACvW,CAAD,CAAD,GAAOwW,CAAC,CAACxW,CAAD,CAAhB;EACD;;EACD,SAAO,IAAIs/C,EAAE,GAAGC,IAAhB;EACD;;ECTc,SAAS0B,MAAT,CAAgB1qC,CAAhB,EAAmBC,CAAnB,EAAsB;EACnC,MAAIxW,CAAC,GAAG,CAAR;EACA,MAAIsf,EAAE,GAAG/I,CAAC,CAACxW,MAAX;EACA,MAAI6f,CAAC,GAAG,CAAR;;EACA,SAAO5f,CAAC,GAAGsf,EAAX,EAAetf,CAAC,EAAhB,EAAoB;EAClB4f,IAAAA,CAAC,IAAK,CAACrJ,CAAC,CAACvW,CAAD,CAAD,GAAOwW,CAAC,CAACxW,CAAD,CAAT,KAAiBuW,CAAC,CAACvW,CAAD,CAAD,GAAOwW,CAAC,CAACxW,CAAD,CAAzB,CAAD,GAAkCuW,CAAC,CAACvW,CAAD,CAAxC;EACD;;EACD,SAAO4f,CAAP;EACD;;ECRc,SAASshC,OAAT,CAAiB3qC,CAAjB,EAAoBC,CAApB,EAAuB;EACpC,MAAIxW,CAAC,GAAG,CAAR;EACA,MAAIsf,EAAE,GAAG/I,CAAC,CAACxW,MAAX;EACA,MAAI6f,CAAC,GAAG,CAAR;;EACA,SAAO5f,CAAC,GAAGsf,EAAX,EAAetf,CAAC,EAAhB,EAAoB;EAClB4f,IAAAA,CAAC,IAAK,CAACrJ,CAAC,CAACvW,CAAD,CAAD,GAAOwW,CAAC,CAACxW,CAAD,CAAT,KAAiBuW,CAAC,CAACvW,CAAD,CAAD,GAAOwW,CAAC,CAACxW,CAAD,CAAzB,CAAD,GAAkCwW,CAAC,CAACxW,CAAD,CAAxC;EACD;;EACD,SAAO4f,CAAP;EACD;;ECRc,SAASuhC,sBAAT,CAAgC5qC,CAAhC,EAAmCC,CAAnC,EAAsC;EACnD,MAAIxW,CAAC,GAAG,CAAR;EACA,MAAIsf,EAAE,GAAG/I,CAAC,CAACxW,MAAX;EACA,MAAI6f,CAAC,GAAG,CAAR;;EACA,SAAO5f,CAAC,GAAGsf,EAAX,EAAetf,CAAC,EAAhB,EAAoB;EAClB4f,IAAAA,CAAC,IAAK,CAACrJ,CAAC,CAACvW,CAAD,CAAD,GAAOwW,CAAC,CAACxW,CAAD,CAAT,KAAiBuW,CAAC,CAACvW,CAAD,CAAD,GAAOwW,CAAC,CAACxW,CAAD,CAAzB,CAAD,IAAmCuW,CAAC,CAACvW,CAAD,CAAD,GAAOwW,CAAC,CAACxW,CAAD,CAA3C,CAAL;EACD;;EACD,SAAO,IAAI4f,CAAX;EACD;;ECRc,SAASwhC,OAAT,CAAiB7qC,CAAjB,EAAoBC,CAApB,EAAuB;EACpC,MAAI8I,EAAE,GAAG/I,CAAC,CAACxW,MAAX;EACA,MAAIu/C,EAAE,GAAG,CAAT;EACA,MAAIC,IAAI,GAAG,CAAX;;EACA,OAAK,IAAIv/C,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGsf,EAApB,EAAwBtf,CAAC,EAAzB,EAA6B;EAC3Bs/C,IAAAA,EAAE,IAAIv6C,IAAI,CAAC9E,GAAL,CAASsW,CAAC,CAACvW,CAAD,CAAV,EAAewW,CAAC,CAACxW,CAAD,CAAhB,CAAN;EACAu/C,IAAAA,IAAI,IAAIx6C,IAAI,CAACpF,GAAL,CAAS4W,CAAC,CAACvW,CAAD,CAAV,EAAewW,CAAC,CAACxW,CAAD,CAAhB,CAAR;EACD;;EACD,SAAOs/C,EAAE,GAAGC,IAAZ;EACD;;ECTc,SAAS8B,OAAT,CAAiB9qC,CAAjB,EAAoBC,CAApB,EAAuB;EACpC,MAAI8I,EAAE,GAAG/I,CAAC,CAACxW,MAAX;EACA,MAAIu/C,EAAE,GAAG,CAAT;EACA,MAAIC,IAAI,GAAG,CAAX;;EACA,OAAK,IAAIv/C,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGsf,EAApB,EAAwBtf,CAAC,EAAzB,EAA6B;EAC3Bs/C,IAAAA,EAAE,IAAIv6C,IAAI,CAAC0F,GAAL,CAAS8L,CAAC,CAACvW,CAAD,CAAD,GAAOwW,CAAC,CAACxW,CAAD,CAAjB,CAAN;EACAu/C,IAAAA,IAAI,IAAIx6C,IAAI,CAACpF,GAAL,CAAS4W,CAAC,CAACvW,CAAD,CAAV,EAAewW,CAAC,CAACxW,CAAD,CAAhB,CAAR;EACD;;EACD,SAAOs/C,EAAE,GAAGC,IAAZ;EACD;;ECTc,SAAS+B,QAAT,CAAkB/qC,CAAlB,EAAqBC,CAArB,EAAwB;EACrC,MAAI8I,EAAE,GAAG/I,CAAC,CAACxW,MAAX;EACA,MAAIu/C,EAAE,GAAG,CAAT;EACA,MAAIC,IAAI,GAAG,CAAX;;EACA,OAAK,IAAIv/C,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGsf,EAApB,EAAwBtf,CAAC,EAAzB,EAA6B;EAC3Bs/C,IAAAA,EAAE,IAAIv6C,IAAI,CAAC0F,GAAL,CAAS8L,CAAC,CAACvW,CAAD,CAAD,GAAOwW,CAAC,CAACxW,CAAD,CAAjB,CAAN;EACAu/C,IAAAA,IAAI,IAAIhpC,CAAC,CAACvW,CAAD,CAAD,GAAOwW,CAAC,CAACxW,CAAD,CAAhB;EACD;;EACD,SAAOs/C,EAAE,GAAGC,IAAZ;EACD;;ECTc,SAASgC,OAAT,CAAiBhrC,CAAjB,EAAoBC,CAApB,EAAuB;EACpC,MAAIxW,CAAC,GAAG,CAAR;EACA,MAAIsf,EAAE,GAAG/I,CAAC,CAACxW,MAAX;EACA,MAAI6f,CAAC,GAAG,CAAR;;EACA,SAAO5f,CAAC,GAAGsf,EAAX,EAAetf,CAAC,EAAhB,EAAoB;EAClB4f,IAAAA,CAAC,IAAK,CAACrJ,CAAC,CAACvW,CAAD,CAAD,GAAOwW,CAAC,CAACxW,CAAD,CAAT,KAAiBuW,CAAC,CAACvW,CAAD,CAAD,GAAOwW,CAAC,CAACxW,CAAD,CAAzB,CAAD,IAAmCuW,CAAC,CAACvW,CAAD,CAAD,GAAOwW,CAAC,CAACxW,CAAD,CAA3C,CAAL;EACD;;EACD,SAAO4f,CAAP;EACD;;ECRc,SAAS4hC,YAAT,CAAsBjrC,CAAtB,EAAyBC,CAAzB,EAA4B;EACzC,MAAI8I,EAAE,GAAG/I,CAAC,CAACxW,MAAX;EACA,MAAI8wB,GAAG,GAAG,CAAV;;EACA,OAAK,IAAI7wB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGsf,EAApB,EAAwBtf,CAAC,EAAzB,EAA6B;EAC3B6wB,IAAAA,GAAG,IACD,CAAC9rB,IAAI,CAACE,IAAL,CAAUsR,CAAC,CAACvW,CAAD,CAAX,IAAkB+E,IAAI,CAACE,IAAL,CAAUuR,CAAC,CAACxW,CAAD,CAAX,CAAnB,KAAuC+E,IAAI,CAACE,IAAL,CAAUsR,CAAC,CAACvW,CAAD,CAAX,IAAkB+E,IAAI,CAACE,IAAL,CAAUuR,CAAC,CAACxW,CAAD,CAAX,CAAzD,CADF;EAED;;EACD,SAAO6wB,GAAP;EACD;;ECRc,SAAS4wB,MAAT,CAAgBlrC,CAAhB,EAAmBC,CAAnB,EAAsB;EACnC,MAAI8I,EAAE,GAAG/I,CAAC,CAACxW,MAAX;EACA,MAAI8wB,GAAG,GAAG,CAAV;;EACA,OAAK,IAAI7wB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGsf,EAApB,EAAwBtf,CAAC,EAAzB,EAA6B;EAC3B6wB,IAAAA,GAAG,IACA,CAACta,CAAC,CAACvW,CAAD,CAAD,GAAOwW,CAAC,CAACxW,CAAD,CAAT,IAAgB,CAAjB,GACA+E,IAAI,CAAC0G,GAAL,CAAS,CAAC8K,CAAC,CAACvW,CAAD,CAAD,GAAOwW,CAAC,CAACxW,CAAD,CAAT,KAAiB,IAAI+E,IAAI,CAACE,IAAL,CAAUsR,CAAC,CAACvW,CAAD,CAAD,GAAOwW,CAAC,CAACxW,CAAD,CAAlB,CAArB,CAAT,CAFF;EAGD;;EACD,SAAO6wB,GAAP;EACD;;ECTc,SAAS6wB,QAAT,CAAkBnrC,CAAlB,EAAqBC,CAArB,EAAwBmrC,SAAxB,EAAmC;EAChD,MAAIA,SAAJ,EAAe;EACb,QAAIC,KAAK,GAAG,CAAZ;EACA,QAAIC,KAAK,GAAG,CAAZ;;EACA,SAAK,IAAIv+C,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGiT,CAAC,CAACxW,MAAtB,EAA8BuD,CAAC,EAA/B,EAAmC;EACjCs+C,MAAAA,KAAK,IAAIrrC,CAAC,CAACjT,CAAD,CAAD,IAAQkT,CAAC,CAAClT,CAAD,CAAlB;EACAu+C,MAAAA,KAAK,IAAItrC,CAAC,CAACjT,CAAD,CAAD,IAAQkT,CAAC,CAAClT,CAAD,CAAlB;EACD;;EACD,QAAIu+C,KAAK,KAAK,CAAd,EAAiB;EACf,aAAO,CAAP;EACD;;EACD,WAAOD,KAAK,GAAGC,KAAf;EACD,GAXD,MAWO;EACL,QAAIviC,EAAE,GAAG/I,CAAC,CAACxW,MAAX;EACA,QAAIwP,CAAC,GAAG,CAAR;EACA,QAAI+H,CAAC,GAAG,CAAR;EACA,QAAIlI,CAAC,GAAG,CAAR;;EACA,SAAK,IAAIpP,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGsf,EAApB,EAAwBtf,CAAC,EAAzB,EAA6B;EAC3BuP,MAAAA,CAAC,IAAIgH,CAAC,CAACvW,CAAD,CAAN;EACAsX,MAAAA,CAAC,IAAId,CAAC,CAACxW,CAAD,CAAN;EACAoP,MAAAA,CAAC,IAAIrK,IAAI,CAAC9E,GAAL,CAASsW,CAAC,CAACvW,CAAD,CAAV,EAAewW,CAAC,CAACxW,CAAD,CAAhB,CAAL;EACD;;EACD,WAAO,IAAI,CAACuP,CAAC,GAAG+H,CAAJ,GAAQ,IAAIlI,CAAb,KAAmBG,CAAC,GAAG+H,CAAJ,GAAQlI,CAA3B,CAAX;EACD;EACF;;ECtBc,SAASsyC,UAAT,CAAkBnrC,CAAlB,EAAqBC,CAArB,EAAwBmrC,SAAxB,EAAmC;EAChD,MAAIA,SAAJ,EAAe;EACb,WAAO,IAAIG,QAAS,CAACvrC,CAAD,EAAIC,CAAJ,EAAOmrC,SAAP,CAApB;EACD,GAFD,MAEO;EACL,QAAIriC,EAAE,GAAG/I,CAAC,CAACxW,MAAX;EACA,QAAIwP,CAAC,GAAG,CAAR;EACA,QAAI+H,CAAC,GAAG,CAAR;EACA,QAAIlI,CAAC,GAAG,CAAR;;EACA,SAAK,IAAIpP,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGsf,EAApB,EAAwBtf,CAAC,EAAzB,EAA6B;EAC3BuP,MAAAA,CAAC,IAAIgH,CAAC,CAACvW,CAAD,CAAN;EACAsX,MAAAA,CAAC,IAAId,CAAC,CAACxW,CAAD,CAAN;EACAoP,MAAAA,CAAC,IAAIrK,IAAI,CAAC9E,GAAL,CAASsW,CAAC,CAACvW,CAAD,CAAV,EAAewW,CAAC,CAACxW,CAAD,CAAhB,CAAL;EACD;;EACD,WAAO,CAACuP,CAAC,GAAG+H,CAAJ,GAAQ,IAAIlI,CAAb,KAAmBG,CAAC,GAAG+H,CAAJ,GAAQlI,CAA3B,CAAP;EACD;EACF;;ECjBc,SAAS2yC,MAAT,CAAgBxrC,CAAhB,EAAmBC,CAAnB,EAAsB;EACnC,MAAI8I,EAAE,GAAG/I,CAAC,CAACxW,MAAX;EACA,MAAI8wB,GAAG,GAAG,CAAV;;EACA,OAAK,IAAI7wB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGsf,EAApB,EAAwBtf,CAAC,EAAzB,EAA6B;EAC3B6wB,IAAAA,GAAG,IACDta,CAAC,CAACvW,CAAD,CAAD,GAAO+E,IAAI,CAAC0G,GAAL,CAAU,IAAI8K,CAAC,CAACvW,CAAD,CAAN,IAAcuW,CAAC,CAACvW,CAAD,CAAD,GAAOwW,CAAC,CAACxW,CAAD,CAAtB,CAAT,CAAP,GACAwW,CAAC,CAACxW,CAAD,CAAD,GAAO+E,IAAI,CAAC0G,GAAL,CAAU,IAAI+K,CAAC,CAACxW,CAAD,CAAN,IAAcuW,CAAC,CAACvW,CAAD,CAAD,GAAOwW,CAAC,CAACxW,CAAD,CAAtB,CAAT,CAFT;EAGD;;EACD,SAAO6wB,GAAP;EACD;;ECTc,SAASmxB,UAAT,CAAoBzrC,CAApB,EAAuBC,CAAvB,EAA0B;EACvC,MAAI8I,EAAE,GAAG/I,CAAC,CAACxW,MAAX;EACA,MAAI8wB,GAAG,GAAG,CAAV;;EACA,OAAK,IAAI7wB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGsf,EAApB,EAAwBtf,CAAC,EAAzB,EAA6B;EAC3B6wB,IAAAA,GAAG,IAAI,IAAI9rB,IAAI,CAAC9E,GAAL,CAASsW,CAAC,CAACvW,CAAD,CAAV,EAAewW,CAAC,CAACxW,CAAD,CAAhB,IAAuB+E,IAAI,CAACpF,GAAL,CAAS4W,CAAC,CAACvW,CAAD,CAAV,EAAewW,CAAC,CAACxW,CAAD,CAAhB,CAAlC;EACD;;EACD,SAAO6wB,GAAP;EACD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ECJD;;;;;;;;;AAQA,EAAO,SAASoxB,UAAT,CAAoBC,QAApB,EAA4C;EAAA,MAAd/hD,OAAc,uEAAJ,EAAI;EACjD,MAAI+a,CAAC,GAAGgnC,QAAQ,CAAC,CAAD,CAAhB;EACA,QAAM;EACJC,IAAAA,SAAS,GAAG,IADR;EAEJ7jC,IAAAA,SAAS,GAAG,IAFR;EAGJhc,IAAAA,IAAI,GAAG4Y,CAAC,CAAC,CAAD,CAHJ;EAIJknC,IAAAA,EAAE,GAAGlnC,CAAC,CAACA,CAAC,CAACnb,MAAF,GAAW,CAAZ;EAJF,MAKFI,OALJ;EAOA,SAAOkiD,cAAc,CACnBH,QAAQ,CAAC,CAAD,CADW,EAEnBA,QAAQ,CAAC,CAAD,CAFW,EAGnB5/C,IAHmB,EAInB8/C,EAJmB,EAKnBD,SALmB,EAMnB7jC,SANmB,CAArB;EAQD;;EAED,SAAS+jC,cAAT,CAAwBnnC,CAAxB,EAA2BmD,CAA3B,EAA8B/b,IAA9B,EAAoC8/C,EAApC,EAAwCD,SAAxC,EAAmD7jC,SAAnD,EAA8D;EAC5D,MAAI8jC,EAAE,GAAG9/C,IAAL,GAAY6/C,SAAhB,EAA2B;EACzB,WAAO,IAAP;EACD,GAH2D;;;EAM5D,MAAIG,KAAK,GAAGnI,YAAY,CAACj/B,CAAD,EAAI5Y,IAAJ,EAAU23C,SAAV,CAAxB;;EACA,MAAIqI,KAAK,GAAG,CAAZ,EAAe;EACbA,IAAAA,KAAK,GAAG,CAACA,KAAT;EACD,GAT2D;;;EAY5D,MAAIj/C,GAAG,GAAG,CAAV;EACA,MAAIkV,MAAM,GAAG,CAAb;;EACA,OAAK,IAAIvY,CAAC,GAAGsiD,KAAb,EAAoBtiD,CAAC,GAAGkb,CAAC,CAACnb,MAA1B,EAAkCC,CAAC,EAAnC,EAAuC;EACrC,QAAIkb,CAAC,CAAClb,CAAD,CAAD,IAAQoiD,EAAZ,EAAgB;EACd;EACD;;EACD/+C,IAAAA,GAAG,IAAIgb,CAAC,CAACre,CAAD,CAAR;EACAuY,IAAAA,MAAM,IAAI2C,CAAC,CAAClb,CAAD,CAAD,GAAOqe,CAAC,CAACre,CAAD,CAAlB;EACD;;EAED,MAAIqD,GAAG,GAAGib,SAAV,EAAqB;EACnB,WAAO,IAAP;EACD;;EAED/F,EAAAA,MAAM,IAAIlV,GAAV;;EACA,MAAIkV,MAAM,GAAGjW,IAAT,GAAgB,IAAhB,IAAwB8/C,EAAE,GAAG7pC,MAAL,GAAc,IAA1C,EAAgD;EAC9C,WAAO,IAAP;EACD;;EACD,MAAIA,MAAM,GAAGjW,IAAT,GAAgB6/C,SAAS,GAAG,CAAhC,EAAmC;EACjC,WAAOE,cAAc,CAACnnC,CAAD,EAAImD,CAAJ,EAAO9F,MAAP,EAAe6pC,EAAf,EAAmBD,SAAnB,EAA8B7jC,SAA9B,CAArB;EACD,GAFD,MAEO;EACL,QAAI8jC,EAAE,GAAG7pC,MAAL,GAAc4pC,SAAS,GAAG,CAA9B,EAAiC;EAC/B,aAAOE,cAAc,CAACnnC,CAAD,EAAImD,CAAJ,EAAO/b,IAAP,EAAaiW,MAAb,EAAqB4pC,SAArB,EAAgC7jC,SAAhC,CAArB;EACD,KAFD,MAEO;EACL,aAAO,IAAI0J,IAAJ,CACL3kB,GADK,EAELkV,MAFK,EAGL8pC,cAAc,CAACnnC,CAAD,EAAImD,CAAJ,EAAO/b,IAAP,EAAaiW,MAAb,EAAqB4pC,SAArB,EAAgC7jC,SAAhC,CAHT,EAIL+jC,cAAc,CAACnnC,CAAD,EAAImD,CAAJ,EAAO9F,MAAP,EAAe6pC,EAAf,EAAmBD,SAAnB,EAA8B7jC,SAA9B,CAJT,CAAP;EAMD;EACF;EACF;;EAED,MAAM0J,IAAN,CAAW;EACTpiB,EAAAA,WAAW,CAACvC,GAAD,EAAMkV,MAAN,EAAcgP,IAAd,EAAoBC,KAApB,EAA2B;EACpC,SAAKnkB,GAAL,GAAWA,GAAX;EACA,SAAKkV,MAAL,GAAcA,MAAd;EACA,SAAKgP,IAAL,GAAYA,IAAZ;EACA,SAAKC,KAAL,GAAaA,KAAb;EACD;;EANQ;;EC1EX;;;;;;;;AAOA,EAAO,SAAS+6B,aAAT,CAAuBhsC,CAAvB,EAA0BC,CAA1B,EAA2C;EAAA,MAAdrW,OAAc,uEAAJ,EAAI;EAChD,QAAM;EAAEmd,IAAAA,KAAK,GAAG,GAAV;EAAe42B,IAAAA,IAAI,GAAG,IAAtB;EAA4BsO,IAAAA,KAAK,GAAG;EAApC,MAA8CriD,OAApD;;EAEA,MAAIoW,CAAC,KAAK,IAAN,IAAcC,CAAC,KAAK,IAAxB,EAA8B;EAC5B,WAAO,CAAP;EACD;;EACD,MAAIjW,KAAK,CAACV,OAAN,CAAc0W,CAAd,CAAJ,EAAsB;EACpBA,IAAAA,CAAC,GAAG0rC,UAAU,CAAC1rC,CAAD,CAAd;EACD;;EACD,MAAIhW,KAAK,CAACV,OAAN,CAAc2W,CAAd,CAAJ,EAAsB;EACpBA,IAAAA,CAAC,GAAGyrC,UAAU,CAACzrC,CAAD,CAAd;EACD;;EAED,MAAIud,CAAC,GACFzW,KAAK,GAAGvY,IAAI,CAAC9E,GAAL,CAASsW,CAAC,CAAClT,GAAX,EAAgBmT,CAAC,CAACnT,GAAlB,CAAT,GAAmC0B,IAAI,CAACpF,GAAL,CAAS4W,CAAC,CAAClT,GAAX,EAAgBmT,CAAC,CAACnT,GAAlB,CAAnC,GACA,CAAC,IAAIia,KAAL,IAAcvY,IAAI,CAACsG,GAAL,CAAS,CAACm3C,KAAD,GAASz9C,IAAI,CAAC0F,GAAL,CAAS8L,CAAC,CAACgC,MAAF,GAAW/B,CAAC,CAAC+B,MAAtB,CAAlB,CAFhB;EAIA,SACE27B,IAAI,GAAGngB,CAAP,GACC,CAAC,IAAImgB,IAAL,KACEqO,aAAa,CAAChsC,CAAC,CAACgR,IAAH,EAAS/Q,CAAC,CAAC+Q,IAAX,EAAiBpnB,OAAjB,CAAb,GACCoiD,aAAa,CAAChsC,CAAC,CAACiR,KAAH,EAAUhR,CAAC,CAACgR,KAAZ,EAAmBrnB,OAAnB,CAFhB,CAAD,GAGE,CALJ;EAOD;;EC7BM,SAASsiD,cAAT,CAAwB9pB,CAAxB,EAA2B/U,CAA3B,EAA4C;EAAA,MAAdzjB,OAAc,uEAAJ,EAAI;EACjD,SAAOoiD,aAAa,CAAC5pB,CAAD,EAAI/U,CAAJ,EAAOzjB,OAAP,CAApB;EACD;AAED,EAAO,SAASuiD,WAAT,GAAmC;EAAA,MAAdviD,OAAc,uEAAJ,EAAI;EACxC,SAAO,CAACw4B,CAAD,EAAI/U,CAAJ,KAAU2+B,aAAa,CAAC5pB,CAAD,EAAI/U,CAAJ,EAAOzjB,OAAP,CAA9B;EACD;;;;;;;;ECVc,SAASwiD,MAAT,CAAgBpsC,CAAhB,EAAmBC,CAAnB,EAAsB;EACnC,MAAI8I,EAAE,GAAG/I,CAAC,CAACxW,MAAX;EACA,MAAIwP,CAAC,GAAG,CAAR;EACA,MAAIyzB,EAAE,GAAG,CAAT;EACA,MAAI2c,EAAE,GAAG,CAAT;;EACA,OAAK,IAAI3/C,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGsf,EAApB,EAAwBtf,CAAC,EAAzB,EAA6B;EAC3BuP,IAAAA,CAAC,IAAIgH,CAAC,CAACvW,CAAD,CAAD,GAAOwW,CAAC,CAACxW,CAAD,CAAb;EACAgjC,IAAAA,EAAE,IAAIzsB,CAAC,CAACvW,CAAD,CAAD,GAAOuW,CAAC,CAACvW,CAAD,CAAd;EACA2/C,IAAAA,EAAE,IAAInpC,CAAC,CAACxW,CAAD,CAAD,GAAOwW,CAAC,CAACxW,CAAD,CAAd;EACD;;EACD,SAAOuP,CAAC,IAAIxK,IAAI,CAACE,IAAL,CAAU+9B,EAAV,IAAgBj+B,IAAI,CAACE,IAAL,CAAU06C,EAAV,CAApB,CAAR;EACD;;ECTc,SAASF,MAAT,CAAclpC,CAAd,EAAiBC,CAAjB,EAAoB;EACjC,SAAO,IAAIosC,IAAK,CAACrsC,CAAD,EAAIC,CAAJ,CAAhB;EACD;;ECFc,SAAS0pC,cAAT,CAAsB3pC,CAAtB,EAAyBC,CAAzB,EAA4B;EACzC,SAAO,IAAIqsC,YAAa,CAACtsC,CAAD,EAAIC,CAAJ,CAAxB;EACD;;ECFc,SAAS2pC,SAAT,CAAiB5pC,CAAjB,EAAoBC,CAApB,EAAuB;EACpC,SAAO,IAAIssC,OAAQ,CAACvsC,CAAD,EAAIC,CAAJ,CAAnB;EACD;;ECFc,SAASgqC,YAAT,CAAoBjqC,CAApB,EAAuBC,CAAvB,EAA0B;EACvC,SAAO,IAAIusC,UAAW,CAACxsC,CAAD,EAAIC,CAAJ,CAAtB;EACD;;ECFc,SAASwqC,QAAT,CAAgBzqC,CAAhB,EAAmBC,CAAnB,EAAsB;EACnC,SAAO,IAAIwsC,MAAO,CAACzsC,CAAD,EAAIC,CAAJ,CAAlB;EACD;;ECAc,SAAS0qC,SAAT,CAAiB3qC,CAAjB,EAAoBC,CAApB,EAAuB;EACpC,MAAIysC,IAAI,GAAGj/C,IAAI,CAACuS,CAAD,CAAf;EACA,MAAI2sC,IAAI,GAAGl/C,IAAI,CAACwS,CAAD,CAAf;EAEA,MAAI2sC,IAAI,GAAG,IAAI5iD,KAAJ,CAAUgW,CAAC,CAACxW,MAAZ,CAAX;EACA,MAAIqjD,IAAI,GAAG,IAAI7iD,KAAJ,CAAUiW,CAAC,CAACzW,MAAZ,CAAX;;EACA,OAAK,IAAIC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGmjD,IAAI,CAACpjD,MAAzB,EAAiCC,CAAC,EAAlC,EAAsC;EACpCmjD,IAAAA,IAAI,CAACnjD,CAAD,CAAJ,GAAUuW,CAAC,CAACvW,CAAD,CAAD,GAAOijD,IAAjB;EACAG,IAAAA,IAAI,CAACpjD,CAAD,CAAJ,GAAUwW,CAAC,CAACxW,CAAD,CAAD,GAAOkjD,IAAjB;EACD;;EAED,SAAOP,MAAM,CAACQ,IAAD,EAAOC,IAAP,CAAb;EACD;;ECdc,SAAS5B,cAAT,CAAsBjrC,CAAtB,EAAyBC,CAAzB,EAA4B;EACzC,SAAO,IAAI6sC,YAAa,CAAC9sC,CAAD,EAAIC,CAAJ,CAAxB;EACD;;;;;;;;;;;;;;;;;;ECDD,OAAW,GAAG8sC,IAAI,IAAI;EAClB,QAAM71C,CAAC,GAAG61C,IAAI,CAACC,OAAL,CAAaxjD,MAAvB;EACA,QAAMoG,MAAM,GAAG,IAAI5F,KAAJ,CAAUkN,CAAV,CAAf;;EACA,OAAK,IAAIzN,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGyN,CAApB,EAAuBzN,CAAC,EAAxB,EAA4B;EACxBmG,IAAAA,MAAM,CAACnG,CAAD,CAAN,GAAY,CAACsjD,IAAI,CAACE,EAAL,CAAQxjD,CAAR,IAAasjD,IAAI,CAACG,EAAL,CAAQzjD,CAAR,CAAd,KAA6ByN,CAAC,GAAG,CAAjC,CAAZ;EACH;;EACD,SAAOtH,MAAP;EACH,CAPD;;;EAUA,OAAW,GAAGm9C,IAAI,IAAI;EAClB,QAAM71C,CAAC,GAAG61C,IAAI,CAACC,OAAL,CAAaxjD,MAAvB;EACA,QAAMoG,MAAM,GAAG,IAAI5F,KAAJ,CAAUkN,CAAV,CAAf;;EACA,OAAK,IAAIzN,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGyN,CAApB,EAAuBzN,CAAC,EAAxB,EAA4B;EACxBmG,IAAAA,MAAM,CAACnG,CAAD,CAAN,GAAasjD,IAAI,CAAChR,EAAL,CAAQtyC,CAAR,IAAasjD,IAAI,CAACI,EAAL,CAAQ1jD,CAAR,KAAcyN,CAAC,GAAG,CAAlB,CAA1B;EACH;;EACD,SAAOtH,MAAP;EACH,CAPD;;;EAUA,OAAW,GAAGm9C,IAAI,IAAI;EAClB,QAAM71C,CAAC,GAAG61C,IAAI,CAACC,OAAL,CAAaxjD,MAAvB;EACA,QAAMoG,MAAM,GAAG,IAAI5F,KAAJ,CAAUkN,CAAV,CAAf;;EACA,OAAK,IAAIzN,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGyN,CAApB,EAAuBzN,CAAC,EAAxB,EAA4B;EACxBmG,IAAAA,MAAM,CAACnG,CAAD,CAAN,GAAYsjD,IAAI,CAACI,EAAL,CAAQ1jD,CAAR,IAAasjD,IAAI,CAACK,IAA9B;EACH;;EACD,SAAOx9C,MAAP;EACH,CAPD;;;EAUA,OAAW,GAAGm9C,IAAI,IAAI;EAClB,QAAM71C,CAAC,GAAG61C,IAAI,CAACC,OAAL,CAAaxjD,MAAvB;EACA,QAAMoG,MAAM,GAAG,IAAI5F,KAAJ,CAAUkN,CAAV,CAAf;;EACA,OAAK,IAAIzN,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGyN,CAApB,EAAuBzN,CAAC,EAAxB,EAA4B;EACxBmG,IAAAA,MAAM,CAACnG,CAAD,CAAN,GAAYsjD,IAAI,CAACG,EAAL,CAAQzjD,CAAR,IAAasjD,IAAI,CAACM,IAA9B;EACH;;EACD,SAAOz9C,MAAP;EACH,CAPD;;;EAUA,OAAW,GAAGm9C,IAAI,IAAI;EAClB,QAAM71C,CAAC,GAAG61C,IAAI,CAACC,OAAL,CAAaxjD,MAAvB;EACA,QAAMoG,MAAM,GAAG,IAAI5F,KAAJ,CAAUkN,CAAV,CAAf;;EACA,OAAK,IAAIzN,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGyN,CAApB,EAAuBzN,CAAC,EAAxB,EAA4B;EACxBmG,IAAAA,MAAM,CAACnG,CAAD,CAAN,GAAYsjD,IAAI,CAAChR,EAAL,CAAQtyC,CAAR,IAAasjD,IAAI,CAACM,IAA9B;EACH;;EACD,SAAOz9C,MAAP;EACH,CAPD;;;EAUA,OAAW,GAAGm9C,IAAI,IAAI;EAClB,QAAM71C,CAAC,GAAG61C,IAAI,CAACC,OAAL,CAAaxjD,MAAvB;EACA,QAAMoG,MAAM,GAAG,IAAI5F,KAAJ,CAAUkN,CAAV,CAAf;;EACA,OAAK,IAAIzN,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGyN,CAApB,EAAuBzN,CAAC,EAAxB,EAA4B;EACxBmG,IAAAA,MAAM,CAACnG,CAAD,CAAN,GAAYsjD,IAAI,CAACE,EAAL,CAAQxjD,CAAR,IAAasjD,IAAI,CAACK,IAA9B;EACH;;EACD,SAAOx9C,MAAP;EACH,CAPD;;;EAUA,OAAW,GAAGm9C,IAAI,IAAI;EAClB,QAAM71C,CAAC,GAAG61C,IAAI,CAACC,OAAL,CAAaxjD,MAAvB;EACA,QAAMoG,MAAM,GAAG,IAAI5F,KAAJ,CAAUkN,CAAV,CAAf;;EACA,OAAK,IAAIzN,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGyN,CAApB,EAAuBzN,CAAC,EAAxB,EAA4B;EACxBmG,IAAAA,MAAM,CAACnG,CAAD,CAAN,GAAasjD,IAAI,CAACI,EAAL,CAAQ1jD,CAAR,IAAasjD,IAAI,CAACG,EAAL,CAAQzjD,CAAR,CAAb,KAA4B,CAA7B,GAAmCsjD,IAAI,CAACG,EAAL,CAAQzjD,CAAR,KAAcsjD,IAAI,CAACI,EAAL,CAAQ1jD,CAAR,IAAasjD,IAAI,CAACG,EAAL,CAAQzjD,CAAR,CAA3B,CAAnC,GAA6E,CAAzF;EACH;;EACD,SAAOmG,MAAP;EACH,CAPD;;;EAUA,OAAW,GAAGm9C,IAAI,IAAI;EAClB,QAAM71C,CAAC,GAAG61C,IAAI,CAACC,OAAL,CAAaxjD,MAAvB;EACA,QAAMoG,MAAM,GAAG,IAAI5F,KAAJ,CAAUkN,CAAV,CAAf;;EACA,OAAK,IAAIzN,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGyN,CAApB,EAAuBzN,CAAC,EAAxB,EAA4B;EACxBmG,IAAAA,MAAM,CAACnG,CAAD,CAAN,GAAasjD,IAAI,CAAChR,EAAL,CAAQtyC,CAAR,IAAasjD,IAAI,CAACE,EAAL,CAAQxjD,CAAR,CAAb,KAA4B,CAA7B,GAAmCsjD,IAAI,CAACE,EAAL,CAAQxjD,CAAR,KAAcsjD,IAAI,CAAChR,EAAL,CAAQtyC,CAAR,IAAasjD,IAAI,CAACE,EAAL,CAAQxjD,CAAR,CAA3B,CAAnC,GAA6E,CAAzF;EACH;;EACD,SAAOmG,MAAP;EACH,CAPD;;;EAUA,UAAc,GAAGm9C,IAAI,IAAI;EACrB,QAAM71C,CAAC,GAAG61C,IAAI,CAACC,OAAL,CAAaxjD,MAAvB;EACA,QAAMoG,MAAM,GAAG,IAAI5F,KAAJ,CAAUkN,CAAV,CAAf;;EACA,OAAK,IAAIzN,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGyN,CAApB,EAAuBzN,CAAC,EAAxB,EAA4B;EACxBmG,IAAAA,MAAM,CAACnG,CAAD,CAAN,GAAasjD,IAAI,CAACI,EAAL,CAAQ1jD,CAAR,IAAasjD,IAAI,CAACG,EAAL,CAAQzjD,CAAR,CAAb,KAA4B,CAA7B,GAAkC,IAAKsjD,IAAI,CAACG,EAAL,CAAQzjD,CAAR,KAAcsjD,IAAI,CAACI,EAAL,CAAQ1jD,CAAR,IAAasjD,IAAI,CAACG,EAAL,CAAQzjD,CAAR,CAA3B,CAAvC,GAAiF,CAA7F;EACH;;EACD,SAAOmG,MAAP;EACH,CAPD;;;EAUA,UAAc,GAAGm9C,IAAI,IAAI;EACrB,QAAM71C,CAAC,GAAG61C,IAAI,CAACC,OAAL,CAAaxjD,MAAvB;EACA,QAAMoG,MAAM,GAAG,IAAI5F,KAAJ,CAAUkN,CAAV,CAAf;;EACA,OAAK,IAAIzN,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGyN,CAApB,EAAuBzN,CAAC,EAAxB,EAA4B;EACxBmG,IAAAA,MAAM,CAACnG,CAAD,CAAN,GAAasjD,IAAI,CAAChR,EAAL,CAAQtyC,CAAR,IAAasjD,IAAI,CAACE,EAAL,CAAQxjD,CAAR,CAAb,KAA4B,CAA7B,GAAkC,IAAKsjD,IAAI,CAACE,EAAL,CAAQxjD,CAAR,KAAcsjD,IAAI,CAAChR,EAAL,CAAQtyC,CAAR,IAAasjD,IAAI,CAACE,EAAL,CAAQxjD,CAAR,CAA3B,CAAvC,GAAiF,CAA7F;EACH;;EACD,SAAOmG,MAAP;EACH,CAPD;;;EAUA,QAAY,GAAGm9C,IAAI,IAAI;EACnB,QAAM71C,CAAC,GAAG61C,IAAI,CAACC,OAAL,CAAaxjD,MAAvB;EACA,QAAMoG,MAAM,GAAG,IAAI5F,KAAJ,CAAUkN,CAAV,CAAf;;EACA,OAAK,IAAIzN,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGyN,CAApB,EAAuBzN,CAAC,EAAxB,EAA4B;EACxBmG,IAAAA,MAAM,CAACnG,CAAD,CAAN,GAAasjD,IAAI,CAACO,QAAL,CAAc7jD,CAAd,MAAqB,CAAtB,GAA6BsjD,IAAI,CAACG,EAAL,CAAQzjD,CAAR,IAAasjD,IAAI,CAACM,IAAnB,IAA4BN,IAAI,CAACO,QAAL,CAAc7jD,CAAd,IAAmBsjD,IAAI,CAACzrB,QAApD,CAA5B,GAA6F,CAAzG;EACH;;EACD,SAAO1xB,MAAP;EACH,CAPD;;;EAUA,OAAW,GAAGm9C,IAAI,IAAI;EAClB,QAAM71C,CAAC,GAAG61C,IAAI,CAACC,OAAL,CAAaxjD,MAAvB;EACA,QAAMoG,MAAM,GAAG,IAAI5F,KAAJ,CAAUkN,CAAV,CAAf;;EACA,OAAK,IAAIzN,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGyN,CAApB,EAAuBzN,CAAC,EAAxB,EAA4B;EACxBmG,IAAAA,MAAM,CAACnG,CAAD,CAAN,GAAYsjD,IAAI,CAACO,QAAL,CAAc7jD,CAAd,IAAmBsjD,IAAI,CAACzrB,QAApC;EACH;;EACD,SAAO1xB,MAAP;EACH,CAPD;;;EAUA,OAAW,GAAGm9C,IAAI,IAAI;EAClB,QAAM71C,CAAC,GAAG61C,IAAI,CAACC,OAAL,CAAaxjD,MAAvB;EACA,QAAMoG,MAAM,GAAG,IAAI5F,KAAJ,CAAUkN,CAAV,CAAf;;EACA,OAAK,IAAIzN,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGyN,CAApB,EAAuBzN,CAAC,EAAxB,EAA4B;EACxBmG,IAAAA,MAAM,CAACnG,CAAD,CAAN,GAAYsjD,IAAI,CAACQ,QAAL,CAAc9jD,CAAd,IAAmBsjD,IAAI,CAACzrB,QAApC;EACH;;EACD,SAAO1xB,MAAP;EACH,CAPD;;;EAUA,aAAiB,GAAGm9C,IAAI,IAAI;EACxB,QAAMx0C,KAAK,GAAGw0C,IAAI,CAACC,OAAL,CAAar4B,KAAb,EAAd;EACApc,EAAAA,KAAK,CAAC,CAAD,CAAL,GAAWA,KAAK,CAAC,CAAD,CAAhB,CAFwB;;EAGxB,SAAOA,KAAP;EACH,CAJD;;;;;;;;;;;;;;;;;;;ECjIA,MAAMi1C,WAAN,CAAkB;;;;;;;;;;EAUdn+C,EAAAA,WAAW,CAACs9B,UAAD,EAAagI,MAAb,EAAqB/qC,OAArB,EAA8B;EACrCA,IAAAA,OAAO,GAAGA,OAAO,IAAI,EAArB;;EACA,QAAI+iC,UAAU,CAACnjC,MAAX,KAAsBmrC,MAAM,CAACnrC,MAA7B,IAAuCmjC,UAAU,CAAC,CAAD,CAAV,CAAcnjC,MAAd,KAAyBmrC,MAAM,CAAC,CAAD,CAAN,CAAUnrC,MAA9E,EAAsF;EAClF,YAAM,IAAI0P,KAAJ,CAAU,kDAAV,CAAN;EACH;;EACD,UAAMpO,IAAI,GAAG6hC,UAAU,CAACnjC,MAAxB;EACA,UAAMwB,OAAO,GAAG2hC,UAAU,CAAC,CAAD,CAAV,CAAcnjC,MAA9B;EACA,UAAMikD,UAAU,GAAG,CAAC7jD,OAAO,CAACR,GAA5B;EAEA,UAAMskD,KAAK,GAAG,EAAd;;EAEA,QAAI9jD,OAAO,CAAC+jD,GAAZ,EAAiB;EACb,WAAK,IAAIlkD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGqB,IAApB,EAA0BrB,CAAC,EAA3B,EAA+B;EAC3B,aAAK,IAAIsD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG/B,OAApB,EAA6B+B,CAAC,EAA9B,EAAkC;EAC9B2gD,UAAAA,KAAK,CAAC/gD,IAAN,CAAW;EACPogD,YAAAA,IAAI,EAAEpgB,UAAU,CAACljC,CAAD,CAAV,CAAcsD,CAAd,CADC;EAEP6gD,YAAAA,IAAI,EAAEjZ,MAAM,CAAClrC,CAAD,CAAN,CAAUsD,CAAV;EAFC,WAAX;EAIH;EACJ;EACJ,KATD,MASO;EACH,UAAIjC,IAAI,GAAG,CAAP,IAAYA,IAAI,KAAKE,OAAzB,EAAkC;EAC9B,cAAM,IAAIkO,KAAJ,CAAU,8FAAV,CAAN;EACH;;EACD,WAAK,IAAIzP,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGqB,IAAI,GAAG,CAA3B,EAA8BrB,CAAC,EAA/B,EAAmC;EAC/B,aAAK,IAAIsD,CAAC,GAAGtD,CAAC,GAAG,CAAjB,EAAoBsD,CAAC,GAAG/B,OAAxB,EAAiC+B,CAAC,EAAlC,EAAsC;EAClC2gD,UAAAA,KAAK,CAAC/gD,IAAN,CAAW;EACPogD,YAAAA,IAAI,EAAEpgB,UAAU,CAACljC,CAAD,CAAV,CAAcsD,CAAd,CADC;EAEP6gD,YAAAA,IAAI,EAAEjZ,MAAM,CAAClrC,CAAD,CAAN,CAAUsD,CAAV;EAFC,WAAX;EAIH;EACJ;EACJ;;EAED,QAAI0gD,UAAJ,EAAgB;EACZC,MAAAA,KAAK,CAACtsC,IAAN,CAAW,CAACpB,CAAD,EAAIC,CAAJ,KAAUD,CAAC,CAAC+sC,IAAF,GAAS9sC,CAAC,CAAC8sC,IAAhC;EACH,KAFD,MAEO;EACHW,MAAAA,KAAK,CAACtsC,IAAN,CAAW,CAACpB,CAAD,EAAIC,CAAJ,KAAUA,CAAC,CAAC8sC,IAAF,GAAS/sC,CAAC,CAAC+sC,IAAhC;EACH;;EAED,UAAMC,OAAO,GAAG,KAAKA,OAAL,GAAe,CAACS,UAAU,GAAG72C,MAAM,CAACoQ,SAAV,GAAsBpQ,MAAM,CAACwnB,SAAxC,CAA/B;EACA,UAAM+uB,EAAE,GAAG,KAAKA,EAAL,GAAU,CAAC,CAAD,CAArB;EACA,UAAMD,EAAE,GAAG,KAAKA,EAAL,GAAU,CAAC,CAAD,CAArB;EAEA,QAAIG,IAAI,GAAG,CAAX;EACA,QAAID,IAAI,GAAG,CAAX;EAEA,QAAIS,WAAW,GAAGH,KAAK,CAAC,CAAD,CAAL,CAASX,IAA3B;EACA,QAAIe,GAAG,GAAG,CAAV;EACA,QAAIC,GAAG,GAAG,CAAV;;EACA,SAAK,IAAItkD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGikD,KAAK,CAAClkD,MAA1B,EAAkCC,CAAC,EAAnC,EAAuC;EACnC,UAAIikD,KAAK,CAACjkD,CAAD,CAAL,CAASsjD,IAAT,KAAkBc,WAAtB,EAAmC;EAC/Bb,QAAAA,OAAO,CAACrgD,IAAR,CAAakhD,WAAb;EACAV,QAAAA,EAAE,CAACxgD,IAAH,CAAQohD,GAAR;EACAb,QAAAA,EAAE,CAACvgD,IAAH,CAAQmhD,GAAR;EACAD,QAAAA,WAAW,GAAGH,KAAK,CAACjkD,CAAD,CAAL,CAASsjD,IAAvB;EACH;;EACD,UAAIW,KAAK,CAACjkD,CAAD,CAAL,CAASmkD,IAAb,EAAmB;EACfP,QAAAA,IAAI;EACJS,QAAAA,GAAG;EACN,OAHD,MAGO;EACHV,QAAAA,IAAI;EACJW,QAAAA,GAAG;EACN;EACJ;;EACDf,IAAAA,OAAO,CAACrgD,IAAR,CAAakhD,WAAb;EACAV,IAAAA,EAAE,CAACxgD,IAAH,CAAQohD,GAAR;EACAb,IAAAA,EAAE,CAACvgD,IAAH,CAAQmhD,GAAR;EAEA,UAAM52C,CAAC,GAAG81C,OAAO,CAACxjD,MAAlB;EACA,UAAMuyC,EAAE,GAAG,KAAKA,EAAL,GAAU,IAAI/xC,KAAJ,CAAUkN,CAAV,CAArB;EACA,UAAM+1C,EAAE,GAAG,KAAKA,EAAL,GAAU,IAAIjjD,KAAJ,CAAUkN,CAAV,CAArB;EACA,UAAMo2C,QAAQ,GAAG,KAAKA,QAAL,GAAgB,IAAItjD,KAAJ,CAAUkN,CAAV,CAAjC;EACA,UAAMq2C,QAAQ,GAAG,KAAKA,QAAL,GAAgB,IAAIvjD,KAAJ,CAAUkN,CAAV,CAAjC;;EAEA,SAAK,IAAIzN,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGyN,CAApB,EAAuBzN,CAAC,EAAxB,EAA4B;EACxBsyC,MAAAA,EAAE,CAACtyC,CAAD,CAAF,GAAQ4jD,IAAI,GAAGH,EAAE,CAACzjD,CAAD,CAAjB;EACAwjD,MAAAA,EAAE,CAACxjD,CAAD,CAAF,GAAQ2jD,IAAI,GAAGD,EAAE,CAAC1jD,CAAD,CAAjB;EAEA6jD,MAAAA,QAAQ,CAAC7jD,CAAD,CAAR,GAAcyjD,EAAE,CAACzjD,CAAD,CAAF,GAAQ0jD,EAAE,CAAC1jD,CAAD,CAAxB;EACA8jD,MAAAA,QAAQ,CAAC9jD,CAAD,CAAR,GAAcwjD,EAAE,CAACxjD,CAAD,CAAF,GAAQsyC,EAAE,CAACtyC,CAAD,CAAxB;EACH;;EAED,SAAK4jD,IAAL,GAAYA,IAAZ;EACA,SAAKD,IAAL,GAAYA,IAAZ;EACA,SAAK9rB,QAAL,GAAgB+rB,IAAI,GAAGD,IAAvB;EACH;;;;;;;;;;;;;;;;;;;EAkBDY,EAAAA,UAAU,CAACC,OAAD,EAAU;EAChB,QAAI,OAAOA,OAAP,KAAmB,QAAvB,EAAiC;EAC7B,YAAM,IAAI/0C,KAAJ,CAAU,sBAAV,CAAN;EACH;;EACD,QAAI,CAACg1C,QAAQ,CAACD,OAAD,CAAb,EAAwB;EACpB,YAAM,IAAI/0C,KAAJ,kCAAoC+0C,OAApC,sBAAN;EACH;;EACD,WAAOC,QAAQ,CAACD,OAAD,CAAR,CAAkB,IAAlB,CAAP;EACH;;;;;;EAKDE,EAAAA,OAAO,GAAG;EACN,UAAMj3C,CAAC,GAAG,KAAK81C,OAAL,CAAaxjD,MAAvB;EACA,UAAMsE,CAAC,GAAG,IAAI9D,KAAJ,CAAUkN,CAAV,CAAV;EACA,UAAMmI,CAAC,GAAG,IAAIrV,KAAJ,CAAUkN,CAAV,CAAV;;EACA,SAAK,IAAIzN,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGyN,CAApB,EAAuBzN,CAAC,EAAxB,EAA4B;EACxBqE,MAAAA,CAAC,CAACrE,CAAD,CAAD,GAAO,KAAK0jD,EAAL,CAAQ1jD,CAAR,IAAa,KAAK2jD,IAAzB;EACA/tC,MAAAA,CAAC,CAAC5V,CAAD,CAAD,GAAO,KAAKyjD,EAAL,CAAQzjD,CAAR,IAAa,KAAK4jD,IAAzB;EACH;;EACD,QAAIe,GAAG,GAAG,CAAV;;EACA,SAAK3kD,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGyN,CAAhB,EAAmBzN,CAAC,EAApB,EAAwB;EACpB2kD,MAAAA,GAAG,IAAI,OAAOtgD,CAAC,CAACrE,CAAD,CAAD,GAAOqE,CAAC,CAACrE,CAAC,GAAG,CAAL,CAAf,KAA2B4V,CAAC,CAAC5V,CAAD,CAAD,GAAO4V,CAAC,CAAC5V,CAAC,GAAG,CAAL,CAAnC,CAAP;EACH;;EACD,WAAO2kD,GAAP;EACH;;;;;;EAKDC,EAAAA,OAAO,GAAG;EACN,UAAMn3C,CAAC,GAAG,KAAK81C,OAAL,CAAaxjD,MAAvB;EACA,UAAMsE,CAAC,GAAG,IAAI9D,KAAJ,CAAUkN,CAAV,CAAV;EACA,UAAMmI,CAAC,GAAG,IAAIrV,KAAJ,CAAUkN,CAAV,CAAV;;EACA,SAAK,IAAIzN,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGyN,CAApB,EAAuBzN,CAAC,EAAxB,EAA4B;EACxBqE,MAAAA,CAAC,CAACrE,CAAD,CAAD,GAAO,KAAKsyC,EAAL,CAAQtyC,CAAR,IAAa,KAAK4jD,IAAzB;EACAhuC,MAAAA,CAAC,CAAC5V,CAAD,CAAD,GAAO,KAAK0jD,EAAL,CAAQ1jD,CAAR,IAAa,KAAK2jD,IAAzB;EACH;;EACD,QAAIgB,GAAG,GAAG,CAAV;;EACA,SAAK3kD,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGyN,CAAhB,EAAmBzN,CAAC,EAApB,EAAwB;EACpB2kD,MAAAA,GAAG,IAAI,OAAOtgD,CAAC,CAACrE,CAAD,CAAD,GAAOqE,CAAC,CAACrE,CAAC,GAAG,CAAL,CAAf,KAA2B4V,CAAC,CAAC5V,CAAD,CAAD,GAAO4V,CAAC,CAAC5V,CAAC,GAAG,CAAL,CAAnC,CAAP;EACH;;EACD,WAAO2kD,GAAP;EACH;;EAEDE,EAAAA,eAAe,CAAC1kD,OAAD,EAAU;EACrBA,IAAAA,OAAO,GAAGA,OAAO,IAAI,EAArB;EACA,QAAI2kD,SAAS,GAAG,KAAKvB,OAAL,CAAaxjD,MAA7B;EACA,QAAIglD,MAAM,GAAG5kD,OAAO,CAACgvC,IAAR,IAAgBpqC,IAAI,CAACwG,KAAL,CAAW,KAAKg4C,OAAL,CAAauB,SAAS,GAAG,CAAzB,IAA8B,GAAzC,IAAgD,GAA7E;EACA,QAAIE,OAAO,GAAG7kD,OAAO,CAACivC,IAAR,IAAgBrqC,IAAI,CAACkG,IAAL,CAAU,KAAKs4C,OAAL,CAAa,CAAb,IAAkB,GAA5B,IAAmC,GAAjE;EACA,QAAIl2C,QAAQ,GAAGlN,OAAO,CAACkN,QAAR,IAAoBtI,IAAI,CAACwG,KAAL,CAAY,CAACy5C,OAAO,GAAGD,MAAX,IAAqB,EAArB,GAA0B,QAA3B,GAAuC,CAAlD,IAAuD,QAA1F,CALqB;;EAOrB,QAAIE,OAAO,GAAG,EAAd;EACA,QAAIC,WAAW,GAAG,EAAlB;EACA,QAAIC,WAAW,GAAG,EAAlB;EACA,QAAIC,eAAe,GAAG,EAAtB;EACA,QAAIC,eAAe,GAAG,EAAtB;EAEA,QAAIC,GAAG,GAAG,KAAK7B,EAAL,CAAQqB,SAAS,GAAG,CAApB,CAAV;EAAA,QAAkCS,SAAS,GAAG,CAA9C;EACA,QAAIC,GAAG,GAAG,KAAK9B,EAAL,CAAQoB,SAAS,GAAG,CAApB,CAAV;EAAA,QAAkCW,SAAS,GAAG,CAA9C;;EAEA,SAAK,IAAIzlD,CAAC,GAAG+kD,MAAR,EAAgBzhD,CAAC,GAAIwhD,SAAS,GAAG,CAAtC,EAA0C9kD,CAAC,IAAIglD,OAA/C,EAAwDhlD,CAAC,IAAIqN,QAA7D,EAAuE;EACnE,aAAO,KAAKk2C,OAAL,CAAajgD,CAAb,IAAkBtD,CAAzB,EACIsD,CAAC;;EAEL2hD,MAAAA,OAAO,CAAC/hD,IAAR,CAAalD,CAAb;EAEA,UAAI0lD,MAAM,GAAGJ,GAAG,GAAGC,SAAN,GAAkB,KAAK9B,EAAL,CAAQngD,CAAR,CAA/B;EACA,UAAIqiD,MAAM,GAAGH,GAAG,GAAGC,SAAN,GAAkB,KAAK/B,EAAL,CAAQpgD,CAAR,CAA/B;EAEAiiD,MAAAA,SAAS,IAAIG,MAAb;EACAD,MAAAA,SAAS,IAAIE,MAAb;EAEAT,MAAAA,WAAW,CAAChiD,IAAZ,CAAiByiD,MAAjB;EACAR,MAAAA,WAAW,CAACjiD,IAAZ,CAAiBwiD,MAAjB;EAEAN,MAAAA,eAAe,CAACliD,IAAhB,CAAqB,MAAM,CAACsiD,GAAG,GAAG,KAAK9B,EAAL,CAAQpgD,CAAR,CAAP,IAAqBkiD,GAArB,GAA2B,GAAtD;EACAH,MAAAA,eAAe,CAACniD,IAAhB,CAAqB,MAAM,CAACoiD,GAAG,GAAG,KAAK7B,EAAL,CAAQngD,CAAR,CAAP,IAAqBgiD,GAArB,GAA2B,GAAtD;EACH;;EAED,WAAO;EACHL,MAAAA,OAAO,EAAEA,OADN;EAEHC,MAAAA,WAAW,EAAEA,WAFV;EAGHC,MAAAA,WAAW,EAAEA,WAHV;EAIHC,MAAAA,eAAe,EAAEA,eAJd;EAKHC,MAAAA,eAAe,EAAEA;EALd,KAAP;EAOH;;EA1Ma;;EA6MlBtB,WAAW,CAAC6B,KAAZ,GAAoB;EAChBC,EAAAA,GAAG,EAAE,UADW;EAEhBC,EAAAA,GAAG,EAAE,YAFW;EAGhBC,EAAAA,GAAG,EAAE,qBAHW;EAIhBC,EAAAA,GAAG,EAAE,oBAJW;EAKhBC,EAAAA,GAAG,EAAE,qBALW;EAMhBC,EAAAA,GAAG,EAAE,oBANW;EAOhBC,EAAAA,GAAG,EAAE,2BAPW;EAQhBC,EAAAA,GAAG,EAAE,2BARW;EAShBC,EAAAA,MAAM,EAAE,gCATQ;EAUhBC,EAAAA,MAAM,EAAE,6BAVQ;EAWhBC,EAAAA,IAAI,EAAE,YAXU;EAYhBC,EAAAA,GAAG,EAAE,8BAZW;EAahBC,EAAAA,GAAG,EAAE,8BAbW;EAchBnoC,EAAAA,SAAS,EAAE;EAdK,CAApB;EAiBA,SAAc,GAAGylC,WAAjB;;EChOA,IAAIn8B,gBAAc,GAAG;EACnBpjB,EAAAA,IAAI,EAAE,CADa;EAEnBxB,EAAAA,KAAK,EAAE;EAFY,CAArB;;;;;;;;EAWA,SAAS0jD,SAAT,CAAmBl5C,IAAnB,EAAyBrN,OAAzB,EAAkC;EAChC,MAAImyB,GAAG,GAAG9kB,IAAI,CAACzN,MAAf;;EACA,MAAI,OAAOI,OAAO,CAACqE,IAAf,KAAwB,QAA5B,EAAsC;EACpCrE,IAAAA,OAAO,CAACqE,IAAR,GAAe,CAACrE,OAAO,CAACqE,IAAT,EAAerE,OAAO,CAACqE,IAAvB,CAAf;EACD;;EAED,MAAImiD,IAAI,GAAGr0B,GAAG,GAAGnyB,OAAO,CAACqE,IAAR,CAAa,CAAb,CAAN,GAAwBrE,OAAO,CAACqE,IAAR,CAAa,CAAb,CAAnC;EAEA,MAAIlE,MAAJ;;EACA,MAAIH,OAAO,CAACG,MAAZ,EAAoB;EAClB,QAAIH,OAAO,CAACG,MAAR,CAAeP,MAAf,KAA0B4mD,IAA9B,EAAoC;EAClC,YAAM,IAAIjmD,UAAJ,CAAe,mBAAf,CAAN;EACD;;EACDJ,IAAAA,MAAM,GAAGH,OAAO,CAACG,MAAjB;EACD,GALD,MAKO;EACLA,IAAAA,MAAM,GAAG,IAAIC,KAAJ,CAAUomD,IAAV,CAAT;EACD;;EAED,MAAI3mD,CAAJ;;EACA,MAAIG,OAAO,CAAC6C,KAAR,KAAkB,UAAtB,EAAkC;EAChC,SAAKhD,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAG2mD,IAAhB,EAAsB3mD,CAAC,EAAvB,EAA2B;EACzB,UAAIA,CAAC,GAAGG,OAAO,CAACqE,IAAR,CAAa,CAAb,CAAR,EAAyB;EACvBlE,QAAAA,MAAM,CAACN,CAAD,CAAN,GAAYwN,IAAI,CAAC,CAAC8kB,GAAG,GAAInyB,OAAO,CAACqE,IAAR,CAAa,CAAb,IAAkB8tB,GAAzB,GAAgCtyB,CAAjC,IAAsCsyB,GAAvC,CAAhB;EACD,OAFD,MAEO,IAAItyB,CAAC,GAAGG,OAAO,CAACqE,IAAR,CAAa,CAAb,IAAkB8tB,GAA1B,EAA+B;EACpChyB,QAAAA,MAAM,CAACN,CAAD,CAAN,GAAYwN,IAAI,CAACxN,CAAC,GAAGG,OAAO,CAACqE,IAAR,CAAa,CAAb,CAAL,CAAhB;EACD,OAFM,MAEA;EACLlE,QAAAA,MAAM,CAACN,CAAD,CAAN,GAAYwN,IAAI,CAAC,CAACxN,CAAC,GAAGG,OAAO,CAACqE,IAAR,CAAa,CAAb,CAAL,IAAwB8tB,GAAzB,CAAhB;EACD;EACF;EACF,GAVD,MAUO,IAAInyB,OAAO,CAAC6C,KAAR,KAAkB,WAAtB,EAAmC;EACxC,SAAKhD,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAG2mD,IAAhB,EAAsB3mD,CAAC,EAAvB,EAA2B;EACzB,UAAIA,CAAC,GAAGG,OAAO,CAACqE,IAAR,CAAa,CAAb,CAAR,EAAyBlE,MAAM,CAACN,CAAD,CAAN,GAAYwN,IAAI,CAAC,CAAD,CAAhB,CAAzB,KACK,IAAIxN,CAAC,GAAGG,OAAO,CAACqE,IAAR,CAAa,CAAb,IAAkB8tB,GAA1B,EAA+BhyB,MAAM,CAACN,CAAD,CAAN,GAAYwN,IAAI,CAACxN,CAAC,GAAGG,OAAO,CAACqE,IAAR,CAAa,CAAb,CAAL,CAAhB,CAA/B,KACAlE,MAAM,CAACN,CAAD,CAAN,GAAYwN,IAAI,CAAC8kB,GAAG,GAAG,CAAP,CAAhB;EACN;EACF,GANM,MAMA,IAAInyB,OAAO,CAAC6C,KAAR,KAAkB,WAAtB,EAAmC;EACxC,QAAI7C,OAAO,CAACqE,IAAR,CAAa,CAAb,IAAkB8tB,GAAlB,IAAyBnyB,OAAO,CAACqE,IAAR,CAAa,CAAb,IAAkB8tB,GAA/C,EAAoD;EAClD,YAAM,IAAI5xB,UAAJ,CACJ,0DADI,CAAN;EAGD;;EACD,SAAKV,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAG2mD,IAAhB,EAAsB3mD,CAAC,EAAvB,EAA2B;EACzB,UAAIA,CAAC,GAAGG,OAAO,CAACqE,IAAR,CAAa,CAAb,CAAR,EAAyBlE,MAAM,CAACN,CAAD,CAAN,GAAYwN,IAAI,CAACrN,OAAO,CAACqE,IAAR,CAAa,CAAb,IAAkB,CAAlB,GAAsBxE,CAAvB,CAAhB,CAAzB,KACK,IAAIA,CAAC,GAAGG,OAAO,CAACqE,IAAR,CAAa,CAAb,IAAkB8tB,GAA1B,EAA+BhyB,MAAM,CAACN,CAAD,CAAN,GAAYwN,IAAI,CAACxN,CAAC,GAAGG,OAAO,CAACqE,IAAR,CAAa,CAAb,CAAL,CAAhB,CAA/B,KACAlE,MAAM,CAACN,CAAD,CAAN,GAAYwN,IAAI,CAAC,IAAI8kB,GAAJ,GAAUnyB,OAAO,CAACqE,IAAR,CAAa,CAAb,CAAV,GAA4BxE,CAA5B,GAAgC,CAAjC,CAAhB;EACN;EACF,GAXM,MAWA;EACL,SAAKA,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAG2mD,IAAhB,EAAsB3mD,CAAC,EAAvB,EAA2B;EACzB,UAAIA,CAAC,GAAGG,OAAO,CAACqE,IAAR,CAAa,CAAb,CAAR,EAAyBlE,MAAM,CAACN,CAAD,CAAN,GAAYG,OAAO,CAAC6C,KAApB,CAAzB,KACK,IAAIhD,CAAC,GAAGG,OAAO,CAACqE,IAAR,CAAa,CAAb,IAAkB8tB,GAA1B,EAA+BhyB,MAAM,CAACN,CAAD,CAAN,GAAYwN,IAAI,CAACxN,CAAC,GAAGG,OAAO,CAACqE,IAAR,CAAa,CAAb,CAAL,CAAhB,CAA/B,KACAlE,MAAM,CAACN,CAAD,CAAN,GAAYG,OAAO,CAAC6C,KAApB;EACN;EACF;;EAED,SAAO1C,MAAP;EACD;;;;;;;;;EAQD,SAASsmD,UAAT,CAAoBp5C,IAApB,EAA0BrN,OAA1B,EAAmC;;;EAGjC,MAAIA,OAAO,CAACqE,IAAR,CAAa,CAAb,MAAoBnE,SAAxB,EAAmC;EACjCF,IAAAA,OAAO,CAACqE,IAAR,GAAe,CAACrE,OAAO,CAACqE,IAAT,EAAerE,OAAO,CAACqE,IAAvB,EAA6BrE,OAAO,CAACqE,IAArC,EAA2CrE,OAAO,CAACqE,IAAnD,CAAf;EACD;;EACD,QAAM,IAAIiL,KAAJ,CAAU,iCAAV,CAAN;EACD;;;;;;;;EAOD,SAASo3C,QAAT,CAAkBr5C,IAAlB,EAAwBrN,OAAxB,EAAiC;EAC/BA,EAAAA,OAAO,GAAGd,MAAM,CAAC4oB,MAAP,CAAc,EAAd,EAAkBL,gBAAlB,EAAkCznB,OAAlC,CAAV;;EACA,MAAII,KAAK,CAACV,OAAN,CAAc2N,IAAd,CAAJ,EAAyB;EACvB,QAAIjN,KAAK,CAACV,OAAN,CAAc2N,IAAI,CAAC,CAAD,CAAlB,CAAJ,EAA4B,OAAOo5C,UAAU,CAACp5C,IAAD,EAAOrN,OAAP,CAAjB,CAA5B,KACK,OAAOumD,SAAS,CAACl5C,IAAD,EAAOrN,OAAP,CAAhB;EACN,GAHD,MAGO;EACL,UAAM,IAAIL,SAAJ,CAAc,yBAAd,CAAN;EACD;EACF;;EAED,SAAc,GAAG+mD,QAAjB;;EClGA,MAAM;EAAEx/C,UAAAA,QAAF;EAAU4S,uBAAAA,qBAAV;EAA+B8E,WAAAA;EAA/B,IAA2CwR,MAAjD;EAGA,MAAM3I,gBAAc,GAAG;EACrBk/B,EAAAA,UAAU,EAAE,CADS;EAErBC,EAAAA,UAAU,EAAE,CAFS;EAGrBhR,EAAAA,UAAU,EAAE,CAHS;EAIrBiR,EAAAA,GAAG,EAAE,MAJgB;EAKrBC,EAAAA,QAAQ,EAAE;EALW,CAAvB;;;;;;;;;EAeA,SAASC,aAAT,CAAuB15C,IAAvB,EAA6BuB,CAA7B,EAAgC5O,OAAhC,EAAyC;EACvCA,EAAAA,OAAO,GAAGd,MAAM,CAAC4oB,MAAP,CAAc,EAAd,EAAkBL,gBAAlB,EAAkCznB,OAAlC,CAAV;;EACA,MACEA,OAAO,CAAC2mD,UAAR,GAAqB,CAArB,KAA2B,CAA3B,IACA3mD,OAAO,CAAC2mD,UAAR,GAAqB,CADrB,IAEA,CAAC35C,MAAM,CAACC,SAAP,CAAiBjN,OAAO,CAAC2mD,UAAzB,CAHH,EAIE;EACA,UAAM,IAAIpmD,UAAJ,CACJ,mEADI,CAAN;EAGD;;EACD,MAAIP,OAAO,CAAC4mD,UAAR,GAAqB,CAArB,IAA0B,CAAC55C,MAAM,CAACC,SAAP,CAAiBjN,OAAO,CAAC4mD,UAAzB,CAA/B,EAAqE;EACnE,UAAM,IAAIrmD,UAAJ,CAAe,yCAAf,CAAN;EACD;;EACD,MAAIP,OAAO,CAAC41C,UAAR,GAAqB,CAArB,IAA0B,CAAC5oC,MAAM,CAACC,SAAP,CAAiBjN,OAAO,CAAC41C,UAAzB,CAA/B,EAAqE;EACnE,UAAM,IAAIr1C,UAAJ,CAAe,yCAAf,CAAN;EACD;;EAED,MAAIqzB,CAAJ,EAAOniB,IAAP;EACA,MAAI6nB,IAAI,GAAG10B,IAAI,CAACwG,KAAL,CAAWpL,OAAO,CAAC2mD,UAAR,GAAqB,CAAhC,CAAX;;EAEA,MAAI3mD,OAAO,CAAC6mD,GAAR,KAAgB,KAApB,EAA2B;EACzBx5C,IAAAA,IAAI,GAAGq5C,KAAQ,CAACr5C,IAAD,EAAO;EAAEhJ,MAAAA,IAAI,EAAEi1B,IAAR;EAAcz2B,MAAAA,KAAK,EAAE7C,OAAO,CAAC8mD;EAA7B,KAAP,CAAf;EACD;;EAED,MAAIp2B,GAAG,GAAG,IAAItwB,KAAJ,CAAUiN,IAAI,CAACzN,MAAL,GAAc,IAAI05B,IAA5B,CAAV;;EAEA,MACEt5B,OAAO,CAAC2mD,UAAR,KAAuB,CAAvB,IACA3mD,OAAO,CAAC41C,UAAR,KAAuB,CADvB,KAEC51C,OAAO,CAAC4mD,UAAR,KAAuB,CAAvB,IAA4B5mD,OAAO,CAAC4mD,UAAR,KAAuB,CAFpD,CADF,EAIE;EACA,QAAI5mD,OAAO,CAAC4mD,UAAR,KAAuB,CAA3B,EAA8B;EAC5BhzB,MAAAA,CAAC,GAAG,CAAC,CAAC,CAAF,EAAK,CAAC,CAAN,EAAS,CAAT,EAAY,CAAZ,EAAe,CAAf,CAAJ;EACAniB,MAAAA,IAAI,GAAG,EAAP;EACD,KAHD,MAGO;EACLmiB,MAAAA,CAAC,GAAG,CAAC,CAAD,EAAI,CAAC,CAAL,EAAQ,CAAC,CAAT,EAAY,CAAC,CAAb,EAAgB,CAAhB,CAAJ;EACAniB,MAAAA,IAAI,GAAG,CAAP;EACD;EACF,GAZD,MAYO;EACL,QAAIu1C,CAAC,GAAG9/C,QAAM,CAACyF,IAAP,CAAY3M,OAAO,CAAC2mD,UAApB,EAAgC3mD,OAAO,CAAC41C,UAAR,GAAqB,CAArD,CAAR;EACA,QAAIqR,IAAI,GAAG,EAAEjnD,OAAO,CAAC2mD,UAAR,GAAqB,CAAvB,IAA4B,CAAvC;;EACA,SAAK,IAAI9mD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGmnD,CAAC,CAAC9lD,IAAtB,EAA4BrB,CAAC,EAA7B,EAAiC;EAC/B,WAAK,IAAIsD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG6jD,CAAC,CAAC5lD,OAAtB,EAA+B+B,CAAC,EAAhC,EAAoC;EAClC,YAAI8jD,IAAI,GAAG,CAAP,KAAa,CAAb,IAAkB9jD,CAAC,KAAK,CAA5B,EAA+B6jD,CAAC,CAACziD,GAAF,CAAM1E,CAAN,EAASsD,CAAT,EAAYyB,IAAI,CAACC,GAAL,CAASoiD,IAAI,GAAGpnD,CAAhB,EAAmBsD,CAAnB,CAAZ;EAChC;EACF;;EACD,QAAI+jD,UAAU,GAAG,IAAIptC,qBAAJ,CAAwBktC,CAAxB,CAAjB;EACA,QAAIG,IAAI,GAAGvoC,SAAO,CAACsoC,UAAU,CAACn1C,IAAX,CAAgBi1C,CAAhB,CAAD,CAAlB;EACApzB,IAAAA,CAAC,GAAGuzB,IAAI,CAACp1C,IAAL,CAAUm1C,UAAV,CAAJ;EACAtzB,IAAAA,CAAC,GAAGA,CAAC,CAACnkB,MAAF,CAASzP,OAAO,CAAC4mD,UAAjB,CAAJ;EACAn1C,IAAAA,IAAI,GAAG,CAAP;EACD;;EACD,MAAI21C,GAAG,GAAG31C,IAAI,GAAG7M,IAAI,CAACC,GAAL,CAAS+J,CAAT,EAAY5O,OAAO,CAAC4mD,UAApB,CAAjB;;EACA,OAAK,IAAIn4C,CAAC,GAAG6qB,IAAb,EAAmB7qB,CAAC,GAAGpB,IAAI,CAACzN,MAAL,GAAc05B,IAArC,EAA2C7qB,CAAC,EAA5C,EAAgD;EAC9C,QAAIgR,CAAC,GAAG,CAAR;;EACA,SAAK,IAAInS,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGsmB,CAAC,CAACh0B,MAAtB,EAA8B0N,CAAC,EAA/B,EAAmCmS,CAAC,IAAKmU,CAAC,CAACtmB,CAAD,CAAD,GAAOD,IAAI,CAACC,CAAC,GAAGmB,CAAJ,GAAQ6qB,IAAT,CAAZ,GAA8B8tB,GAAnC;;EACnC12B,IAAAA,GAAG,CAACjiB,CAAC,GAAG6qB,IAAL,CAAH,GAAgB7Z,CAAhB;EACD;;EAED,MAAIzf,OAAO,CAAC6mD,GAAR,KAAgB,MAApB,EAA4B;EAC1Bn2B,IAAAA,GAAG,GAAGg2B,KAAQ,CAACh2B,GAAD,EAAM;EAAErsB,MAAAA,IAAI,EAAEi1B,IAAR;EAAcz2B,MAAAA,KAAK,EAAE7C,OAAO,CAAC8mD;EAA7B,KAAN,CAAd;EACD;;EAED,SAAOp2B,GAAP;EACD;;EAED,SAAc,GAAGq2B,aAAjB;;ECvFA;EAEA,IAAIr2B,GAAG,GAAG,IAAItwB,KAAJ,CAAU,GAAV,CAAV;;EACA,KAAK,IAAIP,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,GAApB,EAAyBA,CAAC,EAA1B,EAA8B;EAC1B,MAAIuG,GAAG,GAAGvG,CAAV;EACA,MAAIwC,CAAC,GAAG,CAAR;;EACA,SAAO+D,GAAP,EAAY;EACRA,IAAAA,GAAG,GAAGA,GAAG,GAAIA,GAAG,GAAG,CAAnB;EACA/D,IAAAA,CAAC;EACJ;;EACDquB,EAAAA,GAAG,CAAC7wB,CAAD,CAAH,GAASwC,CAAT;EACH;;EAED,WAAc,GAAGquB,GAAjB;;;;;;;;;ECJA,SAAS5V,KAAT,CAAeoJ,GAAf,EAAoB;EAChB,MAAI7hB,CAAC,GAAG,CAAR;;EACA,OAAK,IAAIxC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGqkB,GAAG,CAACtkB,MAAxB,EAAgCC,CAAC,EAAjC,EAAqC;EACjCwC,IAAAA,CAAC,IAAIglD,OAAS,CAACnjC,GAAG,CAACrkB,CAAD,CAAH,GAAS,IAAV,CAAT,GAA2BwnD,OAAS,CAAEnjC,GAAG,CAACrkB,CAAD,CAAH,IAAU,CAAX,GAAgB,IAAjB,CAApC,GAA6DwnD,OAAS,CAAEnjC,GAAG,CAACrkB,CAAD,CAAH,IAAU,EAAX,GAAiB,IAAlB,CAAtE,GAAgGwnD,OAAS,CAAEnjC,GAAG,CAACrkB,CAAD,CAAH,IAAU,EAAX,GAAiB,IAAlB,CAA9G;EACH;;EACD,SAAOwC,CAAP;EACH;;;;;;;;;EAQD,SAAS2G,GAAT,CAAas+C,IAAb,EAAmBC,IAAnB,EAAyB;EACrB,MAAI72B,GAAG,GAAG,IAAItwB,KAAJ,CAAUknD,IAAI,CAAC1nD,MAAf,CAAV;;EACA,OAAK,IAAIC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGynD,IAAI,CAAC1nD,MAAzB,EAAiCC,CAAC,EAAlC,EACI6wB,GAAG,CAAC7wB,CAAD,CAAH,GAASynD,IAAI,CAACznD,CAAD,CAAJ,GAAU0nD,IAAI,CAAC1nD,CAAD,CAAvB;;EACJ,SAAO6wB,GAAP;EACH;;;;;;;;;EAQD,SAASvnB,EAAT,CAAYm+C,IAAZ,EAAkBC,IAAlB,EAAwB;EACpB,MAAI72B,GAAG,GAAG,IAAItwB,KAAJ,CAAUknD,IAAI,CAAC1nD,MAAf,CAAV;;EACA,OAAK,IAAIC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGynD,IAAI,CAAC1nD,MAAzB,EAAiCC,CAAC,EAAlC,EACI6wB,GAAG,CAAC7wB,CAAD,CAAH,GAASynD,IAAI,CAACznD,CAAD,CAAJ,GAAU0nD,IAAI,CAAC1nD,CAAD,CAAvB;;EACJ,SAAO6wB,GAAP;EACH;;;;;;;;;EAQD,SAASpnB,GAAT,CAAag+C,IAAb,EAAmBC,IAAnB,EAAyB;EACrB,MAAI72B,GAAG,GAAG,IAAItwB,KAAJ,CAAUknD,IAAI,CAAC1nD,MAAf,CAAV;;EACA,OAAK,IAAIC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGynD,IAAI,CAAC1nD,MAAzB,EAAiCC,CAAC,EAAlC,EACI6wB,GAAG,CAAC7wB,CAAD,CAAH,GAASynD,IAAI,CAACznD,CAAD,CAAJ,GAAU0nD,IAAI,CAAC1nD,CAAD,CAAvB;;EACJ,SAAO6wB,GAAP;EACH;;;;;;;;EAOD,SAASrmB,GAAT,CAAa6Z,GAAb,EAAkB;EACd,MAAIwM,GAAG,GAAG,IAAItwB,KAAJ,CAAU8jB,GAAG,CAACtkB,MAAd,CAAV;;EACA,OAAK,IAAIC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG6wB,GAAG,CAAC9wB,MAAxB,EAAgCC,CAAC,EAAjC,EACI6wB,GAAG,CAAC7wB,CAAD,CAAH,GAAS,CAACqkB,GAAG,CAACrkB,CAAD,CAAb;;EACJ,SAAO6wB,GAAP;EACH;;;;;;;;;EAQD,SAAS82B,MAAT,CAAgBtjC,GAAhB,EAAqBhV,CAArB,EAAwB;EACpB,MAAIlO,KAAK,GAAGkO,CAAC,IAAI,CAAjB,CADoB;;EAEpB,MAAIu4C,IAAI,GAAG,KAAM,KAAKv4C,CAAC,GAAG,EAA1B;EACA,SAAOgN,OAAO,CAACgI,GAAG,CAACljB,KAAD,CAAH,GAAaymD,IAAd,CAAd;EACH;;;;;;;;;;EASD,SAASC,MAAT,CAAgBxjC,GAAhB,EAAqBhV,CAArB,EAAwB+U,GAAxB,EAA6B;EACzB,MAAIjjB,KAAK,GAAGkO,CAAC,IAAI,CAAjB,CADyB;;EAEzB,MAAIu4C,IAAI,GAAG,KAAM,KAAKv4C,CAAC,GAAG,EAA1B;EACA,MAAI+U,GAAJ,EACIC,GAAG,CAACljB,KAAD,CAAH,GAAaymD,IAAI,GAAGvjC,GAAG,CAACljB,KAAD,CAAvB,CADJ,KAGIkjB,GAAG,CAACljB,KAAD,CAAH,GAAa,CAACymD,IAAD,GAAQvjC,GAAG,CAACljB,KAAD,CAAxB;EACJ,SAAOkjB,GAAP;EACH;;;;;;;;EAOD,SAASyjC,cAAT,CAAwBzjC,GAAxB,EAA6B;EACzB,MAAIkuB,GAAG,GAAG,EAAV;;EACA,OAAK,IAAIvyC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGqkB,GAAG,CAACtkB,MAAxB,EAAgCC,CAAC,EAAjC,EAAqC;EACjC,QAAIizB,GAAG,GAAG,CAAC5O,GAAG,CAACrkB,CAAD,CAAH,KAAW,CAAZ,EAAeZ,QAAf,CAAwB,CAAxB,CAAV;EACAmzC,IAAAA,GAAG,IAAI,mCAAmCwV,MAAnC,CAA0C90B,GAAG,CAAClzB,MAA9C,IAAwDkzB,GAA/D;EACH;;EACD,SAAOsf,GAAP;EACH;;;;;;;;EAOD,SAASyV,iBAAT,CAA2BzV,GAA3B,EAAgC;EAC5B,MAAIjgB,GAAG,GAAGigB,GAAG,CAACxyC,MAAJ,GAAa,EAAvB;EACA,MAAI8wB,GAAG,GAAG,IAAItwB,KAAJ,CAAU+xB,GAAV,CAAV;;EACA,OAAK,IAAItyB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGsyB,GAApB,EAAyBtyB,CAAC,EAA1B,EAA8B;EAC1B6wB,IAAAA,GAAG,CAAC7wB,CAAD,CAAH,GAAS0W,QAAQ,CAAC67B,GAAG,CAACwV,MAAJ,CAAW/nD,CAAC,GAAC,EAAb,EAAiB,EAAjB,CAAD,EAAuB,CAAvB,CAAR,GAAoC,CAA7C;EACH;;EACD,SAAO6wB,GAAP;EACH;;;;;;;;EAOD,SAASo3B,WAAT,CAAqB5jC,GAArB,EAA0B;EACtB,MAAIkuB,GAAG,GAAG,EAAV;;EACA,OAAK,IAAIvyC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGqkB,GAAG,CAACtkB,MAAxB,EAAgCC,CAAC,EAAjC,EAAqC;EACjC,QAAIizB,GAAG,GAAG,CAAC5O,GAAG,CAACrkB,CAAD,CAAH,KAAW,CAAZ,EAAeZ,QAAf,CAAwB,EAAxB,CAAV;EACAmzC,IAAAA,GAAG,IAAI,WAAWwV,MAAX,CAAkB90B,GAAG,CAAClzB,MAAtB,IAAgCkzB,GAAvC;EACH;;EACD,SAAOsf,GAAP;EACH;;;;;;;;EAOD,SAAS2V,cAAT,CAAwB3V,GAAxB,EAA6B;EACzB,MAAIjgB,GAAG,GAAGigB,GAAG,CAACxyC,MAAJ,GAAa,CAAvB;EACA,MAAI8wB,GAAG,GAAG,IAAItwB,KAAJ,CAAU+xB,GAAV,CAAV;;EACA,OAAK,IAAItyB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGsyB,GAApB,EAAyBtyB,CAAC,EAA1B,EAA8B;EAC1B6wB,IAAAA,GAAG,CAAC7wB,CAAD,CAAH,GAAS0W,QAAQ,CAAC67B,GAAG,CAACwV,MAAJ,CAAW/nD,CAAC,GAAC,CAAb,EAAgB,CAAhB,CAAD,EAAqB,EAArB,CAAR,GAAmC,CAA5C;EACH;;EACD,SAAO6wB,GAAP;EACH;;;;;;;;EAOD,SAASs3B,OAAT,CAAiB9jC,GAAjB,EAAsB;EAClB,MAAI+jC,MAAM,GAAGN,cAAc,CAACzjC,GAAD,CAA3B;EACA,MAAIkuB,GAAG,GAAG,EAAV;;EACA,OAAK,IAAIvyC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGqkB,GAAG,CAACtkB,MAAxB,EAAgCC,CAAC,EAAjC,EAAqC;EACjCuyC,IAAAA,GAAG,IAAI,OAAOwV,MAAP,CAAc,CAAC/nD,CAAC,GAAG,EAAL,EAASZ,QAAT,CAAkB,EAAlB,EAAsBW,MAApC,IAA8C,CAACC,CAAC,GAAG,EAAL,EAASZ,QAAT,CAAkB,EAAlB,CAA9C,GAAsE,GAA7E;;EACA,SAAK,IAAIkE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,EAApB,EAAwBA,CAAC,IAAI,CAA7B,EAAgC;EAC5BivC,MAAAA,GAAG,IAAI,MAAM6V,MAAM,CAACL,MAAP,CAAc/nD,CAAC,GAAG,EAAJ,GAASsD,CAAvB,EAA0B,CAA1B,CAAb;EACH;;EACD,QAAItD,CAAC,GAAGqkB,GAAG,CAACtkB,MAAJ,GAAa,CAArB,EAAwBwyC,GAAG,IAAI,IAAP;EAC3B;;EACD,SAAOA,GAAP;EACH;;EAED,SAAc,GAAG;EACbt3B,EAAAA,KAAK,EAAEA,KADM;EAEb9R,EAAAA,GAAG,EAAEA,GAFQ;EAGbG,EAAAA,EAAE,EAAEA,EAHS;EAIbG,EAAAA,GAAG,EAAEA,GAJQ;EAKbe,EAAAA,GAAG,EAAEA,GALQ;EAMbm9C,EAAAA,MAAM,EAAEA,MANK;EAObE,EAAAA,MAAM,EAAEA,MAPK;EAQbC,EAAAA,cAAc,EAAEA,cARH;EASbE,EAAAA,iBAAiB,EAAEA,iBATN;EAUbC,EAAAA,WAAW,EAAEA,WAVA;EAWbC,EAAAA,cAAc,EAAEA,cAXH;EAYbC,EAAAA,OAAO,EAAEA;EAZI,CAAjB;;ECzKA;;;;;;EAMA,SAASz9B,MAAT,CAAc9qB,KAAd,EAAqB;EACnB,MAAI,CAACC,GAAO,CAACD,KAAD,CAAZ,EAAqB;EACnB,UAAM,IAAIE,SAAJ,CAAc,wBAAd,CAAN;EACD;;EAED,MAAIF,KAAK,CAACG,MAAN,KAAiB,CAArB,EAAwB;EACtB,UAAM,IAAID,SAAJ,CAAc,yBAAd,CAAN;EACD;;EAED,MAAIiB,QAAQ,GAAG,CAAf;EACA,MAAIsnD,QAAQ,GAAG,CAAf;EACA,MAAIptC,KAAK,GAAG,CAAZ;EACA,MAAI8I,MAAM,GAAG,EAAb;;EAEA,OAAK,IAAI/jB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGJ,KAAK,CAACG,MAA1B,EAAkC,EAAEC,CAApC,EAAuC;EACrC,QAAIs9B,OAAO,GAAG19B,KAAK,CAACI,CAAD,CAAnB;EACAib,IAAAA,KAAK,GAAG8I,MAAM,CAACuZ,OAAD,CAAd;;EAEA,QAAIriB,KAAJ,EAAW;EACT8I,MAAAA,MAAM,CAACuZ,OAAD,CAAN;EACAriB,MAAAA,KAAK;EACN,KAHD,MAGO;EACL8I,MAAAA,MAAM,CAACuZ,OAAD,CAAN,GAAkBriB,KAAK,GAAG,CAA1B;EACD;;EAED,QAAIA,KAAK,GAAGotC,QAAZ,EAAsB;EACpBA,MAAAA,QAAQ,GAAGptC,KAAX;EACAla,MAAAA,QAAQ,GAAGnB,KAAK,CAACI,CAAD,CAAhB;EACD;EACF;;EAED,SAAOe,QAAP;EACD;;ECxCD;;;;;;;EAOA,SAAS6Q,MAAT,CAAchS,KAAd,EAAqB;EACnB,MAAIO,OAAO,GAAGC,SAAS,CAACL,MAAV,GAAmB,CAAnB,IAAwBK,SAAS,CAAC,CAAD,CAAT,KAAiBC,SAAzC,GAAqDD,SAAS,CAAC,CAAD,CAA9D,GAAoE,EAAlF;EACA,MAAIkoD,kBAAkB,GAAGnoD,OAAO,CAACooD,SAAjC;EAAA,MACIA,SAAS,GAAGD,kBAAkB,KAAK,KAAK,CAA5B,GAAgC,UAAhC,GAA6CA,kBAD7D;;EAGA,MAAI,CAAC/nD,KAAK,CAACV,OAAN,CAAcD,KAAd,CAAL,EAA2B;EACzB,UAAM,IAAI6P,KAAJ,CAAU,wBAAV,CAAN;EACD;;EAED,MAAI7P,KAAK,CAACG,MAAN,KAAiB,CAArB,EAAwB;EACtB,UAAM,IAAI0P,KAAJ,CAAU,yBAAV,CAAN;EACD;;EAED,UAAQ84C,SAAS,CAAC3R,WAAV,EAAR;EACE,SAAK,UAAL;EACE,UAAIvzC,GAAG,GAAGmlD,WAAW,CAAC5oD,KAAD,CAArB;EACA,UAAIyD,GAAG,KAAK,CAAZ,EAAe,OAAOzD,KAAK,CAACsrB,KAAN,CAAY,CAAZ,CAAP;EACf,aAAOtrB,KAAK,CAACuqB,GAAN,CAAU,UAAUmT,OAAV,EAAmB;EAClC,eAAOA,OAAO,GAAGj6B,GAAjB;EACD,OAFM,CAAP;;EAIF;EACE,YAAM,IAAIoM,KAAJ,CAAU,4BAA4B4e,MAA5B,CAAmCk6B,SAAnC,CAAV,CAAN;EATJ;EAWD;;EAED,SAASC,WAAT,CAAqB5oD,KAArB,EAA4B;EAC1B,MAAIyD,GAAG,GAAG,CAAV;;EAEA,OAAK,IAAIrD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGJ,KAAK,CAACG,MAA1B,EAAkCC,CAAC,EAAnC,EAAuC;EACrCqD,IAAAA,GAAG,IAAI0B,IAAI,CAAC0F,GAAL,CAAS7K,KAAK,CAACI,CAAD,CAAd,CAAP;EACD;;EAED,SAAOqD,GAAP;EACD;;ECvCD,SAASolD,OAAT,CAAiBx1B,GAAjB,EAAsB;EACpB,MAAI,OAAOza,MAAP,KAAkB,UAAlB,IAAgC,OAAOA,MAAM,CAACkwC,QAAd,KAA2B,QAA/D,EAAyE;EACvED,IAAAA,OAAO,GAAG,iBAAUx1B,GAAV,EAAe;EACvB,aAAO,OAAOA,GAAd;EACD,KAFD;EAGD,GAJD,MAIO;EACLw1B,IAAAA,OAAO,GAAG,iBAAUx1B,GAAV,EAAe;EACvB,aAAOA,GAAG,IAAI,OAAOza,MAAP,KAAkB,UAAzB,IAAuCya,GAAG,CAACrtB,WAAJ,KAAoB4S,MAA3D,IAAqEya,GAAG,KAAKza,MAAM,CAAClZ,SAApF,GAAgG,QAAhG,GAA2G,OAAO2zB,GAAzH;EACD,KAFD;EAGD;;EAED,SAAOw1B,OAAO,CAACx1B,GAAD,CAAd;EACD;EAED;;;;;;;;;;;;EAWA,SAAS01B,cAAT,GAA0B;EACxB,MAAI/oD,KAAK,GAAGQ,SAAS,CAACL,MAAV,GAAmB,CAAnB,IAAwBK,SAAS,CAAC,CAAD,CAAT,KAAiBC,SAAzC,GAAqDD,SAAS,CAAC,CAAD,CAA9D,GAAoE,EAAhF;EACA,MAAID,OAAO,GAAGC,SAAS,CAACL,MAAV,GAAmB,CAAnB,IAAwBK,SAAS,CAAC,CAAD,CAAT,KAAiBC,SAAzC,GAAqDD,SAAS,CAAC,CAAD,CAA9D,GAAoE,EAAlF;;EAEA,MAAIqoD,OAAO,CAAC7oD,KAAD,CAAP,KAAmB,QAAnB,IAA+B,CAACC,GAAO,CAACD,KAAD,CAA3C,EAAoD;EAClDO,IAAAA,OAAO,GAAGP,KAAV;EACAA,IAAAA,KAAK,GAAG,EAAR;EACD;;EAED,MAAI,CAACC,GAAO,CAACD,KAAD,CAAZ,EAAqB;EACnB,UAAM,IAAIE,SAAJ,CAAc,wBAAd,CAAN;EACD;;EAED,MAAI8oD,QAAQ,GAAGzoD,OAAf;EAAA,MACI0oD,aAAa,GAAGD,QAAQ,CAACtmD,IAD7B;EAAA,MAEIA,IAAI,GAAGumD,aAAa,KAAK,KAAK,CAAvB,GAA2B,CAA3B,GAA+BA,aAF1C;EAAA,MAGIC,WAAW,GAAGF,QAAQ,CAACxG,EAH3B;EAAA,MAIIA,EAAE,GAAG0G,WAAW,KAAK,KAAK,CAArB,GAAyB,EAAzB,GAA8BA,WAJvC;EAAA,MAKIC,aAAa,GAAGH,QAAQ,CAACpkD,IAL7B;EAAA,MAMIA,IAAI,GAAGukD,aAAa,KAAK,KAAK,CAAvB,GAA2BnpD,KAAK,CAACG,MAAjC,GAA0CgpD,aANrD;EAAA,MAOItvB,IAAI,GAAGmvB,QAAQ,CAACnvB,IAPpB;;EASA,MAAIj1B,IAAI,IAAIi1B,IAAZ,EAAkB;EAChB,UAAM,IAAIhqB,KAAJ,CAAU,mCAAV,CAAN;EACD;;EAED,MAAI,CAACjL,IAAL,EAAW;EACT,QAAIi1B,IAAJ,EAAU;EACRj1B,MAAAA,IAAI,GAAGO,IAAI,CAACwG,KAAL,CAAW,CAAC62C,EAAE,GAAG9/C,IAAN,IAAcm3B,IAAzB,IAAiC,CAAxC;EACD,KAFD,MAEO;EACLj1B,MAAAA,IAAI,GAAG49C,EAAE,GAAG9/C,IAAL,GAAY,CAAnB;EACD;EACF;;EAED,MAAI,CAACm3B,IAAD,IAASj1B,IAAb,EAAmB;EACjBi1B,IAAAA,IAAI,GAAG,CAAC2oB,EAAE,GAAG9/C,IAAN,KAAekC,IAAI,GAAG,CAAtB,CAAP;EACD;;EAED,MAAIjE,KAAK,CAACV,OAAN,CAAcD,KAAd,CAAJ,EAA0B;EACxBA,IAAAA,KAAK,CAACG,MAAN,GAAe,CAAf,CADwB;;EAGxB,SAAK,IAAIC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGwE,IAApB,EAA0BxE,CAAC,EAA3B,EAA+B;EAC7BJ,MAAAA,KAAK,CAACsD,IAAN,CAAWZ,IAAX;EACAA,MAAAA,IAAI,IAAIm3B,IAAR;EACD;EACF,GAPD,MAOO;EACL,QAAI75B,KAAK,CAACG,MAAN,KAAiByE,IAArB,EAA2B;EACzB,YAAM,IAAIiL,KAAJ,CAAU,yDAAV,CAAN;EACD;;EAED,SAAK,IAAIgf,EAAE,GAAG,CAAd,EAAiBA,EAAE,GAAGjqB,IAAtB,EAA4BiqB,EAAE,EAA9B,EAAkC;EAChC7uB,MAAAA,KAAK,CAAC6uB,EAAD,CAAL,GAAYnsB,IAAZ;EACAA,MAAAA,IAAI,IAAIm3B,IAAR;EACD;EACF;;EAED,SAAO75B,KAAP;EACD;;ECjFD;;;;;;;;;EASA,SAASsE,QAAT,CAAkBomB,MAAlB,EAA0B;EACxB,MAAInqB,OAAO,GAAGC,SAAS,CAACL,MAAV,GAAmB,CAAnB,IAAwBK,SAAS,CAAC,CAAD,CAAT,KAAiBC,SAAzC,GAAqDD,SAAS,CAAC,CAAD,CAA9D,GAAoE,EAAlF;;EAEA,MAAI,CAACP,GAAO,CAACyqB,MAAD,CAAZ,EAAsB;EACpB,UAAM,IAAIxqB,SAAJ,CAAc,wBAAd,CAAN;EACD;;EAED,MAAIkpD,iBAAiB,GAAG7oD,OAAO,CAAC4D,QAAhC;EAAA,MACIA,QAAQ,GAAGilD,iBAAiB,KAAK,KAAK,CAA3B,GAA+B,IAA/B,GAAsCA,iBADrD;EAAA,MAEIC,aAAa,GAAG9oD,OAAO,CAAC6D,IAF5B;EAAA,MAGIA,MAAI,GAAGilD,aAAa,KAAK,KAAK,CAAvB,GAA2B79B,IAAS,CAACd,MAAD,CAApC,GAA+C2+B,aAH1D;EAIA,MAAIC,QAAQ,GAAG,CAAf;;EAEA,OAAK,IAAIlpD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGsqB,MAAM,CAACvqB,MAA3B,EAAmCC,CAAC,EAApC,EAAwC;EACtC,QAAIqE,CAAC,GAAGimB,MAAM,CAACtqB,CAAD,CAAN,GAAYgE,MAApB;EACAklD,IAAAA,QAAQ,IAAI7kD,CAAC,GAAGA,CAAhB;EACD;;EAED,MAAIN,QAAJ,EAAc;EACZ,WAAOmlD,QAAQ,IAAI5+B,MAAM,CAACvqB,MAAP,GAAgB,CAApB,CAAf;EACD,GAFD,MAEO;EACL,WAAOmpD,QAAQ,GAAG5+B,MAAM,CAACvqB,MAAzB;EACD;EACF;;ECjCD;;;;;;;;;EASA,SAASuY,iBAAT,CAA2BgS,MAA3B,EAAmC;EACjC,MAAInqB,OAAO,GAAGC,SAAS,CAACL,MAAV,GAAmB,CAAnB,IAAwBK,SAAS,CAAC,CAAD,CAAT,KAAiBC,SAAzC,GAAqDD,SAAS,CAAC,CAAD,CAA9D,GAAoE,EAAlF;EACA,SAAO2E,IAAI,CAACE,IAAL,CAAUf,QAAQ,CAAComB,MAAD,EAASnqB,OAAT,CAAlB,CAAP;EACD;;ECdD;;;;;;;;;;AAUA,EAAe,SAASgpD,gBAAT,CACbC,cADa,EAEbrwB,SAFa,EAIb;EAAA,MADA54B,OACA,uEADU,EACV;EACA,QAAM;EAAE4qB,IAAAA,MAAM,GAAG;EAAX,MAAoB5qB,OAA1B;EAEA,MAAIkpD,YAAY,GAAG;EACjBhlD,IAAAA,CAAC,EAAE00B,SAAS,CAAC7N,KAAV,EADc;EAEjBtV,IAAAA,CAAC,EAAE,IAAIrV,KAAJ,CAAUw4B,SAAS,CAACh5B,MAApB,EAA4BgN,IAA5B,CAAiC,CAAjC;EAFc,GAAnB;EAKA,MAAIu8C,aAAa,GAAG,CAApB;EACA,MAAIC,WAAW,GAAG,CAAlB;;EACA,SACED,aAAa,GAAGF,cAAc,CAAC/kD,CAAf,CAAiBtE,MAAjC,IACAwpD,WAAW,GAAGxwB,SAAS,CAACh5B,MAF1B,EAGE;EACA,QAAIizB,IAAI,GAAGo2B,cAAc,CAAC/kD,CAAf,CAAiBilD,aAAjB,IAAkCvwB,SAAS,CAACwwB,WAAD,CAAtD;;EACA,QAAIxkD,IAAI,CAAC0F,GAAL,CAASuoB,IAAT,IAAiBjI,MAArB,EAA6B;EAC3Bs+B,MAAAA,YAAY,CAACzzC,CAAb,CAAe2zC,WAAf,KAA+BH,cAAc,CAACxzC,CAAf,CAAiB0zC,aAAa,EAA9B,CAA/B;EACD,KAFD,MAEO,IAAIt2B,IAAI,GAAG,CAAX,EAAc;EACnBs2B,MAAAA,aAAa;EACd,KAFM,MAEA;EACLC,MAAAA,WAAW;EACZ;EACF;;EAED,SAAOF,YAAP;EACD;;ECpCD;;;;;;;;;AAQA,EAAe,SAASG,QAAT,CAAkBztB,MAAlB,EAA0B57B,OAA1B,EAAmC;EAChD,QAAM;EAAEkE,IAAAA,CAAF;EAAKuR,IAAAA;EAAL,MAAWmmB,MAAjB;EACA,QAAM;EAAEmP,IAAAA,MAAM,GAAG7mC,CAAC,CAAC,CAAD,CAAZ;EAAiB0oB,IAAAA,OAAO,GAAG;EAA3B,MAAqC5sB,OAA3C;EAEA,MAAIgB,KAAJ;;EACA,MAAI4rB,OAAJ,EAAa;EACX5rB,IAAAA,KAAK,GAAGg5C,YAAY,CAAC91C,CAAD,EAAI6mC,MAAJ,EAAYue,UAAZ,CAApB;EACD,GAFD,MAEO;EACLtoD,IAAAA,KAAK,GAAGg5C,YAAY,CAAC91C,CAAD,EAAI6mC,MAAJ,EAAY+O,SAAZ,CAApB;EACD;;EAED,MAAI94C,KAAK,IAAI,CAAb,EAAgB;EACd,WAAO;EACLkD,MAAAA,CAAC,EAAEA,CAAC,CAAClD,KAAD,CADC;EAELyU,MAAAA,CAAC,EAAEA,CAAC,CAACzU,KAAD;EAFC,KAAP;EAID,GALD,MAKO;EACLA,IAAAA,KAAK,GAAG,CAACA,KAAT;;EACA,QACGA,KAAK,KAAK,CAAV,IAAe4D,IAAI,CAAC0F,GAAL,CAASpG,CAAC,CAAClD,KAAD,CAAD,GAAW+pC,MAApB,IAA8B,GAA9C,IACA/pC,KAAK,KAAKkD,CAAC,CAACtE,MAFd,EAGE;EACA,aAAO;EACLsE,QAAAA,CAAC,EAAEA,CAAC,CAAClD,KAAK,GAAG,CAAT,CADC;EAELyU,QAAAA,CAAC,EAAEA,CAAC,CAACzU,KAAK,GAAG,CAAT;EAFC,OAAP;EAID,KARD,MAQO;EACL,aAAO;EACLkD,QAAAA,CAAC,EAAEA,CAAC,CAAClD,KAAD,CADC;EAELyU,QAAAA,CAAC,EAAEA,CAAC,CAACzU,KAAD;EAFC,OAAP;EAID;EACF;EACF;;EC5CD;;;;;;;;;AASA,EAAe,SAASuoD,QAAT,CAAkB3tB,MAAlB,EAAwC;EAAA,MAAd57B,OAAc,uEAAJ,EAAI;EACrD,QAAM;EAAEkE,IAAAA,CAAF;EAAKuR,IAAAA;EAAL,MAAWmmB,MAAjB;EACA,QAAM;EAAE4tB,IAAAA,UAAU,GAAG;EAAf,MAAyBxpD,OAA/B;EAEA,MAAIypD,MAAM,GAAG;EAAEvlD,IAAAA,CAAC,EAAE,EAAL;EAASuR,IAAAA,CAAC,EAAE;EAAZ,GAAb;EACA,MAAIi0C,WAAW,GAAG;EAAExlD,IAAAA,CAAC,EAAE,EAAL;EAASuR,IAAAA,CAAC,EAAE;EAAZ,GAAlB;EACA,MAAIpR,IAAI,GAAG,CAAX;EACA,MAAIrD,KAAK,GAAG,CAAZ;;EAEA,SAAOA,KAAK,GAAGkD,CAAC,CAACtE,MAAjB,EAAyB;EACvB,QAAIyE,IAAI,KAAK,CAAT,IAAcH,CAAC,CAAClD,KAAD,CAAD,GAAWyoD,MAAM,CAACvlD,CAAP,CAASG,IAAI,GAAG,CAAhB,CAAX,GAAgCmlD,UAAlD,EAA8D;EAC5DE,MAAAA,WAAW,CAACxlD,CAAZ,CAAcnB,IAAd,CAAmBmB,CAAC,CAAClD,KAAD,CAApB;EACA0oD,MAAAA,WAAW,CAACj0C,CAAZ,CAAc1S,IAAd,CAAmB0S,CAAC,CAACzU,KAAD,CAApB;EACAyoD,MAAAA,MAAM,CAACvlD,CAAP,CAASnB,IAAT,CAAcmB,CAAC,CAAClD,KAAD,CAAf;EACAyoD,MAAAA,MAAM,CAACh0C,CAAP,CAAS1S,IAAT,CAAc0S,CAAC,CAACzU,KAAD,CAAf;EACAA,MAAAA,KAAK;EACLqD,MAAAA,IAAI;EACL,KAPD,MAOO;EACL,UAAIoR,CAAC,CAACzU,KAAD,CAAD,GAAW0oD,WAAW,CAACj0C,CAAZ,CAAcpR,IAAI,GAAG,CAArB,CAAf,EAAwC;EACtCqlD,QAAAA,WAAW,CAACxlD,CAAZ,CAAcG,IAAI,GAAG,CAArB,IAA0BH,CAAC,CAAClD,KAAD,CAA3B;EACA0oD,QAAAA,WAAW,CAACj0C,CAAZ,CAAcpR,IAAI,GAAG,CAArB,IAA0BoR,CAAC,CAACzU,KAAD,CAA3B;EACD;;EACDyoD,MAAAA,MAAM,CAACvlD,CAAP,CAASG,IAAI,GAAG,CAAhB,IAAqBH,CAAC,CAAClD,KAAD,CAAtB;EACAyoD,MAAAA,MAAM,CAACh0C,CAAP,CAASpR,IAAI,GAAG,CAAhB,KAAsBoR,CAAC,CAACzU,KAAD,CAAvB;EACAA,MAAAA,KAAK;EACN;EACF;;EAEDyoD,EAAAA,MAAM,CAACvlD,CAAP,GAAWwlD,WAAW,CAACxlD,CAAZ,CAAc6mB,KAAd,EAAX;EAEA,SAAO0+B,MAAP;EACD;;ECrCD;;;;;;;;;;;AAUA,EAAe,SAASE,IAAT,CAAc/tB,MAAd,EAAoC;EAAA,MAAd57B,OAAc,uEAAJ,EAAI;EACjD,QAAM;EAAEkE,IAAAA,CAAF;EAAKuR,IAAAA;EAAL,MAAWmmB,MAAjB;EACA,MAAI;EACFz5B,IAAAA,IAAI,GAAG;EAAEnB,MAAAA,KAAK,EAAE;EAAT,KADL;EAEFihD,IAAAA,EAAE,GAAG;EAAEjhD,MAAAA,KAAK,EAAEkD,CAAC,CAACtE;EAAX,KAFH;EAGFgtB,IAAAA,OAAO,GAAG;EAHR,MAIA5sB,OAJJ;;EAMA,MAAImC,IAAI,CAACU,KAAL,KAAe3C,SAAf,IAA4BiC,IAAI,CAACnB,KAAL,KAAed,SAA/C,EAA0D;EACxDiC,IAAAA,IAAI,CAACnB,KAAL,GAAa4oD,cAAc,CAACznD,IAAI,CAACU,KAAN,EAAaqB,CAAb,EAAgB0oB,OAAhB,CAA3B;EACD;;EAED,MAAIq1B,EAAE,CAACp/C,KAAH,KAAa3C,SAAb,IAA0B+hD,EAAE,CAACjhD,KAAH,KAAad,SAA3C,EAAsD;EACpD+hD,IAAAA,EAAE,CAACjhD,KAAH,GAAW4oD,cAAc,CAAC3H,EAAE,CAACp/C,KAAJ,EAAWqB,CAAX,EAAc0oB,OAAd,CAAzB;EACD;;EAED,MAAItsB,UAAU,GAAG0M,MAAM,CAACoQ,SAAxB;EACA,MAAI6c,YAAJ;;EACA,OAAK,IAAIp6B,CAAC,GAAGsC,IAAI,CAACnB,KAAlB,EAAyBnB,CAAC,GAAGoiD,EAAE,CAACjhD,KAAhC,EAAuCnB,CAAC,EAAxC,EAA4C;EAC1C,QAAIS,UAAU,GAAGmV,CAAC,CAAC5V,CAAD,CAAlB,EAAuB;EACrBS,MAAAA,UAAU,GAAGmV,CAAC,CAAC5V,CAAD,CAAd;EACAo6B,MAAAA,YAAY,GAAGp6B,CAAf;EACD;EACF;;EAED,SAAO;EACLmB,IAAAA,KAAK,EAAEi5B,YADF;EAELp3B,IAAAA,KAAK,EAAEvC;EAFF,GAAP;EAID;EAED;;;;;;;EAMA,SAASspD,cAAT,CAAwB/mD,KAAxB,EAA+BqB,CAA/B,EAAkC0oB,OAAlC,EAA2C;EACzC,MAAI5rB,KAAJ;;EACA,MAAI4rB,OAAJ,EAAa;EACX5rB,IAAAA,KAAK,GAAGg5C,YAAY,CAAC91C,CAAD,EAAIrB,KAAJ,EAAWymD,UAAX,CAApB;EACD,GAFD,MAEO;EACLtoD,IAAAA,KAAK,GAAGg5C,YAAY,CAAC91C,CAAD,EAAIrB,KAAJ,EAAWi3C,SAAX,CAApB;EACD;;EAED,MAAI94C,KAAK,GAAG,CAAZ,EAAe;EACb,UAAM,IAAIsO,KAAJ,qBAAuBzM,KAAvB,4CAAN;EACD;;EAED,SAAO7B,KAAP;EACD;;EC/Dc,SAAS6oD,KAAT,CAAejuB,MAAf,EAAqC;EAAA,MAAd57B,OAAc,uEAAJ,EAAI;EAClD,QAAM;EAAEkE,IAAAA,CAAF;EAAKuR,IAAAA;EAAL,MAAWmmB,MAAjB;EACA,QAAM;EAAEhP,IAAAA,OAAO,GAAG;EAAZ,MAAsB5sB,OAA5B;EAEA,MAAI8pD,QAAJ;;EACA,MAAI,CAACl9B,OAAL,EAAc;EACZk9B,IAAAA,QAAQ,GAAG,CAAC1zC,CAAD,EAAIC,CAAJ,KAAUD,CAAC,CAAClS,CAAF,GAAMmS,CAAC,CAACnS,CAA7B;EACD,GAFD,MAEO;EACL4lD,IAAAA,QAAQ,GAAG,CAAC1zC,CAAD,EAAIC,CAAJ,KAAUA,CAAC,CAACnS,CAAF,GAAMkS,CAAC,CAAClS,CAA7B;EACD;;EAED,MAAI6lD,OAAO,GAAG7lD,CAAC,CACZ8lB,GADW,CACP,CAAC/F,GAAD,EAAMjjB,KAAN,MAAiB;EACpBkD,IAAAA,CAAC,EAAE+f,GADiB;EAEpBxO,IAAAA,CAAC,EAAEA,CAAC,CAACzU,KAAD;EAFgB,GAAjB,CADO,EAKXwW,IALW,CAKNsyC,QALM,CAAd;EAOA,MAAIE,QAAQ,GAAG;EAAE9lD,IAAAA,CAAC,EAAEA,CAAC,CAAC6mB,KAAF,EAAL;EAAgBtV,IAAAA,CAAC,EAAEA,CAAC,CAACsV,KAAF;EAAnB,GAAf;;EACA,OAAK,IAAIlrB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGqE,CAAC,CAACtE,MAAtB,EAA8BC,CAAC,EAA/B,EAAmC;EACjCmqD,IAAAA,QAAQ,CAAC9lD,CAAT,CAAWrE,CAAX,IAAgBkqD,OAAO,CAAClqD,CAAD,CAAP,CAAWqE,CAA3B;EACA8lD,IAAAA,QAAQ,CAACv0C,CAAT,CAAW5V,CAAX,IAAgBkqD,OAAO,CAAClqD,CAAD,CAAP,CAAW4V,CAA3B;EACD;;EAED,SAAOu0C,QAAP;EACD;;ECxBD;;;;;AAMA,EAAe,SAASC,OAAT,GAA8B;EAAA,MAAbruB,MAAa,uEAAJ,EAAI;EAC3C,QAAM;EAAE13B,IAAAA,CAAF;EAAKuR,IAAAA;EAAL,MAAWmmB,MAAjB;EACA,MAAI13B,CAAC,CAACtE,MAAF,GAAW,CAAf,EAAkB;;EAClB,MAAIsE,CAAC,CAACtE,MAAF,KAAa6V,CAAC,CAAC7V,MAAnB,EAA2B;EACzB,UAAM,IAAI0P,KAAJ,CAAU,8CAAV,CAAN;EACD;;EAED,MAAI03B,OAAO,GAAG9iC,CAAC,CAAC,CAAD,CAAf;EACA,MAAI0zC,OAAO,GAAG,CAAd;;EAEA,OAAK,IAAI/3C,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGqE,CAAC,CAACtE,MAAtB,EAA8BC,CAAC,EAA/B,EAAmC;EACjC,QAAImnC,OAAO,KAAK9iC,CAAC,CAACrE,CAAD,CAAjB,EAAsB;EACpB+3C,MAAAA,OAAO;EACP5Q,MAAAA,OAAO,GAAG9iC,CAAC,CAACrE,CAAD,CAAX;EACAqE,MAAAA,CAAC,CAAC0zC,OAAD,CAAD,GAAa1zC,CAAC,CAACrE,CAAD,CAAd;;EACA,UAAIA,CAAC,KAAK+3C,OAAV,EAAmB;EACjBniC,QAAAA,CAAC,CAACmiC,OAAD,CAAD,GAAa,CAAb;EACD;EACF;;EACD,QAAI/3C,CAAC,KAAK+3C,OAAV,EAAmB;EACjBniC,MAAAA,CAAC,CAACmiC,OAAD,CAAD,IAAcniC,CAAC,CAAC5V,CAAD,CAAf;EACD;EACF;;EAEDqE,EAAAA,CAAC,CAACtE,MAAF,GAAWg4C,OAAO,GAAG,CAArB;EACAniC,EAAAA,CAAC,CAAC7V,MAAF,GAAWg4C,OAAO,GAAG,CAArB;EACD;;ECjCD;;;;;;;;;AASA,EAAe,SAASsS,aAAT,CAAuBtuB,MAAvB,EAA6C;EAAA,MAAd57B,OAAc,uEAAJ,EAAI;EAC1D,QAAM;EAAEkE,IAAAA,CAAF;EAAKuR,IAAAA;EAAL,MAAWmmB,MAAjB;EACA,QAAM;EAAE4tB,IAAAA,UAAU,GAAG;EAAf,MAAyBxpD,OAA/B;EAEA,MAAIypD,MAAM,GAAG;EAAEvlD,IAAAA,CAAC,EAAE,EAAL;EAASuR,IAAAA,CAAC,EAAE;EAAZ,GAAb;EACA,MAAI00C,gBAAgB,GAAG;EAAEjmD,IAAAA,CAAC,EAAE,EAAL;EAASuR,IAAAA,CAAC,EAAE;EAAZ,GAAvB;EACA,MAAIpR,IAAI,GAAG,CAAX;EACA,MAAIrD,KAAK,GAAG,CAAZ;;EAEA,SAAOA,KAAK,GAAGkD,CAAC,CAACtE,MAAjB,EAAyB;EACvB,QAAIyE,IAAI,KAAK,CAAT,IAAcH,CAAC,CAAClD,KAAD,CAAD,GAAWyoD,MAAM,CAACvlD,CAAP,CAASG,IAAI,GAAG,CAAhB,CAAX,GAAgCmlD,UAAlD,EAA8D;EAC5DW,MAAAA,gBAAgB,CAACjmD,CAAjB,CAAmBnB,IAAnB,CAAwBmB,CAAC,CAAClD,KAAD,CAAD,GAAWyU,CAAC,CAACzU,KAAD,CAApC;EACAmpD,MAAAA,gBAAgB,CAAC10C,CAAjB,CAAmB1S,IAAnB,CAAwB0S,CAAC,CAACzU,KAAD,CAAzB;EACAyoD,MAAAA,MAAM,CAACvlD,CAAP,CAASnB,IAAT,CAAcmB,CAAC,CAAClD,KAAD,CAAf;EACAyoD,MAAAA,MAAM,CAACh0C,CAAP,CAAS1S,IAAT,CAAc0S,CAAC,CAACzU,KAAD,CAAf;EACAA,MAAAA,KAAK;EACLqD,MAAAA,IAAI;EACL,KAPD,MAOO;EACL8lD,MAAAA,gBAAgB,CAACjmD,CAAjB,CAAmBG,IAAI,GAAG,CAA1B,KAAgCH,CAAC,CAAClD,KAAD,CAAD,GAAWyU,CAAC,CAACzU,KAAD,CAA5C;EACAmpD,MAAAA,gBAAgB,CAAC10C,CAAjB,CAAmBpR,IAAI,GAAG,CAA1B,KAAgCoR,CAAC,CAACzU,KAAD,CAAjC;EACAyoD,MAAAA,MAAM,CAACvlD,CAAP,CAASG,IAAI,GAAG,CAAhB,IAAqBH,CAAC,CAAClD,KAAD,CAAtB;EACAyoD,MAAAA,MAAM,CAACh0C,CAAP,CAASpR,IAAI,GAAG,CAAhB,KAAsBoR,CAAC,CAACzU,KAAD,CAAvB;EACAA,MAAAA,KAAK;EACN;EACF;;EAED,OAAK,IAAInB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG4pD,MAAM,CAACvlD,CAAP,CAAStE,MAA7B,EAAqCC,CAAC,EAAtC,EAA0C;EACxC4pD,IAAAA,MAAM,CAACvlD,CAAP,CAASrE,CAAT,IAAcsqD,gBAAgB,CAACjmD,CAAjB,CAAmBrE,CAAnB,IAAwBsqD,gBAAgB,CAAC10C,CAAjB,CAAmB5V,CAAnB,CAAtC;EACD;;EAED,SAAO4pD,MAAP;EACD;;ECxCD;;;;;;;;;AASA,EAAe,SAASW,QAAT,CAAkBC,EAAlB,EAAsBC,EAAtB,EAA0B5X,KAA1B,EAAiCC,SAAjC,EAA4C;EACzD,SACE,MAAMD,KAAN,GAAc4X,EAAd,GAAmBA,EAAnB,GACA3X,SAAS,GAAG2X,EADZ,IAEC,MAAM5X,KAAN,GAAc2X,EAAd,GAAmBA,EAAnB,GAAwB1X,SAAS,GAAG0X,EAFrC,CADF;EAKD;;ECbD;;;;;;;;;;;AAUA,EAAe,SAASE,mBAAT,CAA6BrmD,CAA7B,EAAgCuR,CAAhC,EAAmCtT,IAAnC,EAAyC8/C,EAAzC,EAA6CuI,cAA7C,EAA6D;EAC1E,MAAIC,OAAO,GAAGvmD,CAAC,CAACtE,MAAhB;EAEA,MAAI05B,IAAI,GAAG,CAAC2oB,EAAE,GAAG9/C,IAAN,KAAeqoD,cAAc,GAAG,CAAhC,CAAX;EACA,MAAIE,QAAQ,GAAGpxB,IAAI,GAAG,CAAtB;EAEA,MAAIn5B,MAAM,GAAG,IAAIC,KAAJ,CAAUoqD,cAAV,CAAb;EAEA,MAAIG,mBAAmB,GAAGzmD,CAAC,CAAC,CAAD,CAAD,GAAOA,CAAC,CAAC,CAAD,CAAlC;EACA,MAAI0mD,gBAAgB,GAAG1mD,CAAC,CAACumD,OAAO,GAAG,CAAX,CAAD,GAAiBvmD,CAAC,CAACumD,OAAO,GAAG,CAAX,CAAzC,CAT0E;;EAY1E,MAAI3qD,GAAG,GAAGqC,IAAI,GAAGuoD,QAAjB;EACA,MAAIlrD,GAAG,GAAG2C,IAAI,GAAGuoD,QAAjB;EAEA,MAAIG,SAAS,GAAG79C,MAAM,CAACoQ,SAAvB;EACA,MAAI0tC,SAAS,GAAG,CAAhB;EACA,MAAIC,KAAK,GAAG7mD,CAAC,CAAC,CAAD,CAAD,GAAOymD,mBAAnB;EACA,MAAIK,KAAK,GAAG,CAAZ;EAEA,MAAIC,YAAY,GAAG,CAAnB;EACA,MAAIvY,KAAK,GAAG,CAAZ;EACA,MAAIC,SAAS,GAAG,CAAhB;EACA,MAAIuY,QAAQ,GAAG,CAAf;EACA,MAAIC,QAAQ,GAAG,CAAf;EAEA,MAAItrD,CAAC,GAAG,CAAR,CA1B0E;;EA2B1E,MAAIsD,CAAC,GAAG,CAAR,CA3B0E;;EA6B1E,WAASioD,QAAT,CAAkBf,EAAlB,EAAsBgB,EAAtB,EAA0Bf,EAA1B,EAA8BgB,EAA9B,EAAkC;EAChC,WAAO,CAACA,EAAE,GAAGD,EAAN,KAAaf,EAAE,GAAGD,EAAlB,CAAP;EACD;;EAEDkB,EAAAA,IAAI,EAAE,OAAO,IAAP,EAAa;EACjB,QAAIV,SAAS,IAAI/qD,GAAb,IAAoBA,GAAG,IAAIirD,KAA/B,EAAsC;EACpC5jD,MAAAA,GAAG,GAAGijD,QAAQ,CAAC,CAAD,EAAItqD,GAAG,GAAG+qD,SAAV,EAAqBnY,KAArB,EAA4BoY,SAA5B,CAAd;EACAI,MAAAA,QAAQ,GAAGD,YAAY,GAAG9jD,GAA1B;EACD;;EAED,WAAO4jD,KAAK,GAAGvrD,GAAR,IAAe,CAAtB,EAAyB;EACvB;EACA,UAAI2H,GAAG,GAAGijD,QAAQ,CAAC,CAAD,EAAI5qD,GAAG,GAAGqrD,SAAV,EAAqBnY,KAArB,EAA4BoY,SAA5B,CAAlB;EACAK,MAAAA,QAAQ,GAAGF,YAAY,GAAG9jD,GAA1B;EAEAhH,MAAAA,MAAM,CAACgD,CAAC,EAAF,CAAN,GAAc,CAACgoD,QAAQ,GAAGD,QAAZ,IAAwB5xB,IAAtC;;EAEA,UAAIn2B,CAAC,KAAKqnD,cAAV,EAA0B;EACxB,cAAMe,IAAN;EACD;;EAEDzrD,MAAAA,GAAG,GAAGN,GAAN;EACAA,MAAAA,GAAG,IAAI85B,IAAP;EACA4xB,MAAAA,QAAQ,GAAGC,QAAX;EACD;;EAEDF,IAAAA,YAAY,IAAIb,QAAQ,CAACS,SAAD,EAAYE,KAAZ,EAAmBrY,KAAnB,EAA0BC,SAA1B,CAAxB;EAEAkY,IAAAA,SAAS,GAAGE,KAAZ;EACAD,IAAAA,SAAS,GAAGE,KAAZ;;EAEA,QAAInrD,CAAC,GAAG4qD,OAAR,EAAiB;EACfM,MAAAA,KAAK,GAAG7mD,CAAC,CAACrE,CAAD,CAAT;EACAmrD,MAAAA,KAAK,GAAGv1C,CAAC,CAAC5V,CAAD,CAAT;EACAA,MAAAA,CAAC;EACF,KAJD,MAIO,IAAIA,CAAC,KAAK4qD,OAAV,EAAmB;EACxBM,MAAAA,KAAK,IAAIH,gBAAT;EACAI,MAAAA,KAAK,GAAG,CAAR;EACD;;EAEDtY,IAAAA,KAAK,GAAG0Y,QAAQ,CAACP,SAAD,EAAYC,SAAZ,EAAuBC,KAAvB,EAA8BC,KAA9B,CAAhB;EACArY,IAAAA,SAAS,GAAG,CAACD,KAAD,GAASmY,SAAT,GAAqBC,SAAjC;EACD;;EAED,SAAO3qD,MAAP;EACD;;ECtFD;;;;;;;;;;AAUA,EAAe,SAASqrD,iBAAT,CAA2BtnD,CAA3B,EAA8BuR,CAA9B,EAAiCtT,IAAjC,EAAuC8/C,EAAvC,EAA2CuI,cAA3C,EAA2D;EACxE,MAAIC,OAAO,GAAGvmD,CAAC,CAACtE,MAAhB;EAEA,MAAI05B,IAAI,GAAG,CAAC2oB,EAAE,GAAG9/C,IAAN,KAAeqoD,cAAc,GAAG,CAAhC,CAAX;EACA,MAAIE,QAAQ,GAAGpxB,IAAI,GAAG,CAAtB;EACA,MAAImyB,QAAQ,GAAGvnD,CAAC,CAACA,CAAC,CAACtE,MAAF,GAAW,CAAZ,CAAD,GAAkBsE,CAAC,CAACA,CAAC,CAACtE,MAAF,GAAW,CAAZ,CAAlC;EAEA,MAAIuiD,KAAK,GAAGhgD,IAAI,GAAGuoD,QAAnB;EACA,MAAIvqD,MAAM,GAAG,IAAIC,KAAJ,CAAUoqD,cAAV,CAAb,CARwE;;EAWxE,MAAI1qD,GAAG,GAAGqiD,KAAV;EACA,MAAI3iD,GAAG,GAAG2iD,KAAK,GAAG7oB,IAAlB;EAEA,MAAIuxB,SAAS,GAAG,CAAC79C,MAAM,CAACwnB,SAAxB;EACA,MAAIs2B,SAAS,GAAG,CAAhB;EACA,MAAIC,KAAK,GAAG7mD,CAAC,CAAC,CAAD,CAAb;EACA,MAAI8mD,KAAK,GAAGv1C,CAAC,CAAC,CAAD,CAAb;EACA,MAAIi2C,mBAAmB,GAAG,CAA1B;EACA,MAAIC,kBAAkB,GAAG,IAAzB;EAEA,MAAIV,YAAY,GAAG,CAAnB,CArBwE;;EAwBxE,MAAIrsB,aAAa,GAAG,CAApB;EAEA,MAAI/+B,CAAC,GAAG,CAAR,CA1BwE;;EA2BxE,MAAIsD,CAAC,GAAG,CAAR,CA3BwE;;EA6BxEooD,EAAAA,IAAI,EAAE,OAAO,IAAP,EAAa;EACjB,QAAIV,SAAS,IAAIE,KAAjB,EAAwB,MAAM,IAAIz7C,KAAJ,CAAU,+BAAV,CAAN;;EACxB,WAAOu7C,SAAS,GAAGrrD,GAAZ,GAAkB,CAAzB,EAA4B;EAC1B;EACA,UAAImsD,kBAAJ,EAAwB;EACtB/sB,QAAAA,aAAa;EACb+sB,QAAAA,kBAAkB,GAAG,KAArB;EACD;;EAEDxrD,MAAAA,MAAM,CAACgD,CAAD,CAAN,GAAYy7B,aAAa,IAAI,CAAjB,GAAqB,CAArB,GAAyBqsB,YAAY,GAAGrsB,aAApD;EACAz7B,MAAAA,CAAC;;EAED,UAAIA,CAAC,KAAKqnD,cAAV,EAA0B;EACxB,cAAMe,IAAN;EACD;;EAEDzrD,MAAAA,GAAG,GAAGN,GAAN;EACAA,MAAAA,GAAG,IAAI85B,IAAP;EACA2xB,MAAAA,YAAY,GAAG,CAAf;EACArsB,MAAAA,aAAa,GAAG,CAAhB;EACD;;EAED,QAAIisB,SAAS,GAAG/qD,GAAhB,EAAqB;EACnBmrD,MAAAA,YAAY,IAAIH,SAAhB;EACAlsB,MAAAA,aAAa;EACd;;EAED,QAAIisB,SAAS,KAAK,CAAC79C,MAAM,CAACwnB,SAAtB,IAAmCk3B,mBAAmB,GAAG,CAA7D,EAAgE;EAC9D9sB,MAAAA,aAAa;EACd;;EAEDisB,IAAAA,SAAS,GAAGE,KAAZ;EACAD,IAAAA,SAAS,GAAGE,KAAZ;;EAEA,QAAInrD,CAAC,GAAG4qD,OAAR,EAAiB;EACfM,MAAAA,KAAK,GAAG7mD,CAAC,CAACrE,CAAD,CAAT;EACAmrD,MAAAA,KAAK,GAAGv1C,CAAC,CAAC5V,CAAD,CAAT;EACAA,MAAAA,CAAC;EACF,KAJD,MAIO;EACLkrD,MAAAA,KAAK,IAAIU,QAAT;EACAT,MAAAA,KAAK,GAAG,CAAR;EACAU,MAAAA,mBAAmB;EACpB;EACF;;EAED,SAAOvrD,MAAP;EACD;;ECrFc,SAASyrD,QAAT,CAAkBzpD,IAAlB,EAAwB8/C,EAAxB,EAA4BuI,cAA5B,EAA6D;EAAA,MAAjBqB,UAAiB,uEAAJ,EAAI;;EAC1E,MAAI1pD,IAAI,GAAG8/C,EAAX,EAAe;EACb,KAAC9/C,IAAD,EAAO8/C,EAAP,IAAa,CAACA,EAAD,EAAK9/C,IAAL,CAAb;EACD,GAHyE;;;EAM1E0pD,EAAAA,UAAU,GAAGA,UAAU,CAAC7nC,MAAX,CACV8nC,SAAD,IAAeA,SAAS,CAAC3pD,IAAV,KAAmBjC,SAAnB,IAAgC4rD,SAAS,CAAC7J,EAAV,KAAiB/hD,SADrD,CAAb;EAIA2rD,EAAAA,UAAU,GAAGE,IAAI,CAACC,KAAL,CAAWD,IAAI,CAACE,SAAL,CAAeJ,UAAf,CAAX,CAAb,CAV0E;;EAY1EA,EAAAA,UAAU,CAACh7B,OAAX,CAAoBi7B,SAAD,IAAe;EAChC,QAAIA,SAAS,CAAC3pD,IAAV,GAAiB2pD,SAAS,CAAC7J,EAA/B,EAAmC;EACjC,OAAC6J,SAAS,CAAC7J,EAAX,EAAe6J,SAAS,CAAC3pD,IAAzB,IAAiC,CAAC2pD,SAAS,CAAC3pD,IAAX,EAAiB2pD,SAAS,CAAC7J,EAA3B,CAAjC;EACD;EACF,GAJD;EAMA4J,EAAAA,UAAU,CAACr0C,IAAX,CAAgB,CAACpB,CAAD,EAAIC,CAAJ,KAAUD,CAAC,CAACjU,IAAF,GAASkU,CAAC,CAAClU,IAArC,EAlB0E;;EAqB1E0pD,EAAAA,UAAU,CAACh7B,OAAX,CAAoBi7B,SAAD,IAAe;EAChC,QAAIA,SAAS,CAAC3pD,IAAV,GAAiBA,IAArB,EAA2B2pD,SAAS,CAAC3pD,IAAV,GAAiBA,IAAjB;EAC3B,QAAI2pD,SAAS,CAAC7J,EAAV,GAAeA,EAAnB,EAAuB6J,SAAS,CAAC7J,EAAV,GAAeA,EAAf;EACxB,GAHD;;EAIA,OAAK,IAAIpiD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGgsD,UAAU,CAACjsD,MAAX,GAAoB,CAAxC,EAA2CC,CAAC,EAA5C,EAAgD;EAC9C,QAAIgsD,UAAU,CAAChsD,CAAD,CAAV,CAAcoiD,EAAd,GAAmB4J,UAAU,CAAChsD,CAAC,GAAG,CAAL,CAAV,CAAkBsC,IAAzC,EAA+C;EAC7C0pD,MAAAA,UAAU,CAAChsD,CAAD,CAAV,CAAcoiD,EAAd,GAAmB4J,UAAU,CAAChsD,CAAC,GAAG,CAAL,CAAV,CAAkBsC,IAArC;EACD;EACF;;EACD0pD,EAAAA,UAAU,GAAGA,UAAU,CAAC7nC,MAAX,CAAmB8nC,SAAD,IAAeA,SAAS,CAAC3pD,IAAV,GAAiB2pD,SAAS,CAAC7J,EAA5D,CAAb;;EAEA,MAAI,CAAC4J,UAAD,IAAeA,UAAU,CAACjsD,MAAX,KAAsB,CAAzC,EAA4C;EAC1C,WAAO,CAAC;EAAEuC,MAAAA,IAAF;EAAQ8/C,MAAAA,EAAR;EAAYuI,MAAAA;EAAZ,KAAD,CAAP;EACD,GAlCyE;;;EAsC1E,MAAI0B,QAAQ,GAAGL,UAAU,CAAC1X,MAAX,CACb,CAACgY,QAAD,EAAWL,SAAX,KAA0BK,QAAQ,IAAIL,SAAS,CAAC7J,EAAV,GAAe6J,SAAS,CAAC3pD,IADlD,EAEb,CAFa,CAAf;EAIA,MAAIo5B,KAAK,GAAG0mB,EAAE,GAAG9/C,IAAjB;EACA,MAAIiqD,aAAa,GAAG,CAAC7wB,KAAK,GAAG2wB,QAAT,IAAqB1B,cAAzC;EACA,MAAI6B,KAAK,GAAG,EAAZ;EACA,MAAIC,WAAW,GAAGnqD,IAAlB;EACA,MAAIoqD,WAAW,GAAG,CAAlB;;EACA,OAAK,IAAIT,SAAT,IAAsBD,UAAtB,EAAkC;EAChC,QAAIW,eAAe,GAAG5nD,IAAI,CAAC8G,KAAL,CACpB,CAACogD,SAAS,CAAC3pD,IAAV,GAAiBmqD,WAAlB,IAAiCF,aADb,CAAtB;EAGAG,IAAAA,WAAW,IAAIC,eAAf;;EACA,QAAIA,eAAe,GAAG,CAAtB,EAAyB;EACvBH,MAAAA,KAAK,CAACtpD,IAAN,CAAW;EACTZ,QAAAA,IAAI,EAAEmqD,WADG;EAETrK,QAAAA,EAAE,EAAE6J,SAAS,CAAC3pD,IAFL;EAGTqoD,QAAAA,cAAc,EAAEgC;EAHP,OAAX;EAKD;;EAEDF,IAAAA,WAAW,GAAGR,SAAS,CAAC7J,EAAxB;EACD;;EACD,MAAIuI,cAAc,GAAG+B,WAAjB,GAA+B,CAAnC,EAAsC;EACpCF,IAAAA,KAAK,CAACtpD,IAAN,CAAW;EACTZ,MAAAA,IAAI,EAAEmqD,WADG;EAETrK,MAAAA,EAAE,EAAEA,EAFK;EAGTuI,MAAAA,cAAc,EAAEA,cAAc,GAAG+B;EAHxB,KAAX;EAKD;;EAED,SAAOF,KAAP;EACD;;ECjED;;;;;;;;;;;;;;;;;;;;;;;;;;AA0BA,EAAe,SAASI,aAAT,GAAmD;EAAA,MAA5BC,OAA4B,uEAAlB,EAAkB;EAAA,MAAd1sD,OAAc,uEAAJ,EAAI;EAChE,MAAI;EAAEkE,IAAAA,CAAF;EAAKuR,IAAAA;EAAL,MAAWi3C,OAAf;EACA,MAAIjC,OAAO,GAAGvmD,CAAC,CAACtE,MAAhB;EACA,MAAIgtB,OAAO,GAAG,KAAd;;EACA,MAAI1oB,CAAC,CAACtE,MAAF,GAAW,CAAX,IAAgBsE,CAAC,CAAC,CAAD,CAAD,GAAOA,CAAC,CAAC,CAAD,CAA5B,EAAiC;EAC/BA,IAAAA,CAAC,GAAGA,CAAC,CAAC6mB,KAAF,GAAU6B,OAAV,EAAJ;EACAnX,IAAAA,CAAC,GAAGA,CAAC,CAACsV,KAAF,GAAU6B,OAAV,EAAJ;EACAA,IAAAA,OAAO,GAAG,IAAV;EACD;;EAED,MAAI;EACFzqB,IAAAA,IAAI,GAAG+B,CAAC,CAAC,CAAD,CADN;EAEF+9C,IAAAA,EAAE,GAAG/9C,CAAC,CAACumD,OAAO,GAAG,CAAX,CAFJ;EAGFkC,IAAAA,OAAO,GAAG,QAHR;EAIFnC,IAAAA,cAAc,GAAG,GAJf;EAKFqB,IAAAA,UAAU,GAAG;EALX,MAMA7rD,OANJ;;EAQA,MAAIyqD,OAAO,KAAKh1C,CAAC,CAAC7V,MAAlB,EAA0B;EACxB,UAAM,IAAIW,UAAJ,CAAe,gDAAf,CAAN;EACD;;EAED,MAAI,OAAO4B,IAAP,KAAgB,QAAhB,IAA4Bkb,KAAK,CAAClb,IAAD,CAArC,EAA6C;EAC3C,UAAM,IAAI5B,UAAJ,CAAe,gCAAf,CAAN;EACD;;EAED,MAAI,OAAO0hD,EAAP,KAAc,QAAd,IAA0B5kC,KAAK,CAAC4kC,EAAD,CAAnC,EAAyC;EACvC,UAAM,IAAI1hD,UAAJ,CAAe,8BAAf,CAAN;EACD;;EAED,MAAI,OAAOiqD,cAAP,KAA0B,QAA1B,IAAsCntC,KAAK,CAACmtC,cAAD,CAA/C,EAAiE;EAC/D,UAAM,IAAIjqD,UAAJ,CAAe,0CAAf,CAAN;EACD;;EAED,MAAI8rD,KAAK,GAAGT,QAAQ,CAACzpD,IAAD,EAAO8/C,EAAP,EAAWuI,cAAX,EAA2BqB,UAA3B,CAApB;EAEA,MAAIe,OAAO,GAAG,EAAd;EACA,MAAIC,OAAO,GAAG,EAAd;;EACA,OAAK,IAAIC,IAAT,IAAiBT,KAAjB,EAAwB;EACtB,QAAIU,UAAU,GAAGC,WAAW,CAC1B9oD,CAD0B,EAE1BuR,CAF0B,EAG1Bq3C,IAAI,CAAC3qD,IAHqB,EAI1B2qD,IAAI,CAAC7K,EAJqB,EAK1B6K,IAAI,CAACtC,cALqB,EAM1BmC,OAN0B,AAAA,CAA5B;EASAC,IAAAA,OAAO,CAAC7pD,IAAR,CAAa,GAAGgqD,UAAU,CAAC7oD,CAA3B;EACA2oD,IAAAA,OAAO,CAAC9pD,IAAR,CAAa,GAAGgqD,UAAU,CAACt3C,CAA3B;EACD;;EAED,MAAImX,OAAJ,EAAa;EACX,QAAIzqB,IAAI,GAAG8/C,EAAX,EAAe;EACb,aAAO;EAAE/9C,QAAAA,CAAC,EAAE0oD,OAAO,CAAChgC,OAAR,EAAL;EAAwBnX,QAAAA,CAAC,EAAEo3C,OAAO,CAACjgC,OAAR;EAA3B,OAAP;EACD,KAFD,MAEO;EACL,aAAO;EAAE1oB,QAAAA,CAAC,EAAE0oD,OAAL;EAAcn3C,QAAAA,CAAC,EAAEo3C;EAAjB,OAAP;EACD;EACF,GAND,MAMO;EACL,QAAI1qD,IAAI,GAAG8/C,EAAX,EAAe;EACb,aAAO;EAAE/9C,QAAAA,CAAC,EAAE0oD,OAAL;EAAcn3C,QAAAA,CAAC,EAAEo3C;EAAjB,OAAP;EACD,KAFD,MAEO;EACL,aAAO;EAAE3oD,QAAAA,CAAC,EAAE0oD,OAAO,CAAChgC,OAAR,EAAL;EAAwBnX,QAAAA,CAAC,EAAEo3C,OAAO,CAACjgC,OAAR;EAA3B,OAAP;EACD;EACF;EACF;;EAED,SAASogC,WAAT,CAAqB9oD,CAArB,EAAwBuR,CAAxB,EAA2BtT,IAA3B,EAAiC8/C,EAAjC,EAAqCuI,cAArC,EAAqDmC,OAArD,EAA8D;EAC5D,MAAInC,cAAc,GAAG,CAArB,EAAwB;EACtB,UAAM,IAAIjqD,UAAJ,CAAe,yCAAf,CAAN;EACD;;EAED,MAAIJ,MAAM,GACRwsD,OAAO,KAAK,MAAZ,GACInB,iBAAiB,CAACtnD,CAAD,EAAIuR,CAAJ,EAAOtT,IAAP,EAAa8/C,EAAb,EAAiBuI,cAAjB,CADrB,GAEID,mBAAmB,CAACrmD,CAAD,EAAIuR,CAAJ,EAAOtT,IAAP,EAAa8/C,EAAb,EAAiBuI,cAAjB,CAHzB;EAKA,SAAO;EACLtmD,IAAAA,CAAC,EAAEskD,cAAc,CAAC;EAChBrmD,MAAAA,IADgB;EAEhB8/C,MAAAA,EAFgB;EAGhB59C,MAAAA,IAAI,EAAEmmD;EAHU,KAAD,CADZ;EAML/0C,IAAAA,CAAC,EAAEtV;EANE,GAAP;EAQD;;ECrHc,SAASyrD,UAAT,CAAkBzpD,IAAlB,EAAwB8/C,EAAxB,EAA6C;EAAA,MAAjB4J,UAAiB,uEAAJ,EAAI;;EAC1D,MAAI1pD,IAAI,GAAG8/C,EAAX,EAAe;EACb,KAAC9/C,IAAD,EAAO8/C,EAAP,IAAa,CAACA,EAAD,EAAK9/C,IAAL,CAAb;EACD,GAHyD;;;EAM1D0pD,EAAAA,UAAU,GAAGA,UAAU,CAAC7nC,MAAX,CACV8nC,SAAD,IAAeA,SAAS,CAAC3pD,IAAV,KAAmBjC,SAAnB,IAAgC4rD,SAAS,CAAC7J,EAAV,KAAiB/hD,SADrD,CAAb;EAIA2rD,EAAAA,UAAU,GAAGE,IAAI,CAACC,KAAL,CAAWD,IAAI,CAACE,SAAL,CAAeJ,UAAf,CAAX,CAAb,CAV0D;;EAY1DA,EAAAA,UAAU,CAACh7B,OAAX,CAAoBi7B,SAAD,IAAe;EAChC,QAAIA,SAAS,CAAC3pD,IAAV,GAAiB2pD,SAAS,CAAC7J,EAA/B,EAAmC;EACjC,OAAC6J,SAAS,CAAC7J,EAAX,EAAe6J,SAAS,CAAC3pD,IAAzB,IAAiC,CAAC2pD,SAAS,CAAC3pD,IAAX,EAAiB2pD,SAAS,CAAC7J,EAA3B,CAAjC;EACD;EACF,GAJD;EAMA4J,EAAAA,UAAU,CAACr0C,IAAX,CAAgB,CAACpB,CAAD,EAAIC,CAAJ,KAAUD,CAAC,CAACjU,IAAF,GAASkU,CAAC,CAAClU,IAArC,EAlB0D;;EAqB1D0pD,EAAAA,UAAU,CAACh7B,OAAX,CAAoBi7B,SAAD,IAAe;EAChC,QAAIA,SAAS,CAAC3pD,IAAV,GAAiBA,IAArB,EAA2B2pD,SAAS,CAAC3pD,IAAV,GAAiBA,IAAjB;EAC3B,QAAI2pD,SAAS,CAAC7J,EAAV,GAAeA,EAAnB,EAAuB6J,SAAS,CAAC7J,EAAV,GAAeA,EAAf;EACxB,GAHD;;EAIA,OAAK,IAAIpiD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGgsD,UAAU,CAACjsD,MAAX,GAAoB,CAAxC,EAA2CC,CAAC,EAA5C,EAAgD;EAC9C,QAAIgsD,UAAU,CAAChsD,CAAD,CAAV,CAAcoiD,EAAd,GAAmB4J,UAAU,CAAChsD,CAAC,GAAG,CAAL,CAAV,CAAkBsC,IAAzC,EAA+C;EAC7C0pD,MAAAA,UAAU,CAAChsD,CAAD,CAAV,CAAcoiD,EAAd,GAAmB4J,UAAU,CAAChsD,CAAC,GAAG,CAAL,CAAV,CAAkBsC,IAArC;EACD;EACF;;EACD0pD,EAAAA,UAAU,GAAGA,UAAU,CAAC7nC,MAAX,CAAmB8nC,SAAD,IAAeA,SAAS,CAAC3pD,IAAV,GAAiB2pD,SAAS,CAAC7J,EAA5D,CAAb;;EAEA,MAAI,CAAC4J,UAAD,IAAeA,UAAU,CAACjsD,MAAX,KAAsB,CAAzC,EAA4C;EAC1C,WAAO,CAAC;EAAEuC,MAAAA,IAAF;EAAQ8/C,MAAAA;EAAR,KAAD,CAAP;EACD;;EAED,MAAIoK,KAAK,GAAG,EAAZ;EACA,MAAIC,WAAW,GAAGnqD,IAAlB;;EACA,OAAK,IAAI2pD,SAAT,IAAsBD,UAAtB,EAAkC;EAChC,QAAIS,WAAW,GAAGR,SAAS,CAAC3pD,IAA5B,EAAkC;EAChCkqD,MAAAA,KAAK,CAACtpD,IAAN,CAAW;EACTZ,QAAAA,IAAI,EAAEmqD,WADG;EAETrK,QAAAA,EAAE,EAAE6J,SAAS,CAAC3pD;EAFL,OAAX;EAID;;EAEDmqD,IAAAA,WAAW,GAAGR,SAAS,CAAC7J,EAAxB;EACD;;EACD,MAAIqK,WAAW,GAAGrK,EAAlB,EAAsB;EACpBoK,IAAAA,KAAK,CAACtpD,IAAN,CAAW;EACTZ,MAAAA,IAAI,EAAEmqD,WADG;EAETrK,MAAAA,EAAE,EAAEA;EAFK,KAAX;EAID;;EAED,SAAOoK,KAAP;EACD;;ECtDD;;;;;;;;;;;;AAYA,EAAe,SAASY,OAAT,CAAiBrxB,MAAjB,EAAuC;EAAA,MAAd57B,OAAc,uEAAJ,EAAI;EACpD,QAAM;EAAEkE,IAAAA,CAAF;EAAKuR,IAAAA;EAAL,MAAWmmB,MAAjB;EACA,QAAM;EAAEz5B,IAAAA,IAAI,GAAG+B,CAAC,CAAC,CAAD,CAAV;EAAe+9C,IAAAA,EAAE,GAAG/9C,CAAC,CAACA,CAAC,CAACtE,MAAF,GAAW,CAAZ,CAArB;EAAqCisD,IAAAA,UAAU,GAAG;EAAlD,MAAyD7rD,OAA/D;EAEA,MAAIqsD,KAAK,GAAGT,UAAQ,CAACzpD,IAAD,EAAO8/C,EAAP,EAAW4J,UAAX,CAApB;EAGA,MAAIqB,gBAAgB,GAAG,CAAvB;EACA,MAAIC,IAAI,GAAG,EAAX;EACA,MAAIC,IAAI,GAAG,EAAX;EACA,MAAIC,QAAQ,GAAG,CAAf;;EACA,SAAOA,QAAQ,GAAGnpD,CAAC,CAACtE,MAApB,EAA4B;EAC1B,QACEsE,CAAC,CAACmpD,QAAD,CAAD,IAAehB,KAAK,CAACa,gBAAD,CAAL,CAAwBjL,EAAvC,IACA/9C,CAAC,CAACmpD,QAAD,CAAD,IAAehB,KAAK,CAACa,gBAAD,CAAL,CAAwB/qD,IAFzC,EAGE;EACAgrD,MAAAA,IAAI,CAACpqD,IAAL,CAAUmB,CAAC,CAACmpD,QAAD,CAAX;EACAD,MAAAA,IAAI,CAACrqD,IAAL,CAAU0S,CAAC,CAAC43C,QAAD,CAAX;EACD,KAND,MAMO;EACL,UAAInpD,CAAC,CAACmpD,QAAD,CAAD,GAAchB,KAAK,CAACa,gBAAD,CAAL,CAAwBjL,EAA1C,EAA8C;EAC5CiL,QAAAA,gBAAgB;EAChB,YAAI,CAACb,KAAK,CAACa,gBAAD,CAAV,EAA8B;EAC/B;EACF;;EACDG,IAAAA,QAAQ;EACT;;EAED,SAAO;EACLnpD,IAAAA,CAAC,EAAEipD,IADE;EAEL13C,IAAAA,CAAC,EAAE23C;EAFE,GAAP;EAID;;QCCK;EACJlmD,UAAAA,QADI;EAEJyZ,EAAAA,GAFI;EAGJgM,EAAAA,GAHI;EAIJtJ,yBAAAA,uBAJI;EAKJlJ,mBAAAA,iBALI;EAMJkB,mBAAAA;EANI,IAOFiyC,SAPJ;AAQA,QA0CaltD,OAAK,GAAG;EACnBN,EAAAA,GADmB;EAEnBN,EAAAA,GAFmB;EAGnBqrB,EAAAA,MAHmB;EAInBhnB,EAAAA,IAJmB;EAKnB0mB,QAAAA,MALmB;EAMnBgjC,UAAAA,MANmB;EAOnBxtD,EAAAA,OAPmB;EAQnByoD,EAAAA,cARmB;EASnBrwC,EAAAA,iBATmB;EAUnBpU,EAAAA;EAVmB,CAAd;AAaP,QASaypD,OAAO,GAAG;EACrBC,kBAAAA,gBADqB;EAErBpE,EAAAA,QAFqB;EAGrBE,EAAAA,QAHqB;EAIrBI,EAAAA,IAJqB;EAKrBE,EAAAA,KALqB;EAMrBI,EAAAA,OANqB;EAOrBC,EAAAA,aAPqB;EAQrBuC,EAAAA,aARqB;EASrBQ,EAAAA;EATqB,CAAhB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"} \ No newline at end of file +{"version":3,"file":"ml.js","sources":["../node_modules/is-any-array/src/index.js","../node_modules/ml-array-max/lib-es6/index.js","../node_modules/ml-array-min/lib-es6/index.js","../node_modules/ml-array-rescale/lib-es6/index.js","../node_modules/ml-matrix/src/util.js","../node_modules/ml-matrix/src/stat.js","../node_modules/ml-matrix/src/inspect.js","../node_modules/ml-matrix/src/mathOperations.js","../node_modules/ml-matrix/src/matrix.js","../node_modules/ml-matrix/src/views/base.js","../node_modules/ml-matrix/src/views/column.js","../node_modules/ml-matrix/src/views/columnSelection.js","../node_modules/ml-matrix/src/views/flipColumn.js","../node_modules/ml-matrix/src/views/flipRow.js","../node_modules/ml-matrix/src/views/row.js","../node_modules/ml-matrix/src/views/rowSelection.js","../node_modules/ml-matrix/src/views/selection.js","../node_modules/ml-matrix/src/views/sub.js","../node_modules/ml-matrix/src/views/transpose.js","../node_modules/ml-matrix/src/wrap/WrapperMatrix1D.js","../node_modules/ml-matrix/src/wrap/WrapperMatrix2D.js","../node_modules/ml-matrix/src/wrap/wrap.js","../node_modules/ml-matrix/src/dc/lu.js","../node_modules/ml-matrix/src/dc/util.js","../node_modules/ml-matrix/src/dc/qr.js","../node_modules/ml-matrix/src/dc/svd.js","../node_modules/ml-matrix/src/decompositions.js","../node_modules/ml-matrix/src/determinant.js","../node_modules/ml-matrix/src/linearDependencies.js","../node_modules/ml-matrix/src/pseudoInverse.js","../node_modules/ml-matrix/src/covariance.js","../node_modules/ml-matrix/src/correlation.js","../node_modules/ml-matrix/src/dc/evd.js","../node_modules/ml-matrix/src/dc/cholesky.js","../node_modules/ml-matrix/src/dc/nipals.js","../node_modules/ml-array-mean/lib-es6/index.js","../node_modules/ml-cart/src/utils.js","../node_modules/ml-cart/src/TreeNode.js","../node_modules/ml-cart/src/DecisionTreeClassifier.js","../node_modules/ml-cart/src/DecisionTreeRegression.js","../node_modules/random-js/dist/random-js.esm.js","../node_modules/ml-random-forest/src/utils.js","../node_modules/ml-random-forest/src/RandomForestBase.js","../node_modules/ml-random-forest/src/RandomForestClassifier.js","../node_modules/median-quickselect/lib/median-quickselect.min.js","../node_modules/ml-array-median/lib-es6/index.js","../node_modules/ml-random-forest/src/RandomForestRegression.js","../node_modules/ml-pca/src/pca.js","../node_modules/ml-distance-euclidean/lib-es6/euclidean.js","../node_modules/ml-distance-matrix/src/index.js","../node_modules/heap/lib/heap.js","../node_modules/heap/index.js","../node_modules/ml-hclust/src/Cluster.js","../node_modules/ml-hclust/src/agnes.js","../node_modules/ml-hclust/src/index.js","../node_modules/ml-nearest-vector/lib-es6/index.js","../node_modules/ml-kmeans/src/utils.js","../node_modules/ml-xsadd/lib-es6/xsadd.js","../node_modules/ml-random/lib-es6/choice.js","../node_modules/ml-random/lib-es6/index.js","../node_modules/ml-kmeans/src/initialization.js","../node_modules/ml-kmeans/src/KMeansResult.js","../node_modules/ml-kmeans/src/kmeans.js","../node_modules/ml-naivebayes/src/utils.js","../node_modules/ml-naivebayes/src/GaussianNB.js","../node_modules/ml-naivebayes/src/MultinomialNB.js","../node_modules/ml-knn/src/KDTree.js","../node_modules/ml-knn/src/index.js","../node_modules/ml-pls/src/utils.js","../node_modules/ml-pls/src/pls.js","../node_modules/ml-pls/src/kopls.js","../node_modules/ml-confusion-matrix/src/index.js","../node_modules/ml-combinations/src/index.js","../node_modules/ml-cross-validation/src/index.js","../node_modules/ml-fnn/FeedForwardNeuralNetwork.js","../node_modules/ml-som/src/node-square.js","../node_modules/ml-som/src/node-hexagonal.js","../node_modules/ml-som/src/index.js","../node_modules/ml-regression-base/src/maybeToPrecision.js","../node_modules/ml-regression-base/src/checkArrayLength.js","../node_modules/ml-regression-base/src/index.js","../node_modules/ml-regression-polynomial/src/index.js","../node_modules/ml-regression-simple-linear/src/index.js","../node_modules/ml-regression-exponential/src/index.js","../node_modules/ml-regression-power/src/index.js","../node_modules/ml-regression-multivariate-linear/src/index.js","../node_modules/ml-kernel-gaussian/gaussian-kernel.js","../node_modules/ml-kernel-polynomial/polynomial-kernel.js","../node_modules/ml-kernel-sigmoid/sigmoid-kernel.js","../node_modules/ml-kernel/src/kernels/anova-kernel.js","../node_modules/ml-kernel/src/kernels/cauchy-kernel.js","../node_modules/ml-kernel/src/kernels/exponential-kernel.js","../node_modules/ml-kernel/src/kernels/histogram-intersection-kernel.js","../node_modules/ml-kernel/src/kernels/laplacian-kernel.js","../node_modules/ml-kernel/src/kernels/multiquadratic-kernel.js","../node_modules/ml-kernel/src/kernels/rational-quadratic-kernel.js","../node_modules/ml-kernel/src/kernel.js","../node_modules/ml-regression-theil-sen/src/index.js","../node_modules/ml-regression-robust-polynomial/src/index.js","../node_modules/ml-levenberg-marquardt/src/errorCalculation.js","../node_modules/ml-levenberg-marquardt/src/step.js","../node_modules/ml-levenberg-marquardt/src/index.js","../node_modules/ml-fcnnls/src/util/selection.js","../node_modules/ml-fcnnls/src/util/sortCollectionSet.js","../node_modules/ml-fcnnls/src/cssls.js","../node_modules/ml-fcnnls/src/initialisation.js","../node_modules/ml-fcnnls/src/util/setDifference.js","../node_modules/ml-fcnnls/src/optimality.js","../node_modules/ml-fcnnls/src/fcnnls.js","../node_modules/ml-fcnnls/src/fcnnlsVector.js","../node_modules/binary-search/index.js","../node_modules/num-sort/index.js","../node_modules/ml-hash-table/src/primeFinder.js","../node_modules/ml-hash-table/src/HashTable.js","../node_modules/ml-sparse-matrix/src/index.js","../node_modules/ml-distance/src/distances/additiveSymmetric.js","../node_modules/ml-distance/src/distances/avg.js","../node_modules/ml-distance/src/distances/bhattacharyya.js","../node_modules/ml-distance/src/distances/canberra.js","../node_modules/ml-distance/src/distances/chebyshev.js","../node_modules/ml-distance/src/distances/clark.js","../node_modules/ml-distance/src/similarities/czekanowski.js","../node_modules/ml-distance/src/distances/czekanowski.js","../node_modules/ml-distance/src/distances/dice.js","../node_modules/ml-distance/src/distances/divergence.js","../node_modules/ml-distance/src/distances/fidelity.js","../node_modules/ml-distance/src/distances/gower.js","../node_modules/ml-distance/src/distances/harmonicMean.js","../node_modules/ml-distance/src/distances/hellinger.js","../node_modules/ml-distance/src/distances/innerProduct.js","../node_modules/ml-distance/src/distances/intersection.js","../node_modules/ml-distance/src/distances/jaccard.js","../node_modules/ml-distance/src/distances/jeffreys.js","../node_modules/ml-distance/src/distances/jensenDifference.js","../node_modules/ml-distance/src/distances/jensenShannon.js","../node_modules/ml-distance/src/distances/kdivergence.js","../node_modules/ml-distance/src/distances/kulczynski.js","../node_modules/ml-distance/src/distances/kullbackLeibler.js","../node_modules/ml-distance/src/distances/kumarHassebrook.js","../node_modules/ml-distance/src/distances/kumarJohnson.js","../node_modules/ml-distance/src/distances/lorentzian.js","../node_modules/ml-distance/src/distances/manhattan.js","../node_modules/ml-distance/src/distances/matusita.js","../node_modules/ml-distance/src/distances/minkowski.js","../node_modules/ml-distance/src/distances/motyka.js","../node_modules/ml-distance/src/distances/neyman.js","../node_modules/ml-distance/src/distances/pearson.js","../node_modules/ml-distance/src/distances/probabilisticSymmetric.js","../node_modules/ml-distance/src/distances/ruzicka.js","../node_modules/ml-distance/src/distances/soergel.js","../node_modules/ml-distance/src/distances/sorensen.js","../node_modules/ml-distance/src/distances/squared.js","../node_modules/ml-distance/src/distances/squaredChord.js","../node_modules/ml-distance/src/distances/taneja.js","../node_modules/ml-distance/src/similarities/tanimoto.js","../node_modules/ml-distance/src/distances/tanimoto.js","../node_modules/ml-distance/src/distances/topsoe.js","../node_modules/ml-distance/src/distances/waveHedges.js","../node_modules/ml-tree-similarity/src/createTree.js","../node_modules/ml-tree-similarity/src/getSimilarity.js","../node_modules/ml-tree-similarity/src/index.js","../node_modules/ml-distance/src/similarities/cosine.js","../node_modules/ml-distance/src/similarities/dice.js","../node_modules/ml-distance/src/similarities/intersection.js","../node_modules/ml-distance/src/similarities/jaccard.js","../node_modules/ml-distance/src/similarities/kulczynski.js","../node_modules/ml-distance/src/similarities/motyka.js","../node_modules/ml-distance/src/similarities/pearson.js","../node_modules/ml-distance/src/similarities/squaredChord.js","../node_modules/ml-performance/src/measures.js","../node_modules/ml-performance/src/index.js","../node_modules/ml-pad-array/src/index.js","../node_modules/ml-savitzky-golay/src/index.js","../node_modules/ml-bit-array/src/creator.js","../node_modules/ml-bit-array/src/index.js","../node_modules/ml-array-mode/lib-es6/index.js","../node_modules/ml-array-normed/lib-es6/index.js","../node_modules/ml-array-sequential-fill/lib-es6/index.js","../node_modules/ml-array-variance/lib-es6/index.js","../node_modules/ml-array-standard-deviation/lib-es6/index.js","../node_modules/ml-array-xy-centroids-merge/src/index.js","../node_modules/ml-arrayxy-closestx/src/index.js","../node_modules/ml-array-xy-max-merge/src/index.js","../node_modules/ml-array-xy-max-y/src/index.js","../node_modules/ml-array-xy-sort-x/src/index.js","../node_modules/ml-arrayxy-uniquex/src/index.js","../node_modules/ml-array-xy-weighted-merge/src/index.js","../node_modules/ml-array-xy-equally-spaced/src/integral.js","../node_modules/ml-array-xy-equally-spaced/src/equallySpacedSmooth.js","../node_modules/ml-array-xy-equally-spaced/src/equallySpacedSlot.js","../node_modules/ml-array-xy-equally-spaced/src/getZones.js","../node_modules/ml-array-xy-equally-spaced/src/index.js","../node_modules/ml-array-xy-filter-x/src/getZones.js","../node_modules/ml-array-xy-filter-x/src/index.js","../src/index.js"],"sourcesContent":["'use strict';\n\nconst toString = Object.prototype.toString;\n\nfunction isAnyArray(object) {\n return toString.call(object).endsWith('Array]');\n}\n\nmodule.exports = isAnyArray;\n","import isArray from 'is-any-array';\n\n/**\n * Computes the maximum of the given values\n * @param {Array} input\n * @return {number}\n */\n\nfunction max(input) {\n if (!isArray(input)) {\n throw new TypeError('input must be an array');\n }\n\n if (input.length === 0) {\n throw new TypeError('input must not be empty');\n }\n\n var max = input[0];\n\n for (var i = 1; i < input.length; i++) {\n if (input[i] > max) max = input[i];\n }\n\n return max;\n}\n\nexport default max;\n","import isArray from 'is-any-array';\n\n/**\n * Computes the minimum of the given values\n * @param {Array} input\n * @return {number}\n */\n\nfunction min(input) {\n if (!isArray(input)) {\n throw new TypeError('input must be an array');\n }\n\n if (input.length === 0) {\n throw new TypeError('input must not be empty');\n }\n\n var min = input[0];\n\n for (var i = 1; i < input.length; i++) {\n if (input[i] < min) min = input[i];\n }\n\n return min;\n}\n\nexport default min;\n","import max from 'ml-array-max';\nimport min from 'ml-array-min';\nimport isArray from 'is-any-array';\n\nfunction rescale(input) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n if (!isArray(input)) {\n throw new TypeError('input must be an array');\n } else if (input.length === 0) {\n throw new TypeError('input must not be empty');\n }\n\n var output;\n\n if (options.output !== undefined) {\n if (!isArray(options.output)) {\n throw new TypeError('output option must be an array if specified');\n }\n\n output = options.output;\n } else {\n output = new Array(input.length);\n }\n\n var currentMin = min(input);\n var currentMax = max(input);\n\n if (currentMin === currentMax) {\n throw new RangeError('minimum and maximum input values are equal. Cannot rescale a constant array');\n }\n\n var _options$min = options.min,\n minValue = _options$min === void 0 ? options.autoMinMax ? currentMin : 0 : _options$min,\n _options$max = options.max,\n maxValue = _options$max === void 0 ? options.autoMinMax ? currentMax : 1 : _options$max;\n\n if (minValue >= maxValue) {\n throw new RangeError('min option must be smaller than max option');\n }\n\n var factor = (maxValue - minValue) / (currentMax - currentMin);\n\n for (var i = 0; i < input.length; i++) {\n output[i] = (input[i] - currentMin) * factor + minValue;\n }\n\n return output;\n}\n\nexport default rescale;\n","/**\n * @private\n * Check that a row index is not out of bounds\n * @param {Matrix} matrix\n * @param {number} index\n * @param {boolean} [outer]\n */\nexport function checkRowIndex(matrix, index, outer) {\n let max = outer ? matrix.rows : matrix.rows - 1;\n if (index < 0 || index > max) {\n throw new RangeError('Row index out of range');\n }\n}\n\n/**\n * @private\n * Check that a column index is not out of bounds\n * @param {Matrix} matrix\n * @param {number} index\n * @param {boolean} [outer]\n */\nexport function checkColumnIndex(matrix, index, outer) {\n let max = outer ? matrix.columns : matrix.columns - 1;\n if (index < 0 || index > max) {\n throw new RangeError('Column index out of range');\n }\n}\n\n/**\n * @private\n * Check that the provided vector is an array with the right length\n * @param {Matrix} matrix\n * @param {Array|Matrix} vector\n * @return {Array}\n * @throws {RangeError}\n */\nexport function checkRowVector(matrix, vector) {\n if (vector.to1DArray) {\n vector = vector.to1DArray();\n }\n if (vector.length !== matrix.columns) {\n throw new RangeError(\n 'vector size must be the same as the number of columns',\n );\n }\n return vector;\n}\n\n/**\n * @private\n * Check that the provided vector is an array with the right length\n * @param {Matrix} matrix\n * @param {Array|Matrix} vector\n * @return {Array}\n * @throws {RangeError}\n */\nexport function checkColumnVector(matrix, vector) {\n if (vector.to1DArray) {\n vector = vector.to1DArray();\n }\n if (vector.length !== matrix.rows) {\n throw new RangeError('vector size must be the same as the number of rows');\n }\n return vector;\n}\n\nexport function checkIndices(matrix, rowIndices, columnIndices) {\n return {\n row: checkRowIndices(matrix, rowIndices),\n column: checkColumnIndices(matrix, columnIndices),\n };\n}\n\nexport function checkRowIndices(matrix, rowIndices) {\n if (typeof rowIndices !== 'object') {\n throw new TypeError('unexpected type for row indices');\n }\n\n let rowOut = rowIndices.some((r) => {\n return r < 0 || r >= matrix.rows;\n });\n\n if (rowOut) {\n throw new RangeError('row indices are out of range');\n }\n\n if (!Array.isArray(rowIndices)) rowIndices = Array.from(rowIndices);\n\n return rowIndices;\n}\n\nexport function checkColumnIndices(matrix, columnIndices) {\n if (typeof columnIndices !== 'object') {\n throw new TypeError('unexpected type for column indices');\n }\n\n let columnOut = columnIndices.some((c) => {\n return c < 0 || c >= matrix.columns;\n });\n\n if (columnOut) {\n throw new RangeError('column indices are out of range');\n }\n if (!Array.isArray(columnIndices)) columnIndices = Array.from(columnIndices);\n\n return columnIndices;\n}\n\nexport function checkRange(matrix, startRow, endRow, startColumn, endColumn) {\n if (arguments.length !== 5) {\n throw new RangeError('expected 4 arguments');\n }\n checkNumber('startRow', startRow);\n checkNumber('endRow', endRow);\n checkNumber('startColumn', startColumn);\n checkNumber('endColumn', endColumn);\n if (\n startRow > endRow ||\n startColumn > endColumn ||\n startRow < 0 ||\n startRow >= matrix.rows ||\n endRow < 0 ||\n endRow >= matrix.rows ||\n startColumn < 0 ||\n startColumn >= matrix.columns ||\n endColumn < 0 ||\n endColumn >= matrix.columns\n ) {\n throw new RangeError('Submatrix indices are out of range');\n }\n}\n\nexport function newArray(length, value = 0) {\n let array = [];\n for (let i = 0; i < length; i++) {\n array.push(value);\n }\n return array;\n}\n\nfunction checkNumber(name, value) {\n if (typeof value !== 'number') {\n throw new TypeError(`${name} must be a number`);\n }\n}\n","import { newArray } from './util';\n\nexport function sumByRow(matrix) {\n let sum = newArray(matrix.rows);\n for (let i = 0; i < matrix.rows; ++i) {\n for (let j = 0; j < matrix.columns; ++j) {\n sum[i] += matrix.get(i, j);\n }\n }\n return sum;\n}\n\nexport function sumByColumn(matrix) {\n let sum = newArray(matrix.columns);\n for (let i = 0; i < matrix.rows; ++i) {\n for (let j = 0; j < matrix.columns; ++j) {\n sum[j] += matrix.get(i, j);\n }\n }\n return sum;\n}\n\nexport function sumAll(matrix) {\n let v = 0;\n for (let i = 0; i < matrix.rows; i++) {\n for (let j = 0; j < matrix.columns; j++) {\n v += matrix.get(i, j);\n }\n }\n return v;\n}\n\nexport function productByRow(matrix) {\n let sum = newArray(matrix.rows, 1);\n for (let i = 0; i < matrix.rows; ++i) {\n for (let j = 0; j < matrix.columns; ++j) {\n sum[i] *= matrix.get(i, j);\n }\n }\n return sum;\n}\n\nexport function productByColumn(matrix) {\n let sum = newArray(matrix.columns, 1);\n for (let i = 0; i < matrix.rows; ++i) {\n for (let j = 0; j < matrix.columns; ++j) {\n sum[j] *= matrix.get(i, j);\n }\n }\n return sum;\n}\n\nexport function productAll(matrix) {\n let v = 1;\n for (let i = 0; i < matrix.rows; i++) {\n for (let j = 0; j < matrix.columns; j++) {\n v *= matrix.get(i, j);\n }\n }\n return v;\n}\n\nexport function varianceByRow(matrix, unbiased, mean) {\n const rows = matrix.rows;\n const cols = matrix.columns;\n const variance = [];\n\n for (let i = 0; i < rows; i++) {\n let sum1 = 0;\n let sum2 = 0;\n let x = 0;\n for (let j = 0; j < cols; j++) {\n x = matrix.get(i, j) - mean[i];\n sum1 += x;\n sum2 += x * x;\n }\n if (unbiased) {\n variance.push((sum2 - (sum1 * sum1) / cols) / (cols - 1));\n } else {\n variance.push((sum2 - (sum1 * sum1) / cols) / cols);\n }\n }\n return variance;\n}\n\nexport function varianceByColumn(matrix, unbiased, mean) {\n const rows = matrix.rows;\n const cols = matrix.columns;\n const variance = [];\n\n for (let j = 0; j < cols; j++) {\n let sum1 = 0;\n let sum2 = 0;\n let x = 0;\n for (let i = 0; i < rows; i++) {\n x = matrix.get(i, j) - mean[j];\n sum1 += x;\n sum2 += x * x;\n }\n if (unbiased) {\n variance.push((sum2 - (sum1 * sum1) / rows) / (rows - 1));\n } else {\n variance.push((sum2 - (sum1 * sum1) / rows) / rows);\n }\n }\n return variance;\n}\n\nexport function varianceAll(matrix, unbiased, mean) {\n const rows = matrix.rows;\n const cols = matrix.columns;\n const size = rows * cols;\n\n let sum1 = 0;\n let sum2 = 0;\n let x = 0;\n for (let i = 0; i < rows; i++) {\n for (let j = 0; j < cols; j++) {\n x = matrix.get(i, j) - mean;\n sum1 += x;\n sum2 += x * x;\n }\n }\n if (unbiased) {\n return (sum2 - (sum1 * sum1) / size) / (size - 1);\n } else {\n return (sum2 - (sum1 * sum1) / size) / size;\n }\n}\n\nexport function centerByRow(matrix, mean) {\n for (let i = 0; i < matrix.rows; i++) {\n for (let j = 0; j < matrix.columns; j++) {\n matrix.set(i, j, matrix.get(i, j) - mean[i]);\n }\n }\n}\n\nexport function centerByColumn(matrix, mean) {\n for (let i = 0; i < matrix.rows; i++) {\n for (let j = 0; j < matrix.columns; j++) {\n matrix.set(i, j, matrix.get(i, j) - mean[j]);\n }\n }\n}\n\nexport function centerAll(matrix, mean) {\n for (let i = 0; i < matrix.rows; i++) {\n for (let j = 0; j < matrix.columns; j++) {\n matrix.set(i, j, matrix.get(i, j) - mean);\n }\n }\n}\n\nexport function getScaleByRow(matrix) {\n const scale = [];\n for (let i = 0; i < matrix.rows; i++) {\n let sum = 0;\n for (let j = 0; j < matrix.columns; j++) {\n sum += Math.pow(matrix.get(i, j), 2) / (matrix.columns - 1);\n }\n scale.push(Math.sqrt(sum));\n }\n return scale;\n}\n\nexport function scaleByRow(matrix, scale) {\n for (let i = 0; i < matrix.rows; i++) {\n for (let j = 0; j < matrix.columns; j++) {\n matrix.set(i, j, matrix.get(i, j) / scale[i]);\n }\n }\n}\n\nexport function getScaleByColumn(matrix) {\n const scale = [];\n for (let j = 0; j < matrix.columns; j++) {\n let sum = 0;\n for (let i = 0; i < matrix.rows; i++) {\n sum += Math.pow(matrix.get(i, j), 2) / (matrix.rows - 1);\n }\n scale.push(Math.sqrt(sum));\n }\n return scale;\n}\n\nexport function scaleByColumn(matrix, scale) {\n for (let i = 0; i < matrix.rows; i++) {\n for (let j = 0; j < matrix.columns; j++) {\n matrix.set(i, j, matrix.get(i, j) / scale[j]);\n }\n }\n}\n\nexport function getScaleAll(matrix) {\n const divider = matrix.size - 1;\n let sum = 0;\n for (let j = 0; j < matrix.columns; j++) {\n for (let i = 0; i < matrix.rows; i++) {\n sum += Math.pow(matrix.get(i, j), 2) / divider;\n }\n }\n return Math.sqrt(sum);\n}\n\nexport function scaleAll(matrix, scale) {\n for (let i = 0; i < matrix.rows; i++) {\n for (let j = 0; j < matrix.columns; j++) {\n matrix.set(i, j, matrix.get(i, j) / scale);\n }\n }\n}\n","export function inspectMatrix() {\n const indent = ' '.repeat(2);\n const indentData = ' '.repeat(4);\n return `${this.constructor.name} {\n${indent}[\n${indentData}${inspectData(this, indentData)}\n${indent}]\n${indent}rows: ${this.rows}\n${indent}columns: ${this.columns}\n}`;\n}\n\nconst maxRows = 15;\nconst maxColumns = 10;\nconst maxNumSize = 8;\n\nfunction inspectData(matrix, indent) {\n const { rows, columns } = matrix;\n const maxI = Math.min(rows, maxRows);\n const maxJ = Math.min(columns, maxColumns);\n const result = [];\n for (let i = 0; i < maxI; i++) {\n let line = [];\n for (let j = 0; j < maxJ; j++) {\n line.push(formatNumber(matrix.get(i, j)));\n }\n result.push(`${line.join(' ')}`);\n }\n if (maxJ !== columns) {\n result[result.length - 1] += ` ... ${columns - maxColumns} more columns`;\n }\n if (maxI !== rows) {\n result.push(`... ${rows - maxRows} more rows`);\n }\n return result.join(`\\n${indent}`);\n}\n\nfunction formatNumber(num) {\n const numStr = String(num);\n if (numStr.length <= maxNumSize) {\n return numStr.padEnd(maxNumSize, ' ');\n }\n const precise = num.toPrecision(maxNumSize - 2);\n if (precise.length <= maxNumSize) {\n return precise;\n }\n const exponential = num.toExponential(maxNumSize - 2);\n const eIndex = exponential.indexOf('e');\n const e = exponential.substring(eIndex);\n return exponential.substring(0, maxNumSize - e.length) + e;\n}\n","export function installMathOperations(AbstractMatrix, Matrix) {\n AbstractMatrix.prototype.add = function add(value) {\n if (typeof value === 'number') return this.addS(value);\n return this.addM(value);\n };\n\n AbstractMatrix.prototype.addS = function addS(value) {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) + value);\n }\n }\n return this;\n };\n\n AbstractMatrix.prototype.addM = function addM(matrix) {\n matrix = Matrix.checkMatrix(matrix);\n if (this.rows !== matrix.rows ||\n this.columns !== matrix.columns) {\n throw new RangeError('Matrices dimensions must be equal');\n }\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) + matrix.get(i, j));\n }\n }\n return this;\n };\n\n AbstractMatrix.add = function add(matrix, value) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.add(value);\n };\n\n AbstractMatrix.prototype.sub = function sub(value) {\n if (typeof value === 'number') return this.subS(value);\n return this.subM(value);\n };\n\n AbstractMatrix.prototype.subS = function subS(value) {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) - value);\n }\n }\n return this;\n };\n\n AbstractMatrix.prototype.subM = function subM(matrix) {\n matrix = Matrix.checkMatrix(matrix);\n if (this.rows !== matrix.rows ||\n this.columns !== matrix.columns) {\n throw new RangeError('Matrices dimensions must be equal');\n }\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) - matrix.get(i, j));\n }\n }\n return this;\n };\n\n AbstractMatrix.sub = function sub(matrix, value) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.sub(value);\n };\n AbstractMatrix.prototype.subtract = AbstractMatrix.prototype.sub;\n AbstractMatrix.prototype.subtractS = AbstractMatrix.prototype.subS;\n AbstractMatrix.prototype.subtractM = AbstractMatrix.prototype.subM;\n AbstractMatrix.subtract = AbstractMatrix.sub;\n\n AbstractMatrix.prototype.mul = function mul(value) {\n if (typeof value === 'number') return this.mulS(value);\n return this.mulM(value);\n };\n\n AbstractMatrix.prototype.mulS = function mulS(value) {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) * value);\n }\n }\n return this;\n };\n\n AbstractMatrix.prototype.mulM = function mulM(matrix) {\n matrix = Matrix.checkMatrix(matrix);\n if (this.rows !== matrix.rows ||\n this.columns !== matrix.columns) {\n throw new RangeError('Matrices dimensions must be equal');\n }\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) * matrix.get(i, j));\n }\n }\n return this;\n };\n\n AbstractMatrix.mul = function mul(matrix, value) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.mul(value);\n };\n AbstractMatrix.prototype.multiply = AbstractMatrix.prototype.mul;\n AbstractMatrix.prototype.multiplyS = AbstractMatrix.prototype.mulS;\n AbstractMatrix.prototype.multiplyM = AbstractMatrix.prototype.mulM;\n AbstractMatrix.multiply = AbstractMatrix.mul;\n\n AbstractMatrix.prototype.div = function div(value) {\n if (typeof value === 'number') return this.divS(value);\n return this.divM(value);\n };\n\n AbstractMatrix.prototype.divS = function divS(value) {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) / value);\n }\n }\n return this;\n };\n\n AbstractMatrix.prototype.divM = function divM(matrix) {\n matrix = Matrix.checkMatrix(matrix);\n if (this.rows !== matrix.rows ||\n this.columns !== matrix.columns) {\n throw new RangeError('Matrices dimensions must be equal');\n }\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) / matrix.get(i, j));\n }\n }\n return this;\n };\n\n AbstractMatrix.div = function div(matrix, value) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.div(value);\n };\n AbstractMatrix.prototype.divide = AbstractMatrix.prototype.div;\n AbstractMatrix.prototype.divideS = AbstractMatrix.prototype.divS;\n AbstractMatrix.prototype.divideM = AbstractMatrix.prototype.divM;\n AbstractMatrix.divide = AbstractMatrix.div;\n\n AbstractMatrix.prototype.mod = function mod(value) {\n if (typeof value === 'number') return this.modS(value);\n return this.modM(value);\n };\n\n AbstractMatrix.prototype.modS = function modS(value) {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) % value);\n }\n }\n return this;\n };\n\n AbstractMatrix.prototype.modM = function modM(matrix) {\n matrix = Matrix.checkMatrix(matrix);\n if (this.rows !== matrix.rows ||\n this.columns !== matrix.columns) {\n throw new RangeError('Matrices dimensions must be equal');\n }\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) % matrix.get(i, j));\n }\n }\n return this;\n };\n\n AbstractMatrix.mod = function mod(matrix, value) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.mod(value);\n };\n AbstractMatrix.prototype.modulus = AbstractMatrix.prototype.mod;\n AbstractMatrix.prototype.modulusS = AbstractMatrix.prototype.modS;\n AbstractMatrix.prototype.modulusM = AbstractMatrix.prototype.modM;\n AbstractMatrix.modulus = AbstractMatrix.mod;\n\n AbstractMatrix.prototype.and = function and(value) {\n if (typeof value === 'number') return this.andS(value);\n return this.andM(value);\n };\n\n AbstractMatrix.prototype.andS = function andS(value) {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) & value);\n }\n }\n return this;\n };\n\n AbstractMatrix.prototype.andM = function andM(matrix) {\n matrix = Matrix.checkMatrix(matrix);\n if (this.rows !== matrix.rows ||\n this.columns !== matrix.columns) {\n throw new RangeError('Matrices dimensions must be equal');\n }\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) & matrix.get(i, j));\n }\n }\n return this;\n };\n\n AbstractMatrix.and = function and(matrix, value) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.and(value);\n };\n\n AbstractMatrix.prototype.or = function or(value) {\n if (typeof value === 'number') return this.orS(value);\n return this.orM(value);\n };\n\n AbstractMatrix.prototype.orS = function orS(value) {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) | value);\n }\n }\n return this;\n };\n\n AbstractMatrix.prototype.orM = function orM(matrix) {\n matrix = Matrix.checkMatrix(matrix);\n if (this.rows !== matrix.rows ||\n this.columns !== matrix.columns) {\n throw new RangeError('Matrices dimensions must be equal');\n }\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) | matrix.get(i, j));\n }\n }\n return this;\n };\n\n AbstractMatrix.or = function or(matrix, value) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.or(value);\n };\n\n AbstractMatrix.prototype.xor = function xor(value) {\n if (typeof value === 'number') return this.xorS(value);\n return this.xorM(value);\n };\n\n AbstractMatrix.prototype.xorS = function xorS(value) {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) ^ value);\n }\n }\n return this;\n };\n\n AbstractMatrix.prototype.xorM = function xorM(matrix) {\n matrix = Matrix.checkMatrix(matrix);\n if (this.rows !== matrix.rows ||\n this.columns !== matrix.columns) {\n throw new RangeError('Matrices dimensions must be equal');\n }\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) ^ matrix.get(i, j));\n }\n }\n return this;\n };\n\n AbstractMatrix.xor = function xor(matrix, value) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.xor(value);\n };\n\n AbstractMatrix.prototype.leftShift = function leftShift(value) {\n if (typeof value === 'number') return this.leftShiftS(value);\n return this.leftShiftM(value);\n };\n\n AbstractMatrix.prototype.leftShiftS = function leftShiftS(value) {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) << value);\n }\n }\n return this;\n };\n\n AbstractMatrix.prototype.leftShiftM = function leftShiftM(matrix) {\n matrix = Matrix.checkMatrix(matrix);\n if (this.rows !== matrix.rows ||\n this.columns !== matrix.columns) {\n throw new RangeError('Matrices dimensions must be equal');\n }\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) << matrix.get(i, j));\n }\n }\n return this;\n };\n\n AbstractMatrix.leftShift = function leftShift(matrix, value) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.leftShift(value);\n };\n\n AbstractMatrix.prototype.signPropagatingRightShift = function signPropagatingRightShift(value) {\n if (typeof value === 'number') return this.signPropagatingRightShiftS(value);\n return this.signPropagatingRightShiftM(value);\n };\n\n AbstractMatrix.prototype.signPropagatingRightShiftS = function signPropagatingRightShiftS(value) {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) >> value);\n }\n }\n return this;\n };\n\n AbstractMatrix.prototype.signPropagatingRightShiftM = function signPropagatingRightShiftM(matrix) {\n matrix = Matrix.checkMatrix(matrix);\n if (this.rows !== matrix.rows ||\n this.columns !== matrix.columns) {\n throw new RangeError('Matrices dimensions must be equal');\n }\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) >> matrix.get(i, j));\n }\n }\n return this;\n };\n\n AbstractMatrix.signPropagatingRightShift = function signPropagatingRightShift(matrix, value) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.signPropagatingRightShift(value);\n };\n\n AbstractMatrix.prototype.rightShift = function rightShift(value) {\n if (typeof value === 'number') return this.rightShiftS(value);\n return this.rightShiftM(value);\n };\n\n AbstractMatrix.prototype.rightShiftS = function rightShiftS(value) {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) >>> value);\n }\n }\n return this;\n };\n\n AbstractMatrix.prototype.rightShiftM = function rightShiftM(matrix) {\n matrix = Matrix.checkMatrix(matrix);\n if (this.rows !== matrix.rows ||\n this.columns !== matrix.columns) {\n throw new RangeError('Matrices dimensions must be equal');\n }\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) >>> matrix.get(i, j));\n }\n }\n return this;\n };\n\n AbstractMatrix.rightShift = function rightShift(matrix, value) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.rightShift(value);\n };\n AbstractMatrix.prototype.zeroFillRightShift = AbstractMatrix.prototype.rightShift;\n AbstractMatrix.prototype.zeroFillRightShiftS = AbstractMatrix.prototype.rightShiftS;\n AbstractMatrix.prototype.zeroFillRightShiftM = AbstractMatrix.prototype.rightShiftM;\n AbstractMatrix.zeroFillRightShift = AbstractMatrix.rightShift;\n\n AbstractMatrix.prototype.not = function not() {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, ~(this.get(i, j)));\n }\n }\n return this;\n };\n\n AbstractMatrix.not = function not(matrix) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.not();\n };\n\n AbstractMatrix.prototype.abs = function abs() {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, Math.abs(this.get(i, j)));\n }\n }\n return this;\n };\n\n AbstractMatrix.abs = function abs(matrix) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.abs();\n };\n\n AbstractMatrix.prototype.acos = function acos() {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, Math.acos(this.get(i, j)));\n }\n }\n return this;\n };\n\n AbstractMatrix.acos = function acos(matrix) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.acos();\n };\n\n AbstractMatrix.prototype.acosh = function acosh() {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, Math.acosh(this.get(i, j)));\n }\n }\n return this;\n };\n\n AbstractMatrix.acosh = function acosh(matrix) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.acosh();\n };\n\n AbstractMatrix.prototype.asin = function asin() {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, Math.asin(this.get(i, j)));\n }\n }\n return this;\n };\n\n AbstractMatrix.asin = function asin(matrix) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.asin();\n };\n\n AbstractMatrix.prototype.asinh = function asinh() {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, Math.asinh(this.get(i, j)));\n }\n }\n return this;\n };\n\n AbstractMatrix.asinh = function asinh(matrix) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.asinh();\n };\n\n AbstractMatrix.prototype.atan = function atan() {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, Math.atan(this.get(i, j)));\n }\n }\n return this;\n };\n\n AbstractMatrix.atan = function atan(matrix) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.atan();\n };\n\n AbstractMatrix.prototype.atanh = function atanh() {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, Math.atanh(this.get(i, j)));\n }\n }\n return this;\n };\n\n AbstractMatrix.atanh = function atanh(matrix) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.atanh();\n };\n\n AbstractMatrix.prototype.cbrt = function cbrt() {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, Math.cbrt(this.get(i, j)));\n }\n }\n return this;\n };\n\n AbstractMatrix.cbrt = function cbrt(matrix) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.cbrt();\n };\n\n AbstractMatrix.prototype.ceil = function ceil() {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, Math.ceil(this.get(i, j)));\n }\n }\n return this;\n };\n\n AbstractMatrix.ceil = function ceil(matrix) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.ceil();\n };\n\n AbstractMatrix.prototype.clz32 = function clz32() {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, Math.clz32(this.get(i, j)));\n }\n }\n return this;\n };\n\n AbstractMatrix.clz32 = function clz32(matrix) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.clz32();\n };\n\n AbstractMatrix.prototype.cos = function cos() {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, Math.cos(this.get(i, j)));\n }\n }\n return this;\n };\n\n AbstractMatrix.cos = function cos(matrix) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.cos();\n };\n\n AbstractMatrix.prototype.cosh = function cosh() {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, Math.cosh(this.get(i, j)));\n }\n }\n return this;\n };\n\n AbstractMatrix.cosh = function cosh(matrix) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.cosh();\n };\n\n AbstractMatrix.prototype.exp = function exp() {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, Math.exp(this.get(i, j)));\n }\n }\n return this;\n };\n\n AbstractMatrix.exp = function exp(matrix) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.exp();\n };\n\n AbstractMatrix.prototype.expm1 = function expm1() {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, Math.expm1(this.get(i, j)));\n }\n }\n return this;\n };\n\n AbstractMatrix.expm1 = function expm1(matrix) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.expm1();\n };\n\n AbstractMatrix.prototype.floor = function floor() {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, Math.floor(this.get(i, j)));\n }\n }\n return this;\n };\n\n AbstractMatrix.floor = function floor(matrix) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.floor();\n };\n\n AbstractMatrix.prototype.fround = function fround() {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, Math.fround(this.get(i, j)));\n }\n }\n return this;\n };\n\n AbstractMatrix.fround = function fround(matrix) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.fround();\n };\n\n AbstractMatrix.prototype.log = function log() {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, Math.log(this.get(i, j)));\n }\n }\n return this;\n };\n\n AbstractMatrix.log = function log(matrix) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.log();\n };\n\n AbstractMatrix.prototype.log1p = function log1p() {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, Math.log1p(this.get(i, j)));\n }\n }\n return this;\n };\n\n AbstractMatrix.log1p = function log1p(matrix) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.log1p();\n };\n\n AbstractMatrix.prototype.log10 = function log10() {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, Math.log10(this.get(i, j)));\n }\n }\n return this;\n };\n\n AbstractMatrix.log10 = function log10(matrix) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.log10();\n };\n\n AbstractMatrix.prototype.log2 = function log2() {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, Math.log2(this.get(i, j)));\n }\n }\n return this;\n };\n\n AbstractMatrix.log2 = function log2(matrix) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.log2();\n };\n\n AbstractMatrix.prototype.round = function round() {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, Math.round(this.get(i, j)));\n }\n }\n return this;\n };\n\n AbstractMatrix.round = function round(matrix) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.round();\n };\n\n AbstractMatrix.prototype.sign = function sign() {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, Math.sign(this.get(i, j)));\n }\n }\n return this;\n };\n\n AbstractMatrix.sign = function sign(matrix) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.sign();\n };\n\n AbstractMatrix.prototype.sin = function sin() {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, Math.sin(this.get(i, j)));\n }\n }\n return this;\n };\n\n AbstractMatrix.sin = function sin(matrix) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.sin();\n };\n\n AbstractMatrix.prototype.sinh = function sinh() {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, Math.sinh(this.get(i, j)));\n }\n }\n return this;\n };\n\n AbstractMatrix.sinh = function sinh(matrix) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.sinh();\n };\n\n AbstractMatrix.prototype.sqrt = function sqrt() {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, Math.sqrt(this.get(i, j)));\n }\n }\n return this;\n };\n\n AbstractMatrix.sqrt = function sqrt(matrix) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.sqrt();\n };\n\n AbstractMatrix.prototype.tan = function tan() {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, Math.tan(this.get(i, j)));\n }\n }\n return this;\n };\n\n AbstractMatrix.tan = function tan(matrix) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.tan();\n };\n\n AbstractMatrix.prototype.tanh = function tanh() {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, Math.tanh(this.get(i, j)));\n }\n }\n return this;\n };\n\n AbstractMatrix.tanh = function tanh(matrix) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.tanh();\n };\n\n AbstractMatrix.prototype.trunc = function trunc() {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, Math.trunc(this.get(i, j)));\n }\n }\n return this;\n };\n\n AbstractMatrix.trunc = function trunc(matrix) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.trunc();\n };\n\n AbstractMatrix.pow = function pow(matrix, arg0) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.pow(arg0);\n };\n\n AbstractMatrix.prototype.pow = function pow(value) {\n if (typeof value === 'number') return this.powS(value);\n return this.powM(value);\n };\n\n AbstractMatrix.prototype.powS = function powS(value) {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, Math.pow(this.get(i, j), value));\n }\n }\n return this;\n };\n\n AbstractMatrix.prototype.powM = function powM(matrix) {\n matrix = Matrix.checkMatrix(matrix);\n if (this.rows !== matrix.rows ||\n this.columns !== matrix.columns) {\n throw new RangeError('Matrices dimensions must be equal');\n }\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, Math.pow(this.get(i, j), matrix.get(i, j)));\n }\n }\n return this;\n };\n}\n","import rescale from 'ml-array-rescale';\n\nimport {\n checkRowVector,\n checkRowIndex,\n checkColumnIndex,\n checkColumnVector,\n checkRange,\n checkIndices,\n} from './util';\nimport {\n sumByRow,\n sumByColumn,\n sumAll,\n productByRow,\n productByColumn,\n productAll,\n varianceByRow,\n varianceByColumn,\n varianceAll,\n centerByRow,\n centerByColumn,\n centerAll,\n scaleByRow,\n scaleByColumn,\n scaleAll,\n getScaleByRow,\n getScaleByColumn,\n getScaleAll,\n} from './stat';\nimport { inspectMatrix } from './inspect';\nimport { installMathOperations } from './mathOperations';\n\nexport class AbstractMatrix {\n static from1DArray(newRows, newColumns, newData) {\n let length = newRows * newColumns;\n if (length !== newData.length) {\n throw new RangeError('data length does not match given dimensions');\n }\n let newMatrix = new Matrix(newRows, newColumns);\n for (let row = 0; row < newRows; row++) {\n for (let column = 0; column < newColumns; column++) {\n newMatrix.set(row, column, newData[row * newColumns + column]);\n }\n }\n return newMatrix;\n }\n\n static rowVector(newData) {\n let vector = new Matrix(1, newData.length);\n for (let i = 0; i < newData.length; i++) {\n vector.set(0, i, newData[i]);\n }\n return vector;\n }\n\n static columnVector(newData) {\n let vector = new Matrix(newData.length, 1);\n for (let i = 0; i < newData.length; i++) {\n vector.set(i, 0, newData[i]);\n }\n return vector;\n }\n\n static zeros(rows, columns) {\n return new Matrix(rows, columns);\n }\n\n static ones(rows, columns) {\n return new Matrix(rows, columns).fill(1);\n }\n\n static rand(rows, columns, options = {}) {\n if (typeof options !== 'object') {\n throw new TypeError('options must be an object');\n }\n const { random = Math.random } = options;\n let matrix = new Matrix(rows, columns);\n for (let i = 0; i < rows; i++) {\n for (let j = 0; j < columns; j++) {\n matrix.set(i, j, random());\n }\n }\n return matrix;\n }\n\n static randInt(rows, columns, options = {}) {\n if (typeof options !== 'object') {\n throw new TypeError('options must be an object');\n }\n const { min = 0, max = 1000, random = Math.random } = options;\n if (!Number.isInteger(min)) throw new TypeError('min must be an integer');\n if (!Number.isInteger(max)) throw new TypeError('max must be an integer');\n if (min >= max) throw new RangeError('min must be smaller than max');\n let interval = max - min;\n let matrix = new Matrix(rows, columns);\n for (let i = 0; i < rows; i++) {\n for (let j = 0; j < columns; j++) {\n let value = min + Math.round(random() * interval);\n matrix.set(i, j, value);\n }\n }\n return matrix;\n }\n\n static eye(rows, columns, value) {\n if (columns === undefined) columns = rows;\n if (value === undefined) value = 1;\n let min = Math.min(rows, columns);\n let matrix = this.zeros(rows, columns);\n for (let i = 0; i < min; i++) {\n matrix.set(i, i, value);\n }\n return matrix;\n }\n\n static diag(data, rows, columns) {\n let l = data.length;\n if (rows === undefined) rows = l;\n if (columns === undefined) columns = rows;\n let min = Math.min(l, rows, columns);\n let matrix = this.zeros(rows, columns);\n for (let i = 0; i < min; i++) {\n matrix.set(i, i, data[i]);\n }\n return matrix;\n }\n\n static min(matrix1, matrix2) {\n matrix1 = this.checkMatrix(matrix1);\n matrix2 = this.checkMatrix(matrix2);\n let rows = matrix1.rows;\n let columns = matrix1.columns;\n let result = new Matrix(rows, columns);\n for (let i = 0; i < rows; i++) {\n for (let j = 0; j < columns; j++) {\n result.set(i, j, Math.min(matrix1.get(i, j), matrix2.get(i, j)));\n }\n }\n return result;\n }\n\n static max(matrix1, matrix2) {\n matrix1 = this.checkMatrix(matrix1);\n matrix2 = this.checkMatrix(matrix2);\n let rows = matrix1.rows;\n let columns = matrix1.columns;\n let result = new this(rows, columns);\n for (let i = 0; i < rows; i++) {\n for (let j = 0; j < columns; j++) {\n result.set(i, j, Math.max(matrix1.get(i, j), matrix2.get(i, j)));\n }\n }\n return result;\n }\n\n static checkMatrix(value) {\n return AbstractMatrix.isMatrix(value) ? value : new Matrix(value);\n }\n\n static isMatrix(value) {\n return value != null && value.klass === 'Matrix';\n }\n\n get size() {\n return this.rows * this.columns;\n }\n\n apply(callback) {\n if (typeof callback !== 'function') {\n throw new TypeError('callback must be a function');\n }\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n callback.call(this, i, j);\n }\n }\n return this;\n }\n\n to1DArray() {\n let array = [];\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n array.push(this.get(i, j));\n }\n }\n return array;\n }\n\n to2DArray() {\n let copy = [];\n for (let i = 0; i < this.rows; i++) {\n copy.push([]);\n for (let j = 0; j < this.columns; j++) {\n copy[i].push(this.get(i, j));\n }\n }\n return copy;\n }\n\n toJSON() {\n return this.to2DArray();\n }\n\n isRowVector() {\n return this.rows === 1;\n }\n\n isColumnVector() {\n return this.columns === 1;\n }\n\n isVector() {\n return this.rows === 1 || this.columns === 1;\n }\n\n isSquare() {\n return this.rows === this.columns;\n }\n\n isSymmetric() {\n if (this.isSquare()) {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j <= i; j++) {\n if (this.get(i, j) !== this.get(j, i)) {\n return false;\n }\n }\n }\n return true;\n }\n return false;\n }\n\n isEchelonForm() {\n let i = 0;\n let j = 0;\n let previousColumn = -1;\n let isEchelonForm = true;\n let checked = false;\n while (i < this.rows && isEchelonForm) {\n j = 0;\n checked = false;\n while (j < this.columns && checked === false) {\n if (this.get(i, j) === 0) {\n j++;\n } else if (this.get(i, j) === 1 && j > previousColumn) {\n checked = true;\n previousColumn = j;\n } else {\n isEchelonForm = false;\n checked = true;\n }\n }\n i++;\n }\n return isEchelonForm;\n }\n\n isReducedEchelonForm() {\n let i = 0;\n let j = 0;\n let previousColumn = -1;\n let isReducedEchelonForm = true;\n let checked = false;\n while (i < this.rows && isReducedEchelonForm) {\n j = 0;\n checked = false;\n while (j < this.columns && checked === false) {\n if (this.get(i, j) === 0) {\n j++;\n } else if (this.get(i, j) === 1 && j > previousColumn) {\n checked = true;\n previousColumn = j;\n } else {\n isReducedEchelonForm = false;\n checked = true;\n }\n }\n for (let k = j + 1; k < this.rows; k++) {\n if (this.get(i, k) !== 0) {\n isReducedEchelonForm = false;\n }\n }\n i++;\n }\n return isReducedEchelonForm;\n }\n\n echelonForm() {\n let result = this.clone();\n let h = 0;\n let k = 0;\n while (h < result.rows && k < result.columns) {\n let iMax = h;\n for (let i = h; i < result.rows; i++) {\n if (result.get(i, k) > result.get(iMax, k)) {\n iMax = i;\n }\n }\n if (result.get(iMax, k) === 0) {\n k++;\n } else {\n result.swapRows(h, iMax);\n let tmp = result.get(h, k);\n for (let j = k; j < result.columns; j++) {\n result.set(h, j, result.get(h, j) / tmp);\n }\n for (let i = h + 1; i < result.rows; i++) {\n let factor = result.get(i, k) / result.get(h, k);\n result.set(i, k, 0);\n for (let j = k + 1; j < result.columns; j++) {\n result.set(i, j, result.get(i, j) - result.get(h, j) * factor);\n }\n }\n h++;\n k++;\n }\n }\n return result;\n }\n\n reducedEchelonForm() {\n let result = this.echelonForm();\n let m = result.columns;\n let n = result.rows;\n let h = n - 1;\n while (h >= 0) {\n if (result.maxRow(h) === 0) {\n h--;\n } else {\n let p = 0;\n let pivot = false;\n while (p < n && pivot === false) {\n if (result.get(h, p) === 1) {\n pivot = true;\n } else {\n p++;\n }\n }\n for (let i = 0; i < h; i++) {\n let factor = result.get(i, p);\n for (let j = p; j < m; j++) {\n let tmp = result.get(i, j) - factor * result.get(h, j);\n result.set(i, j, tmp);\n }\n }\n h--;\n }\n }\n return result;\n }\n\n set() {\n throw new Error('set method is unimplemented');\n }\n\n get() {\n throw new Error('get method is unimplemented');\n }\n\n repeat(options = {}) {\n if (typeof options !== 'object') {\n throw new TypeError('options must be an object');\n }\n const { rows = 1, columns = 1 } = options;\n if (!Number.isInteger(rows) || rows <= 0) {\n throw new TypeError('rows must be a positive integer');\n }\n if (!Number.isInteger(columns) || columns <= 0) {\n throw new TypeError('columns must be a positive integer');\n }\n let matrix = new Matrix(this.rows * rows, this.columns * columns);\n for (let i = 0; i < rows; i++) {\n for (let j = 0; j < columns; j++) {\n matrix.setSubMatrix(this, this.rows * i, this.columns * j);\n }\n }\n return matrix;\n }\n\n fill(value) {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, value);\n }\n }\n return this;\n }\n\n neg() {\n return this.mulS(-1);\n }\n\n getRow(index) {\n checkRowIndex(this, index);\n let row = [];\n for (let i = 0; i < this.columns; i++) {\n row.push(this.get(index, i));\n }\n return row;\n }\n\n getRowVector(index) {\n return Matrix.rowVector(this.getRow(index));\n }\n\n setRow(index, array) {\n checkRowIndex(this, index);\n array = checkRowVector(this, array);\n for (let i = 0; i < this.columns; i++) {\n this.set(index, i, array[i]);\n }\n return this;\n }\n\n swapRows(row1, row2) {\n checkRowIndex(this, row1);\n checkRowIndex(this, row2);\n for (let i = 0; i < this.columns; i++) {\n let temp = this.get(row1, i);\n this.set(row1, i, this.get(row2, i));\n this.set(row2, i, temp);\n }\n return this;\n }\n\n getColumn(index) {\n checkColumnIndex(this, index);\n let column = [];\n for (let i = 0; i < this.rows; i++) {\n column.push(this.get(i, index));\n }\n return column;\n }\n\n getColumnVector(index) {\n return Matrix.columnVector(this.getColumn(index));\n }\n\n setColumn(index, array) {\n checkColumnIndex(this, index);\n array = checkColumnVector(this, array);\n for (let i = 0; i < this.rows; i++) {\n this.set(i, index, array[i]);\n }\n return this;\n }\n\n swapColumns(column1, column2) {\n checkColumnIndex(this, column1);\n checkColumnIndex(this, column2);\n for (let i = 0; i < this.rows; i++) {\n let temp = this.get(i, column1);\n this.set(i, column1, this.get(i, column2));\n this.set(i, column2, temp);\n }\n return this;\n }\n\n addRowVector(vector) {\n vector = checkRowVector(this, vector);\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) + vector[j]);\n }\n }\n return this;\n }\n\n subRowVector(vector) {\n vector = checkRowVector(this, vector);\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) - vector[j]);\n }\n }\n return this;\n }\n\n mulRowVector(vector) {\n vector = checkRowVector(this, vector);\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) * vector[j]);\n }\n }\n return this;\n }\n\n divRowVector(vector) {\n vector = checkRowVector(this, vector);\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) / vector[j]);\n }\n }\n return this;\n }\n\n addColumnVector(vector) {\n vector = checkColumnVector(this, vector);\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) + vector[i]);\n }\n }\n return this;\n }\n\n subColumnVector(vector) {\n vector = checkColumnVector(this, vector);\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) - vector[i]);\n }\n }\n return this;\n }\n\n mulColumnVector(vector) {\n vector = checkColumnVector(this, vector);\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) * vector[i]);\n }\n }\n return this;\n }\n\n divColumnVector(vector) {\n vector = checkColumnVector(this, vector);\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) / vector[i]);\n }\n }\n return this;\n }\n\n mulRow(index, value) {\n checkRowIndex(this, index);\n for (let i = 0; i < this.columns; i++) {\n this.set(index, i, this.get(index, i) * value);\n }\n return this;\n }\n\n mulColumn(index, value) {\n checkColumnIndex(this, index);\n for (let i = 0; i < this.rows; i++) {\n this.set(i, index, this.get(i, index) * value);\n }\n return this;\n }\n\n max() {\n let v = this.get(0, 0);\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n if (this.get(i, j) > v) {\n v = this.get(i, j);\n }\n }\n }\n return v;\n }\n\n maxIndex() {\n let v = this.get(0, 0);\n let idx = [0, 0];\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n if (this.get(i, j) > v) {\n v = this.get(i, j);\n idx[0] = i;\n idx[1] = j;\n }\n }\n }\n return idx;\n }\n\n min() {\n let v = this.get(0, 0);\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n if (this.get(i, j) < v) {\n v = this.get(i, j);\n }\n }\n }\n return v;\n }\n\n minIndex() {\n let v = this.get(0, 0);\n let idx = [0, 0];\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n if (this.get(i, j) < v) {\n v = this.get(i, j);\n idx[0] = i;\n idx[1] = j;\n }\n }\n }\n return idx;\n }\n\n maxRow(row) {\n checkRowIndex(this, row);\n let v = this.get(row, 0);\n for (let i = 1; i < this.columns; i++) {\n if (this.get(row, i) > v) {\n v = this.get(row, i);\n }\n }\n return v;\n }\n\n maxRowIndex(row) {\n checkRowIndex(this, row);\n let v = this.get(row, 0);\n let idx = [row, 0];\n for (let i = 1; i < this.columns; i++) {\n if (this.get(row, i) > v) {\n v = this.get(row, i);\n idx[1] = i;\n }\n }\n return idx;\n }\n\n minRow(row) {\n checkRowIndex(this, row);\n let v = this.get(row, 0);\n for (let i = 1; i < this.columns; i++) {\n if (this.get(row, i) < v) {\n v = this.get(row, i);\n }\n }\n return v;\n }\n\n minRowIndex(row) {\n checkRowIndex(this, row);\n let v = this.get(row, 0);\n let idx = [row, 0];\n for (let i = 1; i < this.columns; i++) {\n if (this.get(row, i) < v) {\n v = this.get(row, i);\n idx[1] = i;\n }\n }\n return idx;\n }\n\n maxColumn(column) {\n checkColumnIndex(this, column);\n let v = this.get(0, column);\n for (let i = 1; i < this.rows; i++) {\n if (this.get(i, column) > v) {\n v = this.get(i, column);\n }\n }\n return v;\n }\n\n maxColumnIndex(column) {\n checkColumnIndex(this, column);\n let v = this.get(0, column);\n let idx = [0, column];\n for (let i = 1; i < this.rows; i++) {\n if (this.get(i, column) > v) {\n v = this.get(i, column);\n idx[0] = i;\n }\n }\n return idx;\n }\n\n minColumn(column) {\n checkColumnIndex(this, column);\n let v = this.get(0, column);\n for (let i = 1; i < this.rows; i++) {\n if (this.get(i, column) < v) {\n v = this.get(i, column);\n }\n }\n return v;\n }\n\n minColumnIndex(column) {\n checkColumnIndex(this, column);\n let v = this.get(0, column);\n let idx = [0, column];\n for (let i = 1; i < this.rows; i++) {\n if (this.get(i, column) < v) {\n v = this.get(i, column);\n idx[0] = i;\n }\n }\n return idx;\n }\n\n diag() {\n let min = Math.min(this.rows, this.columns);\n let diag = [];\n for (let i = 0; i < min; i++) {\n diag.push(this.get(i, i));\n }\n return diag;\n }\n\n norm(type = 'frobenius') {\n let result = 0;\n if (type === 'max') {\n return this.max();\n } else if (type === 'frobenius') {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n result = result + this.get(i, j) * this.get(i, j);\n }\n }\n return Math.sqrt(result);\n } else {\n throw new RangeError(`unknown norm type: ${type}`);\n }\n }\n\n cumulativeSum() {\n let sum = 0;\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n sum += this.get(i, j);\n this.set(i, j, sum);\n }\n }\n return this;\n }\n\n dot(vector2) {\n if (AbstractMatrix.isMatrix(vector2)) vector2 = vector2.to1DArray();\n let vector1 = this.to1DArray();\n if (vector1.length !== vector2.length) {\n throw new RangeError('vectors do not have the same size');\n }\n let dot = 0;\n for (let i = 0; i < vector1.length; i++) {\n dot += vector1[i] * vector2[i];\n }\n return dot;\n }\n\n mmul(other) {\n other = Matrix.checkMatrix(other);\n\n let m = this.rows;\n let n = this.columns;\n let p = other.columns;\n\n let result = new Matrix(m, p);\n\n let Bcolj = new Float64Array(n);\n for (let j = 0; j < p; j++) {\n for (let k = 0; k < n; k++) {\n Bcolj[k] = other.get(k, j);\n }\n\n for (let i = 0; i < m; i++) {\n let s = 0;\n for (let k = 0; k < n; k++) {\n s += this.get(i, k) * Bcolj[k];\n }\n\n result.set(i, j, s);\n }\n }\n return result;\n }\n\n strassen2x2(other) {\n other = Matrix.checkMatrix(other);\n let result = new Matrix(2, 2);\n const a11 = this.get(0, 0);\n const b11 = other.get(0, 0);\n const a12 = this.get(0, 1);\n const b12 = other.get(0, 1);\n const a21 = this.get(1, 0);\n const b21 = other.get(1, 0);\n const a22 = this.get(1, 1);\n const b22 = other.get(1, 1);\n\n // Compute intermediate values.\n const m1 = (a11 + a22) * (b11 + b22);\n const m2 = (a21 + a22) * b11;\n const m3 = a11 * (b12 - b22);\n const m4 = a22 * (b21 - b11);\n const m5 = (a11 + a12) * b22;\n const m6 = (a21 - a11) * (b11 + b12);\n const m7 = (a12 - a22) * (b21 + b22);\n\n // Combine intermediate values into the output.\n const c00 = m1 + m4 - m5 + m7;\n const c01 = m3 + m5;\n const c10 = m2 + m4;\n const c11 = m1 - m2 + m3 + m6;\n\n result.set(0, 0, c00);\n result.set(0, 1, c01);\n result.set(1, 0, c10);\n result.set(1, 1, c11);\n return result;\n }\n\n strassen3x3(other) {\n other = Matrix.checkMatrix(other);\n let result = new Matrix(3, 3);\n\n const a00 = this.get(0, 0);\n const a01 = this.get(0, 1);\n const a02 = this.get(0, 2);\n const a10 = this.get(1, 0);\n const a11 = this.get(1, 1);\n const a12 = this.get(1, 2);\n const a20 = this.get(2, 0);\n const a21 = this.get(2, 1);\n const a22 = this.get(2, 2);\n\n const b00 = other.get(0, 0);\n const b01 = other.get(0, 1);\n const b02 = other.get(0, 2);\n const b10 = other.get(1, 0);\n const b11 = other.get(1, 1);\n const b12 = other.get(1, 2);\n const b20 = other.get(2, 0);\n const b21 = other.get(2, 1);\n const b22 = other.get(2, 2);\n\n const m1 = (a00 + a01 + a02 - a10 - a11 - a21 - a22) * b11;\n const m2 = (a00 - a10) * (-b01 + b11);\n const m3 = a11 * (-b00 + b01 + b10 - b11 - b12 - b20 + b22);\n const m4 = (-a00 + a10 + a11) * (b00 - b01 + b11);\n const m5 = (a10 + a11) * (-b00 + b01);\n const m6 = a00 * b00;\n const m7 = (-a00 + a20 + a21) * (b00 - b02 + b12);\n const m8 = (-a00 + a20) * (b02 - b12);\n const m9 = (a20 + a21) * (-b00 + b02);\n const m10 = (a00 + a01 + a02 - a11 - a12 - a20 - a21) * b12;\n const m11 = a21 * (-b00 + b02 + b10 - b11 - b12 - b20 + b21);\n const m12 = (-a02 + a21 + a22) * (b11 + b20 - b21);\n const m13 = (a02 - a22) * (b11 - b21);\n const m14 = a02 * b20;\n const m15 = (a21 + a22) * (-b20 + b21);\n const m16 = (-a02 + a11 + a12) * (b12 + b20 - b22);\n const m17 = (a02 - a12) * (b12 - b22);\n const m18 = (a11 + a12) * (-b20 + b22);\n const m19 = a01 * b10;\n const m20 = a12 * b21;\n const m21 = a10 * b02;\n const m22 = a20 * b01;\n const m23 = a22 * b22;\n\n const c00 = m6 + m14 + m19;\n const c01 = m1 + m4 + m5 + m6 + m12 + m14 + m15;\n const c02 = m6 + m7 + m9 + m10 + m14 + m16 + m18;\n const c10 = m2 + m3 + m4 + m6 + m14 + m16 + m17;\n const c11 = m2 + m4 + m5 + m6 + m20;\n const c12 = m14 + m16 + m17 + m18 + m21;\n const c20 = m6 + m7 + m8 + m11 + m12 + m13 + m14;\n const c21 = m12 + m13 + m14 + m15 + m22;\n const c22 = m6 + m7 + m8 + m9 + m23;\n\n result.set(0, 0, c00);\n result.set(0, 1, c01);\n result.set(0, 2, c02);\n result.set(1, 0, c10);\n result.set(1, 1, c11);\n result.set(1, 2, c12);\n result.set(2, 0, c20);\n result.set(2, 1, c21);\n result.set(2, 2, c22);\n return result;\n }\n\n mmulStrassen(y) {\n y = Matrix.checkMatrix(y);\n let x = this.clone();\n let r1 = x.rows;\n let c1 = x.columns;\n let r2 = y.rows;\n let c2 = y.columns;\n if (c1 !== r2) {\n // eslint-disable-next-line no-console\n console.warn(\n `Multiplying ${r1} x ${c1} and ${r2} x ${c2} matrix: dimensions do not match.`,\n );\n }\n\n // Put a matrix into the top left of a matrix of zeros.\n // `rows` and `cols` are the dimensions of the output matrix.\n function embed(mat, rows, cols) {\n let r = mat.rows;\n let c = mat.columns;\n if (r === rows && c === cols) {\n return mat;\n } else {\n let resultat = AbstractMatrix.zeros(rows, cols);\n resultat = resultat.setSubMatrix(mat, 0, 0);\n return resultat;\n }\n }\n\n // Make sure both matrices are the same size.\n // This is exclusively for simplicity:\n // this algorithm can be implemented with matrices of different sizes.\n\n let r = Math.max(r1, r2);\n let c = Math.max(c1, c2);\n x = embed(x, r, c);\n y = embed(y, r, c);\n\n // Our recursive multiplication function.\n function blockMult(a, b, rows, cols) {\n // For small matrices, resort to naive multiplication.\n if (rows <= 512 || cols <= 512) {\n return a.mmul(b); // a is equivalent to this\n }\n\n // Apply dynamic padding.\n if (rows % 2 === 1 && cols % 2 === 1) {\n a = embed(a, rows + 1, cols + 1);\n b = embed(b, rows + 1, cols + 1);\n } else if (rows % 2 === 1) {\n a = embed(a, rows + 1, cols);\n b = embed(b, rows + 1, cols);\n } else if (cols % 2 === 1) {\n a = embed(a, rows, cols + 1);\n b = embed(b, rows, cols + 1);\n }\n\n let halfRows = parseInt(a.rows / 2, 10);\n let halfCols = parseInt(a.columns / 2, 10);\n // Subdivide input matrices.\n let a11 = a.subMatrix(0, halfRows - 1, 0, halfCols - 1);\n let b11 = b.subMatrix(0, halfRows - 1, 0, halfCols - 1);\n\n let a12 = a.subMatrix(0, halfRows - 1, halfCols, a.columns - 1);\n let b12 = b.subMatrix(0, halfRows - 1, halfCols, b.columns - 1);\n\n let a21 = a.subMatrix(halfRows, a.rows - 1, 0, halfCols - 1);\n let b21 = b.subMatrix(halfRows, b.rows - 1, 0, halfCols - 1);\n\n let a22 = a.subMatrix(halfRows, a.rows - 1, halfCols, a.columns - 1);\n let b22 = b.subMatrix(halfRows, b.rows - 1, halfCols, b.columns - 1);\n\n // Compute intermediate values.\n let m1 = blockMult(\n AbstractMatrix.add(a11, a22),\n AbstractMatrix.add(b11, b22),\n halfRows,\n halfCols,\n );\n let m2 = blockMult(AbstractMatrix.add(a21, a22), b11, halfRows, halfCols);\n let m3 = blockMult(a11, AbstractMatrix.sub(b12, b22), halfRows, halfCols);\n let m4 = blockMult(a22, AbstractMatrix.sub(b21, b11), halfRows, halfCols);\n let m5 = blockMult(AbstractMatrix.add(a11, a12), b22, halfRows, halfCols);\n let m6 = blockMult(\n AbstractMatrix.sub(a21, a11),\n AbstractMatrix.add(b11, b12),\n halfRows,\n halfCols,\n );\n let m7 = blockMult(\n AbstractMatrix.sub(a12, a22),\n AbstractMatrix.add(b21, b22),\n halfRows,\n halfCols,\n );\n\n // Combine intermediate values into the output.\n let c11 = AbstractMatrix.add(m1, m4);\n c11.sub(m5);\n c11.add(m7);\n let c12 = AbstractMatrix.add(m3, m5);\n let c21 = AbstractMatrix.add(m2, m4);\n let c22 = AbstractMatrix.sub(m1, m2);\n c22.add(m3);\n c22.add(m6);\n\n // Crop output to the desired size (undo dynamic padding).\n let resultat = AbstractMatrix.zeros(2 * c11.rows, 2 * c11.columns);\n resultat = resultat.setSubMatrix(c11, 0, 0);\n resultat = resultat.setSubMatrix(c12, c11.rows, 0);\n resultat = resultat.setSubMatrix(c21, 0, c11.columns);\n resultat = resultat.setSubMatrix(c22, c11.rows, c11.columns);\n return resultat.subMatrix(0, rows - 1, 0, cols - 1);\n }\n return blockMult(x, y, r, c);\n }\n\n scaleRows(options = {}) {\n if (typeof options !== 'object') {\n throw new TypeError('options must be an object');\n }\n const { min = 0, max = 1 } = options;\n if (!Number.isFinite(min)) throw new TypeError('min must be a number');\n if (!Number.isFinite(max)) throw new TypeError('max must be a number');\n if (min >= max) throw new RangeError('min must be smaller than max');\n let newMatrix = new Matrix(this.rows, this.columns);\n for (let i = 0; i < this.rows; i++) {\n const row = this.getRow(i);\n rescale(row, { min, max, output: row });\n newMatrix.setRow(i, row);\n }\n return newMatrix;\n }\n\n scaleColumns(options = {}) {\n if (typeof options !== 'object') {\n throw new TypeError('options must be an object');\n }\n const { min = 0, max = 1 } = options;\n if (!Number.isFinite(min)) throw new TypeError('min must be a number');\n if (!Number.isFinite(max)) throw new TypeError('max must be a number');\n if (min >= max) throw new RangeError('min must be smaller than max');\n let newMatrix = new Matrix(this.rows, this.columns);\n for (let i = 0; i < this.columns; i++) {\n const column = this.getColumn(i);\n rescale(column, {\n min: min,\n max: max,\n output: column,\n });\n newMatrix.setColumn(i, column);\n }\n return newMatrix;\n }\n\n flipRows() {\n const middle = Math.ceil(this.columns / 2);\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < middle; j++) {\n let first = this.get(i, j);\n let last = this.get(i, this.columns - 1 - j);\n this.set(i, j, last);\n this.set(i, this.columns - 1 - j, first);\n }\n }\n return this;\n }\n\n flipColumns() {\n const middle = Math.ceil(this.rows / 2);\n for (let j = 0; j < this.columns; j++) {\n for (let i = 0; i < middle; i++) {\n let first = this.get(i, j);\n let last = this.get(this.rows - 1 - i, j);\n this.set(i, j, last);\n this.set(this.rows - 1 - i, j, first);\n }\n }\n return this;\n }\n\n kroneckerProduct(other) {\n other = Matrix.checkMatrix(other);\n\n let m = this.rows;\n let n = this.columns;\n let p = other.rows;\n let q = other.columns;\n\n let result = new Matrix(m * p, n * q);\n for (let i = 0; i < m; i++) {\n for (let j = 0; j < n; j++) {\n for (let k = 0; k < p; k++) {\n for (let l = 0; l < q; l++) {\n result.set(p * i + k, q * j + l, this.get(i, j) * other.get(k, l));\n }\n }\n }\n }\n return result;\n }\n\n transpose() {\n let result = new Matrix(this.columns, this.rows);\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n result.set(j, i, this.get(i, j));\n }\n }\n return result;\n }\n\n sortRows(compareFunction = compareNumbers) {\n for (let i = 0; i < this.rows; i++) {\n this.setRow(i, this.getRow(i).sort(compareFunction));\n }\n return this;\n }\n\n sortColumns(compareFunction = compareNumbers) {\n for (let i = 0; i < this.columns; i++) {\n this.setColumn(i, this.getColumn(i).sort(compareFunction));\n }\n return this;\n }\n\n subMatrix(startRow, endRow, startColumn, endColumn) {\n checkRange(this, startRow, endRow, startColumn, endColumn);\n let newMatrix = new Matrix(\n endRow - startRow + 1,\n endColumn - startColumn + 1,\n );\n for (let i = startRow; i <= endRow; i++) {\n for (let j = startColumn; j <= endColumn; j++) {\n newMatrix.set(i - startRow, j - startColumn, this.get(i, j));\n }\n }\n return newMatrix;\n }\n\n subMatrixRow(indices, startColumn, endColumn) {\n if (startColumn === undefined) startColumn = 0;\n if (endColumn === undefined) endColumn = this.columns - 1;\n if (\n startColumn > endColumn ||\n startColumn < 0 ||\n startColumn >= this.columns ||\n endColumn < 0 ||\n endColumn >= this.columns\n ) {\n throw new RangeError('Argument out of range');\n }\n\n let newMatrix = new Matrix(indices.length, endColumn - startColumn + 1);\n for (let i = 0; i < indices.length; i++) {\n for (let j = startColumn; j <= endColumn; j++) {\n if (indices[i] < 0 || indices[i] >= this.rows) {\n throw new RangeError(`Row index out of range: ${indices[i]}`);\n }\n newMatrix.set(i, j - startColumn, this.get(indices[i], j));\n }\n }\n return newMatrix;\n }\n\n subMatrixColumn(indices, startRow, endRow) {\n if (startRow === undefined) startRow = 0;\n if (endRow === undefined) endRow = this.rows - 1;\n if (\n startRow > endRow ||\n startRow < 0 ||\n startRow >= this.rows ||\n endRow < 0 ||\n endRow >= this.rows\n ) {\n throw new RangeError('Argument out of range');\n }\n\n let newMatrix = new Matrix(endRow - startRow + 1, indices.length);\n for (let i = 0; i < indices.length; i++) {\n for (let j = startRow; j <= endRow; j++) {\n if (indices[i] < 0 || indices[i] >= this.columns) {\n throw new RangeError(`Column index out of range: ${indices[i]}`);\n }\n newMatrix.set(j - startRow, i, this.get(j, indices[i]));\n }\n }\n return newMatrix;\n }\n\n setSubMatrix(matrix, startRow, startColumn) {\n matrix = Matrix.checkMatrix(matrix);\n let endRow = startRow + matrix.rows - 1;\n let endColumn = startColumn + matrix.columns - 1;\n checkRange(this, startRow, endRow, startColumn, endColumn);\n for (let i = 0; i < matrix.rows; i++) {\n for (let j = 0; j < matrix.columns; j++) {\n this.set(startRow + i, startColumn + j, matrix.get(i, j));\n }\n }\n return this;\n }\n\n selection(rowIndices, columnIndices) {\n let indices = checkIndices(this, rowIndices, columnIndices);\n let newMatrix = new Matrix(rowIndices.length, columnIndices.length);\n for (let i = 0; i < indices.row.length; i++) {\n let rowIndex = indices.row[i];\n for (let j = 0; j < indices.column.length; j++) {\n let columnIndex = indices.column[j];\n newMatrix.set(i, j, this.get(rowIndex, columnIndex));\n }\n }\n return newMatrix;\n }\n\n trace() {\n let min = Math.min(this.rows, this.columns);\n let trace = 0;\n for (let i = 0; i < min; i++) {\n trace += this.get(i, i);\n }\n return trace;\n }\n\n clone() {\n let newMatrix = new Matrix(this.rows, this.columns);\n for (let row = 0; row < this.rows; row++) {\n for (let column = 0; column < this.columns; column++) {\n newMatrix.set(row, column, this.get(row, column));\n }\n }\n return newMatrix;\n }\n\n sum(by) {\n switch (by) {\n case 'row':\n return sumByRow(this);\n case 'column':\n return sumByColumn(this);\n case undefined:\n return sumAll(this);\n default:\n throw new Error(`invalid option: ${by}`);\n }\n }\n\n product(by) {\n switch (by) {\n case 'row':\n return productByRow(this);\n case 'column':\n return productByColumn(this);\n case undefined:\n return productAll(this);\n default:\n throw new Error(`invalid option: ${by}`);\n }\n }\n\n mean(by) {\n const sum = this.sum(by);\n switch (by) {\n case 'row': {\n for (let i = 0; i < this.rows; i++) {\n sum[i] /= this.columns;\n }\n return sum;\n }\n case 'column': {\n for (let i = 0; i < this.columns; i++) {\n sum[i] /= this.rows;\n }\n return sum;\n }\n case undefined:\n return sum / this.size;\n default:\n throw new Error(`invalid option: ${by}`);\n }\n }\n\n variance(by, options = {}) {\n if (typeof by === 'object') {\n options = by;\n by = undefined;\n }\n if (typeof options !== 'object') {\n throw new TypeError('options must be an object');\n }\n const { unbiased = true, mean = this.mean(by) } = options;\n if (typeof unbiased !== 'boolean') {\n throw new TypeError('unbiased must be a boolean');\n }\n switch (by) {\n case 'row': {\n if (!Array.isArray(mean)) {\n throw new TypeError('mean must be an array');\n }\n return varianceByRow(this, unbiased, mean);\n }\n case 'column': {\n if (!Array.isArray(mean)) {\n throw new TypeError('mean must be an array');\n }\n return varianceByColumn(this, unbiased, mean);\n }\n case undefined: {\n if (typeof mean !== 'number') {\n throw new TypeError('mean must be a number');\n }\n return varianceAll(this, unbiased, mean);\n }\n default:\n throw new Error(`invalid option: ${by}`);\n }\n }\n\n standardDeviation(by, options) {\n if (typeof by === 'object') {\n options = by;\n by = undefined;\n }\n const variance = this.variance(by, options);\n if (by === undefined) {\n return Math.sqrt(variance);\n } else {\n for (let i = 0; i < variance.length; i++) {\n variance[i] = Math.sqrt(variance[i]);\n }\n return variance;\n }\n }\n\n center(by, options = {}) {\n if (typeof by === 'object') {\n options = by;\n by = undefined;\n }\n if (typeof options !== 'object') {\n throw new TypeError('options must be an object');\n }\n const { center = this.mean(by) } = options;\n switch (by) {\n case 'row': {\n if (!Array.isArray(center)) {\n throw new TypeError('center must be an array');\n }\n centerByRow(this, center);\n return this;\n }\n case 'column': {\n if (!Array.isArray(center)) {\n throw new TypeError('center must be an array');\n }\n centerByColumn(this, center);\n return this;\n }\n case undefined: {\n if (typeof center !== 'number') {\n throw new TypeError('center must be a number');\n }\n centerAll(this, center);\n return this;\n }\n default:\n throw new Error(`invalid option: ${by}`);\n }\n }\n\n scale(by, options = {}) {\n if (typeof by === 'object') {\n options = by;\n by = undefined;\n }\n if (typeof options !== 'object') {\n throw new TypeError('options must be an object');\n }\n let scale = options.scale;\n switch (by) {\n case 'row': {\n if (scale === undefined) {\n scale = getScaleByRow(this);\n } else if (!Array.isArray(scale)) {\n throw new TypeError('scale must be an array');\n }\n scaleByRow(this, scale);\n return this;\n }\n case 'column': {\n if (scale === undefined) {\n scale = getScaleByColumn(this);\n } else if (!Array.isArray(scale)) {\n throw new TypeError('scale must be an array');\n }\n scaleByColumn(this, scale);\n return this;\n }\n case undefined: {\n if (scale === undefined) {\n scale = getScaleAll(this);\n } else if (typeof scale !== 'number') {\n throw new TypeError('scale must be a number');\n }\n scaleAll(this, scale);\n return this;\n }\n default:\n throw new Error(`invalid option: ${by}`);\n }\n }\n}\n\nAbstractMatrix.prototype.klass = 'Matrix';\nif (typeof Symbol !== 'undefined') {\n AbstractMatrix.prototype[\n Symbol.for('nodejs.util.inspect.custom')\n ] = inspectMatrix;\n}\n\nfunction compareNumbers(a, b) {\n return a - b;\n}\n\n// Synonyms\nAbstractMatrix.random = AbstractMatrix.rand;\nAbstractMatrix.randomInt = AbstractMatrix.randInt;\nAbstractMatrix.diagonal = AbstractMatrix.diag;\nAbstractMatrix.prototype.diagonal = AbstractMatrix.prototype.diag;\nAbstractMatrix.identity = AbstractMatrix.eye;\nAbstractMatrix.prototype.negate = AbstractMatrix.prototype.neg;\nAbstractMatrix.prototype.tensorProduct =\n AbstractMatrix.prototype.kroneckerProduct;\n\nexport default class Matrix extends AbstractMatrix {\n constructor(nRows, nColumns) {\n super();\n if (Matrix.isMatrix(nRows)) {\n return nRows.clone();\n } else if (Number.isInteger(nRows) && nRows > 0) {\n // Create an empty matrix\n this.data = [];\n if (Number.isInteger(nColumns) && nColumns > 0) {\n for (let i = 0; i < nRows; i++) {\n this.data.push(new Float64Array(nColumns));\n }\n } else {\n throw new TypeError('nColumns must be a positive integer');\n }\n } else if (Array.isArray(nRows)) {\n // Copy the values from the 2D array\n const arrayData = nRows;\n nRows = arrayData.length;\n nColumns = arrayData[0].length;\n if (typeof nColumns !== 'number' || nColumns === 0) {\n throw new TypeError(\n 'Data must be a 2D array with at least one element',\n );\n }\n this.data = [];\n for (let i = 0; i < nRows; i++) {\n if (arrayData[i].length !== nColumns) {\n throw new RangeError('Inconsistent array dimensions');\n }\n this.data.push(Float64Array.from(arrayData[i]));\n }\n } else {\n throw new TypeError(\n 'First argument must be a positive number or an array',\n );\n }\n this.rows = nRows;\n this.columns = nColumns;\n return this;\n }\n\n set(rowIndex, columnIndex, value) {\n this.data[rowIndex][columnIndex] = value;\n return this;\n }\n\n get(rowIndex, columnIndex) {\n return this.data[rowIndex][columnIndex];\n }\n\n removeRow(index) {\n checkRowIndex(this, index);\n if (this.rows === 1) {\n throw new RangeError('A matrix cannot have less than one row');\n }\n this.data.splice(index, 1);\n this.rows -= 1;\n return this;\n }\n\n addRow(index, array) {\n if (array === undefined) {\n array = index;\n index = this.rows;\n }\n checkRowIndex(this, index, true);\n array = Float64Array.from(checkRowVector(this, array, true));\n this.data.splice(index, 0, array);\n this.rows += 1;\n return this;\n }\n\n removeColumn(index) {\n checkColumnIndex(this, index);\n if (this.columns === 1) {\n throw new RangeError('A matrix cannot have less than one column');\n }\n for (let i = 0; i < this.rows; i++) {\n const newRow = new Float64Array(this.columns - 1);\n for (let j = 0; j < index; j++) {\n newRow[j] = this.data[i][j];\n }\n for (let j = index + 1; j < this.columns; j++) {\n newRow[j - 1] = this.data[i][j];\n }\n this.data[i] = newRow;\n }\n this.columns -= 1;\n return this;\n }\n\n addColumn(index, array) {\n if (typeof array === 'undefined') {\n array = index;\n index = this.columns;\n }\n checkColumnIndex(this, index, true);\n array = checkColumnVector(this, array);\n for (let i = 0; i < this.rows; i++) {\n const newRow = new Float64Array(this.columns + 1);\n let j = 0;\n for (; j < index; j++) {\n newRow[j] = this.data[i][j];\n }\n newRow[j++] = array[i];\n for (; j < this.columns + 1; j++) {\n newRow[j] = this.data[i][j - 1];\n }\n this.data[i] = newRow;\n }\n this.columns += 1;\n return this;\n }\n}\n\ninstallMathOperations(AbstractMatrix, Matrix);\n","import { AbstractMatrix } from '../matrix';\n\nexport default class BaseView extends AbstractMatrix {\n constructor(matrix, rows, columns) {\n super();\n this.matrix = matrix;\n this.rows = rows;\n this.columns = columns;\n }\n}\n","import { checkColumnIndex } from '../util';\n\nimport BaseView from './base';\n\nexport default class MatrixColumnView extends BaseView {\n constructor(matrix, column) {\n checkColumnIndex(matrix, column);\n super(matrix, matrix.rows, 1);\n this.column = column;\n }\n\n set(rowIndex, columnIndex, value) {\n this.matrix.set(rowIndex, this.column, value);\n return this;\n }\n\n get(rowIndex) {\n return this.matrix.get(rowIndex, this.column);\n }\n}\n","import { checkColumnIndices } from '../util';\r\n\r\nimport BaseView from './base';\r\n\r\nexport default class MatrixColumnSelectionView extends BaseView {\r\n constructor(matrix, columnIndices) {\r\n columnIndices = checkColumnIndices(matrix, columnIndices);\r\n super(matrix, matrix.rows, columnIndices.length);\r\n this.columnIndices = columnIndices;\r\n }\r\n\r\n set(rowIndex, columnIndex, value) {\r\n this.matrix.set(rowIndex, this.columnIndices[columnIndex], value);\r\n return this;\r\n }\r\n\r\n get(rowIndex, columnIndex) {\r\n return this.matrix.get(rowIndex, this.columnIndices[columnIndex]);\r\n }\r\n}\r\n","import BaseView from './base';\r\n\r\nexport default class MatrixFlipColumnView extends BaseView {\r\n constructor(matrix) {\r\n super(matrix, matrix.rows, matrix.columns);\r\n }\r\n\r\n set(rowIndex, columnIndex, value) {\r\n this.matrix.set(rowIndex, this.columns - columnIndex - 1, value);\r\n return this;\r\n }\r\n\r\n get(rowIndex, columnIndex) {\r\n return this.matrix.get(rowIndex, this.columns - columnIndex - 1);\r\n }\r\n}\r\n","import BaseView from './base';\r\n\r\nexport default class MatrixFlipRowView extends BaseView {\r\n constructor(matrix) {\r\n super(matrix, matrix.rows, matrix.columns);\r\n }\r\n\r\n set(rowIndex, columnIndex, value) {\r\n this.matrix.set(this.rows - rowIndex - 1, columnIndex, value);\r\n return this;\r\n }\r\n\r\n get(rowIndex, columnIndex) {\r\n return this.matrix.get(this.rows - rowIndex - 1, columnIndex);\r\n }\r\n}\r\n","import { checkRowIndex } from '../util';\n\nimport BaseView from './base';\n\nexport default class MatrixRowView extends BaseView {\n constructor(matrix, row) {\n checkRowIndex(matrix, row);\n super(matrix, 1, matrix.columns);\n this.row = row;\n }\n\n set(rowIndex, columnIndex, value) {\n this.matrix.set(this.row, columnIndex, value);\n return this;\n }\n\n get(rowIndex, columnIndex) {\n return this.matrix.get(this.row, columnIndex);\n }\n}\n","import { checkRowIndices } from '../util';\r\n\r\nimport BaseView from './base';\r\n\r\nexport default class MatrixRowSelectionView extends BaseView {\r\n constructor(matrix, rowIndices) {\r\n rowIndices = checkRowIndices(matrix, rowIndices);\r\n super(matrix, rowIndices.length, matrix.columns);\r\n this.rowIndices = rowIndices;\r\n }\r\n\r\n set(rowIndex, columnIndex, value) {\r\n this.matrix.set(this.rowIndices[rowIndex], columnIndex, value);\r\n return this;\r\n }\r\n\r\n get(rowIndex, columnIndex) {\r\n return this.matrix.get(this.rowIndices[rowIndex], columnIndex);\r\n }\r\n}\r\n","import { checkIndices } from '../util';\n\nimport BaseView from './base';\n\nexport default class MatrixSelectionView extends BaseView {\n constructor(matrix, rowIndices, columnIndices) {\n let indices = checkIndices(matrix, rowIndices, columnIndices);\n super(matrix, indices.row.length, indices.column.length);\n this.rowIndices = indices.row;\n this.columnIndices = indices.column;\n }\n\n set(rowIndex, columnIndex, value) {\n this.matrix.set(\n this.rowIndices[rowIndex],\n this.columnIndices[columnIndex],\n value,\n );\n return this;\n }\n\n get(rowIndex, columnIndex) {\n return this.matrix.get(\n this.rowIndices[rowIndex],\n this.columnIndices[columnIndex],\n );\n }\n}\n","import { checkRange } from '../util';\n\nimport BaseView from './base';\n\nexport default class MatrixSubView extends BaseView {\n constructor(matrix, startRow, endRow, startColumn, endColumn) {\n checkRange(matrix, startRow, endRow, startColumn, endColumn);\n super(matrix, endRow - startRow + 1, endColumn - startColumn + 1);\n this.startRow = startRow;\n this.startColumn = startColumn;\n }\n\n set(rowIndex, columnIndex, value) {\n this.matrix.set(\n this.startRow + rowIndex,\n this.startColumn + columnIndex,\n value,\n );\n return this;\n }\n\n get(rowIndex, columnIndex) {\n return this.matrix.get(\n this.startRow + rowIndex,\n this.startColumn + columnIndex,\n );\n }\n}\n","import BaseView from './base';\r\n\r\nexport default class MatrixTransposeView extends BaseView {\r\n constructor(matrix) {\r\n super(matrix, matrix.columns, matrix.rows);\r\n }\r\n\r\n set(rowIndex, columnIndex, value) {\r\n this.matrix.set(columnIndex, rowIndex, value);\r\n return this;\r\n }\r\n\r\n get(rowIndex, columnIndex) {\r\n return this.matrix.get(columnIndex, rowIndex);\r\n }\r\n}\r\n","import { AbstractMatrix } from '../matrix';\n\nexport default class WrapperMatrix1D extends AbstractMatrix {\n constructor(data, options = {}) {\n const { rows = 1 } = options;\n\n if (data.length % rows !== 0) {\n throw new Error('the data length is not divisible by the number of rows');\n }\n super();\n this.rows = rows;\n this.columns = data.length / rows;\n this.data = data;\n }\n\n set(rowIndex, columnIndex, value) {\n let index = this._calculateIndex(rowIndex, columnIndex);\n this.data[index] = value;\n return this;\n }\n\n get(rowIndex, columnIndex) {\n let index = this._calculateIndex(rowIndex, columnIndex);\n return this.data[index];\n }\n\n _calculateIndex(row, column) {\n return row * this.columns + column;\n }\n}\n","import { AbstractMatrix } from '../matrix';\n\nexport default class WrapperMatrix2D extends AbstractMatrix {\n constructor(data) {\n super();\n this.data = data;\n this.rows = data.length;\n this.columns = data[0].length;\n }\n\n set(rowIndex, columnIndex, value) {\n this.data[rowIndex][columnIndex] = value;\n return this;\n }\n\n get(rowIndex, columnIndex) {\n return this.data[rowIndex][columnIndex];\n }\n}\n","import WrapperMatrix1D from './WrapperMatrix1D';\nimport WrapperMatrix2D from './WrapperMatrix2D';\n\nexport function wrap(array, options) {\n if (Array.isArray(array)) {\n if (array[0] && Array.isArray(array[0])) {\n return new WrapperMatrix2D(array);\n } else {\n return new WrapperMatrix1D(array, options);\n }\n } else {\n throw new Error('the argument is not an array');\n }\n}\n","import Matrix from '../matrix';\nimport WrapperMatrix2D from '../wrap/WrapperMatrix2D';\n\nexport default class LuDecomposition {\n constructor(matrix) {\n matrix = WrapperMatrix2D.checkMatrix(matrix);\n\n let lu = matrix.clone();\n let rows = lu.rows;\n let columns = lu.columns;\n let pivotVector = new Float64Array(rows);\n let pivotSign = 1;\n let i, j, k, p, s, t, v;\n let LUcolj, kmax;\n\n for (i = 0; i < rows; i++) {\n pivotVector[i] = i;\n }\n\n LUcolj = new Float64Array(rows);\n\n for (j = 0; j < columns; j++) {\n for (i = 0; i < rows; i++) {\n LUcolj[i] = lu.get(i, j);\n }\n\n for (i = 0; i < rows; i++) {\n kmax = Math.min(i, j);\n s = 0;\n for (k = 0; k < kmax; k++) {\n s += lu.get(i, k) * LUcolj[k];\n }\n LUcolj[i] -= s;\n lu.set(i, j, LUcolj[i]);\n }\n\n p = j;\n for (i = j + 1; i < rows; i++) {\n if (Math.abs(LUcolj[i]) > Math.abs(LUcolj[p])) {\n p = i;\n }\n }\n\n if (p !== j) {\n for (k = 0; k < columns; k++) {\n t = lu.get(p, k);\n lu.set(p, k, lu.get(j, k));\n lu.set(j, k, t);\n }\n\n v = pivotVector[p];\n pivotVector[p] = pivotVector[j];\n pivotVector[j] = v;\n\n pivotSign = -pivotSign;\n }\n\n if (j < rows && lu.get(j, j) !== 0) {\n for (i = j + 1; i < rows; i++) {\n lu.set(i, j, lu.get(i, j) / lu.get(j, j));\n }\n }\n }\n\n this.LU = lu;\n this.pivotVector = pivotVector;\n this.pivotSign = pivotSign;\n }\n\n isSingular() {\n let data = this.LU;\n let col = data.columns;\n for (let j = 0; j < col; j++) {\n if (data.get(j, j) === 0) {\n return true;\n }\n }\n return false;\n }\n\n solve(value) {\n value = Matrix.checkMatrix(value);\n\n let lu = this.LU;\n let rows = lu.rows;\n\n if (rows !== value.rows) {\n throw new Error('Invalid matrix dimensions');\n }\n if (this.isSingular()) {\n throw new Error('LU matrix is singular');\n }\n\n let count = value.columns;\n let X = value.subMatrixRow(this.pivotVector, 0, count - 1);\n let columns = lu.columns;\n let i, j, k;\n\n for (k = 0; k < columns; k++) {\n for (i = k + 1; i < columns; i++) {\n for (j = 0; j < count; j++) {\n X.set(i, j, X.get(i, j) - X.get(k, j) * lu.get(i, k));\n }\n }\n }\n for (k = columns - 1; k >= 0; k--) {\n for (j = 0; j < count; j++) {\n X.set(k, j, X.get(k, j) / lu.get(k, k));\n }\n for (i = 0; i < k; i++) {\n for (j = 0; j < count; j++) {\n X.set(i, j, X.get(i, j) - X.get(k, j) * lu.get(i, k));\n }\n }\n }\n return X;\n }\n\n get determinant() {\n let data = this.LU;\n if (!data.isSquare()) {\n throw new Error('Matrix must be square');\n }\n let determinant = this.pivotSign;\n let col = data.columns;\n for (let j = 0; j < col; j++) {\n determinant *= data.get(j, j);\n }\n return determinant;\n }\n\n get lowerTriangularMatrix() {\n let data = this.LU;\n let rows = data.rows;\n let columns = data.columns;\n let X = new Matrix(rows, columns);\n for (let i = 0; i < rows; i++) {\n for (let j = 0; j < columns; j++) {\n if (i > j) {\n X.set(i, j, data.get(i, j));\n } else if (i === j) {\n X.set(i, j, 1);\n } else {\n X.set(i, j, 0);\n }\n }\n }\n return X;\n }\n\n get upperTriangularMatrix() {\n let data = this.LU;\n let rows = data.rows;\n let columns = data.columns;\n let X = new Matrix(rows, columns);\n for (let i = 0; i < rows; i++) {\n for (let j = 0; j < columns; j++) {\n if (i <= j) {\n X.set(i, j, data.get(i, j));\n } else {\n X.set(i, j, 0);\n }\n }\n }\n return X;\n }\n\n get pivotPermutationVector() {\n return Array.from(this.pivotVector);\n }\n}\n","export function hypotenuse(a, b) {\n let r = 0;\n if (Math.abs(a) > Math.abs(b)) {\n r = b / a;\n return Math.abs(a) * Math.sqrt(1 + r * r);\n }\n if (b !== 0) {\n r = a / b;\n return Math.abs(b) * Math.sqrt(1 + r * r);\n }\n return 0;\n}\n","import Matrix from '../matrix';\nimport WrapperMatrix2D from '../wrap/WrapperMatrix2D';\n\nimport { hypotenuse } from './util';\n\nexport default class QrDecomposition {\n constructor(value) {\n value = WrapperMatrix2D.checkMatrix(value);\n\n let qr = value.clone();\n let m = value.rows;\n let n = value.columns;\n let rdiag = new Float64Array(n);\n let i, j, k, s;\n\n for (k = 0; k < n; k++) {\n let nrm = 0;\n for (i = k; i < m; i++) {\n nrm = hypotenuse(nrm, qr.get(i, k));\n }\n if (nrm !== 0) {\n if (qr.get(k, k) < 0) {\n nrm = -nrm;\n }\n for (i = k; i < m; i++) {\n qr.set(i, k, qr.get(i, k) / nrm);\n }\n qr.set(k, k, qr.get(k, k) + 1);\n for (j = k + 1; j < n; j++) {\n s = 0;\n for (i = k; i < m; i++) {\n s += qr.get(i, k) * qr.get(i, j);\n }\n s = -s / qr.get(k, k);\n for (i = k; i < m; i++) {\n qr.set(i, j, qr.get(i, j) + s * qr.get(i, k));\n }\n }\n }\n rdiag[k] = -nrm;\n }\n\n this.QR = qr;\n this.Rdiag = rdiag;\n }\n\n solve(value) {\n value = Matrix.checkMatrix(value);\n\n let qr = this.QR;\n let m = qr.rows;\n\n if (value.rows !== m) {\n throw new Error('Matrix row dimensions must agree');\n }\n if (!this.isFullRank()) {\n throw new Error('Matrix is rank deficient');\n }\n\n let count = value.columns;\n let X = value.clone();\n let n = qr.columns;\n let i, j, k, s;\n\n for (k = 0; k < n; k++) {\n for (j = 0; j < count; j++) {\n s = 0;\n for (i = k; i < m; i++) {\n s += qr.get(i, k) * X.get(i, j);\n }\n s = -s / qr.get(k, k);\n for (i = k; i < m; i++) {\n X.set(i, j, X.get(i, j) + s * qr.get(i, k));\n }\n }\n }\n for (k = n - 1; k >= 0; k--) {\n for (j = 0; j < count; j++) {\n X.set(k, j, X.get(k, j) / this.Rdiag[k]);\n }\n for (i = 0; i < k; i++) {\n for (j = 0; j < count; j++) {\n X.set(i, j, X.get(i, j) - X.get(k, j) * qr.get(i, k));\n }\n }\n }\n\n return X.subMatrix(0, n - 1, 0, count - 1);\n }\n\n isFullRank() {\n let columns = this.QR.columns;\n for (let i = 0; i < columns; i++) {\n if (this.Rdiag[i] === 0) {\n return false;\n }\n }\n return true;\n }\n\n get upperTriangularMatrix() {\n let qr = this.QR;\n let n = qr.columns;\n let X = new Matrix(n, n);\n let i, j;\n for (i = 0; i < n; i++) {\n for (j = 0; j < n; j++) {\n if (i < j) {\n X.set(i, j, qr.get(i, j));\n } else if (i === j) {\n X.set(i, j, this.Rdiag[i]);\n } else {\n X.set(i, j, 0);\n }\n }\n }\n return X;\n }\n\n get orthogonalMatrix() {\n let qr = this.QR;\n let rows = qr.rows;\n let columns = qr.columns;\n let X = new Matrix(rows, columns);\n let i, j, k, s;\n\n for (k = columns - 1; k >= 0; k--) {\n for (i = 0; i < rows; i++) {\n X.set(i, k, 0);\n }\n X.set(k, k, 1);\n for (j = k; j < columns; j++) {\n if (qr.get(k, k) !== 0) {\n s = 0;\n for (i = k; i < rows; i++) {\n s += qr.get(i, k) * X.get(i, j);\n }\n\n s = -s / qr[k][k];\n\n for (i = k; i < rows; i++) {\n X.set(i, j, X.get(i, j) + s * qr.get(i, k));\n }\n }\n }\n }\n return X;\n }\n}\n","import Matrix from '../matrix';\nimport WrapperMatrix2D from '../wrap/WrapperMatrix2D';\n\nimport { hypotenuse } from './util';\n\nexport default class SingularValueDecomposition {\n constructor(value, options = {}) {\n value = WrapperMatrix2D.checkMatrix(value);\n\n let m = value.rows;\n let n = value.columns;\n\n const {\n computeLeftSingularVectors = true,\n computeRightSingularVectors = true,\n autoTranspose = false,\n } = options;\n\n let wantu = Boolean(computeLeftSingularVectors);\n let wantv = Boolean(computeRightSingularVectors);\n\n let swapped = false;\n let a;\n if (m < n) {\n if (!autoTranspose) {\n a = value.clone();\n // eslint-disable-next-line no-console\n console.warn(\n 'Computing SVD on a matrix with more columns than rows. Consider enabling autoTranspose',\n );\n } else {\n a = value.transpose();\n m = a.rows;\n n = a.columns;\n swapped = true;\n let aux = wantu;\n wantu = wantv;\n wantv = aux;\n }\n } else {\n a = value.clone();\n }\n\n let nu = Math.min(m, n);\n let ni = Math.min(m + 1, n);\n let s = new Float64Array(ni);\n let U = new Matrix(m, nu);\n let V = new Matrix(n, n);\n\n let e = new Float64Array(n);\n let work = new Float64Array(m);\n\n let si = new Float64Array(ni);\n for (let i = 0; i < ni; i++) si[i] = i;\n\n let nct = Math.min(m - 1, n);\n let nrt = Math.max(0, Math.min(n - 2, m));\n let mrc = Math.max(nct, nrt);\n\n for (let k = 0; k < mrc; k++) {\n if (k < nct) {\n s[k] = 0;\n for (let i = k; i < m; i++) {\n s[k] = hypotenuse(s[k], a.get(i, k));\n }\n if (s[k] !== 0) {\n if (a.get(k, k) < 0) {\n s[k] = -s[k];\n }\n for (let i = k; i < m; i++) {\n a.set(i, k, a.get(i, k) / s[k]);\n }\n a.set(k, k, a.get(k, k) + 1);\n }\n s[k] = -s[k];\n }\n\n for (let j = k + 1; j < n; j++) {\n if (k < nct && s[k] !== 0) {\n let t = 0;\n for (let i = k; i < m; i++) {\n t += a.get(i, k) * a.get(i, j);\n }\n t = -t / a.get(k, k);\n for (let i = k; i < m; i++) {\n a.set(i, j, a.get(i, j) + t * a.get(i, k));\n }\n }\n e[j] = a.get(k, j);\n }\n\n if (wantu && k < nct) {\n for (let i = k; i < m; i++) {\n U.set(i, k, a.get(i, k));\n }\n }\n\n if (k < nrt) {\n e[k] = 0;\n for (let i = k + 1; i < n; i++) {\n e[k] = hypotenuse(e[k], e[i]);\n }\n if (e[k] !== 0) {\n if (e[k + 1] < 0) {\n e[k] = 0 - e[k];\n }\n for (let i = k + 1; i < n; i++) {\n e[i] /= e[k];\n }\n e[k + 1] += 1;\n }\n e[k] = -e[k];\n if (k + 1 < m && e[k] !== 0) {\n for (let i = k + 1; i < m; i++) {\n work[i] = 0;\n }\n for (let i = k + 1; i < m; i++) {\n for (let j = k + 1; j < n; j++) {\n work[i] += e[j] * a.get(i, j);\n }\n }\n for (let j = k + 1; j < n; j++) {\n let t = -e[j] / e[k + 1];\n for (let i = k + 1; i < m; i++) {\n a.set(i, j, a.get(i, j) + t * work[i]);\n }\n }\n }\n if (wantv) {\n for (let i = k + 1; i < n; i++) {\n V.set(i, k, e[i]);\n }\n }\n }\n }\n\n let p = Math.min(n, m + 1);\n if (nct < n) {\n s[nct] = a.get(nct, nct);\n }\n if (m < p) {\n s[p - 1] = 0;\n }\n if (nrt + 1 < p) {\n e[nrt] = a.get(nrt, p - 1);\n }\n e[p - 1] = 0;\n\n if (wantu) {\n for (let j = nct; j < nu; j++) {\n for (let i = 0; i < m; i++) {\n U.set(i, j, 0);\n }\n U.set(j, j, 1);\n }\n for (let k = nct - 1; k >= 0; k--) {\n if (s[k] !== 0) {\n for (let j = k + 1; j < nu; j++) {\n let t = 0;\n for (let i = k; i < m; i++) {\n t += U.get(i, k) * U.get(i, j);\n }\n t = -t / U.get(k, k);\n for (let i = k; i < m; i++) {\n U.set(i, j, U.get(i, j) + t * U.get(i, k));\n }\n }\n for (let i = k; i < m; i++) {\n U.set(i, k, -U.get(i, k));\n }\n U.set(k, k, 1 + U.get(k, k));\n for (let i = 0; i < k - 1; i++) {\n U.set(i, k, 0);\n }\n } else {\n for (let i = 0; i < m; i++) {\n U.set(i, k, 0);\n }\n U.set(k, k, 1);\n }\n }\n }\n\n if (wantv) {\n for (let k = n - 1; k >= 0; k--) {\n if (k < nrt && e[k] !== 0) {\n for (let j = k + 1; j < n; j++) {\n let t = 0;\n for (let i = k + 1; i < n; i++) {\n t += V.get(i, k) * V.get(i, j);\n }\n t = -t / V.get(k + 1, k);\n for (let i = k + 1; i < n; i++) {\n V.set(i, j, V.get(i, j) + t * V.get(i, k));\n }\n }\n }\n for (let i = 0; i < n; i++) {\n V.set(i, k, 0);\n }\n V.set(k, k, 1);\n }\n }\n\n let pp = p - 1;\n let iter = 0;\n let eps = Number.EPSILON;\n while (p > 0) {\n let k, kase;\n for (k = p - 2; k >= -1; k--) {\n if (k === -1) {\n break;\n }\n const alpha =\n Number.MIN_VALUE + eps * Math.abs(s[k] + Math.abs(s[k + 1]));\n if (Math.abs(e[k]) <= alpha || Number.isNaN(e[k])) {\n e[k] = 0;\n break;\n }\n }\n if (k === p - 2) {\n kase = 4;\n } else {\n let ks;\n for (ks = p - 1; ks >= k; ks--) {\n if (ks === k) {\n break;\n }\n let t =\n (ks !== p ? Math.abs(e[ks]) : 0) +\n (ks !== k + 1 ? Math.abs(e[ks - 1]) : 0);\n if (Math.abs(s[ks]) <= eps * t) {\n s[ks] = 0;\n break;\n }\n }\n if (ks === k) {\n kase = 3;\n } else if (ks === p - 1) {\n kase = 1;\n } else {\n kase = 2;\n k = ks;\n }\n }\n\n k++;\n\n switch (kase) {\n case 1: {\n let f = e[p - 2];\n e[p - 2] = 0;\n for (let j = p - 2; j >= k; j--) {\n let t = hypotenuse(s[j], f);\n let cs = s[j] / t;\n let sn = f / t;\n s[j] = t;\n if (j !== k) {\n f = -sn * e[j - 1];\n e[j - 1] = cs * e[j - 1];\n }\n if (wantv) {\n for (let i = 0; i < n; i++) {\n t = cs * V.get(i, j) + sn * V.get(i, p - 1);\n V.set(i, p - 1, -sn * V.get(i, j) + cs * V.get(i, p - 1));\n V.set(i, j, t);\n }\n }\n }\n break;\n }\n case 2: {\n let f = e[k - 1];\n e[k - 1] = 0;\n for (let j = k; j < p; j++) {\n let t = hypotenuse(s[j], f);\n let cs = s[j] / t;\n let sn = f / t;\n s[j] = t;\n f = -sn * e[j];\n e[j] = cs * e[j];\n if (wantu) {\n for (let i = 0; i < m; i++) {\n t = cs * U.get(i, j) + sn * U.get(i, k - 1);\n U.set(i, k - 1, -sn * U.get(i, j) + cs * U.get(i, k - 1));\n U.set(i, j, t);\n }\n }\n }\n break;\n }\n case 3: {\n const scale = Math.max(\n Math.abs(s[p - 1]),\n Math.abs(s[p - 2]),\n Math.abs(e[p - 2]),\n Math.abs(s[k]),\n Math.abs(e[k]),\n );\n const sp = s[p - 1] / scale;\n const spm1 = s[p - 2] / scale;\n const epm1 = e[p - 2] / scale;\n const sk = s[k] / scale;\n const ek = e[k] / scale;\n const b = ((spm1 + sp) * (spm1 - sp) + epm1 * epm1) / 2;\n const c = sp * epm1 * (sp * epm1);\n let shift = 0;\n if (b !== 0 || c !== 0) {\n if (b < 0) {\n shift = 0 - Math.sqrt(b * b + c);\n } else {\n shift = Math.sqrt(b * b + c);\n }\n shift = c / (b + shift);\n }\n let f = (sk + sp) * (sk - sp) + shift;\n let g = sk * ek;\n for (let j = k; j < p - 1; j++) {\n let t = hypotenuse(f, g);\n if (t === 0) t = Number.MIN_VALUE;\n let cs = f / t;\n let sn = g / t;\n if (j !== k) {\n e[j - 1] = t;\n }\n f = cs * s[j] + sn * e[j];\n e[j] = cs * e[j] - sn * s[j];\n g = sn * s[j + 1];\n s[j + 1] = cs * s[j + 1];\n if (wantv) {\n for (let i = 0; i < n; i++) {\n t = cs * V.get(i, j) + sn * V.get(i, j + 1);\n V.set(i, j + 1, -sn * V.get(i, j) + cs * V.get(i, j + 1));\n V.set(i, j, t);\n }\n }\n t = hypotenuse(f, g);\n if (t === 0) t = Number.MIN_VALUE;\n cs = f / t;\n sn = g / t;\n s[j] = t;\n f = cs * e[j] + sn * s[j + 1];\n s[j + 1] = -sn * e[j] + cs * s[j + 1];\n g = sn * e[j + 1];\n e[j + 1] = cs * e[j + 1];\n if (wantu && j < m - 1) {\n for (let i = 0; i < m; i++) {\n t = cs * U.get(i, j) + sn * U.get(i, j + 1);\n U.set(i, j + 1, -sn * U.get(i, j) + cs * U.get(i, j + 1));\n U.set(i, j, t);\n }\n }\n }\n e[p - 2] = f;\n iter = iter + 1;\n break;\n }\n case 4: {\n if (s[k] <= 0) {\n s[k] = s[k] < 0 ? -s[k] : 0;\n if (wantv) {\n for (let i = 0; i <= pp; i++) {\n V.set(i, k, -V.get(i, k));\n }\n }\n }\n while (k < pp) {\n if (s[k] >= s[k + 1]) {\n break;\n }\n let t = s[k];\n s[k] = s[k + 1];\n s[k + 1] = t;\n if (wantv && k < n - 1) {\n for (let i = 0; i < n; i++) {\n t = V.get(i, k + 1);\n V.set(i, k + 1, V.get(i, k));\n V.set(i, k, t);\n }\n }\n if (wantu && k < m - 1) {\n for (let i = 0; i < m; i++) {\n t = U.get(i, k + 1);\n U.set(i, k + 1, U.get(i, k));\n U.set(i, k, t);\n }\n }\n k++;\n }\n iter = 0;\n p--;\n break;\n }\n // no default\n }\n }\n\n if (swapped) {\n let tmp = V;\n V = U;\n U = tmp;\n }\n\n this.m = m;\n this.n = n;\n this.s = s;\n this.U = U;\n this.V = V;\n }\n\n solve(value) {\n let Y = value;\n let e = this.threshold;\n let scols = this.s.length;\n let Ls = Matrix.zeros(scols, scols);\n\n for (let i = 0; i < scols; i++) {\n if (Math.abs(this.s[i]) <= e) {\n Ls.set(i, i, 0);\n } else {\n Ls.set(i, i, 1 / this.s[i]);\n }\n }\n\n let U = this.U;\n let V = this.rightSingularVectors;\n\n let VL = V.mmul(Ls);\n let vrows = V.rows;\n let urows = U.rows;\n let VLU = Matrix.zeros(vrows, urows);\n\n for (let i = 0; i < vrows; i++) {\n for (let j = 0; j < urows; j++) {\n let sum = 0;\n for (let k = 0; k < scols; k++) {\n sum += VL.get(i, k) * U.get(j, k);\n }\n VLU.set(i, j, sum);\n }\n }\n\n return VLU.mmul(Y);\n }\n\n solveForDiagonal(value) {\n return this.solve(Matrix.diag(value));\n }\n\n inverse() {\n let V = this.V;\n let e = this.threshold;\n let vrows = V.rows;\n let vcols = V.columns;\n let X = new Matrix(vrows, this.s.length);\n\n for (let i = 0; i < vrows; i++) {\n for (let j = 0; j < vcols; j++) {\n if (Math.abs(this.s[j]) > e) {\n X.set(i, j, V.get(i, j) / this.s[j]);\n }\n }\n }\n\n let U = this.U;\n\n let urows = U.rows;\n let ucols = U.columns;\n let Y = new Matrix(vrows, urows);\n\n for (let i = 0; i < vrows; i++) {\n for (let j = 0; j < urows; j++) {\n let sum = 0;\n for (let k = 0; k < ucols; k++) {\n sum += X.get(i, k) * U.get(j, k);\n }\n Y.set(i, j, sum);\n }\n }\n\n return Y;\n }\n\n get condition() {\n return this.s[0] / this.s[Math.min(this.m, this.n) - 1];\n }\n\n get norm2() {\n return this.s[0];\n }\n\n get rank() {\n let tol = Math.max(this.m, this.n) * this.s[0] * Number.EPSILON;\n let r = 0;\n let s = this.s;\n for (let i = 0, ii = s.length; i < ii; i++) {\n if (s[i] > tol) {\n r++;\n }\n }\n return r;\n }\n\n get diagonal() {\n return Array.from(this.s);\n }\n\n get threshold() {\n return (Number.EPSILON / 2) * Math.max(this.m, this.n) * this.s[0];\n }\n\n get leftSingularVectors() {\n return this.U;\n }\n\n get rightSingularVectors() {\n return this.V;\n }\n\n get diagonalMatrix() {\n return Matrix.diag(this.s);\n }\n}\n","import LuDecomposition from './dc/lu';\nimport QrDecomposition from './dc/qr';\nimport SingularValueDecomposition from './dc/svd';\nimport Matrix from './matrix';\nimport WrapperMatrix2D from './wrap/WrapperMatrix2D';\n\nexport function inverse(matrix, useSVD = false) {\n matrix = WrapperMatrix2D.checkMatrix(matrix);\n if (useSVD) {\n return new SingularValueDecomposition(matrix).inverse();\n } else {\n return solve(matrix, Matrix.eye(matrix.rows));\n }\n}\n\nexport function solve(leftHandSide, rightHandSide, useSVD = false) {\n leftHandSide = WrapperMatrix2D.checkMatrix(leftHandSide);\n rightHandSide = WrapperMatrix2D.checkMatrix(rightHandSide);\n if (useSVD) {\n return new SingularValueDecomposition(leftHandSide).solve(rightHandSide);\n } else {\n return leftHandSide.isSquare()\n ? new LuDecomposition(leftHandSide).solve(rightHandSide)\n : new QrDecomposition(leftHandSide).solve(rightHandSide);\n }\n}\n","import Matrix from './matrix';\nimport LuDecomposition from './dc/lu';\nimport MatrixSelectionView from './views/selection';\n\nexport function determinant(matrix) {\n matrix = Matrix.checkMatrix(matrix);\n if (matrix.isSquare()) {\n let a, b, c, d;\n if (matrix.columns === 2) {\n // 2 x 2 matrix\n a = matrix.get(0, 0);\n b = matrix.get(0, 1);\n c = matrix.get(1, 0);\n d = matrix.get(1, 1);\n\n return a * d - b * c;\n } else if (matrix.columns === 3) {\n // 3 x 3 matrix\n let subMatrix0, subMatrix1, subMatrix2;\n subMatrix0 = new MatrixSelectionView(matrix, [1, 2], [1, 2]);\n subMatrix1 = new MatrixSelectionView(matrix, [1, 2], [0, 2]);\n subMatrix2 = new MatrixSelectionView(matrix, [1, 2], [0, 1]);\n a = matrix.get(0, 0);\n b = matrix.get(0, 1);\n c = matrix.get(0, 2);\n\n return (\n a * determinant(subMatrix0) -\n b * determinant(subMatrix1) +\n c * determinant(subMatrix2)\n );\n } else {\n // general purpose determinant using the LU decomposition\n return new LuDecomposition(matrix).determinant;\n }\n } else {\n throw Error('determinant can only be calculated for a square matrix');\n }\n}\n","import Matrix from './matrix';\nimport SingularValueDecomposition from './dc/svd';\n\nfunction xrange(n, exception) {\n let range = [];\n for (let i = 0; i < n; i++) {\n if (i !== exception) {\n range.push(i);\n }\n }\n return range;\n}\n\nfunction dependenciesOneRow(\n error,\n matrix,\n index,\n thresholdValue = 10e-10,\n thresholdError = 10e-10,\n) {\n if (error > thresholdError) {\n return new Array(matrix.rows + 1).fill(0);\n } else {\n let returnArray = matrix.addRow(index, [0]);\n for (let i = 0; i < returnArray.rows; i++) {\n if (Math.abs(returnArray.get(i, 0)) < thresholdValue) {\n returnArray.set(i, 0, 0);\n }\n }\n return returnArray.to1DArray();\n }\n}\n\nexport function linearDependencies(matrix, options = {}) {\n const { thresholdValue = 10e-10, thresholdError = 10e-10 } = options;\n matrix = Matrix.checkMatrix(matrix);\n\n let n = matrix.rows;\n let results = new Matrix(n, n);\n\n for (let i = 0; i < n; i++) {\n let b = Matrix.columnVector(matrix.getRow(i));\n let Abis = matrix.subMatrixRow(xrange(n, i)).transpose();\n let svd = new SingularValueDecomposition(Abis);\n let x = svd.solve(b);\n let error = Matrix.sub(b, Abis.mmul(x))\n .abs()\n .max();\n results.setRow(\n i,\n dependenciesOneRow(error, x, i, thresholdValue, thresholdError),\n );\n }\n return results;\n}\n","import SVD from './dc/svd';\nimport Matrix from './matrix';\n\nexport function pseudoInverse(matrix, threshold = Number.EPSILON) {\n matrix = Matrix.checkMatrix(matrix);\n let svdSolution = new SVD(matrix, { autoTranspose: true });\n\n let U = svdSolution.leftSingularVectors;\n let V = svdSolution.rightSingularVectors;\n let s = svdSolution.diagonal;\n\n for (let i = 0; i < s.length; i++) {\n if (Math.abs(s[i]) > threshold) {\n s[i] = 1.0 / s[i];\n } else {\n s[i] = 0.0;\n }\n }\n\n return V.mmul(Matrix.diag(s).mmul(U.transpose()));\n}\n","import Matrix from './matrix';\n\nexport function covariance(xMatrix, yMatrix = xMatrix, options = {}) {\n xMatrix = Matrix.checkMatrix(xMatrix);\n let yIsSame = false;\n if (\n typeof yMatrix === 'object' &&\n !Matrix.isMatrix(yMatrix) &&\n !Array.isArray(yMatrix)\n ) {\n options = yMatrix;\n yMatrix = xMatrix;\n yIsSame = true;\n } else {\n yMatrix = Matrix.checkMatrix(yMatrix);\n }\n if (xMatrix.rows !== yMatrix.rows) {\n throw new TypeError('Both matrices must have the same number of rows');\n }\n const { center = true } = options;\n if (center) {\n xMatrix = xMatrix.center('column');\n if (!yIsSame) {\n yMatrix = yMatrix.center('column');\n }\n }\n const cov = xMatrix.transpose().mmul(yMatrix);\n for (let i = 0; i < cov.rows; i++) {\n for (let j = 0; j < cov.columns; j++) {\n cov.set(i, j, cov.get(i, j) * (1 / (xMatrix.rows - 1)));\n }\n }\n return cov;\n}\n","import Matrix from './matrix';\n\nexport function correlation(xMatrix, yMatrix = xMatrix, options = {}) {\n xMatrix = Matrix.checkMatrix(xMatrix);\n let yIsSame = false;\n if (\n typeof yMatrix === 'object' &&\n !Matrix.isMatrix(yMatrix) &&\n !Array.isArray(yMatrix)\n ) {\n options = yMatrix;\n yMatrix = xMatrix;\n yIsSame = true;\n } else {\n yMatrix = Matrix.checkMatrix(yMatrix);\n }\n if (xMatrix.rows !== yMatrix.rows) {\n throw new TypeError('Both matrices must have the same number of rows');\n }\n\n const { center = true, scale = true } = options;\n if (center) {\n xMatrix.center('column');\n if (!yIsSame) {\n yMatrix.center('column');\n }\n }\n if (scale) {\n xMatrix.scale('column');\n if (!yIsSame) {\n yMatrix.scale('column');\n }\n }\n\n const sdx = xMatrix.standardDeviation('column', { unbiased: true });\n const sdy = yIsSame\n ? sdx\n : yMatrix.standardDeviation('column', { unbiased: true });\n\n const corr = xMatrix.transpose().mmul(yMatrix);\n for (let i = 0; i < corr.rows; i++) {\n for (let j = 0; j < corr.columns; j++) {\n corr.set(\n i,\n j,\n corr.get(i, j) * (1 / (sdx[i] * sdy[j])) * (1 / (xMatrix.rows - 1)),\n );\n }\n }\n return corr;\n}\n","import Matrix from '../matrix';\nimport WrapperMatrix2D from '../wrap/WrapperMatrix2D';\n\nimport { hypotenuse } from './util';\n\nexport default class EigenvalueDecomposition {\n constructor(matrix, options = {}) {\n const { assumeSymmetric = false } = options;\n\n matrix = WrapperMatrix2D.checkMatrix(matrix);\n if (!matrix.isSquare()) {\n throw new Error('Matrix is not a square matrix');\n }\n\n let n = matrix.columns;\n let V = new Matrix(n, n);\n let d = new Float64Array(n);\n let e = new Float64Array(n);\n let value = matrix;\n let i, j;\n\n let isSymmetric = false;\n if (assumeSymmetric) {\n isSymmetric = true;\n } else {\n isSymmetric = matrix.isSymmetric();\n }\n\n if (isSymmetric) {\n for (i = 0; i < n; i++) {\n for (j = 0; j < n; j++) {\n V.set(i, j, value.get(i, j));\n }\n }\n tred2(n, e, d, V);\n tql2(n, e, d, V);\n } else {\n let H = new Matrix(n, n);\n let ort = new Float64Array(n);\n for (j = 0; j < n; j++) {\n for (i = 0; i < n; i++) {\n H.set(i, j, value.get(i, j));\n }\n }\n orthes(n, H, ort, V);\n hqr2(n, e, d, V, H);\n }\n\n this.n = n;\n this.e = e;\n this.d = d;\n this.V = V;\n }\n\n get realEigenvalues() {\n return Array.from(this.d);\n }\n\n get imaginaryEigenvalues() {\n return Array.from(this.e);\n }\n\n get eigenvectorMatrix() {\n return this.V;\n }\n\n get diagonalMatrix() {\n let n = this.n;\n let e = this.e;\n let d = this.d;\n let X = new Matrix(n, n);\n let i, j;\n for (i = 0; i < n; i++) {\n for (j = 0; j < n; j++) {\n X.set(i, j, 0);\n }\n X.set(i, i, d[i]);\n if (e[i] > 0) {\n X.set(i, i + 1, e[i]);\n } else if (e[i] < 0) {\n X.set(i, i - 1, e[i]);\n }\n }\n return X;\n }\n}\n\nfunction tred2(n, e, d, V) {\n let f, g, h, i, j, k, hh, scale;\n\n for (j = 0; j < n; j++) {\n d[j] = V.get(n - 1, j);\n }\n\n for (i = n - 1; i > 0; i--) {\n scale = 0;\n h = 0;\n for (k = 0; k < i; k++) {\n scale = scale + Math.abs(d[k]);\n }\n\n if (scale === 0) {\n e[i] = d[i - 1];\n for (j = 0; j < i; j++) {\n d[j] = V.get(i - 1, j);\n V.set(i, j, 0);\n V.set(j, i, 0);\n }\n } else {\n for (k = 0; k < i; k++) {\n d[k] /= scale;\n h += d[k] * d[k];\n }\n\n f = d[i - 1];\n g = Math.sqrt(h);\n if (f > 0) {\n g = -g;\n }\n\n e[i] = scale * g;\n h = h - f * g;\n d[i - 1] = f - g;\n for (j = 0; j < i; j++) {\n e[j] = 0;\n }\n\n for (j = 0; j < i; j++) {\n f = d[j];\n V.set(j, i, f);\n g = e[j] + V.get(j, j) * f;\n for (k = j + 1; k <= i - 1; k++) {\n g += V.get(k, j) * d[k];\n e[k] += V.get(k, j) * f;\n }\n e[j] = g;\n }\n\n f = 0;\n for (j = 0; j < i; j++) {\n e[j] /= h;\n f += e[j] * d[j];\n }\n\n hh = f / (h + h);\n for (j = 0; j < i; j++) {\n e[j] -= hh * d[j];\n }\n\n for (j = 0; j < i; j++) {\n f = d[j];\n g = e[j];\n for (k = j; k <= i - 1; k++) {\n V.set(k, j, V.get(k, j) - (f * e[k] + g * d[k]));\n }\n d[j] = V.get(i - 1, j);\n V.set(i, j, 0);\n }\n }\n d[i] = h;\n }\n\n for (i = 0; i < n - 1; i++) {\n V.set(n - 1, i, V.get(i, i));\n V.set(i, i, 1);\n h = d[i + 1];\n if (h !== 0) {\n for (k = 0; k <= i; k++) {\n d[k] = V.get(k, i + 1) / h;\n }\n\n for (j = 0; j <= i; j++) {\n g = 0;\n for (k = 0; k <= i; k++) {\n g += V.get(k, i + 1) * V.get(k, j);\n }\n for (k = 0; k <= i; k++) {\n V.set(k, j, V.get(k, j) - g * d[k]);\n }\n }\n }\n\n for (k = 0; k <= i; k++) {\n V.set(k, i + 1, 0);\n }\n }\n\n for (j = 0; j < n; j++) {\n d[j] = V.get(n - 1, j);\n V.set(n - 1, j, 0);\n }\n\n V.set(n - 1, n - 1, 1);\n e[0] = 0;\n}\n\nfunction tql2(n, e, d, V) {\n let g, h, i, j, k, l, m, p, r, dl1, c, c2, c3, el1, s, s2, iter;\n\n for (i = 1; i < n; i++) {\n e[i - 1] = e[i];\n }\n\n e[n - 1] = 0;\n\n let f = 0;\n let tst1 = 0;\n let eps = Number.EPSILON;\n\n for (l = 0; l < n; l++) {\n tst1 = Math.max(tst1, Math.abs(d[l]) + Math.abs(e[l]));\n m = l;\n while (m < n) {\n if (Math.abs(e[m]) <= eps * tst1) {\n break;\n }\n m++;\n }\n\n if (m > l) {\n iter = 0;\n do {\n iter = iter + 1;\n\n g = d[l];\n p = (d[l + 1] - g) / (2 * e[l]);\n r = hypotenuse(p, 1);\n if (p < 0) {\n r = -r;\n }\n\n d[l] = e[l] / (p + r);\n d[l + 1] = e[l] * (p + r);\n dl1 = d[l + 1];\n h = g - d[l];\n for (i = l + 2; i < n; i++) {\n d[i] -= h;\n }\n\n f = f + h;\n\n p = d[m];\n c = 1;\n c2 = c;\n c3 = c;\n el1 = e[l + 1];\n s = 0;\n s2 = 0;\n for (i = m - 1; i >= l; i--) {\n c3 = c2;\n c2 = c;\n s2 = s;\n g = c * e[i];\n h = c * p;\n r = hypotenuse(p, e[i]);\n e[i + 1] = s * r;\n s = e[i] / r;\n c = p / r;\n p = c * d[i] - s * g;\n d[i + 1] = h + s * (c * g + s * d[i]);\n\n for (k = 0; k < n; k++) {\n h = V.get(k, i + 1);\n V.set(k, i + 1, s * V.get(k, i) + c * h);\n V.set(k, i, c * V.get(k, i) - s * h);\n }\n }\n\n p = (-s * s2 * c3 * el1 * e[l]) / dl1;\n e[l] = s * p;\n d[l] = c * p;\n } while (Math.abs(e[l]) > eps * tst1);\n }\n d[l] = d[l] + f;\n e[l] = 0;\n }\n\n for (i = 0; i < n - 1; i++) {\n k = i;\n p = d[i];\n for (j = i + 1; j < n; j++) {\n if (d[j] < p) {\n k = j;\n p = d[j];\n }\n }\n\n if (k !== i) {\n d[k] = d[i];\n d[i] = p;\n for (j = 0; j < n; j++) {\n p = V.get(j, i);\n V.set(j, i, V.get(j, k));\n V.set(j, k, p);\n }\n }\n }\n}\n\nfunction orthes(n, H, ort, V) {\n let low = 0;\n let high = n - 1;\n let f, g, h, i, j, m;\n let scale;\n\n for (m = low + 1; m <= high - 1; m++) {\n scale = 0;\n for (i = m; i <= high; i++) {\n scale = scale + Math.abs(H.get(i, m - 1));\n }\n\n if (scale !== 0) {\n h = 0;\n for (i = high; i >= m; i--) {\n ort[i] = H.get(i, m - 1) / scale;\n h += ort[i] * ort[i];\n }\n\n g = Math.sqrt(h);\n if (ort[m] > 0) {\n g = -g;\n }\n\n h = h - ort[m] * g;\n ort[m] = ort[m] - g;\n\n for (j = m; j < n; j++) {\n f = 0;\n for (i = high; i >= m; i--) {\n f += ort[i] * H.get(i, j);\n }\n\n f = f / h;\n for (i = m; i <= high; i++) {\n H.set(i, j, H.get(i, j) - f * ort[i]);\n }\n }\n\n for (i = 0; i <= high; i++) {\n f = 0;\n for (j = high; j >= m; j--) {\n f += ort[j] * H.get(i, j);\n }\n\n f = f / h;\n for (j = m; j <= high; j++) {\n H.set(i, j, H.get(i, j) - f * ort[j]);\n }\n }\n\n ort[m] = scale * ort[m];\n H.set(m, m - 1, scale * g);\n }\n }\n\n for (i = 0; i < n; i++) {\n for (j = 0; j < n; j++) {\n V.set(i, j, i === j ? 1 : 0);\n }\n }\n\n for (m = high - 1; m >= low + 1; m--) {\n if (H.get(m, m - 1) !== 0) {\n for (i = m + 1; i <= high; i++) {\n ort[i] = H.get(i, m - 1);\n }\n\n for (j = m; j <= high; j++) {\n g = 0;\n for (i = m; i <= high; i++) {\n g += ort[i] * V.get(i, j);\n }\n\n g = g / ort[m] / H.get(m, m - 1);\n for (i = m; i <= high; i++) {\n V.set(i, j, V.get(i, j) + g * ort[i]);\n }\n }\n }\n }\n}\n\nfunction hqr2(nn, e, d, V, H) {\n let n = nn - 1;\n let low = 0;\n let high = nn - 1;\n let eps = Number.EPSILON;\n let exshift = 0;\n let norm = 0;\n let p = 0;\n let q = 0;\n let r = 0;\n let s = 0;\n let z = 0;\n let iter = 0;\n let i, j, k, l, m, t, w, x, y;\n let ra, sa, vr, vi;\n let notlast, cdivres;\n\n for (i = 0; i < nn; i++) {\n if (i < low || i > high) {\n d[i] = H.get(i, i);\n e[i] = 0;\n }\n\n for (j = Math.max(i - 1, 0); j < nn; j++) {\n norm = norm + Math.abs(H.get(i, j));\n }\n }\n\n while (n >= low) {\n l = n;\n while (l > low) {\n s = Math.abs(H.get(l - 1, l - 1)) + Math.abs(H.get(l, l));\n if (s === 0) {\n s = norm;\n }\n if (Math.abs(H.get(l, l - 1)) < eps * s) {\n break;\n }\n l--;\n }\n\n if (l === n) {\n H.set(n, n, H.get(n, n) + exshift);\n d[n] = H.get(n, n);\n e[n] = 0;\n n--;\n iter = 0;\n } else if (l === n - 1) {\n w = H.get(n, n - 1) * H.get(n - 1, n);\n p = (H.get(n - 1, n - 1) - H.get(n, n)) / 2;\n q = p * p + w;\n z = Math.sqrt(Math.abs(q));\n H.set(n, n, H.get(n, n) + exshift);\n H.set(n - 1, n - 1, H.get(n - 1, n - 1) + exshift);\n x = H.get(n, n);\n\n if (q >= 0) {\n z = p >= 0 ? p + z : p - z;\n d[n - 1] = x + z;\n d[n] = d[n - 1];\n if (z !== 0) {\n d[n] = x - w / z;\n }\n e[n - 1] = 0;\n e[n] = 0;\n x = H.get(n, n - 1);\n s = Math.abs(x) + Math.abs(z);\n p = x / s;\n q = z / s;\n r = Math.sqrt(p * p + q * q);\n p = p / r;\n q = q / r;\n\n for (j = n - 1; j < nn; j++) {\n z = H.get(n - 1, j);\n H.set(n - 1, j, q * z + p * H.get(n, j));\n H.set(n, j, q * H.get(n, j) - p * z);\n }\n\n for (i = 0; i <= n; i++) {\n z = H.get(i, n - 1);\n H.set(i, n - 1, q * z + p * H.get(i, n));\n H.set(i, n, q * H.get(i, n) - p * z);\n }\n\n for (i = low; i <= high; i++) {\n z = V.get(i, n - 1);\n V.set(i, n - 1, q * z + p * V.get(i, n));\n V.set(i, n, q * V.get(i, n) - p * z);\n }\n } else {\n d[n - 1] = x + p;\n d[n] = x + p;\n e[n - 1] = z;\n e[n] = -z;\n }\n\n n = n - 2;\n iter = 0;\n } else {\n x = H.get(n, n);\n y = 0;\n w = 0;\n if (l < n) {\n y = H.get(n - 1, n - 1);\n w = H.get(n, n - 1) * H.get(n - 1, n);\n }\n\n if (iter === 10) {\n exshift += x;\n for (i = low; i <= n; i++) {\n H.set(i, i, H.get(i, i) - x);\n }\n s = Math.abs(H.get(n, n - 1)) + Math.abs(H.get(n - 1, n - 2));\n x = y = 0.75 * s;\n w = -0.4375 * s * s;\n }\n\n if (iter === 30) {\n s = (y - x) / 2;\n s = s * s + w;\n if (s > 0) {\n s = Math.sqrt(s);\n if (y < x) {\n s = -s;\n }\n s = x - w / ((y - x) / 2 + s);\n for (i = low; i <= n; i++) {\n H.set(i, i, H.get(i, i) - s);\n }\n exshift += s;\n x = y = w = 0.964;\n }\n }\n\n iter = iter + 1;\n\n m = n - 2;\n while (m >= l) {\n z = H.get(m, m);\n r = x - z;\n s = y - z;\n p = (r * s - w) / H.get(m + 1, m) + H.get(m, m + 1);\n q = H.get(m + 1, m + 1) - z - r - s;\n r = H.get(m + 2, m + 1);\n s = Math.abs(p) + Math.abs(q) + Math.abs(r);\n p = p / s;\n q = q / s;\n r = r / s;\n if (m === l) {\n break;\n }\n if (\n Math.abs(H.get(m, m - 1)) * (Math.abs(q) + Math.abs(r)) <\n eps *\n (Math.abs(p) *\n (Math.abs(H.get(m - 1, m - 1)) +\n Math.abs(z) +\n Math.abs(H.get(m + 1, m + 1))))\n ) {\n break;\n }\n m--;\n }\n\n for (i = m + 2; i <= n; i++) {\n H.set(i, i - 2, 0);\n if (i > m + 2) {\n H.set(i, i - 3, 0);\n }\n }\n\n for (k = m; k <= n - 1; k++) {\n notlast = k !== n - 1;\n if (k !== m) {\n p = H.get(k, k - 1);\n q = H.get(k + 1, k - 1);\n r = notlast ? H.get(k + 2, k - 1) : 0;\n x = Math.abs(p) + Math.abs(q) + Math.abs(r);\n if (x !== 0) {\n p = p / x;\n q = q / x;\n r = r / x;\n }\n }\n\n if (x === 0) {\n break;\n }\n\n s = Math.sqrt(p * p + q * q + r * r);\n if (p < 0) {\n s = -s;\n }\n\n if (s !== 0) {\n if (k !== m) {\n H.set(k, k - 1, -s * x);\n } else if (l !== m) {\n H.set(k, k - 1, -H.get(k, k - 1));\n }\n\n p = p + s;\n x = p / s;\n y = q / s;\n z = r / s;\n q = q / p;\n r = r / p;\n\n for (j = k; j < nn; j++) {\n p = H.get(k, j) + q * H.get(k + 1, j);\n if (notlast) {\n p = p + r * H.get(k + 2, j);\n H.set(k + 2, j, H.get(k + 2, j) - p * z);\n }\n\n H.set(k, j, H.get(k, j) - p * x);\n H.set(k + 1, j, H.get(k + 1, j) - p * y);\n }\n\n for (i = 0; i <= Math.min(n, k + 3); i++) {\n p = x * H.get(i, k) + y * H.get(i, k + 1);\n if (notlast) {\n p = p + z * H.get(i, k + 2);\n H.set(i, k + 2, H.get(i, k + 2) - p * r);\n }\n\n H.set(i, k, H.get(i, k) - p);\n H.set(i, k + 1, H.get(i, k + 1) - p * q);\n }\n\n for (i = low; i <= high; i++) {\n p = x * V.get(i, k) + y * V.get(i, k + 1);\n if (notlast) {\n p = p + z * V.get(i, k + 2);\n V.set(i, k + 2, V.get(i, k + 2) - p * r);\n }\n\n V.set(i, k, V.get(i, k) - p);\n V.set(i, k + 1, V.get(i, k + 1) - p * q);\n }\n }\n }\n }\n }\n\n if (norm === 0) {\n return;\n }\n\n for (n = nn - 1; n >= 0; n--) {\n p = d[n];\n q = e[n];\n\n if (q === 0) {\n l = n;\n H.set(n, n, 1);\n for (i = n - 1; i >= 0; i--) {\n w = H.get(i, i) - p;\n r = 0;\n for (j = l; j <= n; j++) {\n r = r + H.get(i, j) * H.get(j, n);\n }\n\n if (e[i] < 0) {\n z = w;\n s = r;\n } else {\n l = i;\n if (e[i] === 0) {\n H.set(i, n, w !== 0 ? -r / w : -r / (eps * norm));\n } else {\n x = H.get(i, i + 1);\n y = H.get(i + 1, i);\n q = (d[i] - p) * (d[i] - p) + e[i] * e[i];\n t = (x * s - z * r) / q;\n H.set(i, n, t);\n H.set(\n i + 1,\n n,\n Math.abs(x) > Math.abs(z) ? (-r - w * t) / x : (-s - y * t) / z,\n );\n }\n\n t = Math.abs(H.get(i, n));\n if (eps * t * t > 1) {\n for (j = i; j <= n; j++) {\n H.set(j, n, H.get(j, n) / t);\n }\n }\n }\n }\n } else if (q < 0) {\n l = n - 1;\n\n if (Math.abs(H.get(n, n - 1)) > Math.abs(H.get(n - 1, n))) {\n H.set(n - 1, n - 1, q / H.get(n, n - 1));\n H.set(n - 1, n, -(H.get(n, n) - p) / H.get(n, n - 1));\n } else {\n cdivres = cdiv(0, -H.get(n - 1, n), H.get(n - 1, n - 1) - p, q);\n H.set(n - 1, n - 1, cdivres[0]);\n H.set(n - 1, n, cdivres[1]);\n }\n\n H.set(n, n - 1, 0);\n H.set(n, n, 1);\n for (i = n - 2; i >= 0; i--) {\n ra = 0;\n sa = 0;\n for (j = l; j <= n; j++) {\n ra = ra + H.get(i, j) * H.get(j, n - 1);\n sa = sa + H.get(i, j) * H.get(j, n);\n }\n\n w = H.get(i, i) - p;\n\n if (e[i] < 0) {\n z = w;\n r = ra;\n s = sa;\n } else {\n l = i;\n if (e[i] === 0) {\n cdivres = cdiv(-ra, -sa, w, q);\n H.set(i, n - 1, cdivres[0]);\n H.set(i, n, cdivres[1]);\n } else {\n x = H.get(i, i + 1);\n y = H.get(i + 1, i);\n vr = (d[i] - p) * (d[i] - p) + e[i] * e[i] - q * q;\n vi = (d[i] - p) * 2 * q;\n if (vr === 0 && vi === 0) {\n vr =\n eps *\n norm *\n (Math.abs(w) +\n Math.abs(q) +\n Math.abs(x) +\n Math.abs(y) +\n Math.abs(z));\n }\n cdivres = cdiv(\n x * r - z * ra + q * sa,\n x * s - z * sa - q * ra,\n vr,\n vi,\n );\n H.set(i, n - 1, cdivres[0]);\n H.set(i, n, cdivres[1]);\n if (Math.abs(x) > Math.abs(z) + Math.abs(q)) {\n H.set(\n i + 1,\n n - 1,\n (-ra - w * H.get(i, n - 1) + q * H.get(i, n)) / x,\n );\n H.set(\n i + 1,\n n,\n (-sa - w * H.get(i, n) - q * H.get(i, n - 1)) / x,\n );\n } else {\n cdivres = cdiv(\n -r - y * H.get(i, n - 1),\n -s - y * H.get(i, n),\n z,\n q,\n );\n H.set(i + 1, n - 1, cdivres[0]);\n H.set(i + 1, n, cdivres[1]);\n }\n }\n\n t = Math.max(Math.abs(H.get(i, n - 1)), Math.abs(H.get(i, n)));\n if (eps * t * t > 1) {\n for (j = i; j <= n; j++) {\n H.set(j, n - 1, H.get(j, n - 1) / t);\n H.set(j, n, H.get(j, n) / t);\n }\n }\n }\n }\n }\n }\n\n for (i = 0; i < nn; i++) {\n if (i < low || i > high) {\n for (j = i; j < nn; j++) {\n V.set(i, j, H.get(i, j));\n }\n }\n }\n\n for (j = nn - 1; j >= low; j--) {\n for (i = low; i <= high; i++) {\n z = 0;\n for (k = low; k <= Math.min(j, high); k++) {\n z = z + V.get(i, k) * H.get(k, j);\n }\n V.set(i, j, z);\n }\n }\n}\n\nfunction cdiv(xr, xi, yr, yi) {\n let r, d;\n if (Math.abs(yr) > Math.abs(yi)) {\n r = yi / yr;\n d = yr + r * yi;\n return [(xr + r * xi) / d, (xi - r * xr) / d];\n } else {\n r = yr / yi;\n d = yi + r * yr;\n return [(r * xr + xi) / d, (r * xi - xr) / d];\n }\n}\n","import Matrix from '../matrix';\nimport WrapperMatrix2D from '../wrap/WrapperMatrix2D';\n\nexport default class CholeskyDecomposition {\n constructor(value) {\n value = WrapperMatrix2D.checkMatrix(value);\n if (!value.isSymmetric()) {\n throw new Error('Matrix is not symmetric');\n }\n\n let a = value;\n let dimension = a.rows;\n let l = new Matrix(dimension, dimension);\n let positiveDefinite = true;\n let i, j, k;\n\n for (j = 0; j < dimension; j++) {\n let d = 0;\n for (k = 0; k < j; k++) {\n let s = 0;\n for (i = 0; i < k; i++) {\n s += l.get(k, i) * l.get(j, i);\n }\n s = (a.get(j, k) - s) / l.get(k, k);\n l.set(j, k, s);\n d = d + s * s;\n }\n\n d = a.get(j, j) - d;\n\n positiveDefinite &= d > 0;\n l.set(j, j, Math.sqrt(Math.max(d, 0)));\n for (k = j + 1; k < dimension; k++) {\n l.set(j, k, 0);\n }\n }\n\n this.L = l;\n this.positiveDefinite = Boolean(positiveDefinite);\n }\n\n isPositiveDefinite() {\n return this.positiveDefinite;\n }\n\n solve(value) {\n value = WrapperMatrix2D.checkMatrix(value);\n\n let l = this.L;\n let dimension = l.rows;\n\n if (value.rows !== dimension) {\n throw new Error('Matrix dimensions do not match');\n }\n if (this.isPositiveDefinite() === false) {\n throw new Error('Matrix is not positive definite');\n }\n\n let count = value.columns;\n let B = value.clone();\n let i, j, k;\n\n for (k = 0; k < dimension; k++) {\n for (j = 0; j < count; j++) {\n for (i = 0; i < k; i++) {\n B.set(k, j, B.get(k, j) - B.get(i, j) * l.get(k, i));\n }\n B.set(k, j, B.get(k, j) / l.get(k, k));\n }\n }\n\n for (k = dimension - 1; k >= 0; k--) {\n for (j = 0; j < count; j++) {\n for (i = k + 1; i < dimension; i++) {\n B.set(k, j, B.get(k, j) - B.get(i, j) * l.get(i, k));\n }\n B.set(k, j, B.get(k, j) / l.get(k, k));\n }\n }\n\n return B;\n }\n\n get lowerTriangularMatrix() {\n return this.L;\n }\n}\n","import WrapperMatrix2D from '../wrap/WrapperMatrix2D';\nimport Matrix from '../matrix';\n\nexport default class nipals {\n constructor(X, options = {}) {\n X = WrapperMatrix2D.checkMatrix(X);\n let { Y } = options;\n const {\n scaleScores = false,\n maxIterations = 1000,\n terminationCriteria = 1e-10,\n } = options;\n\n let u;\n if (Y) {\n if (Array.isArray(Y) && typeof Y[0] === 'number') {\n Y = Matrix.columnVector(Y);\n } else {\n Y = WrapperMatrix2D.checkMatrix(Y);\n }\n if (!Y.isColumnVector() || Y.rows !== X.rows) {\n throw new Error('Y must be a column vector of length X.rows');\n }\n u = Y;\n } else {\n u = X.getColumnVector(0);\n }\n\n let diff = 1;\n let t, q, w, tOld;\n\n for (\n let counter = 0;\n counter < maxIterations && diff > terminationCriteria;\n counter++\n ) {\n w = X.transpose()\n .mmul(u)\n .div(\n u\n .transpose()\n .mmul(u)\n .get(0, 0),\n );\n w = w.div(w.norm());\n\n t = X.mmul(w).div(\n w\n .transpose()\n .mmul(w)\n .get(0, 0),\n );\n\n if (counter > 0) {\n diff = t\n .clone()\n .sub(tOld)\n .pow(2)\n .sum();\n }\n tOld = t.clone();\n\n if (Y) {\n q = Y.transpose()\n .mmul(t)\n .div(\n t\n .transpose()\n .mmul(t)\n .get(0, 0),\n );\n q = q.div(q.norm());\n\n u = Y.mmul(q).div(\n q\n .transpose()\n .mmul(q)\n .get(0, 0),\n );\n } else {\n u = t;\n }\n }\n\n if (Y) {\n let p = X.transpose()\n .mmul(t)\n .div(\n t\n .transpose()\n .mmul(t)\n .get(0, 0),\n );\n p = p.div(p.norm());\n let xResidual = X.clone().sub(t.clone().mmul(p.transpose()));\n let residual = u\n .transpose()\n .mmul(t)\n .div(\n t\n .transpose()\n .mmul(t)\n .get(0, 0),\n );\n let yResidual = Y.clone().sub(\n t\n .clone()\n .mulS(residual.get(0, 0))\n .mmul(q.transpose()),\n );\n\n this.t = t;\n this.p = p.transpose();\n this.w = w.transpose();\n this.q = q;\n this.u = u;\n this.s = t.transpose().mmul(t);\n this.xResidual = xResidual;\n this.yResidual = yResidual;\n this.betas = residual;\n } else {\n this.w = w.transpose();\n this.s = t\n .transpose()\n .mmul(t)\n .sqrt();\n if (scaleScores) {\n this.t = t.clone().div(this.s.get(0, 0));\n } else {\n this.t = t;\n }\n this.xResidual = X.sub(t.mmul(w.transpose()));\n }\n }\n}\n","import isArray from 'is-any-array';\n\n/**\n * Computes the mean of the given values\n * @param {Array} input\n * @return {number}\n */\n\nfunction mean(input) {\n if (!isArray(input)) {\n throw new TypeError('input must be an array');\n }\n\n if (input.length === 0) {\n throw new TypeError('input must not be empty');\n }\n\n var sum = 0;\n\n for (var i = 0; i < input.length; i++) {\n sum += input[i];\n }\n\n return sum / input.length;\n}\n\nexport default mean;\n","import Matrix from 'ml-matrix';\nimport meanArray from 'ml-array-mean';\n\n/**\n * @private\n * return an array of probabilities of each class\n * @param {Array} array - contains the classes\n * @param {number} numberOfClasses\n * @return {Matrix} - rowVector of probabilities.\n */\nexport function toDiscreteDistribution(array, numberOfClasses) {\n var counts = new Array(numberOfClasses).fill(0);\n for (var i = 0; i < array.length; ++i) {\n counts[array[i]] += 1 / array.length;\n }\n\n return Matrix.rowVector(counts);\n}\n\n/**\n * @private\n * Retrieves the impurity of array of predictions\n * @param {Array} array - predictions.\n * @return {number} Gini impurity\n */\nexport function giniImpurity(array) {\n if (array.length === 0) {\n return 0;\n }\n\n var probabilities = toDiscreteDistribution(\n array,\n getNumberOfClasses(array)\n ).getRow(0);\n\n var sum = 0.0;\n for (var i = 0; i < probabilities.length; ++i) {\n sum += probabilities[i] * probabilities[i];\n }\n\n return 1 - sum;\n}\n\n/**\n * @private\n * Return the number of classes given the array of predictions.\n * @param {Array} array - predictions.\n * @return {number} Number of classes.\n */\nexport function getNumberOfClasses(array) {\n return array.filter(function (val, i, arr) {\n return arr.indexOf(val) === i;\n }).length;\n}\n\n/**\n * @private\n * Calculates the Gini Gain of an array of predictions and those predictions splitted by a feature.\n * @para {Array} array - Predictions\n * @param {object} splitted - Object with elements \"greater\" and \"lesser\" that contains an array of predictions splitted.\n * @return {number} - Gini Gain.\n */\n\nexport function giniGain(array, splitted) {\n var splitsImpurity = 0.0;\n var splits = ['greater', 'lesser'];\n\n for (var i = 0; i < splits.length; ++i) {\n var currentSplit = splitted[splits[i]];\n splitsImpurity +=\n (giniImpurity(currentSplit) * currentSplit.length) / array.length;\n }\n\n return giniImpurity(array) - splitsImpurity;\n}\n\n/**\n * @private\n * Calculates the squared error of a predictions values.\n * @param {Array} array - predictions values\n * @return {number} squared error.\n */\nexport function squaredError(array) {\n var l = array.length;\n\n var m = meanArray(array);\n var squaredError = 0.0;\n\n for (var i = 0; i < l; ++i) {\n var currentElement = array[i];\n squaredError += (currentElement - m) * (currentElement - m);\n }\n\n return squaredError;\n}\n\n/**\n * @private\n * Calculates the sum of squared error of the two arrays that contains the splitted values.\n * @param {Array} array - this argument is no necessary but is used to fit with the main interface.\n * @param {object} splitted - Object with elements \"greater\" and \"lesser\" that contains an array of predictions splitted.\n * @return {number} - sum of squared errors.\n */\nexport function regressionError(array, splitted) {\n var error = 0.0;\n var splits = ['greater', 'lesser'];\n\n for (var i = 0; i < splits.length; ++i) {\n var currentSplit = splitted[splits[i]];\n error += squaredError(currentSplit);\n }\n return error;\n}\n\n/**\n * @private\n * Split the training set and values from a given column of the training set if is less than a value\n * @param {Matrix} X - Training set.\n * @param {Array} y - Training values.\n * @param {number} column - Column to split.\n * @param {number} value - value to split the Training set and values.\n * @return {object} - Object that contains the splitted values.\n */\nexport function matrixSplitter(X, y, column, value) {\n var lesserX = [];\n var greaterX = [];\n var lesserY = [];\n var greaterY = [];\n\n for (var i = 0; i < X.rows; ++i) {\n if (X.get(i, column) < value) {\n lesserX.push(X.getRow(i));\n lesserY.push(y[i]);\n } else {\n greaterX.push(X.getRow(i));\n greaterY.push(y[i]);\n }\n }\n\n return {\n greaterX: greaterX,\n greaterY: greaterY,\n lesserX: lesserX,\n lesserY: lesserY\n };\n}\n\n/**\n * @private\n * Calculates the mean between two values\n * @param {number} a\n * @param {number} b\n * @return {number}\n */\nexport function mean(a, b) {\n return (a + b) / 2;\n}\n\n/**\n * @private\n * Returns a list of tuples that contains the i-th element of each array.\n * @param {Array} a\n * @param {Array} b\n * @return {Array} list of tuples.\n */\nexport function zip(a, b) {\n if (a.length !== b.length) {\n throw new TypeError(\n `Error on zip: the size of a: ${a.length} is different from b: ${\n b.length\n }`\n );\n }\n\n var ret = new Array(a.length);\n for (var i = 0; i < a.length; ++i) {\n ret[i] = [a[i], b[i]];\n }\n\n return ret;\n}\n","import Matrix from 'ml-matrix';\nimport mean from 'ml-array-mean';\n\nimport * as Utils from './utils';\n\nconst gainFunctions = {\n gini: Utils.giniGain,\n regression: Utils.regressionError\n};\n\nconst splitFunctions = {\n mean: Utils.mean\n};\n\nexport default class TreeNode {\n /**\n * @private\n * Constructor for a tree node given the options received on the main classes (DecisionTreeClassifier, DecisionTreeRegression)\n * @param {object|TreeNode} options for loading\n * @constructor\n */\n constructor(options) {\n // options parameters\n this.kind = options.kind;\n this.gainFunction = options.gainFunction;\n this.splitFunction = options.splitFunction;\n this.minNumSamples = options.minNumSamples;\n this.maxDepth = options.maxDepth;\n }\n\n /**\n * @private\n * Function that retrieve the best feature to make the split.\n * @param {Matrix} XTranspose - Training set transposed\n * @param {Array} y - labels or values (depending of the decision tree)\n * @return {object} - return tree values, the best gain, column and the split value.\n */\n bestSplit(XTranspose, y) {\n // Depending in the node tree class, we set the variables to check information gain (to classify)\n // or error (for regression)\n\n var bestGain = this.kind === 'classifier' ? -Infinity : Infinity;\n var check = this.kind === 'classifier' ? (a, b) => a > b : (a, b) => a < b;\n\n var maxColumn;\n var maxValue;\n\n for (var i = 0; i < XTranspose.rows; ++i) {\n var currentFeature = XTranspose.getRow(i);\n var splitValues = this.featureSplit(currentFeature, y);\n for (var j = 0; j < splitValues.length; ++j) {\n var currentSplitVal = splitValues[j];\n var splitted = this.split(currentFeature, y, currentSplitVal);\n\n var gain = gainFunctions[this.gainFunction](y, splitted);\n if (check(gain, bestGain)) {\n maxColumn = i;\n maxValue = currentSplitVal;\n bestGain = gain;\n }\n }\n }\n\n return {\n maxGain: bestGain,\n maxColumn: maxColumn,\n maxValue: maxValue\n };\n }\n\n /**\n * @private\n * Makes the split of the training labels or values from the training set feature given a split value.\n * @param {Array} x - Training set feature\n * @param {Array} y - Training set value or label\n * @param {number} splitValue\n * @return {object}\n */\n split(x, y, splitValue) {\n var lesser = [];\n var greater = [];\n\n for (var i = 0; i < x.length; ++i) {\n if (x[i] < splitValue) {\n lesser.push(y[i]);\n } else {\n greater.push(y[i]);\n }\n }\n\n return {\n greater: greater,\n lesser: lesser\n };\n }\n\n /**\n * @private\n * Calculates the possible points to split over the tree given a training set feature and corresponding labels or values.\n * @param {Array} x - Training set feature\n * @param {Array} y - Training set value or label\n * @return {Array} possible split values.\n */\n featureSplit(x, y) {\n var splitValues = [];\n var arr = Utils.zip(x, y);\n arr.sort(function (a, b) {\n return a[0] - b[0];\n });\n\n for (var i = 1; i < arr.length; ++i) {\n if (arr[i - 1][1] !== arr[i][1]) {\n splitValues.push(\n splitFunctions[this.splitFunction](arr[i - 1][0], arr[i][0])\n );\n }\n }\n\n return splitValues;\n }\n\n /**\n * @private\n * Calculate the predictions of a leaf tree node given the training labels or values\n * @param {Array} y\n */\n calculatePrediction(y) {\n if (this.kind === 'classifier') {\n this.distribution = Utils.toDiscreteDistribution(\n y,\n Utils.getNumberOfClasses(y)\n );\n if (this.distribution.columns === 0) {\n throw new TypeError('Error on calculate the prediction');\n }\n } else {\n this.distribution = mean(y);\n }\n }\n\n /**\n * @private\n * Train a node given the training set and labels, because it trains recursively, it also receive\n * the current depth of the node, parent gain to avoid infinite recursion and boolean value to check if\n * the training set is transposed.\n * @param {Matrix} X - Training set (could be transposed or not given transposed).\n * @param {Array} y - Training labels or values.\n * @param {number} currentDepth - Current depth of the node.\n * @param {number} parentGain - parent node gain or error.\n */\n train(X, y, currentDepth, parentGain) {\n if (X.rows <= this.minNumSamples) {\n this.calculatePrediction(y);\n return;\n }\n if (parentGain === undefined) parentGain = 0.0;\n\n var XTranspose = X.transpose();\n var split = this.bestSplit(XTranspose, y);\n\n this.splitValue = split.maxValue;\n this.splitColumn = split.maxColumn;\n this.gain = split.maxGain;\n\n var splittedMatrix = Utils.matrixSplitter(\n X,\n y,\n this.splitColumn,\n this.splitValue\n );\n\n if (\n currentDepth < this.maxDepth &&\n (this.gain > 0.01 && this.gain !== parentGain) &&\n (splittedMatrix.lesserX.length > 0 && splittedMatrix.greaterX.length > 0)\n ) {\n this.left = new TreeNode(this);\n this.right = new TreeNode(this);\n\n var lesserX = new Matrix(splittedMatrix.lesserX);\n var greaterX = new Matrix(splittedMatrix.greaterX);\n\n this.left.train(\n lesserX,\n splittedMatrix.lesserY,\n currentDepth + 1,\n this.gain\n );\n this.right.train(\n greaterX,\n splittedMatrix.greaterY,\n currentDepth + 1,\n this.gain\n );\n } else {\n this.calculatePrediction(y);\n }\n }\n\n /**\n * @private\n * Calculates the prediction of a given element.\n * @param {Array} row\n * @return {number|Array} prediction\n * * if a node is a classifier returns an array of probabilities of each class.\n * * if a node is for regression returns a number with the prediction.\n */\n classify(row) {\n if (this.right && this.left) {\n if (row[this.splitColumn] < this.splitValue) {\n return this.left.classify(row);\n } else {\n return this.right.classify(row);\n }\n }\n\n return this.distribution;\n }\n\n /**\n * @private\n * Set the parameter of the current node and their children.\n * @param {object} node - parameters of the current node and the children.\n */\n setNodeParameters(node) {\n if (node.distribution !== undefined) {\n this.distribution =\n node.distribution.constructor === Array\n ? new Matrix(node.distribution)\n : node.distribution;\n } else {\n this.distribution = undefined;\n this.splitValue = node.splitValue;\n this.splitColumn = node.splitColumn;\n this.gain = node.gain;\n\n this.left = new TreeNode(this);\n this.right = new TreeNode(this);\n\n if (node.left !== {}) {\n this.left.setNodeParameters(node.left);\n }\n if (node.right !== {}) {\n this.right.setNodeParameters(node.right);\n }\n }\n }\n}\n","import Matrix from 'ml-matrix';\n\nimport Tree from './TreeNode';\n\nconst defaultOptions = {\n gainFunction: 'gini',\n splitFunction: 'mean',\n minNumSamples: 3,\n maxDepth: Infinity\n};\n\nexport class DecisionTreeClassifier {\n /**\n * Create new Decision Tree Classifier with CART implementation with the given options\n * @param {object} options\n * @param {string} [options.gainFunction=\"gini\"] - gain function to get the best split, \"gini\" the only one supported.\n * @param {string} [options.splitFunction=\"mean\"] - given two integers from a split feature, get the value to split, \"mean\" the only one supported.\n * @param {number} [options.minNumSamples=3] - minimum number of samples to create a leaf node to decide a class.\n * @param {number} [options.maxDepth=Infinity] - Max depth of the tree.\n * @param {object} model - for load purposes.\n * @constructor\n */\n constructor(options, model) {\n if (options === true) {\n this.options = model.options;\n this.root = new Tree(model.options);\n this.root.setNodeParameters(model.root);\n } else {\n this.options = Object.assign({}, defaultOptions, options);\n this.options.kind = 'classifier';\n }\n }\n\n /**\n * Train the decision tree with the given training set and labels.\n * @param {Matrix|MatrixTransposeView|Array} trainingSet\n * @param {Array} trainingLabels\n */\n train(trainingSet, trainingLabels) {\n this.root = new Tree(this.options);\n trainingSet = Matrix.checkMatrix(trainingSet);\n this.root.train(trainingSet, trainingLabels, 0, null);\n }\n\n /**\n * Predicts the output given the matrix to predict.\n * @param {Matrix|MatrixTransposeView|Array} toPredict\n * @return {Array} predictions\n */\n predict(toPredict) {\n toPredict = Matrix.checkMatrix(toPredict);\n var predictions = new Array(toPredict.rows);\n\n for (var i = 0; i < toPredict.rows; ++i) {\n predictions[i] = this.root\n .classify(toPredict.getRow(i))\n .maxRowIndex(0)[1];\n }\n\n return predictions;\n }\n\n /**\n * Export the current model to JSON.\n * @return {object} - Current model.\n */\n toJSON() {\n return {\n options: this.options,\n root: this.root,\n name: 'DTClassifier'\n };\n }\n\n /**\n * Load a Decision tree classifier with the given model.\n * @param {object} model\n * @return {DecisionTreeClassifier}\n */\n static load(model) {\n if (model.name !== 'DTClassifier') {\n throw new RangeError(`Invalid model: ${model.name}`);\n }\n\n return new DecisionTreeClassifier(true, model);\n }\n}\n","import Matrix from 'ml-matrix';\n\nimport Tree from './TreeNode';\n\nconst defaultOptions = {\n gainFunction: 'regression',\n splitFunction: 'mean',\n minNumSamples: 3,\n maxDepth: Infinity\n};\n\nexport class DecisionTreeRegression {\n /**\n * Create new Decision Tree Regression with CART implementation with the given options.\n * @param {object} options\n * @param {string} [options.gainFunction=\"regression\"] - gain function to get the best split, \"regression\" the only one supported.\n * @param {string} [options.splitFunction=\"mean\"] - given two integers from a split feature, get the value to split, \"mean\" the only one supported.\n * @param {number} [options.minNumSamples=3] - minimum number of samples to create a leaf node to decide a class.\n * @param {number} [options.maxDepth=Infinity] - Max depth of the tree.\n * @param {object} model - for load purposes.\n */\n constructor(options, model) {\n if (options === true) {\n this.options = model.options;\n this.root = new Tree(model.options);\n this.root.setNodeParameters(model.root);\n } else {\n this.options = Object.assign({}, defaultOptions, options);\n this.options.kind = 'regression';\n }\n }\n\n /**\n * Train the decision tree with the given training set and values.\n * @param {Matrix|MatrixTransposeView|Array} trainingSet\n * @param {Array} trainingValues\n */\n train(trainingSet, trainingValues) {\n this.root = new Tree(this.options);\n\n if (typeof trainingSet[0] !== 'undefined' && trainingSet[0].length === undefined) {\n trainingSet = Matrix.columnVector(trainingSet);\n } else {\n trainingSet = Matrix.checkMatrix(trainingSet);\n }\n this.root.train(trainingSet, trainingValues, 0);\n }\n\n /**\n * Predicts the values given the matrix to predict.\n * @param {Matrix|MatrixTransposeView|Array} toPredict\n * @return {Array} predictions\n */\n predict(toPredict) {\n if (typeof toPredict[0] !== 'undefined' && toPredict[0].length === undefined) {\n toPredict = Matrix.columnVector(toPredict);\n }\n toPredict = Matrix.checkMatrix(toPredict);\n\n var predictions = new Array(toPredict.rows);\n for (var i = 0; i < toPredict.rows; ++i) {\n predictions[i] = this.root.classify(toPredict.getRow(i));\n }\n\n return predictions;\n }\n\n /**\n * Export the current model to JSON.\n * @return {object} - Current model.\n */\n toJSON() {\n return {\n options: this.options,\n root: this.root,\n name: 'DTRegression'\n };\n }\n\n /**\n * Load a Decision tree regression with the given model.\n * @param {object} model\n * @return {DecisionTreeRegression}\n */\n static load(model) {\n if (model.name !== 'DTRegression') {\n throw new RangeError(`Invalid model:${model.name}`);\n }\n\n return new DecisionTreeRegression(true, model);\n }\n}\n","const SMALLEST_UNSAFE_INTEGER = 0x20000000000000;\r\nconst LARGEST_SAFE_INTEGER = SMALLEST_UNSAFE_INTEGER - 1;\r\nconst UINT32_MAX = -1 >>> 0;\r\nconst UINT32_SIZE = UINT32_MAX + 1;\r\nconst INT32_SIZE = UINT32_SIZE / 2;\r\nconst INT32_MAX = INT32_SIZE - 1;\r\nconst UINT21_SIZE = 1 << 21;\r\nconst UINT21_MAX = UINT21_SIZE - 1;\n\n/**\r\n * Returns a value within [-0x80000000, 0x7fffffff]\r\n */\r\nfunction int32(engine) {\r\n return engine.next() | 0;\r\n}\n\nfunction add(distribution, addend) {\r\n if (addend === 0) {\r\n return distribution;\r\n }\r\n else {\r\n return engine => distribution(engine) + addend;\r\n }\r\n}\n\n/**\r\n * Returns a value within [-0x20000000000000, 0x1fffffffffffff]\r\n */\r\nfunction int53(engine) {\r\n const high = engine.next() | 0;\r\n const low = engine.next() >>> 0;\r\n return ((high & UINT21_MAX) * UINT32_SIZE +\r\n low +\r\n (high & UINT21_SIZE ? -SMALLEST_UNSAFE_INTEGER : 0));\r\n}\n\n/**\r\n * Returns a value within [-0x20000000000000, 0x20000000000000]\r\n */\r\nfunction int53Full(engine) {\r\n while (true) {\r\n const high = engine.next() | 0;\r\n if (high & 0x400000) {\r\n if ((high & 0x7fffff) === 0x400000 && (engine.next() | 0) === 0) {\r\n return SMALLEST_UNSAFE_INTEGER;\r\n }\r\n }\r\n else {\r\n const low = engine.next() >>> 0;\r\n return ((high & UINT21_MAX) * UINT32_SIZE +\r\n low +\r\n (high & UINT21_SIZE ? -SMALLEST_UNSAFE_INTEGER : 0));\r\n }\r\n }\r\n}\n\n/**\r\n * Returns a value within [0, 0xffffffff]\r\n */\r\nfunction uint32(engine) {\r\n return engine.next() >>> 0;\r\n}\n\n/**\r\n * Returns a value within [0, 0x1fffffffffffff]\r\n */\r\nfunction uint53(engine) {\r\n const high = engine.next() & UINT21_MAX;\r\n const low = engine.next() >>> 0;\r\n return high * UINT32_SIZE + low;\r\n}\n\n/**\r\n * Returns a value within [0, 0x20000000000000]\r\n */\r\nfunction uint53Full(engine) {\r\n while (true) {\r\n const high = engine.next() | 0;\r\n if (high & UINT21_SIZE) {\r\n if ((high & UINT21_MAX) === 0 && (engine.next() | 0) === 0) {\r\n return SMALLEST_UNSAFE_INTEGER;\r\n }\r\n }\r\n else {\r\n const low = engine.next() >>> 0;\r\n return (high & UINT21_MAX) * UINT32_SIZE + low;\r\n }\r\n }\r\n}\n\nfunction isPowerOfTwoMinusOne(value) {\r\n return ((value + 1) & value) === 0;\r\n}\r\nfunction bitmask(masking) {\r\n return (engine) => engine.next() & masking;\r\n}\r\nfunction downscaleToLoopCheckedRange(range) {\r\n const extendedRange = range + 1;\r\n const maximum = extendedRange * Math.floor(UINT32_SIZE / extendedRange);\r\n return engine => {\r\n let value = 0;\r\n do {\r\n value = engine.next() >>> 0;\r\n } while (value >= maximum);\r\n return value % extendedRange;\r\n };\r\n}\r\nfunction downscaleToRange(range) {\r\n if (isPowerOfTwoMinusOne(range)) {\r\n return bitmask(range);\r\n }\r\n else {\r\n return downscaleToLoopCheckedRange(range);\r\n }\r\n}\r\nfunction isEvenlyDivisibleByMaxInt32(value) {\r\n return (value | 0) === 0;\r\n}\r\nfunction upscaleWithHighMasking(masking) {\r\n return engine => {\r\n const high = engine.next() & masking;\r\n const low = engine.next() >>> 0;\r\n return high * UINT32_SIZE + low;\r\n };\r\n}\r\nfunction upscaleToLoopCheckedRange(extendedRange) {\r\n const maximum = extendedRange * Math.floor(SMALLEST_UNSAFE_INTEGER / extendedRange);\r\n return engine => {\r\n let ret = 0;\r\n do {\r\n const high = engine.next() & UINT21_MAX;\r\n const low = engine.next() >>> 0;\r\n ret = high * UINT32_SIZE + low;\r\n } while (ret >= maximum);\r\n return ret % extendedRange;\r\n };\r\n}\r\nfunction upscaleWithinU53(range) {\r\n const extendedRange = range + 1;\r\n if (isEvenlyDivisibleByMaxInt32(extendedRange)) {\r\n const highRange = ((extendedRange / UINT32_SIZE) | 0) - 1;\r\n if (isPowerOfTwoMinusOne(highRange)) {\r\n return upscaleWithHighMasking(highRange);\r\n }\r\n }\r\n return upscaleToLoopCheckedRange(extendedRange);\r\n}\r\nfunction upscaleWithinI53AndLoopCheck(min, max) {\r\n return engine => {\r\n let ret = 0;\r\n do {\r\n const high = engine.next() | 0;\r\n const low = engine.next() >>> 0;\r\n ret =\r\n (high & UINT21_MAX) * UINT32_SIZE +\r\n low +\r\n (high & UINT21_SIZE ? -SMALLEST_UNSAFE_INTEGER : 0);\r\n } while (ret < min || ret > max);\r\n return ret;\r\n };\r\n}\r\n/**\r\n * Returns a Distribution to return a value within [min, max]\r\n * @param min The minimum integer value, inclusive. No less than -0x20000000000000.\r\n * @param max The maximum integer value, inclusive. No greater than 0x20000000000000.\r\n */\r\nfunction integer(min, max) {\r\n min = Math.floor(min);\r\n max = Math.floor(max);\r\n if (min < -SMALLEST_UNSAFE_INTEGER || !isFinite(min)) {\r\n throw new RangeError(`Expected min to be at least ${-SMALLEST_UNSAFE_INTEGER}`);\r\n }\r\n else if (max > SMALLEST_UNSAFE_INTEGER || !isFinite(max)) {\r\n throw new RangeError(`Expected max to be at most ${SMALLEST_UNSAFE_INTEGER}`);\r\n }\r\n const range = max - min;\r\n if (range <= 0 || !isFinite(range)) {\r\n return () => min;\r\n }\r\n else if (range === UINT32_MAX) {\r\n if (min === 0) {\r\n return uint32;\r\n }\r\n else {\r\n return add(int32, min + INT32_SIZE);\r\n }\r\n }\r\n else if (range < UINT32_MAX) {\r\n return add(downscaleToRange(range), min);\r\n }\r\n else if (range === LARGEST_SAFE_INTEGER) {\r\n return add(uint53, min);\r\n }\r\n else if (range < LARGEST_SAFE_INTEGER) {\r\n return add(upscaleWithinU53(range), min);\r\n }\r\n else if (max - 1 - min === LARGEST_SAFE_INTEGER) {\r\n return add(uint53Full, min);\r\n }\r\n else if (min === -SMALLEST_UNSAFE_INTEGER &&\r\n max === SMALLEST_UNSAFE_INTEGER) {\r\n return int53Full;\r\n }\r\n else if (min === -SMALLEST_UNSAFE_INTEGER && max === LARGEST_SAFE_INTEGER) {\r\n return int53;\r\n }\r\n else if (min === -LARGEST_SAFE_INTEGER && max === SMALLEST_UNSAFE_INTEGER) {\r\n return add(int53, 1);\r\n }\r\n else if (max === SMALLEST_UNSAFE_INTEGER) {\r\n return add(upscaleWithinI53AndLoopCheck(min - 1, max - 1), 1);\r\n }\r\n else {\r\n return upscaleWithinI53AndLoopCheck(min, max);\r\n }\r\n}\n\nfunction isLeastBitTrue(engine) {\r\n return (engine.next() & 1) === 1;\r\n}\r\nfunction lessThan(distribution, value) {\r\n return engine => distribution(engine) < value;\r\n}\r\nfunction probability(percentage) {\r\n if (percentage <= 0) {\r\n return () => false;\r\n }\r\n else if (percentage >= 1) {\r\n return () => true;\r\n }\r\n else {\r\n const scaled = percentage * UINT32_SIZE;\r\n if (scaled % 1 === 0) {\r\n return lessThan(int32, (scaled - INT32_SIZE) | 0);\r\n }\r\n else {\r\n return lessThan(uint53, Math.round(percentage * SMALLEST_UNSAFE_INTEGER));\r\n }\r\n }\r\n}\r\nfunction bool(numerator, denominator) {\r\n if (denominator == null) {\r\n if (numerator == null) {\r\n return isLeastBitTrue;\r\n }\r\n return probability(numerator);\r\n }\r\n else {\r\n if (numerator <= 0) {\r\n return () => false;\r\n }\r\n else if (numerator >= denominator) {\r\n return () => true;\r\n }\r\n return lessThan(integer(0, denominator - 1), numerator);\r\n }\r\n}\n\n/**\r\n * Returns a Distribution that returns a random `Date` within the inclusive\r\n * range of [`start`, `end`].\r\n * @param start The minimum `Date`\r\n * @param end The maximum `Date`\r\n */\r\nfunction date(start, end) {\r\n const distribution = integer(+start, +end);\r\n return engine => new Date(distribution(engine));\r\n}\n\n/**\r\n * Returns a Distribution to return a value within [1, sideCount]\r\n * @param sideCount The number of sides of the die\r\n */\r\nfunction die(sideCount) {\r\n return integer(1, sideCount);\r\n}\n\n/**\r\n * Returns a distribution that returns an array of length `dieCount` of values\r\n * within [1, `sideCount`]\r\n * @param sideCount The number of sides of each die\r\n * @param dieCount The number of dice\r\n */\r\nfunction dice(sideCount, dieCount) {\r\n const distribution = die(sideCount);\r\n return engine => {\r\n const result = [];\r\n for (let i = 0; i < dieCount; ++i) {\r\n result.push(distribution(engine));\r\n }\r\n return result;\r\n };\r\n}\n\n// tslint:disable:unified-signatures\r\n// has 2**x chars, for faster uniform distribution\r\nconst DEFAULT_STRING_POOL = \"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_-\";\r\nfunction string(pool = DEFAULT_STRING_POOL) {\r\n const poolLength = pool.length;\r\n if (!poolLength) {\r\n throw new Error(\"Expected pool not to be an empty string\");\r\n }\r\n const distribution = integer(0, poolLength - 1);\r\n return (engine, length) => {\r\n let result = \"\";\r\n for (let i = 0; i < length; ++i) {\r\n const j = distribution(engine);\r\n result += pool.charAt(j);\r\n }\r\n return result;\r\n };\r\n}\n\nconst LOWER_HEX_POOL = \"0123456789abcdef\";\r\nconst lowerHex = string(LOWER_HEX_POOL);\r\nconst upperHex = string(LOWER_HEX_POOL.toUpperCase());\r\n/**\r\n * Returns a Distribution that returns a random string comprised of numbers\r\n * or the characters `abcdef` (or `ABCDEF`) of length `length`.\r\n * @param length Length of the result string\r\n * @param uppercase Whether the string should use `ABCDEF` instead of `abcdef`\r\n */\r\nfunction hex(uppercase) {\r\n if (uppercase) {\r\n return upperHex;\r\n }\r\n else {\r\n return lowerHex;\r\n }\r\n}\n\nfunction convertSliceArgument(value, length) {\r\n if (value < 0) {\r\n return Math.max(value + length, 0);\r\n }\r\n else {\r\n return Math.min(value, length);\r\n }\r\n}\n\nfunction toInteger(value) {\r\n const num = +value;\r\n if (num < 0) {\r\n return Math.ceil(num);\r\n }\r\n else {\r\n return Math.floor(num);\r\n }\r\n}\n\n/**\r\n * Returns a random value within the provided `source` within the sliced\r\n * bounds of `begin` and `end`.\r\n * @param source an array of items to pick from\r\n * @param begin the beginning slice index (defaults to `0`)\r\n * @param end the ending slice index (defaults to `source.length`)\r\n */\r\nfunction pick(engine, source, begin, end) {\r\n const length = source.length;\r\n if (length === 0) {\r\n throw new RangeError(\"Cannot pick from an empty array\");\r\n }\r\n const start = begin == null ? 0 : convertSliceArgument(toInteger(begin), length);\r\n const finish = end === void 0 ? length : convertSliceArgument(toInteger(end), length);\r\n if (start >= finish) {\r\n throw new RangeError(`Cannot pick between bounds ${start} and ${finish}`);\r\n }\r\n const distribution = integer(start, finish - 1);\r\n return source[distribution(engine)];\r\n}\n\nfunction multiply(distribution, multiplier) {\r\n if (multiplier === 1) {\r\n return distribution;\r\n }\r\n else if (multiplier === 0) {\r\n return () => 0;\r\n }\r\n else {\r\n return engine => distribution(engine) * multiplier;\r\n }\r\n}\n\n/**\r\n * Returns a floating-point value within [0.0, 1.0)\r\n */\r\nfunction realZeroToOneExclusive(engine) {\r\n return uint53(engine) / SMALLEST_UNSAFE_INTEGER;\r\n}\n\n/**\r\n * Returns a floating-point value within [0.0, 1.0]\r\n */\r\nfunction realZeroToOneInclusive(engine) {\r\n return uint53Full(engine) / SMALLEST_UNSAFE_INTEGER;\r\n}\n\n/**\r\n * Returns a floating-point value within [min, max) or [min, max]\r\n * @param min The minimum floating-point value, inclusive.\r\n * @param max The maximum floating-point value.\r\n * @param inclusive If true, `max` will be inclusive.\r\n */\r\nfunction real(min, max, inclusive = false) {\r\n if (!isFinite(min)) {\r\n throw new RangeError(\"Expected min to be a finite number\");\r\n }\r\n else if (!isFinite(max)) {\r\n throw new RangeError(\"Expected max to be a finite number\");\r\n }\r\n return add(multiply(inclusive ? realZeroToOneInclusive : realZeroToOneExclusive, max - min), min);\r\n}\n\nconst sliceArray = Array.prototype.slice;\n\n/**\r\n * Shuffles an array in-place\r\n * @param engine The Engine to use when choosing random values\r\n * @param array The array to shuffle\r\n * @param downTo minimum index to shuffle. Only used internally.\r\n */\r\nfunction shuffle(engine, array, downTo = 0) {\r\n const length = array.length;\r\n if (length) {\r\n for (let i = (length - 1) >>> 0; i > downTo; --i) {\r\n const distribution = integer(0, i);\r\n const j = distribution(engine);\r\n if (i !== j) {\r\n const tmp = array[i];\r\n array[i] = array[j];\r\n array[j] = tmp;\r\n }\r\n }\r\n }\r\n return array;\r\n}\n\n/**\r\n * From the population array, produce an array with sampleSize elements that\r\n * are randomly chosen without repeats.\r\n * @param engine The Engine to use when choosing random values\r\n * @param population An array that has items to choose a sample from\r\n * @param sampleSize The size of the result array\r\n */\r\nfunction sample(engine, population, sampleSize) {\r\n if (sampleSize < 0 ||\r\n sampleSize > population.length ||\r\n !isFinite(sampleSize)) {\r\n throw new RangeError(\"Expected sampleSize to be within 0 and the length of the population\");\r\n }\r\n if (sampleSize === 0) {\r\n return [];\r\n }\r\n const clone = sliceArray.call(population);\r\n const length = clone.length;\r\n if (length === sampleSize) {\r\n return shuffle(engine, clone, 0);\r\n }\r\n const tailLength = length - sampleSize;\r\n return shuffle(engine, clone, tailLength - 1).slice(tailLength);\r\n}\n\nconst stringRepeat = (() => {\r\n try {\r\n if (\"x\".repeat(3) === \"xxx\") {\r\n return (pattern, count) => pattern.repeat(count);\r\n }\r\n }\r\n catch (_) {\r\n // nothing to do here\r\n }\r\n return (pattern, count) => {\r\n let result = \"\";\r\n while (count > 0) {\r\n if (count & 1) {\r\n result += pattern;\r\n }\r\n count >>= 1;\r\n pattern += pattern;\r\n }\r\n return result;\r\n };\r\n})();\n\nfunction zeroPad(text, zeroCount) {\r\n return stringRepeat(\"0\", zeroCount - text.length) + text;\r\n}\r\n/**\r\n * Returns a Universally Unique Identifier Version 4.\r\n *\r\n * See http://en.wikipedia.org/wiki/Universally_unique_identifier\r\n */\r\nfunction uuid4(engine) {\r\n const a = engine.next() >>> 0;\r\n const b = engine.next() | 0;\r\n const c = engine.next() | 0;\r\n const d = engine.next() >>> 0;\r\n return (zeroPad(a.toString(16), 8) +\r\n \"-\" +\r\n zeroPad((b & 0xffff).toString(16), 4) +\r\n \"-\" +\r\n zeroPad((((b >> 4) & 0x0fff) | 0x4000).toString(16), 4) +\r\n \"-\" +\r\n zeroPad(((c & 0x3fff) | 0x8000).toString(16), 4) +\r\n \"-\" +\r\n zeroPad(((c >> 4) & 0xffff).toString(16), 4) +\r\n zeroPad(d.toString(16), 8));\r\n}\n\n/**\r\n * An int32-producing Engine that uses `Math.random()`\r\n */\r\nconst nativeMath = {\r\n next() {\r\n return (Math.random() * UINT32_SIZE) | 0;\r\n }\r\n};\n\n// tslint:disable:unified-signatures\r\n/**\r\n * A wrapper around an Engine that provides easy-to-use methods for\r\n * producing values based on known distributions\r\n */\r\nclass Random {\r\n /**\r\n * Creates a new Random wrapper\r\n * @param engine The engine to use (defaults to a `Math.random`-based implementation)\r\n */\r\n constructor(engine = nativeMath) {\r\n this.engine = engine;\r\n }\r\n /**\r\n * Returns a value within [-0x80000000, 0x7fffffff]\r\n */\r\n int32() {\r\n return int32(this.engine);\r\n }\r\n /**\r\n * Returns a value within [0, 0xffffffff]\r\n */\r\n uint32() {\r\n return uint32(this.engine);\r\n }\r\n /**\r\n * Returns a value within [0, 0x1fffffffffffff]\r\n */\r\n uint53() {\r\n return uint53(this.engine);\r\n }\r\n /**\r\n * Returns a value within [0, 0x20000000000000]\r\n */\r\n uint53Full() {\r\n return uint53Full(this.engine);\r\n }\r\n /**\r\n * Returns a value within [-0x20000000000000, 0x1fffffffffffff]\r\n */\r\n int53() {\r\n return int53(this.engine);\r\n }\r\n /**\r\n * Returns a value within [-0x20000000000000, 0x20000000000000]\r\n */\r\n int53Full() {\r\n return int53Full(this.engine);\r\n }\r\n /**\r\n * Returns a value within [min, max]\r\n * @param min The minimum integer value, inclusive. No less than -0x20000000000000.\r\n * @param max The maximum integer value, inclusive. No greater than 0x20000000000000.\r\n */\r\n integer(min, max) {\r\n return integer(min, max)(this.engine);\r\n }\r\n /**\r\n * Returns a floating-point value within [0.0, 1.0]\r\n */\r\n realZeroToOneInclusive() {\r\n return realZeroToOneInclusive(this.engine);\r\n }\r\n /**\r\n * Returns a floating-point value within [0.0, 1.0)\r\n */\r\n realZeroToOneExclusive() {\r\n return realZeroToOneExclusive(this.engine);\r\n }\r\n /**\r\n * Returns a floating-point value within [min, max) or [min, max]\r\n * @param min The minimum floating-point value, inclusive.\r\n * @param max The maximum floating-point value.\r\n * @param inclusive If true, `max` will be inclusive.\r\n */\r\n real(min, max, inclusive = false) {\r\n return real(min, max, inclusive)(this.engine);\r\n }\r\n bool(numerator, denominator) {\r\n return bool(numerator, denominator)(this.engine);\r\n }\r\n /**\r\n * Return a random value within the provided `source` within the sliced\r\n * bounds of `begin` and `end`.\r\n * @param source an array of items to pick from\r\n * @param begin the beginning slice index (defaults to `0`)\r\n * @param end the ending slice index (defaults to `source.length`)\r\n */\r\n pick(source, begin, end) {\r\n return pick(this.engine, source, begin, end);\r\n }\r\n /**\r\n * Shuffles an array in-place\r\n * @param array The array to shuffle\r\n */\r\n shuffle(array) {\r\n return shuffle(this.engine, array);\r\n }\r\n /**\r\n * From the population array, returns an array with sampleSize elements that\r\n * are randomly chosen without repeats.\r\n * @param population An array that has items to choose a sample from\r\n * @param sampleSize The size of the result array\r\n */\r\n sample(population, sampleSize) {\r\n return sample(this.engine, population, sampleSize);\r\n }\r\n /**\r\n * Returns a value within [1, sideCount]\r\n * @param sideCount The number of sides of the die\r\n */\r\n die(sideCount) {\r\n return die(sideCount)(this.engine);\r\n }\r\n /**\r\n * Returns an array of length `dieCount` of values within [1, sideCount]\r\n * @param sideCount The number of sides of each die\r\n * @param dieCount The number of dice\r\n */\r\n dice(sideCount, dieCount) {\r\n return dice(sideCount, dieCount)(this.engine);\r\n }\r\n /**\r\n * Returns a Universally Unique Identifier Version 4.\r\n *\r\n * See http://en.wikipedia.org/wiki/Universally_unique_identifier\r\n */\r\n uuid4() {\r\n return uuid4(this.engine);\r\n }\r\n string(length, pool) {\r\n return string(pool)(this.engine, length);\r\n }\r\n /**\r\n * Returns a random string comprised of numbers or the characters `abcdef`\r\n * (or `ABCDEF`) of length `length`.\r\n * @param length Length of the result string\r\n * @param uppercase Whether the string should use `ABCDEF` instead of `abcdef`\r\n */\r\n hex(length, uppercase) {\r\n return hex(uppercase)(this.engine, length);\r\n }\r\n /**\r\n * Returns a random `Date` within the inclusive range of [`start`, `end`].\r\n * @param start The minimum `Date`\r\n * @param end The maximum `Date`\r\n */\r\n date(start, end) {\r\n return date(start, end)(this.engine);\r\n }\r\n}\n\n/**\r\n * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Int32Array\r\n */\r\nconst I32Array = (() => {\r\n try {\r\n const buffer = new ArrayBuffer(4);\r\n const view = new Int32Array(buffer);\r\n view[0] = INT32_SIZE;\r\n if (view[0] === -INT32_SIZE) {\r\n return Int32Array;\r\n }\r\n }\r\n catch (_) {\r\n // nothing to do here\r\n }\r\n return Array;\r\n})();\n\nlet data = null;\r\nconst COUNT = 128;\r\nlet index = COUNT;\r\n/**\r\n * An Engine that relies on the globally-available `crypto.getRandomValues`,\r\n * which is typically available in modern browsers.\r\n *\r\n * See https://developer.mozilla.org/en-US/docs/Web/API/Crypto/getRandomValues\r\n *\r\n * If unavailable or otherwise non-functioning, then `browserCrypto` will\r\n * likely `throw` on the first call to `next()`.\r\n */\r\nconst browserCrypto = {\r\n next() {\r\n if (index >= COUNT) {\r\n if (data === null) {\r\n data = new I32Array(COUNT);\r\n }\r\n crypto.getRandomValues(data);\r\n index = 0;\r\n }\r\n return data[index++] | 0;\r\n }\r\n};\n\n/**\r\n * Returns an array of random int32 values, based on current time\r\n * and a random number engine\r\n *\r\n * @param engine an Engine to pull random values from, default `nativeMath`\r\n * @param length the length of the Array, minimum 1, default 16\r\n */\r\nfunction createEntropy(engine = nativeMath, length = 16) {\r\n const array = [];\r\n array.push(new Date().getTime() | 0);\r\n for (let i = 1; i < length; ++i) {\r\n array[i] = engine.next() | 0;\r\n }\r\n return array;\r\n}\n\n/**\r\n * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/imul\r\n */\r\nconst imul = (() => {\r\n try {\r\n if (Math.imul(UINT32_MAX, 5) === -5) {\r\n return Math.imul;\r\n }\r\n }\r\n catch (_) {\r\n // nothing to do here\r\n }\r\n const UINT16_MAX = 0xffff;\r\n return (a, b) => {\r\n const ah = (a >>> 16) & UINT16_MAX;\r\n const al = a & UINT16_MAX;\r\n const bh = (b >>> 16) & UINT16_MAX;\r\n const bl = b & UINT16_MAX;\r\n // the shift by 0 fixes the sign on the high part\r\n // the final |0 converts the unsigned value into a signed value\r\n return (al * bl + (((ah * bl + al * bh) << 16) >>> 0)) | 0;\r\n };\r\n})();\n\nconst ARRAY_SIZE = 624;\r\nconst ARRAY_MAX = ARRAY_SIZE - 1;\r\nconst M = 397;\r\nconst ARRAY_SIZE_MINUS_M = ARRAY_SIZE - M;\r\nconst A = 0x9908b0df;\r\n/**\r\n * An Engine that is a pseudorandom number generator using the Mersenne\r\n * Twister algorithm based on the prime 2**19937 − 1\r\n *\r\n * See http://en.wikipedia.org/wiki/Mersenne_twister\r\n */\r\nclass MersenneTwister19937 {\r\n /**\r\n * MersenneTwister19937 should not be instantiated directly.\r\n * Instead, use the static methods `seed`, `seedWithArray`, or `autoSeed`.\r\n */\r\n constructor() {\r\n this.data = new I32Array(ARRAY_SIZE);\r\n this.index = 0; // integer within [0, 624]\r\n this.uses = 0;\r\n }\r\n /**\r\n * Returns a MersenneTwister19937 seeded with an initial int32 value\r\n * @param initial the initial seed value\r\n */\r\n static seed(initial) {\r\n return new MersenneTwister19937().seed(initial);\r\n }\r\n /**\r\n * Returns a MersenneTwister19937 seeded with zero or more int32 values\r\n * @param source A series of int32 values\r\n */\r\n static seedWithArray(source) {\r\n return new MersenneTwister19937().seedWithArray(source);\r\n }\r\n /**\r\n * Returns a MersenneTwister19937 seeded with the current time and\r\n * a series of natively-generated random values\r\n */\r\n static autoSeed() {\r\n return MersenneTwister19937.seedWithArray(createEntropy());\r\n }\r\n /**\r\n * Returns the next int32 value of the sequence\r\n */\r\n next() {\r\n if ((this.index | 0) >= ARRAY_SIZE) {\r\n refreshData(this.data);\r\n this.index = 0;\r\n }\r\n const value = this.data[this.index];\r\n this.index = (this.index + 1) | 0;\r\n this.uses += 1;\r\n return temper(value) | 0;\r\n }\r\n /**\r\n * Returns the number of times that the Engine has been used.\r\n *\r\n * This can be provided to an unused MersenneTwister19937 with the same\r\n * seed, bringing it to the exact point that was left off.\r\n */\r\n getUseCount() {\r\n return this.uses;\r\n }\r\n /**\r\n * Discards one or more items from the engine\r\n * @param count The count of items to discard\r\n */\r\n discard(count) {\r\n if (count <= 0) {\r\n return this;\r\n }\r\n this.uses += count;\r\n if ((this.index | 0) >= ARRAY_SIZE) {\r\n refreshData(this.data);\r\n this.index = 0;\r\n }\r\n while (count + this.index > ARRAY_SIZE) {\r\n count -= ARRAY_SIZE - this.index;\r\n refreshData(this.data);\r\n this.index = 0;\r\n }\r\n this.index = (this.index + count) | 0;\r\n return this;\r\n }\r\n seed(initial) {\r\n let previous = 0;\r\n this.data[0] = previous = initial | 0;\r\n for (let i = 1; i < ARRAY_SIZE; i = (i + 1) | 0) {\r\n this.data[i] = previous =\r\n (imul(previous ^ (previous >>> 30), 0x6c078965) + i) | 0;\r\n }\r\n this.index = ARRAY_SIZE;\r\n this.uses = 0;\r\n return this;\r\n }\r\n seedWithArray(source) {\r\n this.seed(0x012bd6aa);\r\n seedWithArray(this.data, source);\r\n return this;\r\n }\r\n}\r\nfunction refreshData(data) {\r\n let k = 0;\r\n let tmp = 0;\r\n for (; (k | 0) < ARRAY_SIZE_MINUS_M; k = (k + 1) | 0) {\r\n tmp = (data[k] & INT32_SIZE) | (data[(k + 1) | 0] & INT32_MAX);\r\n data[k] = data[(k + M) | 0] ^ (tmp >>> 1) ^ (tmp & 0x1 ? A : 0);\r\n }\r\n for (; (k | 0) < ARRAY_MAX; k = (k + 1) | 0) {\r\n tmp = (data[k] & INT32_SIZE) | (data[(k + 1) | 0] & INT32_MAX);\r\n data[k] =\r\n data[(k - ARRAY_SIZE_MINUS_M) | 0] ^ (tmp >>> 1) ^ (tmp & 0x1 ? A : 0);\r\n }\r\n tmp = (data[ARRAY_MAX] & INT32_SIZE) | (data[0] & INT32_MAX);\r\n data[ARRAY_MAX] = data[M - 1] ^ (tmp >>> 1) ^ (tmp & 0x1 ? A : 0);\r\n}\r\nfunction temper(value) {\r\n value ^= value >>> 11;\r\n value ^= (value << 7) & 0x9d2c5680;\r\n value ^= (value << 15) & 0xefc60000;\r\n return value ^ (value >>> 18);\r\n}\r\nfunction seedWithArray(data, source) {\r\n let i = 1;\r\n let j = 0;\r\n const sourceLength = source.length;\r\n let k = Math.max(sourceLength, ARRAY_SIZE) | 0;\r\n let previous = data[0] | 0;\r\n for (; (k | 0) > 0; --k) {\r\n data[i] = previous =\r\n ((data[i] ^ imul(previous ^ (previous >>> 30), 0x0019660d)) +\r\n (source[j] | 0) +\r\n (j | 0)) |\r\n 0;\r\n i = (i + 1) | 0;\r\n ++j;\r\n if ((i | 0) > ARRAY_MAX) {\r\n data[0] = data[ARRAY_MAX];\r\n i = 1;\r\n }\r\n if (j >= sourceLength) {\r\n j = 0;\r\n }\r\n }\r\n for (k = ARRAY_MAX; (k | 0) > 0; --k) {\r\n data[i] = previous =\r\n ((data[i] ^ imul(previous ^ (previous >>> 30), 0x5d588b65)) - i) | 0;\r\n i = (i + 1) | 0;\r\n if ((i | 0) > ARRAY_MAX) {\r\n data[0] = data[ARRAY_MAX];\r\n i = 1;\r\n }\r\n }\r\n data[0] = INT32_SIZE;\r\n}\n\nlet data$1 = null;\r\nconst COUNT$1 = 128;\r\nlet index$1 = COUNT$1;\r\n/**\r\n * An Engine that relies on the node-available\r\n * `require('crypto').randomBytes`, which has been available since 0.58.\r\n *\r\n * See https://nodejs.org/api/crypto.html#crypto_crypto_randombytes_size_callback\r\n *\r\n * If unavailable or otherwise non-functioning, then `nodeCrypto` will\r\n * likely `throw` on the first call to `next()`.\r\n */\r\nconst nodeCrypto = {\r\n next() {\r\n if (index$1 >= COUNT$1) {\r\n data$1 = new Int32Array(new Int8Array(require(\"crypto\").randomBytes(4 * COUNT$1)).buffer);\r\n index$1 = 0;\r\n }\r\n return data$1[index$1++] | 0;\r\n }\r\n};\n\n/**\r\n * Returns a Distribution to random value within the provided `source`\r\n * within the sliced bounds of `begin` and `end`.\r\n * @param source an array of items to pick from\r\n * @param begin the beginning slice index (defaults to `0`)\r\n * @param end the ending slice index (defaults to `source.length`)\r\n */\r\nfunction picker(source, begin, end) {\r\n const clone = sliceArray.call(source, begin, end);\r\n if (clone.length === 0) {\r\n throw new RangeError(`Cannot pick from a source with no items`);\r\n }\r\n const distribution = integer(0, clone.length - 1);\r\n return engine => clone[distribution(engine)];\r\n}\n\nexport { Random, browserCrypto, nativeMath, MersenneTwister19937, nodeCrypto, bool, date, dice, die, hex, int32, int53, int53Full, integer, pick, picker, real, realZeroToOneExclusive, realZeroToOneInclusive, sample, shuffle, string, uint32, uint53, uint53Full, uuid4, createEntropy };\n//# sourceMappingURL=random-js.esm.js.map\n","import * as Random from 'random-js';\nimport Matrix from 'ml-matrix';\n\nexport function checkFloat(n) {\n return n > 0.0 && n <= 1.0;\n}\n\n\n/**\n * Select n with replacement elements on the training set and values, where n is the size of the training set.\n * @ignore\n * @param {Matrix} trainingSet\n * @param {Array} trainingValue\n * @param {number} seed - seed for the random selection, must be a 32-bit integer.\n * @return {object} with new X and y.\n */\nexport function examplesBaggingWithReplacement(\n trainingSet,\n trainingValue,\n seed\n) {\n var engine;\n var distribution = Random.integer(0, trainingSet.rows - 1);\n if (seed === undefined) {\n engine = Random.MersenneTwister19937.autoSeed();\n } else if (Number.isInteger(seed)) {\n engine = Random.MersenneTwister19937.seed(seed);\n } else {\n throw new RangeError(\n `Expected seed must be undefined or integer not ${seed}`\n );\n }\n\n var Xr = new Array(trainingSet.rows);\n var yr = new Array(trainingSet.rows);\n\n for (var i = 0; i < trainingSet.rows; ++i) {\n var index = distribution(engine);\n Xr[i] = trainingSet.getRow(index);\n yr[i] = trainingValue[index];\n }\n\n return {\n X: new Matrix(Xr),\n y: yr\n };\n}\n\n/**\n * selects n features from the training set with or without replacement, returns the new training set and the indexes used.\n * @ignore\n * @param {Matrix} trainingSet\n * @param {number} n - features.\n * @param {boolean} replacement\n * @param {number} seed - seed for the random selection, must be a 32-bit integer.\n * @return {object}\n */\nexport function featureBagging(trainingSet, n, replacement, seed) {\n if (trainingSet.columns < n) {\n throw new RangeError(\n 'N should be less or equal to the number of columns of X'\n );\n }\n\n var distribution = Random.integer(0, trainingSet.columns - 1);\n var engine;\n if (seed === undefined) {\n engine = Random.MersenneTwister19937.autoSeed();\n } else if (Number.isInteger(seed)) {\n engine = Random.MersenneTwister19937.seed(seed);\n } else {\n throw new RangeError(\n `Expected seed must be undefined or integer not ${seed}`\n );\n }\n\n var toRet = new Matrix(trainingSet.rows, n);\n\n if (replacement) {\n var usedIndex = new Array(n);\n for (var i = 0; i < n; ++i) {\n var index = distribution(engine);\n usedIndex[i] = index;\n toRet.setColumn(i, trainingSet.getColumn(index));\n }\n } else {\n usedIndex = new Set();\n index = distribution(engine);\n for (i = 0; i < n; ++i) {\n while (usedIndex.has(index)) {\n index = distribution(engine);\n }\n toRet.setColumn(i, trainingSet.getColumn(index));\n usedIndex.add(index);\n }\n usedIndex = Array.from(usedIndex);\n }\n\n return {\n X: toRet,\n usedIndex: usedIndex\n };\n}\n","import {\n DecisionTreeClassifier as DTClassifier,\n DecisionTreeRegression as DTRegression\n} from 'ml-cart';\nimport { Matrix, WrapperMatrix2D, MatrixTransposeView, MatrixColumnSelectionView } from 'ml-matrix';\n\nimport * as Utils from './utils';\n\n/**\n * @class RandomForestBase\n */\nexport class RandomForestBase {\n /**\n * Create a new base random forest for a classifier or regression model.\n * @constructor\n * @param {object} options\n * @param {number|String} [options.maxFeatures] - the number of features used on each estimator.\n * * if is an integer it selects maxFeatures elements over the sample features.\n * * if is a float between (0, 1), it takes the percentage of features.\n * @param {boolean} [options.replacement] - use replacement over the sample features.\n * @param {number} [options.seed] - seed for feature and samples selection, must be a 32-bit integer.\n * @param {number} [options.nEstimators] - number of estimator to use.\n * @param {object} [options.treeOptions] - options for the tree classifier, see [ml-cart]{@link https://mljs.github.io/decision-tree-cart/}\n * @param {boolean} [options.isClassifier] - boolean to check if is a classifier or regression model (used by subclasses).\n * @param {boolean} [options.useSampleBagging] - use bagging over training samples.\n * @param {object} model - for load purposes.\n */\n constructor(options, model) {\n if (options === true) {\n this.replacement = model.replacement;\n this.maxFeatures = model.maxFeatures;\n this.nEstimators = model.nEstimators;\n this.treeOptions = model.treeOptions;\n this.isClassifier = model.isClassifier;\n this.seed = model.seed;\n this.n = model.n;\n this.indexes = model.indexes;\n this.useSampleBagging = model.useSampleBagging;\n\n var Estimator = this.isClassifier ? DTClassifier : DTRegression;\n this.estimators = model.estimators.map((est) => Estimator.load(est));\n } else {\n this.replacement = options.replacement;\n this.maxFeatures = options.maxFeatures;\n this.nEstimators = options.nEstimators;\n this.treeOptions = options.treeOptions;\n this.isClassifier = options.isClassifier;\n this.seed = options.seed;\n this.useSampleBagging = options.useSampleBagging;\n }\n }\n\n /**\n * Train the decision tree with the given training set and labels.\n * @param {Matrix|Array} trainingSet\n * @param {Array} trainingValues\n */\n train(trainingSet, trainingValues) {\n trainingSet = Matrix.checkMatrix(trainingSet);\n\n this.maxFeatures = this.maxFeatures || trainingSet.columns;\n\n if (Utils.checkFloat(this.maxFeatures)) {\n this.n = Math.floor(trainingSet.columns * this.maxFeatures);\n } else if (Number.isInteger(this.maxFeatures)) {\n if (this.maxFeatures > trainingSet.columns) {\n throw new RangeError(\n `The maxFeatures parameter should be less than ${trainingSet.columns}`\n );\n } else {\n this.n = this.maxFeatures;\n }\n } else {\n throw new RangeError(\n `Cannot process the maxFeatures parameter ${this.maxFeatures}`\n );\n }\n\n if (this.isClassifier) {\n var Estimator = DTClassifier;\n } else {\n Estimator = DTRegression;\n }\n\n this.estimators = new Array(this.nEstimators);\n this.indexes = new Array(this.nEstimators);\n\n for (var i = 0; i < this.nEstimators; ++i) {\n var res = this.useSampleBagging\n ? Utils.examplesBaggingWithReplacement(\n trainingSet,\n trainingValues,\n this.seed\n )\n : { X: trainingSet, y: trainingValues };\n var X = res.X;\n var y = res.y;\n\n res = Utils.featureBagging(X, this.n, this.replacement, this.seed);\n X = res.X;\n\n this.indexes[i] = res.usedIndex;\n this.estimators[i] = new Estimator(this.treeOptions);\n this.estimators[i].train(X, y);\n }\n }\n\n /**\n * Method that returns the way the algorithm generates the predictions, for example, in classification\n * you can return the mode of all predictions retrieved by the trees, or in case of regression you can\n * use the mean or the median.\n * @abstract\n * @param {Array} values - predictions of the estimators.\n * @return {number} prediction.\n */\n // eslint-disable-next-line no-unused-vars\n selection(values) {\n throw new Error(\"Abstract method 'selection' not implemented!\");\n }\n\n /**\n * Predicts the output given the matrix to predict.\n * @param {Matrix|Array} toPredict\n * @return {Array} predictions\n */\n predict(toPredict) {\n var predictionValues = new Array(this.nEstimators);\n toPredict = Matrix.checkMatrix(toPredict);\n for (var i = 0; i < this.nEstimators; ++i) {\n var X = new MatrixColumnSelectionView(toPredict, this.indexes[i]); // get features for estimator\n predictionValues[i] = this.estimators[i].predict(X);\n }\n\n predictionValues = new MatrixTransposeView(new WrapperMatrix2D(predictionValues));\n var predictions = new Array(predictionValues.rows);\n for (i = 0; i < predictionValues.rows; ++i) {\n predictions[i] = this.selection(predictionValues.getRow(i));\n }\n\n return predictions;\n }\n\n /**\n * Export the current model to JSON.\n * @return {object} - Current model.\n */\n toJSON() {\n return {\n indexes: this.indexes,\n n: this.n,\n replacement: this.replacement,\n maxFeatures: this.maxFeatures,\n nEstimators: this.nEstimators,\n treeOptions: this.treeOptions,\n isClassifier: this.isClassifier,\n seed: this.seed,\n estimators: this.estimators.map((est) => est.toJSON()),\n useSampleBagging: this.useSampleBagging\n };\n }\n}\n","import { RandomForestBase } from './RandomForestBase';\n\nconst defaultOptions = {\n maxFeatures: 1.0,\n replacement: true,\n nEstimators: 10,\n seed: 42,\n useSampleBagging: false\n};\n\n/**\n * @class RandomForestClassifier\n * @augments RandomForestBase\n */\nexport class RandomForestClassifier extends RandomForestBase {\n /**\n * Create a new base random forest for a classifier or regression model.\n * @constructor\n * @param {object} options\n * @param {number} [options.maxFeatures=1.0] - the number of features used on each estimator.\n * * if is an integer it selects maxFeatures elements over the sample features.\n * * if is a float between (0, 1), it takes the percentage of features.\n * @param {boolean} [options.replacement=true] - use replacement over the sample features.\n * @param {number} [options.seed=42] - seed for feature and samples selection, must be a 32-bit integer.\n * @param {number} [options.nEstimators=10] - number of estimator to use.\n * @param {object} [options.treeOptions={}] - options for the tree classifier, see [ml-cart]{@link https://mljs.github.io/decision-tree-cart/}\n * @param {boolean} [options.useSampleBagging=false] - use bagging over training samples.\n * @param {object} model - for load purposes.\n */\n constructor(options, model) {\n if (options === true) {\n super(true, model.baseModel);\n } else {\n options = Object.assign({}, defaultOptions, options);\n options.isClassifier = true;\n super(options);\n }\n }\n\n /**\n * retrieve the prediction given the selection method.\n * @param {Array} values - predictions of the estimators.\n * @return {number} prediction\n */\n selection(values) {\n return mode(values);\n }\n\n /**\n * Export the current model to JSON.\n * @return {object} - Current model.\n */\n toJSON() {\n var baseModel = super.toJSON();\n return {\n baseModel: baseModel,\n name: 'RFClassifier'\n };\n }\n\n /**\n * Load a Decision tree classifier with the given model.\n * @param {object} model\n * @return {RandomForestClassifier}\n */\n static load(model) {\n if (model.name !== 'RFClassifier') {\n throw new RangeError(`Invalid model: ${model.name}`);\n }\n\n return new RandomForestClassifier(true, model);\n }\n}\n\n/**\n * Return the most repeated element on the array.\n * @param {Array} arr\n * @return {number} mode\n */\nfunction mode(arr) {\n return arr\n .sort(\n (a, b) =>\n arr.filter((v) => v === a).length - arr.filter((v) => v === b).length\n )\n .pop();\n}\n","(function(){function a(d){for(var e=0,f=d.length-1,g=void 0,h=void 0,i=void 0,j=c(e,f);!0;){if(f<=e)return d[j];if(f==e+1)return d[e]>d[f]&&b(d,e,f),d[j];for(g=c(e,f),d[g]>d[f]&&b(d,g,f),d[e]>d[f]&&b(d,e,f),d[g]>d[e]&&b(d,g,e),b(d,g,e+1),h=e+1,i=f;!0;){do h++;while(d[e]>d[h]);do i--;while(d[i]>d[e]);if(i=j&&(f=i-1)}}var b=function b(d,e,f){var _ref;return _ref=[d[f],d[e]],d[e]=_ref[0],d[f]=_ref[1],_ref},c=function c(d,e){return~~((d+e)/2)};'undefined'!=typeof module&&module.exports?module.exports=a:window.median=a})();\n","import quickSelectMedian from 'median-quickselect';\nimport isArray from 'is-any-array';\n\n/**\n * Computes the median of the given values\n * @param {Array} input\n * @return {number}\n */\n\nfunction median(input) {\n if (!isArray(input)) {\n throw new TypeError('input must be an array');\n }\n\n if (input.length === 0) {\n throw new TypeError('input must not be empty');\n }\n\n return quickSelectMedian(input.slice());\n}\n\nexport default median;\n","import arrayMean from 'ml-array-mean';\nimport arrayMedian from 'ml-array-median';\n\nimport { RandomForestBase } from './RandomForestBase';\n\nconst selectionMethods = {\n mean: arrayMean,\n median: arrayMedian\n};\n\nconst defaultOptions = {\n maxFeatures: 1.0,\n replacement: false,\n nEstimators: 10,\n treeOptions: {},\n selectionMethod: 'mean',\n seed: 42,\n useSampleBagging: false\n};\n\n/**\n * @class RandomForestRegression\n * @augments RandomForestBase\n */\nexport class RandomForestRegression extends RandomForestBase {\n /**\n * Create a new base random forest for a classifier or regression model.\n * @constructor\n * @param {object} options\n * @param {number} [options.maxFeatures=1.0] - the number of features used on each estimator.\n * * if is an integer it selects maxFeatures elements over the sample features.\n * * if is a float between (0, 1), it takes the percentage of features.\n * @param {boolean} [options.replacement=true] - use replacement over the sample features.\n * @param {number} [options.seed=42] - seed for feature and samples selection, must be a 32-bit integer.\n * @param {number} [options.nEstimators=10] - number of estimator to use.\n * @param {object} [options.treeOptions={}] - options for the tree classifier, see [ml-cart]{@link https://mljs.github.io/decision-tree-cart/}\n * @param {string} [options.selectionMethod=\"mean\"] - the way to calculate the prediction from estimators, \"mean\" and \"median\" are supported.\n * @param {boolean} [options.useSampleBagging=false] - use bagging over training samples.\n * @param {object} model - for load purposes.\n */\n constructor(options, model) {\n if (options === true) {\n super(true, model.baseModel);\n this.selectionMethod = model.selectionMethod;\n } else {\n options = Object.assign({}, defaultOptions, options);\n\n if (\n !(\n options.selectionMethod === 'mean' ||\n options.selectionMethod === 'median'\n )\n ) {\n throw new RangeError(\n `Unsupported selection method ${options.selectionMethod}`\n );\n }\n\n options.isClassifier = false;\n\n super(options);\n this.selectionMethod = options.selectionMethod;\n }\n }\n\n /**\n * retrieve the prediction given the selection method.\n * @param {Array} values - predictions of the estimators.\n * @return {number} prediction\n */\n selection(values) {\n return selectionMethods[this.selectionMethod](values);\n }\n\n /**\n * Export the current model to JSON.\n * @return {object} - Current model.\n */\n toJSON() {\n var baseModel = super.toJSON();\n return {\n baseModel: baseModel,\n selectionMethod: this.selectionMethod,\n name: 'RFRegression'\n };\n }\n\n /**\n * Load a Decision tree classifier with the given model.\n * @param {object} model\n * @return {RandomForestRegression}\n */\n static load(model) {\n if (model.name !== 'RFRegression') {\n throw new RangeError(`Invalid model: ${model.name}`);\n }\n\n return new RandomForestRegression(true, model);\n }\n}\n","import { Matrix, MatrixTransposeView, EVD, SVD, NIPALS } from 'ml-matrix';\n\n/**\n * Creates new PCA (Principal Component Analysis) from the dataset\n * @param {Matrix} dataset - dataset or covariance matrix.\n * @param {Object} [options]\n * @param {boolean} [options.isCovarianceMatrix=false] - true if the dataset is a covariance matrix.\n * @param {boolean} [options.method='SVD'] - select which method to use: SVD (default), covarianceMatrirx or NIPALS.\n * @param {boolean} [options.nCompNIPALS=2] - number of components to be computed with NIPALS.\n * @param {boolean} [options.center=true] - should the data be centered (subtract the mean).\n * @param {boolean} [options.scale=false] - should the data be scaled (divide by the standard deviation).\n * @param {boolean} [options.ignoreZeroVariance=false] - ignore columns with zero variance if `scale` is `true`.\n * */\nexport class PCA {\n constructor(dataset, options = {}) {\n if (dataset === true) {\n const model = options;\n this.center = model.center;\n this.scale = model.scale;\n this.means = model.means;\n this.stdevs = model.stdevs;\n this.U = Matrix.checkMatrix(model.U);\n this.S = model.S;\n this.R = model.R;\n this.excludedFeatures = model.excludedFeatures;\n return;\n }\n\n dataset = new Matrix(dataset);\n\n const {\n isCovarianceMatrix = false,\n method = 'SVD',\n nCompNIPALS = 2,\n center = true,\n scale = false,\n ignoreZeroVariance = false,\n } = options;\n\n this.center = center;\n this.scale = scale;\n this.means = null;\n this.stdevs = null;\n this.excludedFeatures = [];\n\n if (isCovarianceMatrix) {\n // User provided a covariance matrix instead of dataset.\n this._computeFromCovarianceMatrix(dataset);\n return;\n }\n\n this._adjust(dataset, ignoreZeroVariance);\n switch (method) {\n case 'covarianceMatrix': {\n // User provided a dataset but wants us to compute and use the covariance matrix.\n const covarianceMatrix = new MatrixTransposeView(dataset)\n .mmul(dataset)\n .div(dataset.rows - 1);\n this._computeFromCovarianceMatrix(covarianceMatrix);\n break;\n }\n case 'NIPALS': {\n this._computeWithNIPALS(dataset, nCompNIPALS);\n break;\n }\n case 'SVD': {\n const svd = new SVD(dataset, {\n computeLeftSingularVectors: false,\n computeRightSingularVectors: true,\n autoTranspose: true,\n });\n\n this.U = svd.rightSingularVectors;\n\n const singularValues = svd.diagonal;\n const eigenvalues = [];\n for (const singularValue of singularValues) {\n eigenvalues.push((singularValue * singularValue) / (dataset.rows - 1));\n }\n this.S = eigenvalues;\n break;\n }\n default: {\n throw new Error(`unknown method: ${method}`);\n }\n }\n }\n\n /**\n * Load a PCA model from JSON\n * @param {Object} model\n * @return {PCA}\n */\n static load(model) {\n if (typeof model.name !== 'string') {\n throw new TypeError('model must have a name property');\n }\n if (model.name !== 'PCA') {\n throw new RangeError(`invalid model: ${model.name}`);\n }\n return new PCA(true, model);\n }\n\n /**\n * Project the dataset into the PCA space\n * @param {Matrix} dataset\n * @param {Object} options\n * @return {Matrix} dataset projected in the PCA space\n */\n predict(dataset, options = {}) {\n const { nComponents = this.U.columns } = options;\n dataset = new Matrix(dataset);\n if (this.center) {\n dataset.subRowVector(this.means);\n if (this.scale) {\n for (let i of this.excludedFeatures) {\n dataset.removeColumn(i);\n }\n dataset.divRowVector(this.stdevs);\n }\n }\n var predictions = dataset.mmul(this.U);\n return predictions.subMatrix(0, predictions.rows - 1, 0, nComponents - 1);\n }\n\n /**\n * Calculates the inverse PCA transform\n * @param {Matrix} dataset\n * @return {Matrix} dataset projected in the PCA space\n */\n invert(dataset) {\n dataset = Matrix.checkMatrix(dataset);\n\n var inverse = dataset.mmul(this.U.transpose());\n\n if (this.center) {\n if (this.scale) {\n inverse.mulRowVector(this.stdevs);\n }\n inverse.addRowVector(this.means);\n }\n\n return inverse;\n }\n\n\n /**\n * Returns the proportion of variance for each component\n * @return {[number]}\n */\n getExplainedVariance() {\n var sum = 0;\n for (const s of this.S) {\n sum += s;\n }\n return this.S.map((value) => value / sum);\n }\n\n /**\n * Returns the cumulative proportion of variance\n * @return {[number]}\n */\n getCumulativeVariance() {\n var explained = this.getExplainedVariance();\n for (var i = 1; i < explained.length; i++) {\n explained[i] += explained[i - 1];\n }\n return explained;\n }\n\n /**\n * Returns the Eigenvectors of the covariance matrix\n * @returns {Matrix}\n */\n getEigenvectors() {\n return this.U;\n }\n\n /**\n * Returns the Eigenvalues (on the diagonal)\n * @returns {[number]}\n */\n getEigenvalues() {\n return this.S;\n }\n\n /**\n * Returns the standard deviations of the principal components\n * @returns {[number]}\n */\n getStandardDeviations() {\n return this.S.map((x) => Math.sqrt(x));\n }\n\n /**\n * Returns the loadings matrix\n * @return {Matrix}\n */\n getLoadings() {\n return this.U.transpose();\n }\n\n /**\n * Export the current model to a JSON object\n * @return {Object} model\n */\n toJSON() {\n return {\n name: 'PCA',\n center: this.center,\n scale: this.scale,\n means: this.means,\n stdevs: this.stdevs,\n U: this.U,\n S: this.S,\n };\n }\n\n _adjust(dataset, ignoreZeroVariance) {\n if (this.center) {\n const mean = dataset.mean('column');\n const stdevs = this.scale\n ? dataset.standardDeviation('column', { mean })\n : null;\n this.means = mean;\n dataset.subRowVector(mean);\n if (this.scale) {\n for (let i = 0; i < stdevs.length; i++) {\n if (stdevs[i] === 0) {\n if (ignoreZeroVariance) {\n dataset.removeColumn(i);\n stdevs.splice(i, 1);\n this.excludedFeatures.push(i);\n i--;\n } else {\n throw new RangeError(\n `Cannot scale the dataset (standard deviation is zero at index ${i}`,\n );\n }\n }\n }\n this.stdevs = stdevs;\n dataset.divRowVector(stdevs);\n }\n }\n }\n\n _computeFromCovarianceMatrix(dataset) {\n const evd = new EVD(dataset, { assumeSymmetric: true });\n this.U = evd.eigenvectorMatrix;\n this.U.flipRows();\n this.S = evd.realEigenvalues;\n this.S.reverse();\n }\n\n _computeWithNIPALS(dataset, nCompNIPALS) {\n this.U = new Matrix(nCompNIPALS, dataset.columns);\n this.S = [];\n\n let x = dataset;\n for (let i = 0; i < nCompNIPALS; i++) {\n let dc = new NIPALS(x);\n\n this.U.setRow(i, dc.w.transpose());\n this.S.push(Math.pow(dc.s.get(0, 0), 2));\n\n x = dc.xResidual;\n }\n this.U = this.U.transpose(); // to be compatible with API\n }\n}\n","export function squaredEuclidean(p, q) {\r\n let d = 0;\r\n for (let i = 0; i < p.length; i++) {\r\n d += (p[i] - q[i]) * (p[i] - q[i]);\r\n }\r\n return d;\r\n}\r\nexport function euclidean(p, q) {\r\n return Math.sqrt(squaredEuclidean(p, q));\r\n}\r\n","/**\n * Computes a distance/similarity matrix given an array of data and a distance/similarity function.\n * @param {Array} data An array of data\n * @param {function} distanceFn A function that accepts two arguments and computes a distance/similarity between them\n * @return {Array} The distance/similarity matrix. The matrix is square and has a size equal to the length of\n * the data array\n */\nexport default function distanceMatrix(data, distanceFn) {\n const result = getMatrix(data.length);\n\n // Compute upper distance matrix\n for (let i = 0; i < data.length; i++) {\n for (let j = 0; j <= i; j++) {\n result[i][j] = distanceFn(data[i], data[j]);\n result[j][i] = result[i][j];\n }\n }\n\n return result;\n}\n\nfunction getMatrix(size) {\n const matrix = [];\n for (let i = 0; i < size; i++) {\n const row = [];\n matrix.push(row);\n for (let j = 0; j < size; j++) {\n row.push(0);\n }\n }\n return matrix;\n}\n","// Generated by CoffeeScript 1.8.0\n(function() {\n var Heap, defaultCmp, floor, heapify, heappop, heappush, heappushpop, heapreplace, insort, min, nlargest, nsmallest, updateItem, _siftdown, _siftup;\n\n floor = Math.floor, min = Math.min;\n\n\n /*\n Default comparison function to be used\n */\n\n defaultCmp = function(x, y) {\n if (x < y) {\n return -1;\n }\n if (x > y) {\n return 1;\n }\n return 0;\n };\n\n\n /*\n Insert item x in list a, and keep it sorted assuming a is sorted.\n \n If x is already in a, insert it to the right of the rightmost x.\n \n Optional args lo (default 0) and hi (default a.length) bound the slice\n of a to be searched.\n */\n\n insort = function(a, x, lo, hi, cmp) {\n var mid;\n if (lo == null) {\n lo = 0;\n }\n if (cmp == null) {\n cmp = defaultCmp;\n }\n if (lo < 0) {\n throw new Error('lo must be non-negative');\n }\n if (hi == null) {\n hi = a.length;\n }\n while (lo < hi) {\n mid = floor((lo + hi) / 2);\n if (cmp(x, a[mid]) < 0) {\n hi = mid;\n } else {\n lo = mid + 1;\n }\n }\n return ([].splice.apply(a, [lo, lo - lo].concat(x)), x);\n };\n\n\n /*\n Push item onto heap, maintaining the heap invariant.\n */\n\n heappush = function(array, item, cmp) {\n if (cmp == null) {\n cmp = defaultCmp;\n }\n array.push(item);\n return _siftdown(array, 0, array.length - 1, cmp);\n };\n\n\n /*\n Pop the smallest item off the heap, maintaining the heap invariant.\n */\n\n heappop = function(array, cmp) {\n var lastelt, returnitem;\n if (cmp == null) {\n cmp = defaultCmp;\n }\n lastelt = array.pop();\n if (array.length) {\n returnitem = array[0];\n array[0] = lastelt;\n _siftup(array, 0, cmp);\n } else {\n returnitem = lastelt;\n }\n return returnitem;\n };\n\n\n /*\n Pop and return the current smallest value, and add the new item.\n \n This is more efficient than heappop() followed by heappush(), and can be\n more appropriate when using a fixed size heap. Note that the value\n returned may be larger than item! That constrains reasonable use of\n this routine unless written as part of a conditional replacement:\n if item > array[0]\n item = heapreplace(array, item)\n */\n\n heapreplace = function(array, item, cmp) {\n var returnitem;\n if (cmp == null) {\n cmp = defaultCmp;\n }\n returnitem = array[0];\n array[0] = item;\n _siftup(array, 0, cmp);\n return returnitem;\n };\n\n\n /*\n Fast version of a heappush followed by a heappop.\n */\n\n heappushpop = function(array, item, cmp) {\n var _ref;\n if (cmp == null) {\n cmp = defaultCmp;\n }\n if (array.length && cmp(array[0], item) < 0) {\n _ref = [array[0], item], item = _ref[0], array[0] = _ref[1];\n _siftup(array, 0, cmp);\n }\n return item;\n };\n\n\n /*\n Transform list into a heap, in-place, in O(array.length) time.\n */\n\n heapify = function(array, cmp) {\n var i, _i, _j, _len, _ref, _ref1, _results, _results1;\n if (cmp == null) {\n cmp = defaultCmp;\n }\n _ref1 = (function() {\n _results1 = [];\n for (var _j = 0, _ref = floor(array.length / 2); 0 <= _ref ? _j < _ref : _j > _ref; 0 <= _ref ? _j++ : _j--){ _results1.push(_j); }\n return _results1;\n }).apply(this).reverse();\n _results = [];\n for (_i = 0, _len = _ref1.length; _i < _len; _i++) {\n i = _ref1[_i];\n _results.push(_siftup(array, i, cmp));\n }\n return _results;\n };\n\n\n /*\n Update the position of the given item in the heap.\n This function should be called every time the item is being modified.\n */\n\n updateItem = function(array, item, cmp) {\n var pos;\n if (cmp == null) {\n cmp = defaultCmp;\n }\n pos = array.indexOf(item);\n if (pos === -1) {\n return;\n }\n _siftdown(array, 0, pos, cmp);\n return _siftup(array, pos, cmp);\n };\n\n\n /*\n Find the n largest elements in a dataset.\n */\n\n nlargest = function(array, n, cmp) {\n var elem, result, _i, _len, _ref;\n if (cmp == null) {\n cmp = defaultCmp;\n }\n result = array.slice(0, n);\n if (!result.length) {\n return result;\n }\n heapify(result, cmp);\n _ref = array.slice(n);\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n elem = _ref[_i];\n heappushpop(result, elem, cmp);\n }\n return result.sort(cmp).reverse();\n };\n\n\n /*\n Find the n smallest elements in a dataset.\n */\n\n nsmallest = function(array, n, cmp) {\n var elem, i, los, result, _i, _j, _len, _ref, _ref1, _results;\n if (cmp == null) {\n cmp = defaultCmp;\n }\n if (n * 10 <= array.length) {\n result = array.slice(0, n).sort(cmp);\n if (!result.length) {\n return result;\n }\n los = result[result.length - 1];\n _ref = array.slice(n);\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n elem = _ref[_i];\n if (cmp(elem, los) < 0) {\n insort(result, elem, 0, null, cmp);\n result.pop();\n los = result[result.length - 1];\n }\n }\n return result;\n }\n heapify(array, cmp);\n _results = [];\n for (i = _j = 0, _ref1 = min(n, array.length); 0 <= _ref1 ? _j < _ref1 : _j > _ref1; i = 0 <= _ref1 ? ++_j : --_j) {\n _results.push(heappop(array, cmp));\n }\n return _results;\n };\n\n _siftdown = function(array, startpos, pos, cmp) {\n var newitem, parent, parentpos;\n if (cmp == null) {\n cmp = defaultCmp;\n }\n newitem = array[pos];\n while (pos > startpos) {\n parentpos = (pos - 1) >> 1;\n parent = array[parentpos];\n if (cmp(newitem, parent) < 0) {\n array[pos] = parent;\n pos = parentpos;\n continue;\n }\n break;\n }\n return array[pos] = newitem;\n };\n\n _siftup = function(array, pos, cmp) {\n var childpos, endpos, newitem, rightpos, startpos;\n if (cmp == null) {\n cmp = defaultCmp;\n }\n endpos = array.length;\n startpos = pos;\n newitem = array[pos];\n childpos = 2 * pos + 1;\n while (childpos < endpos) {\n rightpos = childpos + 1;\n if (rightpos < endpos && !(cmp(array[childpos], array[rightpos]) < 0)) {\n childpos = rightpos;\n }\n array[pos] = array[childpos];\n pos = childpos;\n childpos = 2 * pos + 1;\n }\n array[pos] = newitem;\n return _siftdown(array, startpos, pos, cmp);\n };\n\n Heap = (function() {\n Heap.push = heappush;\n\n Heap.pop = heappop;\n\n Heap.replace = heapreplace;\n\n Heap.pushpop = heappushpop;\n\n Heap.heapify = heapify;\n\n Heap.updateItem = updateItem;\n\n Heap.nlargest = nlargest;\n\n Heap.nsmallest = nsmallest;\n\n function Heap(cmp) {\n this.cmp = cmp != null ? cmp : defaultCmp;\n this.nodes = [];\n }\n\n Heap.prototype.push = function(x) {\n return heappush(this.nodes, x, this.cmp);\n };\n\n Heap.prototype.pop = function() {\n return heappop(this.nodes, this.cmp);\n };\n\n Heap.prototype.peek = function() {\n return this.nodes[0];\n };\n\n Heap.prototype.contains = function(x) {\n return this.nodes.indexOf(x) !== -1;\n };\n\n Heap.prototype.replace = function(x) {\n return heapreplace(this.nodes, x, this.cmp);\n };\n\n Heap.prototype.pushpop = function(x) {\n return heappushpop(this.nodes, x, this.cmp);\n };\n\n Heap.prototype.heapify = function() {\n return heapify(this.nodes, this.cmp);\n };\n\n Heap.prototype.updateItem = function(x) {\n return updateItem(this.nodes, x, this.cmp);\n };\n\n Heap.prototype.clear = function() {\n return this.nodes = [];\n };\n\n Heap.prototype.empty = function() {\n return this.nodes.length === 0;\n };\n\n Heap.prototype.size = function() {\n return this.nodes.length;\n };\n\n Heap.prototype.clone = function() {\n var heap;\n heap = new Heap();\n heap.nodes = this.nodes.slice(0);\n return heap;\n };\n\n Heap.prototype.toArray = function() {\n return this.nodes.slice(0);\n };\n\n Heap.prototype.insert = Heap.prototype.push;\n\n Heap.prototype.top = Heap.prototype.peek;\n\n Heap.prototype.front = Heap.prototype.peek;\n\n Heap.prototype.has = Heap.prototype.contains;\n\n Heap.prototype.copy = Heap.prototype.clone;\n\n return Heap;\n\n })();\n\n (function(root, factory) {\n if (typeof define === 'function' && define.amd) {\n return define([], factory);\n } else if (typeof exports === 'object') {\n return module.exports = factory();\n } else {\n return root.Heap = factory();\n }\n })(this, function() {\n return Heap;\n });\n\n}).call(this);\n","module.exports = require('./lib/heap');\n","import Heap from 'heap';\n\nexport default class Cluster {\n constructor() {\n this.children = [];\n this.height = 0;\n this.size = 1;\n this.index = -1;\n this.isLeaf = false;\n }\n\n /**\n * Creates an array of clusters where the maximum height is smaller than the threshold\n * @param {number} threshold\n * @return {Array}\n */\n cut(threshold) {\n if (typeof threshold !== 'number') {\n throw new TypeError('threshold must be a number');\n }\n if (threshold < 0) {\n throw new RangeError('threshold must be a positive number');\n }\n let list = [this];\n const ans = [];\n while (list.length > 0) {\n const aux = list.shift();\n if (threshold >= aux.height) {\n ans.push(aux);\n } else {\n list = list.concat(aux.children);\n }\n }\n return ans;\n }\n\n /**\n * Merge the leaves in the minimum way to have `groups` number of clusters.\n * @param {number} groups - Them number of children the first level of the tree should have.\n * @return {Cluster}\n */\n group(groups) {\n if (!Number.isInteger(groups) || groups < 1) {\n throw new RangeError('groups must be a positive integer');\n }\n\n const heap = new Heap((a, b) => {\n return b.height - a.height;\n });\n\n heap.push(this);\n\n while (heap.size() < groups) {\n var first = heap.pop();\n if (first.children.length === 0) {\n break;\n }\n first.children.forEach((child) => heap.push(child));\n }\n\n var root = new Cluster();\n root.children = heap.toArray();\n root.height = this.height;\n\n return root;\n }\n\n /**\n * Traverses the tree depth-first and calls the provided callback with each individual node\n * @param {function} cb - The callback to be called on each node encounter\n */\n traverse(cb) {\n function visit(root, callback) {\n callback(root);\n if (root.children) {\n for (const child of root.children) {\n visit(child, callback);\n }\n }\n }\n visit(this, cb);\n }\n\n /**\n * Returns a list of indices for all the leaves of this cluster.\n * The list is ordered in such a way that a dendrogram could be drawn without crossing branches.\n * @returns {Array}\n */\n indices() {\n const result = [];\n this.traverse((cluster) => {\n if (cluster.isLeaf) {\n result.push(cluster.index);\n }\n });\n return result;\n }\n}\n","import { euclidean } from 'ml-distance-euclidean';\nimport getDistanceMatrix from 'ml-distance-matrix';\nimport { Matrix } from 'ml-matrix';\n\nimport Cluster from './Cluster';\n\nfunction singleLink(dKI, dKJ) {\n return Math.min(dKI, dKJ);\n}\n\nfunction completeLink(dKI, dKJ) {\n return Math.max(dKI, dKJ);\n}\n\nfunction averageLink(dKI, dKJ, dIJ, ni, nj) {\n const ai = ni / (ni + nj);\n const aj = nj / (ni + nj);\n return ai * dKI + aj * dKJ;\n}\n\nfunction weightedAverageLink(dKI, dKJ) {\n return (dKI + dKJ) / 2;\n}\n\nfunction centroidLink(dKI, dKJ, dIJ, ni, nj) {\n const ai = ni / (ni + nj);\n const aj = nj / (ni + nj);\n const b = -(ni * nj) / (ni + nj) ** 2;\n return ai * dKI + aj * dKJ + b * dIJ;\n}\n\nfunction medianLink(dKI, dKJ, dIJ) {\n return dKI / 2 + dKJ / 2 - dIJ / 4;\n}\n\nfunction wardLink(dKI, dKJ, dIJ, ni, nj, nk) {\n const ai = (ni + nk) / (ni + nj + nk);\n const aj = (nj + nk) / (ni + nj + nk);\n const b = -nk / (ni + nj + nk);\n return ai * dKI + aj * dKJ + b * dIJ;\n}\n\nfunction wardLink2(dKI, dKJ, dIJ, ni, nj, nk) {\n const ai = (ni + nk) / (ni + nj + nk);\n const aj = (nj + nk) / (ni + nj + nk);\n const b = -nk / (ni + nj + nk);\n return Math.sqrt(ai * dKI * dKI + aj * dKJ * dKJ + b * dIJ * dIJ);\n}\n\n/**\n * Continuously merge nodes that have the least dissimilarity\n * @param {Array>} data - Array of points to be clustered\n * @param {object} [options]\n * @param {Function} [options.distanceFunction]\n * @param {string} [options.method] - Default: `'complete'`\n * @param {boolean} [options.isDistanceMatrix] - Is the input already a distance matrix?\n * @constructor\n */\nexport function agnes(data, options = {}) {\n const {\n distanceFunction = euclidean,\n method = 'complete',\n isDistanceMatrix = false,\n } = options;\n\n let updateFunc;\n if (!isDistanceMatrix) {\n data = getDistanceMatrix(data, distanceFunction);\n }\n let distanceMatrix = new Matrix(data);\n const numLeaves = distanceMatrix.rows;\n\n // allows to use a string or a given function\n if (typeof method === 'string') {\n switch (method.toLowerCase()) {\n case 'single':\n updateFunc = singleLink;\n break;\n case 'complete':\n updateFunc = completeLink;\n break;\n case 'average':\n case 'upgma':\n updateFunc = averageLink;\n break;\n case 'wpgma':\n updateFunc = weightedAverageLink;\n break;\n case 'centroid':\n case 'upgmc':\n updateFunc = centroidLink;\n break;\n case 'median':\n case 'wpgmc':\n updateFunc = medianLink;\n break;\n case 'ward':\n updateFunc = wardLink;\n break;\n case 'ward2':\n updateFunc = wardLink2;\n break;\n default:\n throw new RangeError(`unknown clustering method: ${method}`);\n }\n } else if (typeof method !== 'function') {\n throw new TypeError('method must be a string or function');\n }\n\n let clusters = [];\n for (let i = 0; i < numLeaves; i++) {\n const cluster = new Cluster();\n cluster.isLeaf = true;\n cluster.index = i;\n clusters.push(cluster);\n }\n\n for (let n = 0; n < numLeaves - 1; n++) {\n const [row, column, distance] = getSmallestDistance(distanceMatrix);\n const cluster1 = clusters[row];\n const cluster2 = clusters[column];\n const newCluster = new Cluster();\n newCluster.size = cluster1.size + cluster2.size;\n newCluster.children.push(cluster1, cluster2);\n newCluster.height = distance;\n\n const newClusters = [newCluster];\n const newDistanceMatrix = new Matrix(\n distanceMatrix.rows - 1,\n distanceMatrix.rows - 1,\n );\n const previous = (newIndex) =>\n getPreviousIndex(newIndex, Math.min(row, column), Math.max(row, column));\n\n for (let i = 1; i < newDistanceMatrix.rows; i++) {\n const prevI = previous(i);\n const prevICluster = clusters[prevI];\n newClusters.push(prevICluster);\n for (let j = 0; j < i; j++) {\n if (j === 0) {\n const dKI = distanceMatrix.get(row, prevI);\n const dKJ = distanceMatrix.get(prevI, column);\n const val = updateFunc(\n dKI,\n dKJ,\n distance,\n cluster1.size,\n cluster2.size,\n prevICluster.size,\n );\n newDistanceMatrix.set(i, j, val);\n newDistanceMatrix.set(j, i, val);\n } else {\n // Just copy distance from previous matrix\n const val = distanceMatrix.get(prevI, previous(j));\n newDistanceMatrix.set(i, j, val);\n newDistanceMatrix.set(j, i, val);\n }\n }\n }\n\n clusters = newClusters;\n distanceMatrix = newDistanceMatrix;\n }\n\n return clusters[0];\n}\n\nfunction getSmallestDistance(distance) {\n let smallest = Infinity;\n let smallestI = 0;\n let smallestJ = 0;\n for (let i = 1; i < distance.rows; i++) {\n for (let j = 0; j < i; j++) {\n if (distance.get(i, j) < smallest) {\n smallest = distance.get(i, j);\n smallestI = i;\n smallestJ = j;\n }\n }\n }\n return [smallestI, smallestJ, smallest];\n}\n\nfunction getPreviousIndex(newIndex, prev1, prev2) {\n newIndex -= 1;\n if (newIndex >= prev1) newIndex++;\n if (newIndex >= prev2) newIndex++;\n return newIndex;\n}\n","export * from './agnes';\n// export * from './diana';\n// export * from './birch';\n// export * './cure';\n// export * from './chameleon';\n","'use strict';\nimport { squaredEuclidean } from 'ml-distance-euclidean';\nconst defaultOptions = {\n distanceFunction: squaredEuclidean\n};\nexport default function nearestVector(listVectors, vector, options = defaultOptions) {\n const distanceFunction = options.distanceFunction || defaultOptions.distanceFunction;\n const similarityFunction = options.similarityFunction || defaultOptions.similarityFunction;\n let vectorIndex = -1;\n if (typeof similarityFunction === 'function') {\n // maximum similarity\n let maxSim = Number.MIN_VALUE;\n for (let j = 0; j < listVectors.length; j++) {\n const sim = similarityFunction(vector, listVectors[j]);\n if (sim > maxSim) {\n maxSim = sim;\n vectorIndex = j;\n }\n }\n }\n else if (typeof distanceFunction === 'function') {\n // minimum distance\n let minDist = Number.MAX_VALUE;\n for (let i = 0; i < listVectors.length; i++) {\n const dist = distanceFunction(vector, listVectors[i]);\n if (dist < minDist) {\n minDist = dist;\n vectorIndex = i;\n }\n }\n }\n else {\n throw new Error(\"A similarity or distance function it's required\");\n }\n return vectorIndex;\n}\nexport function findNearestVector(vectorList, vector, options = defaultOptions) {\n const index = nearestVector(vectorList, vector, options);\n return vectorList[index];\n}\n","import nearestVector from 'ml-nearest-vector';\n\n/**\n * Calculates the distance matrix for a given array of points\n * @ignore\n * @param {Array>} data - the [x,y,z,...] points to cluster\n * @param {function} distance - Distance function to use between the points\n * @return {Array>} - matrix with the distance values\n */\nexport function calculateDistanceMatrix(data, distance) {\n var distanceMatrix = new Array(data.length);\n for (var i = 0; i < data.length; ++i) {\n for (var j = i; j < data.length; ++j) {\n if (!distanceMatrix[i]) {\n distanceMatrix[i] = new Array(data.length);\n }\n if (!distanceMatrix[j]) {\n distanceMatrix[j] = new Array(data.length);\n }\n const dist = distance(data[i], data[j]);\n distanceMatrix[i][j] = dist;\n distanceMatrix[j][i] = dist;\n }\n }\n return distanceMatrix;\n}\n\n/**\n * Updates the cluster identifier based in the new data\n * @ignore\n * @param {Array>} data - the [x,y,z,...] points to cluster\n * @param {Array>} centers - the K centers in format [x,y,z,...]\n * @param {Array } clusterID - the cluster identifier for each data dot\n * @param {function} distance - Distance function to use between the points\n * @return {Array} the cluster identifier for each data dot\n */\nexport function updateClusterID(data, centers, clusterID, distance) {\n for (var i = 0; i < data.length; i++) {\n clusterID[i] = nearestVector(centers, data[i], {\n distanceFunction: distance\n });\n }\n return clusterID;\n}\n\n/**\n * Update the center values based in the new configurations of the clusters\n * @ignore\n * @param {Array>} prevCenters - Centroids from the previous iteration\n * @param {Array >} data - the [x,y,z,...] points to cluster\n * @param {Array } clusterID - the cluster identifier for each data dot\n * @param {number} K - Number of clusters\n * @return {Array} he K centers in format [x,y,z,...]\n */\nexport function updateCenters(prevCenters, data, clusterID, K) {\n const nDim = data[0].length;\n\n // copy previous centers\n var centers = new Array(K);\n var centersLen = new Array(K);\n for (var i = 0; i < K; i++) {\n centers[i] = new Array(nDim);\n centersLen[i] = 0;\n for (var j = 0; j < nDim; j++) {\n centers[i][j] = 0;\n }\n }\n\n // add the value for all dimensions of the point\n for (var l = 0; l < data.length; l++) {\n centersLen[clusterID[l]]++;\n for (var dim = 0; dim < nDim; dim++) {\n centers[clusterID[l]][dim] += data[l][dim];\n }\n }\n\n // divides by length\n for (var id = 0; id < K; id++) {\n for (var d = 0; d < nDim; d++) {\n if (centersLen[id]) {\n centers[id][d] /= centersLen[id];\n } else {\n centers[id][d] = prevCenters[id][d];\n }\n }\n }\n return centers;\n}\n\n/**\n * The centers have moved more than the tolerance value?\n * @ignore\n * @param {Array>} centers - the K centers in format [x,y,z,...]\n * @param {Array>} oldCenters - the K old centers in format [x,y,z,...]\n * @param {function} distanceFunction - Distance function to use between the points\n * @param {number} tolerance - Allowed distance for the centroids to move\n * @return {boolean}\n */\nexport function hasConverged(centers, oldCenters, distanceFunction, tolerance) {\n for (var i = 0; i < centers.length; i++) {\n if (distanceFunction(centers[i], oldCenters[i]) > tolerance) {\n return false;\n }\n }\n return true;\n}\n","const LOOP = 8;\nconst FLOAT_MUL = 1 / 16777216;\nconst sh1 = 15;\nconst sh2 = 18;\nconst sh3 = 11;\nfunction multiply_uint32(n, m) {\n n >>>= 0;\n m >>>= 0;\n const nlo = n & 0xffff;\n const nhi = n - nlo;\n return (((nhi * m) >>> 0) + nlo * m) >>> 0;\n}\nexport default class XSadd {\n constructor(seed = Date.now()) {\n this.state = new Uint32Array(4);\n this.init(seed);\n this.random = this.getFloat.bind(this);\n }\n /**\n * Returns a 32-bit integer r (0 <= r < 2^32)\n */\n getUint32() {\n this.nextState();\n return (this.state[3] + this.state[2]) >>> 0;\n }\n /**\n * Returns a floating point number r (0.0 <= r < 1.0)\n */\n getFloat() {\n return (this.getUint32() >>> 8) * FLOAT_MUL;\n }\n init(seed) {\n if (!Number.isInteger(seed)) {\n throw new TypeError('seed must be an integer');\n }\n this.state[0] = seed;\n this.state[1] = 0;\n this.state[2] = 0;\n this.state[3] = 0;\n for (let i = 1; i < LOOP; i++) {\n this.state[i & 3] ^=\n (i +\n multiply_uint32(1812433253, this.state[(i - 1) & 3] ^ ((this.state[(i - 1) & 3] >>> 30) >>> 0))) >>>\n 0;\n }\n this.periodCertification();\n for (let i = 0; i < LOOP; i++) {\n this.nextState();\n }\n }\n periodCertification() {\n if (this.state[0] === 0 &&\n this.state[1] === 0 &&\n this.state[2] === 0 &&\n this.state[3] === 0) {\n this.state[0] = 88; // X\n this.state[1] = 83; // S\n this.state[2] = 65; // A\n this.state[3] = 68; // D\n }\n }\n nextState() {\n let t = this.state[0];\n t ^= t << sh1;\n t ^= t >>> sh2;\n t ^= this.state[3] << sh3;\n this.state[0] = this.state[1];\n this.state[1] = this.state[2];\n this.state[2] = this.state[3];\n this.state[3] = t;\n }\n}\n","const PROB_TOLERANCE = 0.00000001;\nfunction randomChoice(values, options = {}, random = Math.random) {\n const { size = 1, replace = false, probabilities } = options;\n let valuesArr;\n let cumSum;\n if (typeof values === 'number') {\n valuesArr = getArray(values);\n }\n else {\n valuesArr = values.slice();\n }\n if (probabilities) {\n if (!replace) {\n throw new Error('choice with probabilities and no replacement is not implemented');\n }\n // check input is sane\n if (probabilities.length !== valuesArr.length) {\n throw new Error('the length of probabilities option should be equal to the number of choices');\n }\n cumSum = [probabilities[0]];\n for (let i = 1; i < probabilities.length; i++) {\n cumSum[i] = cumSum[i - 1] + probabilities[i];\n }\n if (Math.abs(1 - cumSum[cumSum.length - 1]) > PROB_TOLERANCE) {\n throw new Error(`probabilities should sum to 1, but instead sums to ${cumSum[cumSum.length - 1]}`);\n }\n }\n if (replace === false && size > valuesArr.length) {\n throw new Error('size option is too large');\n }\n const result = [];\n for (let i = 0; i < size; i++) {\n const index = randomIndex(valuesArr.length, random, cumSum);\n result.push(valuesArr[index]);\n if (!replace) {\n valuesArr.splice(index, 1);\n }\n }\n return result;\n}\nfunction getArray(n) {\n const arr = [];\n for (let i = 0; i < n; i++) {\n arr.push(i);\n }\n return arr;\n}\nfunction randomIndex(n, random, cumSum) {\n const rand = random();\n if (!cumSum) {\n return Math.floor(rand * n);\n }\n else {\n let idx = 0;\n while (rand > cumSum[idx]) {\n idx++;\n }\n return idx;\n }\n}\nexport default randomChoice;\n","// tslint:disable-next-line\nimport XSAdd from 'ml-xsadd';\nimport choice from './choice';\n/**\n * @classdesc Random class\n */\nexport default class Random {\n /**\n * @param [seedOrRandom=Math.random] - Control the random number generator used by the Random class instance. Pass a random number generator function with a uniform distribution over the half-open interval [0, 1[. If seed will pass it to ml-xsadd to create a seeded random number generator. If undefined will use Math.random.\n */\n constructor(seedOrRandom = Math.random) {\n if (typeof seedOrRandom === 'number') {\n const xsadd = new XSAdd(seedOrRandom);\n this.randomGenerator = xsadd.random;\n }\n else {\n this.randomGenerator = seedOrRandom;\n }\n }\n choice(values, options) {\n if (typeof values === 'number') {\n return choice(values, options, this.randomGenerator);\n }\n return choice(values, options, this.randomGenerator);\n }\n /**\n * Draw a random number from a uniform distribution on [0,1)\n * @return The random number\n */\n random() {\n return this.randomGenerator();\n }\n /**\n * Draw a random integer from a uniform distribution on [low, high). If only low is specified, the number is drawn on [0, low)\n * @param low - The lower bound of the uniform distribution interval.\n * @param high - The higher bound of the uniform distribution interval.\n */\n randInt(low, high) {\n if (high === undefined) {\n high = low;\n low = 0;\n }\n return low + Math.floor(this.randomGenerator() * (high - low));\n }\n /**\n * Draw several random number from a uniform distribution on [0, 1)\n * @param size - The number of number to draw\n * @return - The list of drawn numbers.\n */\n randomSample(size) {\n const result = [];\n for (let i = 0; i < size; i++) {\n result.push(this.random());\n }\n return result;\n }\n}\n","import Random from 'ml-random';\nimport { squaredEuclidean } from 'ml-distance-euclidean';\nimport { Matrix } from 'ml-matrix';\n\n/**\n * Choose K different random points from the original data\n * @ignore\n * @param {Array>} data - Points in the format to cluster [x,y,z,...]\n * @param {number} K - number of clusters\n * @param {number} seed - seed for random number generation\n * @return {Array>} - Initial random points\n */\nexport function random(data, K, seed) {\n const random = new Random(seed);\n return random.choice(data, { size: K });\n}\n\n/**\n * Chooses the most distant points to a first random pick\n * @ignore\n * @param {Array>} data - Points in the format to cluster [x,y,z,...]\n * @param {number} K - number of clusters\n * @param {Array>} distanceMatrix - matrix with the distance values\n * @param {number} seed - seed for random number generation\n * @return {Array>} - Initial random points\n */\nexport function mostDistant(data, K, distanceMatrix, seed) {\n const random = new Random(seed);\n var ans = new Array(K);\n // chooses a random point as initial cluster\n ans[0] = Math.floor(random.random() * data.length);\n\n if (K > 1) {\n // chooses the more distant point\n var maxDist = { dist: -1, index: -1 };\n for (var l = 0; l < data.length; ++l) {\n if (distanceMatrix[ans[0]][l] > maxDist.dist) {\n maxDist.dist = distanceMatrix[ans[0]][l];\n maxDist.index = l;\n }\n }\n ans[1] = maxDist.index;\n\n if (K > 2) {\n // chooses the set of points that maximises the min distance\n for (var k = 2; k < K; ++k) {\n var center = { dist: -1, index: -1 };\n for (var m = 0; m < data.length; ++m) {\n // minimum distance to centers\n var minDistCent = { dist: Number.MAX_VALUE, index: -1 };\n for (var n = 0; n < k; ++n) {\n if (\n distanceMatrix[n][m] < minDistCent.dist &&\n ans.indexOf(m) === -1\n ) {\n minDistCent = {\n dist: distanceMatrix[n][m],\n index: m\n };\n }\n }\n\n if (\n minDistCent.dist !== Number.MAX_VALUE &&\n minDistCent.dist > center.dist\n ) {\n center = Object.assign({}, minDistCent);\n }\n }\n\n ans[k] = center.index;\n }\n }\n }\n\n return ans.map((index) => data[index]);\n}\n\n// Implementation inspired from scikit\nexport function kmeanspp(X, K, options = {}) {\n X = new Matrix(X);\n const nSamples = X.rows;\n const random = new Random(options.seed);\n // Set the number of trials\n const centers = [];\n const localTrials = options.localTrials || 2 + Math.floor(Math.log(K));\n\n // Pick the first center at random from the dataset\n const firstCenterIdx = random.randInt(nSamples);\n centers.push(X.getRow(firstCenterIdx));\n\n // Init closest distances\n let closestDistSquared = new Matrix(1, X.rows);\n for (let i = 0; i < X.rows; i++) {\n closestDistSquared.set(0, i, squaredEuclidean(X.getRow(i), centers[0]));\n }\n let cumSumClosestDistSquared = [cumSum(closestDistSquared.getRow(0))];\n const factor = 1 / cumSumClosestDistSquared[0][nSamples - 1];\n let probabilities = Matrix.mul(closestDistSquared, factor);\n\n // Iterate over the remaining centers\n for (let i = 1; i < K; i++) {\n const candidateIdx = random.choice(nSamples, {\n replace: true,\n size: localTrials,\n probabilities: probabilities[0]\n });\n\n const candidates = X.selection(candidateIdx, range(X.columns));\n const distanceToCandidates = euclideanDistances(candidates, X);\n\n let bestCandidate;\n let bestPot;\n let bestDistSquared;\n\n for (let j = 0; j < localTrials; j++) {\n const newDistSquared = Matrix.min(closestDistSquared, [distanceToCandidates.getRow(j)]);\n const newPot = newDistSquared.sum();\n if (bestCandidate === undefined || newPot < bestPot) {\n bestCandidate = candidateIdx[j];\n bestPot = newPot;\n bestDistSquared = newDistSquared;\n }\n }\n centers[i] = X.getRow(bestCandidate);\n closestDistSquared = bestDistSquared;\n cumSumClosestDistSquared = [cumSum(closestDistSquared.getRow(0))];\n probabilities = Matrix.mul(\n closestDistSquared,\n 1 / cumSumClosestDistSquared[0][nSamples - 1]\n );\n }\n return centers;\n}\n\nfunction euclideanDistances(A, B) {\n const result = new Matrix(A.rows, B.rows);\n for (let i = 0; i < A.rows; i++) {\n for (let j = 0; j < B.rows; j++) {\n result.set(i, j, squaredEuclidean(A.getRow(i), B.getRow(j)));\n }\n }\n return result;\n}\n\nfunction range(l) {\n let r = [];\n for (let i = 0; i < l; i++) {\n r.push(i);\n }\n return r;\n}\n\nfunction cumSum(arr) {\n let cumSum = [arr[0]];\n for (let i = 1; i < arr.length; i++) {\n cumSum[i] = cumSum[i - 1] + arr[i];\n }\n return cumSum;\n}\n","import { updateClusterID } from './utils';\n\nconst distanceSymbol = Symbol('distance');\n\nexport default class KMeansResult {\n /**\n * Result of the kmeans algorithm\n * @param {Array} clusters - the cluster identifier for each data dot\n * @param {Array>} centroids - the K centers in format [x,y,z,...], the error and size of the cluster\n * @param {boolean} converged - Converge criteria satisfied\n * @param {number} iterations - Current number of iterations\n * @param {function} distance - (*Private*) Distance function to use between the points\n * @constructor\n */\n constructor(clusters, centroids, converged, iterations, distance) {\n this.clusters = clusters;\n this.centroids = centroids;\n this.converged = converged;\n this.iterations = iterations;\n this[distanceSymbol] = distance;\n }\n\n /**\n * Allows to compute for a new array of points their cluster id\n * @param {Array>} data - the [x,y,z,...] points to cluster\n * @return {Array} - cluster id for each point\n */\n nearest(data) {\n const clusterID = new Array(data.length);\n const centroids = this.centroids.map(function (centroid) {\n return centroid.centroid;\n });\n return updateClusterID(data, centroids, clusterID, this[distanceSymbol]);\n }\n\n /**\n * Returns a KMeansResult with the error and size of the cluster\n * @ignore\n * @param {Array>} data - the [x,y,z,...] points to cluster\n * @return {KMeansResult}\n */\n computeInformation(data) {\n var enrichedCentroids = this.centroids.map(function (centroid) {\n return {\n centroid: centroid,\n error: 0,\n size: 0\n };\n });\n\n for (var i = 0; i < data.length; i++) {\n enrichedCentroids[this.clusters[i]].error += this[distanceSymbol](\n data[i],\n this.centroids[this.clusters[i]]\n );\n enrichedCentroids[this.clusters[i]].size++;\n }\n\n for (var j = 0; j < this.centroids.length; j++) {\n if (enrichedCentroids[j].size) {\n enrichedCentroids[j].error /= enrichedCentroids[j].size;\n } else {\n enrichedCentroids[j].error = null;\n }\n }\n\n return new KMeansResult(\n this.clusters,\n enrichedCentroids,\n this.converged,\n this.iterations,\n this[distanceSymbol]\n );\n }\n}\n","import { squaredEuclidean } from 'ml-distance-euclidean';\n\nimport {\n updateClusterID,\n updateCenters,\n hasConverged,\n calculateDistanceMatrix\n} from './utils';\nimport { mostDistant, random, kmeanspp } from './initialization';\nimport KMeansResult from './KMeansResult';\n\nconst defaultOptions = {\n maxIterations: 100,\n tolerance: 1e-6,\n withIterations: false,\n initialization: 'kmeans++',\n distanceFunction: squaredEuclidean\n};\n\n/**\n * Each step operation for kmeans\n * @ignore\n * @param {Array>} centers - K centers in format [x,y,z,...]\n * @param {Array>} data - Points [x,y,z,...] to cluster\n * @param {Array} clusterID - Cluster identifier for each data dot\n * @param {number} K - Number of clusters\n * @param {object} [options] - Option object\n * @param {number} iterations - Current number of iterations\n * @return {KMeansResult}\n */\nfunction step(centers, data, clusterID, K, options, iterations) {\n clusterID = updateClusterID(\n data,\n centers,\n clusterID,\n options.distanceFunction\n );\n var newCenters = updateCenters(centers, data, clusterID, K);\n var converged = hasConverged(\n newCenters,\n centers,\n options.distanceFunction,\n options.tolerance\n );\n return new KMeansResult(\n clusterID,\n newCenters,\n converged,\n iterations,\n options.distanceFunction\n );\n}\n\n/**\n * Generator version for the algorithm\n * @ignore\n * @param {Array>} centers - K centers in format [x,y,z,...]\n * @param {Array>} data - Points [x,y,z,...] to cluster\n * @param {Array} clusterID - Cluster identifier for each data dot\n * @param {number} K - Number of clusters\n * @param {object} [options] - Option object\n */\nfunction* kmeansGenerator(centers, data, clusterID, K, options) {\n var converged = false;\n var stepNumber = 0;\n var stepResult;\n while (!converged && stepNumber < options.maxIterations) {\n stepResult = step(centers, data, clusterID, K, options, ++stepNumber);\n yield stepResult.computeInformation(data);\n converged = stepResult.converged;\n centers = stepResult.centroids;\n }\n}\n\n/**\n * K-means algorithm\n * @param {Array>} data - Points in the format to cluster [x,y,z,...]\n * @param {number} K - Number of clusters\n * @param {object} [options] - Option object\n * @param {number} [options.maxIterations = 100] - Maximum of iterations allowed\n * @param {number} [options.tolerance = 1e-6] - Error tolerance\n * @param {boolean} [options.withIterations = false] - Store clusters and centroids for each iteration\n * @param {function} [options.distanceFunction = squaredDistance] - Distance function to use between the points\n * @param {number} [options.seed] - Seed for random initialization.\n * @param {string|Array>} [options.initialization = 'kmeans++'] - K centers in format [x,y,z,...] or a method for initialize the data:\n * * You can either specify your custom start centroids, or select one of the following initialization method:\n * * `'kmeans++'` will use the kmeans++ method as described by http://ilpubs.stanford.edu:8090/778/1/2006-13.pdf\n * * `'random'` will choose K random different values.\n * * `'mostDistant'` will choose the more distant points to a first random pick\n * @return {KMeansResult} - Cluster identifier for each data dot and centroids with the following fields:\n * * `'clusters'`: Array of indexes for the clusters.\n * * `'centroids'`: Array with the resulting centroids.\n * * `'iterations'`: Number of iterations that took to converge\n */\nexport default function kmeans(data, K, options) {\n options = Object.assign({}, defaultOptions, options);\n\n if (K <= 0 || K > data.length || !Number.isInteger(K)) {\n throw new Error(\n 'K should be a positive integer smaller than the number of points'\n );\n }\n\n var centers;\n if (Array.isArray(options.initialization)) {\n if (options.initialization.length !== K) {\n throw new Error('The initial centers should have the same length as K');\n } else {\n centers = options.initialization;\n }\n } else {\n switch (options.initialization) {\n case 'kmeans++':\n centers = kmeanspp(data, K, options);\n break;\n case 'random':\n centers = random(data, K, options.seed);\n break;\n case 'mostDistant':\n centers = mostDistant(\n data,\n K,\n calculateDistanceMatrix(data, options.distanceFunction),\n options.seed\n );\n break;\n default:\n throw new Error(\n `Unknown initialization method: \"${options.initialization}\"`\n );\n }\n }\n\n // infinite loop until convergence\n if (options.maxIterations === 0) {\n options.maxIterations = Number.MAX_VALUE;\n }\n\n var clusterID = new Array(data.length);\n if (options.withIterations) {\n return kmeansGenerator(centers, data, clusterID, K, options);\n } else {\n var converged = false;\n var stepNumber = 0;\n var stepResult;\n while (!converged && stepNumber < options.maxIterations) {\n stepResult = step(centers, data, clusterID, K, options, ++stepNumber);\n converged = stepResult.converged;\n centers = stepResult.centroids;\n }\n return stepResult.computeInformation(data);\n }\n}\n","import Matrix from 'ml-matrix';\n\n/**\n * @private\n * Function that retuns an array of matrices of the cases that belong to each class.\n * @param {Matrix} X - dataset\n * @param {Array} y - predictions\n * @return {Array}\n */\nexport function separateClasses(X, y) {\n var features = X.columns;\n\n var classes = 0;\n var totalPerClasses = new Array(10000); // max upperbound of classes\n for (var i = 0; i < y.length; i++) {\n if (totalPerClasses[y[i]] === undefined) {\n totalPerClasses[y[i]] = 0;\n classes++;\n }\n totalPerClasses[y[i]]++;\n }\n var separatedClasses = new Array(classes);\n var currentIndex = new Array(classes);\n for (i = 0; i < classes; ++i) {\n separatedClasses[i] = new Matrix(totalPerClasses[i], features);\n currentIndex[i] = 0;\n }\n for (i = 0; i < X.rows; ++i) {\n separatedClasses[y[i]].setRow(currentIndex[y[i]], X.getRow(i));\n currentIndex[y[i]]++;\n }\n return separatedClasses;\n}\n","import { Matrix } from 'ml-matrix';\n\nimport { separateClasses } from './utils';\n\nexport class GaussianNB {\n /**\n * Constructor for the Gaussian Naive Bayes classifier, the parameters here is just for loading purposes.\n * @constructor\n * @param {boolean} reload\n * @param {object} model\n */\n constructor(reload, model) {\n if (reload) {\n this.means = model.means;\n this.calculateProbabilities = model.calculateProbabilities;\n }\n }\n\n /**\n * Function that trains the classifier with a matrix that represents the training set and an array that\n * represents the label of each row in the training set. the labels must be numbers between 0 to n-1 where\n * n represents the number of classes.\n *\n * WARNING: in the case that one class, all the cases in one or more features have the same value, the\n * Naive Bayes classifier will not work well.\n * @param {Matrix|Array} trainingSet\n * @param {Matrix|Array} trainingLabels\n */\n train(trainingSet, trainingLabels) {\n var C1 = Math.sqrt(2 * Math.PI); // constant to precalculate the squared root\n trainingSet = Matrix.checkMatrix(trainingSet);\n\n if (trainingSet.rows !== trainingLabels.length) {\n throw new RangeError(\n 'the size of the training set and the training labels must be the same.'\n );\n }\n\n var separatedClasses = separateClasses(trainingSet, trainingLabels);\n var calculateProbabilities = new Array(separatedClasses.length);\n this.means = new Array(separatedClasses.length);\n for (var i = 0; i < separatedClasses.length; ++i) {\n var means = separatedClasses[i].mean('column');\n var std = separatedClasses[i].standardDeviation('column', {\n mean: means\n });\n\n var logPriorProbability = Math.log(\n separatedClasses[i].rows / trainingSet.rows\n );\n calculateProbabilities[i] = new Array(means.length + 1);\n\n calculateProbabilities[i][0] = logPriorProbability;\n for (var j = 1; j < means.length + 1; ++j) {\n var currentStd = std[j - 1];\n calculateProbabilities[i][j] = [\n 1 / (C1 * currentStd),\n -2 * currentStd * currentStd\n ];\n }\n\n this.means[i] = means;\n }\n\n this.calculateProbabilities = calculateProbabilities;\n }\n\n /**\n * function that predicts each row of the dataset (must be a matrix).\n *\n * @param {Matrix|Array} dataset\n * @return {Array}\n */\n predict(dataset) {\n dataset = Matrix.checkMatrix(dataset);\n if (dataset.rows === this.calculateProbabilities[0].length) {\n throw new RangeError(\n 'the dataset must have the same features as the training set'\n );\n }\n\n var predictions = new Array(dataset.rows);\n\n for (var i = 0; i < predictions.length; ++i) {\n predictions[i] = getCurrentClass(\n dataset.getRow(i),\n this.means,\n this.calculateProbabilities\n );\n }\n\n return predictions;\n }\n\n /**\n * Function that export the NaiveBayes model.\n * @return {object}\n */\n toJSON() {\n return {\n modelName: 'NaiveBayes',\n means: this.means,\n calculateProbabilities: this.calculateProbabilities\n };\n }\n\n /**\n * Function that create a GaussianNB classifier with the given model.\n * @param {object} model\n * @return {GaussianNB}\n */\n static load(model) {\n if (model.modelName !== 'NaiveBayes') {\n throw new RangeError(\n 'The current model is not a Multinomial Naive Bayes, current model:',\n model.name\n );\n }\n\n return new GaussianNB(true, model);\n }\n}\n\n/**\n * @private\n * Function the retrieves a prediction with one case.\n *\n * @param {Array} currentCase\n * @param {Array} mean - Precalculated means of each class trained\n * @param {Array} classes - Precalculated value of each class (Prior probability and probability function of each feature)\n * @return {number}\n */\nfunction getCurrentClass(currentCase, mean, classes) {\n var maxProbability = 0;\n var predictedClass = -1;\n\n // going through all precalculated values for the classes\n for (var i = 0; i < classes.length; ++i) {\n var currentProbability = classes[i][0]; // initialize with the prior probability\n for (var j = 1; j < classes[0][1].length + 1; ++j) {\n currentProbability += calculateLogProbability(\n currentCase[j - 1],\n mean[i][j - 1],\n classes[i][j][0],\n classes[i][j][1]\n );\n }\n\n currentProbability = Math.exp(currentProbability);\n if (currentProbability > maxProbability) {\n maxProbability = currentProbability;\n predictedClass = i;\n }\n }\n\n return predictedClass;\n}\n\n/**\n * @private\n * function that retrieves the probability of the feature given the class.\n * @param {number} value - value of the feature.\n * @param {number} mean - mean of the feature for the given class.\n * @param {number} C1 - precalculated value of (1 / (sqrt(2*pi) * std)).\n * @param {number} C2 - precalculated value of (2 * std^2) for the denominator of the exponential.\n * @return {number}\n */\nfunction calculateLogProbability(value, mean, C1, C2) {\n value = value - mean;\n return Math.log(C1 * Math.exp((value * value) / C2));\n}\n","import { Matrix } from 'ml-matrix';\n\nimport { separateClasses } from './utils';\n\nexport class MultinomialNB {\n /**\n * Constructor for Multinomial Naive Bayes, the model parameter is for load purposes.\n * @constructor\n * @param {object} model - for load purposes.\n */\n constructor(model) {\n if (model) {\n this.conditionalProbability = Matrix.checkMatrix(\n model.conditionalProbability\n );\n this.priorProbability = Matrix.checkMatrix(model.priorProbability);\n }\n }\n\n /**\n * Train the classifier with the current training set and labels, the labels must be numbers between 0 and n.\n * @param {Matrix|Array} trainingSet\n * @param {Array} trainingLabels\n */\n train(trainingSet, trainingLabels) {\n trainingSet = Matrix.checkMatrix(trainingSet);\n\n if (trainingSet.rows !== trainingLabels.length) {\n throw new RangeError(\n 'the size of the training set and the training labels must be the same.'\n );\n }\n\n var separateClass = separateClasses(trainingSet, trainingLabels);\n\n this.priorProbability = new Matrix(separateClass.length, 1);\n\n for (var i = 0; i < separateClass.length; ++i) {\n this.priorProbability.set(i, 0, Math.log(\n separateClass[i].rows / trainingSet.rows\n ));\n }\n\n var features = trainingSet.columns;\n this.conditionalProbability = new Matrix(separateClass.length, features);\n for (i = 0; i < separateClass.length; ++i) {\n var classValues = Matrix.checkMatrix(separateClass[i]);\n var total = classValues.sum();\n var divisor = total + features;\n this.conditionalProbability.setRow(\n i,\n Matrix.rowVector(classValues\n .sum('column'))\n .add(1)\n .div(divisor)\n .apply(matrixLog)\n );\n }\n }\n\n /**\n * Retrieves the predictions for the dataset with the current model.\n * @param {Matrix|Array} dataset\n * @return {Array} - predictions from the dataset.\n */\n predict(dataset) {\n dataset = Matrix.checkMatrix(dataset);\n var predictions = new Array(dataset.rows);\n for (var i = 0; i < dataset.rows; ++i) {\n var currentElement = dataset.getRowVector(i);\n const v = Matrix.columnVector(this.conditionalProbability\n .clone()\n .mulRowVector(currentElement)\n .sum('row'));\n predictions[i] = v\n .add(this.priorProbability)\n .maxIndex()[0];\n }\n\n return predictions;\n }\n\n /**\n * Function that saves the current model.\n * @return {object} - model in JSON format.\n */\n toJSON() {\n return {\n name: 'MultinomialNB',\n priorProbability: this.priorProbability,\n conditionalProbability: this.conditionalProbability\n };\n }\n\n /**\n * Creates a new MultinomialNB from the given model\n * @param {object} model\n * @return {MultinomialNB}\n */\n static load(model) {\n if (model.name !== 'MultinomialNB') {\n throw new RangeError(`${model.name} is not a Multinomial Naive Bayes`);\n }\n\n return new MultinomialNB(model);\n }\n}\n\nfunction matrixLog(i, j) {\n this.set(i, j, Math.log(this.get(i, j)));\n}\n","/*\n * Original code from:\n *\n * k-d Tree JavaScript - V 1.01\n *\n * https://github.com/ubilabs/kd-tree-javascript\n *\n * @author Mircea Pricop , 2012\n * @author Martin Kleppe , 2012\n * @author Ubilabs http://ubilabs.net, 2012\n * @license MIT License \n */\n\nfunction Node(obj, dimension, parent) {\n this.obj = obj;\n this.left = null;\n this.right = null;\n this.parent = parent;\n this.dimension = dimension;\n}\n\nexport default class KDTree {\n constructor(points, metric) {\n // If points is not an array, assume we're loading a pre-built tree\n if (!Array.isArray(points)) {\n this.dimensions = points.dimensions;\n this.root = points;\n restoreParent(this.root);\n } else {\n this.dimensions = new Array(points[0].length);\n for (var i = 0; i < this.dimensions.length; i++) {\n this.dimensions[i] = i;\n }\n this.root = buildTree(points, 0, null, this.dimensions);\n }\n this.metric = metric;\n }\n\n // Convert to a JSON serializable structure; this just requires removing\n // the `parent` property\n toJSON() {\n const result = toJSONImpl(this.root, true);\n result.dimensions = this.dimensions;\n return result;\n }\n\n nearest(point, maxNodes, maxDistance) {\n const metric = this.metric;\n const dimensions = this.dimensions;\n var i;\n\n const bestNodes = new BinaryHeap(function (e) {\n return -e[1];\n });\n\n function nearestSearch(node) {\n const dimension = dimensions[node.dimension];\n const ownDistance = metric(point, node.obj);\n const linearPoint = {};\n var bestChild, linearDistance, otherChild, i;\n\n function saveNode(node, distance) {\n bestNodes.push([node, distance]);\n if (bestNodes.size() > maxNodes) {\n bestNodes.pop();\n }\n }\n\n for (i = 0; i < dimensions.length; i += 1) {\n if (i === node.dimension) {\n linearPoint[dimensions[i]] = point[dimensions[i]];\n } else {\n linearPoint[dimensions[i]] = node.obj[dimensions[i]];\n }\n }\n\n linearDistance = metric(linearPoint, node.obj);\n\n if (node.right === null && node.left === null) {\n if (bestNodes.size() < maxNodes || ownDistance < bestNodes.peek()[1]) {\n saveNode(node, ownDistance);\n }\n return;\n }\n\n if (node.right === null) {\n bestChild = node.left;\n } else if (node.left === null) {\n bestChild = node.right;\n } else {\n if (point[dimension] < node.obj[dimension]) {\n bestChild = node.left;\n } else {\n bestChild = node.right;\n }\n }\n\n nearestSearch(bestChild);\n\n if (bestNodes.size() < maxNodes || ownDistance < bestNodes.peek()[1]) {\n saveNode(node, ownDistance);\n }\n\n if (\n bestNodes.size() < maxNodes ||\n Math.abs(linearDistance) < bestNodes.peek()[1]\n ) {\n if (bestChild === node.left) {\n otherChild = node.right;\n } else {\n otherChild = node.left;\n }\n if (otherChild !== null) {\n nearestSearch(otherChild);\n }\n }\n }\n\n if (maxDistance) {\n for (i = 0; i < maxNodes; i += 1) {\n bestNodes.push([null, maxDistance]);\n }\n }\n\n if (this.root) {\n nearestSearch(this.root);\n }\n\n const result = [];\n for (i = 0; i < Math.min(maxNodes, bestNodes.content.length); i += 1) {\n if (bestNodes.content[i][0]) {\n result.push([bestNodes.content[i][0].obj, bestNodes.content[i][1]]);\n }\n }\n return result;\n }\n}\n\nfunction toJSONImpl(src) {\n const dest = new Node(src.obj, src.dimension, null);\n if (src.left) dest.left = toJSONImpl(src.left);\n if (src.right) dest.right = toJSONImpl(src.right);\n return dest;\n}\n\nfunction buildTree(points, depth, parent, dimensions) {\n const dim = depth % dimensions.length;\n\n if (points.length === 0) {\n return null;\n }\n if (points.length === 1) {\n return new Node(points[0], dim, parent);\n }\n\n points.sort((a, b) => a[dimensions[dim]] - b[dimensions[dim]]);\n\n const median = Math.floor(points.length / 2);\n const node = new Node(points[median], dim, parent);\n node.left = buildTree(points.slice(0, median), depth + 1, node, dimensions);\n node.right = buildTree(points.slice(median + 1), depth + 1, node, dimensions);\n\n return node;\n}\n\nfunction restoreParent(root) {\n if (root.left) {\n root.left.parent = root;\n restoreParent(root.left);\n }\n\n if (root.right) {\n root.right.parent = root;\n restoreParent(root.right);\n }\n}\n\n// Binary heap implementation from:\n// http://eloquentjavascript.net/appendix2.html\nclass BinaryHeap {\n constructor(scoreFunction) {\n this.content = [];\n this.scoreFunction = scoreFunction;\n }\n\n push(element) {\n // Add the new element to the end of the array.\n this.content.push(element);\n // Allow it to bubble up.\n this.bubbleUp(this.content.length - 1);\n }\n\n pop() {\n // Store the first element so we can return it later.\n var result = this.content[0];\n // Get the element at the end of the array.\n var end = this.content.pop();\n // If there are any elements left, put the end element at the\n // start, and let it sink down.\n if (this.content.length > 0) {\n this.content[0] = end;\n this.sinkDown(0);\n }\n return result;\n }\n\n peek() {\n return this.content[0];\n }\n\n size() {\n return this.content.length;\n }\n\n bubbleUp(n) {\n // Fetch the element that has to be moved.\n var element = this.content[n];\n // When at 0, an element can not go up any further.\n while (n > 0) {\n // Compute the parent element's index, and fetch it.\n const parentN = Math.floor((n + 1) / 2) - 1;\n const parent = this.content[parentN];\n // Swap the elements if the parent is greater.\n if (this.scoreFunction(element) < this.scoreFunction(parent)) {\n this.content[parentN] = element;\n this.content[n] = parent;\n // Update 'n' to continue at the new position.\n n = parentN;\n } else {\n // Found a parent that is less, no need to move it further.\n break;\n }\n }\n }\n\n sinkDown(n) {\n // Look up the target element and its score.\n var length = this.content.length;\n var element = this.content[n];\n var elemScore = this.scoreFunction(element);\n\n while (true) {\n // Compute the indices of the child elements.\n var child2N = (n + 1) * 2;\n var child1N = child2N - 1;\n // This is used to store the new position of the element,\n // if any.\n var swap = null;\n // If the first child exists (is inside the array)...\n if (child1N < length) {\n // Look it up and compute its score.\n var child1 = this.content[child1N];\n var child1Score = this.scoreFunction(child1);\n // If the score is less than our element's, we need to swap.\n if (child1Score < elemScore) {\n swap = child1N;\n }\n }\n // Do the same checks for the other child.\n if (child2N < length) {\n var child2 = this.content[child2N];\n var child2Score = this.scoreFunction(child2);\n if (child2Score < (swap === null ? elemScore : child1Score)) {\n swap = child2N;\n }\n }\n\n // If the element needs to be moved, swap it, and continue.\n if (swap !== null) {\n this.content[n] = this.content[swap];\n this.content[swap] = element;\n n = swap;\n } else {\n // Otherwise, we are done.\n break;\n }\n }\n }\n}\n","import { euclidean as euclideanDistance } from 'ml-distance-euclidean';\n\nimport KDTree from './KDTree';\n\nexport default class KNN {\n /**\n * @param {Array} dataset\n * @param {Array} labels\n * @param {object} options\n * @param {number} [options.k=numberOfClasses + 1] - Number of neighbors to classify.\n * @param {function} [options.distance=euclideanDistance] - Distance function that takes two parameters.\n */\n constructor(dataset, labels, options = {}) {\n if (dataset === true) {\n const model = labels;\n this.kdTree = new KDTree(model.kdTree, options);\n this.k = model.k;\n this.classes = new Set(model.classes);\n this.isEuclidean = model.isEuclidean;\n return;\n }\n\n const classes = new Set(labels);\n\n const { distance = euclideanDistance, k = classes.size + 1 } = options;\n\n const points = new Array(dataset.length);\n for (var i = 0; i < points.length; ++i) {\n points[i] = dataset[i].slice();\n }\n\n for (i = 0; i < labels.length; ++i) {\n points[i].push(labels[i]);\n }\n\n this.kdTree = new KDTree(points, distance);\n this.k = k;\n this.classes = classes;\n this.isEuclidean = distance === euclideanDistance;\n }\n\n /**\n * Create a new KNN instance with the given model.\n * @param {object} model\n * @param {function} distance=euclideanDistance - distance function must be provided if the model wasn't trained with euclidean distance.\n * @return {KNN}\n */\n static load(model, distance = euclideanDistance) {\n if (model.name !== 'KNN') {\n throw new Error(`invalid model: ${model.name}`);\n }\n if (!model.isEuclidean && distance === euclideanDistance) {\n throw new Error(\n 'a custom distance function was used to create the model. Please provide it again'\n );\n }\n if (model.isEuclidean && distance !== euclideanDistance) {\n throw new Error(\n 'the model was created with the default distance function. Do not load it with another one'\n );\n }\n return new KNN(true, model, distance);\n }\n\n /**\n * Return a JSON containing the kd-tree model.\n * @return {object} JSON KNN model.\n */\n toJSON() {\n return {\n name: 'KNN',\n kdTree: this.kdTree,\n k: this.k,\n classes: Array.from(this.classes),\n isEuclidean: this.isEuclidean\n };\n }\n\n /**\n * Predicts the output given the matrix to predict.\n * @param {Array} dataset\n * @return {Array} predictions\n */\n predict(dataset) {\n if (Array.isArray(dataset)) {\n if (typeof dataset[0] === 'number') {\n return getSinglePrediction(this, dataset);\n } else if (\n Array.isArray(dataset[0]) &&\n typeof dataset[0][0] === 'number'\n ) {\n const predictions = new Array(dataset.length);\n for (var i = 0; i < dataset.length; i++) {\n predictions[i] = getSinglePrediction(this, dataset[i]);\n }\n return predictions;\n }\n }\n throw new TypeError('dataset to predict must be an array or a matrix');\n }\n}\n\nfunction getSinglePrediction(knn, currentCase) {\n var nearestPoints = knn.kdTree.nearest(currentCase, knn.k);\n var pointsPerClass = {};\n var predictedClass = -1;\n var maxPoints = -1;\n var lastElement = nearestPoints[0][0].length - 1;\n\n for (var element of knn.classes) {\n pointsPerClass[element] = 0;\n }\n\n for (var i = 0; i < nearestPoints.length; ++i) {\n var currentClass = nearestPoints[i][0][lastElement];\n var currentPoints = ++pointsPerClass[currentClass];\n if (currentPoints > maxPoints) {\n predictedClass = currentClass;\n maxPoints = currentPoints;\n }\n }\n\n return predictedClass;\n}\n","import Matrix from 'ml-matrix';\n\n/**\n * @private\n * Function that given vector, returns its norm\n * @param {Vector} X\n * @return {number} Norm of the vector\n */\nexport function norm(X) {\n return Math.sqrt(X.clone().apply(pow2array).sum());\n}\n\n/**\n * @private\n * Function that pow 2 each element of a Matrix or a Vector,\n * used in the apply method of the Matrix object\n * @param {number} i - index i.\n * @param {number} j - index j.\n * @return {Matrix} The Matrix object modified at the index i, j.\n * */\nexport function pow2array(i, j) {\n this.set(i, j, this.get(i, j) ** 2);\n}\n\n/**\n * @private\n * Function that normalize the dataset and return the means and\n * standard deviation of each feature.\n * @param {Matrix} dataset\n * @return {object} dataset normalized, means and standard deviations\n */\nexport function featureNormalize(dataset) {\n var means = dataset.mean('column');\n var std = dataset.standardDeviation('column', { mean: means, unbiased: true });\n var result = Matrix.checkMatrix(dataset).subRowVector(means);\n return { result: result.divRowVector(std), means: means, std: std };\n}\n\n/**\n * @private\n * Function that initialize an array of matrices.\n * @param {Array} array\n * @param {boolean} isMatrix\n * @return {Array} array with the matrices initialized.\n */\nexport function initializeMatrices(array, isMatrix) {\n if (isMatrix) {\n for (var i = 0; i < array.length; ++i) {\n for (var j = 0; j < array[i].length; ++j) {\n var elem = array[i][j];\n array[i][j] = elem !== null ? new Matrix(array[i][j]) : undefined;\n }\n }\n } else {\n for (i = 0; i < array.length; ++i) {\n array[i] = new Matrix(array[i]);\n }\n }\n\n return array;\n}\n","import Matrix from 'ml-matrix';\n\nimport * as Utils from './utils';\n\n/**\n * @class PLS\n */\nexport class PLS {\n /**\n * Constructor for Partial Least Squares (PLS)\n * @param {object} options\n * @param {number} [options.latentVectors] - Number of latent vector to get (if the algorithm doesn't find a good model below the tolerance)\n * @param {number} [options.tolerance=1e-5]\n * @param {boolean} [options.scale=true] - rescale dataset using mean.\n * @param {object} model - for load purposes.\n */\n constructor(options, model) {\n if (options === true) {\n this.meanX = model.meanX;\n this.stdDevX = model.stdDevX;\n this.meanY = model.meanY;\n this.stdDevY = model.stdDevY;\n this.PBQ = Matrix.checkMatrix(model.PBQ);\n this.R2X = model.R2X;\n this.scale = model.scale;\n this.scaleMethod = model.scaleMethod;\n this.tolerance = model.tolerance;\n } else {\n var {\n tolerance = 1e-5,\n scale = true,\n } = options;\n this.tolerance = tolerance;\n this.scale = scale;\n this.latentVectors = options.latentVectors;\n }\n }\n\n /**\n * Fits the model with the given data and predictions, in this function is calculated the\n * following outputs:\n *\n * T - Score matrix of X\n * P - Loading matrix of X\n * U - Score matrix of Y\n * Q - Loading matrix of Y\n * B - Matrix of regression coefficient\n * W - Weight matrix of X\n *\n * @param {Matrix|Array} trainingSet\n * @param {Matrix|Array} trainingValues\n */\n train(trainingSet, trainingValues) {\n trainingSet = Matrix.checkMatrix(trainingSet);\n trainingValues = Matrix.checkMatrix(trainingValues);\n\n if (trainingSet.length !== trainingValues.length) {\n throw new RangeError('The number of X rows must be equal to the number of Y rows');\n }\n\n this.meanX = trainingSet.mean('column');\n this.stdDevX = trainingSet.standardDeviation('column', { mean: this.meanX, unbiased: true });\n this.meanY = trainingValues.mean('column');\n this.stdDevY = trainingValues.standardDeviation('column', { mean: this.meanY, unbiased: true });\n\n if (this.scale) {\n trainingSet = trainingSet.clone().subRowVector(this.meanX).divRowVector(this.stdDevX);\n trainingValues = trainingValues.clone().subRowVector(this.meanY).divRowVector(this.stdDevY);\n }\n\n if (this.latentVectors === undefined) {\n this.latentVectors = Math.min(trainingSet.rows - 1, trainingSet.columns);\n }\n\n var rx = trainingSet.rows;\n var cx = trainingSet.columns;\n var ry = trainingValues.rows;\n var cy = trainingValues.columns;\n\n var ssqXcal = trainingSet.clone().mul(trainingSet).sum(); // for the r²\n var sumOfSquaresY = trainingValues.clone().mul(trainingValues).sum();\n\n var tolerance = this.tolerance;\n var n = this.latentVectors;\n var T = Matrix.zeros(rx, n);\n var P = Matrix.zeros(cx, n);\n var U = Matrix.zeros(ry, n);\n var Q = Matrix.zeros(cy, n);\n var B = Matrix.zeros(n, n);\n var W = P.clone();\n var k = 0;\n\n while (Utils.norm(trainingValues) > tolerance && k < n) {\n var transposeX = trainingSet.transpose();\n var transposeY = trainingValues.transpose();\n\n var tIndex = maxSumColIndex(trainingSet.clone().mul(trainingSet));\n var uIndex = maxSumColIndex(trainingValues.clone().mul(trainingValues));\n\n var t1 = trainingSet.getColumnVector(tIndex);\n var u = trainingValues.getColumnVector(uIndex);\n var t = Matrix.zeros(rx, 1);\n\n while (Utils.norm(t1.clone().sub(t)) > tolerance) {\n var w = transposeX.mmul(u);\n w.div(Utils.norm(w));\n t = t1;\n t1 = trainingSet.mmul(w);\n var q = transposeY.mmul(t1);\n q.div(Utils.norm(q));\n u = trainingValues.mmul(q);\n }\n\n t = t1;\n var num = transposeX.mmul(t);\n var den = t.transpose().mmul(t).get(0, 0);\n var p = num.div(den);\n var pnorm = Utils.norm(p);\n p.div(pnorm);\n t.mul(pnorm);\n w.mul(pnorm);\n\n num = u.transpose().mmul(t);\n den = t.transpose().mmul(t).get(0, 0);\n var b = num.div(den).get(0, 0);\n trainingSet.sub(t.mmul(p.transpose()));\n trainingValues.sub(t.clone().mul(b).mmul(q.transpose()));\n\n T.setColumn(k, t);\n P.setColumn(k, p);\n U.setColumn(k, u);\n Q.setColumn(k, q);\n W.setColumn(k, w);\n\n B.set(k, k, b);\n k++;\n }\n\n k--;\n T = T.subMatrix(0, T.rows - 1, 0, k);\n P = P.subMatrix(0, P.rows - 1, 0, k);\n U = U.subMatrix(0, U.rows - 1, 0, k);\n Q = Q.subMatrix(0, Q.rows - 1, 0, k);\n W = W.subMatrix(0, W.rows - 1, 0, k);\n B = B.subMatrix(0, k, 0, k);\n\n // TODO: review of R2Y\n // this.R2Y = t.transpose().mmul(t).mul(q[k][0]*q[k][0]).divS(ssqYcal)[0][0];\n //\n this.ssqYcal = sumOfSquaresY;\n this.E = trainingSet;\n this.F = trainingValues;\n this.T = T;\n this.P = P;\n this.U = U;\n this.Q = Q;\n this.W = W;\n this.B = B;\n this.PBQ = P.mmul(B).mmul(Q.transpose());\n this.R2X = t.transpose().mmul(t).mmul(p.transpose().mmul(p)).div(ssqXcal).get(0, 0);\n }\n\n /**\n * Predicts the behavior of the given dataset.\n * @param {Matrix|Array} dataset - data to be predicted.\n * @return {Matrix} - predictions of each element of the dataset.\n */\n predict(dataset) {\n var X = Matrix.checkMatrix(dataset);\n if (this.scale) {\n X = X.subRowVector(this.meanX).divRowVector(this.stdDevX);\n }\n var Y = X.mmul(this.PBQ);\n Y = Y.mulRowVector(this.stdDevY).addRowVector(this.meanY);\n return Y;\n }\n\n /**\n * Returns the explained variance on training of the PLS model\n * @return {number}\n */\n getExplainedVariance() {\n return this.R2X;\n }\n\n /**\n * Export the current model to JSON.\n * @return {object} - Current model.\n */\n toJSON() {\n return {\n name: 'PLS',\n R2X: this.R2X,\n meanX: this.meanX,\n stdDevX: this.stdDevX,\n meanY: this.meanY,\n stdDevY: this.stdDevY,\n PBQ: this.PBQ,\n tolerance: this.tolerance,\n scale: this.scale,\n };\n }\n\n /**\n * Load a PLS model from a JSON Object\n * @param {object} model\n * @return {PLS} - PLS object from the given model\n */\n static load(model) {\n if (model.name !== 'PLS') {\n throw new RangeError(`Invalid model: ${model.name}`);\n }\n return new PLS(true, model);\n }\n}\n\n/**\n * @private\n * Function that returns the index where the sum of each\n * column vector is maximum.\n * @param {Matrix} data\n * @return {number} index of the maximum\n */\nfunction maxSumColIndex(data) {\n return Matrix.rowVector(data.sum('column')).maxIndex()[0];\n}\n","import { Matrix, SingularValueDecomposition, inverse } from 'ml-matrix';\n\nimport { initializeMatrices } from './utils';\n\n/**\n * @class KOPLS\n */\nexport class KOPLS {\n /**\n * Constructor for Kernel-based Orthogonal Projections to Latent Structures (K-OPLS)\n * @param {object} options\n * @param {number} [options.predictiveComponents] - Number of predictive components to use.\n * @param {number} [options.orthogonalComponents] - Number of Y-Orthogonal components.\n * @param {Kernel} [options.kernel] - Kernel object to apply, see [ml-kernel](https://github.com/mljs/kernel).\n * @param {object} model - for load purposes.\n */\n constructor(options, model) {\n if (options === true) {\n this.trainingSet = new Matrix(model.trainingSet);\n this.YLoadingMat = new Matrix(model.YLoadingMat);\n this.SigmaPow = new Matrix(model.SigmaPow);\n this.YScoreMat = new Matrix(model.YScoreMat);\n this.predScoreMat = initializeMatrices(model.predScoreMat, false);\n this.YOrthLoadingVec = initializeMatrices(model.YOrthLoadingVec, false);\n this.YOrthEigen = model.YOrthEigen;\n this.YOrthScoreMat = initializeMatrices(model.YOrthScoreMat, false);\n this.toNorm = initializeMatrices(model.toNorm, false);\n this.TURegressionCoeff = initializeMatrices(model.TURegressionCoeff, false);\n this.kernelX = initializeMatrices(model.kernelX, true);\n this.kernel = model.kernel;\n this.orthogonalComp = model.orthogonalComp;\n this.predictiveComp = model.predictiveComp;\n } else {\n if (options.predictiveComponents === undefined) {\n throw new RangeError('no predictive components found!');\n }\n if (options.orthogonalComponents === undefined) {\n throw new RangeError('no orthogonal components found!');\n }\n if (options.kernel === undefined) {\n throw new RangeError('no kernel found!');\n }\n\n this.orthogonalComp = options.orthogonalComponents;\n this.predictiveComp = options.predictiveComponents;\n this.kernel = options.kernel;\n }\n }\n\n /**\n * Train the K-OPLS model with the given training set and labels.\n * @param {Matrix|Array} trainingSet\n * @param {Matrix|Array} trainingValues\n */\n train(trainingSet, trainingValues) {\n trainingSet = Matrix.checkMatrix(trainingSet);\n trainingValues = Matrix.checkMatrix(trainingValues);\n\n // to save and compute kernel with the prediction dataset.\n this.trainingSet = trainingSet.clone();\n\n var kernelX = this.kernel.compute(trainingSet);\n\n var Identity = Matrix.eye(kernelX.rows, kernelX.rows, 1);\n var temp = kernelX;\n kernelX = new Array(this.orthogonalComp + 1);\n for (let i = 0; i < this.orthogonalComp + 1; i++) {\n kernelX[i] = new Array(this.orthogonalComp + 1);\n }\n kernelX[0][0] = temp;\n\n var result = new SingularValueDecomposition(trainingValues.transpose().mmul(kernelX[0][0]).mmul(trainingValues), {\n computeLeftSingularVectors: true,\n computeRightSingularVectors: false\n });\n var YLoadingMat = result.leftSingularVectors;\n var Sigma = result.diagonalMatrix;\n\n YLoadingMat = YLoadingMat.subMatrix(0, YLoadingMat.rows - 1, 0, this.predictiveComp - 1);\n Sigma = Sigma.subMatrix(0, this.predictiveComp - 1, 0, this.predictiveComp - 1);\n\n var YScoreMat = trainingValues.mmul(YLoadingMat);\n\n var predScoreMat = new Array(this.orthogonalComp + 1);\n var TURegressionCoeff = new Array(this.orthogonalComp + 1);\n var YOrthScoreMat = new Array(this.orthogonalComp);\n var YOrthLoadingVec = new Array(this.orthogonalComp);\n var YOrthEigen = new Array(this.orthogonalComp);\n var YOrthScoreNorm = new Array(this.orthogonalComp);\n\n var SigmaPow = Matrix.pow(Sigma, -0.5);\n // to avoid errors, check infinity\n SigmaPow.apply(function (i, j) {\n if (this.get(i, j) === Infinity) {\n this.set(i, j, 0);\n }\n });\n\n for (var i = 0; i < this.orthogonalComp; ++i) {\n predScoreMat[i] = kernelX[0][i].transpose().mmul(YScoreMat).mmul(SigmaPow);\n\n var TpiPrime = predScoreMat[i].transpose();\n TURegressionCoeff[i] = inverse(TpiPrime.mmul(predScoreMat[i])).mmul(TpiPrime).mmul(YScoreMat);\n\n result = new SingularValueDecomposition(TpiPrime.mmul(Matrix.sub(kernelX[i][i], predScoreMat[i].mmul(TpiPrime))).mmul(predScoreMat[i]), {\n computeLeftSingularVectors: true,\n computeRightSingularVectors: false\n });\n var CoTemp = result.leftSingularVectors;\n var SoTemp = result.diagonalMatrix;\n\n YOrthLoadingVec[i] = CoTemp.subMatrix(0, CoTemp.rows - 1, 0, 0);\n YOrthEigen[i] = SoTemp.get(0, 0);\n\n YOrthScoreMat[i] = Matrix.sub(kernelX[i][i], predScoreMat[i].mmul(TpiPrime)).mmul(predScoreMat[i]).mmul(YOrthLoadingVec[i]).mul(Math.pow(YOrthEigen[i], -0.5));\n\n var toiPrime = YOrthScoreMat[i].transpose();\n YOrthScoreNorm[i] = Matrix.sqrt(toiPrime.mmul(YOrthScoreMat[i]));\n\n YOrthScoreMat[i] = YOrthScoreMat[i].divRowVector(YOrthScoreNorm[i]);\n\n var ITo = Matrix.sub(Identity, YOrthScoreMat[i].mmul(YOrthScoreMat[i].transpose()));\n\n kernelX[0][i + 1] = kernelX[0][i].mmul(ITo);\n kernelX[i + 1][i + 1] = ITo.mmul(kernelX[i][i]).mmul(ITo);\n }\n\n var lastScoreMat = predScoreMat[this.orthogonalComp] = kernelX[0][this.orthogonalComp].transpose().mmul(YScoreMat).mmul(SigmaPow);\n\n var lastTpPrime = lastScoreMat.transpose();\n TURegressionCoeff[this.orthogonalComp] = inverse(lastTpPrime.mmul(lastScoreMat)).mmul(lastTpPrime).mmul(YScoreMat);\n\n this.YLoadingMat = YLoadingMat;\n this.SigmaPow = SigmaPow;\n this.YScoreMat = YScoreMat;\n this.predScoreMat = predScoreMat;\n this.YOrthLoadingVec = YOrthLoadingVec;\n this.YOrthEigen = YOrthEigen;\n this.YOrthScoreMat = YOrthScoreMat;\n this.toNorm = YOrthScoreNorm;\n this.TURegressionCoeff = TURegressionCoeff;\n this.kernelX = kernelX;\n }\n\n /**\n * Predicts the output given the matrix to predict.\n * @param {Matrix|Array} toPredict\n * @return {{y: Matrix, predScoreMat: Array, predYOrthVectors: Array}} predictions\n */\n predict(toPredict) {\n var KTestTrain = this.kernel.compute(toPredict, this.trainingSet);\n\n var temp = KTestTrain;\n KTestTrain = new Array(this.orthogonalComp + 1);\n for (let i = 0; i < this.orthogonalComp + 1; i++) {\n KTestTrain[i] = new Array(this.orthogonalComp + 1);\n }\n KTestTrain[0][0] = temp;\n\n var YOrthScoreVector = new Array(this.orthogonalComp);\n var predScoreMat = new Array(this.orthogonalComp);\n\n var i;\n for (i = 0; i < this.orthogonalComp; ++i) {\n predScoreMat[i] = KTestTrain[i][0].mmul(this.YScoreMat).mmul(this.SigmaPow);\n\n YOrthScoreVector[i] = Matrix.sub(KTestTrain[i][i], predScoreMat[i].mmul(this.predScoreMat[i].transpose())).mmul(this.predScoreMat[i]).mmul(this.YOrthLoadingVec[i]).mul(Math.pow(this.YOrthEigen[i], -0.5));\n\n YOrthScoreVector[i] = YOrthScoreVector[i].divRowVector(this.toNorm[i]);\n\n var scoreMatPrime = this.YOrthScoreMat[i].transpose();\n KTestTrain[i + 1][0] = Matrix.sub(KTestTrain[i][0], YOrthScoreVector[i].mmul(scoreMatPrime).mmul(this.kernelX[0][i].transpose()));\n\n var p1 = Matrix.sub(KTestTrain[i][0], KTestTrain[i][i].mmul(this.YOrthScoreMat[i]).mmul(scoreMatPrime));\n var p2 = YOrthScoreVector[i].mmul(scoreMatPrime).mmul(this.kernelX[i][i]);\n var p3 = p2.mmul(this.YOrthScoreMat[i]).mmul(scoreMatPrime);\n\n KTestTrain[i + 1][i + 1] = p1.sub(p2).add(p3);\n }\n\n predScoreMat[i] = KTestTrain[i][0].mmul(this.YScoreMat).mmul(this.SigmaPow);\n var prediction = predScoreMat[i].mmul(this.TURegressionCoeff[i]).mmul(this.YLoadingMat.transpose());\n\n return {\n prediction: prediction,\n predScoreMat: predScoreMat,\n predYOrthVectors: YOrthScoreVector\n };\n }\n\n /**\n * Export the current model to JSON.\n * @return {object} - Current model.\n */\n toJSON() {\n return {\n name: 'K-OPLS',\n YLoadingMat: this.YLoadingMat,\n SigmaPow: this.SigmaPow,\n YScoreMat: this.YScoreMat,\n predScoreMat: this.predScoreMat,\n YOrthLoadingVec: this.YOrthLoadingVec,\n YOrthEigen: this.YOrthEigen,\n YOrthScoreMat: this.YOrthScoreMat,\n toNorm: this.toNorm,\n TURegressionCoeff: this.TURegressionCoeff,\n kernelX: this.kernelX,\n trainingSet: this.trainingSet,\n orthogonalComp: this.orthogonalComp,\n predictiveComp: this.predictiveComp\n };\n }\n\n /**\n * Load a K-OPLS with the given model.\n * @param {object} model\n * @param {Kernel} kernel - kernel used on the model, see [ml-kernel](https://github.com/mljs/kernel).\n * @return {KOPLS}\n */\n static load(model, kernel) {\n if (model.name !== 'K-OPLS') {\n throw new RangeError(`Invalid model: ${model.name}`);\n }\n\n if (!kernel) {\n throw new RangeError('You must provide a kernel for the model!');\n }\n\n model.kernel = kernel;\n return new KOPLS(true, model);\n }\n}\n","/**\n * Constructs a confusion matrix\n * @class ConfusionMatrix\n * @example\n * const CM = new ConfusionMatrix([[13, 2], [10, 5]], ['cat', 'dog'])\n * @param {Array>} matrix - The confusion matrix, a 2D Array. Rows represent the actual label and columns\n * the predicted label.\n * @param {Array} labels - Labels of the confusion matrix, a 1D Array\n */\nclass ConfusionMatrix {\n constructor(matrix, labels) {\n if (matrix.length !== matrix[0].length) {\n throw new Error('Confusion matrix must be square');\n }\n if (labels.length !== matrix.length) {\n throw new Error('Confusion matrix and labels should have the same length');\n }\n this.labels = labels;\n this.matrix = matrix;\n }\n\n\n /**\n * Construct confusion matrix from the predicted and actual labels (classes). Be sure to provide the arguments in\n * the correct order!\n * @param {Array} actual - The predicted labels of the classification\n * @param {Array} predicted - The actual labels of the classification. Has to be of same length as\n * predicted.\n * @param {object} [options] - Additional options\n * @param {Array} [options.labels] - The list of labels that should be used. If not provided the distinct set\n * of labels present in predicted and actual is used. Labels are compared using the strict equality operator\n * '==='\n * @return {ConfusionMatrix} - Confusion matrix\n */\n static fromLabels(actual, predicted, options = {}) {\n if (predicted.length !== actual.length) {\n throw new Error('predicted and actual must have the same length');\n }\n let distinctLabels;\n if (options.labels) {\n distinctLabels = new Set(options.labels);\n } else {\n distinctLabels = new Set([...actual, ...predicted]);\n }\n distinctLabels = Array.from(distinctLabels);\n if (options.sort) {\n distinctLabels.sort(options.sort);\n }\n\n // Create confusion matrix and fill with 0's\n const matrix = Array.from({length: distinctLabels.length});\n for (let i = 0; i < matrix.length; i++) {\n matrix[i] = new Array(matrix.length);\n matrix[i].fill(0);\n }\n\n for (let i = 0; i < predicted.length; i++) {\n const actualIdx = distinctLabels.indexOf(actual[i]);\n const predictedIdx = distinctLabels.indexOf(predicted[i]);\n if (actualIdx >= 0 && predictedIdx >= 0) {\n matrix[actualIdx][predictedIdx]++;\n }\n }\n\n return new ConfusionMatrix(matrix, distinctLabels);\n }\n\n /**\n * Get the confusion matrix\n * @return {Array >}\n */\n getMatrix() {\n return this.matrix;\n }\n\n getLabels() {\n return this.labels;\n }\n\n /**\n * Get the total number of samples\n * @return {number}\n */\n getTotalCount() {\n let predicted = 0;\n for (var i = 0; i < this.matrix.length; i++) {\n for (var j = 0; j < this.matrix.length; j++) {\n predicted += this.matrix[i][j];\n }\n }\n return predicted;\n }\n\n /**\n * Get the total number of true predictions\n * @return {number}\n */\n getTrueCount() {\n var count = 0;\n for (var i = 0; i < this.matrix.length; i++) {\n count += this.matrix[i][i];\n }\n return count;\n }\n\n /**\n * Get the total number of false predictions.\n * @return {number}\n */\n getFalseCount() {\n return this.getTotalCount() - this.getTrueCount();\n }\n\n /**\n * Get the number of true positive predictions.\n * @param {any} label - The label that should be considered \"positive\"\n * @return {number}\n */\n getTruePositiveCount(label) {\n const index = this.getIndex(label);\n return this.matrix[index][index];\n }\n\n /**\n * Get the number of true negative predictions\n * @param {any} label - The label that should be considered \"positive\"\n * @return {number}\n */\n getTrueNegativeCount(label) {\n const index = this.getIndex(label);\n var count = 0;\n for (var i = 0; i < this.matrix.length; i++) {\n for (var j = 0; j < this.matrix.length; j++) {\n if (i !== index && j !== index) {\n count += this.matrix[i][j];\n }\n }\n }\n return count;\n }\n\n /**\n * Get the number of false positive predictions.\n * @param {any} label - The label that should be considered \"positive\"\n * @return {number}\n */\n getFalsePositiveCount(label) {\n const index = this.getIndex(label);\n var count = 0;\n for (var i = 0; i < this.matrix.length; i++) {\n if (i !== index) {\n count += this.matrix[i][index];\n }\n }\n return count;\n }\n\n /**\n * Get the number of false negative predictions.\n * @param {any} label - The label that should be considered \"positive\"\n * @return {number}\n */\n getFalseNegativeCount(label) {\n const index = this.getIndex(label);\n var count = 0;\n for (var i = 0; i < this.matrix.length; i++) {\n if (i !== index) {\n count += this.matrix[index][i];\n }\n }\n return count;\n }\n\n /**\n * Get the number of real positive samples.\n * @param {any} label - The label that should be considered \"positive\"\n * @return {number}\n */\n getPositiveCount(label) {\n return this.getTruePositiveCount(label) + this.getFalseNegativeCount(label);\n }\n\n /**\n * Get the number of real negative samples.\n * @param {any} label - The label that should be considered \"positive\"\n * @return {number}\n */\n getNegativeCount(label) {\n return this.getTrueNegativeCount(label) + this.getFalsePositiveCount(label);\n }\n\n /**\n * Get the index in the confusion matrix that corresponds to the given label\n * @param {any} label - The label to search for\n * @throws if the label is not found\n * @return {number}\n */\n getIndex(label) {\n const index = this.labels.indexOf(label);\n if (index === -1) throw new Error('The label does not exist');\n return index;\n }\n\n /**\n * Get the true positive rate a.k.a. sensitivity. Computes the ratio between the number of true positive predictions and the total number of positive samples.\n * {@link https://en.wikipedia.org/wiki/Sensitivity_and_specificity}\n * @param {any} label - The label that should be considered \"positive\"\n * @return {number} - The true positive rate [0-1]\n */\n getTruePositiveRate(label) {\n return this.getTruePositiveCount(label) / this.getPositiveCount(label);\n }\n\n /**\n * Get the true negative rate a.k.a. specificity. Computes the ration between the number of true negative predictions and the total number of negative samples.\n * {@link https://en.wikipedia.org/wiki/Sensitivity_and_specificity}\n * @param {any} label - The label that should be considered \"positive\"\n * @return {number}\n */\n getTrueNegativeRate(label) {\n return this.getTrueNegativeCount(label) / this.getNegativeCount(label);\n }\n\n /**\n * Get the positive predictive value a.k.a. precision. Computes TP / (TP + FP)\n * {@link https://en.wikipedia.org/wiki/Positive_and_negative_predictive_values}\n * @param {any} label - The label that should be considered \"positive\"\n * @return {number}\n */\n getPositivePredictiveValue(label) {\n const TP = this.getTruePositiveCount(label);\n return TP / (TP + this.getFalsePositiveCount(label));\n }\n\n /**\n * Negative predictive value\n * {@link https://en.wikipedia.org/wiki/Positive_and_negative_predictive_values}\n * @param {any} label - The label that should be considered \"positive\"\n * @return {number}\n */\n getNegativePredictiveValue(label) {\n const TN = this.getTrueNegativeCount(label);\n return TN / (TN + this.getFalseNegativeCount(label));\n }\n\n /**\n * False negative rate a.k.a. miss rate.\n * {@link https://en.wikipedia.org/wiki/Type_I_and_type_II_errors#False_positive_and_false_negative_rates}\n * @param {any} label - The label that should be considered \"positive\"\n * @return {number}\n */\n getFalseNegativeRate(label) {\n return 1 - this.getTruePositiveRate(label);\n }\n\n /**\n * False positive rate a.k.a. fall-out rate.\n * {@link https://en.wikipedia.org/wiki/Type_I_and_type_II_errors#False_positive_and_false_negative_rates}\n * @param {any} label - The label that should be considered \"positive\"\n * @return {number}\n */\n getFalsePositiveRate(label) {\n return 1 - this.getTrueNegativeRate(label);\n }\n\n /**\n * False discovery rate (FDR)\n * {@link https://en.wikipedia.org/wiki/False_discovery_rate}\n * @param {any} label - The label that should be considered \"positive\"\n * @return {number}\n */\n getFalseDiscoveryRate(label) {\n const FP = this.getFalsePositiveCount(label);\n return FP / (FP + this.getTruePositiveCount(label));\n }\n\n /**\n * False omission rate (FOR)\n * @param {any} label - The label that should be considered \"positive\"\n * @return {number}\n */\n getFalseOmissionRate(label) {\n const FN = this.getFalseNegativeCount(label);\n return FN / (FN + this.getTruePositiveCount(label));\n }\n\n /**\n * F1 score\n * {@link https://en.wikipedia.org/wiki/F1_score}\n * @param {any} label - The label that should be considered \"positive\"\n * @return {number}\n */\n getF1Score(label) {\n const TP = this.getTruePositiveCount(label);\n return 2 * TP / (2 * TP + this.getFalsePositiveCount(label) + this.getFalseNegativeCount(label));\n }\n\n /**\n * Matthews correlation coefficient (MCC)\n * {@link https://en.wikipedia.org/wiki/Matthews_correlation_coefficient}\n * @param {any} label - The label that should be considered \"positive\"\n * @return {number}\n */\n getMatthewsCorrelationCoefficient(label) {\n const TP = this.getTruePositiveCount(label);\n const TN = this.getTrueNegativeCount(label);\n const FP = this.getFalsePositiveCount(label);\n const FN = this.getFalseNegativeCount(label);\n return (TP * TN - FP * FN) / Math.sqrt((TP + FP) * (TP + FN) * (TN + FP) * (TN + FN));\n }\n\n /**\n * Informedness\n * {@link https://en.wikipedia.org/wiki/Youden%27s_J_statistic}\n * @param {any} label - The label that should be considered \"positive\"\n * @return {number}\n */\n getInformedness(label) {\n return this.getTruePositiveRate(label) + this.getTrueNegativeRate(label) - 1;\n }\n\n /**\n * Markedness\n * @param {any} label - The label that should be considered \"positive\"\n * @return {number}\n */\n getMarkedness(label) {\n return this.getPositivePredictiveValue(label) + this.getNegativePredictiveValue(label) - 1;\n }\n\n /**\n * Get the confusion table.\n * @param {any} label - The label that should be considered \"positive\"\n * @return {Array >} - The 2x2 confusion table. [[TP, FN], [FP, TN]]\n */\n getConfusionTable(label) {\n return [\n [\n this.getTruePositiveCount(label),\n this.getFalseNegativeCount(label)\n ],\n [\n this.getFalsePositiveCount(label),\n this.getTrueNegativeCount(label)\n ]\n ];\n }\n\n /**\n * Get total accuracy.\n * @return {number} - The ratio between the number of true predictions and total number of classifications ([0-1])\n */\n getAccuracy() {\n let correct = 0;\n let incorrect = 0;\n for (var i = 0; i < this.matrix.length; i++) {\n for (var j = 0; j < this.matrix.length; j++) {\n if (i === j) correct += this.matrix[i][j];\n else incorrect += this.matrix[i][j];\n }\n }\n return correct / (correct + incorrect);\n }\n\n\n /**\n * Returns the element in the confusion matrix that corresponds to the given actual and predicted labels.\n * @param {any} actual - The true label\n * @param {any} predicted - The predicted label\n * @return {number} - The element in the confusion matrix\n */\n getCount(actual, predicted) {\n const actualIndex = this.getIndex(actual);\n const predictedIndex = this.getIndex(predicted);\n return this.matrix[actualIndex][predictedIndex];\n }\n\n /**\n * Compute the general prediction accuracy\n * @deprecated Use getAccuracy\n * @return {number} - The prediction accuracy ([0-1]\n */\n get accuracy() {\n return this.getAccuracy();\n }\n\n /**\n * Compute the number of predicted observations\n * @deprecated Use getTotalCount\n * @return {number}\n */\n get total() {\n return this.getTotalCount();\n }\n}\n\nmodule.exports = ConfusionMatrix;\n","'use strict';\nconst defaultOptions = {\n mode: 'index'\n};\n\nmodule.exports = function *(M, N, options) {\n options = Object.assign({}, defaultOptions, options);\n var a = new Array(N);\n var c = new Array(M);\n var b = new Array(N);\n var p = new Array(N + 2);\n var x, y, z;\n\n // init a and b\n for (var i = 0; i < N; i++) {\n a[i] = i;\n if (i < N - M) b[i] = 0;\n else b[i] = 1;\n }\n\n // init c\n for (i = 0; i < M; i++) {\n c[i] = N - M + i;\n }\n\n // init p\n for (i = 0; i < p.length; i++) {\n if (i === 0) p[i] = N + 1;\n else if (i <= N - M) p[i] = 0;\n else if (i <= N) p[i] = i - N + M;\n else p[i] = -2;\n }\n\n function twiddle() {\n var i, j, k;\n j = 1;\n while (p[j] <= 0) {\n j++;\n }\n if (p[j - 1] === 0) {\n for (i = j - 1; i !== 1; i--) {\n p[i] = -1;\n }\n p[j] = 0;\n x = z = 0;\n p[1] = 1;\n y = j - 1;\n } else {\n if (j > 1) {\n p[j - 1] = 0;\n }\n do {\n j++;\n }\n while (p[j] > 0);\n k = j - 1;\n i = j;\n while (p[i] === 0) {\n p[i++] = -1;\n }\n if (p[i] === -1) {\n p[i] = p[k];\n z = p[k] - 1;\n x = i - 1;\n y = k - 1;\n p[k] = -1;\n } else {\n if (i === p[0]) {\n return 0;\n } else {\n p[j] = p[i];\n z = p[i] - 1;\n p[i] = 0;\n x = j - 1;\n y = i - 1;\n }\n }\n }\n return 1;\n }\n\n if (options.mode === 'index') {\n yield c.slice();\n while (twiddle()) {\n c[z] = a[x];\n yield c.slice();\n }\n } else if (options.mode === 'mask') {\n yield b.slice();\n while (twiddle()) {\n b[x] = 1;\n b[y] = 0;\n yield b.slice();\n }\n } else {\n throw new Error('Invalid mode');\n }\n};\n","'use strict';\n\nconst ConfusionMatrix = require('ml-confusion-matrix');\n\nconst CV = {};\nconst combinations = require('ml-combinations');\n\n/**\n * Performs a leave-one-out cross-validation (LOO-CV) of the given samples. In LOO-CV, 1 observation is used as the\n * validation set while the rest is used as the training set. This is repeated once for each observation. LOO-CV is a\n * special case of LPO-CV. @see leavePout\n * @param {function} Classifier - The classifier's constructor to use for the cross validation. Expect ml-classifier\n * api.\n * @param {Array} features - The features for all samples of the data-set\n * @param {Array} labels - The classification class of all samples of the data-set\n * @param {object} classifierOptions - The classifier options with which the classifier should be instantiated.\n * @return {ConfusionMatrix} - The cross-validation confusion matrix\n */\nCV.leaveOneOut = function (Classifier, features, labels, classifierOptions) {\n if (typeof labels === 'function') {\n var callback = labels;\n labels = features;\n features = Classifier;\n return CV.leavePOut(features, labels, 1, callback);\n }\n return CV.leavePOut(Classifier, features, labels, classifierOptions, 1);\n};\n\n\n/**\n * Performs a leave-p-out cross-validation (LPO-CV) of the given samples. In LPO-CV, p observations are used as the\n * validation set while the rest is used as the training set. This is repeated as many times as there are possible\n * ways to combine p observations from the set (unordered without replacement). Be aware that for relatively small\n * data-set size this can require a very large number of training and testing to do!\n * @param {function} Classifier - The classifier's constructor to use for the cross validation. Expect ml-classifier\n * api.\n * @param {Array} features - The features for all samples of the data-set\n * @param {Array} labels - The classification class of all samples of the data-set\n * @param {object} classifierOptions - The classifier options with which the classifier should be instantiated.\n * @param {number} p - The size of the validation sub-samples' set\n * @return {ConfusionMatrix} - The cross-validation confusion matrix\n */\nCV.leavePOut = function (Classifier, features, labels, classifierOptions, p) {\n if (typeof classifierOptions === 'function') {\n var callback = classifierOptions;\n p = labels;\n labels = features;\n features = Classifier;\n }\n check(features, labels);\n const distinct = getDistinct(labels);\n const confusionMatrix = initMatrix(distinct.length, distinct.length);\n\n var N = features.length;\n var gen = combinations(p, N);\n var allIdx = new Array(N);\n for (let i = 0; i < N; i++) {\n allIdx[i] = i;\n }\n for (const testIdx of gen) {\n var trainIdx = allIdx.slice();\n\n for (let i = testIdx.length - 1; i >= 0; i--) {\n trainIdx.splice(testIdx[i], 1);\n }\n\n if (callback) {\n validateWithCallback(features, labels, testIdx, trainIdx, confusionMatrix, distinct, callback);\n } else {\n validate(Classifier, features, labels, classifierOptions, testIdx, trainIdx, confusionMatrix, distinct);\n }\n\n }\n\n return new ConfusionMatrix(confusionMatrix, distinct);\n};\n\n/**\n * Performs k-fold cross-validation (KF-CV). KF-CV separates the data-set into k random equally sized partitions, and\n * uses each as a validation set, with all other partitions used in the training set. Observations left over from if k\n * does not divide the number of observations are left out of the cross-validation process.\n * @param {function} Classifier - The classifier's to use for the cross validation. Expect ml-classifier api.\n * @param {Array} features - The features for all samples of the data-set\n * @param {Array} labels - The classification class of all samples of the data-set\n * @param {object} classifierOptions - The classifier options with which the classifier should be instantiated.\n * @param {number} k - The number of partitions to create\n * @return {ConfusionMatrix} - The cross-validation confusion matrix\n */\nCV.kFold = function (Classifier, features, labels, classifierOptions, k) {\n if (typeof classifierOptions === 'function') {\n var callback = classifierOptions;\n k = labels;\n labels = features;\n features = Classifier;\n }\n check(features, labels);\n const distinct = getDistinct(labels);\n const confusionMatrix = initMatrix(distinct.length, distinct.length);\n var N = features.length;\n var allIdx = new Array(N);\n for (var i = 0; i < N; i++) {\n allIdx[i] = i;\n }\n\n var l = Math.floor(N / k);\n // create random k-folds\n var current = [];\n var folds = [];\n while (allIdx.length) {\n var randi = Math.floor(Math.random() * allIdx.length);\n current.push(allIdx[randi]);\n allIdx.splice(randi, 1);\n if (current.length === l) {\n folds.push(current);\n current = [];\n }\n }\n if (current.length) folds.push(current);\n folds = folds.slice(0, k);\n\n\n for (i = 0; i < folds.length; i++) {\n var testIdx = folds[i];\n var trainIdx = [];\n for (var j = 0; j < folds.length; j++) {\n if (j !== i) trainIdx = trainIdx.concat(folds[j]);\n }\n\n if (callback) {\n validateWithCallback(features, labels, testIdx, trainIdx, confusionMatrix, distinct, callback);\n } else {\n validate(Classifier, features, labels, classifierOptions, testIdx, trainIdx, confusionMatrix, distinct);\n }\n }\n\n return new ConfusionMatrix(confusionMatrix, distinct);\n};\n\nfunction check(features, labels) {\n if (features.length !== labels.length) {\n throw new Error('features and labels should have the same length');\n }\n}\n\nfunction initMatrix(rows, columns) {\n return new Array(rows).fill(0).map(() => new Array(columns).fill(0));\n}\n\nfunction getDistinct(arr) {\n var s = new Set();\n for (let i = 0; i < arr.length; i++) {\n s.add(arr[i]);\n }\n return Array.from(s);\n}\n\nfunction validate(Classifier, features, labels, classifierOptions, testIdx, trainIdx, confusionMatrix, distinct) {\n const {testFeatures, trainFeatures, testLabels, trainLabels} = getTrainTest(features, labels, testIdx, trainIdx);\n\n var classifier;\n if (Classifier.prototype.train) {\n classifier = new Classifier(classifierOptions);\n classifier.train(trainFeatures, trainLabels);\n } else {\n classifier = new Classifier(trainFeatures, trainLabels, classifierOptions);\n }\n\n var predictedLabels = classifier.predict(testFeatures);\n updateConfusionMatrix(confusionMatrix, testLabels, predictedLabels, distinct);\n}\n\nfunction validateWithCallback(features, labels, testIdx, trainIdx, confusionMatrix, distinct, callback) {\n const {testFeatures, trainFeatures, testLabels, trainLabels} = getTrainTest(features, labels, testIdx, trainIdx);\n const predictedLabels = callback(trainFeatures, trainLabels, testFeatures);\n updateConfusionMatrix(confusionMatrix, testLabels, predictedLabels, distinct);\n}\n\nfunction updateConfusionMatrix(confusionMatrix, testLabels, predictedLabels, distinct) {\n\n for (var i = 0; i < predictedLabels.length; i++) {\n const actualIdx = distinct.indexOf(testLabels[i]);\n const predictedIdx = distinct.indexOf(predictedLabels[i]);\n if (actualIdx < 0 || predictedIdx < 0) {\n // eslint-disable-next-line no-console\n console.warn(`ignore unknown predicted label ${predictedLabels[i]}`);\n }\n confusionMatrix[actualIdx][predictedIdx]++;\n }\n}\n\n\nfunction getTrainTest(features, labels, testIdx, trainIdx) {\n return {\n testFeatures: testIdx.map(function (index) {\n return features[index];\n }),\n trainFeatures: trainIdx.map(function (index) {\n return features[index];\n }),\n testLabels: testIdx.map(function (index) {\n return labels[index];\n }),\n trainLabels: trainIdx.map(function (index) {\n return labels[index];\n })\n };\n}\n\nmodule.exports = CV;\n","'use strict';\n\nvar mlMatrix = require('ml-matrix');\n\nfunction logistic(val) {\n return 1 / (1 + Math.exp(-val));\n}\n\nfunction expELU(val, param) {\n return val < 0 ? param * (Math.exp(val) - 1) : val;\n}\n\nfunction softExponential(val, param) {\n if (param < 0) {\n return -Math.log(1 - param * (val + param)) / param;\n }\n if (param > 0) {\n return ((Math.exp(param * val) - 1) / param) + param;\n }\n return val;\n}\n\nfunction softExponentialPrime(val, param) {\n if (param < 0) {\n return 1 / (1 - param * (param + val));\n } else {\n return Math.exp(param * val);\n }\n}\n\nconst ACTIVATION_FUNCTIONS = {\n tanh: {\n activation: Math.tanh,\n derivate: (val) => 1 - (val * val)\n },\n identity: {\n activation: (val) => val,\n derivate: () => 1\n },\n logistic: {\n activation: logistic,\n derivate: (val) => logistic(val) * (1 - logistic(val))\n },\n arctan: {\n activation: Math.atan,\n derivate: (val) => 1 / (val * val + 1)\n },\n softsign: {\n activation: (val) => val / (1 + Math.abs(val)),\n derivate: (val) => 1 / ((1 + Math.abs(val)) * (1 + Math.abs(val)))\n },\n relu: {\n activation: (val) => (val < 0 ? 0 : val),\n derivate: (val) => (val < 0 ? 0 : 1)\n },\n softplus: {\n activation: (val) => Math.log(1 + Math.exp(val)),\n derivate: (val) => 1 / (1 + Math.exp(-val))\n },\n bent: {\n activation: (val) => ((Math.sqrt(val * val + 1) - 1) / 2) + val,\n derivate: (val) => (val / (2 * Math.sqrt(val * val + 1))) + 1\n },\n sinusoid: {\n activation: Math.sin,\n derivate: Math.cos\n },\n sinc: {\n activation: (val) => (val === 0 ? 1 : Math.sin(val) / val),\n derivate: (val) => (val === 0 ? 0 : (Math.cos(val) / val) - (Math.sin(val) / (val * val)))\n },\n gaussian: {\n activation: (val) => Math.exp(-(val * val)),\n derivate: (val) => -2 * val * Math.exp(-(val * val))\n },\n 'parametric-relu': {\n activation: (val, param) => (val < 0 ? param * val : val),\n derivate: (val, param) => (val < 0 ? param : 1)\n },\n 'exponential-elu': {\n activation: expELU,\n derivate: (val, param) => (val < 0 ? expELU(val, param) + param : 1)\n },\n 'soft-exponential': {\n activation: softExponential,\n derivate: softExponentialPrime\n }\n};\n\nclass Layer {\n /**\n * @private\n * Create a new layer with the given options\n * @param {object} options\n * @param {number} [options.inputSize] - Number of conections that enter the neurons.\n * @param {number} [options.outputSize] - Number of conections that leave the neurons.\n * @param {number} [options.regularization] - Regularization parameter.\n * @param {number} [options.epsilon] - Learning rate parameter.\n * @param {string} [options.activation] - Activation function parameter from the FeedForwardNeuralNetwork class.\n * @param {number} [options.activationParam] - Activation parameter if needed.\n */\n constructor(options) {\n this.inputSize = options.inputSize;\n this.outputSize = options.outputSize;\n this.regularization = options.regularization;\n this.epsilon = options.epsilon;\n this.activation = options.activation;\n this.activationParam = options.activationParam;\n\n var selectedFunction = ACTIVATION_FUNCTIONS[options.activation];\n var params = selectedFunction.activation.length;\n\n var actFunction = params > 1 ? (val) => selectedFunction.activation(val, options.activationParam) : selectedFunction.activation;\n var derFunction = params > 1 ? (val) => selectedFunction.derivate(val, options.activationParam) : selectedFunction.derivate;\n\n this.activationFunction = function (i, j) {\n this.set(i, j, actFunction(this.get(i, j)));\n };\n this.derivate = function (i, j) {\n this.set(i, j, derFunction(this.get(i, j)));\n };\n\n if (options.model) {\n // load model\n this.W = mlMatrix.Matrix.checkMatrix(options.W);\n this.b = mlMatrix.Matrix.checkMatrix(options.b);\n } else {\n // default constructor\n this.W = mlMatrix.Matrix.rand(this.inputSize, this.outputSize);\n this.b = mlMatrix.Matrix.zeros(1, this.outputSize);\n\n this.W.apply(function (i, j) {\n this.set(i, j, this.get(i, j) / Math.sqrt(options.inputSize));\n });\n }\n }\n\n /**\n * @private\n * propagate the given input through the current layer.\n * @param {Matrix} X - input.\n * @return {Matrix} output at the current layer.\n */\n forward(X) {\n var z = X.mmul(this.W).addRowVector(this.b);\n z.apply(this.activationFunction);\n this.a = z.clone();\n return z;\n }\n\n /**\n * @private\n * apply backpropagation algorithm at the current layer\n * @param {Matrix} delta - delta values estimated at the following layer.\n * @param {Matrix} a - 'a' values from the following layer.\n * @return {Matrix} the new delta values for the next layer.\n */\n backpropagation(delta, a) {\n this.dW = a.transpose().mmul(delta);\n this.db = mlMatrix.Matrix.rowVector(delta.sum('column'));\n\n var aCopy = a.clone();\n return delta.mmul(this.W.transpose()).mul(aCopy.apply(this.derivate));\n }\n\n /**\n * @private\n * Function that updates the weights at the current layer with the derivatives.\n */\n update() {\n this.dW.add(this.W.clone().mul(this.regularization));\n this.W.add(this.dW.mul(-this.epsilon));\n this.b.add(this.db.mul(-this.epsilon));\n }\n\n /**\n * @private\n * Export the current layer to JSON.\n * @return {object} model\n */\n toJSON() {\n return {\n model: 'Layer',\n inputSize: this.inputSize,\n outputSize: this.outputSize,\n regularization: this.regularization,\n epsilon: this.epsilon,\n activation: this.activation,\n W: this.W,\n b: this.b\n };\n }\n\n /**\n * @private\n * Creates a new Layer with the given model.\n * @param {object} model\n * @return {Layer}\n */\n static load(model) {\n if (model.model !== 'Layer') {\n throw new RangeError('the current model is not a Layer model');\n }\n return new Layer(model);\n }\n}\n\nclass OutputLayer extends Layer {\n constructor(options) {\n super(options);\n\n this.activationFunction = function (i, j) {\n this.set(i, j, Math.exp(this.get(i, j)));\n };\n }\n\n static load(model) {\n if (model.model !== 'Layer') {\n throw new RangeError('the current model is not a Layer model');\n }\n\n return new OutputLayer(model);\n }\n}\n\nclass FeedForwardNeuralNetworks {\n /**\n * Create a new Feedforward neural network model.\n * @class FeedForwardNeuralNetworks\n * @param {object} [options]\n * @param {Array} [options.hiddenLayers=[10]] - Array that contains the sizes of the hidden layers.\n * @param {number} [options.iterations=50] - Number of iterations at the training step.\n * @param {number} [options.learningRate=0.01] - Learning rate of the neural net (also known as epsilon).\n * @param {number} [options.regularization=0.01] - Regularization parameter af the neural net.\n * @param {string} [options.activation='tanh'] - activation function to be used. (options: 'tanh'(default),\n * 'identity', 'logistic', 'arctan', 'softsign', 'relu', 'softplus', 'bent', 'sinusoid', 'sinc', 'gaussian').\n * (single-parametric options: 'parametric-relu', 'exponential-relu', 'soft-exponential').\n * @param {number} [options.activationParam=1] - if the selected activation function needs a parameter.\n */\n constructor(options) {\n options = options || {};\n if (options.model) {\n // load network\n this.hiddenLayers = options.hiddenLayers;\n this.iterations = options.iterations;\n this.learningRate = options.learningRate;\n this.regularization = options.regularization;\n this.dicts = options.dicts;\n this.activation = options.activation;\n this.activationParam = options.activationParam;\n this.model = new Array(options.layers.length);\n\n for (var i = 0; i < this.model.length - 1; ++i) {\n this.model[i] = Layer.load(options.layers[i]);\n }\n this.model[this.model.length - 1] = OutputLayer.load(options.layers[this.model.length - 1]);\n } else {\n // default constructor\n this.hiddenLayers = options.hiddenLayers || [10];\n this.iterations = options.iterations || 50;\n\n this.learningRate = options.learningRate || 0.01;\n this.regularization = options.regularization || 0.01;\n\n this.activation = options.activation || 'tanh';\n this.activationParam = options.activationParam || 1;\n if (!(this.activation in Object.keys(ACTIVATION_FUNCTIONS))) {\n this.activation = 'tanh';\n }\n }\n }\n\n /**\n * @private\n * Function that build and initialize the neural net.\n * @param {number} inputSize - total of features to fit.\n * @param {number} outputSize - total of labels of the prediction set.\n */\n buildNetwork(inputSize, outputSize) {\n var size = 2 + (this.hiddenLayers.length - 1);\n this.model = new Array(size);\n\n // input layer\n this.model[0] = new Layer({\n inputSize: inputSize,\n outputSize: this.hiddenLayers[0],\n activation: this.activation,\n activationParam: this.activationParam,\n regularization: this.regularization,\n epsilon: this.learningRate\n });\n\n // hidden layers\n for (var i = 1; i < this.hiddenLayers.length; ++i) {\n this.model[i] = new Layer({\n inputSize: this.hiddenLayers[i - 1],\n outputSize: this.hiddenLayers[i],\n activation: this.activation,\n activationParam: this.activationParam,\n regularization: this.regularization,\n epsilon: this.learningRate\n });\n }\n\n // output layer\n this.model[size - 1] = new OutputLayer({\n inputSize: this.hiddenLayers[this.hiddenLayers.length - 1],\n outputSize: outputSize,\n activation: this.activation,\n activationParam: this.activationParam,\n regularization: this.regularization,\n epsilon: this.learningRate\n });\n }\n\n /**\n * Train the neural net with the given features and labels.\n * @param {Matrix|Array} features\n * @param {Matrix|Array} labels\n */\n train(features, labels) {\n features = mlMatrix.Matrix.checkMatrix(features);\n this.dicts = dictOutputs(labels);\n\n var inputSize = features.columns;\n var outputSize = Object.keys(this.dicts.inputs).length;\n\n if (!this.model) {\n this.buildNetwork(inputSize, outputSize);\n }\n\n for (var i = 0; i < this.iterations; ++i) {\n var probabilities = this.propagate(features);\n this.backpropagation(features, labels, probabilities);\n }\n }\n\n /**\n * @private\n * Propagate the input(training set) and retrives the probabilities of each class.\n * @param {Matrix} X\n * @return {Matrix} probabilities of each class.\n */\n propagate(X) {\n var input = X;\n for (var i = 0; i < this.model.length; ++i) {\n input = this.model[i].forward(input);\n }\n\n // get probabilities\n return input.divColumnVector(input.sum('row'));\n }\n\n /**\n * @private\n * Function that applies the backpropagation algorithm on each layer of the network\n * in order to fit the features and labels.\n * @param {Matrix} features\n * @param {Array} labels\n * @param {Matrix} probabilities - probabilities of each class of the feature set.\n */\n backpropagation(features, labels, probabilities) {\n for (var i = 0; i < probabilities.rows; ++i) {\n probabilities.set(i, this.dicts.inputs[labels[i]], probabilities.get(i, this.dicts.inputs[labels[i]]) - 1);\n }\n\n // remember, the last delta doesn't matter\n var delta = probabilities;\n for (i = this.model.length - 1; i >= 0; --i) {\n var a = i > 0 ? this.model[i - 1].a : features;\n delta = this.model[i].backpropagation(delta, a);\n }\n\n for (i = 0; i < this.model.length; ++i) {\n this.model[i].update();\n }\n }\n\n /**\n * Predict the output given the feature set.\n * @param {Array|Matrix} features\n * @return {Array}\n */\n predict(features) {\n features = mlMatrix.Matrix.checkMatrix(features);\n var outputs = new Array(features.rows);\n var probabilities = this.propagate(features);\n for (var i = 0; i < features.rows; ++i) {\n outputs[i] = this.dicts.outputs[probabilities.maxRowIndex(i)[1]];\n }\n\n return outputs;\n }\n\n /**\n * Export the current model to JSON.\n * @return {object} model\n */\n toJSON() {\n var model = {\n model: 'FNN',\n hiddenLayers: this.hiddenLayers,\n iterations: this.iterations,\n learningRate: this.learningRate,\n regularization: this.regularization,\n activation: this.activation,\n activationParam: this.activationParam,\n dicts: this.dicts,\n layers: new Array(this.model.length)\n };\n\n for (var i = 0; i < this.model.length; ++i) {\n model.layers[i] = this.model[i].toJSON();\n }\n\n return model;\n }\n\n /**\n * Load a Feedforward Neural Network with the current model.\n * @param {object} model\n * @return {FeedForwardNeuralNetworks}\n */\n static load(model) {\n if (model.model !== 'FNN') {\n throw new RangeError('the current model is not a feed forward network');\n }\n\n return new FeedForwardNeuralNetworks(model);\n }\n}\n\n/**\n * @private\n * Method that given an array of labels(predictions), returns two dictionaries, one to transform from labels to\n * numbers and other in the reverse way\n * @param {Array} array\n * @return {object}\n */\nfunction dictOutputs(array) {\n var inputs = {};\n var outputs = {};\n var index = 0;\n for (var i = 0; i < array.length; i += 1) {\n if (inputs[array[i]] === undefined) {\n inputs[array[i]] = index;\n outputs[index] = array[i];\n index++;\n }\n }\n\n return {\n inputs: inputs,\n outputs: outputs\n };\n}\n\nmodule.exports = FeedForwardNeuralNetworks;\n","function NodeSquare(x, y, weights, som) {\n this.x = x;\n this.y = y;\n this.weights = weights;\n this.som = som;\n this.neighbors = {};\n}\n\nNodeSquare.prototype.adjustWeights = function adjustWeights(target, learningRate, influence) {\n for (var i = 0, ii = this.weights.length; i < ii; i++) {\n this.weights[i] += learningRate * influence * (target[i] - this.weights[i]);\n }\n};\n\nNodeSquare.prototype.getDistance = function getDistance(otherNode) {\n return Math.max(Math.abs(this.x - otherNode.x), Math.abs(this.y - otherNode.y));\n};\n\nNodeSquare.prototype.getDistanceTorus = function getDistanceTorus(otherNode) {\n var distX = Math.abs(this.x - otherNode.x),\n distY = Math.abs(this.y - otherNode.y);\n return Math.max(Math.min(distX, this.som.gridDim.x - distX), Math.min(distY, this.som.gridDim.y - distY));\n};\n\nNodeSquare.prototype.getNeighbors = function getNeighbors(xy) {\n if (!this.neighbors[xy]) {\n this.neighbors[xy] = new Array(2);\n\n // left or bottom neighbor\n var v;\n if (this[xy] > 0) {\n v = this[xy] - 1;\n } else if (this.som.torus) {\n v = this.som.gridDim[xy] - 1\n }\n if (typeof v !== 'undefined') {\n var x, y;\n if (xy === 'x') {\n x = v;\n y = this.y;\n } else {\n x = this.x;\n y = v;\n }\n this.neighbors[xy][0] = this.som.nodes[x][y];\n }\n\n // top or right neighbor\n var w;\n if (this[xy] < (this.som.gridDim[xy] - 1)) {\n w = this[xy] + 1;\n } else if (this.som.torus) {\n w = 0;\n }\n if (typeof w !== 'undefined') {\n if (xy === 'x') {\n x = w;\n y = this.y;\n } else {\n x = this.x;\n y = w;\n }\n this.neighbors[xy][1] = this.som.nodes[x][y];\n }\n }\n return this.neighbors[xy];\n};\n\nNodeSquare.prototype.getPos = function getPos(xy, element) {\n var neighbors = this.getNeighbors(xy),\n distance = this.som.distance,\n bestNeighbor,\n direction;\n if(neighbors[0]) {\n if (neighbors[1]) {\n var dist1 = distance(element, neighbors[0].weights),\n dist2 = distance(element, neighbors[1].weights);\n if(dist1 < dist2) {\n bestNeighbor = neighbors[0];\n direction = -1;\n } else {\n bestNeighbor = neighbors[1];\n direction = 1;\n }\n } else {\n bestNeighbor = neighbors[0];\n direction = -1;\n }\n } else {\n bestNeighbor = neighbors[1];\n direction = 1;\n }\n var simA = 1 - distance(element, this.weights),\n simB = 1 - distance(element, bestNeighbor.weights);\n var factor = ((simA - simB) / (2 - simA - simB));\n return 0.5 + 0.5 * factor * direction;\n};\n\nNodeSquare.prototype.getPosition = function getPosition(element) {\n return [\n this.getPos('x', element),\n this.getPos('y', element)\n ];\n};\n\nmodule.exports = NodeSquare;","var NodeSquare = require('./node-square');\n\nfunction NodeHexagonal(x, y, weights, som) {\n\n NodeSquare.call(this, x, y, weights, som);\n\n this.hX = x - Math.floor(y / 2);\n this.z = 0 - this.hX - y;\n\n}\n\nNodeHexagonal.prototype = new NodeSquare;\nNodeHexagonal.prototype.constructor = NodeHexagonal;\n\nNodeHexagonal.prototype.getDistance = function getDistanceHexagonal(otherNode) {\n return Math.max(Math.abs(this.hX - otherNode.hX), Math.abs(this.y - otherNode.y), Math.abs(this.z - otherNode.z));\n};\n\nNodeHexagonal.prototype.getDistanceTorus = function getDistanceTorus(otherNode) {\n var distX = Math.abs(this.hX - otherNode.hX),\n distY = Math.abs(this.y - otherNode.y),\n distZ = Math.abs(this.z - otherNode.z);\n return Math.max(Math.min(distX, this.som.gridDim.x - distX), Math.min(distY, this.som.gridDim.y - distY), Math.min(distZ, this.som.gridDim.z - distZ));\n};\n\nNodeHexagonal.prototype.getPosition = function getPosition() {\n throw new Error('Unimplemented : cannot get position of the points for hexagonal grid');\n};\n\nmodule.exports = NodeHexagonal;","'use strict';\n\nvar NodeSquare = require('./node-square'),\n NodeHexagonal = require('./node-hexagonal');\n\nvar defaultOptions = {\n fields: 3,\n randomizer: Math.random,\n distance: squareEuclidean,\n iterations: 10,\n learningRate: 0.1,\n gridType: 'rect',\n torus: true,\n method: 'random'\n};\n\nfunction SOM(x, y, options, reload) {\n\n this.x = x;\n this.y = y;\n\n options = options || {};\n this.options = {};\n for (var i in defaultOptions) {\n if (options.hasOwnProperty(i)) {\n this.options[i] = options[i];\n } else {\n this.options[i] = defaultOptions[i];\n }\n }\n\n if (typeof this.options.fields === 'number') {\n this.numWeights = this.options.fields;\n } else if (Array.isArray(this.options.fields)) {\n this.numWeights = this.options.fields.length;\n var converters = getConverters(this.options.fields);\n this.extractor = converters.extractor;\n this.creator = converters.creator;\n } else {\n throw new Error('Invalid fields definition');\n }\n\n if (this.options.gridType === 'rect') {\n this.nodeType = NodeSquare;\n this.gridDim = {\n x: x,\n y: y\n };\n } else {\n this.nodeType = NodeHexagonal;\n var hx = this.x - Math.floor(this.y / 2);\n this.gridDim = {\n x: hx,\n y: this.y,\n z: -(0 - hx - this.y)\n };\n }\n\n this.torus = this.options.torus;\n this.distanceMethod = this.torus ? 'getDistanceTorus' : 'getDistance';\n\n this.distance = this.options.distance;\n\n this.maxDistance = getMaxDistance(this.distance, this.numWeights);\n\n if (reload === true) { // For model loading\n this.done = true;\n return;\n }\n if (!(x > 0 && y > 0)) {\n throw new Error('x and y must be positive');\n }\n\n this.times = {\n findBMU: 0,\n adjust: 0\n };\n\n this.randomizer = this.options.randomizer;\n\n this.iterationCount = 0;\n this.iterations = this.options.iterations;\n\n this.startLearningRate = this.learningRate = this.options.learningRate;\n\n this.mapRadius = Math.floor(Math.max(x, y) / 2);\n\n this.algorithmMethod = this.options.method;\n\n this._initNodes();\n\n this.done = false;\n}\n\nSOM.load = function loadModel(model, distance) {\n if (model.name === 'SOM') {\n var x = model.data.length,\n y = model.data[0].length;\n if (distance) {\n model.options.distance = distance;\n } else if (model.options.distance) {\n model.options.distance = eval('(' + model.options.distance + ')');\n }\n var som = new SOM(x, y, model.options, true);\n som.nodes = new Array(x);\n for (var i = 0; i < x; i++) {\n som.nodes[i] = new Array(y);\n for (var j = 0; j < y; j++) {\n som.nodes[i][j] = new som.nodeType(i, j, model.data[i][j], som);\n }\n }\n return som;\n } else {\n throw new Error('expecting a SOM model');\n }\n};\n\nSOM.prototype.export = function exportModel(includeDistance) {\n if (!this.done) {\n throw new Error('model is not ready yet');\n }\n var model = {\n name: 'SOM'\n };\n model.options = {\n fields: this.options.fields,\n gridType: this.options.gridType,\n torus: this.options.torus\n };\n model.data = new Array(this.x);\n for (var i = 0; i < this.x; i++) {\n model.data[i] = new Array(this.y);\n for (var j = 0; j < this.y; j++) {\n model.data[i][j] = this.nodes[i][j].weights;\n }\n }\n if (includeDistance) {\n model.options.distance = this.distance.toString();\n }\n return model;\n};\n\nSOM.prototype._initNodes = function initNodes() {\n var now = Date.now(),\n i, j, k;\n this.nodes = new Array(this.x);\n for (i = 0; i < this.x; i++) {\n this.nodes[i] = new Array(this.y);\n for (j = 0; j < this.y; j++) {\n var weights = new Array(this.numWeights);\n for (k = 0; k < this.numWeights; k++) {\n weights[k] = this.randomizer();\n }\n this.nodes[i][j] = new this.nodeType(i, j, weights, this);\n }\n }\n this.times.initNodes = Date.now() - now;\n};\n\nSOM.prototype.setTraining = function setTraining(trainingSet) {\n if (this.trainingSet) {\n throw new Error('training set has already been set');\n }\n var now = Date.now();\n var convertedSet = trainingSet;\n var i, l = trainingSet.length;\n if (this.extractor) {\n convertedSet = new Array(l);\n for (i = 0; i < l; i++) {\n convertedSet[i] = this.extractor(trainingSet[i]);\n }\n }\n this.numIterations = this.iterations * l;\n\n if (this.algorithmMethod === 'random') {\n this.timeConstant = this.numIterations / Math.log(this.mapRadius);\n } else {\n this.timeConstant = l / Math.log(this.mapRadius);\n }\n this.trainingSet = convertedSet;\n this.times.setTraining = Date.now() - now;\n};\n\nSOM.prototype.trainOne = function trainOne() {\n if (this.done) {\n\n return false;\n\n } else if (this.numIterations-- > 0) {\n\n var neighbourhoodRadius,\n trainingValue,\n trainingSetFactor;\n\n if (this.algorithmMethod === 'random') { // Pick a random value of the training set at each step\n neighbourhoodRadius = this.mapRadius * Math.exp(-this.iterationCount / this.timeConstant);\n trainingValue = getRandomValue(this.trainingSet, this.randomizer);\n this._adjust(trainingValue, neighbourhoodRadius);\n this.learningRate = this.startLearningRate * Math.exp(-this.iterationCount / this.numIterations);\n } else { // Get next input vector\n trainingSetFactor = -Math.floor(this.iterationCount / this.trainingSet.length);\n neighbourhoodRadius = this.mapRadius * Math.exp(trainingSetFactor / this.timeConstant);\n trainingValue = this.trainingSet[this.iterationCount % this.trainingSet.length];\n this._adjust(trainingValue, neighbourhoodRadius);\n if (((this.iterationCount + 1) % this.trainingSet.length) === 0) {\n this.learningRate = this.startLearningRate * Math.exp(trainingSetFactor / Math.floor(this.numIterations / this.trainingSet.length));\n }\n }\n\n this.iterationCount++;\n\n return true;\n\n } else {\n\n this.done = true;\n return false;\n\n }\n};\n\nSOM.prototype._adjust = function adjust(trainingValue, neighbourhoodRadius) {\n var now = Date.now(),\n x, y, dist, influence;\n\n var bmu = this._findBestMatchingUnit(trainingValue);\n\n var now2 = Date.now();\n this.times.findBMU += now2 - now;\n\n var radiusLimit = Math.floor(neighbourhoodRadius);\n var xMin = bmu.x - radiusLimit,\n xMax = bmu.x + radiusLimit,\n yMin = bmu.y - radiusLimit,\n yMax = bmu.y + radiusLimit;\n\n for (x = xMin; x <= xMax; x++) {\n var theX = x;\n if (x < 0) {\n theX += this.x;\n } else if (x >= this.x) {\n theX -= this.x;\n }\n for (y = yMin; y <= yMax; y++) {\n var theY = y;\n if (y < 0) {\n theY += this.y;\n } else if (y >= this.y) {\n theY -= this.y;\n }\n\n dist = bmu[this.distanceMethod](this.nodes[theX][theY]);\n\n if (dist < neighbourhoodRadius) {\n influence = Math.exp(-dist / (2 * neighbourhoodRadius));\n this.nodes[theX][theY].adjustWeights(trainingValue, this.learningRate, influence);\n }\n\n }\n }\n\n this.times.adjust += (Date.now() - now2);\n\n};\n\nSOM.prototype.train = function train(trainingSet) {\n if (!this.done) {\n this.setTraining(trainingSet);\n while (this.trainOne()) {\n }\n }\n};\n\nSOM.prototype.getConvertedNodes = function getConvertedNodes() {\n var result = new Array(this.x);\n for (var i = 0; i < this.x; i++) {\n result[i] = new Array(this.y);\n for (var j = 0; j < this.y; j++) {\n var node = this.nodes[i][j];\n result[i][j] = this.creator ? this.creator(node.weights) : node.weights;\n }\n }\n return result;\n};\n\nSOM.prototype._findBestMatchingUnit = function findBestMatchingUnit(candidate) {\n\n var bmu,\n lowest = Infinity,\n dist;\n\n for (var i = 0; i < this.x; i++) {\n for (var j = 0; j < this.y; j++) {\n dist = this.distance(this.nodes[i][j].weights, candidate);\n if (dist < lowest) {\n lowest = dist;\n bmu = this.nodes[i][j];\n }\n }\n }\n\n return bmu;\n\n};\n\nSOM.prototype.predict = function predict(data, computePosition) {\n if (typeof data === 'boolean') {\n computePosition = data;\n data = null;\n }\n if (!data) {\n data = this.trainingSet;\n }\n if (Array.isArray(data) && (Array.isArray(data[0]) || (typeof data[0] === 'object'))) { // predict a dataset\n var self = this;\n return data.map(function (element) {\n return self._predict(element, computePosition);\n });\n } else { // predict a single element\n return this._predict(data, computePosition);\n }\n};\n\nSOM.prototype._predict = function _predict(element, computePosition) {\n if (!Array.isArray(element)) {\n element = this.extractor(element);\n }\n var bmu = this._findBestMatchingUnit(element);\n var result = [bmu.x, bmu.y];\n if (computePosition) {\n result[2] = bmu.getPosition(element);\n }\n return result;\n};\n\n// As seen in http://www.scholarpedia.org/article/Kohonen_network\nSOM.prototype.getQuantizationError = function getQuantizationError() {\n var fit = this.getFit(),\n l = fit.length,\n sum = 0;\n for (var i = 0; i < l; i++) {\n sum += fit[i];\n }\n return sum / l;\n};\n\nSOM.prototype.getFit = function getFit(dataset) {\n if (!dataset) {\n dataset = this.trainingSet;\n }\n var l = dataset.length,\n bmu,\n result = new Array(l);\n for (var i = 0; i < l; i++) {\n bmu = this._findBestMatchingUnit(dataset[i]);\n result[i] = Math.sqrt(this.distance(dataset[i], bmu.weights));\n }\n return result;\n};\n\nfunction getConverters(fields) {\n var l = fields.length,\n normalizers = new Array(l),\n denormalizers = new Array(l);\n for (var i = 0; i < l; i++) {\n normalizers[i] = getNormalizer(fields[i].range);\n denormalizers[i] = getDenormalizer(fields[i].range);\n }\n return {\n extractor: function extractor(value) {\n var result = new Array(l);\n for (var i = 0; i < l; i++) {\n result[i] = normalizers[i](value[fields[i].name]);\n }\n return result;\n },\n creator: function creator(value) {\n var result = {};\n for (var i = 0; i < l; i++) {\n result[fields[i].name] = denormalizers[i](value[i]);\n }\n return result;\n }\n };\n}\n\nfunction getNormalizer(minMax) {\n return function normalizer(value) {\n return (value - minMax[0]) / (minMax[1] - minMax[0]);\n };\n}\n\nfunction getDenormalizer(minMax) {\n return function denormalizer(value) {\n return (minMax[0] + value * (minMax[1] - minMax[0]));\n };\n}\n\nfunction squareEuclidean(a, b) {\n var d = 0;\n for (var i = 0, ii = a.length; i < ii; i++) {\n d += (a[i] - b[i]) * (a[i] - b[i]);\n }\n return d;\n}\n\nfunction getRandomValue(arr, randomizer) {\n return arr[Math.floor(randomizer() * arr.length)];\n}\n\nfunction getMaxDistance(distance, numWeights) {\n var zero = new Array(numWeights),\n one = new Array(numWeights);\n for (var i = 0; i < numWeights; i++) {\n zero[i] = 0;\n one[i] = 1;\n }\n return distance(zero, one);\n}\n\nmodule.exports = SOM;","export default function maybeToPrecision(value, digits) {\n if (value < 0) {\n value = 0 - value;\n if (typeof digits === 'number') {\n return `- ${value.toPrecision(digits)}`;\n } else {\n return `- ${value.toString()}`;\n }\n } else {\n if (typeof digits === 'number') {\n return value.toPrecision(digits);\n } else {\n return value.toString();\n }\n }\n}\n","export default function checkArraySize(x, y) {\n if (!Array.isArray(x) || !Array.isArray(y)) {\n throw new TypeError('x and y must be arrays');\n }\n if (x.length !== y.length) {\n throw new RangeError('x and y arrays must have the same length');\n }\n}\n","export { default as maybeToPrecision } from './maybeToPrecision';\nexport { default as checkArrayLength } from './checkArrayLength';\n\nexport default class BaseRegression {\n constructor() {\n if (new.target === BaseRegression) {\n throw new Error('BaseRegression must be subclassed');\n }\n }\n\n predict(x) {\n if (typeof x === 'number') {\n return this._predict(x);\n } else if (Array.isArray(x)) {\n const y = [];\n for (let i = 0; i < x.length; i++) {\n y.push(this._predict(x[i]));\n }\n return y;\n } else {\n throw new TypeError('x must be a number or array');\n }\n }\n\n _predict() {\n throw new Error('_predict must be implemented');\n }\n\n train() {\n // Do nothing for this package\n }\n\n toString() {\n return '';\n }\n\n toLaTeX() {\n return '';\n }\n\n /**\n * Return the correlation coefficient of determination (r) and chi-square.\n * @param {Array} x\n * @param {Array} y\n * @return {object}\n */\n score(x, y) {\n if (!Array.isArray(x) || !Array.isArray(y) || x.length !== y.length) {\n throw new Error('x and y must be arrays of the same length');\n }\n\n const n = x.length;\n const y2 = new Array(n);\n for (let i = 0; i < n; i++) {\n y2[i] = this._predict(x[i]);\n }\n\n let xSum = 0;\n let ySum = 0;\n let chi2 = 0;\n let rmsd = 0;\n let xSquared = 0;\n let ySquared = 0;\n let xY = 0;\n for (let i = 0; i < n; i++) {\n xSum += y2[i];\n ySum += y[i];\n xSquared += y2[i] * y2[i];\n ySquared += y[i] * y[i];\n xY += y2[i] * y[i];\n if (y[i] !== 0) {\n chi2 += ((y[i] - y2[i]) * (y[i] - y2[i])) / y[i];\n }\n rmsd += (y[i] - y2[i]) * (y[i] - y2[i]);\n }\n\n const r =\n (n * xY - xSum * ySum) /\n Math.sqrt((n * xSquared - xSum * xSum) * (n * ySquared - ySum * ySum));\n\n return {\n r: r,\n r2: r * r,\n chi2: chi2,\n rmsd: Math.sqrt(rmsd / n)\n };\n }\n}\n","import BaseRegression, {\n checkArrayLength,\n maybeToPrecision\n} from 'ml-regression-base';\nimport { Matrix, MatrixTransposeView, solve } from 'ml-matrix';\n\nexport default class PolynomialRegression extends BaseRegression {\n constructor(x, y, degree) {\n super();\n if (x === true) {\n this.degree = y.degree;\n this.powers = y.powers;\n this.coefficients = y.coefficients;\n } else {\n checkArrayLength(x, y);\n regress(this, x, y, degree);\n }\n }\n\n _predict(x) {\n let y = 0;\n for (let k = 0; k < this.powers.length; k++) {\n y += this.coefficients[k] * Math.pow(x, this.powers[k]);\n }\n return y;\n }\n\n toJSON() {\n return {\n name: 'polynomialRegression',\n degree: this.degree,\n powers: this.powers,\n coefficients: this.coefficients\n };\n }\n\n toString(precision) {\n return this._toFormula(precision, false);\n }\n\n toLaTeX(precision) {\n return this._toFormula(precision, true);\n }\n\n _toFormula(precision, isLaTeX) {\n let sup = '^';\n let closeSup = '';\n let times = ' * ';\n if (isLaTeX) {\n sup = '^{';\n closeSup = '}';\n times = '';\n }\n\n let fn = '';\n let str = '';\n for (let k = 0; k < this.coefficients.length; k++) {\n str = '';\n if (this.coefficients[k] !== 0) {\n if (this.powers[k] === 0) {\n str = maybeToPrecision(this.coefficients[k], precision);\n } else {\n if (this.powers[k] === 1) {\n str =\n `${maybeToPrecision(this.coefficients[k], precision) + times}x`;\n } else {\n str =\n `${maybeToPrecision(this.coefficients[k], precision) +\n times\n }x${\n sup\n }${this.powers[k]\n }${closeSup}`;\n }\n }\n\n if (this.coefficients[k] > 0 && k !== this.coefficients.length - 1) {\n str = ` + ${str}`;\n } else if (k !== this.coefficients.length - 1) {\n str = ` ${str}`;\n }\n }\n fn = str + fn;\n }\n if (fn.charAt(0) === '+') {\n fn = fn.slice(1);\n }\n\n return `f(x) = ${fn}`;\n }\n\n static load(json) {\n if (json.name !== 'polynomialRegression') {\n throw new TypeError('not a polynomial regression model');\n }\n return new PolynomialRegression(true, json);\n }\n}\n\nfunction regress(pr, x, y, degree) {\n const n = x.length;\n let powers;\n if (Array.isArray(degree)) {\n powers = degree;\n degree = powers.length;\n } else {\n degree++;\n powers = new Array(degree);\n for (let k = 0; k < degree; k++) {\n powers[k] = k;\n }\n }\n const F = new Matrix(n, degree);\n const Y = new Matrix([y]);\n for (let k = 0; k < degree; k++) {\n for (let i = 0; i < n; i++) {\n if (powers[k] === 0) {\n F.set(i, k, 1);\n } else {\n F.set(i, k, Math.pow(x[i], powers[k]));\n }\n }\n }\n\n const FT = new MatrixTransposeView(F);\n const A = FT.mmul(F);\n const B = FT.mmul(new MatrixTransposeView(Y));\n\n pr.degree = degree - 1;\n pr.powers = powers;\n pr.coefficients = solve(A, B).to1DArray();\n}\n","import BaseRegression, {\n checkArrayLength,\n maybeToPrecision\n} from 'ml-regression-base';\n\nexport default class SimpleLinearRegression extends BaseRegression {\n constructor(x, y) {\n super();\n if (x === true) {\n this.slope = y.slope;\n this.intercept = y.intercept;\n this.coefficients = [y.intercept, y.slope];\n } else {\n checkArrayLength(x, y);\n regress(this, x, y);\n }\n }\n\n toJSON() {\n return {\n name: 'simpleLinearRegression',\n slope: this.slope,\n intercept: this.intercept\n };\n }\n\n _predict(x) {\n return this.slope * x + this.intercept;\n }\n\n computeX(y) {\n return (y - this.intercept) / this.slope;\n }\n\n toString(precision) {\n let result = 'f(x) = ';\n if (this.slope !== 0) {\n const xFactor = maybeToPrecision(this.slope, precision);\n result += `${xFactor === '1' ? '' : `${xFactor} * `}x`;\n if (this.intercept !== 0) {\n const absIntercept = Math.abs(this.intercept);\n const operator = absIntercept === this.intercept ? '+' : '-';\n result += ` ${operator} ${maybeToPrecision(absIntercept, precision)}`;\n }\n } else {\n result += maybeToPrecision(this.intercept, precision);\n }\n return result;\n }\n\n toLaTeX(precision) {\n return this.toString(precision);\n }\n\n static load(json) {\n if (json.name !== 'simpleLinearRegression') {\n throw new TypeError('not a SLR model');\n }\n return new SimpleLinearRegression(true, json);\n }\n}\n\nfunction regress(slr, x, y) {\n const n = x.length;\n let xSum = 0;\n let ySum = 0;\n\n let xSquared = 0;\n let xY = 0;\n\n for (let i = 0; i < n; i++) {\n xSum += x[i];\n ySum += y[i];\n xSquared += x[i] * x[i];\n xY += x[i] * y[i];\n }\n\n const numerator = n * xY - xSum * ySum;\n slr.slope = numerator / (n * xSquared - xSum * xSum);\n slr.intercept = (1 / n) * ySum - slr.slope * (1 / n) * xSum;\n slr.coefficients = [slr.intercept, slr.slope];\n}\n","import BaseRegression, {\n checkArrayLength,\n maybeToPrecision\n} from 'ml-regression-base';\nimport SimpleLinearRegression from 'ml-regression-simple-linear';\n\nexport default class ExponentialRegression extends BaseRegression {\n constructor(x, y) {\n super();\n if (x === true) {\n this.A = y.A;\n this.B = y.B;\n } else {\n checkArrayLength(x, y);\n regress(this, x, y);\n }\n }\n\n _predict(input) {\n return this.B * Math.exp(input * this.A);\n }\n\n toJSON() {\n return {\n name: 'exponentialRegression',\n A: this.A,\n B: this.B\n };\n }\n\n toString(precision) {\n return (\n `f(x) = ${\n maybeToPrecision(this.B, precision)\n } * e^(${\n maybeToPrecision(this.A, precision)\n } * x)`\n );\n }\n\n toLaTeX(precision) {\n if (this.A >= 0) {\n return (\n `f(x) = ${\n maybeToPrecision(this.B, precision)\n }e^{${\n maybeToPrecision(this.A, precision)\n }x}`\n );\n } else {\n return (\n `f(x) = \\\\frac{${\n maybeToPrecision(this.B, precision)\n }}{e^{${\n maybeToPrecision(-this.A, precision)\n }x}}`\n );\n }\n }\n\n static load(json) {\n if (json.name !== 'exponentialRegression') {\n throw new TypeError('not a exponential regression model');\n }\n return new ExponentialRegression(true, json);\n }\n}\n\nfunction regress(er, x, y) {\n const n = x.length;\n const yl = new Array(n);\n for (let i = 0; i < n; i++) {\n yl[i] = Math.log(y[i]);\n }\n\n const linear = new SimpleLinearRegression(x, yl);\n er.A = linear.slope;\n er.B = Math.exp(linear.intercept);\n}\n","import BaseRegression, {\n checkArrayLength,\n maybeToPrecision\n} from 'ml-regression-base';\nimport SimpleLinearRegression from 'ml-regression-simple-linear';\n\nexport default class PowerRegression extends BaseRegression {\n constructor(x, y) {\n super();\n if (x === true) {\n // reloading model\n this.A = y.A;\n this.B = y.B;\n } else {\n checkArrayLength(x, y);\n regress(this, x, y);\n }\n }\n\n _predict(newInputs) {\n return this.A * Math.pow(newInputs, this.B);\n }\n\n toJSON() {\n return {\n name: 'powerRegression',\n A: this.A,\n B: this.B\n };\n }\n\n toString(precision) {\n return `f(x) = ${maybeToPrecision(\n this.A,\n precision\n )} * x^${maybeToPrecision(this.B, precision)}`;\n }\n\n toLaTeX(precision) {\n let latex = '';\n if (this.B >= 0) {\n latex = `f(x) = ${maybeToPrecision(\n this.A,\n precision\n )}x^{${maybeToPrecision(this.B, precision)}}`;\n } else {\n latex = `f(x) = \\\\frac{${maybeToPrecision(\n this.A,\n precision\n )}}{x^{${maybeToPrecision(-this.B, precision)}}}`;\n }\n latex = latex.replace(/e([+-]?[0-9]+)/g, 'e^{$1}');\n return latex;\n }\n\n static load(json) {\n if (json.name !== 'powerRegression') {\n throw new TypeError('not a power regression model');\n }\n return new PowerRegression(true, json);\n }\n}\n\nfunction regress(pr, x, y) {\n const n = x.length;\n const xl = new Array(n);\n const yl = new Array(n);\n for (let i = 0; i < n; i++) {\n xl[i] = Math.log(x[i]);\n yl[i] = Math.log(y[i]);\n }\n\n const linear = new SimpleLinearRegression(xl, yl);\n pr.A = Math.exp(linear.intercept);\n pr.B = linear.slope;\n}\n","import Matrix, { SVD, pseudoInverse } from 'ml-matrix';\n\nexport default class MultivariateLinearRegression {\n constructor(x, y, options = {}) {\n const { intercept = true, statistics = true } = options;\n this.statistics = statistics;\n if (x === true) {\n this.weights = y.weights;\n this.inputs = y.inputs;\n this.outputs = y.outputs;\n this.intercept = y.intercept;\n } else {\n x = new Matrix(x);\n y = new Matrix(y);\n if (intercept) {\n x.addColumn(new Array(x.rows).fill(1));\n }\n let xt = x.transpose();\n const xx = xt\n .mmul(x);\n const xy = xt\n .mmul(y);\n const invxx = new SVD(xx)\n .inverse();\n const beta = xy\n .transpose()\n .mmul(invxx)\n .transpose();\n this.weights = beta.to2DArray();\n this.inputs = x.columns;\n this.outputs = y.columns;\n if (intercept) this.inputs--;\n this.intercept = intercept;\n if (statistics) {\n /*\n * Let's add some basic statistics about the beta's to be able to interpret them.\n * source: http://dept.stat.lsa.umich.edu/~kshedden/Courses/Stat401/Notes/401-multreg.pdf\n * validated against Excel Regression AddIn\n * test: \"datamining statistics test\"\n */\n const fittedValues = x.mmul(beta);\n const residuals = y.clone().addM(fittedValues.neg());\n const variance =\n residuals\n .to2DArray()\n .map((ri) => Math.pow(ri[0], 2))\n .reduce((a, b) => a + b) /\n (y.rows - x.columns);\n this.stdError = Math.sqrt(variance);\n this.stdErrorMatrix = pseudoInverse(xx).mul(variance);\n this.stdErrors = this.stdErrorMatrix\n .diagonal()\n .map((d) => Math.sqrt(d));\n this.tStats = this.weights.map((d, i) =>\n (this.stdErrors[i] === 0 ? 0 : d[0] / this.stdErrors[i])\n );\n }\n }\n }\n\n predict(x) {\n if (Array.isArray(x)) {\n if (typeof x[0] === 'number') {\n return this._predict(x);\n } else if (Array.isArray(x[0])) {\n const y = new Array(x.length);\n for (let i = 0; i < x.length; i++) {\n y[i] = this._predict(x[i]);\n }\n return y;\n }\n } else if (Matrix.isMatrix(x)) {\n const y = new Matrix(x.rows, this.outputs);\n for (let i = 0; i < x.rows; i++) {\n y.setRow(i, this._predict(x.getRow(i)));\n }\n return y;\n }\n throw new TypeError('x must be a matrix or array of numbers');\n }\n\n _predict(x) {\n const result = new Array(this.outputs);\n if (this.intercept) {\n for (let i = 0; i < this.outputs; i++) {\n result[i] = this.weights[this.inputs][i];\n }\n } else {\n result.fill(0);\n }\n for (let i = 0; i < this.inputs; i++) {\n for (let j = 0; j < this.outputs; j++) {\n result[j] += this.weights[i][j] * x[i];\n }\n }\n return result;\n }\n\n score() {\n throw new Error('score method is not implemented yet');\n }\n\n toJSON() {\n return {\n name: 'multivariateLinearRegression',\n weights: this.weights,\n inputs: this.inputs,\n outputs: this.outputs,\n intercept: this.intercept,\n summary: this.statistics\n ? {\n regressionStatistics: {\n standardError: this.stdError,\n observations: this.outputs\n },\n variables: this.weights.map((d, i) => {\n return {\n label:\n i === this.weights.length - 1\n ? 'Intercept'\n : `X Variable ${i + 1}`,\n coefficients: d,\n standardError: this.stdErrors[i],\n tStat: this.tStats[i]\n };\n })\n }\n : undefined\n };\n }\n\n static load(model) {\n if (model.name !== 'multivariateLinearRegression') {\n throw new Error('not a MLR model');\n }\n return new MultivariateLinearRegression(true, model);\n }\n}\n","'use strict';\n\nconst { squaredEuclidean } = require('ml-distance-euclidean');\n\nconst defaultOptions = {\n sigma: 1\n};\n\nclass GaussianKernel {\n constructor(options) {\n options = Object.assign({}, defaultOptions, options);\n this.sigma = options.sigma;\n this.divisor = 2 * options.sigma * options.sigma;\n }\n compute(x, y) {\n const distance = squaredEuclidean(x, y);\n return Math.exp(-distance / this.divisor);\n }\n}\n\nmodule.exports = GaussianKernel;\n","'use strict';\n\nconst defaultOptions = {\n degree: 1,\n constant: 1,\n scale: 1\n};\n\nclass PolynomialKernel {\n constructor(options) {\n options = Object.assign({}, defaultOptions, options);\n\n this.degree = options.degree;\n this.constant = options.constant;\n this.scale = options.scale;\n }\n\n compute(x, y) {\n var sum = 0;\n for (var i = 0; i < x.length; i++) {\n sum += x[i] * y[i];\n }\n return Math.pow(this.scale * sum + this.constant, this.degree);\n }\n}\n\nmodule.exports = PolynomialKernel;\n","'use strict';\n\nconst defaultOptions = {\n alpha: 0.01,\n constant: -Math.E\n};\n\nclass SigmoidKernel {\n constructor(options) {\n options = Object.assign({}, defaultOptions, options);\n this.alpha = options.alpha;\n this.constant = options.constant;\n }\n\n compute(x, y) {\n var sum = 0;\n for (var i = 0; i < x.length; i++) {\n sum += x[i] * y[i];\n }\n return Math.tanh(this.alpha * sum + this.constant);\n }\n}\n\nmodule.exports = SigmoidKernel;\n","'use strict';\n\nconst defaultOptions = {\n sigma: 1,\n degree: 1\n};\n\nclass ANOVAKernel {\n constructor(options) {\n options = Object.assign({}, defaultOptions, options);\n this.sigma = options.sigma;\n this.degree = options.degree;\n }\n\n compute(x, y) {\n var sum = 0;\n var len = Math.min(x.length, y.length);\n for (var i = 1; i <= len; ++i) {\n sum += Math.pow(\n Math.exp(\n -this.sigma *\n Math.pow(Math.pow(x[i - 1], i) - Math.pow(y[i - 1], i), 2)\n ),\n this.degree\n );\n }\n return sum;\n }\n}\n\nmodule.exports = ANOVAKernel;\n","'use strict';\n\nconst { squaredEuclidean } = require('ml-distance-euclidean');\n\nconst defaultOptions = {\n sigma: 1\n};\n\nclass CauchyKernel {\n constructor(options) {\n options = Object.assign({}, defaultOptions, options);\n this.sigma = options.sigma;\n }\n\n compute(x, y) {\n return 1 / (1 + squaredEuclidean(x, y) / (this.sigma * this.sigma));\n }\n}\n\nmodule.exports = CauchyKernel;\n","'use strict';\n\nconst { euclidean } = require('ml-distance-euclidean');\n\nconst defaultOptions = {\n sigma: 1\n};\n\nclass ExponentialKernel {\n constructor(options) {\n options = Object.assign({}, defaultOptions, options);\n this.sigma = options.sigma;\n this.divisor = 2 * options.sigma * options.sigma;\n }\n\n compute(x, y) {\n const distance = euclidean(x, y);\n return Math.exp(-distance / this.divisor);\n }\n}\n\nmodule.exports = ExponentialKernel;\n","'use strict';\n\nclass HistogramIntersectionKernel {\n compute(x, y) {\n var min = Math.min(x.length, y.length);\n var sum = 0;\n for (var i = 0; i < min; ++i) {\n sum += Math.min(x[i], y[i]);\n }\n\n return sum;\n }\n}\n\nmodule.exports = HistogramIntersectionKernel;\n","'use strict';\n\nconst { euclidean } = require('ml-distance-euclidean');\n\nconst defaultOptions = {\n sigma: 1\n};\n\nclass LaplacianKernel {\n constructor(options) {\n options = Object.assign({}, defaultOptions, options);\n this.sigma = options.sigma;\n }\n\n compute(x, y) {\n const distance = euclidean(x, y);\n return Math.exp(-distance / this.sigma);\n }\n}\n\nmodule.exports = LaplacianKernel;\n","'use strict';\n\nconst { squaredEuclidean } = require('ml-distance-euclidean');\n\nconst defaultOptions = {\n constant: 1\n};\n\nclass MultiquadraticKernel {\n constructor(options) {\n options = Object.assign({}, defaultOptions, options);\n this.constant = options.constant;\n }\n\n compute(x, y) {\n return Math.sqrt(squaredEuclidean(x, y) + this.constant * this.constant);\n }\n}\n\nmodule.exports = MultiquadraticKernel;\n","'use strict';\n\nconst { squaredEuclidean } = require('ml-distance-euclidean');\n\nconst defaultOptions = {\n constant: 1\n};\n\nclass RationalQuadraticKernel {\n constructor(options) {\n options = Object.assign({}, defaultOptions, options);\n this.constant = options.constant;\n }\n\n compute(x, y) {\n const distance = squaredEuclidean(x, y);\n return 1 - distance / (distance + this.constant);\n }\n}\n\nmodule.exports = RationalQuadraticKernel;\n","'use strict';\n\nconst { Matrix, MatrixTransposeView } = require('ml-matrix');\nconst GaussianKernel = require('ml-kernel-gaussian');\nconst PolynomialKernel = require('ml-kernel-polynomial');\nconst SigmoidKernel = require('ml-kernel-sigmoid');\n\nconst ANOVAKernel = require('./kernels/anova-kernel');\nconst CauchyKernel = require('./kernels/cauchy-kernel');\nconst ExponentialKernel = require('./kernels/exponential-kernel');\nconst HistogramKernel = require('./kernels/histogram-intersection-kernel');\nconst LaplacianKernel = require('./kernels/laplacian-kernel');\nconst MultiquadraticKernel = require('./kernels/multiquadratic-kernel');\nconst RationalKernel = require('./kernels/rational-quadratic-kernel');\n\nconst kernelType = {\n gaussian: GaussianKernel,\n rbf: GaussianKernel,\n polynomial: PolynomialKernel,\n poly: PolynomialKernel,\n anova: ANOVAKernel,\n cauchy: CauchyKernel,\n exponential: ExponentialKernel,\n histogram: HistogramKernel,\n min: HistogramKernel,\n laplacian: LaplacianKernel,\n multiquadratic: MultiquadraticKernel,\n rational: RationalKernel,\n sigmoid: SigmoidKernel,\n mlp: SigmoidKernel\n};\n\nclass Kernel {\n constructor(type, options) {\n this.kernelType = type;\n if (type === 'linear') return;\n\n if (typeof type === 'string') {\n type = type.toLowerCase();\n\n var KernelConstructor = kernelType[type];\n if (KernelConstructor) {\n this.kernelFunction = new KernelConstructor(options);\n } else {\n throw new Error(`unsupported kernel type: ${type}`);\n }\n } else if (typeof type === 'object' && typeof type.compute === 'function') {\n this.kernelFunction = type;\n } else {\n throw new TypeError(\n 'first argument must be a valid kernel type or instance'\n );\n }\n }\n\n compute(inputs, landmarks) {\n inputs = Matrix.checkMatrix(inputs);\n if (landmarks === undefined) {\n landmarks = inputs;\n } else {\n landmarks = Matrix.checkMatrix(landmarks);\n }\n if (this.kernelType === 'linear') {\n return inputs.mmul(new MatrixTransposeView(landmarks));\n }\n\n const kernelMatrix = new Matrix(inputs.rows, landmarks.rows);\n if (inputs === landmarks) {\n // fast path, matrix is symmetric\n for (let i = 0; i < inputs.rows; i++) {\n for (let j = i; j < inputs.rows; j++) {\n const value = this.kernelFunction.compute(\n inputs.getRow(i),\n inputs.getRow(j)\n );\n kernelMatrix.set(i, j, value);\n kernelMatrix.set(j, i, value);\n }\n }\n } else {\n for (let i = 0; i < inputs.rows; i++) {\n for (let j = 0; j < landmarks.rows; j++) {\n kernelMatrix.set(\n i,\n j,\n this.kernelFunction.compute(inputs.getRow(i), landmarks.getRow(j))\n );\n }\n }\n }\n return kernelMatrix;\n }\n}\n\nmodule.exports = Kernel;\n","import BaseRegression, {\n checkArrayLength,\n maybeToPrecision\n} from 'ml-regression-base';\nimport median from 'ml-array-median';\n\nexport default class TheilSenRegression extends BaseRegression {\n /**\n * Theil–Sen estimator\n * https://en.wikipedia.org/wiki/Theil%E2%80%93Sen_estimator\n * @param {Array|boolean} x\n * @param {Array|object} y\n * @constructor\n */\n constructor(x, y) {\n super();\n if (x === true) {\n // loads the model\n this.slope = y.slope;\n this.intercept = y.intercept;\n this.coefficients = y.coefficients;\n } else {\n // creates the model\n checkArrayLength(x, y);\n theilSen(this, x, y);\n }\n }\n\n toJSON() {\n return {\n name: 'TheilSenRegression',\n slope: this.slope,\n intercept: this.intercept\n };\n }\n\n _predict(input) {\n return this.slope * input + this.intercept;\n }\n\n computeX(input) {\n return (input - this.intercept) / this.slope;\n }\n\n toString(precision) {\n var result = 'f(x) = ';\n if (this.slope) {\n var xFactor = maybeToPrecision(this.slope, precision);\n result += `${Math.abs(xFactor - 1) < 1e-5 ? '' : `${xFactor} * `}x`;\n if (this.intercept) {\n var absIntercept = Math.abs(this.intercept);\n var operator = absIntercept === this.intercept ? '+' : '-';\n result +=\n ` ${operator} ${maybeToPrecision(absIntercept, precision)}`;\n }\n } else {\n result += maybeToPrecision(this.intercept, precision);\n }\n return result;\n }\n\n toLaTeX(precision) {\n return this.toString(precision);\n }\n\n static load(json) {\n if (json.name !== 'TheilSenRegression') {\n throw new TypeError('not a Theil-Sen model');\n }\n return new TheilSenRegression(true, json);\n }\n}\n\nfunction theilSen(regression, x, y) {\n let len = x.length;\n let slopes = new Array(len * len);\n let count = 0;\n for (let i = 0; i < len; ++i) {\n for (let j = i + 1; j < len; ++j) {\n if (x[i] !== x[j]) {\n slopes[count++] = (y[j] - y[i]) / (x[j] - x[i]);\n }\n }\n }\n slopes.length = count;\n let medianSlope = median(slopes);\n\n let cuts = new Array(len);\n for (let i = 0; i < len; ++i) {\n cuts[i] = y[i] - medianSlope * x[i];\n }\n\n regression.slope = medianSlope;\n regression.intercept = median(cuts);\n regression.coefficients = [regression.intercept, regression.slope];\n}\n","import BaseRegression, {\n checkArrayLength,\n maybeToPrecision\n} from 'ml-regression-base';\nimport { solve } from 'ml-matrix';\n\n/**\n * @class RobustPolynomialRegression\n * @param {Array} x\n * @param {Array} y\n * @param {number} degree - polynomial degree\n */\nexport default class RobustPolynomialRegression extends BaseRegression {\n constructor(x, y, degree) {\n super();\n if (x === true) {\n this.degree = y.degree;\n this.powers = y.powers;\n this.coefficients = y.coefficients;\n } else {\n checkArrayLength(x, y);\n robustPolynomial(this, x, y, degree);\n }\n }\n\n toJSON() {\n return {\n name: 'robustPolynomialRegression',\n degree: this.degree,\n powers: this.powers,\n coefficients: this.coefficients\n };\n }\n\n _predict(x) {\n return predict(x, this.powers, this.coefficients);\n }\n\n /**\n * Display the formula\n * @param {number} precision - precision for the numbers\n * @return {string}\n */\n toString(precision) {\n return this._toFormula(precision, false);\n }\n\n /**\n * Display the formula in LaTeX format\n * @param {number} precision - precision for the numbers\n * @return {string}\n */\n toLaTeX(precision) {\n return this._toFormula(precision, true);\n }\n\n _toFormula(precision, isLaTeX) {\n let sup = '^';\n let closeSup = '';\n let times = ' * ';\n if (isLaTeX) {\n sup = '^{';\n closeSup = '}';\n times = '';\n }\n\n let fn = '';\n let str = '';\n for (let k = 0; k < this.coefficients.length; k++) {\n str = '';\n if (this.coefficients[k] !== 0) {\n if (this.powers[k] === 0) {\n str = maybeToPrecision(this.coefficients[k], precision);\n } else {\n if (this.powers[k] === 1) {\n str = `${maybeToPrecision(this.coefficients[k], precision) +\n times}x`;\n } else {\n str = `${maybeToPrecision(this.coefficients[k], precision) +\n times}x${sup}${this.powers[k]}${closeSup}`;\n }\n }\n\n if (this.coefficients[k] > 0 && k !== this.coefficients.length - 1) {\n str = ` + ${str}`;\n } else if (k !== this.coefficients.length - 1) {\n str = ` ${str}`;\n }\n }\n fn = str + fn;\n }\n if (fn.charAt(0) === '+') {\n fn = fn.slice(1);\n }\n\n return `f(x) = ${fn}`;\n }\n\n static load(json) {\n if (json.name !== 'robustPolynomialRegression') {\n throw new TypeError('not a RobustPolynomialRegression model');\n }\n return new RobustPolynomialRegression(true, json);\n }\n}\n\nfunction robustPolynomial(regression, x, y, degree) {\n let powers = Array(degree)\n .fill(0)\n .map((_, index) => index);\n\n const tuples = getRandomTuples(x, y, degree);\n\n var min;\n for (var i = 0; i < tuples.length; i++) {\n var tuple = tuples[i];\n var coefficients = calcCoefficients(tuple, powers);\n\n var residuals = x.slice();\n for (var j = 0; j < x.length; j++) {\n residuals[j] = y[j] - predict(x[j], powers, coefficients);\n residuals[j] = {\n residual: residuals[j] * residuals[j],\n coefficients\n };\n }\n\n var median = residualsMedian(residuals);\n if (!min || median.residual < min.residual) {\n min = median;\n }\n }\n\n regression.degree = degree;\n regression.powers = powers;\n regression.coefficients = min.coefficients;\n}\n\n/**\n * @ignore\n * @param {Array} x\n * @param {Array} y\n * @param {number} degree\n * @return {Array<{x:number,y:number}>}\n */\nfunction getRandomTuples(x, y, degree) {\n var len = Math.floor(x.length / degree);\n var tuples = new Array(len);\n\n for (var i = 0; i < x.length; i++) {\n var pos = Math.floor(Math.random() * len);\n\n var counter = 0;\n while (counter < x.length) {\n if (!tuples[pos]) {\n tuples[pos] = [\n {\n x: x[i],\n y: y[i]\n }\n ];\n break;\n } else if (tuples[pos].length < degree) {\n tuples[pos].push({\n x: x[i],\n y: y[i]\n });\n break;\n } else {\n counter++;\n pos = (pos + 1) % len;\n }\n }\n\n if (counter === x.length) {\n return tuples;\n }\n }\n return tuples;\n}\n\n/**\n * @ignore\n * @param {{x:number,y:number}} tuple\n * @param {Array} powers\n * @return {Array}\n */\nfunction calcCoefficients(tuple, powers) {\n var X = tuple.slice();\n var Y = tuple.slice();\n for (var i = 0; i < X.length; i++) {\n Y[i] = [tuple[i].y];\n X[i] = new Array(powers.length);\n for (var j = 0; j < powers.length; j++) {\n X[i][j] = Math.pow(tuple[i].x, powers[j]);\n }\n }\n\n return solve(X, Y).to1DArray();\n}\n\nfunction predict(x, powers, coefficients) {\n let y = 0;\n for (let k = 0; k < powers.length; k++) {\n y += coefficients[k] * Math.pow(x, powers[k]);\n }\n return y;\n}\n\nfunction residualsMedian(residuals) {\n residuals.sort((a, b) => a.residual - b.residual);\n\n var l = residuals.length;\n var half = Math.floor(l / 2);\n return l % 2 === 0 ? residuals[half - 1] : residuals[half];\n}\n","/**\n * Calculate current error\n * @ignore\n * @param {{x:Array, y:Array}} data - Array of points to fit in the format [x1, x2, ... ], [y1, y2, ... ]\n * @param {Array} parameters - Array of current parameter values\n * @param {function} parameterizedFunction - The parameters and returns a function with the independent variable as a parameter\n * @return {number}\n */\nexport default function errorCalculation(\n data,\n parameters,\n parameterizedFunction\n) {\n var error = 0;\n const func = parameterizedFunction(parameters);\n\n for (var i = 0; i < data.x.length; i++) {\n error += Math.abs(data.y[i] - func(data.x[i]));\n }\n\n return error;\n}\n","import { inverse, Matrix } from 'ml-matrix';\n\n/**\n * Difference of the matrix function over the parameters\n * @ignore\n * @param {{x:Array, y:Array}} data - Array of points to fit in the format [x1, x2, ... ], [y1, y2, ... ]\n * @param {Array} evaluatedData - Array of previous evaluated function values\n * @param {Array} params - Array of previous parameter values\n * @param {number} gradientDifference - Adjustment for decrease the damping parameter\n * @param {function} paramFunction - The parameters and returns a function with the independent variable as a parameter\n * @return {Matrix}\n */\nfunction gradientFunction(\n data,\n evaluatedData,\n params,\n gradientDifference,\n paramFunction\n) {\n const n = params.length;\n const m = data.x.length;\n\n var ans = new Array(n);\n\n for (var param = 0; param < n; param++) {\n ans[param] = new Array(m);\n var auxParams = params.concat();\n auxParams[param] += gradientDifference;\n var funcParam = paramFunction(auxParams);\n\n for (var point = 0; point < m; point++) {\n ans[param][point] = evaluatedData[point] - funcParam(data.x[point]);\n }\n }\n return new Matrix(ans);\n}\n\n/**\n * Matrix function over the samples\n * @ignore\n * @param {{x:Array, y:Array}} data - Array of points to fit in the format [x1, x2, ... ], [y1, y2, ... ]\n * @param {Array} evaluatedData - Array of previous evaluated function values\n * @return {Matrix}\n */\nfunction matrixFunction(data, evaluatedData) {\n const m = data.x.length;\n\n var ans = new Array(m);\n\n for (var point = 0; point < m; point++) {\n ans[point] = [data.y[point] - evaluatedData[point]];\n }\n\n return new Matrix(ans);\n}\n\n/**\n * Iteration for Levenberg-Marquardt\n * @ignore\n * @param {{x:Array, y:Array}} data - Array of points to fit in the format [x1, x2, ... ], [y1, y2, ... ]\n * @param {Array} params - Array of previous parameter values\n * @param {number} damping - Levenberg-Marquardt parameter\n * @param {number} gradientDifference - Adjustment for decrease the damping parameter\n * @param {function} parameterizedFunction - The parameters and returns a function with the independent variable as a parameter\n * @return {Array}\n */\nexport default function step(\n data,\n params,\n damping,\n gradientDifference,\n parameterizedFunction\n) {\n var value = damping * gradientDifference * gradientDifference;\n var identity = Matrix.eye(params.length, params.length, value);\n\n const func = parameterizedFunction(params);\n var evaluatedData = data.x.map((e) => func(e));\n\n var gradientFunc = gradientFunction(\n data,\n evaluatedData,\n params,\n gradientDifference,\n parameterizedFunction\n );\n var matrixFunc = matrixFunction(data, evaluatedData);\n var inverseMatrix = inverse(\n identity.add(gradientFunc.mmul(gradientFunc.transpose()))\n );\n\n params = new Matrix([params]);\n params = params.sub(\n inverseMatrix\n .mmul(gradientFunc)\n .mmul(matrixFunc)\n .mul(gradientDifference)\n .transpose()\n );\n\n return params.to1DArray();\n}\n","import errorCalculation from './errorCalculation';\nimport step from './step';\n\n/**\n * Curve fitting algorithm\n * @param {{x:Array, y:Array}} data - Array of points to fit in the format [x1, x2, ... ], [y1, y2, ... ]\n * @param {function} parameterizedFunction - The parameters and returns a function with the independent variable as a parameter\n * @param {object} [options] - Options object\n * @param {number} [options.damping] - Levenberg-Marquardt parameter\n * @param {number} [options.gradientDifference = 10e-2] - Adjustment for decrease the damping parameter\n * @param {Array} [options.minValues] - Minimum allowed values for parameters\n * @param {Array} [options.maxValues] - Maximum allowed values for parameters\n * @param {Array} [options.initialValues] - Array of initial parameter values\n * @param {number} [options.maxIterations = 100] - Maximum of allowed iterations\n * @param {number} [options.errorTolerance = 10e-3] - Minimum uncertainty allowed for each point\n * @return {{parameterValues: Array, parameterError: number, iterations: number}}\n */\nexport default function levenbergMarquardt(\n data,\n parameterizedFunction,\n options = {}\n) {\n let {\n maxIterations = 100,\n gradientDifference = 10e-2,\n damping = 0,\n errorTolerance = 10e-3,\n minValues,\n maxValues,\n initialValues\n } = options;\n\n if (damping <= 0) {\n throw new Error('The damping option must be a positive number');\n } else if (!data.x || !data.y) {\n throw new Error('The data parameter must have x and y elements');\n } else if (\n !Array.isArray(data.x) ||\n data.x.length < 2 ||\n !Array.isArray(data.y) ||\n data.y.length < 2\n ) {\n throw new Error(\n 'The data parameter elements must be an array with more than 2 points'\n );\n } else if (data.x.length !== data.y.length) {\n throw new Error('The data parameter elements must have the same size');\n }\n\n var parameters =\n initialValues || new Array(parameterizedFunction.length).fill(1);\n let parLen = parameters.length;\n maxValues = maxValues || new Array(parLen).fill(Number.MAX_SAFE_INTEGER);\n minValues = minValues || new Array(parLen).fill(Number.MIN_SAFE_INTEGER);\n\n if (maxValues.length !== minValues.length) {\n throw new Error('minValues and maxValues must be the same size');\n }\n\n if (!Array.isArray(parameters)) {\n throw new Error('initialValues must be an array');\n }\n\n var error = errorCalculation(data, parameters, parameterizedFunction);\n\n var converged = error <= errorTolerance;\n\n for (\n var iteration = 0;\n iteration < maxIterations && !converged;\n iteration++\n ) {\n parameters = step(\n data,\n parameters,\n damping,\n gradientDifference,\n parameterizedFunction\n );\n\n for (let k = 0; k < parLen; k++) {\n parameters[k] = Math.min(\n Math.max(minValues[k], parameters[k]),\n maxValues[k]\n );\n }\n\n error = errorCalculation(data, parameters, parameterizedFunction);\n if (isNaN(error)) break;\n converged = error <= errorTolerance;\n }\n\n return {\n parameterValues: parameters,\n parameterError: error,\n iterations: iteration\n };\n}\n","/**\n * Returns a new array based on extraction of specific indices of an array\n * @private\n * @param {Array} vector\n * @param {Array} indices\n */\nexport default function selection(vector, indices) {\n let u = []; //new Float64Array(indices.length);\n for (let i = 0; i < indices.length; i++) {\n u[i] = vector[indices[i]];\n }\n return u;\n}\n","/**\n *\n * @private\n * @param {Array of arrays} collection\n */\nexport default function sortCollectionSet(collection) {\n let objectCollection = collection\n .map((value, index) => {\n let key = BigInt(0);\n value.forEach((item) => (key |= BigInt(1) << BigInt(item)));\n return { value, index, key };\n })\n .sort((a, b) => {\n if (a.key - b.key < 0) return -1;\n return 1;\n });\n\n let sorted = [];\n let indices = [];\n\n let key;\n for (let set of objectCollection) {\n if (set.key !== key) {\n key = set.key;\n indices.push([]);\n sorted.push(set.value);\n }\n indices[indices.length - 1].push(set.index);\n }\n\n let result = {\n values: sorted,\n indices: indices,\n };\n return result;\n}\n","import {\n Matrix,\n LuDecomposition,\n solve,\n CholeskyDecomposition,\n} from 'ml-matrix';\n\nimport sortCollectionSet from './util/sortCollectionSet';\n\n/**\n * (Combinatorial Subspace Least Squares) - subfunction for the FC-NNLS\n * @private\n * @param {Matrix} XtX\n * @param {Matrix} XtY\n * @param {Array} Pset\n * @param {Numbers} l\n * @param {Numbers} p\n */\nexport default function cssls(XtX, XtY, Pset, l, p) {\n // Solves the set of equation XtX*K = XtY for the variables in Pset\n // if XtX (or XtX(vars,vars)) is singular, performs the svd and find pseudoinverse, otherwise (even if ill-conditioned) finds inverse with LU decomposition and solves the set of equation\n // it is consistent with matlab results for ill-conditioned matrices (at least consistent with test 'ill-conditionned square X rank 2, Y 3x1' in cssls.test)\n\n let K = Matrix.zeros(l, p);\n if (Pset === null) {\n let choXtX = new CholeskyDecomposition(XtX);\n if (choXtX.isPositiveDefinite() === true) {\n K = choXtX.solve(XtY);\n } else {\n let luXtX = new LuDecomposition(XtX);\n if (luXtX.isSingular() === false) {\n K = luXtX.solve(Matrix.eye(l)).mmul(XtY);\n } else {\n K = solve(XtX, XtY, { useSVD: true });\n }\n }\n } else {\n let sortedPset = sortCollectionSet(Pset).values;\n let sortedEset = sortCollectionSet(Pset).indices;\n if (\n sortedPset.length === 1 &&\n sortedPset[0].length === 0 &&\n sortedEset[0].length === p\n ) {\n return K;\n } else if (\n sortedPset.length === 1 &&\n sortedPset[0].length === l &&\n sortedEset[0].length === p\n ) {\n let choXtX = new CholeskyDecomposition(XtX);\n if (choXtX.isPositiveDefinite() === true) {\n K = choXtX.solve(XtY);\n } else {\n let luXtX = new LuDecomposition(XtX);\n if (luXtX.isSingular() === false) {\n K = luXtX.solve(Matrix.eye(l)).mmul(XtY);\n } else {\n K = solve(XtX, XtY, { useSVD: true });\n }\n }\n } else {\n for (let k = 0; k < sortedPset.length; k++) {\n let cols2Solve = sortedEset[k];\n let vars = sortedPset[k];\n let L;\n let choXtX = new CholeskyDecomposition(XtX.selection(vars, vars));\n if (choXtX.isPositiveDefinite() === true) {\n L = choXtX.solve(XtY.selection(vars, cols2Solve));\n } else {\n let luXtX = new LuDecomposition(XtX.selection(vars, vars));\n if (luXtX.isSingular() === false) {\n L = luXtX\n .solve(Matrix.eye(vars.length))\n .mmul(XtY.selection(vars, cols2Solve));\n } else {\n L = solve(\n XtX.selection(vars, vars),\n XtY.selection(vars, cols2Solve),\n { useSVD: true },\n );\n }\n }\n for (let i = 0; i < L.rows; i++) {\n for (let j = 0; j < L.columns; j++) {\n K.set(vars[i], cols2Solve[j], L.get(i, j));\n }\n }\n }\n }\n }\n return K;\n}\n","import { Matrix } from 'ml-matrix';\n\nimport cssls from './cssls';\n\nexport default function initialisation(X, Y) {\n let n = X.rows;\n let l = X.columns;\n let p = Y.columns;\n let iter = 0;\n\n if (Y.rows !== n) throw new Error('ERROR: matrix size not compatible');\n\n let W = Matrix.zeros(l, p);\n\n // precomputes part of pseudoinverse\n let XtX = X.transpose().mmul(X);\n let XtY = X.transpose().mmul(Y);\n\n let K = cssls(XtX, XtY, null, l, p); // K is lxp\n let Pset = [];\n for (let j = 0; j < p; j++) {\n Pset[j] = [];\n for (let i = 0; i < l; i++) {\n if (K.get(i, j) > 0) {\n Pset[j].push(i);\n } else {\n K.set(i, j, 0);\n } //This is our initial solution, it's the solution found by overwriting the unconstrained least square solution\n }\n }\n let Fset = [];\n for (let j = 0; j < p; j++) {\n if (Pset[j].length !== l) {\n Fset.push(j);\n }\n }\n\n let D = K.clone();\n\n return { n, l, p, iter, W, XtX, XtY, K, Pset, Fset, D };\n}\n","/**\n * Computes the set difference A\\B\n * @private\n * @param {A} set A as an array\n * @param {B} set B as an array\n */\nexport default function setDifference(A, B) {\n let C = [];\n for (let i of A) {\n if (!B.includes(i)) C.push(i);\n }\n return C;\n}\n","import setDifference from './util/setDifference';\n\n// Makes sure the solution has converged\nexport default function optimality(\n iter,\n maxIter,\n XtX,\n XtY,\n Fset,\n Pset,\n W,\n K,\n l,\n p,\n D,\n) {\n if (iter === maxIter) {\n throw new Error('Maximum number of iterations exceeded');\n }\n\n // Check solution for optimality\n let V = XtY.subMatrixColumn(Fset).subtract(XtX.mmul(K.subMatrixColumn(Fset)));\n for (let j = 0; j < Fset.length; j++) {\n W.setColumn(Fset[j], V.subMatrixColumn([j]));\n }\n let Jset = [];\n let fullSet = [];\n for (let i = 0; i < l; i++) {\n fullSet.push(i);\n }\n for (let j = 0; j < Fset.length; j++) {\n let notPset = setDifference(fullSet, Pset[Fset[j]]);\n if (notPset.length === 0) {\n Jset.push(Fset[j]);\n } else if (W.selection(notPset, [Fset[j]]).max() <= 0) {\n Jset.push(Fset[j]);\n }\n }\n Fset = setDifference(Fset, Jset);\n\n // For non-optimal solutions, add the appropriate variables to Pset\n if (Fset.length !== 0) {\n for (let j = 0; j < Fset.length; j++) {\n for (let i = 0; i < l; i++) {\n if (Pset[Fset[j]].includes(i)) W.set(i, Fset[j], -Infinity);\n }\n Pset[Fset[j]].push(W.subMatrixColumn(Fset).maxColumnIndex(j)[0]);\n }\n for (let j = 0; j < Fset.length; j++) {\n D.setColumn(Fset[j], K.getColumn(Fset[j]));\n }\n }\n for (let j = 0; j < p; j++) {\n Pset[j].sort((a, b) => a - b);\n }\n return { Pset, Fset, W };\n}\n","import { Matrix } from 'ml-matrix';\n\nimport selection from './util/selection';\nimport cssls from './cssls';\nimport initialisation from './initialisation';\nimport optimality from './optimality';\n\n/**\n * Fast Combinatorial Non-negative Least Squares with multiple Right Hand Side\n * @param {Matrix|number[][]} X\n * @param {Matrix|number[][]} Y\n * @param {object} [options={}]\n * @param {number} [options.maxIterations] if empty maxIterations is set at 3 times the number of columns of X\n * @returns {Matrix} K\n */\nexport default function fcnnls(X, Y, options = {}) {\n X = Matrix.checkMatrix(X);\n Y = Matrix.checkMatrix(Y);\n let { l, p, iter, W, XtX, XtY, K, Pset, Fset, D } = initialisation(X, Y);\n const { maxIterations = X.columns * 3 } = options;\n\n // Active set algorithm for NNLS main loop\n while (Fset.length > 0) {\n // Solves for the passive variables (uses subroutine below)\n let L = cssls(\n XtX,\n XtY.subMatrixColumn(Fset),\n selection(Pset, Fset),\n l,\n Fset.length,\n );\n for (let i = 0; i < l; i++) {\n for (let j = 0; j < Fset.length; j++) {\n K.set(i, Fset[j], L.get(i, j));\n }\n }\n\n // Finds any infeasible solutions\n let infeasIndex = [];\n for (let j = 0; j < Fset.length; j++) {\n for (let i = 0; i < l; i++) {\n if (L.get(i, j) < 0) {\n infeasIndex.push(j);\n break;\n }\n }\n }\n let Hset = selection(Fset, infeasIndex);\n\n // Makes infeasible solutions feasible (standard NNLS inner loop)\n if (Hset.length > 0) {\n let m = Hset.length;\n let alpha = Matrix.ones(l, m);\n\n while (m > 0 && iter < maxIterations) {\n iter++;\n\n alpha.mul(Infinity);\n\n // Finds indices of negative variables in passive set\n let hRowColIdx = [[], []]; // Indexes work in pairs, each pair reprensents a single element, first array is row index, second array is column index\n let negRowColIdx = [[], []]; // Same as before\n for (let j = 0; j < m; j++) {\n for (let i = 0; i < Pset[Hset[j]].length; i++) {\n if (K.get(Pset[Hset[j]][i], Hset[j]) < 0) {\n hRowColIdx[0].push(Pset[Hset[j]][i]); // i\n hRowColIdx[1].push(j);\n negRowColIdx[0].push(Pset[Hset[j]][i]); // i\n negRowColIdx[1].push(Hset[j]);\n } // Compared to matlab, here we keep the row/column indexing (we are not taking the linear indexing)\n }\n }\n\n for (let k = 0; k < hRowColIdx[0].length; k++) {\n // could be hRowColIdx[1].length as well\n alpha.set(\n hRowColIdx[0][k],\n hRowColIdx[1][k],\n D.get(negRowColIdx[0][k], negRowColIdx[1][k]) /\n (D.get(negRowColIdx[0][k], negRowColIdx[1][k]) -\n K.get(negRowColIdx[0][k], negRowColIdx[1][k])),\n );\n }\n\n let alphaMin = [];\n let minIdx = [];\n for (let j = 0; j < m; j++) {\n alphaMin[j] = alpha.minColumn(j);\n minIdx[j] = alpha.minColumnIndex(j)[0];\n }\n\n alphaMin = Matrix.rowVector(alphaMin);\n for (let i = 0; i < l; i++) {\n alpha.setSubMatrix(alphaMin, i, 0);\n }\n\n let E = new Matrix(l, m);\n E = D.subMatrixColumn(Hset).subtract(\n alpha\n .subMatrix(0, l - 1, 0, m - 1)\n .mul(D.subMatrixColumn(Hset).subtract(K.subMatrixColumn(Hset))),\n );\n for (let j = 0; j < m; j++) {\n D.setColumn(Hset[j], E.subMatrixColumn([j]));\n }\n\n let idx2zero = [minIdx, Hset];\n for (let k = 0; k < m; k++) {\n D.set(idx2zero[0][k], idx2zero[1][k], 0);\n }\n\n for (let j = 0; j < m; j++) {\n Pset[Hset[j]].splice(\n Pset[Hset[j]].findIndex((item) => item === minIdx[j]),\n 1,\n );\n }\n\n L = cssls(XtX, XtY.subMatrixColumn(Hset), selection(Pset, Hset), l, m);\n for (let j = 0; j < m; j++) {\n K.setColumn(Hset[j], L.subMatrixColumn([j]));\n }\n\n Hset = [];\n for (let j = 0; j < K.columns; j++) {\n for (let i = 0; i < l; i++) {\n if (K.get(i, j) < 0) {\n Hset.push(j);\n\n break;\n }\n }\n }\n m = Hset.length;\n }\n }\n\n let newParam = optimality(\n iter,\n maxIterations,\n XtX,\n XtY,\n Fset,\n Pset,\n W,\n K,\n l,\n p,\n D,\n );\n Pset = newParam.Pset;\n Fset = newParam.Fset;\n W = newParam.W;\n }\n\n return K;\n}\n","import { Matrix } from 'ml-matrix';\n\nimport fcnnls from './fcnnls';\n\n/**\n * Fast Combinatorial Non-negative Least Squares with single Right Hand Side\n * @param {Matrix|number[][]} X\n * @param {number[]} y\n * @param {object} [options={}]\n * @param {boolean} [maxIterations] if true or empty maxIterations is set at 3 times the number of columns of X\n * @returns {Array} k\n */\nexport default function fcnnlsVector(X, y, options = {}) {\n if (Array.isArray(y) === false) {\n throw new TypeError('y must be a 1D Array');\n }\n let Y = Matrix.columnVector(y);\n let K = fcnnls(X, Y, options);\n let k = K.to1DArray();\n return k;\n}\n","module.exports = function(haystack, needle, comparator, low, high) {\n var mid, cmp;\n\n if(low === undefined)\n low = 0;\n\n else {\n low = low|0;\n if(low < 0 || low >= haystack.length)\n throw new RangeError(\"invalid lower bound\");\n }\n\n if(high === undefined)\n high = haystack.length - 1;\n\n else {\n high = high|0;\n if(high < low || high >= haystack.length)\n throw new RangeError(\"invalid upper bound\");\n }\n\n while(low <= high) {\n // The naive `low + high >>> 1` could fail for array lengths > 2**31\n // because `>>>` converts its operands to int32. `low + (high - low >>> 1)`\n // works for array lengths <= 2**32-1 which is also Javascript's max array\n // length.\n mid = low + ((high - low) >>> 1);\n cmp = +comparator(haystack[mid], needle, mid, haystack);\n\n // Too low.\n if(cmp < 0.0)\n low = mid + 1;\n\n // Too high.\n else if(cmp > 0.0)\n high = mid - 1;\n\n // Key found.\n else\n return mid;\n }\n\n // Key not found.\n return ~low;\n}\n","'use strict';\n\nfunction assertNumber(number) {\n\tif (typeof number !== 'number' || Number.isNaN(number)) {\n\t\tthrow new TypeError('Expected a number');\n\t}\n}\n\nexports.ascending = (left, right) => {\n\tassertNumber(left);\n\tassertNumber(right);\n\treturn left - right;\n};\n\nexports.descending = (left, right) => {\n\tassertNumber(left);\n\tassertNumber(right);\n\treturn right - left;\n};\n","import binarySearch from 'binary-search';\nimport { ascending } from 'num-sort';\n\nexport const largestPrime = 0x7fffffff;\n\nconst primeNumbers = [\n // chunk #0\n largestPrime, // 2^31-1\n\n // chunk #1\n 5,\n 11,\n 23,\n 47,\n 97,\n 197,\n 397,\n 797,\n 1597,\n 3203,\n 6421,\n 12853,\n 25717,\n 51437,\n 102877,\n 205759,\n 411527,\n 823117,\n 1646237,\n 3292489,\n 6584983,\n 13169977,\n 26339969,\n 52679969,\n 105359939,\n 210719881,\n 421439783,\n 842879579,\n 1685759167,\n\n // chunk #2\n 433,\n 877,\n 1759,\n 3527,\n 7057,\n 14143,\n 28289,\n 56591,\n 113189,\n 226379,\n 452759,\n 905551,\n 1811107,\n 3622219,\n 7244441,\n 14488931,\n 28977863,\n 57955739,\n 115911563,\n 231823147,\n 463646329,\n 927292699,\n 1854585413,\n\n // chunk #3\n 953,\n 1907,\n 3821,\n 7643,\n 15287,\n 30577,\n 61169,\n 122347,\n 244703,\n 489407,\n 978821,\n 1957651,\n 3915341,\n 7830701,\n 15661423,\n 31322867,\n 62645741,\n 125291483,\n 250582987,\n 501165979,\n 1002331963,\n 2004663929,\n\n // chunk #4\n 1039,\n 2081,\n 4177,\n 8363,\n 16729,\n 33461,\n 66923,\n 133853,\n 267713,\n 535481,\n 1070981,\n 2141977,\n 4283963,\n 8567929,\n 17135863,\n 34271747,\n 68543509,\n 137087021,\n 274174111,\n 548348231,\n 1096696463,\n\n // chunk #5\n 31,\n 67,\n 137,\n 277,\n 557,\n 1117,\n 2237,\n 4481,\n 8963,\n 17929,\n 35863,\n 71741,\n 143483,\n 286973,\n 573953,\n 1147921,\n 2295859,\n 4591721,\n 9183457,\n 18366923,\n 36733847,\n 73467739,\n 146935499,\n 293871013,\n 587742049,\n 1175484103,\n\n // chunk #6\n 599,\n 1201,\n 2411,\n 4831,\n 9677,\n 19373,\n 38747,\n 77509,\n 155027,\n 310081,\n 620171,\n 1240361,\n 2480729,\n 4961459,\n 9922933,\n 19845871,\n 39691759,\n 79383533,\n 158767069,\n 317534141,\n 635068283,\n 1270136683,\n\n // chunk #7\n 311,\n 631,\n 1277,\n 2557,\n 5119,\n 10243,\n 20507,\n 41017,\n 82037,\n 164089,\n 328213,\n 656429,\n 1312867,\n 2625761,\n 5251529,\n 10503061,\n 21006137,\n 42012281,\n 84024581,\n 168049163,\n 336098327,\n 672196673,\n 1344393353,\n\n // chunk #8\n 3,\n 7,\n 17,\n 37,\n 79,\n 163,\n 331,\n 673,\n 1361,\n 2729,\n 5471,\n 10949,\n 21911,\n 43853,\n 87719,\n 175447,\n 350899,\n 701819,\n 1403641,\n 2807303,\n 5614657,\n 11229331,\n 22458671,\n 44917381,\n 89834777,\n 179669557,\n 359339171,\n 718678369,\n 1437356741,\n\n // chunk #9\n 43,\n 89,\n 179,\n 359,\n 719,\n 1439,\n 2879,\n 5779,\n 11579,\n 23159,\n 46327,\n 92657,\n 185323,\n 370661,\n 741337,\n 1482707,\n 2965421,\n 5930887,\n 11861791,\n 23723597,\n 47447201,\n 94894427,\n 189788857,\n 379577741,\n 759155483,\n 1518310967,\n\n // chunk #10\n 379,\n 761,\n 1523,\n 3049,\n 6101,\n 12203,\n 24407,\n 48817,\n 97649,\n 195311,\n 390647,\n 781301,\n 1562611,\n 3125257,\n 6250537,\n 12501169,\n 25002389,\n 50004791,\n 100009607,\n 200019221,\n 400038451,\n 800076929,\n 1600153859,\n\n // chunk #11\n 13,\n 29,\n 59,\n 127,\n 257,\n 521,\n 1049,\n 2099,\n 4201,\n 8419,\n 16843,\n 33703,\n 67409,\n 134837,\n 269683,\n 539389,\n 1078787,\n 2157587,\n 4315183,\n 8630387,\n 17260781,\n 34521589,\n 69043189,\n 138086407,\n 276172823,\n 552345671,\n 1104691373,\n\n // chunk #12\n 19,\n 41,\n 83,\n 167,\n 337,\n 677,\n 1361,\n 2729,\n 5471,\n 10949,\n 21911,\n 43853,\n 87719,\n 175447,\n 350899,\n 701819,\n 1403641,\n 2807303,\n 5614657,\n 11229331,\n 22458671,\n 44917381,\n 89834777,\n 179669557,\n 359339171,\n 718678369,\n 1437356741,\n\n // chunk #13\n 53,\n 107,\n 223,\n 449,\n 907,\n 1823,\n 3659,\n 7321,\n 14653,\n 29311,\n 58631,\n 117269,\n 234539,\n 469099,\n 938207,\n 1876417,\n 3752839,\n 7505681,\n 15011389,\n 30022781,\n 60045577,\n 120091177,\n 240182359,\n 480364727,\n 960729461,\n 1921458943\n];\n\nprimeNumbers.sort(ascending);\n\nexport function nextPrime(value) {\n let index = binarySearch(primeNumbers, value, ascending);\n if (index < 0) {\n index = ~index;\n }\n return primeNumbers[index];\n}\n","import { largestPrime, nextPrime } from './primeFinder';\n\nconst FREE = 0;\nconst FULL = 1;\nconst REMOVED = 2;\n\nconst defaultInitialCapacity = 150;\nconst defaultMinLoadFactor = 1 / 6;\nconst defaultMaxLoadFactor = 2 / 3;\n\nexport default class HashTable {\n constructor(options = {}) {\n if (options instanceof HashTable) {\n this.table = options.table.slice();\n this.values = options.values.slice();\n this.state = options.state.slice();\n this.minLoadFactor = options.minLoadFactor;\n this.maxLoadFactor = options.maxLoadFactor;\n this.distinct = options.distinct;\n this.freeEntries = options.freeEntries;\n this.lowWaterMark = options.lowWaterMark;\n this.highWaterMark = options.maxLoadFactor;\n return;\n }\n\n const initialCapacity =\n options.initialCapacity === undefined\n ? defaultInitialCapacity\n : options.initialCapacity;\n if (initialCapacity < 0) {\n throw new RangeError(\n `initial capacity must not be less than zero: ${initialCapacity}`\n );\n }\n\n const minLoadFactor =\n options.minLoadFactor === undefined\n ? defaultMinLoadFactor\n : options.minLoadFactor;\n const maxLoadFactor =\n options.maxLoadFactor === undefined\n ? defaultMaxLoadFactor\n : options.maxLoadFactor;\n if (minLoadFactor < 0 || minLoadFactor >= 1) {\n throw new RangeError(`invalid minLoadFactor: ${minLoadFactor}`);\n }\n if (maxLoadFactor <= 0 || maxLoadFactor >= 1) {\n throw new RangeError(`invalid maxLoadFactor: ${maxLoadFactor}`);\n }\n if (minLoadFactor >= maxLoadFactor) {\n throw new RangeError(\n `minLoadFactor (${minLoadFactor}) must be smaller than maxLoadFactor (${maxLoadFactor})`\n );\n }\n\n let capacity = initialCapacity;\n // User wants to put at least capacity elements. We need to choose the size based on the maxLoadFactor to\n // avoid the need to rehash before this capacity is reached.\n // actualCapacity * maxLoadFactor >= capacity\n capacity = (capacity / maxLoadFactor) | 0;\n capacity = nextPrime(capacity);\n if (capacity === 0) capacity = 1;\n\n this.table = newArray(capacity);\n this.values = newArray(capacity);\n this.state = newArray(capacity);\n\n this.minLoadFactor = minLoadFactor;\n if (capacity === largestPrime) {\n this.maxLoadFactor = 1;\n } else {\n this.maxLoadFactor = maxLoadFactor;\n }\n\n this.distinct = 0;\n this.freeEntries = capacity;\n\n this.lowWaterMark = 0;\n this.highWaterMark = chooseHighWaterMark(capacity, this.maxLoadFactor);\n }\n\n clone() {\n return new HashTable(this);\n }\n\n get size() {\n return this.distinct;\n }\n\n get(key) {\n const i = this.indexOfKey(key);\n if (i < 0) return 0;\n return this.values[i];\n }\n\n set(key, value) {\n let i = this.indexOfInsertion(key);\n if (i < 0) {\n i = -i - 1;\n this.values[i] = value;\n return false;\n }\n\n if (this.distinct > this.highWaterMark) {\n const newCapacity = chooseGrowCapacity(\n this.distinct + 1,\n this.minLoadFactor,\n this.maxLoadFactor\n );\n this.rehash(newCapacity);\n return this.set(key, value);\n }\n\n this.table[i] = key;\n this.values[i] = value;\n if (this.state[i] === FREE) this.freeEntries--;\n this.state[i] = FULL;\n this.distinct++;\n\n if (this.freeEntries < 1) {\n const newCapacity = chooseGrowCapacity(\n this.distinct + 1,\n this.minLoadFactor,\n this.maxLoadFactor\n );\n this.rehash(newCapacity);\n }\n\n return true;\n }\n\n remove(key, noRehash) {\n const i = this.indexOfKey(key);\n if (i < 0) return false;\n\n this.state[i] = REMOVED;\n this.distinct--;\n\n if (!noRehash) this.maybeShrinkCapacity();\n\n return true;\n }\n\n delete(key, noRehash) {\n const i = this.indexOfKey(key);\n if (i < 0) return false;\n\n this.state[i] = FREE;\n this.distinct--;\n\n if (!noRehash) this.maybeShrinkCapacity();\n\n return true;\n }\n\n maybeShrinkCapacity() {\n if (this.distinct < this.lowWaterMark) {\n const newCapacity = chooseShrinkCapacity(\n this.distinct,\n this.minLoadFactor,\n this.maxLoadFactor\n );\n this.rehash(newCapacity);\n }\n }\n\n containsKey(key) {\n return this.indexOfKey(key) >= 0;\n }\n\n indexOfKey(key) {\n const table = this.table;\n const state = this.state;\n const length = this.table.length;\n\n const hash = key & 0x7fffffff;\n let i = hash % length;\n let decrement = hash % (length - 2);\n if (decrement === 0) decrement = 1;\n\n while (state[i] !== FREE && (state[i] === REMOVED || table[i] !== key)) {\n i -= decrement;\n if (i < 0) i += length;\n }\n\n if (state[i] === FREE) return -1;\n return i;\n }\n\n containsValue(value) {\n return this.indexOfValue(value) >= 0;\n }\n\n indexOfValue(value) {\n const values = this.values;\n const state = this.state;\n\n for (var i = 0; i < state.length; i++) {\n if (state[i] === FULL && values[i] === value) {\n return i;\n }\n }\n\n return -1;\n }\n\n indexOfInsertion(key) {\n const table = this.table;\n const state = this.state;\n const length = table.length;\n\n const hash = key & 0x7fffffff;\n let i = hash % length;\n let decrement = hash % (length - 2);\n if (decrement === 0) decrement = 1;\n\n while (state[i] === FULL && table[i] !== key) {\n i -= decrement;\n if (i < 0) i += length;\n }\n\n if (state[i] === REMOVED) {\n const j = i;\n while (state[i] !== FREE && (state[i] === REMOVED || table[i] !== key)) {\n i -= decrement;\n if (i < 0) i += length;\n }\n if (state[i] === FREE) i = j;\n }\n\n if (state[i] === FULL) {\n return -i - 1;\n }\n\n return i;\n }\n\n ensureCapacity(minCapacity) {\n if (this.table.length < minCapacity) {\n const newCapacity = nextPrime(minCapacity);\n this.rehash(newCapacity);\n }\n }\n\n rehash(newCapacity) {\n const oldCapacity = this.table.length;\n\n if (newCapacity <= this.distinct) throw new Error('Unexpected');\n\n const oldTable = this.table;\n const oldValues = this.values;\n const oldState = this.state;\n\n const newTable = newArray(newCapacity);\n const newValues = newArray(newCapacity);\n const newState = newArray(newCapacity);\n\n this.lowWaterMark = chooseLowWaterMark(newCapacity, this.minLoadFactor);\n this.highWaterMark = chooseHighWaterMark(newCapacity, this.maxLoadFactor);\n\n this.table = newTable;\n this.values = newValues;\n this.state = newState;\n this.freeEntries = newCapacity - this.distinct;\n\n for (var i = 0; i < oldCapacity; i++) {\n if (oldState[i] === FULL) {\n var element = oldTable[i];\n var index = this.indexOfInsertion(element);\n newTable[index] = element;\n newValues[index] = oldValues[i];\n newState[index] = FULL;\n }\n }\n }\n\n forEachKey(callback) {\n for (var i = 0; i < this.state.length; i++) {\n if (this.state[i] === FULL) {\n if (!callback(this.table[i])) return false;\n }\n }\n return true;\n }\n\n forEachValue(callback) {\n for (var i = 0; i < this.state.length; i++) {\n if (this.state[i] === FULL) {\n if (!callback(this.values[i])) return false;\n }\n }\n return true;\n }\n\n forEachPair(callback) {\n for (var i = 0; i < this.state.length; i++) {\n if (this.state[i] === FULL) {\n if (!callback(this.table[i], this.values[i])) return false;\n }\n }\n return true;\n }\n}\n\nfunction chooseLowWaterMark(capacity, minLoad) {\n return (capacity * minLoad) | 0;\n}\n\nfunction chooseHighWaterMark(capacity, maxLoad) {\n return Math.min(capacity - 2, (capacity * maxLoad) | 0);\n}\n\nfunction chooseGrowCapacity(size, minLoad, maxLoad) {\n return nextPrime(\n Math.max(size + 1, ((4 * size) / (3 * minLoad + maxLoad)) | 0)\n );\n}\n\nfunction chooseShrinkCapacity(size, minLoad, maxLoad) {\n return nextPrime(\n Math.max(size + 1, ((4 * size) / (minLoad + 3 * maxLoad)) | 0)\n );\n}\n\nfunction newArray(size) {\n return Array(size).fill(0);\n}\n","import HashTable from 'ml-hash-table';\n\nexport class SparseMatrix {\n constructor(rows, columns, options = {}) {\n if (rows instanceof SparseMatrix) {\n // clone\n const other = rows;\n this._init(\n other.rows,\n other.columns,\n other.elements.clone(),\n other.threshold\n );\n return;\n }\n\n if (Array.isArray(rows)) {\n const matrix = rows;\n rows = matrix.length;\n options = columns || {};\n columns = matrix[0].length;\n this._init(rows, columns, new HashTable(options), options.threshold);\n for (var i = 0; i < rows; i++) {\n for (var j = 0; j < columns; j++) {\n var value = matrix[i][j];\n if (this.threshold && Math.abs(value) < this.threshold) value = 0;\n if (value !== 0) {\n this.elements.set(i * columns + j, matrix[i][j]);\n }\n }\n }\n } else {\n this._init(rows, columns, new HashTable(options), options.threshold);\n }\n }\n\n _init(rows, columns, elements, threshold) {\n this.rows = rows;\n this.columns = columns;\n this.elements = elements;\n this.threshold = threshold || 0;\n }\n\n static eye(rows = 1, columns = rows) {\n const min = Math.min(rows, columns);\n const matrix = new SparseMatrix(rows, columns, { initialCapacity: min });\n for (var i = 0; i < min; i++) {\n matrix.set(i, i, 1);\n }\n return matrix;\n }\n\n clone() {\n return new SparseMatrix(this);\n }\n\n to2DArray() {\n const copy = new Array(this.rows);\n for (var i = 0; i < this.rows; i++) {\n copy[i] = new Array(this.columns);\n for (var j = 0; j < this.columns; j++) {\n copy[i][j] = this.get(i, j);\n }\n }\n return copy;\n }\n\n isSquare() {\n return this.rows === this.columns;\n }\n\n isSymmetric() {\n if (!this.isSquare()) return false;\n\n var symmetric = true;\n this.forEachNonZero((i, j, v) => {\n if (this.get(j, i) !== v) {\n symmetric = false;\n return false;\n }\n return v;\n });\n return symmetric;\n }\n\n /**\n * Search for the wither band in the main diagonals\n * @return {number}\n */\n bandWidth() {\n let min = this.columns;\n let max = -1;\n this.forEachNonZero((i, j, v) => {\n let diff = i - j;\n min = Math.min(min, diff);\n max = Math.max(max, diff);\n return v;\n });\n return max - min;\n }\n\n /**\n * Test if a matrix is consider banded using a threshold\n * @param {number} width\n * @return {boolean}\n */\n isBanded(width) {\n let bandWidth = this.bandWidth();\n return bandWidth <= width;\n }\n\n get cardinality() {\n return this.elements.size;\n }\n\n get size() {\n return this.rows * this.columns;\n }\n\n get(row, column) {\n return this.elements.get(row * this.columns + column);\n }\n\n set(row, column, value) {\n if (this.threshold && Math.abs(value) < this.threshold) value = 0;\n if (value === 0) {\n this.elements.remove(row * this.columns + column);\n } else {\n this.elements.set(row * this.columns + column, value);\n }\n return this;\n }\n\n mmul(other) {\n if (this.columns !== other.rows) {\n // eslint-disable-next-line no-console\n console.warn(\n 'Number of columns of left matrix are not equal to number of rows of right matrix.'\n );\n }\n\n const m = this.rows;\n const p = other.columns;\n\n const result = new SparseMatrix(m, p);\n this.forEachNonZero((i, j, v1) => {\n other.forEachNonZero((k, l, v2) => {\n if (j === k) {\n result.set(i, l, result.get(i, l) + v1 * v2);\n }\n return v2;\n });\n return v1;\n });\n return result;\n }\n\n kroneckerProduct(other) {\n const m = this.rows;\n const n = this.columns;\n const p = other.rows;\n const q = other.columns;\n\n const result = new SparseMatrix(m * p, n * q, {\n initialCapacity: this.cardinality * other.cardinality\n });\n this.forEachNonZero((i, j, v1) => {\n other.forEachNonZero((k, l, v2) => {\n result.set(p * i + k, q * j + l, v1 * v2);\n return v2;\n });\n return v1;\n });\n return result;\n }\n\n forEachNonZero(callback) {\n this.elements.forEachPair((key, value) => {\n const i = (key / this.columns) | 0;\n const j = key % this.columns;\n let r = callback(i, j, value);\n if (r === false) return false; // stop iteration\n if (this.threshold && Math.abs(r) < this.threshold) r = 0;\n if (r !== value) {\n if (r === 0) {\n this.elements.remove(key, true);\n } else {\n this.elements.set(key, r);\n }\n }\n return true;\n });\n this.elements.maybeShrinkCapacity();\n return this;\n }\n\n getNonZeros() {\n const cardinality = this.cardinality;\n const rows = new Array(cardinality);\n const columns = new Array(cardinality);\n const values = new Array(cardinality);\n var idx = 0;\n this.forEachNonZero((i, j, value) => {\n rows[idx] = i;\n columns[idx] = j;\n values[idx] = value;\n idx++;\n return value;\n });\n return { rows, columns, values };\n }\n\n setThreshold(newThreshold) {\n if (newThreshold !== 0 && newThreshold !== this.threshold) {\n this.threshold = newThreshold;\n this.forEachNonZero((i, j, v) => v);\n }\n return this;\n }\n\n /**\n * @return {SparseMatrix} - New transposed sparse matrix\n */\n transpose() {\n let trans = new SparseMatrix(this.columns, this.rows, {\n initialCapacity: this.cardinality\n });\n this.forEachNonZero((i, j, value) => {\n trans.set(j, i, value);\n return value;\n });\n return trans;\n }\n}\n\nSparseMatrix.prototype.klass = 'Matrix';\n\nSparseMatrix.identity = SparseMatrix.eye;\nSparseMatrix.prototype.tensorProduct = SparseMatrix.prototype.kroneckerProduct;\n\n/*\n Add dynamically instance and static methods for mathematical operations\n */\n\nvar inplaceOperator = `\n(function %name%(value) {\n if (typeof value === 'number') return this.%name%S(value);\n return this.%name%M(value);\n})\n`;\n\nvar inplaceOperatorScalar = `\n(function %name%S(value) {\n this.forEachNonZero((i, j, v) => v %op% value);\n return this;\n})\n`;\n\nvar inplaceOperatorMatrix = `\n(function %name%M(matrix) {\n matrix.forEachNonZero((i, j, v) => {\n this.set(i, j, this.get(i, j) %op% v);\n return v;\n });\n return this;\n})\n`;\n\nvar staticOperator = `\n(function %name%(matrix, value) {\n var newMatrix = new SparseMatrix(matrix);\n return newMatrix.%name%(value);\n})\n`;\n\nvar inplaceMethod = `\n(function %name%() {\n this.forEachNonZero((i, j, v) => %method%(v));\n return this;\n})\n`;\n\nvar staticMethod = `\n(function %name%(matrix) {\n var newMatrix = new SparseMatrix(matrix);\n return newMatrix.%name%();\n})\n`;\n\nconst operators = [\n // Arithmetic operators\n ['+', 'add'],\n ['-', 'sub', 'subtract'],\n ['*', 'mul', 'multiply'],\n ['/', 'div', 'divide'],\n ['%', 'mod', 'modulus'],\n // Bitwise operators\n ['&', 'and'],\n ['|', 'or'],\n ['^', 'xor'],\n ['<<', 'leftShift'],\n ['>>', 'signPropagatingRightShift'],\n ['>>>', 'rightShift', 'zeroFillRightShift']\n];\n\nfor (const operator of operators) {\n for (let i = 1; i < operator.length; i++) {\n SparseMatrix.prototype[operator[i]] = eval(\n fillTemplateFunction(inplaceOperator, {\n name: operator[i],\n op: operator[0]\n })\n );\n SparseMatrix.prototype[`${operator[i]}S`] = eval(\n fillTemplateFunction(inplaceOperatorScalar, {\n name: `${operator[i]}S`,\n op: operator[0]\n })\n );\n SparseMatrix.prototype[`${operator[i]}M`] = eval(\n fillTemplateFunction(inplaceOperatorMatrix, {\n name: `${operator[i]}M`,\n op: operator[0]\n })\n );\n\n SparseMatrix[operator[i]] = eval(\n fillTemplateFunction(staticOperator, { name: operator[i] })\n );\n }\n}\n\nvar methods = [['~', 'not']];\n\n[\n 'abs',\n 'acos',\n 'acosh',\n 'asin',\n 'asinh',\n 'atan',\n 'atanh',\n 'cbrt',\n 'ceil',\n 'clz32',\n 'cos',\n 'cosh',\n 'exp',\n 'expm1',\n 'floor',\n 'fround',\n 'log',\n 'log1p',\n 'log10',\n 'log2',\n 'round',\n 'sign',\n 'sin',\n 'sinh',\n 'sqrt',\n 'tan',\n 'tanh',\n 'trunc'\n].forEach(function (mathMethod) {\n methods.push([`Math.${mathMethod}`, mathMethod]);\n});\n\nfor (const method of methods) {\n for (let i = 1; i < method.length; i++) {\n SparseMatrix.prototype[method[i]] = eval(\n fillTemplateFunction(inplaceMethod, {\n name: method[i],\n method: method[0]\n })\n );\n SparseMatrix[method[i]] = eval(\n fillTemplateFunction(staticMethod, { name: method[i] })\n );\n }\n}\n\nfunction fillTemplateFunction(template, values) {\n for (const i in values) {\n template = template.replace(new RegExp(`%${i}%`, 'g'), values[i]);\n }\n return template;\n}\n","export default function additiveSymmetric(a, b) {\n var i = 0;\n var ii = a.length;\n var d = 0;\n for (; i < ii; i++) {\n d += ((a[i] - b[i]) * (a[i] - b[i]) * (a[i] + b[i])) / (a[i] * b[i]);\n }\n return 2 * d;\n}\n","export default function avg(a, b) {\n var ii = a.length;\n var max = 0;\n var ans = 0;\n var aux = 0;\n for (var i = 0; i < ii; i++) {\n aux = Math.abs(a[i] - b[i]);\n ans += aux;\n if (max < aux) {\n max = aux;\n }\n }\n return (max + ans) / 2;\n}\n","export default function bhattacharyya(a, b) {\n var ii = a.length;\n var ans = 0;\n for (var i = 0; i < ii; i++) {\n ans += Math.sqrt(a[i] * b[i]);\n }\n return -Math.log(ans);\n}\n","export default function canberra(a, b) {\n var ii = a.length;\n var ans = 0;\n for (var i = 0; i < ii; i++) {\n ans += Math.abs(a[i] - b[i]) / (a[i] + b[i]);\n }\n return ans;\n}\n","export default function chebyshev(a, b) {\n var ii = a.length;\n var max = 0;\n var aux = 0;\n for (var i = 0; i < ii; i++) {\n aux = Math.abs(a[i] - b[i]);\n if (max < aux) {\n max = aux;\n }\n }\n return max;\n}\n","export default function clark(a, b) {\n var i = 0;\n var ii = a.length;\n var d = 0;\n for (; i < ii; i++) {\n d += Math.sqrt(\n ((a[i] - b[i]) * (a[i] - b[i])) / ((a[i] + b[i]) * (a[i] + b[i]))\n );\n }\n return 2 * d;\n}\n","export default function czekanowskiSimilarity(a, b) {\n var up = 0;\n var down = 0;\n for (var i = 0; i < a.length; i++) {\n up += Math.min(a[i], b[i]);\n down += a[i] + b[i];\n }\n return (2 * up) / down;\n}\n","import czekanowskiSimilarity from '../similarities/czekanowski';\n\nexport default function czekanowskiDistance(a, b) {\n return 1 - czekanowskiSimilarity(a, b);\n}\n","export default function dice(a, b) {\n var ii = a.length;\n var p = 0;\n var q1 = 0;\n var q2 = 0;\n for (var i = 0; i < ii; i++) {\n p += a[i] * a[i];\n q1 += b[i] * b[i];\n q2 += (a[i] - b[i]) * (a[i] - b[i]);\n }\n return q2 / (p + q1);\n}\n","export default function divergence(a, b) {\n var i = 0;\n var ii = a.length;\n var d = 0;\n for (; i < ii; i++) {\n d += ((a[i] - b[i]) * (a[i] - b[i])) / ((a[i] + b[i]) * (a[i] + b[i]));\n }\n return 2 * d;\n}\n","export default function fidelity(a, b) {\n var ii = a.length;\n var ans = 0;\n for (var i = 0; i < ii; i++) {\n ans += Math.sqrt(a[i] * b[i]);\n }\n return ans;\n}\n","export default function gower(a, b) {\n var ii = a.length;\n var ans = 0;\n for (var i = 0; i < ii; i++) {\n ans += Math.abs(a[i] - b[i]);\n }\n return ans / ii;\n}\n","export default function harmonicMean(a, b) {\n var ii = a.length;\n var ans = 0;\n for (var i = 0; i < ii; i++) {\n ans += (a[i] * b[i]) / (a[i] + b[i]);\n }\n return 2 * ans;\n}\n","export default function hellinger(a, b) {\n var ii = a.length;\n var ans = 0;\n for (var i = 0; i < ii; i++) {\n ans += Math.sqrt(a[i] * b[i]);\n }\n return 2 * Math.sqrt(1 - ans);\n}\n","export default function innerProduct(a, b) {\n var ii = a.length;\n var ans = 0;\n for (var i = 0; i < ii; i++) {\n ans += a[i] * b[i];\n }\n return ans;\n}\n","export default function intersection(a, b) {\n var ii = a.length;\n var ans = 0;\n for (var i = 0; i < ii; i++) {\n ans += Math.min(a[i], b[i]);\n }\n return 1 - ans;\n}\n","export default function jaccard(a, b) {\n var ii = a.length;\n var p1 = 0;\n var p2 = 0;\n var q1 = 0;\n var q2 = 0;\n for (var i = 0; i < ii; i++) {\n p1 += a[i] * b[i];\n p2 += a[i] * a[i];\n q1 += b[i] * b[i];\n q2 += (a[i] - b[i]) * (a[i] - b[i]);\n }\n return q2 / (p2 + q1 - p1);\n}\n","export default function jeffreys(a, b) {\n var ii = a.length;\n var ans = 0;\n for (var i = 0; i < ii; i++) {\n ans += (a[i] - b[i]) * Math.log(a[i] / b[i]);\n }\n return ans;\n}\n","export default function jensenDifference(a, b) {\n var ii = a.length;\n var ans = 0;\n for (var i = 0; i < ii; i++) {\n ans +=\n (a[i] * Math.log(a[i]) + b[i] * Math.log(b[i])) / 2 -\n ((a[i] + b[i]) / 2) * Math.log((a[i] + b[i]) / 2);\n }\n return ans;\n}\n","export default function jensenShannon(a, b) {\n var ii = a.length;\n var p = 0;\n var q = 0;\n for (var i = 0; i < ii; i++) {\n p += a[i] * Math.log((2 * a[i]) / (a[i] + b[i]));\n q += b[i] * Math.log((2 * b[i]) / (a[i] + b[i]));\n }\n return (p + q) / 2;\n}\n","export default function kdivergence(a, b) {\n var ii = a.length;\n var ans = 0;\n for (var i = 0; i < ii; i++) {\n ans += a[i] * Math.log((2 * a[i]) / (a[i] + b[i]));\n }\n return ans;\n}\n","export default function kulczynski(a, b) {\n var ii = a.length;\n var up = 0;\n var down = 0;\n for (var i = 0; i < ii; i++) {\n up += Math.abs(a[i] - b[i]);\n down += Math.min(a[i], b[i]);\n }\n return up / down;\n}\n","export default function kullbackLeibler(a, b) {\n var ii = a.length;\n var ans = 0;\n for (var i = 0; i < ii; i++) {\n ans += a[i] * Math.log(a[i] / b[i]);\n }\n return ans;\n}\n","export default function kumarHassebrook(a, b) {\n var ii = a.length;\n var p = 0;\n var p2 = 0;\n var q2 = 0;\n for (var i = 0; i < ii; i++) {\n p += a[i] * b[i];\n p2 += a[i] * a[i];\n q2 += b[i] * b[i];\n }\n return p / (p2 + q2 - p);\n}\n","export default function kumarJohnson(a, b) {\n var ii = a.length;\n var ans = 0;\n for (var i = 0; i < ii; i++) {\n ans +=\n Math.pow(a[i] * a[i] - b[i] * b[i], 2) / (2 * Math.pow(a[i] * b[i], 1.5));\n }\n return ans;\n}\n","export default function lorentzian(a, b) {\n var ii = a.length;\n var ans = 0;\n for (var i = 0; i < ii; i++) {\n ans += Math.log(Math.abs(a[i] - b[i]) + 1);\n }\n return ans;\n}\n","export default function manhattan(a, b) {\n var i = 0;\n var ii = a.length;\n var d = 0;\n for (; i < ii; i++) {\n d += Math.abs(a[i] - b[i]);\n }\n return d;\n}\n","export default function matusita(a, b) {\n var ii = a.length;\n var ans = 0;\n for (var i = 0; i < ii; i++) {\n ans += Math.sqrt(a[i] * b[i]);\n }\n return Math.sqrt(2 - 2 * ans);\n}\n","export default function minkowski(a, b, p) {\n var i = 0;\n var ii = a.length;\n var d = 0;\n for (; i < ii; i++) {\n d += Math.pow(Math.abs(a[i] - b[i]), p);\n }\n return Math.pow(d, 1 / p);\n}\n","export default function motyka(a, b) {\n var ii = a.length;\n var up = 0;\n var down = 0;\n for (var i = 0; i < ii; i++) {\n up += Math.min(a[i], b[i]);\n down += a[i] + b[i];\n }\n return 1 - up / down;\n}\n","export default function neyman(a, b) {\n var i = 0;\n var ii = a.length;\n var d = 0;\n for (; i < ii; i++) {\n d += ((a[i] - b[i]) * (a[i] - b[i])) / a[i];\n }\n return d;\n}\n","export default function pearson(a, b) {\n var i = 0;\n var ii = a.length;\n var d = 0;\n for (; i < ii; i++) {\n d += ((a[i] - b[i]) * (a[i] - b[i])) / b[i];\n }\n return d;\n}\n","export default function probabilisticSymmetric(a, b) {\n var i = 0;\n var ii = a.length;\n var d = 0;\n for (; i < ii; i++) {\n d += ((a[i] - b[i]) * (a[i] - b[i])) / (a[i] + b[i]);\n }\n return 2 * d;\n}\n","export default function ruzicka(a, b) {\n var ii = a.length;\n var up = 0;\n var down = 0;\n for (var i = 0; i < ii; i++) {\n up += Math.min(a[i], b[i]);\n down += Math.max(a[i], b[i]);\n }\n return up / down;\n}\n","export default function soergel(a, b) {\n var ii = a.length;\n var up = 0;\n var down = 0;\n for (var i = 0; i < ii; i++) {\n up += Math.abs(a[i] - b[i]);\n down += Math.max(a[i], b[i]);\n }\n return up / down;\n}\n","export default function sorensen(a, b) {\n var ii = a.length;\n var up = 0;\n var down = 0;\n for (var i = 0; i < ii; i++) {\n up += Math.abs(a[i] - b[i]);\n down += a[i] + b[i];\n }\n return up / down;\n}\n","export default function squared(a, b) {\n var i = 0;\n var ii = a.length;\n var d = 0;\n for (; i < ii; i++) {\n d += ((a[i] - b[i]) * (a[i] - b[i])) / (a[i] + b[i]);\n }\n return d;\n}\n","export default function squaredChord(a, b) {\n var ii = a.length;\n var ans = 0;\n for (var i = 0; i < ii; i++) {\n ans +=\n (Math.sqrt(a[i]) - Math.sqrt(b[i])) * (Math.sqrt(a[i]) - Math.sqrt(b[i]));\n }\n return ans;\n}\n","export default function taneja(a, b) {\n var ii = a.length;\n var ans = 0;\n for (var i = 0; i < ii; i++) {\n ans +=\n ((a[i] + b[i]) / 2) *\n Math.log((a[i] + b[i]) / (2 * Math.sqrt(a[i] * b[i])));\n }\n return ans;\n}\n","export default function tanimoto(a, b, bitvector) {\n if (bitvector) {\n var inter = 0;\n var union = 0;\n for (var j = 0; j < a.length; j++) {\n inter += a[j] && b[j];\n union += a[j] || b[j];\n }\n if (union === 0) {\n return 1;\n }\n return inter / union;\n } else {\n var ii = a.length;\n var p = 0;\n var q = 0;\n var m = 0;\n for (var i = 0; i < ii; i++) {\n p += a[i];\n q += b[i];\n m += Math.min(a[i], b[i]);\n }\n return 1 - (p + q - 2 * m) / (p + q - m);\n }\n}\n","import tanimotoS from '../similarities/tanimoto';\n\nexport default function tanimoto(a, b, bitvector) {\n if (bitvector) {\n return 1 - tanimotoS(a, b, bitvector);\n } else {\n var ii = a.length;\n var p = 0;\n var q = 0;\n var m = 0;\n for (var i = 0; i < ii; i++) {\n p += a[i];\n q += b[i];\n m += Math.min(a[i], b[i]);\n }\n return (p + q - 2 * m) / (p + q - m);\n }\n}\n","export default function topsoe(a, b) {\n var ii = a.length;\n var ans = 0;\n for (var i = 0; i < ii; i++) {\n ans +=\n a[i] * Math.log((2 * a[i]) / (a[i] + b[i])) +\n b[i] * Math.log((2 * b[i]) / (a[i] + b[i]));\n }\n return ans;\n}\n","export default function waveHedges(a, b) {\n var ii = a.length;\n var ans = 0;\n for (var i = 0; i < ii; i++) {\n ans += 1 - Math.min(a[i], b[i]) / Math.max(a[i], b[i]);\n }\n return ans;\n}\n","import binarySearch from 'binary-search';\nimport { ascending } from 'num-sort';\n\n/**\n * Function that creates the tree\n * @param {Array>} spectrum\n * @param {object} [options]\n * @return {Tree|null}\n * left and right have the same structure than the parent,\n * or are null if they are leaves\n */\nexport function createTree(spectrum, options = {}) {\n var X = spectrum[0];\n const {\n minWindow = 0.16,\n threshold = 0.01,\n from = X[0],\n to = X[X.length - 1]\n } = options;\n\n return mainCreateTree(\n spectrum[0],\n spectrum[1],\n from,\n to,\n minWindow,\n threshold\n );\n}\n\nfunction mainCreateTree(X, Y, from, to, minWindow, threshold) {\n if (to - from < minWindow) {\n return null;\n }\n\n // search first point\n var start = binarySearch(X, from, ascending);\n if (start < 0) {\n start = ~start;\n }\n\n // stop at last point\n var sum = 0;\n var center = 0;\n for (var i = start; i < X.length; i++) {\n if (X[i] >= to) {\n break;\n }\n sum += Y[i];\n center += X[i] * Y[i];\n }\n\n if (sum < threshold) {\n return null;\n }\n\n center /= sum;\n if (center - from < 1e-6 || to - center < 1e-6) {\n return null;\n }\n if (center - from < minWindow / 4) {\n return mainCreateTree(X, Y, center, to, minWindow, threshold);\n } else {\n if (to - center < minWindow / 4) {\n return mainCreateTree(X, Y, from, center, minWindow, threshold);\n } else {\n return new Tree(\n sum,\n center,\n mainCreateTree(X, Y, from, center, minWindow, threshold),\n mainCreateTree(X, Y, center, to, minWindow, threshold)\n );\n }\n }\n}\n\nclass Tree {\n constructor(sum, center, left, right) {\n this.sum = sum;\n this.center = center;\n this.left = left;\n this.right = right;\n }\n}\n","import { createTree } from './createTree';\n\n/**\n * Similarity between two nodes\n * @param {Tree|Array>} a - tree A node\n * @param {Tree|Array>} b - tree B node\n * @param {object} [options]\n * @return {number} similarity measure between tree nodes\n */\nexport function getSimilarity(a, b, options = {}) {\n const { alpha = 0.1, beta = 0.33, gamma = 0.001 } = options;\n\n if (a === null || b === null) {\n return 0;\n }\n if (Array.isArray(a)) {\n a = createTree(a);\n }\n if (Array.isArray(b)) {\n b = createTree(b);\n }\n\n var C =\n (alpha * Math.min(a.sum, b.sum)) / Math.max(a.sum, b.sum) +\n (1 - alpha) * Math.exp(-gamma * Math.abs(a.center - b.center));\n\n return (\n beta * C +\n ((1 - beta) *\n (getSimilarity(a.left, b.left, options) +\n getSimilarity(a.right, b.right, options))) /\n 2\n );\n}\n","import { getSimilarity } from './getSimilarity';\n\nexport { createTree } from './createTree';\n\nexport function treeSimilarity(A, B, options = {}) {\n return getSimilarity(A, B, options);\n}\n\nexport function getFunction(options = {}) {\n return (A, B) => getSimilarity(A, B, options);\n}\n","export default function cosine(a, b) {\n var ii = a.length;\n var p = 0;\n var p2 = 0;\n var q2 = 0;\n for (var i = 0; i < ii; i++) {\n p += a[i] * b[i];\n p2 += a[i] * a[i];\n q2 += b[i] * b[i];\n }\n return p / (Math.sqrt(p2) * Math.sqrt(q2));\n}\n","import diceD from '../distances/dice';\n\nexport default function dice(a, b) {\n return 1 - diceD(a, b);\n}\n","import intersectionD from '../distances/intersection';\n\nexport default function intersection(a, b) {\n return 1 - intersectionD(a, b);\n}\n","import jaccardD from '../distances/jaccard';\n\nexport default function jaccard(a, b) {\n return 1 - jaccardD(a, b);\n}\n","import kulczynskiD from '../distances/kulczynski';\n\nexport default function kulczynski(a, b) {\n return 1 / kulczynskiD(a, b);\n}\n","import motykaD from '../distances/motyka';\n\nexport default function motyka(a, b) {\n return 1 - motykaD(a, b);\n}\n","import mean from 'ml-array-mean';\n\nimport cosine from './cosine';\n\nexport default function pearson(a, b) {\n var avgA = mean(a);\n var avgB = mean(b);\n\n var newA = new Array(a.length);\n var newB = new Array(b.length);\n for (var i = 0; i < newA.length; i++) {\n newA[i] = a[i] - avgA;\n newB[i] = b[i] - avgB;\n }\n\n return cosine(newA, newB);\n}\n","import squaredChordD from '../distances/squaredChord';\n\nexport default function squaredChord(a, b) {\n return 1 - squaredChordD(a, b);\n}\n","'use strict';\n\n// Accuracy\nexports.acc = pred => {\n const l = pred.cutoffs.length;\n const result = new Array(l);\n for (var i = 0; i < l; i++) {\n result[i] = (pred.tn[i] + pred.tp[i]) / (l - 1);\n }\n return result;\n};\n\n// Error rate\nexports.err = pred => {\n const l = pred.cutoffs.length;\n const result = new Array(l);\n for (var i = 0; i < l; i++) {\n result[i] = (pred.fn[i] + pred.fp[i] / (l - 1));\n }\n return result;\n};\n\n// False positive rate\nexports.fpr = pred => {\n const l = pred.cutoffs.length;\n const result = new Array(l);\n for (var i = 0; i < l; i++) {\n result[i] = pred.fp[i] / pred.nNeg;\n }\n return result;\n};\n\n// True positive rate\nexports.tpr = pred => {\n const l = pred.cutoffs.length;\n const result = new Array(l);\n for (var i = 0; i < l; i++) {\n result[i] = pred.tp[i] / pred.nPos;\n }\n return result;\n};\n\n// False negative rate\nexports.fnr = pred => {\n const l = pred.cutoffs.length;\n const result = new Array(l);\n for (var i = 0; i < l; i++) {\n result[i] = pred.fn[i] / pred.nPos;\n }\n return result;\n};\n\n// True negative rate\nexports.tnr = pred => {\n const l = pred.cutoffs.length;\n const result = new Array(l);\n for (var i = 0; i < l; i++) {\n result[i] = pred.tn[i] / pred.nNeg;\n }\n return result;\n};\n\n// Positive predictive value\nexports.ppv = pred => {\n const l = pred.cutoffs.length;\n const result = new Array(l);\n for (var i = 0; i < l; i++) {\n result[i] = (pred.fp[i] + pred.tp[i] !== 0) ? (pred.tp[i] / (pred.fp[i] + pred.tp[i])) : 0;\n }\n return result;\n};\n\n// Negative predictive value\nexports.npv = pred => {\n const l = pred.cutoffs.length;\n const result = new Array(l);\n for (var i = 0; i < l; i++) {\n result[i] = (pred.fn[i] + pred.tn[i] !== 0) ? (pred.tn[i] / (pred.fn[i] + pred.tn[i])) : 0;\n }\n return result;\n};\n\n// Prediction conditioned fallout\nexports.pcfall = pred => {\n const l = pred.cutoffs.length;\n const result = new Array(l);\n for (var i = 0; i < l; i++) {\n result[i] = (pred.fp[i] + pred.tp[i] !== 0) ? 1 - (pred.tp[i] / (pred.fp[i] + pred.tp[i])) : 1;\n }\n return result;\n};\n\n// Prediction conditioned miss\nexports.pcmiss = pred => {\n const l = pred.cutoffs.length;\n const result = new Array(l);\n for (var i = 0; i < l; i++) {\n result[i] = (pred.fn[i] + pred.tn[i] !== 0) ? 1 - (pred.tn[i] / (pred.fn[i] + pred.tn[i])) : 1;\n }\n return result;\n};\n\n// Lift value\nexports.lift = pred => {\n const l = pred.cutoffs.length;\n const result = new Array(l);\n for (var i = 0; i < l; i++) {\n result[i] = (pred.nPosPred[i] !== 0) ? ((pred.tp[i] / pred.nPos) / (pred.nPosPred[i] / pred.nSamples)) : 0;\n }\n return result;\n};\n\n// Rate of positive predictions\nexports.rpp = pred => {\n const l = pred.cutoffs.length;\n const result = new Array(l);\n for (var i = 0; i < l; i++) {\n result[i] = pred.nPosPred[i] / pred.nSamples;\n }\n return result;\n};\n\n// Rate of negative predictions\nexports.rnp = pred => {\n const l = pred.cutoffs.length;\n const result = new Array(l);\n for (var i = 0; i < l; i++) {\n result[i] = pred.nNegPred[i] / pred.nSamples;\n }\n return result;\n};\n\n// Threshold\nexports.threshold = pred => {\n const clone = pred.cutoffs.slice();\n clone[0] = clone[1]; // Remove the infinite value\n return clone;\n};\n","'use strict';\n\nconst measures = require('./measures');\n\nclass Performance {\n /**\n *\n * @param prediction - The prediction matrix\n * @param target - The target matrix (values: truthy for same class, falsy for different class)\n * @param options\n *\n * @option all True if the entire matrix must be used. False to ignore the diagonal and lower part (default is false, for similarity/distance matrices)\n * @option max True if the max value corresponds to a perfect match (like in similarity matrices), false if it is the min value (default is false, like in distance matrices. All values will be multiplied by -1)\n */\n constructor(prediction, target, options) {\n options = options || {};\n if (prediction.length !== target.length || prediction[0].length !== target[0].length) {\n throw new Error('dimensions of prediction and target do not match');\n }\n const rows = prediction.length;\n const columns = prediction[0].length;\n const isDistance = !options.max;\n\n const predP = [];\n\n if (options.all) {\n for (var i = 0; i < rows; i++) {\n for (var j = 0; j < columns; j++) {\n predP.push({\n pred: prediction[i][j],\n targ: target[i][j]\n });\n }\n }\n } else {\n if (rows < 3 || rows !== columns) {\n throw new Error('When \"all\" option is false, the prediction matrix must be square and have at least 3 columns');\n }\n for (var i = 0; i < rows - 1; i++) {\n for (var j = i + 1; j < columns; j++) {\n predP.push({\n pred: prediction[i][j],\n targ: target[i][j]\n });\n }\n }\n }\n\n if (isDistance) {\n predP.sort((a, b) => a.pred - b.pred);\n } else {\n predP.sort((a, b) => b.pred - a.pred);\n }\n \n const cutoffs = this.cutoffs = [isDistance ? Number.MIN_VALUE : Number.MAX_VALUE];\n const fp = this.fp = [0];\n const tp = this.tp = [0];\n\n var nPos = 0;\n var nNeg = 0;\n\n var currentPred = predP[0].pred;\n var nTp = 0;\n var nFp = 0;\n for (var i = 0; i < predP.length; i++) {\n if (predP[i].pred !== currentPred) {\n cutoffs.push(currentPred);\n fp.push(nFp);\n tp.push(nTp);\n currentPred = predP[i].pred;\n }\n if (predP[i].targ) {\n nPos++;\n nTp++;\n } else {\n nNeg++;\n nFp++;\n }\n }\n cutoffs.push(currentPred);\n fp.push(nFp);\n tp.push(nTp);\n\n const l = cutoffs.length;\n const fn = this.fn = new Array(l);\n const tn = this.tn = new Array(l);\n const nPosPred = this.nPosPred = new Array(l);\n const nNegPred = this.nNegPred = new Array(l);\n\n for (var i = 0; i < l; i++) {\n fn[i] = nPos - tp[i];\n tn[i] = nNeg - fp[i];\n\n nPosPred[i] = tp[i] + fp[i];\n nNegPred[i] = tn[i] + fn[i];\n }\n\n this.nPos = nPos;\n this.nNeg = nNeg;\n this.nSamples = nPos + nNeg;\n }\n\n /**\n * Computes a measure from the prediction object.\n *\n * Many measures are available and can be combined :\n * To create a ROC curve, you need fpr and tpr\n * To create a DET curve, you need fnr and fpr\n * To create a Lift chart, you need rpp and lift\n *\n * Possible measures are : threshold (Threshold), acc (Accuracy), err (Error rate),\n * fpr (False positive rate), tpr (True positive rate), fnr (False negative rate), tnr (True negative rate), ppv (Positive predictive value),\n * npv (Negative predictive value), pcfall (Prediction-conditioned fallout), pcmiss (Prediction-conditioned miss), lift (Lift value), rpp (Rate of positive predictions), rnp (Rate of negative predictions)\n *\n * @param measure - The short name of the measure\n *\n * @return [number]\n */\n getMeasure(measure) {\n if (typeof measure !== 'string') {\n throw new Error('No measure specified');\n }\n if (!measures[measure]) {\n throw new Error(`The specified measure (${measure}) does not exist`);\n }\n return measures[measure](this);\n }\n\n /**\n * Returns the area under the ROC curve\n */\n getAURC() {\n const l = this.cutoffs.length;\n const x = new Array(l);\n const y = new Array(l);\n for (var i = 0; i < l; i++) {\n x[i] = this.fp[i] / this.nNeg;\n y[i] = this.tp[i] / this.nPos;\n }\n var auc = 0;\n for (i = 1; i < l; i++) {\n auc += 0.5 * (x[i] - x[i - 1]) * (y[i] + y[i - 1]);\n }\n return auc;\n }\n\n /**\n * Returns the area under the DET curve\n */\n getAUDC() {\n const l = this.cutoffs.length;\n const x = new Array(l);\n const y = new Array(l);\n for (var i = 0; i < l; i++) {\n x[i] = this.fn[i] / this.nPos;\n y[i] = this.fp[i] / this.nNeg;\n }\n var auc = 0;\n for (i = 1; i < l; i++) {\n auc += 0.5 * (x[i] + x[i - 1]) * (y[i] - y[i - 1]);\n }\n return auc;\n }\n\n getDistribution(options) {\n options = options || {};\n var cutLength = this.cutoffs.length;\n var cutLow = options.xMin || Math.floor(this.cutoffs[cutLength - 1] * 100) / 100;\n var cutHigh = options.xMax || Math.ceil(this.cutoffs[1] * 100) / 100;\n var interval = options.interval || Math.floor(((cutHigh - cutLow) / 20 * 10000000) - 1) / 10000000; // Trick to avoid the precision problem of float numbers\n\n var xLabels = [];\n var interValues = [];\n var intraValues = [];\n var interCumPercent = [];\n var intraCumPercent = [];\n\n var nTP = this.tp[cutLength - 1], currentTP = 0;\n var nFP = this.fp[cutLength - 1], currentFP = 0;\n\n for (var i = cutLow, j = (cutLength - 1); i <= cutHigh; i += interval) {\n while (this.cutoffs[j] < i)\n j--;\n\n xLabels.push(i);\n\n var thisTP = nTP - currentTP - this.tp[j];\n var thisFP = nFP - currentFP - this.fp[j];\n\n currentTP += thisTP;\n currentFP += thisFP;\n\n interValues.push(thisFP);\n intraValues.push(thisTP);\n\n interCumPercent.push(100 - (nFP - this.fp[j]) / nFP * 100);\n intraCumPercent.push(100 - (nTP - this.tp[j]) / nTP * 100);\n }\n\n return {\n xLabels: xLabels,\n interValues: interValues,\n intraValues: intraValues,\n interCumPercent: interCumPercent,\n intraCumPercent: intraCumPercent\n };\n }\n}\n\nPerformance.names = {\n acc: 'Accuracy',\n err: 'Error rate',\n fpr: 'False positive rate',\n tpr: 'True positive rate',\n fnr: 'False negative rate',\n tnr: 'True negative rate',\n ppv: 'Positive predictive value',\n npv: 'Negative predictive value',\n pcfall: 'Prediction-conditioned fallout',\n pcmiss: 'Prediction-conditioned miss',\n lift: 'Lift value',\n rpp: 'Rate of positive predictions',\n rnp: 'Rate of negative predictions',\n threshold: 'Threshold'\n};\n\nmodule.exports = Performance;\n","'use strict';\n\nvar defaultOptions = {\n size: 1,\n value: 0\n};\n\n/**\n * Case when the entry is an array\n * @param data\n * @param options\n * @returns {Array}\n */\nfunction arrayCase(data, options) {\n var len = data.length;\n if (typeof options.size === 'number') {\n options.size = [options.size, options.size];\n }\n\n var cond = len + options.size[0] + options.size[1];\n\n var output;\n if (options.output) {\n if (options.output.length !== cond) {\n throw new RangeError('Wrong output size');\n }\n output = options.output;\n } else {\n output = new Array(cond);\n }\n\n var i;\n if (options.value === 'circular') {\n for (i = 0; i < cond; i++) {\n if (i < options.size[0]) {\n output[i] = data[(len - (options.size[0] % len) + i) % len];\n } else if (i < options.size[0] + len) {\n output[i] = data[i - options.size[0]];\n } else {\n output[i] = data[(i - options.size[0]) % len];\n }\n }\n } else if (options.value === 'replicate') {\n for (i = 0; i < cond; i++) {\n if (i < options.size[0]) output[i] = data[0];\n else if (i < options.size[0] + len) output[i] = data[i - options.size[0]];\n else output[i] = data[len - 1];\n }\n } else if (options.value === 'symmetric') {\n if (options.size[0] > len || options.size[1] > len) {\n throw new RangeError(\n 'expanded value should not be bigger than the data length'\n );\n }\n for (i = 0; i < cond; i++) {\n if (i < options.size[0]) output[i] = data[options.size[0] - 1 - i];\n else if (i < options.size[0] + len) output[i] = data[i - options.size[0]];\n else output[i] = data[2 * len + options.size[0] - i - 1];\n }\n } else {\n for (i = 0; i < cond; i++) {\n if (i < options.size[0]) output[i] = options.value;\n else if (i < options.size[0] + len) output[i] = data[i - options.size[0]];\n else output[i] = options.value;\n }\n }\n\n return output;\n}\n\n/**\n * Case when the entry is a matrix\n * @param data\n * @param options\n * @returns {Array}\n */\nfunction matrixCase(data, options) {\n // var row = data.length;\n // var col = data[0].length;\n if (options.size[0] === undefined) {\n options.size = [options.size, options.size, options.size, options.size];\n }\n throw new Error('matrix not supported yet, sorry');\n}\n\n/**\n * Pads and array\n * @param {Array } data\n * @param {object} options\n */\nfunction padArray(data, options) {\n options = Object.assign({}, defaultOptions, options);\n if (Array.isArray(data)) {\n if (Array.isArray(data[0])) return matrixCase(data, options);\n else return arrayCase(data, options);\n } else {\n throw new TypeError('data should be an array');\n }\n}\n\nmodule.exports = padArray;\n","'use strict';\n\nconst { Matrix, MatrixTransposeView, inverse } = require('ml-matrix');\nconst padArray = require('ml-pad-array');\n\nconst defaultOptions = {\n windowSize: 5,\n derivative: 1,\n polynomial: 2,\n pad: 'none',\n padValue: 'replicate'\n};\n\n/**\n * Savitzky-Golay filter\n * @param {Array } data\n * @param {number} h\n * @param {Object} options\n * @returns {Array}\n */\nfunction SavitzkyGolay(data, h, options) {\n options = Object.assign({}, defaultOptions, options);\n if (\n options.windowSize % 2 === 0 ||\n options.windowSize < 5 ||\n !Number.isInteger(options.windowSize)\n ) {\n throw new RangeError(\n 'Invalid window size (should be odd and at least 5 integer number)'\n );\n }\n if (options.derivative < 0 || !Number.isInteger(options.derivative)) {\n throw new RangeError('Derivative should be a positive integer');\n }\n if (options.polynomial < 1 || !Number.isInteger(options.polynomial)) {\n throw new RangeError('Polynomial should be a positive integer');\n }\n\n var C, norm;\n var step = Math.floor(options.windowSize / 2);\n\n if (options.pad === 'pre') {\n data = padArray(data, { size: step, value: options.padValue });\n }\n\n var ans = new Array(data.length - 2 * step);\n\n if (\n options.windowSize === 5 &&\n options.polynomial === 2 &&\n (options.derivative === 1 || options.derivative === 2)\n ) {\n if (options.derivative === 1) {\n C = [-2, -1, 0, 1, 2];\n norm = 10;\n } else {\n C = [2, -1, -2, -1, 2];\n norm = 7;\n }\n } else {\n var J = Matrix.ones(options.windowSize, options.polynomial + 1);\n var inic = -(options.windowSize - 1) / 2;\n for (var i = 0; i < J.rows; i++) {\n for (var j = 0; j < J.columns; j++) {\n if (inic + 1 !== 0 || j !== 0) J.set(i, j, Math.pow(inic + i, j));\n }\n }\n var Jtranspose = new MatrixTransposeView(J);\n var Jinv = inverse(Jtranspose.mmul(J));\n C = Jinv.mmul(Jtranspose);\n C = C.getRow(options.derivative);\n norm = 1;\n }\n var det = norm * Math.pow(h, options.derivative);\n for (var k = step; k < data.length - step; k++) {\n var d = 0;\n for (var l = 0; l < C.length; l++) d += (C[l] * data[l + k - step]) / det;\n ans[k - step] = d;\n }\n\n if (options.pad === 'post') {\n ans = padArray(ans, { size: step, value: options.padValue });\n }\n\n return ans;\n}\n\nmodule.exports = SavitzkyGolay;\n","// auxiliary file to create the 256 look at table elements\n\nvar ans = new Array(256);\nfor (var i = 0; i < 256; i++) {\n var num = i;\n var c = 0;\n while (num) {\n num = num & (num - 1);\n c++;\n }\n ans[i] = c;\n}\n\nmodule.exports = ans;","'use strict';\n\nvar eightBits = require('./creator');\n\n/**\n * Count the number of true values in an array\n * @param {Array} arr\n * @return {number}\n */\nfunction count(arr) {\n var c = 0;\n for (var i = 0; i < arr.length; i++) {\n c += eightBits[arr[i] & 0xff] + eightBits[(arr[i] >> 8) & 0xff] + eightBits[(arr[i] >> 16) & 0xff] + eightBits[(arr[i] >> 24) & 0xff];\n }\n return c;\n}\n\n/**\n * Logical AND operation\n * @param {Array} arr1\n * @param {Array} arr2\n * @return {Array}\n */\nfunction and(arr1, arr2) {\n var ans = new Array(arr1.length);\n for (var i = 0; i < arr1.length; i++)\n ans[i] = arr1[i] & arr2[i];\n return ans;\n}\n\n/**\n * Logical OR operation\n * @param {Array} arr1\n * @param {Array} arr2\n * @return {Array}\n */\nfunction or(arr1, arr2) {\n var ans = new Array(arr1.length);\n for (var i = 0; i < arr1.length; i++)\n ans[i] = arr1[i] | arr2[i];\n return ans;\n}\n\n/**\n * Logical XOR operation\n * @param {Array} arr1\n * @param {Array} arr2\n * @return {Array}\n */\nfunction xor(arr1, arr2) {\n var ans = new Array(arr1.length);\n for (var i = 0; i < arr1.length; i++)\n ans[i] = arr1[i] ^ arr2[i];\n return ans;\n}\n\n/**\n * Logical NOT operation\n * @param {Array} arr\n * @return {Array}\n */\nfunction not(arr) {\n var ans = new Array(arr.length);\n for (var i = 0; i < ans.length; i++)\n ans[i] = ~arr[i];\n return ans;\n}\n\n/**\n * Gets the n value of array arr\n * @param {Array} arr\n * @param {number} n\n * @return {boolean}\n */\nfunction getBit(arr, n) {\n var index = n >> 5; // Same as Math.floor(n/32)\n var mask = 1 << (31 - n % 32);\n return Boolean(arr[index] & mask);\n}\n\n/**\n * Sets the n value of array arr to the value val\n * @param {Array} arr\n * @param {number} n\n * @param {boolean} val\n * @return {Array}\n */\nfunction setBit(arr, n, val) {\n var index = n >> 5; // Same as Math.floor(n/32)\n var mask = 1 << (31 - n % 32);\n if (val)\n arr[index] = mask | arr[index];\n else\n arr[index] = ~mask & arr[index];\n return arr;\n}\n\n/**\n * Translates an array of numbers to a string of bits\n * @param {Array} arr\n * @returns {string}\n */\nfunction toBinaryString(arr) {\n var str = '';\n for (var i = 0; i < arr.length; i++) {\n var obj = (arr[i] >>> 0).toString(2);\n str += '00000000000000000000000000000000'.substr(obj.length) + obj;\n }\n return str;\n}\n\n/**\n * Creates an array of numbers based on a string of bits\n * @param {string} str\n * @returns {Array}\n */\nfunction parseBinaryString(str) {\n var len = str.length / 32;\n var ans = new Array(len);\n for (var i = 0; i < len; i++) {\n ans[i] = parseInt(str.substr(i*32, 32), 2) | 0;\n }\n return ans;\n}\n\n/**\n * Translates an array of numbers to a hex string\n * @param {Array} arr\n * @returns {string}\n */\nfunction toHexString(arr) {\n var str = '';\n for (var i = 0; i < arr.length; i++) {\n var obj = (arr[i] >>> 0).toString(16);\n str += '00000000'.substr(obj.length) + obj;\n }\n return str;\n}\n\n/**\n * Creates an array of numbers based on a hex string\n * @param {string} str\n * @returns {Array}\n */\nfunction parseHexString(str) {\n var len = str.length / 8;\n var ans = new Array(len);\n for (var i = 0; i < len; i++) {\n ans[i] = parseInt(str.substr(i*8, 8), 16) | 0;\n }\n return ans;\n}\n\n/**\n * Creates a human readable string of the array\n * @param {Array} arr\n * @returns {string}\n */\nfunction toDebug(arr) {\n var binary = toBinaryString(arr);\n var str = '';\n for (var i = 0; i < arr.length; i++) {\n str += '0000'.substr((i * 32).toString(16).length) + (i * 32).toString(16) + ':';\n for (var j = 0; j < 32; j += 4) {\n str += ' ' + binary.substr(i * 32 + j, 4);\n }\n if (i < arr.length - 1) str += '\\n';\n }\n return str\n}\n\nmodule.exports = {\n count: count,\n and: and,\n or: or,\n xor: xor,\n not: not,\n getBit: getBit,\n setBit: setBit,\n toBinaryString: toBinaryString,\n parseBinaryString: parseBinaryString,\n toHexString: toHexString,\n parseHexString: parseHexString,\n toDebug: toDebug\n};\n","import isArray from 'is-any-array';\n\n/**\n * Computes the mode of the given values\n * @param {Array} input\n * @return {number}\n */\n\nfunction mode(input) {\n if (!isArray(input)) {\n throw new TypeError('input must be an array');\n }\n\n if (input.length === 0) {\n throw new TypeError('input must not be empty');\n }\n\n var maxValue = 0;\n var maxCount = 0;\n var count = 0;\n var counts = {};\n\n for (var i = 0; i < input.length; ++i) {\n var element = input[i];\n count = counts[element];\n\n if (count) {\n counts[element]++;\n count++;\n } else {\n counts[element] = count = 1;\n }\n\n if (count > maxCount) {\n maxCount = count;\n maxValue = input[i];\n }\n }\n\n return maxValue;\n}\n\nexport default mode;\n","/**\n * Computes the norm of the given values\n * @param {Array} input\n * @param {object} [options={}]\n * @param {string} [algorithm='absolute']\n * @return {number}\n */\nfunction norm(input) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var _options$algorithm = options.algorithm,\n algorithm = _options$algorithm === void 0 ? 'absolute' : _options$algorithm;\n\n if (!Array.isArray(input)) {\n throw new Error('input must be an array');\n }\n\n if (input.length === 0) {\n throw new Error('input must not be empty');\n }\n\n switch (algorithm.toLowerCase()) {\n case 'absolute':\n var sum = absoluteSum(input);\n if (sum === 0) return input.slice(0);\n return input.map(function (element) {\n return element / sum;\n });\n\n default:\n throw new Error(\"norm: unknown algorithm: \".concat(algorithm));\n }\n}\n\nfunction absoluteSum(input) {\n var sum = 0;\n\n for (var i = 0; i < input.length; i++) {\n sum += Math.abs(input[i]);\n }\n\n return sum;\n}\n\nexport default norm;\n","import isArray from 'is-any-array';\n\nfunction _typeof(obj) {\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function (obj) {\n return typeof obj;\n };\n } else {\n _typeof = function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\n/**\n * Fill an array with sequential numbers\n * @param {Array} [input] - optional destination array (if not provided a new array will be created)\n * @param {object} [options={}]\n * @param {number} [options.from=0] - first value in the array\n * @param {number} [options.to=10] - last value in the array\n * @param {number} [options.size=input.length] - size of the array (if not provided calculated from step)\n * @param {number} [options.step] - if not provided calculated from size\n * @return {Array}\n */\n\nfunction sequentialFill() {\n var input = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n if (_typeof(input) === 'object' && !isArray(input)) {\n options = input;\n input = [];\n }\n\n if (!isArray(input)) {\n throw new TypeError('input must be an array');\n }\n\n var _options = options,\n _options$from = _options.from,\n from = _options$from === void 0 ? 0 : _options$from,\n _options$to = _options.to,\n to = _options$to === void 0 ? 10 : _options$to,\n _options$size = _options.size,\n size = _options$size === void 0 ? input.length : _options$size,\n step = _options.step;\n\n if (size && step) {\n throw new Error('step is defined by the array size');\n }\n\n if (!size) {\n if (step) {\n size = Math.floor((to - from) / step) + 1;\n } else {\n size = to - from + 1;\n }\n }\n\n if (!step && size) {\n step = (to - from) / (size - 1);\n }\n\n if (Array.isArray(input)) {\n input.length = 0; // only works with normal array\n\n for (var i = 0; i < size; i++) {\n input.push(from);\n from += step;\n }\n } else {\n if (input.length !== size) {\n throw new Error('sequentialFill typed array must have the correct length');\n }\n\n for (var _i = 0; _i < size; _i++) {\n input[_i] = from;\n from += step;\n }\n }\n\n return input;\n}\n\nexport default sequentialFill;\n","import arrayMean from 'ml-array-mean';\nimport isArray from 'is-any-array';\n\n/**\n * Computes the variance of the given values\n * @param {Array} values\n * @param {object} [options]\n * @param {boolean} [options.unbiased = true] - if true, divide by (n-1); if false, divide by n.\n * @param {number} [options.mean = arrayMean] - precalculated mean, if any.\n * @return {number}\n */\n\nfunction variance(values) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n if (!isArray(values)) {\n throw new TypeError('input must be an array');\n }\n\n var _options$unbiased = options.unbiased,\n unbiased = _options$unbiased === void 0 ? true : _options$unbiased,\n _options$mean = options.mean,\n mean = _options$mean === void 0 ? arrayMean(values) : _options$mean;\n var sqrError = 0;\n\n for (var i = 0; i < values.length; i++) {\n var x = values[i] - mean;\n sqrError += x * x;\n }\n\n if (unbiased) {\n return sqrError / (values.length - 1);\n } else {\n return sqrError / values.length;\n }\n}\n\nexport default variance;\n","import variance from 'ml-array-variance';\n\n/**\n * Computes the standard deviation of the given values\n * @param {Array} values\n * @param {object} [options]\n * @param {boolean} [options.unbiased = true] - if true, divide by (n-1); if false, divide by n.\n * @param {number} [options.mean = arrayMean] - precalculated mean, if any.\n * @return {number}\n */\n\nfunction standardDeviation(values) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n return Math.sqrt(variance(values, options));\n}\n\nexport default standardDeviation;\n","/**\n * Merge abscissa values if the ordinate value is in a list of centroids\n * @param {object} originalPoints\n * @param {Array} originalPoints.x\n * @param {Array} originalPoints.y\n * @param {Array} centroids\n * @param {object} [options]\n * @param {number} [options.window = 0.01] - has to be a positive number\n * @return {{x: Array, y: Array}}\n */\nexport default function mergeByCentroids(\n originalPoints,\n centroids,\n options = {}\n) {\n const { window = 0.01 } = options;\n\n var mergedPoints = {\n x: centroids.slice(),\n y: new Array(centroids.length).fill(0)\n };\n\n var originalIndex = 0;\n var mergedIndex = 0;\n while (\n originalIndex < originalPoints.x.length &&\n mergedIndex < centroids.length\n ) {\n var diff = originalPoints.x[originalIndex] - centroids[mergedIndex];\n if (Math.abs(diff) < window) {\n mergedPoints.y[mergedIndex] += originalPoints.y[originalIndex++];\n } else if (diff < 0) {\n originalIndex++;\n } else {\n mergedIndex++;\n }\n }\n\n return mergedPoints;\n}\n","import binarySearch from 'binary-search';\nimport { ascending, descending } from 'num-sort';\n\n/**\n *\n * @param {object} points\n * @param {Array} originalPoints.x\n * @param {Array} originalPoints.y\n * @param {*} options\n * @return {{x: Array, y: Array}}\n */\nexport default function closestX(points, options) {\n const { x, y } = points;\n const { target = x[0], reverse = false } = options;\n\n let index;\n if (reverse) {\n index = binarySearch(x, target, descending);\n } else {\n index = binarySearch(x, target, ascending);\n }\n\n if (index >= 0) {\n return {\n x: x[index],\n y: y[index]\n };\n } else {\n index = ~index;\n if (\n (index !== 0 && Math.abs(x[index] - target) > 0.5) ||\n index === x.length\n ) {\n return {\n x: x[index - 1],\n y: y[index - 1]\n };\n } else {\n return {\n x: x[index],\n y: y[index]\n };\n }\n }\n}\n","/**\n * Merge abscissas values on similar ordinates and weight the group of abscissas\n * @param {object} points\n * @param {Array} points.x - sorted abscissas values\n * @param {Array} points.y - ordinates values\n * @param {object} [options]\n * @param {number} [options.groupWidth = 0.001] - window for abscissas to merge\n * @return {{x: Array, y: Array}}\n */\nexport default function maxMerge(points, options = {}) {\n const { x, y } = points;\n const { groupWidth = 0.001 } = options;\n\n var merged = { x: [], y: [] };\n var maxAbscissa = { x: [], y: [] };\n var size = 0;\n var index = 0;\n\n while (index < x.length) {\n if (size === 0 || x[index] - merged.x[size - 1] > groupWidth) {\n maxAbscissa.x.push(x[index]);\n maxAbscissa.y.push(y[index]);\n merged.x.push(x[index]);\n merged.y.push(y[index]);\n index++;\n size++;\n } else {\n if (y[index] > maxAbscissa.y[size - 1]) {\n maxAbscissa.x[size - 1] = x[index];\n maxAbscissa.y[size - 1] = y[index];\n }\n merged.x[size - 1] = x[index];\n merged.y[size - 1] += y[index];\n index++;\n }\n }\n\n merged.x = maxAbscissa.x.slice();\n\n return merged;\n}\n","import binarySearch from 'binary-search';\nimport { ascending, descending } from 'num-sort';\n\n/**\n * @param {object} points\n * @param {Array} points.x - sorted abscissas values\n * @param {Array} points.y - ordinates values\n * @param {object} [options]\n * @param {object} [options.from = {index: 0}]\n * @param {object} [options.to = {index: x.length-1}]\n * @param {boolean} [options.reverse = false]\n * @return {{index: number, value: number}}\n */\nexport default function maxY(points, options = {}) {\n const { x, y } = points;\n let {\n from = { index: 0 },\n to = { index: x.length },\n reverse = false\n } = options;\n\n if (from.value !== undefined && from.index === undefined) {\n from.index = calculateIndex(from.value, x, reverse);\n }\n\n if (to.value !== undefined && to.index === undefined) {\n to.index = calculateIndex(to.value, x, reverse);\n }\n\n var currentMax = Number.MIN_VALUE;\n var currentIndex;\n for (var i = from.index; i < to.index; i++) {\n if (currentMax < y[i]) {\n currentMax = y[i];\n currentIndex = i;\n }\n }\n\n return {\n index: currentIndex,\n value: currentMax\n };\n}\n\n/**\n * @param {number} value\n * @param {Array} x\n * @param {boolean} reverse\n * @return {number} index of the value in the array\n */\nfunction calculateIndex(value, x, reverse) {\n let index;\n if (reverse) {\n index = binarySearch(x, value, descending);\n } else {\n index = binarySearch(x, value, ascending);\n }\n\n if (index < 0) {\n throw new Error(`the value ${value} doesn't belongs to the abscissa value`);\n }\n\n return index;\n}\n","export default function sortX(points, options = {}) {\n const { x, y } = points;\n const { reverse = false } = options;\n\n var sortFunc;\n if (!reverse) {\n sortFunc = (a, b) => a.x - b.x;\n } else {\n sortFunc = (a, b) => b.x - a.x;\n }\n\n var grouped = x\n .map((val, index) => ({\n x: val,\n y: y[index]\n }))\n .sort(sortFunc);\n\n var response = { x: x.slice(), y: y.slice() };\n for (var i = 0; i < x.length; i++) {\n response.x[i] = grouped[i].x;\n response.y[i] = grouped[i].y;\n }\n\n return response;\n}\n","\n/**\n * In place modification of the 2 arrays to make X unique and sum the Y if X has the same value\n * @param {object} [points={}] : Object of points contains property x (an array) and y (an array)\n * @return points\n */\n\nexport default function uniqueX(points = {}) {\n const { x, y } = points;\n if (x.length < 2) return;\n if (x.length !== y.length) {\n throw new Error('The X and Y arrays mush have the same length');\n }\n\n let current = x[0];\n let counter = 0;\n\n for (let i = 1; i < x.length; i++) {\n if (current !== x[i]) {\n counter++;\n current = x[i];\n x[counter] = x[i];\n if (i !== counter) {\n y[counter] = 0;\n }\n }\n if (i !== counter) {\n y[counter] += y[i];\n }\n }\n\n x.length = counter + 1;\n y.length = counter + 1;\n}\n","/**\n * Merge abscissas values on similar ordinates and weight the group of abscissas\n * @param {object} points\n * @param {Array} points.x - sorted abscissas values\n * @param {Array} points.y - ordinates values\n * @param {object} [options]\n * @param {number} [options.groupWidth = 0.001] - window for abscissas to merge\n * @return {{x: Array, y: Array}}\n */\nexport default function weightedMerge(points, options = {}) {\n const { x, y } = points;\n const { groupWidth = 0.001 } = options;\n\n var merged = { x: [], y: [] };\n var weightedAbscissa = { x: [], y: [] };\n var size = 0;\n var index = 0;\n\n while (index < x.length) {\n if (size === 0 || x[index] - merged.x[size - 1] > groupWidth) {\n weightedAbscissa.x.push(x[index] * y[index]);\n weightedAbscissa.y.push(y[index]);\n merged.x.push(x[index]);\n merged.y.push(y[index]);\n index++;\n size++;\n } else {\n weightedAbscissa.x[size - 1] += x[index] * y[index];\n weightedAbscissa.y[size - 1] += y[index];\n merged.x[size - 1] = x[index];\n merged.y[size - 1] += y[index];\n index++;\n }\n }\n\n for (var i = 0; i < merged.x.length; i++) {\n merged.x[i] = weightedAbscissa.x[i] / weightedAbscissa.y[i];\n }\n\n return merged;\n}\n","/**\n * Function that calculates the integral of the line between two\n * x-coordinates, given the slope and intercept of the line.\n * @param {number} x0\n * @param {number} x1\n * @param {number} slope\n * @param {number} intercept\n * @return {number} integral value.\n */\nexport default function integral(x0, x1, slope, intercept) {\n return (\n 0.5 * slope * x1 * x1 +\n intercept * x1 -\n (0.5 * slope * x0 * x0 + intercept * x0)\n );\n}\n","import integral from './integral';\n\n/**\n * function that retrieves the getEquallySpacedData with the variant \"smooth\"\n *\n * @param {Array} x\n * @param {Array} y\n * @param {number} from - Initial point\n * @param {number} to - Final point\n * @param {number} numberOfPoints\n * @return {Array} - Array of y's equally spaced with the variant \"smooth\"\n */\nexport default function equallySpacedSmooth(x, y, from, to, numberOfPoints) {\n var xLength = x.length;\n\n var step = (to - from) / (numberOfPoints - 1);\n var halfStep = step / 2;\n\n var output = new Array(numberOfPoints);\n\n var initialOriginalStep = x[1] - x[0];\n var lastOriginalStep = x[xLength - 1] - x[xLength - 2];\n\n // Init main variables\n var min = from - halfStep;\n var max = from + halfStep;\n\n var previousX = Number.MIN_VALUE;\n var previousY = 0;\n var nextX = x[0] - initialOriginalStep;\n var nextY = 0;\n\n var currentValue = 0;\n var slope = 0;\n var intercept = 0;\n var sumAtMin = 0;\n var sumAtMax = 0;\n\n var i = 0; // index of input\n var j = 0; // index of output\n\n function getSlope(x0, y0, x1, y1) {\n return (y1 - y0) / (x1 - x0);\n }\n\n main: while (true) {\n if (previousX <= min && min <= nextX) {\n add = integral(0, min - previousX, slope, previousY);\n sumAtMin = currentValue + add;\n }\n\n while (nextX - max >= 0) {\n // no overlap with original point, just consume current value\n var add = integral(0, max - previousX, slope, previousY);\n sumAtMax = currentValue + add;\n\n output[j++] = (sumAtMax - sumAtMin) / step;\n\n if (j === numberOfPoints) {\n break main;\n }\n\n min = max;\n max += step;\n sumAtMin = sumAtMax;\n }\n\n currentValue += integral(previousX, nextX, slope, intercept);\n\n previousX = nextX;\n previousY = nextY;\n\n if (i < xLength) {\n nextX = x[i];\n nextY = y[i];\n i++;\n } else if (i === xLength) {\n nextX += lastOriginalStep;\n nextY = 0;\n }\n\n slope = getSlope(previousX, previousY, nextX, nextY);\n intercept = -slope * previousX + previousY;\n }\n\n return output;\n}\n","/**\n * function that retrieves the getEquallySpacedData with the variant \"slot\"\n *\n * @param {Array} x\n * @param {Array} y\n * @param {number} from - Initial point\n * @param {number} to - Final point\n * @param {number} numberOfPoints\n * @return {Array} - Array of y's equally spaced with the variant \"slot\"\n */\nexport default function equallySpacedSlot(x, y, from, to, numberOfPoints) {\n var xLength = x.length;\n\n var step = (to - from) / (numberOfPoints - 1);\n var halfStep = step / 2;\n var lastStep = x[x.length - 1] - x[x.length - 2];\n\n var start = from - halfStep;\n var output = new Array(numberOfPoints);\n\n // Init main variables\n var min = start;\n var max = start + step;\n\n var previousX = -Number.MAX_VALUE;\n var previousY = 0;\n var nextX = x[0];\n var nextY = y[0];\n var frontOutsideSpectra = 0;\n var backOutsideSpectra = true;\n\n var currentValue = 0;\n\n // for slot algorithm\n var currentPoints = 0;\n\n var i = 1; // index of input\n var j = 0; // index of output\n\n main: while (true) {\n if (previousX >= nextX) throw new Error('x must be an increasing serie');\n while (previousX - max > 0) {\n // no overlap with original point, just consume current value\n if (backOutsideSpectra) {\n currentPoints++;\n backOutsideSpectra = false;\n }\n\n output[j] = currentPoints <= 0 ? 0 : currentValue / currentPoints;\n j++;\n\n if (j === numberOfPoints) {\n break main;\n }\n\n min = max;\n max += step;\n currentValue = 0;\n currentPoints = 0;\n }\n\n if (previousX > min) {\n currentValue += previousY;\n currentPoints++;\n }\n\n if (previousX === -Number.MAX_VALUE || frontOutsideSpectra > 1) {\n currentPoints--;\n }\n\n previousX = nextX;\n previousY = nextY;\n\n if (i < xLength) {\n nextX = x[i];\n nextY = y[i];\n i++;\n } else {\n nextX += lastStep;\n nextY = 0;\n frontOutsideSpectra++;\n }\n }\n\n return output;\n}\n","export default function getZones(from, to, numberOfPoints, exclusions = []) {\n if (from > to) {\n [from, to] = [to, from];\n }\n\n // in exclusions from and to have to be defined\n exclusions = exclusions.filter(\n (exclusion) => exclusion.from !== undefined && exclusion.to !== undefined\n );\n\n exclusions = JSON.parse(JSON.stringify(exclusions));\n // we ensure that from before to\n exclusions.forEach((exclusion) => {\n if (exclusion.from > exclusion.to) {\n [exclusion.to, exclusion.from] = [exclusion.from, exclusion.to];\n }\n });\n\n exclusions.sort((a, b) => a.from - b.from);\n\n // we will rework the exclusions in order to remove overlap and outside range (from / to)\n exclusions.forEach((exclusion) => {\n if (exclusion.from < from) exclusion.from = from;\n if (exclusion.to > to) exclusion.to = to;\n });\n for (let i = 0; i < exclusions.length - 1; i++) {\n if (exclusions[i].to > exclusions[i + 1].from) {\n exclusions[i].to = exclusions[i + 1].from;\n }\n }\n exclusions = exclusions.filter((exclusion) => exclusion.from < exclusion.to);\n\n if (!exclusions || exclusions.length === 0) {\n return [{ from, to, numberOfPoints }];\n }\n\n // need to deal with overlapping exclusions and out of bound exclusions\n\n let toRemove = exclusions.reduce(\n (previous, exclusion) => (previous += exclusion.to - exclusion.from),\n 0\n );\n let total = to - from;\n let unitsPerPoint = (total - toRemove) / numberOfPoints;\n let zones = [];\n let currentFrom = from;\n let totalPoints = 0;\n for (let exclusion of exclusions) {\n let currentNbPoints = Math.round(\n (exclusion.from - currentFrom) / unitsPerPoint\n );\n totalPoints += currentNbPoints;\n if (currentNbPoints > 0) {\n zones.push({\n from: currentFrom,\n to: exclusion.from,\n numberOfPoints: currentNbPoints\n });\n }\n\n currentFrom = exclusion.to;\n }\n if (numberOfPoints - totalPoints > 0) {\n zones.push({\n from: currentFrom,\n to: to,\n numberOfPoints: numberOfPoints - totalPoints\n });\n }\n\n return zones;\n}\n","import sequentialFill from 'ml-array-sequential-fill';\n\nimport equallySpacedSmooth from './equallySpacedSmooth';\nimport equallySpacedSlot from './equallySpacedSlot';\nimport getZones from './getZones';\n\n/**\n * Function that returns a Number array of equally spaced numberOfPoints\n * containing a representation of intensities of the spectra arguments x\n * and y.\n *\n * The options parameter contains an object in the following form:\n * from: starting point\n * to: last point\n * numberOfPoints: number of points between from and to\n * variant: \"slot\" or \"smooth\" - smooth is the default option\n *\n * The slot variant consist that each point in the new array is calculated\n * averaging the existing points between the slot that belongs to the current\n * value. The smooth variant is the same but takes the integral of the range\n * of the slot and divide by the step size between two points in the new array.\n *\n * @param {object} [arrayXY={}] - object containing 2 properties x and y (both an array)\n * @param {object} [options={}]\n * @param {number} [options.from=x[0]]\n * @param {number} [options.to=x[x.length-1]]\n * @param {string} [options.variant='smooth']\n * @param {number} [options.numberOfPoints=100]\n * @param {Array} [options.exclusions=[]] array of from / to that should be skipped for the generation of the points\n * @return {object} new object with x / y array with the equally spaced data.\n */\n\nexport default function equallySpaced(arrayXY = {}, options = {}) {\n let { x, y } = arrayXY;\n let xLength = x.length;\n let reverse = false;\n if (x.length > 1 && x[0] > x[1]) {\n x = x.slice().reverse();\n y = y.slice().reverse();\n reverse = true;\n }\n\n let {\n from = x[0],\n to = x[xLength - 1],\n variant = 'smooth',\n numberOfPoints = 100,\n exclusions = []\n } = options;\n\n if (xLength !== y.length) {\n throw new RangeError(\"the x and y vector doesn't have the same size.\");\n }\n\n if (typeof from !== 'number' || isNaN(from)) {\n throw new RangeError(\"'from' option must be a number\");\n }\n\n if (typeof to !== 'number' || isNaN(to)) {\n throw new RangeError(\"'to' option must be a number\");\n }\n\n if (typeof numberOfPoints !== 'number' || isNaN(numberOfPoints)) {\n throw new RangeError(\"'numberOfPoints' option must be a number\");\n }\n\n let zones = getZones(from, to, numberOfPoints, exclusions);\n\n let xResult = [];\n let yResult = [];\n for (let zone of zones) {\n let zoneResult = processZone(\n x,\n y,\n zone.from,\n zone.to,\n zone.numberOfPoints,\n variant,\n reverse\n );\n xResult.push(...zoneResult.x);\n yResult.push(...zoneResult.y);\n }\n\n if (reverse) {\n if (from < to) {\n return { x: xResult.reverse(), y: yResult.reverse() };\n } else {\n return { x: xResult, y: yResult };\n }\n } else {\n if (from < to) {\n return { x: xResult, y: yResult };\n } else {\n return { x: xResult.reverse(), y: yResult.reverse() };\n }\n }\n}\n\nfunction processZone(x, y, from, to, numberOfPoints, variant) {\n if (numberOfPoints < 1) {\n throw new RangeError('the number of points must be at least 1');\n }\n\n var output =\n variant === 'slot'\n ? equallySpacedSlot(x, y, from, to, numberOfPoints)\n : equallySpacedSmooth(x, y, from, to, numberOfPoints);\n\n return {\n x: sequentialFill({\n from,\n to,\n size: numberOfPoints\n }),\n y: output\n };\n}\n","export default function getZones(from, to, exclusions = []) {\n if (from > to) {\n [from, to] = [to, from];\n }\n\n // in exclusions from and to have to be defined\n exclusions = exclusions.filter(\n (exclusion) => exclusion.from !== undefined && exclusion.to !== undefined\n );\n\n exclusions = JSON.parse(JSON.stringify(exclusions));\n // we ensure that from before to\n exclusions.forEach((exclusion) => {\n if (exclusion.from > exclusion.to) {\n [exclusion.to, exclusion.from] = [exclusion.from, exclusion.to];\n }\n });\n\n exclusions.sort((a, b) => a.from - b.from);\n\n // we will rework the exclusions in order to remove overlap and outside range (from / to)\n exclusions.forEach((exclusion) => {\n if (exclusion.from < from) exclusion.from = from;\n if (exclusion.to > to) exclusion.to = to;\n });\n for (let i = 0; i < exclusions.length - 1; i++) {\n if (exclusions[i].to > exclusions[i + 1].from) {\n exclusions[i].to = exclusions[i + 1].from;\n }\n }\n exclusions = exclusions.filter((exclusion) => exclusion.from < exclusion.to);\n\n if (!exclusions || exclusions.length === 0) {\n return [{ from, to }];\n }\n\n let zones = [];\n let currentFrom = from;\n for (let exclusion of exclusions) {\n if (currentFrom < exclusion.from) {\n zones.push({\n from: currentFrom,\n to: exclusion.from\n });\n }\n\n currentFrom = exclusion.to;\n }\n if (currentFrom < to) {\n zones.push({\n from: currentFrom,\n to: to\n });\n }\n\n return zones;\n}\n","import getZones from './getZones';\n\n/**\n * Filter an array x/y based on various criteria\n * x points are expected to be sorted\n *\n * @param {object} points\n * @param {object} [options={}]\n * @param {array} [options.from]\n * @param {array} [options.to]\n * @param {array} [options.exclusions=[]]\n * @return {{x: Array, y: Array}}\n */\n\nexport default function filterX(points, options = {}) {\n const { x, y } = points;\n const { from = x[0], to = x[x.length - 1], exclusions = [] } = options;\n\n let zones = getZones(from, to, exclusions);\n\n\n let currentZoneIndex = 0;\n let newX = [];\n let newY = [];\n let position = 0;\n while (position < x.length) {\n if (\n x[position] <= zones[currentZoneIndex].to &&\n x[position] >= zones[currentZoneIndex].from\n ) {\n newX.push(x[position]);\n newY.push(y[position]);\n } else {\n if (x[position] > zones[currentZoneIndex].to) {\n currentZoneIndex++;\n if (!zones[currentZoneIndex]) break;\n }\n }\n position++;\n }\n\n return {\n x: newX,\n y: newY\n };\n}\n","import { DecisionTreeClassifier, DecisionTreeRegression } from 'ml-cart';\nimport {\n RandomForestClassifier,\n RandomForestRegression\n} from 'ml-random-forest';\n\n// Try to keep this list in the same structure as the README.\n\n// Unsupervised learning\nexport { PCA } from 'ml-pca';\nimport * as HClust from 'ml-hclust';\nexport { HClust };\nexport { default as KMeans } from 'ml-kmeans';\n\n// Supervised learning\nimport * as NaiveBayes from 'ml-naivebayes';\nexport { NaiveBayes };\nexport { default as KNN } from 'ml-knn';\nexport { PLS, KOPLS } from 'ml-pls';\nexport { default as CrossValidation } from 'ml-cross-validation';\nexport { default as ConfusionMatrix } from 'ml-confusion-matrix';\nexport { DecisionTreeClassifier };\nexport { RandomForestClassifier };\n\n// Artificial neural networks\nexport { default as FNN } from 'ml-fnn';\nexport { default as SOM } from 'ml-som';\n\n// Regression\nexport {\n SimpleLinearRegression,\n PolynomialRegression,\n MultivariateLinearRegression,\n PowerRegression,\n ExponentialRegression,\n TheilSenRegression,\n RobustPolynomialRegression\n} from 'ml-regression';\nexport { DecisionTreeRegression };\nexport { RandomForestRegression };\n\n// Optimization\nexport { default as levenbergMarquardt } from 'ml-levenberg-marquardt';\nimport * as FCNNLS from 'ml-fcnnls';\nexport { FCNNLS };\n\n// Math\nimport * as MatrixLib from 'ml-matrix';\nconst {\n Matrix,\n SVD,\n EVD,\n CholeskyDecomposition,\n LuDecomposition,\n QrDecomposition\n} = MatrixLib;\nexport {\n MatrixLib,\n Matrix,\n SVD,\n EVD,\n CholeskyDecomposition,\n LuDecomposition,\n QrDecomposition\n};\n\nexport { SparseMatrix } from 'ml-sparse-matrix';\nexport { default as Kernel } from 'ml-kernel';\nimport { distance, similarity } from 'ml-distance';\nexport { distance as Distance, similarity as Similarity };\nexport { default as distanceMatrix } from 'ml-distance-matrix';\nexport { default as XSadd } from 'ml-xsadd';\n\n// Statistics\nexport { default as Performance } from 'ml-performance';\n\n// Data preprocessing\nexport { default as savitzkyGolay } from 'ml-savitzky-golay';\n\n// Utility\nexport { default as BitArray } from 'ml-bit-array';\nexport { default as HashTable } from 'ml-hash-table';\nexport { default as padArray } from 'ml-pad-array';\nexport { default as binarySearch } from 'binary-search';\nimport * as numSort from 'num-sort';\nexport { numSort };\nexport { default as Random } from 'ml-random';\n\nimport min from 'ml-array-min';\nimport max from 'ml-array-max';\nimport median from 'ml-array-median';\nimport mean from 'ml-array-mean';\nimport mode from 'ml-array-mode';\nimport normed from 'ml-array-normed';\nimport rescale from 'ml-array-rescale';\nimport sequentialFill from 'ml-array-sequential-fill';\nimport standardDeviation from 'ml-array-standard-deviation';\nimport variance from 'ml-array-variance';\nexport const Array = {\n min,\n max,\n median,\n mean,\n mode,\n normed,\n rescale,\n sequentialFill,\n standardDeviation,\n variance\n};\n\nimport centroidsMerge from 'ml-array-xy-centroids-merge';\nimport closestX from 'ml-arrayxy-closestx';\nimport maxMerge from 'ml-array-xy-max-merge';\nimport maxY from 'ml-array-xy-max-y';\nimport sortX from 'ml-array-xy-sort-x';\nimport uniqueX from 'ml-arrayxy-uniquex';\nimport weightedMerge from 'ml-array-xy-weighted-merge';\nimport equallySpaced from 'ml-array-xy-equally-spaced';\nimport filterX from 'ml-array-xy-filter-x';\nexport const ArrayXY = {\n centroidsMerge,\n closestX,\n maxMerge,\n maxY,\n sortX,\n uniqueX,\n weightedMerge,\n equallySpaced,\n filterX\n};\n"],"names":["toString","Object","prototype","isAnyArray","object","call","endsWith","max","input","isArray","TypeError","length","i","min","rescale","options","arguments","undefined","output","Array","currentMin","currentMax","RangeError","_options$min","minValue","autoMinMax","_options$max","maxValue","factor","checkRowIndex","matrix","index","outer","rows","checkColumnIndex","columns","checkRowVector","vector","to1DArray","checkColumnVector","checkIndices","rowIndices","columnIndices","row","checkRowIndices","column","checkColumnIndices","rowOut","some","r","from","columnOut","c","checkRange","startRow","endRow","startColumn","endColumn","checkNumber","newArray","value","array","push","name","sumByRow","sum","j","get","sumByColumn","sumAll","v","productByRow","productByColumn","productAll","varianceByRow","unbiased","mean","cols","variance","sum1","sum2","x","varianceByColumn","varianceAll","size","centerByRow","set","centerByColumn","centerAll","getScaleByRow","scale","Math","pow","sqrt","scaleByRow","getScaleByColumn","scaleByColumn","getScaleAll","divider","scaleAll","inspectMatrix","indent","repeat","indentData","constructor","inspectData","maxRows","maxColumns","maxNumSize","maxI","maxJ","result","line","formatNumber","join","num","numStr","String","padEnd","precise","toPrecision","exponential","toExponential","eIndex","indexOf","e","substring","installMathOperations","AbstractMatrix","Matrix","add","addS","addM","checkMatrix","newMatrix","sub","subS","subM","subtract","subtractS","subtractM","mul","mulS","mulM","multiply","multiplyS","multiplyM","div","divS","divM","divide","divideS","divideM","mod","modS","modM","modulus","modulusS","modulusM","and","andS","andM","or","orS","orM","xor","xorS","xorM","leftShift","leftShiftS","leftShiftM","signPropagatingRightShift","signPropagatingRightShiftS","signPropagatingRightShiftM","rightShift","rightShiftS","rightShiftM","zeroFillRightShift","zeroFillRightShiftS","zeroFillRightShiftM","not","abs","acos","acosh","asin","asinh","atan","atanh","cbrt","ceil","clz32","cos","cosh","exp","expm1","floor","fround","log","log1p","log10","log2","round","sign","sin","sinh","tan","tanh","trunc","arg0","powS","powM","from1DArray","newRows","newColumns","newData","rowVector","columnVector","zeros","ones","fill","rand","random","randInt","Number","isInteger","interval","eye","diag","data","l","matrix1","matrix2","isMatrix","klass","apply","callback","to2DArray","copy","toJSON","isRowVector","isColumnVector","isVector","isSquare","isSymmetric","isEchelonForm","previousColumn","checked","isReducedEchelonForm","k","echelonForm","clone","h","iMax","swapRows","tmp","reducedEchelonForm","m","n","maxRow","p","pivot","Error","setSubMatrix","neg","getRow","getRowVector","setRow","row1","row2","temp","getColumn","getColumnVector","setColumn","swapColumns","column1","column2","addRowVector","subRowVector","mulRowVector","divRowVector","addColumnVector","subColumnVector","mulColumnVector","divColumnVector","mulRow","mulColumn","maxIndex","idx","minIndex","maxRowIndex","minRow","minRowIndex","maxColumn","maxColumnIndex","minColumn","minColumnIndex","norm","type","cumulativeSum","dot","vector2","vector1","mmul","other","Bcolj","Float64Array","s","strassen2x2","a11","b11","a12","b12","a21","b21","a22","b22","m1","m2","m3","m4","m5","m6","m7","c00","c01","c10","c11","strassen3x3","a00","a01","a02","a10","a20","b00","b01","b02","b10","b20","m8","m9","m10","m11","m12","m13","m14","m15","m16","m17","m18","m19","m20","m21","m22","m23","c02","c12","c20","c21","c22","mmulStrassen","y","r1","c1","r2","c2","console","warn","embed","mat","resultat","blockMult","a","b","halfRows","parseInt","halfCols","subMatrix","scaleRows","isFinite","scaleColumns","flipRows","middle","first","last","flipColumns","kroneckerProduct","q","transpose","sortRows","compareFunction","compareNumbers","sort","sortColumns","subMatrixRow","indices","subMatrixColumn","selection","rowIndex","columnIndex","trace","by","product","standardDeviation","center","Symbol","for","randomInt","diagonal","identity","negate","tensorProduct","nRows","nColumns","arrayData","removeRow","splice","addRow","removeColumn","newRow","addColumn","BaseView","MatrixColumnView","MatrixColumnSelectionView","MatrixFlipColumnView","MatrixFlipRowView","MatrixRowView","MatrixRowSelectionView","MatrixSelectionView","MatrixSubView","MatrixTransposeView","WrapperMatrix1D","_calculateIndex","WrapperMatrix2D","wrap","LuDecomposition","lu","pivotVector","pivotSign","t","LUcolj","kmax","LU","isSingular","col","solve","count","X","determinant","lowerTriangularMatrix","upperTriangularMatrix","pivotPermutationVector","hypotenuse","QrDecomposition","qr","rdiag","nrm","QR","Rdiag","isFullRank","orthogonalMatrix","SingularValueDecomposition","computeLeftSingularVectors","computeRightSingularVectors","autoTranspose","wantu","Boolean","wantv","swapped","aux","nu","ni","U","V","work","si","nct","nrt","mrc","pp","eps","EPSILON","kase","alpha","MIN_VALUE","isNaN","ks","f","cs","sn","sp","spm1","epm1","sk","ek","shift","g","iter","Y","threshold","scols","Ls","rightSingularVectors","VL","vrows","urows","VLU","solveForDiagonal","inverse","vcols","ucols","condition","norm2","rank","tol","ii","leftSingularVectors","diagonalMatrix","useSVD","leftHandSide","rightHandSide","d","subMatrix0","subMatrix1","subMatrix2","xrange","exception","range","dependenciesOneRow","error","thresholdValue","thresholdError","returnArray","linearDependencies","results","Abis","svd","pseudoInverse","svdSolution","SVD","covariance","xMatrix","yMatrix","yIsSame","cov","correlation","sdx","sdy","corr","EigenvalueDecomposition","assumeSymmetric","tred2","tql2","H","ort","orthes","hqr2","realEigenvalues","imaginaryEigenvalues","eigenvectorMatrix","hh","dl1","c3","el1","s2","tst1","low","high","nn","exshift","z","w","ra","sa","vr","vi","notlast","cdivres","cdiv","xr","xi","yr","yi","CholeskyDecomposition","dimension","positiveDefinite","L","isPositiveDefinite","B","nipals","scaleScores","maxIterations","terminationCriteria","u","diff","tOld","counter","xResidual","residual","yResidual","betas","toDiscreteDistribution","numberOfClasses","counts","giniImpurity","probabilities","getNumberOfClasses","filter","val","arr","giniGain","splitted","splitsImpurity","splits","currentSplit","squaredError","meanArray","currentElement","regressionError","matrixSplitter","lesserX","greaterX","lesserY","greaterY","zip","ret","gainFunctions","gini","Utils","regression","splitFunctions","TreeNode","kind","gainFunction","splitFunction","minNumSamples","maxDepth","bestSplit","XTranspose","bestGain","Infinity","check","currentFeature","splitValues","featureSplit","currentSplitVal","split","gain","maxGain","splitValue","lesser","greater","calculatePrediction","distribution","train","currentDepth","parentGain","splitColumn","splittedMatrix","left","right","classify","setNodeParameters","node","defaultOptions","DecisionTreeClassifier","model","root","Tree","assign","trainingSet","trainingLabels","predict","toPredict","predictions","load","DecisionTreeRegression","trainingValues","checkFloat","examplesBaggingWithReplacement","trainingValue","seed","engine","Random","autoSeed","Xr","featureBagging","replacement","toRet","usedIndex","Set","has","RandomForestBase","maxFeatures","nEstimators","treeOptions","isClassifier","indexes","useSampleBagging","Estimator","DTClassifier","DTRegression","estimators","map","est","res","values","predictionValues","RandomForestClassifier","baseModel","mode","pop","_ref","module","exports","window","median","quickSelectMedian","slice","selectionMethods","arrayMean","arrayMedian","selectionMethod","RandomForestRegression","PCA","dataset","means","stdevs","S","R","excludedFeatures","isCovarianceMatrix","method","nCompNIPALS","ignoreZeroVariance","_computeFromCovarianceMatrix","_adjust","covarianceMatrix","_computeWithNIPALS","singularValues","eigenvalues","singularValue","nComponents","invert","getExplainedVariance","getCumulativeVariance","explained","getEigenvectors","getEigenvalues","getStandardDeviations","getLoadings","evd","EVD","reverse","dc","NIPALS","squaredEuclidean","euclidean","distanceMatrix","distanceFn","getMatrix","Heap","defaultCmp","heapify","heappop","heappush","heappushpop","heapreplace","insort","nlargest","nsmallest","updateItem","_siftdown","_siftup","lo","hi","cmp","mid","concat","item","lastelt","returnitem","_i","_j","_len","_ref1","_results","_results1","pos","elem","los","startpos","newitem","parent","parentpos","childpos","endpos","rightpos","replace","pushpop","nodes","peek","contains","clear","empty","heap","toArray","insert","top","front","factory","this","require$$0","Cluster","children","height","isLeaf","cut","list","ans","group","groups","forEach","child","traverse","cb","visit","cluster","singleLink","dKI","dKJ","completeLink","averageLink","dIJ","nj","ai","aj","weightedAverageLink","centroidLink","medianLink","wardLink","nk","wardLink2","agnes","distanceFunction","isDistanceMatrix","updateFunc","getDistanceMatrix","numLeaves","toLowerCase","clusters","distance","getSmallestDistance","cluster1","cluster2","newCluster","newClusters","newDistanceMatrix","previous","newIndex","getPreviousIndex","prevI","prevICluster","smallest","smallestI","smallestJ","prev1","prev2","nearestVector","listVectors","similarityFunction","vectorIndex","maxSim","sim","minDist","MAX_VALUE","dist","calculateDistanceMatrix","updateClusterID","centers","clusterID","updateCenters","prevCenters","K","nDim","centersLen","dim","id","hasConverged","oldCenters","tolerance","LOOP","FLOAT_MUL","sh1","sh2","sh3","multiply_uint32","nlo","nhi","XSadd","Date","now","state","Uint32Array","init","getFloat","bind","getUint32","nextState","periodCertification","PROB_TOLERANCE","randomChoice","valuesArr","cumSum","getArray","randomIndex","seedOrRandom","xsadd","XSAdd","randomGenerator","choice","randomSample","mostDistant","maxDist","minDistCent","kmeanspp","nSamples","localTrials","firstCenterIdx","closestDistSquared","cumSumClosestDistSquared","candidateIdx","candidates","distanceToCandidates","euclideanDistances","bestCandidate","bestPot","bestDistSquared","newDistSquared","newPot","A","distanceSymbol","KMeansResult","centroids","converged","iterations","nearest","centroid","computeInformation","enrichedCentroids","withIterations","initialization","step","newCenters","kmeansGenerator","stepNumber","stepResult","kmeans","separateClasses","features","classes","totalPerClasses","separatedClasses","currentIndex","GaussianNB","reload","calculateProbabilities","C1","PI","std","logPriorProbability","currentStd","getCurrentClass","modelName","currentCase","maxProbability","predictedClass","currentProbability","calculateLogProbability","C2","MultinomialNB","conditionalProbability","priorProbability","separateClass","classValues","total","divisor","matrixLog","Node","obj","KDTree","points","metric","dimensions","restoreParent","buildTree","toJSONImpl","point","maxNodes","maxDistance","bestNodes","BinaryHeap","nearestSearch","ownDistance","linearPoint","bestChild","linearDistance","otherChild","saveNode","content","src","dest","depth","scoreFunction","element","bubbleUp","end","sinkDown","parentN","elemScore","child2N","child1N","swap","child1","child1Score","child2","child2Score","KNN","labels","kdTree","isEuclidean","euclideanDistance","getSinglePrediction","knn","nearestPoints","pointsPerClass","maxPoints","lastElement","currentClass","currentPoints","pow2array","initializeMatrices","PLS","meanX","stdDevX","meanY","stdDevY","PBQ","R2X","scaleMethod","latentVectors","rx","cx","ry","cy","ssqXcal","sumOfSquaresY","T","P","Q","W","transposeX","transposeY","tIndex","maxSumColIndex","uIndex","t1","den","pnorm","ssqYcal","E","F","KOPLS","YLoadingMat","SigmaPow","YScoreMat","predScoreMat","YOrthLoadingVec","YOrthEigen","YOrthScoreMat","toNorm","TURegressionCoeff","kernelX","kernel","orthogonalComp","predictiveComp","predictiveComponents","orthogonalComponents","compute","Identity","Sigma","YOrthScoreNorm","TpiPrime","CoTemp","SoTemp","toiPrime","ITo","lastScoreMat","lastTpPrime","KTestTrain","YOrthScoreVector","scoreMatPrime","p1","p2","p3","prediction","predYOrthVectors","ConfusionMatrix","fromLabels","actual","predicted","distinctLabels","actualIdx","predictedIdx","getLabels","getTotalCount","getTrueCount","getFalseCount","getTruePositiveCount","label","getIndex","getTrueNegativeCount","getFalsePositiveCount","getFalseNegativeCount","getPositiveCount","getNegativeCount","getTruePositiveRate","getTrueNegativeRate","getPositivePredictiveValue","TP","getNegativePredictiveValue","TN","getFalseNegativeRate","getFalsePositiveRate","getFalseDiscoveryRate","FP","getFalseOmissionRate","FN","getF1Score","getMatthewsCorrelationCoefficient","getInformedness","getMarkedness","getConfusionTable","getAccuracy","correct","incorrect","getCount","actualIndex","predictedIndex","accuracy","M","N","twiddle","CV","leaveOneOut","Classifier","classifierOptions","leavePOut","distinct","getDistinct","confusionMatrix","initMatrix","gen","combinations","allIdx","testIdx","trainIdx","validateWithCallback","validate","kFold","current","folds","randi","testFeatures","trainFeatures","testLabels","trainLabels","getTrainTest","classifier","predictedLabels","updateConfusionMatrix","logistic","expELU","param","softExponential","softExponentialPrime","ACTIVATION_FUNCTIONS","activation","derivate","arctan","softsign","relu","softplus","bent","sinusoid","sinc","gaussian","Layer","inputSize","outputSize","regularization","epsilon","activationParam","selectedFunction","params","actFunction","derFunction","activationFunction","mlMatrix","forward","backpropagation","delta","dW","db","aCopy","update","OutputLayer","FeedForwardNeuralNetworks","hiddenLayers","learningRate","dicts","layers","keys","buildNetwork","dictOutputs","inputs","propagate","outputs","NodeSquare","weights","som","neighbors","adjustWeights","target","influence","getDistance","otherNode","getDistanceTorus","distX","distY","gridDim","getNeighbors","xy","torus","getPos","bestNeighbor","direction","dist1","dist2","simA","simB","getPosition","NodeHexagonal","hX","getDistanceHexagonal","distZ","fields","randomizer","squareEuclidean","gridType","SOM","hasOwnProperty","numWeights","converters","getConverters","extractor","creator","nodeType","hx","distanceMethod","getMaxDistance","done","times","findBMU","adjust","iterationCount","startLearningRate","mapRadius","algorithmMethod","_initNodes","loadModel","eval","export","exportModel","includeDistance","initNodes","setTraining","convertedSet","numIterations","timeConstant","trainOne","neighbourhoodRadius","trainingSetFactor","getRandomValue","bmu","_findBestMatchingUnit","now2","radiusLimit","xMin","xMax","yMin","yMax","theX","theY","getConvertedNodes","findBestMatchingUnit","candidate","lowest","computePosition","self","_predict","getQuantizationError","fit","getFit","normalizers","denormalizers","getNormalizer","getDenormalizer","minMax","normalizer","denormalizer","zero","one","maybeToPrecision","digits","checkArraySize","BaseRegression","new","toLaTeX","score","y2","xSum","ySum","chi2","rmsd","xSquared","ySquared","xY","PolynomialRegression","degree","powers","coefficients","checkArrayLength","regress","precision","_toFormula","isLaTeX","sup","closeSup","fn","str","charAt","json","pr","FT","SimpleLinearRegression","slope","intercept","computeX","xFactor","absIntercept","operator","slr","numerator","ExponentialRegression","er","yl","linear","PowerRegression","newInputs","latex","xl","MultivariateLinearRegression","statistics","xt","xx","invxx","beta","fittedValues","residuals","ri","reduce","stdError","stdErrorMatrix","stdErrors","tStats","summary","regressionStatistics","standardError","observations","variables","tStat","sigma","GaussianKernel","constant","PolynomialKernel","SigmoidKernel","ANOVAKernel","len","CauchyKernel","ExponentialKernel","HistogramIntersectionKernel","LaplacianKernel","MultiquadraticKernel","RationalQuadraticKernel","kernelType","rbf","polynomial","poly","anova","cauchy","histogram","HistogramKernel","laplacian","multiquadratic","rational","RationalKernel","sigmoid","mlp","Kernel","KernelConstructor","kernelFunction","landmarks","kernelMatrix","TheilSenRegression","theilSen","slopes","medianSlope","cuts","RobustPolynomialRegression","robustPolynomial","_","tuples","getRandomTuples","tuple","calcCoefficients","residualsMedian","half","errorCalculation","parameters","parameterizedFunction","func","gradientFunction","evaluatedData","gradientDifference","paramFunction","auxParams","funcParam","matrixFunction","damping","gradientFunc","matrixFunc","inverseMatrix","levenbergMarquardt","errorTolerance","minValues","maxValues","initialValues","parLen","MAX_SAFE_INTEGER","MIN_SAFE_INTEGER","iteration","parameterValues","parameterError","sortCollectionSet","collection","objectCollection","key","BigInt","sorted","cssls","XtX","XtY","Pset","choXtX","luXtX","sortedPset","sortedEset","cols2Solve","vars","initialisation","Fset","D","setDifference","C","includes","optimality","maxIter","Jset","fullSet","notPset","fcnnls","infeasIndex","Hset","hRowColIdx","negRowColIdx","alphaMin","minIdx","idx2zero","findIndex","newParam","fcnnlsVector","haystack","needle","comparator","assertNumber","number","largestPrime","primeNumbers","ascending","nextPrime","binarySearch","FREE","FULL","REMOVED","defaultInitialCapacity","defaultMinLoadFactor","defaultMaxLoadFactor","HashTable","table","minLoadFactor","maxLoadFactor","freeEntries","lowWaterMark","highWaterMark","initialCapacity","capacity","chooseHighWaterMark","indexOfKey","indexOfInsertion","newCapacity","chooseGrowCapacity","rehash","remove","noRehash","maybeShrinkCapacity","delete","chooseShrinkCapacity","containsKey","hash","decrement","containsValue","indexOfValue","ensureCapacity","minCapacity","oldCapacity","oldTable","oldValues","oldState","newTable","newValues","newState","chooseLowWaterMark","forEachKey","forEachValue","forEachPair","minLoad","maxLoad","SparseMatrix","_init","elements","symmetric","forEachNonZero","bandWidth","isBanded","width","cardinality","v1","v2","getNonZeros","setThreshold","newThreshold","trans","inplaceOperator","inplaceOperatorScalar","inplaceOperatorMatrix","staticOperator","inplaceMethod","staticMethod","operators","fillTemplateFunction","op","methods","mathMethod","template","RegExp","additiveSymmetric","avg","bhattacharyya","canberra","chebyshev","clark","czekanowskiSimilarity","up","down","czekanowskiDistance","dice","q1","q2","divergence","fidelity","gower","harmonicMean","hellinger","innerProduct","intersection","jaccard","jeffreys","jensenDifference","jensenShannon","kdivergence","kulczynski","kullbackLeibler","kumarHassebrook","kumarJohnson","lorentzian","manhattan","matusita","minkowski","motyka","neyman","pearson","probabilisticSymmetric","ruzicka","soergel","sorensen","squared","squaredChord","taneja","tanimoto","bitvector","inter","union","tanimotoS","topsoe","waveHedges","createTree","spectrum","minWindow","to","mainCreateTree","start","getSimilarity","gamma","treeSimilarity","getFunction","cosine","diceD","intersectionD","jaccardD","kulczynskiD","motykaD","avgA","avgB","newA","newB","squaredChordD","pred","cutoffs","tn","tp","fp","nNeg","nPos","nPosPred","nNegPred","Performance","isDistance","predP","all","targ","currentPred","nTp","nFp","getMeasure","measure","measures","getAURC","auc","getAUDC","getDistribution","cutLength","cutLow","cutHigh","xLabels","interValues","intraValues","interCumPercent","intraCumPercent","nTP","currentTP","nFP","currentFP","thisTP","thisFP","names","acc","err","fpr","tpr","fnr","tnr","ppv","npv","pcfall","pcmiss","lift","rpp","rnp","arrayCase","cond","matrixCase","padArray","windowSize","derivative","pad","padValue","SavitzkyGolay","J","inic","Jtranspose","Jinv","det","eightBits","arr1","arr2","getBit","mask","setBit","toBinaryString","substr","parseBinaryString","toHexString","parseHexString","toDebug","binary","maxCount","_options$algorithm","algorithm","absoluteSum","_typeof","iterator","sequentialFill","_options","_options$from","_options$to","_options$size","_options$unbiased","_options$mean","sqrError","mergeByCentroids","originalPoints","mergedPoints","originalIndex","mergedIndex","closestX","descending","maxMerge","groupWidth","merged","maxAbscissa","maxY","calculateIndex","sortX","sortFunc","grouped","response","uniqueX","weightedMerge","weightedAbscissa","integral","x0","x1","equallySpacedSmooth","numberOfPoints","xLength","halfStep","initialOriginalStep","lastOriginalStep","previousX","previousY","nextX","nextY","currentValue","sumAtMin","sumAtMax","getSlope","y0","y1","main","equallySpacedSlot","lastStep","frontOutsideSpectra","backOutsideSpectra","getZones","exclusions","exclusion","JSON","parse","stringify","toRemove","unitsPerPoint","zones","currentFrom","totalPoints","currentNbPoints","equallySpaced","arrayXY","variant","xResult","yResult","zone","zoneResult","processZone","filterX","currentZoneIndex","newX","newY","position","MatrixLib","normed","ArrayXY","centroidsMerge"],"mappings":"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"} \ No newline at end of file diff --git a/dist/ml.min.js b/dist/ml.min.js index 6ec0682..ab5267d 100644 --- a/dist/ml.min.js +++ b/dist/ml.min.js @@ -1,2 +1,2 @@ -!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((t=t||self).ML={})}(this,function(exports){"use strict";const toString=Object.prototype.toString;function isAnyArray(t){return toString.call(t).endsWith("Array]")}var src=isAnyArray;function max(t){if(!src(t))throw new TypeError("input must be an array");if(0===t.length)throw new TypeError("input must not be empty");for(var e=t[0],r=1;re&&(e=t[r]);return e}function min(t){if(!src(t))throw new TypeError("input must be an array");if(0===t.length)throw new TypeError("input must not be empty");for(var e=t[0],r=1;r1&&void 0!==arguments[1]?arguments[1]:{};if(!src(t))throw new TypeError("input must be an array");if(0===t.length)throw new TypeError("input must not be empty");if(void 0!==r.output){if(!src(r.output))throw new TypeError("output option must be an array if specified");e=r.output}else e=new Array(t.length);var n=min(t),i=max(t);if(n===i)throw new RangeError("minimum and maximum input values are equal. Cannot rescale a constant array");var o=r.min,s=void 0===o?r.autoMinMax?n:0:o,a=r.max,h=void 0===a?r.autoMinMax?i:1:a;if(s>=h)throw new RangeError("min option must be smaller than max option");for(var c=(h-s)/(i-n),u=0;un)throw new RangeError("Row index out of range")}function checkColumnIndex(t,e,r){var n=r?t.columns:t.columns-1;if(e<0||e>n)throw new RangeError("Column index out of range")}function checkRowVector(t,e){if(e.to1DArray&&(e=e.to1DArray()),e.length!==t.columns)throw new RangeError("vector size must be the same as the number of columns");return e}function checkColumnVector(t,e){if(e.to1DArray&&(e=e.to1DArray()),e.length!==t.rows)throw new RangeError("vector size must be the same as the number of rows");return e}function checkIndices(t,e,r){return{row:checkRowIndices(t,e),column:checkColumnIndices(t,r)}}function checkRowIndices(t,e){if("object"!=typeof e)throw new TypeError("unexpected type for row indices");if(e.some(e=>e<0||e>=t.rows))throw new RangeError("row indices are out of range");return Array.isArray(e)||(e=Array.from(e)),e}function checkColumnIndices(t,e){if("object"!=typeof e)throw new TypeError("unexpected type for column indices");if(e.some(e=>e<0||e>=t.columns))throw new RangeError("column indices are out of range");return Array.isArray(e)||(e=Array.from(e)),e}function checkRange(t,e,r,n,i){if(5!==arguments.length)throw new RangeError("expected 4 arguments");if(checkNumber("startRow",e),checkNumber("endRow",r),checkNumber("startColumn",n),checkNumber("endColumn",i),e>r||n>i||e<0||e>=t.rows||r<0||r>=t.rows||n<0||n>=t.columns||i<0||i>=t.columns)throw new RangeError("Submatrix indices are out of range")}function newArray(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;for(var r=[],n=0;n>t);return this},t.prototype.signPropagatingRightShiftM=function(t){if(t=e.checkMatrix(t),this.rows!==t.rows||this.columns!==t.columns)throw new RangeError("Matrices dimensions must be equal");for(var r=0;r>t.get(r,n));return this},t.signPropagatingRightShift=function(t,r){return new e(t).signPropagatingRightShift(r)},t.prototype.rightShift=function(t){return"number"==typeof t?this.rightShiftS(t):this.rightShiftM(t)},t.prototype.rightShiftS=function(t){for(var e=0;e>>t);return this},t.prototype.rightShiftM=function(t){if(t=e.checkMatrix(t),this.rows!==t.rows||this.columns!==t.columns)throw new RangeError("Matrices dimensions must be equal");for(var r=0;r>>t.get(r,n));return this},t.rightShift=function(t,r){return new e(t).rightShift(r)},t.prototype.zeroFillRightShift=t.prototype.rightShift,t.prototype.zeroFillRightShiftS=t.prototype.rightShiftS,t.prototype.zeroFillRightShiftM=t.prototype.rightShiftM,t.zeroFillRightShift=t.rightShift,t.prototype.not=function(){for(var t=0;t2&&void 0!==arguments[2]?arguments[2]:{};if("object"!=typeof r)throw new TypeError("options must be an object");const{random:n=Math.random}=r;for(var i=new Matrix(t,e),o=0;o2&&void 0!==arguments[2]?arguments[2]:{};if("object"!=typeof r)throw new TypeError("options must be an object");const{min:n=0,max:i=1e3,random:o=Math.random}=r;if(!Number.isInteger(n))throw new TypeError("min must be an integer");if(!Number.isInteger(i))throw new TypeError("max must be an integer");if(n>=i)throw new RangeError("min must be smaller than max");for(var s=i-n,a=new Matrix(t,e),h=0;hr?(i=!0,r=e):(n=!1,i=!0);t++}return n}isReducedEchelonForm(){let t=0,e=0,r=-1,n=!0,i=!1;for(;tr?(i=!0,r=e):(n=!1,i=!0);for(let r=e+1;rt.get(n,r)&&(n=i);if(0===t.get(n,r))r++;else{t.swapRows(e,n);let i=t.get(e,r);for(let n=r;n=0;)if(0===t.maxRow(n))n--;else{let i=0,o=!1;for(;i0&&void 0!==arguments[0]?arguments[0]:{};if("object"!=typeof t)throw new TypeError("options must be an object");const{rows:e=1,columns:r=1}=t;if(!Number.isInteger(e)||e<=0)throw new TypeError("rows must be a positive integer");if(!Number.isInteger(r)||r<=0)throw new TypeError("columns must be a positive integer");for(var n=new Matrix(this.rows*e,this.columns*r),i=0;it&&(t=this.get(e,r));return t}maxIndex(){for(var t=this.get(0,0),e=[0,0],r=0;rt&&(t=this.get(r,n),e[0]=r,e[1]=n);return e}min(){for(var t=this.get(0,0),e=0;ee&&(e=this.get(t,r));return e}maxRowIndex(t){checkRowIndex(this,t);for(var e=this.get(t,0),r=[t,0],n=1;ne&&(e=this.get(t,n),r[1]=n);return r}minRow(t){checkRowIndex(this,t);for(var e=this.get(t,0),r=1;re&&(e=this.get(r,t));return e}maxColumnIndex(t){checkColumnIndex(this,t);for(var e=this.get(0,t),r=[0,t],n=1;ne&&(e=this.get(n,t),r[0]=n);return r}minColumn(t){checkColumnIndex(this,t);for(var e=this.get(0,t),r=1;r0&&void 0!==arguments[0]?arguments[0]:"frobenius";var e=0;if("max"===t)return this.max();if("frobenius"===t){for(var r=0;r0&&void 0!==arguments[0]?arguments[0]:{};if("object"!=typeof t)throw new TypeError("options must be an object");const{min:e=0,max:r=1}=t;if(!Number.isFinite(e))throw new TypeError("min must be a number");if(!Number.isFinite(r))throw new TypeError("max must be a number");if(e>=r)throw new RangeError("min must be smaller than max");for(var n=new Matrix(this.rows,this.columns),i=0;i0&&void 0!==arguments[0]?arguments[0]:{};if("object"!=typeof t)throw new TypeError("options must be an object");const{min:e=0,max:r=1}=t;if(!Number.isFinite(e))throw new TypeError("min must be a number");if(!Number.isFinite(r))throw new TypeError("max must be a number");if(e>=r)throw new RangeError("min must be smaller than max");for(var n=new Matrix(this.rows,this.columns),i=0;i0&&void 0!==arguments[0]?arguments[0]:compareNumbers;for(var e=0;e0&&void 0!==arguments[0]?arguments[0]:compareNumbers;for(var e=0;er||e<0||e>=this.columns||r<0||r>=this.columns)throw new RangeError("Argument out of range");for(var n=new Matrix(t.length,r-e+1),i=0;i=this.rows)throw new RangeError("Row index out of range: ".concat(t[i]));n.set(i,o-e,this.get(t[i],o))}return n}subMatrixColumn(t,e,r){if(void 0===e&&(e=0),void 0===r&&(r=this.rows-1),e>r||e<0||e>=this.rows||r<0||r>=this.rows)throw new RangeError("Argument out of range");for(var n=new Matrix(r-e+1,t.length),i=0;i=this.columns)throw new RangeError("Column index out of range: ".concat(t[i]));n.set(o-e,i,this.get(o,t[i]))}return n}setSubMatrix(t,e,r){checkRange(this,e,e+(t=Matrix.checkMatrix(t)).rows-1,r,r+t.columns-1);for(var n=0;n1&&void 0!==arguments[1]?arguments[1]:{};if("object"==typeof t&&(e=t,t=void 0),"object"!=typeof e)throw new TypeError("options must be an object");const{unbiased:r=!0,mean:n=this.mean(t)}=e;if("boolean"!=typeof r)throw new TypeError("unbiased must be a boolean");switch(t){case"row":if(!Array.isArray(n))throw new TypeError("mean must be an array");return varianceByRow(this,r,n);case"column":if(!Array.isArray(n))throw new TypeError("mean must be an array");return varianceByColumn(this,r,n);case void 0:if("number"!=typeof n)throw new TypeError("mean must be a number");return varianceAll(this,r,n);default:throw new Error("invalid option: ".concat(t))}}standardDeviation(t,e){"object"==typeof t&&(e=t,t=void 0);const r=this.variance(t,e);if(void 0===t)return Math.sqrt(r);for(var n=0;n1&&void 0!==arguments[1]?arguments[1]:{};if("object"==typeof t&&(e=t,t=void 0),"object"!=typeof e)throw new TypeError("options must be an object");const{center:r=this.mean(t)}=e;switch(t){case"row":if(!Array.isArray(r))throw new TypeError("center must be an array");return centerByRow(this,r),this;case"column":if(!Array.isArray(r))throw new TypeError("center must be an array");return centerByColumn(this,r),this;case void 0:if("number"!=typeof r)throw new TypeError("center must be a number");return centerAll(this,r),this;default:throw new Error("invalid option: ".concat(t))}}scale(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if("object"==typeof t&&(e=t,t=void 0),"object"!=typeof e)throw new TypeError("options must be an object");let r=e.scale;switch(t){case"row":if(void 0===r)r=getScaleByRow(this);else if(!Array.isArray(r))throw new TypeError("scale must be an array");return scaleByRow(this,r),this;case"column":if(void 0===r)r=getScaleByColumn(this);else if(!Array.isArray(r))throw new TypeError("scale must be an array");return scaleByColumn(this,r),this;case void 0:if(void 0===r)r=getScaleAll(this);else if("number"!=typeof r)throw new TypeError("scale must be a number");return scaleAll(this,r),this;default:throw new Error("invalid option: ".concat(t))}}}function compareNumbers(t,e){return t-e}AbstractMatrix.prototype.klass="Matrix","undefined"!=typeof Symbol&&(AbstractMatrix.prototype[Symbol.for("nodejs.util.inspect.custom")]=inspectMatrix),AbstractMatrix.random=AbstractMatrix.rand,AbstractMatrix.randomInt=AbstractMatrix.randInt,AbstractMatrix.diagonal=AbstractMatrix.diag,AbstractMatrix.prototype.diagonal=AbstractMatrix.prototype.diag,AbstractMatrix.identity=AbstractMatrix.eye,AbstractMatrix.prototype.negate=AbstractMatrix.prototype.neg,AbstractMatrix.prototype.tensorProduct=AbstractMatrix.prototype.kroneckerProduct;class Matrix extends AbstractMatrix{constructor(t,e){if(super(),Matrix.isMatrix(t))return t.clone();if(Number.isInteger(t)&&t>0){if(this.data=[],!(Number.isInteger(e)&&e>0))throw new TypeError("nColumns must be a positive integer");for(let r=0;r1&&void 0!==arguments[1]?arguments[1]:{};const{rows:r=1}=e;if(t.length%r!=0)throw new Error("the data length is not divisible by the number of rows");super(),this.rows=r,this.columns=t.length/r,this.data=t}set(t,e,r){var n=this._calculateIndex(t,e);return this.data[n]=r,this}get(t,e){var r=this._calculateIndex(t,e);return this.data[r]}_calculateIndex(t,e){return t*this.columns+e}}class WrapperMatrix2D extends AbstractMatrix{constructor(t){super(),this.data=t,this.rows=t.length,this.columns=t[0].length}set(t,e,r){return this.data[t][e]=r,this}get(t,e){return this.data[t][e]}}function wrap(t,e){if(Array.isArray(t))return t[0]&&Array.isArray(t[0])?new WrapperMatrix2D(t):new WrapperMatrix1D(t,e);throw new Error("the argument is not an array")}class LuDecomposition{constructor(t){var e,r,n,i,o,s,a,h,c,u=(t=WrapperMatrix2D.checkMatrix(t)).clone(),l=u.rows,f=u.columns,m=new Float64Array(l),g=1;for(e=0;eMath.abs(h[i])&&(i=e);if(i!==r){for(n=0;n=0;i--){for(n=0;no?n.set(i,o,t.get(i,o)):i===o?n.set(i,o,1):n.set(i,o,0);return n}get upperTriangularMatrix(){for(var t=this.LU,e=t.rows,r=t.columns,n=new Matrix(e,r),i=0;iMath.abs(e)?(r=e/t,Math.abs(t)*Math.sqrt(1+r*r)):0!==e?(r=t/e,Math.abs(e)*Math.sqrt(1+r*r)):0}class QrDecomposition{constructor(t){var e,r,n,i,o=(t=WrapperMatrix2D.checkMatrix(t)).clone(),s=t.rows,a=t.columns,h=new Float64Array(a);for(n=0;n=0;o--){for(i=0;i=0;r--){for(t=0;t1&&void 0!==arguments[1]?arguments[1]:{};var r=(t=WrapperMatrix2D.checkMatrix(t)).rows,n=t.columns;const{computeLeftSingularVectors:i=!0,computeRightSingularVectors:o=!0,autoTranspose:s=!1}=e;var a,h=Boolean(i),c=Boolean(o),u=!1;if(r=0;t--)if(0!==g[t]){for(let e=t+1;e=0;t--){if(t0;){let t,e;for(t=S-2;t>=-1&&-1!==t;t--){const e=Number.MIN_VALUE+E*Math.abs(g[t]+Math.abs(g[t+1]));if(Math.abs(w[t])<=e||Number.isNaN(w[t])){w[t]=0;break}}if(t===S-2)e=4;else{let r;for(r=S-1;r>=t&&r!==t;r--){let e=(r!==S?Math.abs(w[r]):0)+(r!==t+1?Math.abs(w[r-1]):0);if(Math.abs(g[r])<=E*e){g[r]=0;break}}r===t?e=3:r===S-1?e=1:(e=2,t=r)}switch(t++,e){case 1:{let e=w[S-2];w[S-2]=0;for(let r=S-2;r>=t;r--){let i=hypotenuse(g[r],e),o=g[r]/i,s=e/i;if(g[r]=i,r!==t&&(e=-s*w[r-1],w[r-1]=o*w[r-1]),c)for(let t=0;t=g[t+1]);){let e=g[t];if(g[t]=g[t+1],g[t+1]=e,c&&te&&i.set(o,r,t.get(o,r)/this.s[r]);var o=this.U,s=o.rows,a=o.columns,h=new Matrix(r,s);for(let t=0;tt&&e++;return e}get diagonal(){return Array.from(this.s)}get threshold(){return Number.EPSILON/2*Math.max(this.m,this.n)*this.s[0]}get leftSingularVectors(){return this.U}get rightSingularVectors(){return this.V}get diagonalMatrix(){return Matrix.diag(this.s)}}function inverse(t){let e=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return t=WrapperMatrix2D.checkMatrix(t),e?new SingularValueDecomposition(t).inverse():solve(t,Matrix.eye(t.rows))}function solve(t,e){let r=arguments.length>2&&void 0!==arguments[2]&&arguments[2];return t=WrapperMatrix2D.checkMatrix(t),e=WrapperMatrix2D.checkMatrix(e),r?new SingularValueDecomposition(t).solve(e):t.isSquare()?new LuDecomposition(t).solve(e):new QrDecomposition(t).solve(e)}function determinant(t){var e,r,n,i,o,s;if((t=Matrix.checkMatrix(t)).isSquare())return 2===t.columns?(e=t.get(0,0),r=t.get(0,1),n=t.get(1,0),e*t.get(1,1)-r*n):3===t.columns?(i=new MatrixSelectionView(t,[1,2],[1,2]),o=new MatrixSelectionView(t,[1,2],[0,2]),s=new MatrixSelectionView(t,[1,2],[0,1]),e=t.get(0,0),r=t.get(0,1),n=t.get(0,2),e*determinant(i)-r*determinant(o)+n*determinant(s)):new LuDecomposition(t).determinant;throw Error("determinant can only be calculated for a square matrix")}function xrange(t,e){for(var r=[],n=0;n3&&void 0!==arguments[3]?arguments[3]:1e-9;if(t>(arguments.length>4&&void 0!==arguments[4]?arguments[4]:1e-9))return new Array(e.rows+1).fill(0);for(var i=e.addRow(r,[0]),o=0;o1&&void 0!==arguments[1]?arguments[1]:{};const{thresholdValue:r=1e-9,thresholdError:n=1e-9}=e;for(var i=(t=Matrix.checkMatrix(t)).rows,o=new Matrix(i,i),s=0;s1&&void 0!==arguments[1]?arguments[1]:Number.EPSILON;t=Matrix.checkMatrix(t);for(var r=new SingularValueDecomposition(t,{autoTranspose:!0}),n=r.leftSingularVectors,i=r.rightSingularVectors,o=r.diagonal,s=0;se?o[s]=1/o[s]:o[s]=0;return i.mmul(Matrix.diag(o).mmul(n.transpose()))}function covariance(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:t,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};t=Matrix.checkMatrix(t);let n=!1;if("object"!=typeof e||Matrix.isMatrix(e)||Array.isArray(e)?e=Matrix.checkMatrix(e):(r=e,e=t,n=!0),t.rows!==e.rows)throw new TypeError("Both matrices must have the same number of rows");const{center:i=!0}=r;i&&(t=t.center("column"),n||(e=e.center("column")));const o=t.transpose().mmul(e);for(let e=0;e1&&void 0!==arguments[1]?arguments[1]:t,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};t=Matrix.checkMatrix(t);let n=!1;if("object"!=typeof e||Matrix.isMatrix(e)||Array.isArray(e)?e=Matrix.checkMatrix(e):(r=e,e=t,n=!0),t.rows!==e.rows)throw new TypeError("Both matrices must have the same number of rows");const{center:i=!0,scale:o=!0}=r;i&&(t.center("column"),n||e.center("column")),o&&(t.scale("column"),n||e.scale("column"));const s=t.standardDeviation("column",{unbiased:!0}),a=n?s:e.standardDeviation("column",{unbiased:!0}),h=t.transpose().mmul(e);for(let e=0;e1&&void 0!==arguments[1]?arguments[1]:{};const{assumeSymmetric:r=!1}=e;if(!(t=WrapperMatrix2D.checkMatrix(t)).isSquare())throw new Error("Matrix is not a square matrix");var n,i,o=t.columns,s=new Matrix(o,o),a=new Float64Array(o),h=new Float64Array(o),c=t;if(!!r||t.isSymmetric()){for(n=0;n0?o.set(t,t+1,n[t]):n[t]<0&&o.set(t,t-1,n[t])}return o}}function tred2(t,e,r,n){var i,o,s,a,h,c,u,l;for(h=0;h0;a--){for(l=0,s=0,c=0;c0&&(o=-o),e[a]=l*o,s-=i*o,r[a-1]=i-o,h=0;hc)do{for(i=r[c],f=hypotenuse(l=(r[c+1]-i)/(2*e[c]),1),l<0&&(f=-f),r[c]=e[c]/(l+f),r[c+1]=e[c]*(l+f),m=r[c+1],o=i-r[c],s=c+2;s=c;s--)for(p=d,d=g,x=v,i=g*e[s],o=g*l,f=hypotenuse(l,e[s]),e[s+1]=v*f,v=e[s]/f,l=(g=l/f)*r[s]-v*i,r[s+1]=o+v*(g*i+v*r[s]),h=0;hb*M);r[c]=r[c]+y,e[c]=0}for(s=0;s=c;a--)r[a]=e.get(a,c-1)/u,s+=r[a]*r[a];for(o=Math.sqrt(s),r[c]>0&&(o=-o),s-=r[c]*o,r[c]=r[c]-o,h=c;h=c;a--)i+=r[a]*e.get(a,h);for(i/=s,a=c;a<=l;a++)e.set(a,h,e.get(a,h)-i*r[a])}for(a=0;a<=l;a++){for(i=0,h=l;h>=c;h--)i+=r[h]*e.get(a,h);for(i/=s,h=c;h<=l;h++)e.set(a,h,e.get(a,h)-i*r[h])}r[c]=u*r[c],e.set(c,c-1,u*o)}}for(a=0;a=1;c--)if(0!==e.get(c,c-1)){for(a=c+1;a<=l;a++)r[a]=e.get(a,c-1);for(h=c;h<=l;h++){for(o=0,a=c;a<=l;a++)o+=r[a]*n.get(a,h);for(o=o/r[c]/e.get(c,c-1),a=c;a<=l;a++)n.set(a,h,n.get(a,h)+o*r[a])}}}function hqr2(t,e,r,n,i){var o,s,a,h,c,u,l,f,m,g,d,p,w,v,x,y=t-1,M=t-1,b=Number.EPSILON,S=0,A=0,E=0,R=0,T=0,k=0,N=0,C=0;for(o=0;oM)&&(r[o]=i.get(o,o),e[o]=0),s=Math.max(o-1,0);s=0;){for(h=y;h>0&&(0===(k=Math.abs(i.get(h-1,h-1))+Math.abs(i.get(h,h)))&&(k=A),!(Math.abs(i.get(h,h-1))=0){for(N=E>=0?E+N:E-N,r[y-1]=f+N,r[y]=r[y-1],0!==N&&(r[y]=f-l/N),e[y-1]=0,e[y]=0,E=(f=i.get(y,y-1))/(k=Math.abs(f)+Math.abs(N)),R=N/k,E/=T=Math.sqrt(E*E+R*R),R/=T,s=y-1;s0){for(k=Math.sqrt(k),m=h&&(E=((T=f-(N=i.get(c,c)))*(k=m-N)-l)/i.get(c+1,c)+i.get(c,c+1),R=i.get(c+1,c+1)-N-T-k,T=i.get(c+2,c+1),E/=k=Math.abs(E)+Math.abs(R)+Math.abs(T),R/=k,T/=k,c!==h)&&!(Math.abs(i.get(c,c-1))*(Math.abs(R)+Math.abs(T))c+2&&i.set(o,o-3,0);for(a=c;a<=y-1&&(v=a!==y-1,a!==c&&(E=i.get(a,a-1),R=i.get(a+1,a-1),T=v?i.get(a+2,a-1):0,0!==(f=Math.abs(E)+Math.abs(R)+Math.abs(T))&&(E/=f,R/=f,T/=f)),0!==f);a++)if(k=Math.sqrt(E*E+R*R+T*T),E<0&&(k=-k),0!==k){for(a!==c?i.set(a,a-1,-k*f):h!==c&&i.set(a,a-1,-i.get(a,a-1)),f=(E+=k)/k,m=R/k,N=T/k,R/=E,T/=E,s=a;s=0;y--)if(E=r[y],0===(R=e[y]))for(h=y,i.set(y,y,1),o=y-1;o>=0;o--){for(l=i.get(o,o)-E,T=0,s=h;s<=y;s++)T+=i.get(o,s)*i.get(s,y);if(e[o]<0)N=l,k=T;else if(h=o,0===e[o]?i.set(o,y,0!==l?-T/l:-T/(b*A)):(f=i.get(o,o+1),m=i.get(o+1,o),u=(f*k-N*T)/(R=(r[o]-E)*(r[o]-E)+e[o]*e[o]),i.set(o,y,u),i.set(o+1,y,Math.abs(f)>Math.abs(N)?(-T-l*u)/f:(-k-m*u)/N)),b*(u=Math.abs(i.get(o,y)))*u>1)for(s=o;s<=y;s++)i.set(s,y,i.get(s,y)/u)}else if(R<0)for(h=y-1,Math.abs(i.get(y,y-1))>Math.abs(i.get(y-1,y))?(i.set(y-1,y-1,R/i.get(y,y-1)),i.set(y-1,y,-(i.get(y,y)-E)/i.get(y,y-1))):(x=cdiv(0,-i.get(y-1,y),i.get(y-1,y-1)-E,R),i.set(y-1,y-1,x[0]),i.set(y-1,y,x[1])),i.set(y,y-1,0),i.set(y,y,1),o=y-2;o>=0;o--){for(g=0,d=0,s=h;s<=y;s++)g+=i.get(o,s)*i.get(s,y-1),d+=i.get(o,s)*i.get(s,y);if(l=i.get(o,o)-E,e[o]<0)N=l,T=g,k=d;else if(h=o,0===e[o]?(x=cdiv(-g,-d,l,R),i.set(o,y-1,x[0]),i.set(o,y,x[1])):(f=i.get(o,o+1),m=i.get(o+1,o),p=(r[o]-E)*(r[o]-E)+e[o]*e[o]-R*R,w=2*(r[o]-E)*R,0===p&&0===w&&(p=b*A*(Math.abs(l)+Math.abs(R)+Math.abs(f)+Math.abs(m)+Math.abs(N))),x=cdiv(f*T-N*g+R*d,f*k-N*d-R*g,p,w),i.set(o,y-1,x[0]),i.set(o,y,x[1]),Math.abs(f)>Math.abs(N)+Math.abs(R)?(i.set(o+1,y-1,(-g-l*i.get(o,y-1)+R*i.get(o,y))/f),i.set(o+1,y,(-d-l*i.get(o,y)-R*i.get(o,y-1))/f)):(x=cdiv(-T-m*i.get(o,y-1),-k-m*i.get(o,y),N,R),i.set(o+1,y-1,x[0]),i.set(o+1,y,x[1]))),b*(u=Math.max(Math.abs(i.get(o,y-1)),Math.abs(i.get(o,y))))*u>1)for(s=o;s<=y;s++)i.set(s,y-1,i.get(s,y-1)/u),i.set(s,y,i.get(s,y)/u)}for(o=0;oM)for(s=o;s=0;s--)for(o=0;o<=M;o++){for(N=0,a=0;a<=Math.min(s,M);a++)N+=n.get(o,a)*i.get(a,s);n.set(o,s,N)}}}function cdiv(t,e,r,n){var i,o;return Math.abs(r)>Math.abs(n)?[(t+(i=n/r)*e)/(o=r+i*n),(e-i*t)/o]:[((i=r/n)*t+e)/(o=n+i*r),(i*e-t)/o]}class CholeskyDecomposition{constructor(t){if(!(t=WrapperMatrix2D.checkMatrix(t)).isSymmetric())throw new Error("Matrix is not symmetric");var e,r,n,i=t,o=i.rows,s=new Matrix(o,o),a=!0;for(r=0;r0,s.set(r,r,Math.sqrt(Math.max(h,0))),n=r+1;n=0;o--)for(i=0;it>e:(t,e)=>t.01&&this.gain!==n&&s.lesserX.length>0&&s.greaterX.length>0){this.left=new TreeNode(this),this.right=new TreeNode(this);var a=new Matrix(s.lesserX),h=new Matrix(s.greaterX);this.left.train(a,s.lesserY,r+1,this.gain),this.right.train(h,s.greaterY,r+1,this.gain)}else this.calculatePrediction(e)}}classify(t){return this.right&&this.left?t[this.splitColumn]>>0,UINT32_SIZE=UINT32_MAX+1,INT32_SIZE=UINT32_SIZE/2,INT32_MAX=INT32_SIZE-1,UINT21_SIZE=1<<21,UINT21_MAX=UINT21_SIZE-1;function int32(t){return 0|t.next()}function add(t,e){return 0===e?t:r=>t(r)+e}function int53(t){const e=0|t.next(),r=t.next()>>>0;return(e&UINT21_MAX)*UINT32_SIZE+r+(e&UINT21_SIZE?-SMALLEST_UNSAFE_INTEGER:0)}function int53Full(t){for(;;){const e=0|t.next();if(!(4194304&e)){const r=t.next()>>>0;return(e&UINT21_MAX)*UINT32_SIZE+r+(e&UINT21_SIZE?-SMALLEST_UNSAFE_INTEGER:0)}if(4194304==(8388607&e)&&0==(0|t.next()))return SMALLEST_UNSAFE_INTEGER}}function uint32(t){return t.next()>>>0}function uint53(t){const e=t.next()&UINT21_MAX,r=t.next()>>>0;return e*UINT32_SIZE+r}function uint53Full(t){for(;;){const e=0|t.next();if(!(e&UINT21_SIZE)){const r=t.next()>>>0;return(e&UINT21_MAX)*UINT32_SIZE+r}if(0==(e&UINT21_MAX)&&0==(0|t.next()))return SMALLEST_UNSAFE_INTEGER}}function isPowerOfTwoMinusOne(t){return 0==(t+1&t)}function bitmask(t){return e=>e.next()&t}function downscaleToLoopCheckedRange(t){const e=t+1,r=e*Math.floor(UINT32_SIZE/e);return t=>{let n=0;do{n=t.next()>>>0}while(n>=r);return n%e}}function downscaleToRange(t){return isPowerOfTwoMinusOne(t)?bitmask(t):downscaleToLoopCheckedRange(t)}function isEvenlyDivisibleByMaxInt32(t){return 0==(0|t)}function upscaleWithHighMasking(t){return e=>{const r=e.next()&t,n=e.next()>>>0;return r*UINT32_SIZE+n}}function upscaleToLoopCheckedRange(t){const e=t*Math.floor(SMALLEST_UNSAFE_INTEGER/t);return r=>{let n=0;do{const t=r.next()&UINT21_MAX,e=r.next()>>>0;n=t*UINT32_SIZE+e}while(n>=e);return n%t}}function upscaleWithinU53(t){const e=t+1;if(isEvenlyDivisibleByMaxInt32(e)){const t=(e/UINT32_SIZE|0)-1;if(isPowerOfTwoMinusOne(t))return upscaleWithHighMasking(t)}return upscaleToLoopCheckedRange(e)}function upscaleWithinI53AndLoopCheck(t,e){return r=>{let n=0;do{const t=0|r.next(),e=r.next()>>>0;n=(t&UINT21_MAX)*UINT32_SIZE+e+(t&UINT21_SIZE?-SMALLEST_UNSAFE_INTEGER:0)}while(ne);return n}}function integer(t,e){if(t=Math.floor(t),e=Math.floor(e),t<-SMALLEST_UNSAFE_INTEGER||!isFinite(t))throw new RangeError("Expected min to be at least ".concat(-SMALLEST_UNSAFE_INTEGER));if(e>SMALLEST_UNSAFE_INTEGER||!isFinite(e))throw new RangeError("Expected max to be at most ".concat(SMALLEST_UNSAFE_INTEGER));const r=e-t;return r<=0||!isFinite(r)?()=>t:r===UINT32_MAX?0===t?uint32:add(int32,t+INT32_SIZE):r0&&void 0!==arguments[0]?arguments[0]:DEFAULT_STRING_POOL;const e=t.length;if(!e)throw new Error("Expected pool not to be an empty string");const r=integer(0,e-1);return(e,n)=>{let i="";for(let o=0;o{try{if("xxx"==="x".repeat(3))return(t,e)=>t.repeat(e)}catch(t){}return(t,e)=>{let r="";for(;e>0;)1&e&&(r+=t),e>>=1,t+=t;return r}})(),nativeMath={next:()=>Math.random()*UINT32_SIZE|0},I32Array=(()=>{try{const t=new ArrayBuffer(4),e=new Int32Array(t);if(e[0]=INT32_SIZE,e[0]===-INT32_SIZE)return Int32Array}catch(t){}return Array})();function createEntropy(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:nativeMath,e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:16;const r=[];r.push(0|(new Date).getTime());for(let n=1;n{try{if(-5===Math.imul(UINT32_MAX,5))return Math.imul}catch(t){}return(t,e)=>{const r=65535&t,n=65535&e;return r*n+((t>>>16&65535)*n+r*(e>>>16&65535)<<16>>>0)|0}})(),ARRAY_SIZE=624,ARRAY_MAX=ARRAY_SIZE-1,M=397,ARRAY_SIZE_MINUS_M=ARRAY_SIZE-M,A=2567483615;class MersenneTwister19937{constructor(){this.data=new I32Array(ARRAY_SIZE),this.index=0,this.uses=0}static seed(t){return(new MersenneTwister19937).seed(t)}static seedWithArray(t){return(new MersenneTwister19937).seedWithArray(t)}static autoSeed(){return MersenneTwister19937.seedWithArray(createEntropy())}next(){(0|this.index)>=ARRAY_SIZE&&(refreshData(this.data),this.index=0);const t=this.data[this.index];return this.index=this.index+1|0,this.uses+=1,0|temper(t)}getUseCount(){return this.uses}discard(t){if(t<=0)return this;for(this.uses+=t,(0|this.index)>=ARRAY_SIZE&&(refreshData(this.data),this.index=0);t+this.index>ARRAY_SIZE;)t-=ARRAY_SIZE-this.index,refreshData(this.data),this.index=0;return this.index=this.index+t|0,this}seed(t){let e=0;this.data[0]=e=0|t;for(let t=1;t>>30,1812433253)+t|0;return this.index=ARRAY_SIZE,this.uses=0,this}seedWithArray(t){return this.seed(19650218),seedWithArray(this.data,t),this}}function refreshData(t){let e=0,r=0;for(;(0|e)>>1^(1&r?A:0);for(;(0|e)>>1^(1&r?A:0);r=t[ARRAY_MAX]&INT32_SIZE|t[0]&INT32_MAX,t[ARRAY_MAX]=t[M-1]^r>>>1^(1&r?A:0)}function temper(t){return t^=t>>>11,t^=t<<7&2636928640,(t^=t<<15&4022730752)^t>>>18}function seedWithArray(t,e){let r=1,n=0;const i=e.length;let o=0|Math.max(i,ARRAY_SIZE),s=0|t[0];for(;(0|o)>0;--o)t[r]=s=(t[r]^imul(s^s>>>30,1664525))+(0|e[n])+(0|n)|0,++n,(0|(r=r+1|0))>ARRAY_MAX&&(t[0]=t[ARRAY_MAX],r=1),n>=i&&(n=0);for(o=ARRAY_MAX;(0|o)>0;--o)t[r]=s=(t[r]^imul(s^s>>>30,1566083941))-r|0,(0|(r=r+1|0))>ARRAY_MAX&&(t[0]=t[ARRAY_MAX],r=1);t[0]=INT32_SIZE}function checkFloat(t){return t>0&&t<=1}function examplesBaggingWithReplacement(t,e,r){var n,i=integer(0,t.rows-1);if(void 0===r)n=MersenneTwister19937.autoSeed();else{if(!Number.isInteger(r))throw new RangeError("Expected seed must be undefined or integer not ".concat(r));n=MersenneTwister19937.seed(r)}for(var o=new Array(t.rows),s=new Array(t.rows),a=0;ar.load(t))}else this.replacement=t.replacement,this.maxFeatures=t.maxFeatures,this.nEstimators=t.nEstimators,this.treeOptions=t.treeOptions,this.isClassifier=t.isClassifier,this.seed=t.seed,this.useSampleBagging=t.useSampleBagging}train(t,e){if(t=Matrix.checkMatrix(t),this.maxFeatures=this.maxFeatures||t.columns,checkFloat(this.maxFeatures))this.n=Math.floor(t.columns*this.maxFeatures);else{if(!Number.isInteger(this.maxFeatures))throw new RangeError("Cannot process the maxFeatures parameter ".concat(this.maxFeatures));if(this.maxFeatures>t.columns)throw new RangeError("The maxFeatures parameter should be less than ".concat(t.columns));this.n=this.maxFeatures}if(this.isClassifier)var r=DecisionTreeClassifier;else r=DecisionTreeRegression;this.estimators=new Array(this.nEstimators),this.indexes=new Array(this.nEstimators);for(var n=0;nt.toJSON()),useSampleBagging:this.useSampleBagging}}}const defaultOptions$2={maxFeatures:1,replacement:!0,nEstimators:10,seed:42,useSampleBagging:!1};class RandomForestClassifier extends RandomForestBase{constructor(t,e){!0===t?super(!0,e.baseModel):((t=Object.assign({},defaultOptions$2,t)).isClassifier=!0,super(t))}selection(t){return mode(t)}toJSON(){return{baseModel:super.toJSON(),name:"RFClassifier"}}static load(t){if("RFClassifier"!==t.name)throw new RangeError("Invalid model: ".concat(t.name));return new RandomForestClassifier(!0,t)}}function mode(t){return t.sort((e,r)=>t.filter(t=>t===e).length-t.filter(t=>t===r).length).pop()}var commonjsGlobal="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function createCommonjsModule(t,e){return t(e={exports:{}},e.exports),e.exports}var medianQuickselect_min=createCommonjsModule(function(t){!function(){function e(t){for(var e=0,i=t.length-1,o=void 0,s=void 0,a=void 0,h=n(e,i);;){if(i<=e)return t[h];if(i==e+1)return t[e]>t[i]&&r(t,e,i),t[h];for(t[o=n(e,i)]>t[i]&&r(t,o,i),t[e]>t[i]&&r(t,e,i),t[o]>t[e]&&r(t,o,e),r(t,o,e+1),s=e+1,a=i;;){do{s++}while(t[e]>t[s]);do{a--}while(t[a]>t[e]);if(a=h&&(i=a-1)}}var r=function(t,e,r){var n;return n=[t[r],t[e]],t[e]=n[0],t[r]=n[1],n},n=function(t,e){return~~((t+e)/2)};t.exports?t.exports=e:window.median=e}()});function median(t){if(!src(t))throw new TypeError("input must be an array");if(0===t.length)throw new TypeError("input must not be empty");return medianQuickselect_min(t.slice())}const selectionMethods={mean:mean,median:median},defaultOptions$3={maxFeatures:1,replacement:!1,nEstimators:10,treeOptions:{},selectionMethod:"mean",seed:42,useSampleBagging:!1};class RandomForestRegression extends RandomForestBase{constructor(t,e){if(!0===t)super(!0,e.baseModel),this.selectionMethod=e.selectionMethod;else{if("mean"!==(t=Object.assign({},defaultOptions$3,t)).selectionMethod&&"median"!==t.selectionMethod)throw new RangeError("Unsupported selection method ".concat(t.selectionMethod));t.isClassifier=!1,super(t),this.selectionMethod=t.selectionMethod}}selection(t){return selectionMethods[this.selectionMethod](t)}toJSON(){return{baseModel:super.toJSON(),selectionMethod:this.selectionMethod,name:"RFRegression"}}static load(t){if("RFRegression"!==t.name)throw new RangeError("Invalid model: ".concat(t.name));return new RandomForestRegression(!0,t)}}class PCA{constructor(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!0===t){const t=e;return this.center=t.center,this.scale=t.scale,this.means=t.means,this.stdevs=t.stdevs,this.U=Matrix.checkMatrix(t.U),void(this.S=t.S)}t=new Matrix(t);const{isCovarianceMatrix:r=!1,center:n=!0,scale:i=!1}=e;if(this.center=n,this.scale=i,this.means=null,this.stdevs=null,r)this._computeFromCovarianceMatrix(t);else if("boolean"==typeof e.useCovarianceMatrix?e.useCovarianceMatrix:t.rows>t.columns){this._adjust(t);const e=new MatrixTransposeView(t).mmul(t).div(t.rows-1);this._computeFromCovarianceMatrix(e)}else{this._adjust(t);var o=new SingularValueDecomposition(t,{computeLeftSingularVectors:!1,computeRightSingularVectors:!0,autoTranspose:!0});this.U=o.rightSingularVectors;const e=o.diagonal,r=[];for(const n of e)r.push(n*n/(t.rows-1));this.S=r}}static load(t){if("string"!=typeof t.name)throw new TypeError("model must have a name property");if("PCA"!==t.name)throw new RangeError("invalid model: ".concat(t.name));return new PCA(!0,t)}predict(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const{nComponents:r=this.U.columns}=e;t=new Matrix(t),this.center&&(t.subRowVector(this.means),this.scale&&t.divRowVector(this.stdevs));var n=t.mmul(this.U);return n.subMatrix(0,n.rows-1,0,r-1)}getExplainedVariance(){var t=0;for(const e of this.S)t+=e;return this.S.map(e=>e/t)}getCumulativeVariance(){for(var t=this.getExplainedVariance(),e=1;eMath.sqrt(t))}getLoadings(){return this.U.transpose()}toJSON(){return{name:"PCA",center:this.center,scale:this.scale,means:this.means,stdevs:this.stdevs,U:this.U,S:this.S}}_adjust(t){if(this.center){const r=t.mean("column"),n=this.scale?t.standardDeviation("column",{mean:r}):null;if(this.means=r,t.subRowVector(r),this.scale){for(var e=0;eArray.from({length:r}));for(let i=0;ie?1:0},c=function(t,e,i,o,s){var a;if(null==i&&(i=0),null==s&&(s=r),i<0)throw new Error("lo must be non-negative");for(null==o&&(o=t.length);ir;0<=r?e++:e--)c.push(e);return c}.apply(this).reverse()).length;od;0<=d?++f:--f)p.push(o(t,n));return p},g=function(t,e,n,i){var o,s,a;for(null==i&&(i=r),o=t[n];n>e&&i(o,s=t[a=n-1>>1])<0;)t[n]=s,n=a;return t[n]=o},d=function(t,e,n){var i,o,s,a,h;for(null==n&&(n=r),o=t.length,h=e,s=t[e],i=2*e+1;i0;){var i=r.shift();t>=i.distance?n.push(i):r=r.concat(i.children)}return n}group(t){if(!Number.isInteger(t)||t<1)throw new RangeError("Number of groups must be a positive integer");const e=new heap$1(function(t,e){return e.distance-t.distance});for(e.push(this);e.size()e.push(t))}var n=new Cluster;return n.children=e.toArray(),n.distance=this.distance,n}traverse(t){!function t(e,r){if(r(e),e.children)for(var n=e.children.length-1;n>=0;n--)t(e.children[n],r)}(this,t)}}class ClusterLeaf extends Cluster{constructor(t){super(),this.index=t,this.distance=0,this.children=[]}}function simpleLink(t,e,r){for(var n=1e101,i=0;i1&&void 0!==arguments[1]?arguments[1]:{};const{distanceFunction:r=euclidean,method:n="single",isDistanceMatrix:i=!1}=e;let o;var s=t.length,a=t;if(i||(a=src$1(t,r)),"string"==typeof n)switch(n){case"single":o=simpleLink;break;case"complete":o=completeLink;break;case"average":o=averageLink;break;case"centroid":o=centroidLink;break;case"ward":o=wardLink;break;default:throw new RangeError("unknown clustering method: ".concat(n))}else if("function"!=typeof n)throw new TypeError("method must be a string or function");for(var h=new Array(s),c=0;c1;){l={},u=1e6;for(var m=0;m0;){let t=x.shift();const e=function(e){return-1!==t.indexOf(e)},r=function(e){return-1===t.indexOf(e)};for(var b=0;b0){var S=x[b].filter(r);t=t.concat(S),x.splice(b--,1)}}y[M++]=t}y.length=M;for(var A=0;An.d&&(n.d=s-a,n.p=u)}return n}function intrDist(t,e,r){for(var n=0,i=0,o=0;o1&&void 0!==arguments[1]?arguments[1]:{};const{distanceFunction:r=euclidean}=e;var n,i,o,s,a,h=new Cluster;h.children=new Array(t.length),h.index=new Array(t.length);for(var c=0;c0;){i=0,o=0;for(var l=0;li&&(i=n,o=l)}if(i=0,2===u[o].index.length)u[o].children=[u[o].index[0],u[o].index[1]],u[o].distance=r(t[u[o].index[0].index],t[u[o].index[1].index]);else if(3===u[o].index.length){u[o].children=[u[o].index[0],u[o].index[1],u[o].index[2]];var g=[r(t[u[o].index[0].index],t[u[o].index[1].index]),r(t[u[o].index[1].index],t[u[o].index[2].index])];u[o].distance=(g[0]+g[1])/2}else{for(var d=new Cluster,p=new Cluster,w=[new Array(u[o].index.length),[]],v=0;vi&&(i=s,a=x)}for(w[1]=[a],w[0].splice(a,1),s=diff(w,t,r);s.d>0;)w[1].push(w[0][s.p]),w[0].splice(s.p,1),s=diff(w,t,r);var M=new Array(w[0].length);d.index=new Array(w[0].length);for(var b=0;b2&&void 0!==arguments[2]?arguments[2]:defaultOptions$4;const n=r.distanceFunction||defaultOptions$4.distanceFunction,i=r.similarityFunction||defaultOptions$4.similarityFunction;let o=-1;if("function"==typeof i){let r=Number.MIN_VALUE;for(let n=0;nr&&(r=s,o=n)}}else{if("function"!=typeof n)throw new Error("A similarity or distance function it's required");{let r=Number.MAX_VALUE;for(let i=0;in)return!1;return!0}const LOOP=8,FLOAT_MUL=1/16777216,sh1=15,sh2=18,sh3=11;function multiply_uint32(t,e){const r=65535&(t>>>=0);return((t-r)*(e>>>=0)>>>0)+r*e>>>0}class XSadd{constructor(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:Date.now();this.state=new Uint32Array(4),this.init(t),this.random=this.getFloat.bind(this)}getUint32(){return this.nextState(),this.state[3]+this.state[2]>>>0}getFloat(){return(this.getUint32()>>>8)*FLOAT_MUL}init(t){if(!Number.isInteger(t))throw new TypeError("seed must be an integer");this.state[0]=t,this.state[1]=0,this.state[2]=0,this.state[3]=0;for(let t=1;t>>30>>>0)>>>0;this.periodCertification();for(let t=0;t>>sh2,t^=this.state[3]<1&&void 0!==arguments[1]?arguments[1]:{},r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:Math.random;const{size:n=1,replace:i=!1,probabilities:o}=e;let s,a;if(s="number"==typeof t?getArray(t):t.slice(),o){if(!i)throw new Error("choice with probabilities and no replacement is not implemented");if(o.length!==s.length)throw new Error("the length of probabilities option should be equal to the number of choices");a=[o[0]];for(let t=1;tPROB_TOLERANCE)throw new Error("probabilities should sum to 1, but instead sums to ".concat(a[a.length-1]))}if(!1===i&&n>s.length)throw new Error("size option is too large");const h=[];for(let t=0;tr[t];)t++;return t}return Math.floor(n*t)}class Random{constructor(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:Math.random;if("number"==typeof t){const e=new XSadd(t);this.randomGenerator=e.random}else this.randomGenerator=t}choice(t,e){return randomChoice(t,e,this.randomGenerator)}random(){return this.randomGenerator()}randInt(t,e){return void 0===e&&(e=t,t=0),t+Math.floor(this.randomGenerator()*(e-t))}randomSample(t){const e=[];for(let r=0;r1){for(var s={dist:-1,index:-1},a=0;as.dist&&(s.dist=r[o[0]][a],s.index=a);if(o[1]=s.index,e>2)for(var h=2;hc.dist&&(c=Object.assign({},l))}o[h]=c.index}}return o.map(e=>t[e])}function kmeanspp(t,e){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const n=(t=new Matrix(t)).rows,i=new Random(r.seed),o=[],s=r.localTrials||2+Math.floor(Math.log(e)),a=i.randInt(n);o.push(t.getRow(a));let h=new Matrix(1,t.rows);for(let e=0;et.length||!Number.isInteger(e))throw new Error("K should be a positive integer smaller than the number of points");var n;if(Array.isArray(r.initialization)){if(r.initialization.length!==e)throw new Error("The initial centers should have the same length as K");n=r.initialization}else switch(r.initialization){case"kmeans++":n=kmeanspp(t,e,r);break;case"random":n=random(t,e,r.seed);break;case"mostDistant":n=mostDistant(t,e,calculateDistanceMatrix(t,r.distanceFunction),r.seed);break;default:throw new Error('Unknown initialization method: "'.concat(r.initialization,'"'))}0===r.maxIterations&&(r.maxIterations=Number.MAX_VALUE);var i=new Array(t.length);if(r.withIterations)return kmeansGenerator(n,t,i,e,r);for(var o,s=!1,a=0;!s&&an&&(n=s,i=o)}return i}function calculateLogProbability(t,e,r,n){return t-=e,Math.log(r*Math.exp(t*t/n))}class MultinomialNB{constructor(t){t&&(this.conditionalProbability=Matrix.checkMatrix(t.conditionalProbability),this.priorProbability=Matrix.checkMatrix(t.priorProbability))}train(t,e){if((t=Matrix.checkMatrix(t)).rows!==e.length)throw new RangeError("the size of the training set and the training labels must be the same.");var r=separateClasses(t,e);this.priorProbability=new Matrix(r.length,1);for(var n=0;ne&&s.pop()}for(m=0;mt[n[i]]-e[n[i]]);const o=Math.floor(t.length/2),s=new Node(t[o],i,r);return s.left=buildTree(t.slice(0,o),e+1,s,n),s.right=buildTree(t.slice(o+1),e+1,s,n),s}function restoreParent(t){t.left&&(t.left.parent=t,restoreParent(t.left)),t.right&&(t.right.parent=t,restoreParent(t.right))}class BinaryHeap{constructor(t){this.content=[],this.scoreFunction=t}push(t){this.content.push(t),this.bubbleUp(this.content.length-1)}pop(){var t=this.content[0],e=this.content.pop();return this.content.length>0&&(this.content[0]=e,this.sinkDown(0)),t}peek(){return this.content[0]}size(){return this.content.length}bubbleUp(t){for(var e=this.content[t];t>0;){const r=Math.floor((t+1)/2)-1,n=this.content[r];if(!(this.scoreFunction(e)2&&void 0!==arguments[2]?arguments[2]:{};if(!0===t){const t=e;return this.kdTree=new KDTree(t.kdTree,r),this.k=t.k,this.classes=new Set(t.classes),void(this.isEuclidean=t.isEuclidean)}const n=new Set(e),{distance:i=euclidean,k:o=n.size+1}=r,s=new Array(t.length);for(var a=0;a1&&void 0!==arguments[1]?arguments[1]:euclidean;if("KNN"!==t.name)throw new Error("invalid model: ".concat(t.name));if(!t.isEuclidean&&e===euclidean)throw new Error("a custom distance function was used to create the model. Please provide it again");if(t.isEuclidean&&e!==euclidean)throw new Error("the model was created with the default distance function. Do not load it with another one");return new KNN(!0,t,e)}toJSON(){return{name:"KNN",kdTree:this.kdTree,k:this.k,classes:Array.from(this.classes),isEuclidean:this.isEuclidean}}predict(t){if(Array.isArray(t)){if("number"==typeof t[0])return getSinglePrediction(this,t);if(Array.isArray(t[0])&&"number"==typeof t[0][0]){const r=new Array(t.length);for(var e=0;eo&&(i=c,o=u)}return i}function norm(t){return Math.sqrt(t.clone().apply(pow2array).sum())}function pow2array(t,e){this.set(t,e,this.get(t,e)**2)}function initializeMatrices(t,e){if(e)for(var r=0;rh&&ph;){var A=w.mmul(b);A.div(norm(A)),S=M,M=t.mmul(A);var E=v.mmul(M);E.div(norm(E)),b=e.mmul(E)}S=M;var R=w.mmul(S),T=S.transpose().mmul(S).get(0,0),k=R.div(T),N=norm(k);k.div(N),S.mul(N),A.mul(N),R=b.transpose().mmul(S),T=S.transpose().mmul(S).get(0,0);var C=R.div(T).get(0,0);t.sub(S.mmul(k.transpose())),e.sub(S.clone().mul(C).mmul(E.transpose())),u.setColumn(p,S),l.setColumn(p,k),f.setColumn(p,b),m.setColumn(p,E),d.setColumn(p,A),g.set(p,p,C),p++}p--,u=u.subMatrix(0,u.rows-1,0,p),l=l.subMatrix(0,l.rows-1,0,p),f=f.subMatrix(0,f.rows-1,0,p),m=m.subMatrix(0,m.rows-1,0,p),d=d.subMatrix(0,d.rows-1,0,p),g=g.subMatrix(0,p,0,p),this.ssqYcal=a,this.E=t,this.F=e,this.T=u,this.P=l,this.U=f,this.Q=m,this.W=d,this.B=g,this.PBQ=l.mmul(g).mmul(m.transpose()),this.R2X=S.transpose().mmul(S).mmul(k.transpose().mmul(k)).div(s).get(0,0)}predict(t){var e=Matrix.checkMatrix(t);this.scale&&(e=e.subRowVector(this.meanX).divRowVector(this.stdDevX));var r=e.mmul(this.PBQ);return r=r.mulRowVector(this.stdDevY).addRowVector(this.meanY)}getExplainedVariance(){return this.R2X}toJSON(){return{name:"PLS",R2X:this.R2X,meanX:this.meanX,stdDevX:this.stdDevX,meanY:this.meanY,stdDevY:this.stdDevY,PBQ:this.PBQ,tolerance:this.tolerance,scale:this.scale}}static load(t){if("PLS"!==t.name)throw new RangeError("Invalid model: ".concat(t.name));return new PLS(!0,t)}}function maxSumColIndex(t){return Matrix.rowVector(t.sum("column")).maxIndex()[0]}class KOPLS{constructor(t,e){if(!0===t)this.trainingSet=new Matrix(e.trainingSet),this.YLoadingMat=new Matrix(e.YLoadingMat),this.SigmaPow=new Matrix(e.SigmaPow),this.YScoreMat=new Matrix(e.YScoreMat),this.predScoreMat=initializeMatrices(e.predScoreMat,!1),this.YOrthLoadingVec=initializeMatrices(e.YOrthLoadingVec,!1),this.YOrthEigen=e.YOrthEigen,this.YOrthScoreMat=initializeMatrices(e.YOrthScoreMat,!1),this.toNorm=initializeMatrices(e.toNorm,!1),this.TURegressionCoeff=initializeMatrices(e.TURegressionCoeff,!1),this.kernelX=initializeMatrices(e.kernelX,!0),this.kernel=e.kernel,this.orthogonalComp=e.orthogonalComp,this.predictiveComp=e.predictiveComp;else{if(void 0===t.predictiveComponents)throw new RangeError("no predictive components found!");if(void 0===t.orthogonalComponents)throw new RangeError("no orthogonal components found!");if(void 0===t.kernel)throw new RangeError("no kernel found!");this.orthogonalComp=t.orthogonalComponents,this.predictiveComp=t.predictiveComponents,this.kernel=t.kernel}}train(t,e){t=Matrix.checkMatrix(t),e=Matrix.checkMatrix(e),this.trainingSet=t.clone();var r=this.kernel.compute(t),n=Matrix.eye(r.rows,r.rows,1),i=r;r=new Array(this.orthogonalComp+1);for(let t=0;t2&&void 0!==arguments[2]?arguments[2]:{};if(e.length!==t.length)throw new Error("predicted and actual must have the same length");r=n.labels?new Set(n.labels):new Set([...t,...e]),r=Array.from(r),n.sort&&r.sort(n.sort);const i=Array.from({length:r.length});for(let t=0;t=0&&s>=0&&i[o][s]++}return new ConfusionMatrix(i,r)}getMatrix(){return this.matrix}getLabels(){return this.labels}getTotalCount(){let t=0;for(var e=0;e1&&(c[e-1]=0);do{e++}while(c[e]>0);for(r=e-1,t=e;0===c[t];)c[t++]=-1;if(-1===c[t])c[t]=c[r],o=c[r]-1,n=t-1,i=r-1,c[r]=-1;else{if(t===c[0])return 0;c[e]=c[t],o=c[t]-1,c[t]=0,n=e-1,i=t-1}}return 1}if("index"===r.mode)for(yield a.slice();l();)a[o]=s[n],yield a.slice();else{if("mask"!==r.mode)throw new Error("Invalid mode");for(yield h.slice();l();)h[n]=1,h[i]=0,yield h.slice()}};const CV={};function check(t,e){if(t.length!==e.length)throw new Error("features and labels should have the same length")}function initMatrix(t,e){return new Array(t).fill(0).map(()=>new Array(e).fill(0))}function getDistinct(t){var e=new Set;for(let r=0;r=0;t--)l.splice(i[t],1);o?validateWithCallback(e,r,i,l,a,s,o):validate(t,e,r,n,i,l,a,s)}return new src$2(a,s)},CV.kFold=function(t,e,r,n,i){if("function"==typeof n){var o=n;i=r,r=e,e=t}check(e,r);const s=getDistinct(r),a=initMatrix(s.length,s.length);for(var h=e.length,c=new Array(h),u=0;u0?(Math.exp(e*t)-1)/e+e:t}function softExponentialPrime(t,e){return e<0?1/(1-e*(e+t)):Math.exp(e*t)}const ACTIVATION_FUNCTIONS={tanh:{activation:Math.tanh,derivate:t=>1-t*t},identity:{activation:t=>t,derivate:()=>1},logistic:{activation:logistic,derivate:t=>logistic(t)*(1-logistic(t))},arctan:{activation:Math.atan,derivate:t=>1/(t*t+1)},softsign:{activation:t=>t/(1+Math.abs(t)),derivate:t=>1/((1+Math.abs(t))*(1+Math.abs(t)))},relu:{activation:t=>t<0?0:t,derivate:t=>t<0?0:1},softplus:{activation:t=>Math.log(1+Math.exp(t)),derivate:t=>1/(1+Math.exp(-t))},bent:{activation:t=>(Math.sqrt(t*t+1)-1)/2+t,derivate:t=>t/(2*Math.sqrt(t*t+1))+1},sinusoid:{activation:Math.sin,derivate:Math.cos},sinc:{activation:t=>0===t?1:Math.sin(t)/t,derivate:t=>0===t?0:Math.cos(t)/t-Math.sin(t)/(t*t)},gaussian:{activation:t=>Math.exp(-t*t),derivate:t=>-2*t*Math.exp(-t*t)},"parametric-relu":{activation:(t,e)=>t<0?e*t:t,derivate:(t,e)=>t<0?e:1},"exponential-elu":{activation:expELU,derivate:(t,e)=>t<0?expELU(t,e)+e:1},"soft-exponential":{activation:softExponential,derivate:softExponentialPrime}};class Layer{constructor(t){this.inputSize=t.inputSize,this.outputSize=t.outputSize,this.regularization=t.regularization,this.epsilon=t.epsilon,this.activation=t.activation,this.activationParam=t.activationParam;var e=ACTIVATION_FUNCTIONS[t.activation],r=e.activation.length,n=r>1?r=>e.activation(r,t.activationParam):e.activation,i=r>1?r=>e.derivate(r,t.activationParam):e.derivate;this.activationFunction=function(t,e){this.set(t,e,n(this.get(t,e)))},this.derivate=function(t,e){this.set(t,e,i(this.get(t,e)))},t.model?(this.W=Matrix.Matrix.checkMatrix(t.W),this.b=Matrix.Matrix.checkMatrix(t.b)):(this.W=Matrix.Matrix.rand(this.inputSize,this.outputSize),this.b=Matrix.Matrix.zeros(1,this.outputSize),this.W.apply(function(e,r){this.set(e,r,this.get(e,r)/Math.sqrt(t.inputSize))}))}forward(t){var e=t.mmul(this.W).addRowVector(this.b);return e.apply(this.activationFunction),this.a=e.clone(),e}backpropagation(t,e){this.dW=e.transpose().mmul(t),this.db=Matrix.Matrix.rowVector(t.sum("column"));var r=e.clone();return t.mmul(this.W.transpose()).mul(r.apply(this.derivate))}update(){this.dW.add(this.W.clone().mul(this.regularization)),this.W.add(this.dW.mul(-this.epsilon)),this.b.add(this.db.mul(-this.epsilon))}toJSON(){return{model:"Layer",inputSize:this.inputSize,outputSize:this.outputSize,regularization:this.regularization,epsilon:this.epsilon,activation:this.activation,W:this.W,b:this.b}}static load(t){if("Layer"!==t.model)throw new RangeError("the current model is not a Layer model");return new Layer(t)}}class OutputLayer extends Layer{constructor(t){super(t),this.activationFunction=function(t,e){this.set(t,e,Math.exp(this.get(t,e)))}}static load(t){if("Layer"!==t.model)throw new RangeError("the current model is not a Layer model");return new OutputLayer(t)}}class FeedForwardNeuralNetworks{constructor(t){if((t=t||{}).model){this.hiddenLayers=t.hiddenLayers,this.iterations=t.iterations,this.learningRate=t.learningRate,this.regularization=t.regularization,this.dicts=t.dicts,this.activation=t.activation,this.activationParam=t.activationParam,this.model=new Array(t.layers.length);for(var e=0;e=0;--n){var o=n>0?this.model[n-1].a:t;i=this.model[n].backpropagation(i,o)}for(n=0;n0?e=this[t]-1:this.som.torus&&(e=this.som.gridDim[t]-1),void 0!==e)"x"===t?(r=e,n=this.y):(r=this.x,n=e),this.neighbors[t][0]=this.som.nodes[r][n];this[t]0&&e>0))throw new Error("x and y must be positive");this.times={findBMU:0,adjust:0},this.randomizer=this.options.randomizer,this.iterationCount=0,this.iterations=this.options.iterations,this.startLearningRate=this.learningRate=this.options.learningRate,this.mapRadius=Math.floor(Math.max(t,e)/2),this.algorithmMethod=this.options.method,this._initNodes(),this.done=!1}else this.done=!0}function getConverters(t){for(var e=t.length,r=new Array(e),n=new Array(e),i=0;i0?("random"===this.algorithmMethod?(t=this.mapRadius*Math.exp(-this.iterationCount/this.timeConstant),e=getRandomValue(this.trainingSet,this.randomizer),this._adjust(e,t),this.learningRate=this.startLearningRate*Math.exp(-this.iterationCount/this.numIterations)):(r=-Math.floor(this.iterationCount/this.trainingSet.length),t=this.mapRadius*Math.exp(r/this.timeConstant),e=this.trainingSet[this.iterationCount%this.trainingSet.length],this._adjust(e,t),(this.iterationCount+1)%this.trainingSet.length==0&&(this.learningRate=this.startLearningRate*Math.exp(r/Math.floor(this.numIterations/this.trainingSet.length)))),this.iterationCount++,!0):(this.done=!0,!1));var t,e,r},SOM.prototype._adjust=function(t,e){var r,n,i,o,s=Date.now(),a=this._findBestMatchingUnit(t),h=Date.now();this.times.findBMU+=h-s;var c=Math.floor(e),u=a.x-c,l=a.x+c,f=a.y-c,m=a.y+c;for(r=u;r<=l;r++){var g=r;for(r<0?g+=this.x:r>=this.x&&(g-=this.x),n=f;n<=m;n++){var d=n;n<0?d+=this.y:n>=this.y&&(d-=this.y),(i=a[this.distanceMethod](this.nodes[g][d]))0&&e!==this.coefficients.length-1?s=" + ".concat(s):e!==this.coefficients.length-1&&(s=" ".concat(s))),o=s+o;return"+"===o.charAt(0)&&(o=o.slice(1)),"f(x) = ".concat(o)}static load(t){if("polynomialRegression"!==t.name)throw new TypeError("not a polynomial regression model");return new PolynomialRegression(!0,t)}}function regress(t,e,r,n){const i=e.length;let o;if(Array.isArray(n))n=(o=n).length;else{n++,o=new Array(n);for(let t=0;t=0?"f(x) = ".concat(maybeToPrecision(this.B,t),"e^{").concat(maybeToPrecision(this.A,t),"x}"):"f(x) = \\frac{".concat(maybeToPrecision(this.B,t),"}{e^{").concat(maybeToPrecision(-this.A,t),"x}}")}static load(t){if("exponentialRegression"!==t.name)throw new TypeError("not a exponential regression model");return new ExponentialRegression(!0,t)}}function regress$2(t,e,r){const n=e.length,i=new Array(n);for(let t=0;t=0?"f(x) = ".concat(maybeToPrecision(this.A,t),"x^{").concat(maybeToPrecision(this.B,t),"}"):"f(x) = \\frac{".concat(maybeToPrecision(this.A,t),"}{x^{").concat(maybeToPrecision(-this.B,t),"}}")).replace(/e([+-]?[0-9]+)/g,"e^{$1}")}static load(t){if("powerRegression"!==t.name)throw new TypeError("not a power regression model");return new PowerRegression(!0,t)}}function regress$3(t,e,r){const n=e.length,i=new Array(n),o=new Array(n);for(let t=0;t2&&void 0!==arguments[2]?arguments[2]:{};const{intercept:n=!0,statistics:i=!0}=r;if(this.statistics=i,!0===t)this.weights=e.weights,this.inputs=e.inputs,this.outputs=e.outputs,this.intercept=e.intercept;else{t=new Matrix(t),e=new Matrix(e),n&&t.addColumn(new Array(t.rows).fill(1));let r=t.transpose();const o=r.mmul(t),s=r.mmul(e),a=new SingularValueDecomposition(o).inverse(),h=s.transpose().mmul(a).transpose();if(this.weights=h.to2DArray(),this.inputs=t.columns,this.outputs=e.columns,n&&this.inputs--,this.intercept=n,i){const r=t.mmul(h),n=e.clone().addM(r.neg()).to2DArray().map(t=>Math.pow(t[0],2)).reduce((t,e)=>t+e)/(e.rows-t.columns);this.stdError=Math.sqrt(n),this.stdErrorMatrix=pseudoInverse(o).mul(n),this.stdErrors=this.stdErrorMatrix.diagonal().map(t=>Math.sqrt(t)),this.tStats=this.weights.map((t,e)=>0===this.stdErrors[e]?0:t[0]/this.stdErrors[e])}}}predict(t){if(Array.isArray(t)){if("number"==typeof t[0])return this._predict(t);if(Array.isArray(t[0])){const e=new Array(t.length);for(let r=0;r({label:e===this.weights.length-1?"Intercept":"X Variable ".concat(e+1),coefficients:t,standardError:this.stdErrors[e],tStat:this.tStats[e]}))}:void 0}}static load(t){if("multivariateLinearRegression"!==t.name)throw new Error("not a MLR model");return new MultivariateLinearRegression(!0,t)}}const{squaredEuclidean:squaredEuclidean$1}=euclidean$1,defaultOptions$8={sigma:1};class GaussianKernel{constructor(t){t=Object.assign({},defaultOptions$8,t),this.sigma=t.sigma,this.divisor=2*t.sigma*t.sigma}compute(t,e){const r=squaredEuclidean$1(t,e);return Math.exp(-r/this.divisor)}}var gaussianKernel=GaussianKernel;const defaultOptions$9={degree:1,constant:1,scale:1};class PolynomialKernel{constructor(t){t=Object.assign({},defaultOptions$9,t),this.degree=t.degree,this.constant=t.constant,this.scale=t.scale}compute(t,e){for(var r=0,n=0;n0&&e!==this.coefficients.length-1?s=" + ".concat(s):e!==this.coefficients.length-1&&(s=" ".concat(s))),o=s+o;return"+"===o.charAt(0)&&(o=o.slice(1)),"f(x) = ".concat(o)}static load(t){if("robustPolynomialRegression"!==t.name)throw new TypeError("not a RobustPolynomialRegression model");return new RobustPolynomialRegression(!0,t)}}function robustPolynomial(t,e,r,n){let i=Array(n).fill(0).map((t,e)=>e);const o=getRandomTuples(e,r,n);for(var s,a=0;at.residual-e.residual);var e=t.length,r=Math.floor(e/2);return e%2==0?t[r-1]:t[r]}function errorCalculation(t,e,r){var n=0;const i=r(e);for(var o=0;oa(t)),c=gradientFunction(t,h,e,n,i),u=matrixFunction(t,h),l=inverse(s.add(c.mmul(c.transpose())));return(e=(e=new Matrix([e])).sub(l.mmul(c).mmul(u).mul(n).transpose())).to1DArray()}function levenbergMarquardt(t,e){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},{maxIterations:n=100,gradientDifference:i=.1,damping:o=0,errorTolerance:s=.01,minValues:a,maxValues:h,initialValues:c}=r;if(o<=0)throw new Error("The damping option must be a positive number");if(!t.x||!t.y)throw new Error("The data parameter must have x and y elements");if(!Array.isArray(t.x)||t.x.length<2||!Array.isArray(t.y)||t.y.length<2)throw new Error("The data parameter elements must be an array with more than 2 points");if(t.x.length!==t.y.length)throw new Error("The data parameter elements must have the same size");var u=c||new Array(e.length).fill(1);let l=u.length;if(h=h||new Array(l).fill(Number.MAX_SAFE_INTEGER),a=a||new Array(l).fill(Number.MIN_SAFE_INTEGER),h.length!==a.length)throw new Error("minValues and maxValues must be the same size");if(!Array.isArray(u))throw new Error("initialValues must be an array");for(var f=errorCalculation(t,u,e),m=f<=s,g=0;g=t.length)throw new RangeError("invalid lower bound");if(void 0===i)i=t.length-1;else if((i|=0)=t.length)throw new RangeError("invalid upper bound");for(;n<=i;)if((s=+r(t[o=n+(i-n>>1)],e,o,t))<0)n=o+1;else{if(!(s>0))return o;i=o-1}return~n};function assertNumber(t){if("number"!=typeof t||Number.isNaN(t))throw new TypeError("Expected a number")}var ascending=(t,e)=>(assertNumber(t),assertNumber(e),t-e),descending=(t,e)=>(assertNumber(t),assertNumber(e),e-t),numSort={ascending:ascending,descending:descending},index$2=Object.freeze({default:numSort,__moduleExports:numSort,ascending:ascending,descending:descending});const largestPrime=2147483647,primeNumbers=[largestPrime,5,11,23,47,97,197,397,797,1597,3203,6421,12853,25717,51437,102877,205759,411527,823117,1646237,3292489,6584983,13169977,26339969,52679969,105359939,210719881,421439783,842879579,1685759167,433,877,1759,3527,7057,14143,28289,56591,113189,226379,452759,905551,1811107,3622219,7244441,14488931,28977863,57955739,115911563,231823147,463646329,927292699,1854585413,953,1907,3821,7643,15287,30577,61169,122347,244703,489407,978821,1957651,3915341,7830701,15661423,31322867,62645741,125291483,250582987,501165979,1002331963,2004663929,1039,2081,4177,8363,16729,33461,66923,133853,267713,535481,1070981,2141977,4283963,8567929,17135863,34271747,68543509,137087021,274174111,548348231,1096696463,31,67,137,277,557,1117,2237,4481,8963,17929,35863,71741,143483,286973,573953,1147921,2295859,4591721,9183457,18366923,36733847,73467739,146935499,293871013,587742049,1175484103,599,1201,2411,4831,9677,19373,38747,77509,155027,310081,620171,1240361,2480729,4961459,9922933,19845871,39691759,79383533,158767069,317534141,635068283,1270136683,311,631,1277,2557,5119,10243,20507,41017,82037,164089,328213,656429,1312867,2625761,5251529,10503061,21006137,42012281,84024581,168049163,336098327,672196673,1344393353,3,7,17,37,79,163,331,673,1361,2729,5471,10949,21911,43853,87719,175447,350899,701819,1403641,2807303,5614657,11229331,22458671,44917381,89834777,179669557,359339171,718678369,1437356741,43,89,179,359,719,1439,2879,5779,11579,23159,46327,92657,185323,370661,741337,1482707,2965421,5930887,11861791,23723597,47447201,94894427,189788857,379577741,759155483,1518310967,379,761,1523,3049,6101,12203,24407,48817,97649,195311,390647,781301,1562611,3125257,6250537,12501169,25002389,50004791,100009607,200019221,400038451,800076929,1600153859,13,29,59,127,257,521,1049,2099,4201,8419,16843,33703,67409,134837,269683,539389,1078787,2157587,4315183,8630387,17260781,34521589,69043189,138086407,276172823,552345671,1104691373,19,41,83,167,337,677,1361,2729,5471,10949,21911,43853,87719,175447,350899,701819,1403641,2807303,5614657,11229331,22458671,44917381,89834777,179669557,359339171,718678369,1437356741,53,107,223,449,907,1823,3659,7321,14653,29311,58631,117269,234539,469099,938207,1876417,3752839,7505681,15011389,30022781,60045577,120091177,240182359,480364727,960729461,1921458943];function nextPrime(t){let e=binarySearch(primeNumbers,t,ascending);return e<0&&(e=~e),primeNumbers[e]}primeNumbers.sort(ascending);const FREE=0,FULL=1,REMOVED=2,defaultInitialCapacity=150,defaultMinLoadFactor=1/6,defaultMaxLoadFactor=2/3;class HashTable{constructor(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(t instanceof HashTable)return this.table=t.table.slice(),this.values=t.values.slice(),this.state=t.state.slice(),this.minLoadFactor=t.minLoadFactor,this.maxLoadFactor=t.maxLoadFactor,this.distinct=t.distinct,this.freeEntries=t.freeEntries,this.lowWaterMark=t.lowWaterMark,void(this.highWaterMark=t.maxLoadFactor);const e=void 0===t.initialCapacity?defaultInitialCapacity:t.initialCapacity;if(e<0)throw new RangeError("initial capacity must not be less than zero: ".concat(e));const r=void 0===t.minLoadFactor?defaultMinLoadFactor:t.minLoadFactor,n=void 0===t.maxLoadFactor?defaultMaxLoadFactor:t.maxLoadFactor;if(r<0||r>=1)throw new RangeError("invalid minLoadFactor: ".concat(r));if(n<=0||n>=1)throw new RangeError("invalid maxLoadFactor: ".concat(n));if(r>=n)throw new RangeError("minLoadFactor (".concat(r,") must be smaller than maxLoadFactor (").concat(n,")"));let i=e;0===(i=nextPrime(i=i/n|0))&&(i=1),this.table=newArray$1(i),this.values=newArray$1(i),this.state=newArray$1(i),this.minLoadFactor=r,this.maxLoadFactor=i===largestPrime?1:n,this.distinct=0,this.freeEntries=i,this.lowWaterMark=0,this.highWaterMark=chooseHighWaterMark(i,this.maxLoadFactor)}clone(){return new HashTable(this)}get size(){return this.distinct}get(t){const e=this.indexOfKey(t);return e<0?0:this.values[e]}set(t,e){let r=this.indexOfInsertion(t);if(r<0)return r=-r-1,this.values[r]=e,!1;if(this.distinct>this.highWaterMark){const r=chooseGrowCapacity(this.distinct+1,this.minLoadFactor,this.maxLoadFactor);return this.rehash(r),this.set(t,e)}if(this.table[r]=t,this.values[r]=e,this.state[r]===FREE&&this.freeEntries--,this.state[r]=FULL,this.distinct++,this.freeEntries<1){const t=chooseGrowCapacity(this.distinct+1,this.minLoadFactor,this.maxLoadFactor);this.rehash(t)}return!0}remove(t,e){const r=this.indexOfKey(t);return!(r<0)&&(this.state[r]=REMOVED,this.distinct--,e||this.maybeShrinkCapacity(),!0)}delete(t,e){const r=this.indexOfKey(t);return!(r<0)&&(this.state[r]=FREE,this.distinct--,e||this.maybeShrinkCapacity(),!0)}maybeShrinkCapacity(){if(this.distinct=0}indexOfKey(t){const e=this.table,r=this.state,n=this.table.length,i=2147483647&t;let o=i%n,s=i%(n-2);for(0===s&&(s=1);r[o]!==FREE&&(r[o]===REMOVED||e[o]!==t);)(o-=s)<0&&(o+=n);return r[o]===FREE?-1:o}containsValue(t){return this.indexOfValue(t)>=0}indexOfValue(t){const e=this.values,r=this.state;for(var n=0;n2&&void 0!==arguments[2]?arguments[2]:{};if(t instanceof SparseMatrix){const e=t;this._init(e.rows,e.columns,e.elements.clone(),e.threshold)}else if(Array.isArray(t)){const s=t;t=s.length,r=e||{},e=s[0].length,this._init(t,e,new HashTable(r),r.threshold);for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:1,e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:t;const r=Math.min(t,e),n=new SparseMatrix(t,e,{initialCapacity:r});for(var i=0;ithis.get(r,e)!==n?(t=!1,!1):n),t}bandWidth(){let t=this.columns,e=-1;return this.forEachNonZero((r,n,i)=>{let o=r-n;return t=Math.min(t,o),e=Math.max(e,o),i}),e-t}isBanded(t){return this.bandWidth()<=t}get cardinality(){return this.elements.size}get size(){return this.rows*this.columns}get(t,e){return this.elements.get(t*this.columns+e)}set(t,e,r){return this.threshold&&Math.abs(r)(t.forEachNonZero((t,o,s)=>(r===t&&n.set(e,o,n.get(e,o)+i*s),s)),i)),n}kroneckerProduct(t){const e=this.rows,r=this.columns,n=t.rows,i=t.columns,o=new SparseMatrix(e*n,r*i,{initialCapacity:this.cardinality*t.cardinality});return this.forEachNonZero((e,r,s)=>(t.forEachNonZero((t,a,h)=>(o.set(n*e+t,i*r+a,s*h),h)),s)),o}forEachNonZero(t){return this.elements.forEachPair((e,r)=>{const n=e/this.columns|0,i=e%this.columns;let o=t(n,i,r);return!1!==o&&(this.threshold&&Math.abs(o)(e[i]=t,r[i]=o,n[i]=s,i++,s)),{rows:e,columns:r,values:n}}setThreshold(t){return 0!==t&&t!==this.threshold&&(this.threshold=t,this.forEachNonZero((t,e,r)=>r)),this}transpose(){let t=new SparseMatrix(this.columns,this.rows,{initialCapacity:this.cardinality});return this.forEachNonZero((e,r,n)=>(t.set(r,e,n),n)),t}}SparseMatrix.prototype.klass="Matrix",SparseMatrix.identity=SparseMatrix.eye,SparseMatrix.prototype.tensorProduct=SparseMatrix.prototype.kroneckerProduct;var inplaceOperator="\n(function %name%(value) {\n if (typeof value === 'number') return this.%name%S(value);\n return this.%name%M(value);\n})\n",inplaceOperatorScalar="\n(function %name%S(value) {\n this.forEachNonZero((i, j, v) => v %op% value);\n return this;\n})\n",inplaceOperatorMatrix="\n(function %name%M(matrix) {\n matrix.forEachNonZero((i, j, v) => {\n this.set(i, j, this.get(i, j) %op% v);\n return v;\n });\n return this;\n})\n",staticOperator="\n(function %name%(matrix, value) {\n var newMatrix = new SparseMatrix(matrix);\n return newMatrix.%name%(value);\n})\n",inplaceMethod="\n(function %name%() {\n this.forEachNonZero((i, j, v) => %method%(v));\n return this;\n})\n",staticMethod="\n(function %name%(matrix) {\n var newMatrix = new SparseMatrix(matrix);\n return newMatrix.%name%();\n})\n";const operators=[["+","add"],["-","sub","subtract"],["*","mul","multiply"],["/","div","divide"],["%","mod","modulus"],["&","and"],["|","or"],["^","xor"],["<<","leftShift"],[">>","signPropagatingRightShift"],[">>>","rightShift","zeroFillRightShift"]];for(const operator of operators)for(let i=1;i1&&void 0!==arguments[1]?arguments[1]:{};var r=t[0];const{minWindow:n=.16,threshold:i=.01,from:o=r[0],to:s=r[r.length-1]}=e;return mainCreateTree(t[0],t[1],o,s,n,i)}function mainCreateTree(t,e,r,n,i,o){if(n-r=n);c++)a+=e[c],h+=t[c]*e[c];return a2&&void 0!==arguments[2]?arguments[2]:{};const{alpha:n=.1,beta:i=.33,gamma:o=.001}=r;return null===t||null===e?0:(Array.isArray(t)&&(t=createTree(t)),Array.isArray(e)&&(e=createTree(e)),i*(n*Math.min(t.sum,e.sum)/Math.max(t.sum,e.sum)+(1-n)*Math.exp(-o*Math.abs(t.center-e.center)))+(1-i)*(getSimilarity(t.left,e.left,r)+getSimilarity(t.right,e.right,r))/2)}function treeSimilarity(t,e){return getSimilarity(t,e,arguments.length>2&&void 0!==arguments[2]?arguments[2]:{})}function getFunction(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return(e,r)=>getSimilarity(e,r,t)}var index$3=Object.freeze({treeSimilarity:treeSimilarity,getFunction:getFunction,createTree:createTree});function cosine(t,e){for(var r=t.length,n=0,i=0,o=0,s=0;s{const e=t.cutoffs.length,r=new Array(e);for(var n=0;n{const e=t.cutoffs.length,r=new Array(e);for(var n=0;n{const e=t.cutoffs.length,r=new Array(e);for(var n=0;n{const e=t.cutoffs.length,r=new Array(e);for(var n=0;n{const e=t.cutoffs.length,r=new Array(e);for(var n=0;n{const e=t.cutoffs.length,r=new Array(e);for(var n=0;n{const e=t.cutoffs.length,r=new Array(e);for(var n=0;n{const e=t.cutoffs.length,r=new Array(e);for(var n=0;n{const e=t.cutoffs.length,r=new Array(e);for(var n=0;n{const e=t.cutoffs.length,r=new Array(e);for(var n=0;n{const e=t.cutoffs.length,r=new Array(e);for(var n=0;n{const e=t.cutoffs.length,r=new Array(e);for(var n=0;n{const e=t.cutoffs.length,r=new Array(e);for(var n=0;n{const e=t.cutoffs.slice();return e[0]=e[1],e},measures={acc:acc,err:err,fpr:fpr,tpr:tpr,fnr:fnr,tnr:tnr,ppv:ppv,npv:npv,pcfall:pcfall,pcmiss:pcmiss,lift:lift,rpp:rpp,rnp:rnp,threshold:threshold};class Performance{constructor(t,e,r){if(r=r||{},t.length!==e.length||t[0].length!==e[0].length)throw new Error("dimensions of prediction and target do not match");const n=t.length,i=t[0].length,o=!r.max,s=[];if(r.all)for(var a=0;at.pred-e.pred):s.sort((t,e)=>e.pred-t.pred);const c=this.cutoffs=[o?Number.MIN_VALUE:Number.MAX_VALUE],u=this.fp=[0],l=this.tp=[0];var f=0,m=0,g=s[0].pred,d=0,p=0;for(a=0;ar||e.size[1]>r)throw new RangeError("expanded value should not be bigger than the data length");for(i=0;i>8&255]+creator[t[r]>>16&255]+creator[t[r]>>24&255];return e}function and(t,e){for(var r=new Array(t.length),n=0;n>5]&r)}function setBit(t,e,r){var n=e>>5,i=1<<31-e%32;return t[n]=r?i|t[n]:~i&t[n],t}function toBinaryString(t){for(var e="",r=0;r>>0).toString(2);e+="00000000000000000000000000000000".substr(n.length)+n}return e}function parseBinaryString(t){for(var e=t.length/32,r=new Array(e),n=0;n>>0).toString(16);e+="00000000".substr(n.length)+n}return e}function parseHexString(t){for(var e=t.length/8,r=new Array(e),n=0;nr&&(r=n,e=t[o])}return e}function norm$1(t){var e=(arguments.length>1&&void 0!==arguments[1]?arguments[1]:{}).algorithm,r=void 0===e?"absolute":e;if(!Array.isArray(t))throw new Error("input must be an array");if(0===t.length)throw new Error("input must not be empty");switch(r.toLowerCase()){case"absolute":var n=absoluteSum(t);return 0===n?t.slice(0):t.map(function(t){return t/n});default:throw new Error("norm: unknown algorithm: ".concat(r))}}function absoluteSum(t){for(var e=0,r=0;r0&&void 0!==arguments[0]?arguments[0]:[],e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if("object"!==_typeof(t)||src(t)||(e=t,t=[]),!src(t))throw new TypeError("input must be an array");var r=e,n=r.from,i=void 0===n?0:n,o=r.to,s=void 0===o?10:o,a=r.size,h=void 0===a?t.length:a,c=r.step;if(h&&c)throw new Error("step is defined by the array size");if(h||(h=c?Math.floor((s-i)/c)+1:s-i+1),!c&&h&&(c=(s-i)/(h-1)),Array.isArray(t)){t.length=0;for(var u=0;u1&&void 0!==arguments[1]?arguments[1]:{};if(!src(t))throw new TypeError("input must be an array");for(var r=e.unbiased,n=void 0===r||r,i=e.mean,o=void 0===i?mean(t):i,s=0,a=0;a1&&void 0!==arguments[1]?arguments[1]:{};return Math.sqrt(variance(t,e))}function mergeByCentroids(t,e){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const{window:n=.01}=r;for(var i={x:e.slice(),y:new Array(e.length).fill(0)},o=0,s=0;o=0?{x:r[s],y:n[s]}:0!==(s=~s)&&Math.abs(r[s]-i)>.5||s===r.length?{x:r[s-1],y:n[s-1]}:{x:r[s],y:n[s]}}function maxMerge(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const{x:r,y:n}=t,{groupWidth:i=.001}=e;for(var o={x:[],y:[]},s={x:[],y:[]},a=0,h=0;hi?(s.x.push(r[h]),s.y.push(n[h]),o.x.push(r[h]),o.y.push(n[h]),h++,a++):(n[h]>s.y[a-1]&&(s.x[a-1]=r[h],s.y[a-1]=n[h]),o.x[a-1]=r[h],o.y[a-1]+=n[h],h++);return o.x=s.x.slice(),o}function maxY(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const{x:r,y:n}=t;let{from:i={index:0},to:o={index:r.length},reverse:s=!1}=e;void 0!==i.value&&void 0===i.index&&(i.index=calculateIndex(i.value,r,s)),void 0!==o.value&&void 0===o.index&&(o.index=calculateIndex(o.value,r,s));for(var a,h=Number.MIN_VALUE,c=i.index;c1&&void 0!==arguments[1]?arguments[1]:{};const{x:r,y:n}=t,{reverse:i=!1}=e;var o;o=i?(t,e)=>e.x-t.x:(t,e)=>t.x-e.x;for(var s=r.map((t,e)=>({x:t,y:n[e]})).sort(o),a={x:r.slice(),y:n.slice()},h=0;h0&&void 0!==arguments[0]?arguments[0]:{};const{x:e,y:r}=t;if(e.length<2)return;if(e.length!==r.length)throw new Error("The X and Y arrays mush have the same length");let n=e[0],i=0;for(let t=1;t1&&void 0!==arguments[1]?arguments[1]:{};const{x:r,y:n}=t,{groupWidth:i=.001}=e;for(var o={x:[],y:[]},s={x:[],y:[]},a=0,h=0;hi?(s.x.push(r[h]*n[h]),s.y.push(n[h]),o.x.push(r[h]),o.y.push(n[h]),h++,a++):(s.x[a-1]+=r[h]*n[h],s.y[a-1]+=n[h],o.x[a-1]=r[h],o.y[a-1]+=n[h],h++);for(var c=0;c=0;){var A=integral(0,f-m,v,g);if(M=w+A,h[S++]=(M-y)/s,S===i)break t;l=f,f+=s,y=M}w+=integral(m,d,v,x),m=d,g=p,b=d)throw new Error("x must be an increasing serie");for(;m-f>0;){if(v&&(y++,v=!1),u[b]=y<=0?0:x/y,++b===i)break t;l=f,f+=s,x=0,y=0}m>l&&(x+=g,y++),(m===-Number.MAX_VALUE||w>1)&&y--,m=d,g=p,M3&&void 0!==arguments[3]?arguments[3]:[];t>e&&([t,e]=[e,t]),n=n.filter(t=>void 0!==t.from&&void 0!==t.to),(n=JSON.parse(JSON.stringify(n))).forEach(t=>{t.from>t.to&&([t.to,t.from]=[t.from,t.to])}),n.sort((t,e)=>t.from-e.from),n.forEach(r=>{r.frome&&(r.to=e)});for(let t=0;tn[t+1].from&&(n[t].to=n[t+1].from);if(!(n=n.filter(t=>t.fromt+=e.to-e.from,0),o=(e-t-i)/r,s=[],a=t,h=0;for(let t of n){let e=Math.round((t.from-a)/o);h+=e,e>0&&s.push({from:a,to:t.from,numberOfPoints:e}),a=t.to}return r-h>0&&s.push({from:a,to:e,numberOfPoints:r-h}),s}function equallySpaced(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},{x:r,y:n}=t,i=r.length,o=!1;r.length>1&&r[0]>r[1]&&(r=r.slice().reverse(),n=n.slice().reverse(),o=!0);let{from:s=r[0],to:a=r[i-1],variant:h="smooth",numberOfPoints:c=100,exclusions:u=[]}=e;if(i!==n.length)throw new RangeError("the x and y vector doesn't have the same size.");if("number"!=typeof s||isNaN(s))throw new RangeError("'from' option must be a number");if("number"!=typeof a||isNaN(a))throw new RangeError("'to' option must be a number");if("number"!=typeof c||isNaN(c))throw new RangeError("'numberOfPoints' option must be a number");let l=getZones(s,a,c,u),f=[],m=[];for(let t of l){let e=processZone(r,n,t.from,t.to,t.numberOfPoints,h);f.push(...e.x),m.push(...e.y)}return o?s2&&void 0!==arguments[2]?arguments[2]:[];t>e&&([t,e]=[e,t]),r=r.filter(t=>void 0!==t.from&&void 0!==t.to),(r=JSON.parse(JSON.stringify(r))).forEach(t=>{t.from>t.to&&([t.to,t.from]=[t.from,t.to])}),r.sort((t,e)=>t.from-e.from),r.forEach(r=>{r.frome&&(r.to=e)});for(let t=0;tr[t+1].from&&(r[t].to=r[t+1].from);if(!(r=r.filter(t=>t.from1&&void 0!==arguments[1]?arguments[1]:{};const{x:r,y:n}=t,{from:i=r[0],to:o=r[r.length-1],exclusions:s=[]}=e;let a=getZones$1(i,o,s),h=0,c=[],u=[],l=0;for(;l=a[h].from)c.push(r[l]),u.push(n[l]);else if(r[l]>a[h].to&&!a[++h])break;l++}return{x:c,y:u}}const{Matrix:Matrix$3,SVD:SVD,EVD:EVD,CholeskyDecomposition:CholeskyDecomposition$1,LuDecomposition:LuDecomposition$1,QrDecomposition:QrDecomposition$1}=MatrixLib,Array$1={min:min,max:max,median:median,mean:mean,mode:mode$1,normed:norm$1,rescale:rescale,sequentialFill:sequentialFill,standardDeviation:standardDeviation,variance:variance},ArrayXY={centroidsMerge:mergeByCentroids,closestX:closestX,maxMerge:maxMerge,maxY:maxY,sortX:sortX,uniqueX:uniqueX,weightedMerge:weightedMerge,equallySpaced:equallySpaced,filterX:filterX};exports.Array=Array$1,exports.ArrayXY=ArrayXY,exports.BitArray=src$9,exports.CholeskyDecomposition=CholeskyDecomposition$1,exports.ConfusionMatrix=src$2,exports.CrossValidation=src$4,exports.DecisionTreeClassifier=DecisionTreeClassifier,exports.DecisionTreeRegression=DecisionTreeRegression,exports.Distance=distances,exports.EVD=EVD,exports.ExponentialRegression=ExponentialRegression,exports.FNN=FeedForwardNeuralNetwork,exports.HClust=index,exports.HashTable=HashTable,exports.KMeans=kmeans,exports.KNN=KNN,exports.KOPLS=KOPLS,exports.Kernel=kernel,exports.LuDecomposition=LuDecomposition$1,exports.Matrix=Matrix$3,exports.MatrixLib=MatrixLib,exports.MultivariateLinearRegression=MultivariateLinearRegression,exports.NaiveBayes=index$1,exports.PCA=PCA,exports.PLS=PLS,exports.Performance=src$6,exports.PolynomialRegression=PolynomialRegression,exports.PowerRegression=PowerRegression,exports.QrDecomposition=QrDecomposition$1,exports.Random=Random,exports.RandomForestClassifier=RandomForestClassifier,exports.RandomForestRegression=RandomForestRegression,exports.RobustPolynomialRegression=RobustPolynomialRegression,exports.SOM=src$5,exports.SVD=SVD,exports.Similarity=similarities,exports.SimpleLinearRegression=SimpleLinearRegression,exports.SparseMatrix=SparseMatrix,exports.TheilSenRegression=TheilSenRegression,exports.XSadd=XSadd,exports.binarySearch=binarySearch,exports.distanceMatrix=src$1,exports.levenbergMarquardt=levenbergMarquardt,exports.numSort=index$2,exports.padArray=src$7,exports.savitzkyGolay=src$8,Object.defineProperty(exports,"__esModule",{value:!0})}); +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((t=t||self).ML={})}(this,function(exports){"use strict";const toString=Object.prototype.toString;function isAnyArray(t){return toString.call(t).endsWith("Array]")}var src=isAnyArray;function max(t){if(!src(t))throw new TypeError("input must be an array");if(0===t.length)throw new TypeError("input must not be empty");for(var e=t[0],r=1;re&&(e=t[r]);return e}function min(t){if(!src(t))throw new TypeError("input must be an array");if(0===t.length)throw new TypeError("input must not be empty");for(var e=t[0],r=1;r1&&void 0!==arguments[1]?arguments[1]:{};if(!src(t))throw new TypeError("input must be an array");if(0===t.length)throw new TypeError("input must not be empty");if(void 0!==r.output){if(!src(r.output))throw new TypeError("output option must be an array if specified");e=r.output}else e=new Array(t.length);var i=min(t),n=max(t);if(i===n)throw new RangeError("minimum and maximum input values are equal. Cannot rescale a constant array");var s=r.min,o=void 0===s?r.autoMinMax?i:0:s,a=r.max,h=void 0===a?r.autoMinMax?n:1:a;if(o>=h)throw new RangeError("min option must be smaller than max option");for(var l=(h-o)/(n-i),u=0;ui)throw new RangeError("Row index out of range")}function checkColumnIndex(t,e,r){let i=r?t.columns:t.columns-1;if(e<0||e>i)throw new RangeError("Column index out of range")}function checkRowVector(t,e){if(e.to1DArray&&(e=e.to1DArray()),e.length!==t.columns)throw new RangeError("vector size must be the same as the number of columns");return e}function checkColumnVector(t,e){if(e.to1DArray&&(e=e.to1DArray()),e.length!==t.rows)throw new RangeError("vector size must be the same as the number of rows");return e}function checkIndices(t,e,r){return{row:checkRowIndices(t,e),column:checkColumnIndices(t,r)}}function checkRowIndices(t,e){if("object"!=typeof e)throw new TypeError("unexpected type for row indices");if(e.some(e=>e<0||e>=t.rows))throw new RangeError("row indices are out of range");return Array.isArray(e)||(e=Array.from(e)),e}function checkColumnIndices(t,e){if("object"!=typeof e)throw new TypeError("unexpected type for column indices");if(e.some(e=>e<0||e>=t.columns))throw new RangeError("column indices are out of range");return Array.isArray(e)||(e=Array.from(e)),e}function checkRange(t,e,r,i,n){if(5!==arguments.length)throw new RangeError("expected 4 arguments");if(checkNumber("startRow",e),checkNumber("endRow",r),checkNumber("startColumn",i),checkNumber("endColumn",n),e>r||i>n||e<0||e>=t.rows||r<0||r>=t.rows||i<0||i>=t.columns||n<0||n>=t.columns)throw new RangeError("Submatrix indices are out of range")}function newArray(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,r=[];for(let i=0;i>t);return this},t.prototype.signPropagatingRightShiftM=function(t){if(t=e.checkMatrix(t),this.rows!==t.rows||this.columns!==t.columns)throw new RangeError("Matrices dimensions must be equal");for(let e=0;e>t.get(e,r));return this},t.signPropagatingRightShift=function(t,r){return new e(t).signPropagatingRightShift(r)},t.prototype.rightShift=function(t){return"number"==typeof t?this.rightShiftS(t):this.rightShiftM(t)},t.prototype.rightShiftS=function(t){for(let e=0;e>>t);return this},t.prototype.rightShiftM=function(t){if(t=e.checkMatrix(t),this.rows!==t.rows||this.columns!==t.columns)throw new RangeError("Matrices dimensions must be equal");for(let e=0;e>>t.get(e,r));return this},t.rightShift=function(t,r){return new e(t).rightShift(r)},t.prototype.zeroFillRightShift=t.prototype.rightShift,t.prototype.zeroFillRightShiftS=t.prototype.rightShiftS,t.prototype.zeroFillRightShiftM=t.prototype.rightShiftM,t.zeroFillRightShift=t.rightShift,t.prototype.not=function(){for(let t=0;t2&&void 0!==arguments[2]?arguments[2]:{};if("object"!=typeof r)throw new TypeError("options must be an object");const{random:i=Math.random}=r;let n=new Matrix(t,e);for(let r=0;r2&&void 0!==arguments[2]?arguments[2]:{};if("object"!=typeof r)throw new TypeError("options must be an object");const{min:i=0,max:n=1e3,random:s=Math.random}=r;if(!Number.isInteger(i))throw new TypeError("min must be an integer");if(!Number.isInteger(n))throw new TypeError("max must be an integer");if(i>=n)throw new RangeError("min must be smaller than max");let o=n-i,a=new Matrix(t,e);for(let r=0;rr?(n=!0,r=e):(i=!1,n=!0);t++}return i}isReducedEchelonForm(){let t=0,e=0,r=-1,i=!0,n=!1;for(;tr?(n=!0,r=e):(i=!1,n=!0);for(let r=e+1;rt.get(i,r)&&(i=n);if(0===t.get(i,r))r++;else{t.swapRows(e,i);let n=t.get(e,r);for(let i=r;i=0;)if(0===t.maxRow(i))i--;else{let n=0,s=!1;for(;n0&&void 0!==arguments[0]?arguments[0]:{};if("object"!=typeof t)throw new TypeError("options must be an object");const{rows:e=1,columns:r=1}=t;if(!Number.isInteger(e)||e<=0)throw new TypeError("rows must be a positive integer");if(!Number.isInteger(r)||r<=0)throw new TypeError("columns must be a positive integer");let i=new Matrix(this.rows*e,this.columns*r);for(let t=0;tt&&(t=this.get(e,r));return t}maxIndex(){let t=this.get(0,0),e=[0,0];for(let r=0;rt&&(t=this.get(r,i),e[0]=r,e[1]=i);return e}min(){let t=this.get(0,0);for(let e=0;ee&&(e=this.get(t,r));return e}maxRowIndex(t){checkRowIndex(this,t);let e=this.get(t,0),r=[t,0];for(let i=1;ie&&(e=this.get(t,i),r[1]=i);return r}minRow(t){checkRowIndex(this,t);let e=this.get(t,0);for(let r=1;re&&(e=this.get(r,t));return e}maxColumnIndex(t){checkColumnIndex(this,t);let e=this.get(0,t),r=[0,t];for(let i=1;ie&&(e=this.get(i,t),r[0]=i);return r}minColumn(t){checkColumnIndex(this,t);let e=this.get(0,t);for(let r=1;r0&&void 0!==arguments[0]?arguments[0]:"frobenius",e=0;if("max"===t)return this.max();if("frobenius"===t){for(let t=0;t0&&void 0!==arguments[0]?arguments[0]:{};if("object"!=typeof t)throw new TypeError("options must be an object");const{min:e=0,max:r=1}=t;if(!Number.isFinite(e))throw new TypeError("min must be a number");if(!Number.isFinite(r))throw new TypeError("max must be a number");if(e>=r)throw new RangeError("min must be smaller than max");let i=new Matrix(this.rows,this.columns);for(let t=0;t0&&void 0!==arguments[0]?arguments[0]:{};if("object"!=typeof t)throw new TypeError("options must be an object");const{min:e=0,max:r=1}=t;if(!Number.isFinite(e))throw new TypeError("min must be a number");if(!Number.isFinite(r))throw new TypeError("max must be a number");if(e>=r)throw new RangeError("min must be smaller than max");let i=new Matrix(this.rows,this.columns);for(let t=0;t0&&void 0!==arguments[0]?arguments[0]:compareNumbers;for(let e=0;e0&&void 0!==arguments[0]?arguments[0]:compareNumbers;for(let e=0;er||e<0||e>=this.columns||r<0||r>=this.columns)throw new RangeError("Argument out of range");let i=new Matrix(t.length,r-e+1);for(let n=0;n=this.rows)throw new RangeError("Row index out of range: ".concat(t[n]));i.set(n,s-e,this.get(t[n],s))}return i}subMatrixColumn(t,e,r){if(void 0===e&&(e=0),void 0===r&&(r=this.rows-1),e>r||e<0||e>=this.rows||r<0||r>=this.rows)throw new RangeError("Argument out of range");let i=new Matrix(r-e+1,t.length);for(let n=0;n=this.columns)throw new RangeError("Column index out of range: ".concat(t[n]));i.set(s-e,n,this.get(s,t[n]))}return i}setSubMatrix(t,e,r){checkRange(this,e,e+(t=Matrix.checkMatrix(t)).rows-1,r,r+t.columns-1);for(let i=0;i1&&void 0!==arguments[1]?arguments[1]:{};if("object"==typeof t&&(e=t,t=void 0),"object"!=typeof e)throw new TypeError("options must be an object");const{unbiased:r=!0,mean:i=this.mean(t)}=e;if("boolean"!=typeof r)throw new TypeError("unbiased must be a boolean");switch(t){case"row":if(!Array.isArray(i))throw new TypeError("mean must be an array");return varianceByRow(this,r,i);case"column":if(!Array.isArray(i))throw new TypeError("mean must be an array");return varianceByColumn(this,r,i);case void 0:if("number"!=typeof i)throw new TypeError("mean must be a number");return varianceAll(this,r,i);default:throw new Error("invalid option: ".concat(t))}}standardDeviation(t,e){"object"==typeof t&&(e=t,t=void 0);const r=this.variance(t,e);if(void 0===t)return Math.sqrt(r);for(let t=0;t1&&void 0!==arguments[1]?arguments[1]:{};if("object"==typeof t&&(e=t,t=void 0),"object"!=typeof e)throw new TypeError("options must be an object");const{center:r=this.mean(t)}=e;switch(t){case"row":if(!Array.isArray(r))throw new TypeError("center must be an array");return centerByRow(this,r),this;case"column":if(!Array.isArray(r))throw new TypeError("center must be an array");return centerByColumn(this,r),this;case void 0:if("number"!=typeof r)throw new TypeError("center must be a number");return centerAll(this,r),this;default:throw new Error("invalid option: ".concat(t))}}scale(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if("object"==typeof t&&(e=t,t=void 0),"object"!=typeof e)throw new TypeError("options must be an object");let r=e.scale;switch(t){case"row":if(void 0===r)r=getScaleByRow(this);else if(!Array.isArray(r))throw new TypeError("scale must be an array");return scaleByRow(this,r),this;case"column":if(void 0===r)r=getScaleByColumn(this);else if(!Array.isArray(r))throw new TypeError("scale must be an array");return scaleByColumn(this,r),this;case void 0:if(void 0===r)r=getScaleAll(this);else if("number"!=typeof r)throw new TypeError("scale must be a number");return scaleAll(this,r),this;default:throw new Error("invalid option: ".concat(t))}}}function compareNumbers(t,e){return t-e}AbstractMatrix.prototype.klass="Matrix","undefined"!=typeof Symbol&&(AbstractMatrix.prototype[Symbol.for("nodejs.util.inspect.custom")]=inspectMatrix),AbstractMatrix.random=AbstractMatrix.rand,AbstractMatrix.randomInt=AbstractMatrix.randInt,AbstractMatrix.diagonal=AbstractMatrix.diag,AbstractMatrix.prototype.diagonal=AbstractMatrix.prototype.diag,AbstractMatrix.identity=AbstractMatrix.eye,AbstractMatrix.prototype.negate=AbstractMatrix.prototype.neg,AbstractMatrix.prototype.tensorProduct=AbstractMatrix.prototype.kroneckerProduct;class Matrix extends AbstractMatrix{constructor(t,e){if(super(),Matrix.isMatrix(t))return t.clone();if(Number.isInteger(t)&&t>0){if(this.data=[],!(Number.isInteger(e)&&e>0))throw new TypeError("nColumns must be a positive integer");for(let r=0;r1&&void 0!==arguments[1]?arguments[1]:{};const{rows:r=1}=e;if(t.length%r!=0)throw new Error("the data length is not divisible by the number of rows");super(),this.rows=r,this.columns=t.length/r,this.data=t}set(t,e,r){let i=this._calculateIndex(t,e);return this.data[i]=r,this}get(t,e){let r=this._calculateIndex(t,e);return this.data[r]}_calculateIndex(t,e){return t*this.columns+e}}class WrapperMatrix2D extends AbstractMatrix{constructor(t){super(),this.data=t,this.rows=t.length,this.columns=t[0].length}set(t,e,r){return this.data[t][e]=r,this}get(t,e){return this.data[t][e]}}function wrap(t,e){if(Array.isArray(t))return t[0]&&Array.isArray(t[0])?new WrapperMatrix2D(t):new WrapperMatrix1D(t,e);throw new Error("the argument is not an array")}class LuDecomposition{constructor(t){let e,r,i,n,s,o,a,h,l,u=(t=WrapperMatrix2D.checkMatrix(t)).clone(),c=u.rows,f=u.columns,m=new Float64Array(c),g=1;for(e=0;eMath.abs(h[n])&&(n=e);if(n!==r){for(i=0;i=0;n--){for(i=0;ie?i.set(n,e,t.get(n,e)):n===e?i.set(n,e,1):i.set(n,e,0);return i}get upperTriangularMatrix(){let t=this.LU,e=t.rows,r=t.columns,i=new Matrix(e,r);for(let n=0;nMath.abs(e)?(r=e/t,Math.abs(t)*Math.sqrt(1+r*r)):0!==e?(r=t/e,Math.abs(e)*Math.sqrt(1+r*r)):0}class QrDecomposition{constructor(t){let e,r,i,n,s=(t=WrapperMatrix2D.checkMatrix(t)).clone(),o=t.rows,a=t.columns,h=new Float64Array(a);for(i=0;i=0;s--){for(n=0;n=0;r--){for(t=0;t1&&void 0!==arguments[1]?arguments[1]:{},r=(t=WrapperMatrix2D.checkMatrix(t)).rows,i=t.columns;const{computeLeftSingularVectors:n=!0,computeRightSingularVectors:s=!0,autoTranspose:o=!1}=e;let a,h=Boolean(n),l=Boolean(s),u=!1;if(r=0;t--)if(0!==m[t]){for(let e=t+1;e=0;t--){if(t0;){let t,e;for(t=b-2;t>=-1&&-1!==t;t--){const e=Number.MIN_VALUE+A*Math.abs(m[t]+Math.abs(m[t+1]));if(Math.abs(p[t])<=e||Number.isNaN(p[t])){p[t]=0;break}}if(t===b-2)e=4;else{let r;for(r=b-1;r>=t&&r!==t;r--){let e=(r!==b?Math.abs(p[r]):0)+(r!==t+1?Math.abs(p[r-1]):0);if(Math.abs(m[r])<=A*e){m[r]=0;break}}r===t?e=3:r===b-1?e=1:(e=2,t=r)}switch(t++,e){case 1:{let e=p[b-2];p[b-2]=0;for(let r=b-2;r>=t;r--){let n=hypotenuse(m[r],e),s=m[r]/n,o=e/n;if(m[r]=n,r!==t&&(e=-o*p[r-1],p[r-1]=s*p[r-1]),l)for(let t=0;t=m[t+1]);){let e=m[t];if(m[t]=m[t+1],m[t+1]=e,l&&te&&n.set(s,r,t.get(s,r)/this.s[r]);let s=this.U,o=s.rows,a=s.columns,h=new Matrix(r,o);for(let t=0;tt&&e++;return e}get diagonal(){return Array.from(this.s)}get threshold(){return Number.EPSILON/2*Math.max(this.m,this.n)*this.s[0]}get leftSingularVectors(){return this.U}get rightSingularVectors(){return this.V}get diagonalMatrix(){return Matrix.diag(this.s)}}function inverse(t){let e=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return t=WrapperMatrix2D.checkMatrix(t),e?new SingularValueDecomposition(t).inverse():solve(t,Matrix.eye(t.rows))}function solve(t,e){let r=arguments.length>2&&void 0!==arguments[2]&&arguments[2];return t=WrapperMatrix2D.checkMatrix(t),e=WrapperMatrix2D.checkMatrix(e),r?new SingularValueDecomposition(t).solve(e):t.isSquare()?new LuDecomposition(t).solve(e):new QrDecomposition(t).solve(e)}function determinant(t){if((t=Matrix.checkMatrix(t)).isSquare()){let e,r,i,n;if(2===t.columns)return e=t.get(0,0),r=t.get(0,1),i=t.get(1,0),e*(n=t.get(1,1))-r*i;if(3===t.columns){let n,s,o;return n=new MatrixSelectionView(t,[1,2],[1,2]),s=new MatrixSelectionView(t,[1,2],[0,2]),o=new MatrixSelectionView(t,[1,2],[0,1]),e=t.get(0,0),r=t.get(0,1),i=t.get(0,2),e*determinant(n)-r*determinant(s)+i*determinant(o)}return new LuDecomposition(t).determinant}throw Error("determinant can only be calculated for a square matrix")}function xrange(t,e){let r=[];for(let i=0;i3&&void 0!==arguments[3]?arguments[3]:1e-9;if(t>(arguments.length>4&&void 0!==arguments[4]?arguments[4]:1e-9))return new Array(e.rows+1).fill(0);{let t=e.addRow(r,[0]);for(let e=0;e1&&void 0!==arguments[1]?arguments[1]:{};const{thresholdValue:r=1e-9,thresholdError:i=1e-9}=e;let n=(t=Matrix.checkMatrix(t)).rows,s=new Matrix(n,n);for(let e=0;e1&&void 0!==arguments[1]?arguments[1]:Number.EPSILON;t=Matrix.checkMatrix(t);let r=new SingularValueDecomposition(t,{autoTranspose:!0}),i=r.leftSingularVectors,n=r.rightSingularVectors,s=r.diagonal;for(let t=0;te?s[t]=1/s[t]:s[t]=0;return n.mmul(Matrix.diag(s).mmul(i.transpose()))}function covariance(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:t,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};t=Matrix.checkMatrix(t);let i=!1;if("object"!=typeof e||Matrix.isMatrix(e)||Array.isArray(e)?e=Matrix.checkMatrix(e):(r=e,e=t,i=!0),t.rows!==e.rows)throw new TypeError("Both matrices must have the same number of rows");const{center:n=!0}=r;n&&(t=t.center("column"),i||(e=e.center("column")));const s=t.transpose().mmul(e);for(let e=0;e1&&void 0!==arguments[1]?arguments[1]:t,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};t=Matrix.checkMatrix(t);let i=!1;if("object"!=typeof e||Matrix.isMatrix(e)||Array.isArray(e)?e=Matrix.checkMatrix(e):(r=e,e=t,i=!0),t.rows!==e.rows)throw new TypeError("Both matrices must have the same number of rows");const{center:n=!0,scale:s=!0}=r;n&&(t.center("column"),i||e.center("column")),s&&(t.scale("column"),i||e.scale("column"));const o=t.standardDeviation("column",{unbiased:!0}),a=i?o:e.standardDeviation("column",{unbiased:!0}),h=t.transpose().mmul(e);for(let e=0;e1&&void 0!==arguments[1]?arguments[1]:{};const{assumeSymmetric:r=!1}=e;if(!(t=WrapperMatrix2D.checkMatrix(t)).isSquare())throw new Error("Matrix is not a square matrix");let i,n,s=t.columns,o=new Matrix(s,s),a=new Float64Array(s),h=new Float64Array(s),l=t,u=!1;if(u=!!r||t.isSymmetric()){for(i=0;i0?s.set(t,t+1,i[t]):i[t]<0&&s.set(t,t-1,i[t])}return s}}function tred2(t,e,r,i){let n,s,o,a,h,l,u,c;for(h=0;h0;a--){for(c=0,o=0,l=0;l0&&(s=-s),e[a]=c*s,o-=n*s,r[a-1]=n-s,h=0;hl)do{for(n=r[l],f=hypotenuse(c=(r[l+1]-n)/(2*e[l]),1),c<0&&(f=-f),r[l]=e[l]/(c+f),r[l+1]=e[l]*(c+f),m=r[l+1],s=n-r[l],o=l+2;o=l;o--)for(p=d,d=g,M=x,n=g*e[o],s=g*c,f=hypotenuse(c,e[o]),e[o+1]=x*f,x=e[o]/f,c=(g=c/f)*r[o]-x*n,r[o+1]=s+x*(g*n+x*r[o]),h=0;hb*v);r[l]=r[l]+y,e[l]=0}for(o=0;o=l;a--)r[a]=e.get(a,l-1)/u,o+=r[a]*r[a];for(s=Math.sqrt(o),r[l]>0&&(s=-s),o-=r[l]*s,r[l]=r[l]-s,h=l;h=l;a--)n+=r[a]*e.get(a,h);for(n/=o,a=l;a<=c;a++)e.set(a,h,e.get(a,h)-n*r[a])}for(a=0;a<=c;a++){for(n=0,h=c;h>=l;h--)n+=r[h]*e.get(a,h);for(n/=o,h=l;h<=c;h++)e.set(a,h,e.get(a,h)-n*r[h])}r[l]=u*r[l],e.set(l,l-1,u*s)}}for(a=0;a=1;l--)if(0!==e.get(l,l-1)){for(a=l+1;a<=c;a++)r[a]=e.get(a,l-1);for(h=l;h<=c;h++){for(s=0,a=l;a<=c;a++)s+=r[a]*i.get(a,h);for(s=s/r[l]/e.get(l,l-1),a=l;a<=c;a++)i.set(a,h,i.get(a,h)+s*r[a])}}}function hqr2(t,e,r,i,n){let s,o,a,h,l,u,c,f,m,g,d,p,w,x,M,y=t-1,v=t-1,b=Number.EPSILON,S=0,A=0,E=0,R=0,k=0,C=0,T=0,N=0;for(s=0;sv)&&(r[s]=n.get(s,s),e[s]=0),o=Math.max(s-1,0);o=0;){for(h=y;h>0&&(0===(C=Math.abs(n.get(h-1,h-1))+Math.abs(n.get(h,h)))&&(C=A),!(Math.abs(n.get(h,h-1))=0){for(T=E>=0?E+T:E-T,r[y-1]=f+T,r[y]=r[y-1],0!==T&&(r[y]=f-c/T),e[y-1]=0,e[y]=0,E=(f=n.get(y,y-1))/(C=Math.abs(f)+Math.abs(T)),R=T/C,E/=k=Math.sqrt(E*E+R*R),R/=k,o=y-1;o0){for(C=Math.sqrt(C),m=h&&(E=((k=f-(T=n.get(l,l)))*(C=m-T)-c)/n.get(l+1,l)+n.get(l,l+1),R=n.get(l+1,l+1)-T-k-C,k=n.get(l+2,l+1),E/=C=Math.abs(E)+Math.abs(R)+Math.abs(k),R/=C,k/=C,l!==h)&&!(Math.abs(n.get(l,l-1))*(Math.abs(R)+Math.abs(k))l+2&&n.set(s,s-3,0);for(a=l;a<=y-1&&(x=a!==y-1,a!==l&&(E=n.get(a,a-1),R=n.get(a+1,a-1),k=x?n.get(a+2,a-1):0,0!==(f=Math.abs(E)+Math.abs(R)+Math.abs(k))&&(E/=f,R/=f,k/=f)),0!==f);a++)if(C=Math.sqrt(E*E+R*R+k*k),E<0&&(C=-C),0!==C){for(a!==l?n.set(a,a-1,-C*f):h!==l&&n.set(a,a-1,-n.get(a,a-1)),f=(E+=C)/C,m=R/C,T=k/C,R/=E,k/=E,o=a;o=0;y--)if(E=r[y],0===(R=e[y]))for(h=y,n.set(y,y,1),s=y-1;s>=0;s--){for(c=n.get(s,s)-E,k=0,o=h;o<=y;o++)k+=n.get(s,o)*n.get(o,y);if(e[s]<0)T=c,C=k;else if(h=s,0===e[s]?n.set(s,y,0!==c?-k/c:-k/(b*A)):(f=n.get(s,s+1),m=n.get(s+1,s),u=(f*C-T*k)/(R=(r[s]-E)*(r[s]-E)+e[s]*e[s]),n.set(s,y,u),n.set(s+1,y,Math.abs(f)>Math.abs(T)?(-k-c*u)/f:(-C-m*u)/T)),b*(u=Math.abs(n.get(s,y)))*u>1)for(o=s;o<=y;o++)n.set(o,y,n.get(o,y)/u)}else if(R<0)for(h=y-1,Math.abs(n.get(y,y-1))>Math.abs(n.get(y-1,y))?(n.set(y-1,y-1,R/n.get(y,y-1)),n.set(y-1,y,-(n.get(y,y)-E)/n.get(y,y-1))):(M=cdiv(0,-n.get(y-1,y),n.get(y-1,y-1)-E,R),n.set(y-1,y-1,M[0]),n.set(y-1,y,M[1])),n.set(y,y-1,0),n.set(y,y,1),s=y-2;s>=0;s--){for(g=0,d=0,o=h;o<=y;o++)g+=n.get(s,o)*n.get(o,y-1),d+=n.get(s,o)*n.get(o,y);if(c=n.get(s,s)-E,e[s]<0)T=c,k=g,C=d;else if(h=s,0===e[s]?(M=cdiv(-g,-d,c,R),n.set(s,y-1,M[0]),n.set(s,y,M[1])):(f=n.get(s,s+1),m=n.get(s+1,s),p=(r[s]-E)*(r[s]-E)+e[s]*e[s]-R*R,w=2*(r[s]-E)*R,0===p&&0===w&&(p=b*A*(Math.abs(c)+Math.abs(R)+Math.abs(f)+Math.abs(m)+Math.abs(T))),M=cdiv(f*k-T*g+R*d,f*C-T*d-R*g,p,w),n.set(s,y-1,M[0]),n.set(s,y,M[1]),Math.abs(f)>Math.abs(T)+Math.abs(R)?(n.set(s+1,y-1,(-g-c*n.get(s,y-1)+R*n.get(s,y))/f),n.set(s+1,y,(-d-c*n.get(s,y)-R*n.get(s,y-1))/f)):(M=cdiv(-k-m*n.get(s,y-1),-C-m*n.get(s,y),T,R),n.set(s+1,y-1,M[0]),n.set(s+1,y,M[1]))),b*(u=Math.max(Math.abs(n.get(s,y-1)),Math.abs(n.get(s,y))))*u>1)for(o=s;o<=y;o++)n.set(o,y-1,n.get(o,y-1)/u),n.set(o,y,n.get(o,y)/u)}for(s=0;sv)for(o=s;o=0;o--)for(s=0;s<=v;s++){for(T=0,a=0;a<=Math.min(o,v);a++)T+=i.get(s,a)*n.get(a,o);i.set(s,o,T)}}}function cdiv(t,e,r,i){let n,s;return Math.abs(r)>Math.abs(i)?[(t+(n=i/r)*e)/(s=r+n*i),(e-n*t)/s]:[((n=r/i)*t+e)/(s=i+n*r),(n*e-t)/s]}class CholeskyDecomposition{constructor(t){if(!(t=WrapperMatrix2D.checkMatrix(t)).isSymmetric())throw new Error("Matrix is not symmetric");let e,r,i,n=t,s=n.rows,o=new Matrix(s,s),a=!0;for(r=0;r0,o.set(r,r,Math.sqrt(Math.max(t,0))),i=r+1;i=0;s--)for(n=0;n1&&void 0!==arguments[1]?arguments[1]:{};t=WrapperMatrix2D.checkMatrix(t);let{Y:r}=e;const{scaleScores:i=!1,maxIterations:n=1e3,terminationCriteria:s=1e-10}=e;let o;if(r){if(!(r=Array.isArray(r)&&"number"==typeof r[0]?Matrix.columnVector(r):WrapperMatrix2D.checkMatrix(r)).isColumnVector()||r.rows!==t.rows)throw new Error("Y must be a column vector of length X.rows");o=r}else o=t.getColumnVector(0);let a,h,l,u,c=1;for(let e=0;es;e++)l=(l=t.transpose().mmul(o).div(o.transpose().mmul(o).get(0,0))).div(l.norm()),a=t.mmul(l).div(l.transpose().mmul(l).get(0,0)),e>0&&(c=a.clone().sub(u).pow(2).sum()),u=a.clone(),r?(h=(h=r.transpose().mmul(a).div(a.transpose().mmul(a).get(0,0))).div(h.norm()),o=r.mmul(h).div(h.transpose().mmul(h).get(0,0))):o=a;if(r){let e=t.transpose().mmul(a).div(a.transpose().mmul(a).get(0,0));e=e.div(e.norm());let i=t.clone().sub(a.clone().mmul(e.transpose())),n=o.transpose().mmul(a).div(a.transpose().mmul(a).get(0,0)),s=r.clone().sub(a.clone().mulS(n.get(0,0)).mmul(h.transpose()));this.t=a,this.p=e.transpose(),this.w=l.transpose(),this.q=h,this.u=o,this.s=a.transpose().mmul(a),this.xResidual=i,this.yResidual=s,this.betas=n}else this.w=l.transpose(),this.s=a.transpose().mmul(a).sqrt(),this.t=i?a.clone().div(this.s.get(0,0)):a,this.xResidual=t.sub(a.mmul(l.transpose()))}}var MatrixLib=Object.freeze({AbstractMatrix:AbstractMatrix,default:Matrix,Matrix:Matrix,wrap:wrap,WrapperMatrix1D:WrapperMatrix1D,WrapperMatrix2D:WrapperMatrix2D,solve:solve,inverse:inverse,determinant:determinant,linearDependencies:linearDependencies,pseudoInverse:pseudoInverse,covariance:covariance,correlation:correlation,SingularValueDecomposition:SingularValueDecomposition,SVD:SingularValueDecomposition,EigenvalueDecomposition:EigenvalueDecomposition,EVD:EigenvalueDecomposition,CholeskyDecomposition:CholeskyDecomposition,CHO:CholeskyDecomposition,LuDecomposition:LuDecomposition,LU:LuDecomposition,QrDecomposition:QrDecomposition,QR:QrDecomposition,Nipals:nipals,NIPALS:nipals,MatrixColumnView:MatrixColumnView,MatrixColumnSelectionView:MatrixColumnSelectionView,MatrixFlipColumnView:MatrixFlipColumnView,MatrixFlipRowView:MatrixFlipRowView,MatrixRowView:MatrixRowView,MatrixRowSelectionView:MatrixRowSelectionView,MatrixSelectionView:MatrixSelectionView,MatrixSubView:MatrixSubView,MatrixTransposeView:MatrixTransposeView});function mean(t){if(!src(t))throw new TypeError("input must be an array");if(0===t.length)throw new TypeError("input must not be empty");for(var e=0,r=0;rt>e:(t,e)=>t.01&&this.gain!==i&&o.lesserX.length>0&&o.greaterX.length>0){this.left=new TreeNode(this),this.right=new TreeNode(this);var a=new Matrix(o.lesserX),h=new Matrix(o.greaterX);this.left.train(a,o.lesserY,r+1,this.gain),this.right.train(h,o.greaterY,r+1,this.gain)}else this.calculatePrediction(e)}}classify(t){return this.right&&this.left?t[this.splitColumn]>>0,UINT32_SIZE=UINT32_MAX+1,INT32_SIZE=UINT32_SIZE/2,INT32_MAX=INT32_SIZE-1,UINT21_SIZE=1<<21,UINT21_MAX=UINT21_SIZE-1;function int32(t){return 0|t.next()}function add(t,e){return 0===e?t:r=>t(r)+e}function int53(t){const e=0|t.next(),r=t.next()>>>0;return(e&UINT21_MAX)*UINT32_SIZE+r+(e&UINT21_SIZE?-SMALLEST_UNSAFE_INTEGER:0)}function int53Full(t){for(;;){const e=0|t.next();if(!(4194304&e)){const r=t.next()>>>0;return(e&UINT21_MAX)*UINT32_SIZE+r+(e&UINT21_SIZE?-SMALLEST_UNSAFE_INTEGER:0)}if(4194304==(8388607&e)&&0==(0|t.next()))return SMALLEST_UNSAFE_INTEGER}}function uint32(t){return t.next()>>>0}function uint53(t){const e=t.next()&UINT21_MAX,r=t.next()>>>0;return e*UINT32_SIZE+r}function uint53Full(t){for(;;){const e=0|t.next();if(!(e&UINT21_SIZE)){const r=t.next()>>>0;return(e&UINT21_MAX)*UINT32_SIZE+r}if(0==(e&UINT21_MAX)&&0==(0|t.next()))return SMALLEST_UNSAFE_INTEGER}}function isPowerOfTwoMinusOne(t){return 0==(t+1&t)}function bitmask(t){return e=>e.next()&t}function downscaleToLoopCheckedRange(t){const e=t+1,r=e*Math.floor(UINT32_SIZE/e);return t=>{let i=0;do{i=t.next()>>>0}while(i>=r);return i%e}}function downscaleToRange(t){return isPowerOfTwoMinusOne(t)?bitmask(t):downscaleToLoopCheckedRange(t)}function isEvenlyDivisibleByMaxInt32(t){return 0==(0|t)}function upscaleWithHighMasking(t){return e=>{const r=e.next()&t,i=e.next()>>>0;return r*UINT32_SIZE+i}}function upscaleToLoopCheckedRange(t){const e=t*Math.floor(SMALLEST_UNSAFE_INTEGER/t);return r=>{let i=0;do{const t=r.next()&UINT21_MAX,e=r.next()>>>0;i=t*UINT32_SIZE+e}while(i>=e);return i%t}}function upscaleWithinU53(t){const e=t+1;if(isEvenlyDivisibleByMaxInt32(e)){const t=(e/UINT32_SIZE|0)-1;if(isPowerOfTwoMinusOne(t))return upscaleWithHighMasking(t)}return upscaleToLoopCheckedRange(e)}function upscaleWithinI53AndLoopCheck(t,e){return r=>{let i=0;do{const t=0|r.next(),e=r.next()>>>0;i=(t&UINT21_MAX)*UINT32_SIZE+e+(t&UINT21_SIZE?-SMALLEST_UNSAFE_INTEGER:0)}while(ie);return i}}function integer(t,e){if(t=Math.floor(t),e=Math.floor(e),t<-SMALLEST_UNSAFE_INTEGER||!isFinite(t))throw new RangeError("Expected min to be at least ".concat(-SMALLEST_UNSAFE_INTEGER));if(e>SMALLEST_UNSAFE_INTEGER||!isFinite(e))throw new RangeError("Expected max to be at most ".concat(SMALLEST_UNSAFE_INTEGER));const r=e-t;return r<=0||!isFinite(r)?()=>t:r===UINT32_MAX?0===t?uint32:add(int32,t+INT32_SIZE):r0&&void 0!==arguments[0]?arguments[0]:DEFAULT_STRING_POOL;const e=t.length;if(!e)throw new Error("Expected pool not to be an empty string");const r=integer(0,e-1);return(e,i)=>{let n="";for(let s=0;s{try{if("xxx"==="x".repeat(3))return(t,e)=>t.repeat(e)}catch(t){}return(t,e)=>{let r="";for(;e>0;)1&e&&(r+=t),e>>=1,t+=t;return r}})(),nativeMath={next:()=>Math.random()*UINT32_SIZE|0},I32Array=(()=>{try{const t=new ArrayBuffer(4),e=new Int32Array(t);if(e[0]=INT32_SIZE,e[0]===-INT32_SIZE)return Int32Array}catch(t){}return Array})();function createEntropy(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:nativeMath,e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:16;const r=[];r.push(0|(new Date).getTime());for(let i=1;i{try{if(-5===Math.imul(UINT32_MAX,5))return Math.imul}catch(t){}return(t,e)=>{const r=65535&t,i=65535&e;return r*i+((t>>>16&65535)*i+r*(e>>>16&65535)<<16>>>0)|0}})(),ARRAY_SIZE=624,ARRAY_MAX=ARRAY_SIZE-1,M=397,ARRAY_SIZE_MINUS_M=ARRAY_SIZE-M,A=2567483615;class MersenneTwister19937{constructor(){this.data=new I32Array(ARRAY_SIZE),this.index=0,this.uses=0}static seed(t){return(new MersenneTwister19937).seed(t)}static seedWithArray(t){return(new MersenneTwister19937).seedWithArray(t)}static autoSeed(){return MersenneTwister19937.seedWithArray(createEntropy())}next(){(0|this.index)>=ARRAY_SIZE&&(refreshData(this.data),this.index=0);const t=this.data[this.index];return this.index=this.index+1|0,this.uses+=1,0|temper(t)}getUseCount(){return this.uses}discard(t){if(t<=0)return this;for(this.uses+=t,(0|this.index)>=ARRAY_SIZE&&(refreshData(this.data),this.index=0);t+this.index>ARRAY_SIZE;)t-=ARRAY_SIZE-this.index,refreshData(this.data),this.index=0;return this.index=this.index+t|0,this}seed(t){let e=0;this.data[0]=e=0|t;for(let t=1;t>>30,1812433253)+t|0;return this.index=ARRAY_SIZE,this.uses=0,this}seedWithArray(t){return this.seed(19650218),seedWithArray(this.data,t),this}}function refreshData(t){let e=0,r=0;for(;(0|e)>>1^(1&r?A:0);for(;(0|e)>>1^(1&r?A:0);r=t[ARRAY_MAX]&INT32_SIZE|t[0]&INT32_MAX,t[ARRAY_MAX]=t[M-1]^r>>>1^(1&r?A:0)}function temper(t){return t^=t>>>11,t^=t<<7&2636928640,(t^=t<<15&4022730752)^t>>>18}function seedWithArray(t,e){let r=1,i=0;const n=e.length;let s=0|Math.max(n,ARRAY_SIZE),o=0|t[0];for(;(0|s)>0;--s)t[r]=o=(t[r]^imul(o^o>>>30,1664525))+(0|e[i])+(0|i)|0,++i,(0|(r=r+1|0))>ARRAY_MAX&&(t[0]=t[ARRAY_MAX],r=1),i>=n&&(i=0);for(s=ARRAY_MAX;(0|s)>0;--s)t[r]=o=(t[r]^imul(o^o>>>30,1566083941))-r|0,(0|(r=r+1|0))>ARRAY_MAX&&(t[0]=t[ARRAY_MAX],r=1);t[0]=INT32_SIZE}function checkFloat(t){return t>0&&t<=1}function examplesBaggingWithReplacement(t,e,r){var i,n=integer(0,t.rows-1);if(void 0===r)i=MersenneTwister19937.autoSeed();else{if(!Number.isInteger(r))throw new RangeError("Expected seed must be undefined or integer not ".concat(r));i=MersenneTwister19937.seed(r)}for(var s=new Array(t.rows),o=new Array(t.rows),a=0;ar.load(t))}else this.replacement=t.replacement,this.maxFeatures=t.maxFeatures,this.nEstimators=t.nEstimators,this.treeOptions=t.treeOptions,this.isClassifier=t.isClassifier,this.seed=t.seed,this.useSampleBagging=t.useSampleBagging}train(t,e){if(t=Matrix.checkMatrix(t),this.maxFeatures=this.maxFeatures||t.columns,checkFloat(this.maxFeatures))this.n=Math.floor(t.columns*this.maxFeatures);else{if(!Number.isInteger(this.maxFeatures))throw new RangeError("Cannot process the maxFeatures parameter ".concat(this.maxFeatures));if(this.maxFeatures>t.columns)throw new RangeError("The maxFeatures parameter should be less than ".concat(t.columns));this.n=this.maxFeatures}if(this.isClassifier)var r=DecisionTreeClassifier;else r=DecisionTreeRegression;this.estimators=new Array(this.nEstimators),this.indexes=new Array(this.nEstimators);for(var i=0;it.toJSON()),useSampleBagging:this.useSampleBagging}}}const defaultOptions$2={maxFeatures:1,replacement:!0,nEstimators:10,seed:42,useSampleBagging:!1};class RandomForestClassifier extends RandomForestBase{constructor(t,e){!0===t?super(!0,e.baseModel):((t=Object.assign({},defaultOptions$2,t)).isClassifier=!0,super(t))}selection(t){return mode(t)}toJSON(){return{baseModel:super.toJSON(),name:"RFClassifier"}}static load(t){if("RFClassifier"!==t.name)throw new RangeError("Invalid model: ".concat(t.name));return new RandomForestClassifier(!0,t)}}function mode(t){return t.sort((e,r)=>t.filter(t=>t===e).length-t.filter(t=>t===r).length).pop()}var commonjsGlobal="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function createCommonjsModule(t,e){return t(e={exports:{}},e.exports),e.exports}var medianQuickselect_min=createCommonjsModule(function(t){!function(){function e(t){for(var e=0,n=t.length-1,s=void 0,o=void 0,a=void 0,h=i(e,n);;){if(n<=e)return t[h];if(n==e+1)return t[e]>t[n]&&r(t,e,n),t[h];for(t[s=i(e,n)]>t[n]&&r(t,s,n),t[e]>t[n]&&r(t,e,n),t[s]>t[e]&&r(t,s,e),r(t,s,e+1),o=e+1,a=n;;){do{o++}while(t[e]>t[o]);do{a--}while(t[a]>t[e]);if(a=h&&(n=a-1)}}var r=function(t,e,r){var i;return i=[t[r],t[e]],t[e]=i[0],t[r]=i[1],i},i=function(t,e){return~~((t+e)/2)};t.exports?t.exports=e:window.median=e}()});function median(t){if(!src(t))throw new TypeError("input must be an array");if(0===t.length)throw new TypeError("input must not be empty");return medianQuickselect_min(t.slice())}const selectionMethods={mean:mean,median:median},defaultOptions$3={maxFeatures:1,replacement:!1,nEstimators:10,treeOptions:{},selectionMethod:"mean",seed:42,useSampleBagging:!1};class RandomForestRegression extends RandomForestBase{constructor(t,e){if(!0===t)super(!0,e.baseModel),this.selectionMethod=e.selectionMethod;else{if("mean"!==(t=Object.assign({},defaultOptions$3,t)).selectionMethod&&"median"!==t.selectionMethod)throw new RangeError("Unsupported selection method ".concat(t.selectionMethod));t.isClassifier=!1,super(t),this.selectionMethod=t.selectionMethod}}selection(t){return selectionMethods[this.selectionMethod](t)}toJSON(){return{baseModel:super.toJSON(),selectionMethod:this.selectionMethod,name:"RFRegression"}}static load(t){if("RFRegression"!==t.name)throw new RangeError("Invalid model: ".concat(t.name));return new RandomForestRegression(!0,t)}}class PCA{constructor(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!0===t){const t=e;return this.center=t.center,this.scale=t.scale,this.means=t.means,this.stdevs=t.stdevs,this.U=Matrix.checkMatrix(t.U),this.S=t.S,this.R=t.R,void(this.excludedFeatures=t.excludedFeatures)}t=new Matrix(t);const{isCovarianceMatrix:r=!1,method:i="SVD",nCompNIPALS:n=2,center:s=!0,scale:o=!1,ignoreZeroVariance:a=!1}=e;if(this.center=s,this.scale=o,this.means=null,this.stdevs=null,this.excludedFeatures=[],r)this._computeFromCovarianceMatrix(t);else switch(this._adjust(t,a),i){case"covarianceMatrix":{const e=new MatrixTransposeView(t).mmul(t).div(t.rows-1);this._computeFromCovarianceMatrix(e);break}case"NIPALS":this._computeWithNIPALS(t,n);break;case"SVD":{const e=new SingularValueDecomposition(t,{computeLeftSingularVectors:!1,computeRightSingularVectors:!0,autoTranspose:!0});this.U=e.rightSingularVectors;const r=e.diagonal,i=[];for(const e of r)i.push(e*e/(t.rows-1));this.S=i;break}default:throw new Error("unknown method: ".concat(i))}}static load(t){if("string"!=typeof t.name)throw new TypeError("model must have a name property");if("PCA"!==t.name)throw new RangeError("invalid model: ".concat(t.name));return new PCA(!0,t)}predict(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const{nComponents:r=this.U.columns}=e;if(t=new Matrix(t),this.center&&(t.subRowVector(this.means),this.scale)){for(let e of this.excludedFeatures)t.removeColumn(e);t.divRowVector(this.stdevs)}var i=t.mmul(this.U);return i.subMatrix(0,i.rows-1,0,r-1)}invert(t){var e=(t=Matrix.checkMatrix(t)).mmul(this.U.transpose());return this.center&&(this.scale&&e.mulRowVector(this.stdevs),e.addRowVector(this.means)),e}getExplainedVariance(){var t=0;for(const e of this.S)t+=e;return this.S.map(e=>e/t)}getCumulativeVariance(){for(var t=this.getExplainedVariance(),e=1;eMath.sqrt(t))}getLoadings(){return this.U.transpose()}toJSON(){return{name:"PCA",center:this.center,scale:this.scale,means:this.means,stdevs:this.stdevs,U:this.U,S:this.S}}_adjust(t,e){if(this.center){const r=t.mean("column"),i=this.scale?t.standardDeviation("column",{mean:r}):null;if(this.means=r,t.subRowVector(r),this.scale){for(let r=0;re?1:0},l=function(t,e,n,s,o){var a;if(null==n&&(n=0),null==o&&(o=r),n<0)throw new Error("lo must be non-negative");for(null==s&&(s=t.length);nr;0<=r?e++:e--)l.push(e);return l}.apply(this).reverse()).length;sd;0<=d?++f:--f)p.push(s(t,i));return p},g=function(t,e,i,n){var s,o,a;for(null==n&&(n=r),s=t[i];i>e&&n(s,o=t[a=i-1>>1])<0;)t[i]=o,i=a;return t[i]=s},d=function(t,e,i){var n,s,o,a,h;for(null==i&&(i=r),s=t.length,h=e,o=t[e],n=2*e+1;n0;){const i=e.shift();t>=i.height?r.push(i):e=e.concat(i.children)}return r}group(t){if(!Number.isInteger(t)||t<1)throw new RangeError("groups must be a positive integer");const e=new heap$1((t,e)=>e.height-t.height);for(e.push(this);e.size()e.push(t))}var i=new Cluster;return i.children=e.toArray(),i.height=this.height,i}traverse(t){!function t(e,r){if(r(e),e.children)for(const i of e.children)t(i,r)}(this,t)}indices(){const t=[];return this.traverse(e=>{e.isLeaf&&t.push(e.index)}),t}}function singleLink(t,e){return Math.min(t,e)}function completeLink(t,e){return Math.max(t,e)}function averageLink(t,e,r,i,n){return i/(i+n)*t+n/(i+n)*e}function weightedAverageLink(t,e){return(t+e)/2}function centroidLink(t,e,r,i,n){return i/(i+n)*t+n/(i+n)*e+-i*n/(i+n)**2*r}function medianLink(t,e,r){return t/2+e/2-r/4}function wardLink(t,e,r,i,n,s){return(i+s)/(i+n+s)*t+(n+s)/(i+n+s)*e+-s/(i+n+s)*r}function wardLink2(t,e,r,i,n,s){const o=(i+s)/(i+n+s),a=(n+s)/(i+n+s),h=-s/(i+n+s);return Math.sqrt(o*t*t+a*e*e+h*r*r)}function agnes(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const{distanceFunction:r=euclidean,method:i="complete",isDistanceMatrix:n=!1}=e;let s;n||(t=distanceMatrix(t,r));let o=new Matrix(t);const a=o.rows;if("string"==typeof i)switch(i.toLowerCase()){case"single":s=singleLink;break;case"complete":s=completeLink;break;case"average":case"upgma":s=averageLink;break;case"wpgma":s=weightedAverageLink;break;case"centroid":case"upgmc":s=centroidLink;break;case"median":case"wpgmc":s=medianLink;break;case"ward":s=wardLink;break;case"ward2":s=wardLink2;break;default:throw new RangeError("unknown clustering method: ".concat(i))}else if("function"!=typeof i)throw new TypeError("method must be a string or function");let h=[];for(let t=0;tgetPreviousIndex(r,Math.min(t,e),Math.max(t,e));for(let a=1;a=e&&t++,t>=r&&t++,t}var index=Object.freeze({agnes:agnes});const defaultOptions$4={distanceFunction:squaredEuclidean};function nearestVector(t,e){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:defaultOptions$4;const i=r.distanceFunction||defaultOptions$4.distanceFunction,n=r.similarityFunction||defaultOptions$4.similarityFunction;let s=-1;if("function"==typeof n){let r=Number.MIN_VALUE;for(let i=0;ir&&(r=o,s=i)}}else{if("function"!=typeof i)throw new Error("A similarity or distance function it's required");{let r=Number.MAX_VALUE;for(let n=0;ni)return!1;return!0}const LOOP=8,FLOAT_MUL=1/16777216,sh1=15,sh2=18,sh3=11;function multiply_uint32(t,e){const r=65535&(t>>>=0);return((t-r)*(e>>>=0)>>>0)+r*e>>>0}class XSadd{constructor(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:Date.now();this.state=new Uint32Array(4),this.init(t),this.random=this.getFloat.bind(this)}getUint32(){return this.nextState(),this.state[3]+this.state[2]>>>0}getFloat(){return(this.getUint32()>>>8)*FLOAT_MUL}init(t){if(!Number.isInteger(t))throw new TypeError("seed must be an integer");this.state[0]=t,this.state[1]=0,this.state[2]=0,this.state[3]=0;for(let t=1;t>>30>>>0)>>>0;this.periodCertification();for(let t=0;t>>sh2,t^=this.state[3]<1&&void 0!==arguments[1]?arguments[1]:{},r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:Math.random;const{size:i=1,replace:n=!1,probabilities:s}=e;let o,a;if(o="number"==typeof t?getArray(t):t.slice(),s){if(!n)throw new Error("choice with probabilities and no replacement is not implemented");if(s.length!==o.length)throw new Error("the length of probabilities option should be equal to the number of choices");a=[s[0]];for(let t=1;tPROB_TOLERANCE)throw new Error("probabilities should sum to 1, but instead sums to ".concat(a[a.length-1]))}if(!1===n&&i>o.length)throw new Error("size option is too large");const h=[];for(let t=0;tr[t];)t++;return t}return Math.floor(i*t)}class Random{constructor(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:Math.random;if("number"==typeof t){const e=new XSadd(t);this.randomGenerator=e.random}else this.randomGenerator=t}choice(t,e){return randomChoice(t,e,this.randomGenerator)}random(){return this.randomGenerator()}randInt(t,e){return void 0===e&&(e=t,t=0),t+Math.floor(this.randomGenerator()*(e-t))}randomSample(t){const e=[];for(let r=0;r1){for(var o={dist:-1,index:-1},a=0;ao.dist&&(o.dist=r[s[0]][a],o.index=a);if(s[1]=o.index,e>2)for(var h=2;hl.dist&&(l=Object.assign({},c))}s[h]=l.index}}return s.map(e=>t[e])}function kmeanspp(t,e){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const i=(t=new Matrix(t)).rows,n=new Random(r.seed),s=[],o=r.localTrials||2+Math.floor(Math.log(e)),a=n.randInt(i);s.push(t.getRow(a));let h=new Matrix(1,t.rows);for(let e=0;et.length||!Number.isInteger(e))throw new Error("K should be a positive integer smaller than the number of points");var i;if(Array.isArray(r.initialization)){if(r.initialization.length!==e)throw new Error("The initial centers should have the same length as K");i=r.initialization}else switch(r.initialization){case"kmeans++":i=kmeanspp(t,e,r);break;case"random":i=random(t,e,r.seed);break;case"mostDistant":i=mostDistant(t,e,calculateDistanceMatrix(t,r.distanceFunction),r.seed);break;default:throw new Error('Unknown initialization method: "'.concat(r.initialization,'"'))}0===r.maxIterations&&(r.maxIterations=Number.MAX_VALUE);var n=new Array(t.length);if(r.withIterations)return kmeansGenerator(i,t,n,e,r);for(var s,o=!1,a=0;!o&&ai&&(i=o,n=s)}return n}function calculateLogProbability(t,e,r,i){return t-=e,Math.log(r*Math.exp(t*t/i))}class MultinomialNB{constructor(t){t&&(this.conditionalProbability=Matrix.checkMatrix(t.conditionalProbability),this.priorProbability=Matrix.checkMatrix(t.priorProbability))}train(t,e){if((t=Matrix.checkMatrix(t)).rows!==e.length)throw new RangeError("the size of the training set and the training labels must be the same.");var r=separateClasses(t,e);this.priorProbability=new Matrix(r.length,1);for(var i=0;ie&&o.pop()}for(m=0;mt[i[n]]-e[i[n]]);const s=Math.floor(t.length/2),o=new Node(t[s],n,r);return o.left=buildTree(t.slice(0,s),e+1,o,i),o.right=buildTree(t.slice(s+1),e+1,o,i),o}function restoreParent(t){t.left&&(t.left.parent=t,restoreParent(t.left)),t.right&&(t.right.parent=t,restoreParent(t.right))}class BinaryHeap{constructor(t){this.content=[],this.scoreFunction=t}push(t){this.content.push(t),this.bubbleUp(this.content.length-1)}pop(){var t=this.content[0],e=this.content.pop();return this.content.length>0&&(this.content[0]=e,this.sinkDown(0)),t}peek(){return this.content[0]}size(){return this.content.length}bubbleUp(t){for(var e=this.content[t];t>0;){const r=Math.floor((t+1)/2)-1,i=this.content[r];if(!(this.scoreFunction(e)2&&void 0!==arguments[2]?arguments[2]:{};if(!0===t){const t=e;return this.kdTree=new KDTree(t.kdTree,r),this.k=t.k,this.classes=new Set(t.classes),void(this.isEuclidean=t.isEuclidean)}const i=new Set(e),{distance:n=euclidean,k:s=i.size+1}=r,o=new Array(t.length);for(var a=0;a1&&void 0!==arguments[1]?arguments[1]:euclidean;if("KNN"!==t.name)throw new Error("invalid model: ".concat(t.name));if(!t.isEuclidean&&e===euclidean)throw new Error("a custom distance function was used to create the model. Please provide it again");if(t.isEuclidean&&e!==euclidean)throw new Error("the model was created with the default distance function. Do not load it with another one");return new KNN(!0,t,e)}toJSON(){return{name:"KNN",kdTree:this.kdTree,k:this.k,classes:Array.from(this.classes),isEuclidean:this.isEuclidean}}predict(t){if(Array.isArray(t)){if("number"==typeof t[0])return getSinglePrediction(this,t);if(Array.isArray(t[0])&&"number"==typeof t[0][0]){const r=new Array(t.length);for(var e=0;es&&(n=l,s=u)}return n}function norm(t){return Math.sqrt(t.clone().apply(pow2array).sum())}function pow2array(t,e){this.set(t,e,this.get(t,e)**2)}function initializeMatrices(t,e){if(e)for(var r=0;rh&&ph;){var A=w.mmul(b);A.div(norm(A)),S=v,v=t.mmul(A);var E=x.mmul(v);E.div(norm(E)),b=e.mmul(E)}S=v;var R=w.mmul(S),k=S.transpose().mmul(S).get(0,0),C=R.div(k),T=norm(C);C.div(T),S.mul(T),A.mul(T),R=b.transpose().mmul(S),k=S.transpose().mmul(S).get(0,0);var N=R.div(k).get(0,0);t.sub(S.mmul(C.transpose())),e.sub(S.clone().mul(N).mmul(E.transpose())),u.setColumn(p,S),c.setColumn(p,C),f.setColumn(p,b),m.setColumn(p,E),d.setColumn(p,A),g.set(p,p,N),p++}p--,u=u.subMatrix(0,u.rows-1,0,p),c=c.subMatrix(0,c.rows-1,0,p),f=f.subMatrix(0,f.rows-1,0,p),m=m.subMatrix(0,m.rows-1,0,p),d=d.subMatrix(0,d.rows-1,0,p),g=g.subMatrix(0,p,0,p),this.ssqYcal=a,this.E=t,this.F=e,this.T=u,this.P=c,this.U=f,this.Q=m,this.W=d,this.B=g,this.PBQ=c.mmul(g).mmul(m.transpose()),this.R2X=S.transpose().mmul(S).mmul(C.transpose().mmul(C)).div(o).get(0,0)}predict(t){var e=Matrix.checkMatrix(t);this.scale&&(e=e.subRowVector(this.meanX).divRowVector(this.stdDevX));var r=e.mmul(this.PBQ);return r=r.mulRowVector(this.stdDevY).addRowVector(this.meanY)}getExplainedVariance(){return this.R2X}toJSON(){return{name:"PLS",R2X:this.R2X,meanX:this.meanX,stdDevX:this.stdDevX,meanY:this.meanY,stdDevY:this.stdDevY,PBQ:this.PBQ,tolerance:this.tolerance,scale:this.scale}}static load(t){if("PLS"!==t.name)throw new RangeError("Invalid model: ".concat(t.name));return new PLS(!0,t)}}function maxSumColIndex(t){return Matrix.rowVector(t.sum("column")).maxIndex()[0]}class KOPLS{constructor(t,e){if(!0===t)this.trainingSet=new Matrix(e.trainingSet),this.YLoadingMat=new Matrix(e.YLoadingMat),this.SigmaPow=new Matrix(e.SigmaPow),this.YScoreMat=new Matrix(e.YScoreMat),this.predScoreMat=initializeMatrices(e.predScoreMat,!1),this.YOrthLoadingVec=initializeMatrices(e.YOrthLoadingVec,!1),this.YOrthEigen=e.YOrthEigen,this.YOrthScoreMat=initializeMatrices(e.YOrthScoreMat,!1),this.toNorm=initializeMatrices(e.toNorm,!1),this.TURegressionCoeff=initializeMatrices(e.TURegressionCoeff,!1),this.kernelX=initializeMatrices(e.kernelX,!0),this.kernel=e.kernel,this.orthogonalComp=e.orthogonalComp,this.predictiveComp=e.predictiveComp;else{if(void 0===t.predictiveComponents)throw new RangeError("no predictive components found!");if(void 0===t.orthogonalComponents)throw new RangeError("no orthogonal components found!");if(void 0===t.kernel)throw new RangeError("no kernel found!");this.orthogonalComp=t.orthogonalComponents,this.predictiveComp=t.predictiveComponents,this.kernel=t.kernel}}train(t,e){t=Matrix.checkMatrix(t),e=Matrix.checkMatrix(e),this.trainingSet=t.clone();var r=this.kernel.compute(t),i=Matrix.eye(r.rows,r.rows,1),n=r;r=new Array(this.orthogonalComp+1);for(let t=0;t2&&void 0!==arguments[2]?arguments[2]:{};if(e.length!==t.length)throw new Error("predicted and actual must have the same length");r=i.labels?new Set(i.labels):new Set([...t,...e]),r=Array.from(r),i.sort&&r.sort(i.sort);const n=Array.from({length:r.length});for(let t=0;t=0&&o>=0&&n[s][o]++}return new ConfusionMatrix(n,r)}getMatrix(){return this.matrix}getLabels(){return this.labels}getTotalCount(){let t=0;for(var e=0;e1&&(l[e-1]=0);do{e++}while(l[e]>0);for(r=e-1,t=e;0===l[t];)l[t++]=-1;if(-1===l[t])l[t]=l[r],s=l[r]-1,i=t-1,n=r-1,l[r]=-1;else{if(t===l[0])return 0;l[e]=l[t],s=l[t]-1,l[t]=0,i=e-1,n=t-1}}return 1}if("index"===r.mode)for(yield a.slice();c();)a[s]=o[i],yield a.slice();else{if("mask"!==r.mode)throw new Error("Invalid mode");for(yield h.slice();c();)h[i]=1,h[n]=0,yield h.slice()}};const CV={};function check(t,e){if(t.length!==e.length)throw new Error("features and labels should have the same length")}function initMatrix(t,e){return new Array(t).fill(0).map(()=>new Array(e).fill(0))}function getDistinct(t){var e=new Set;for(let r=0;r=0;t--)c.splice(n[t],1);s?validateWithCallback(e,r,n,c,a,o,s):validate(t,e,r,i,n,c,a,o)}return new src$1(a,o)},CV.kFold=function(t,e,r,i,n){if("function"==typeof i){var s=i;n=r,r=e,e=t}check(e,r);const o=getDistinct(r),a=initMatrix(o.length,o.length);for(var h=e.length,l=new Array(h),u=0;u0?(Math.exp(e*t)-1)/e+e:t}function softExponentialPrime(t,e){return e<0?1/(1-e*(e+t)):Math.exp(e*t)}const ACTIVATION_FUNCTIONS={tanh:{activation:Math.tanh,derivate:t=>1-t*t},identity:{activation:t=>t,derivate:()=>1},logistic:{activation:logistic,derivate:t=>logistic(t)*(1-logistic(t))},arctan:{activation:Math.atan,derivate:t=>1/(t*t+1)},softsign:{activation:t=>t/(1+Math.abs(t)),derivate:t=>1/((1+Math.abs(t))*(1+Math.abs(t)))},relu:{activation:t=>t<0?0:t,derivate:t=>t<0?0:1},softplus:{activation:t=>Math.log(1+Math.exp(t)),derivate:t=>1/(1+Math.exp(-t))},bent:{activation:t=>(Math.sqrt(t*t+1)-1)/2+t,derivate:t=>t/(2*Math.sqrt(t*t+1))+1},sinusoid:{activation:Math.sin,derivate:Math.cos},sinc:{activation:t=>0===t?1:Math.sin(t)/t,derivate:t=>0===t?0:Math.cos(t)/t-Math.sin(t)/(t*t)},gaussian:{activation:t=>Math.exp(-t*t),derivate:t=>-2*t*Math.exp(-t*t)},"parametric-relu":{activation:(t,e)=>t<0?e*t:t,derivate:(t,e)=>t<0?e:1},"exponential-elu":{activation:expELU,derivate:(t,e)=>t<0?expELU(t,e)+e:1},"soft-exponential":{activation:softExponential,derivate:softExponentialPrime}};class Layer{constructor(t){this.inputSize=t.inputSize,this.outputSize=t.outputSize,this.regularization=t.regularization,this.epsilon=t.epsilon,this.activation=t.activation,this.activationParam=t.activationParam;var e=ACTIVATION_FUNCTIONS[t.activation],r=e.activation.length,i=r>1?r=>e.activation(r,t.activationParam):e.activation,n=r>1?r=>e.derivate(r,t.activationParam):e.derivate;this.activationFunction=function(t,e){this.set(t,e,i(this.get(t,e)))},this.derivate=function(t,e){this.set(t,e,n(this.get(t,e)))},t.model?(this.W=Matrix.Matrix.checkMatrix(t.W),this.b=Matrix.Matrix.checkMatrix(t.b)):(this.W=Matrix.Matrix.rand(this.inputSize,this.outputSize),this.b=Matrix.Matrix.zeros(1,this.outputSize),this.W.apply(function(e,r){this.set(e,r,this.get(e,r)/Math.sqrt(t.inputSize))}))}forward(t){var e=t.mmul(this.W).addRowVector(this.b);return e.apply(this.activationFunction),this.a=e.clone(),e}backpropagation(t,e){this.dW=e.transpose().mmul(t),this.db=Matrix.Matrix.rowVector(t.sum("column"));var r=e.clone();return t.mmul(this.W.transpose()).mul(r.apply(this.derivate))}update(){this.dW.add(this.W.clone().mul(this.regularization)),this.W.add(this.dW.mul(-this.epsilon)),this.b.add(this.db.mul(-this.epsilon))}toJSON(){return{model:"Layer",inputSize:this.inputSize,outputSize:this.outputSize,regularization:this.regularization,epsilon:this.epsilon,activation:this.activation,W:this.W,b:this.b}}static load(t){if("Layer"!==t.model)throw new RangeError("the current model is not a Layer model");return new Layer(t)}}class OutputLayer extends Layer{constructor(t){super(t),this.activationFunction=function(t,e){this.set(t,e,Math.exp(this.get(t,e)))}}static load(t){if("Layer"!==t.model)throw new RangeError("the current model is not a Layer model");return new OutputLayer(t)}}class FeedForwardNeuralNetworks{constructor(t){if((t=t||{}).model){this.hiddenLayers=t.hiddenLayers,this.iterations=t.iterations,this.learningRate=t.learningRate,this.regularization=t.regularization,this.dicts=t.dicts,this.activation=t.activation,this.activationParam=t.activationParam,this.model=new Array(t.layers.length);for(var e=0;e=0;--i){var s=i>0?this.model[i-1].a:t;n=this.model[i].backpropagation(n,s)}for(i=0;i0?e=this[t]-1:this.som.torus&&(e=this.som.gridDim[t]-1),void 0!==e)"x"===t?(r=e,i=this.y):(r=this.x,i=e),this.neighbors[t][0]=this.som.nodes[r][i];this[t]0&&e>0))throw new Error("x and y must be positive");this.times={findBMU:0,adjust:0},this.randomizer=this.options.randomizer,this.iterationCount=0,this.iterations=this.options.iterations,this.startLearningRate=this.learningRate=this.options.learningRate,this.mapRadius=Math.floor(Math.max(t,e)/2),this.algorithmMethod=this.options.method,this._initNodes(),this.done=!1}else this.done=!0}function getConverters(t){for(var e=t.length,r=new Array(e),i=new Array(e),n=0;n0?("random"===this.algorithmMethod?(t=this.mapRadius*Math.exp(-this.iterationCount/this.timeConstant),e=getRandomValue(this.trainingSet,this.randomizer),this._adjust(e,t),this.learningRate=this.startLearningRate*Math.exp(-this.iterationCount/this.numIterations)):(r=-Math.floor(this.iterationCount/this.trainingSet.length),t=this.mapRadius*Math.exp(r/this.timeConstant),e=this.trainingSet[this.iterationCount%this.trainingSet.length],this._adjust(e,t),(this.iterationCount+1)%this.trainingSet.length==0&&(this.learningRate=this.startLearningRate*Math.exp(r/Math.floor(this.numIterations/this.trainingSet.length)))),this.iterationCount++,!0):(this.done=!0,!1));var t,e,r},SOM.prototype._adjust=function(t,e){var r,i,n,s,o=Date.now(),a=this._findBestMatchingUnit(t),h=Date.now();this.times.findBMU+=h-o;var l=Math.floor(e),u=a.x-l,c=a.x+l,f=a.y-l,m=a.y+l;for(r=u;r<=c;r++){var g=r;for(r<0?g+=this.x:r>=this.x&&(g-=this.x),i=f;i<=m;i++){var d=i;i<0?d+=this.y:i>=this.y&&(d-=this.y),(n=a[this.distanceMethod](this.nodes[g][d]))0&&e!==this.coefficients.length-1?o=" + ".concat(o):e!==this.coefficients.length-1&&(o=" ".concat(o))),s=o+s;return"+"===s.charAt(0)&&(s=s.slice(1)),"f(x) = ".concat(s)}static load(t){if("polynomialRegression"!==t.name)throw new TypeError("not a polynomial regression model");return new PolynomialRegression(!0,t)}}function regress(t,e,r,i){const n=e.length;let s;if(Array.isArray(i))i=(s=i).length;else{i++,s=new Array(i);for(let t=0;t=0?"f(x) = ".concat(maybeToPrecision(this.B,t),"e^{").concat(maybeToPrecision(this.A,t),"x}"):"f(x) = \\frac{".concat(maybeToPrecision(this.B,t),"}{e^{").concat(maybeToPrecision(-this.A,t),"x}}")}static load(t){if("exponentialRegression"!==t.name)throw new TypeError("not a exponential regression model");return new ExponentialRegression(!0,t)}}function regress$2(t,e,r){const i=e.length,n=new Array(i);for(let t=0;t=0?"f(x) = ".concat(maybeToPrecision(this.A,t),"x^{").concat(maybeToPrecision(this.B,t),"}"):"f(x) = \\frac{".concat(maybeToPrecision(this.A,t),"}{x^{").concat(maybeToPrecision(-this.B,t),"}}")).replace(/e([+-]?[0-9]+)/g,"e^{$1}")}static load(t){if("powerRegression"!==t.name)throw new TypeError("not a power regression model");return new PowerRegression(!0,t)}}function regress$3(t,e,r){const i=e.length,n=new Array(i),s=new Array(i);for(let t=0;t2&&void 0!==arguments[2]?arguments[2]:{};const{intercept:i=!0,statistics:n=!0}=r;if(this.statistics=n,!0===t)this.weights=e.weights,this.inputs=e.inputs,this.outputs=e.outputs,this.intercept=e.intercept;else{t=new Matrix(t),e=new Matrix(e),i&&t.addColumn(new Array(t.rows).fill(1));let r=t.transpose();const s=r.mmul(t),o=r.mmul(e),a=new SingularValueDecomposition(s).inverse(),h=o.transpose().mmul(a).transpose();if(this.weights=h.to2DArray(),this.inputs=t.columns,this.outputs=e.columns,i&&this.inputs--,this.intercept=i,n){const r=t.mmul(h),i=e.clone().addM(r.neg()).to2DArray().map(t=>Math.pow(t[0],2)).reduce((t,e)=>t+e)/(e.rows-t.columns);this.stdError=Math.sqrt(i),this.stdErrorMatrix=pseudoInverse(s).mul(i),this.stdErrors=this.stdErrorMatrix.diagonal().map(t=>Math.sqrt(t)),this.tStats=this.weights.map((t,e)=>0===this.stdErrors[e]?0:t[0]/this.stdErrors[e])}}}predict(t){if(Array.isArray(t)){if("number"==typeof t[0])return this._predict(t);if(Array.isArray(t[0])){const e=new Array(t.length);for(let r=0;r({label:e===this.weights.length-1?"Intercept":"X Variable ".concat(e+1),coefficients:t,standardError:this.stdErrors[e],tStat:this.tStats[e]}))}:void 0}}static load(t){if("multivariateLinearRegression"!==t.name)throw new Error("not a MLR model");return new MultivariateLinearRegression(!0,t)}}const{squaredEuclidean:squaredEuclidean$1}=euclidean$1,defaultOptions$8={sigma:1};class GaussianKernel{constructor(t){t=Object.assign({},defaultOptions$8,t),this.sigma=t.sigma,this.divisor=2*t.sigma*t.sigma}compute(t,e){const r=squaredEuclidean$1(t,e);return Math.exp(-r/this.divisor)}}var gaussianKernel=GaussianKernel;const defaultOptions$9={degree:1,constant:1,scale:1};class PolynomialKernel{constructor(t){t=Object.assign({},defaultOptions$9,t),this.degree=t.degree,this.constant=t.constant,this.scale=t.scale}compute(t,e){for(var r=0,i=0;i0&&e!==this.coefficients.length-1?o=" + ".concat(o):e!==this.coefficients.length-1&&(o=" ".concat(o))),s=o+s;return"+"===s.charAt(0)&&(s=s.slice(1)),"f(x) = ".concat(s)}static load(t){if("robustPolynomialRegression"!==t.name)throw new TypeError("not a RobustPolynomialRegression model");return new RobustPolynomialRegression(!0,t)}}function robustPolynomial(t,e,r,i){let n=Array(i).fill(0).map((t,e)=>e);const s=getRandomTuples(e,r,i);for(var o,a=0;at.residual-e.residual);var e=t.length,r=Math.floor(e/2);return e%2==0?t[r-1]:t[r]}function errorCalculation(t,e,r){var i=0;const n=r(e);for(var s=0;sa(t)),l=gradientFunction(t,h,e,i,n),u=matrixFunction(t,h),c=inverse(o.add(l.mmul(l.transpose())));return(e=(e=new Matrix([e])).sub(c.mmul(l).mmul(u).mul(i).transpose())).to1DArray()}function levenbergMarquardt(t,e){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},{maxIterations:i=100,gradientDifference:n=.1,damping:s=0,errorTolerance:o=.01,minValues:a,maxValues:h,initialValues:l}=r;if(s<=0)throw new Error("The damping option must be a positive number");if(!t.x||!t.y)throw new Error("The data parameter must have x and y elements");if(!Array.isArray(t.x)||t.x.length<2||!Array.isArray(t.y)||t.y.length<2)throw new Error("The data parameter elements must be an array with more than 2 points");if(t.x.length!==t.y.length)throw new Error("The data parameter elements must have the same size");var u=l||new Array(e.length).fill(1);let c=u.length;if(h=h||new Array(c).fill(Number.MAX_SAFE_INTEGER),a=a||new Array(c).fill(Number.MIN_SAFE_INTEGER),h.length!==a.length)throw new Error("minValues and maxValues must be the same size");if(!Array.isArray(u))throw new Error("initialValues must be an array");for(var f=errorCalculation(t,u,e),m=f<=o,g=0;g{let r=BigInt(0);return t.forEach(t=>r|=BigInt(1)<t.key-e.key<0?-1:1),i=[],n=[];for(let t of r)t.key!==e&&(e=t.key,n.push([]),i.push(t.value)),n[n.length-1].push(t.index);return{values:i,indices:n}}function cssls(t,e,r,i,n){let s=Matrix.zeros(i,n);if(null===r){let r=new CholeskyDecomposition(t);if(!0===r.isPositiveDefinite())s=r.solve(e);else{let r=new LuDecomposition(t);s=!1===r.isSingular()?r.solve(Matrix.eye(i)).mmul(e):solve(t,e,{useSVD:!0})}}else{let o=sortCollectionSet(r).values,a=sortCollectionSet(r).indices;if(1===o.length&&0===o[0].length&&a[0].length===n)return s;if(1===o.length&&o[0].length===i&&a[0].length===n){let r=new CholeskyDecomposition(t);if(!0===r.isPositiveDefinite())s=r.solve(e);else{let r=new LuDecomposition(t);s=!1===r.isSingular()?r.solve(Matrix.eye(i)).mmul(e):solve(t,e,{useSVD:!0})}}else for(let r=0;r0?l[t].push(e):h.set(e,t,0)}let u=[];for(let t=0;tt-e);return{Pset:s,Fset:n,W:o}}function fcnnls(t,e){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};t=Matrix.checkMatrix(t),e=Matrix.checkMatrix(e);let{l:i,p:n,iter:s,W:o,XtX:a,XtY:h,K:l,Pset:u,Fset:c,D:f}=initialisation(t,e);const{maxIterations:m=3*t.columns}=r;for(;c.length>0;){let t=cssls(a,h.subMatrixColumn(c),selection(u,c),i,c.length);for(let e=0;e0){let e=r.length,n=Matrix.ones(i,e);for(;e>0&&se===g[t]),1);t=cssls(a,h.subMatrixColumn(r),selection(u,r),i,e);for(let i=0;i2&&void 0!==arguments[2]?arguments[2]:{};if(!1===Array.isArray(e))throw new TypeError("y must be a 1D Array");return fcnnls(t,Matrix.columnVector(e),r).to1DArray()}var index$2=Object.freeze({fcnnls:fcnnls,fcnnlsVector:fcnnlsVector}),binarySearch=function(t,e,r,i,n){var s,o;if(void 0===i)i=0;else if((i|=0)<0||i>=t.length)throw new RangeError("invalid lower bound");if(void 0===n)n=t.length-1;else if((n|=0)=t.length)throw new RangeError("invalid upper bound");for(;i<=n;)if((o=+r(t[s=i+(n-i>>>1)],e,s,t))<0)i=s+1;else{if(!(o>0))return s;n=s-1}return~i};function assertNumber(t){if("number"!=typeof t||Number.isNaN(t))throw new TypeError("Expected a number")}var ascending=(t,e)=>(assertNumber(t),assertNumber(e),t-e),descending=(t,e)=>(assertNumber(t),assertNumber(e),e-t),numSort={ascending:ascending,descending:descending},index$3=Object.freeze({default:numSort,__moduleExports:numSort,ascending:ascending,descending:descending});const largestPrime=2147483647,primeNumbers=[largestPrime,5,11,23,47,97,197,397,797,1597,3203,6421,12853,25717,51437,102877,205759,411527,823117,1646237,3292489,6584983,13169977,26339969,52679969,105359939,210719881,421439783,842879579,1685759167,433,877,1759,3527,7057,14143,28289,56591,113189,226379,452759,905551,1811107,3622219,7244441,14488931,28977863,57955739,115911563,231823147,463646329,927292699,1854585413,953,1907,3821,7643,15287,30577,61169,122347,244703,489407,978821,1957651,3915341,7830701,15661423,31322867,62645741,125291483,250582987,501165979,1002331963,2004663929,1039,2081,4177,8363,16729,33461,66923,133853,267713,535481,1070981,2141977,4283963,8567929,17135863,34271747,68543509,137087021,274174111,548348231,1096696463,31,67,137,277,557,1117,2237,4481,8963,17929,35863,71741,143483,286973,573953,1147921,2295859,4591721,9183457,18366923,36733847,73467739,146935499,293871013,587742049,1175484103,599,1201,2411,4831,9677,19373,38747,77509,155027,310081,620171,1240361,2480729,4961459,9922933,19845871,39691759,79383533,158767069,317534141,635068283,1270136683,311,631,1277,2557,5119,10243,20507,41017,82037,164089,328213,656429,1312867,2625761,5251529,10503061,21006137,42012281,84024581,168049163,336098327,672196673,1344393353,3,7,17,37,79,163,331,673,1361,2729,5471,10949,21911,43853,87719,175447,350899,701819,1403641,2807303,5614657,11229331,22458671,44917381,89834777,179669557,359339171,718678369,1437356741,43,89,179,359,719,1439,2879,5779,11579,23159,46327,92657,185323,370661,741337,1482707,2965421,5930887,11861791,23723597,47447201,94894427,189788857,379577741,759155483,1518310967,379,761,1523,3049,6101,12203,24407,48817,97649,195311,390647,781301,1562611,3125257,6250537,12501169,25002389,50004791,100009607,200019221,400038451,800076929,1600153859,13,29,59,127,257,521,1049,2099,4201,8419,16843,33703,67409,134837,269683,539389,1078787,2157587,4315183,8630387,17260781,34521589,69043189,138086407,276172823,552345671,1104691373,19,41,83,167,337,677,1361,2729,5471,10949,21911,43853,87719,175447,350899,701819,1403641,2807303,5614657,11229331,22458671,44917381,89834777,179669557,359339171,718678369,1437356741,53,107,223,449,907,1823,3659,7321,14653,29311,58631,117269,234539,469099,938207,1876417,3752839,7505681,15011389,30022781,60045577,120091177,240182359,480364727,960729461,1921458943];function nextPrime(t){let e=binarySearch(primeNumbers,t,ascending);return e<0&&(e=~e),primeNumbers[e]}primeNumbers.sort(ascending);const FREE=0,FULL=1,REMOVED=2,defaultInitialCapacity=150,defaultMinLoadFactor=1/6,defaultMaxLoadFactor=2/3;class HashTable{constructor(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(t instanceof HashTable)return this.table=t.table.slice(),this.values=t.values.slice(),this.state=t.state.slice(),this.minLoadFactor=t.minLoadFactor,this.maxLoadFactor=t.maxLoadFactor,this.distinct=t.distinct,this.freeEntries=t.freeEntries,this.lowWaterMark=t.lowWaterMark,void(this.highWaterMark=t.maxLoadFactor);const e=void 0===t.initialCapacity?defaultInitialCapacity:t.initialCapacity;if(e<0)throw new RangeError("initial capacity must not be less than zero: ".concat(e));const r=void 0===t.minLoadFactor?defaultMinLoadFactor:t.minLoadFactor,i=void 0===t.maxLoadFactor?defaultMaxLoadFactor:t.maxLoadFactor;if(r<0||r>=1)throw new RangeError("invalid minLoadFactor: ".concat(r));if(i<=0||i>=1)throw new RangeError("invalid maxLoadFactor: ".concat(i));if(r>=i)throw new RangeError("minLoadFactor (".concat(r,") must be smaller than maxLoadFactor (").concat(i,")"));let n=e;0===(n=nextPrime(n=n/i|0))&&(n=1),this.table=newArray$1(n),this.values=newArray$1(n),this.state=newArray$1(n),this.minLoadFactor=r,this.maxLoadFactor=n===largestPrime?1:i,this.distinct=0,this.freeEntries=n,this.lowWaterMark=0,this.highWaterMark=chooseHighWaterMark(n,this.maxLoadFactor)}clone(){return new HashTable(this)}get size(){return this.distinct}get(t){const e=this.indexOfKey(t);return e<0?0:this.values[e]}set(t,e){let r=this.indexOfInsertion(t);if(r<0)return r=-r-1,this.values[r]=e,!1;if(this.distinct>this.highWaterMark){const r=chooseGrowCapacity(this.distinct+1,this.minLoadFactor,this.maxLoadFactor);return this.rehash(r),this.set(t,e)}if(this.table[r]=t,this.values[r]=e,this.state[r]===FREE&&this.freeEntries--,this.state[r]=FULL,this.distinct++,this.freeEntries<1){const t=chooseGrowCapacity(this.distinct+1,this.minLoadFactor,this.maxLoadFactor);this.rehash(t)}return!0}remove(t,e){const r=this.indexOfKey(t);return!(r<0)&&(this.state[r]=REMOVED,this.distinct--,e||this.maybeShrinkCapacity(),!0)}delete(t,e){const r=this.indexOfKey(t);return!(r<0)&&(this.state[r]=FREE,this.distinct--,e||this.maybeShrinkCapacity(),!0)}maybeShrinkCapacity(){if(this.distinct=0}indexOfKey(t){const e=this.table,r=this.state,i=this.table.length,n=2147483647&t;let s=n%i,o=n%(i-2);for(0===o&&(o=1);r[s]!==FREE&&(r[s]===REMOVED||e[s]!==t);)(s-=o)<0&&(s+=i);return r[s]===FREE?-1:s}containsValue(t){return this.indexOfValue(t)>=0}indexOfValue(t){const e=this.values,r=this.state;for(var i=0;i2&&void 0!==arguments[2]?arguments[2]:{};if(t instanceof SparseMatrix){const e=t;this._init(e.rows,e.columns,e.elements.clone(),e.threshold)}else if(Array.isArray(t)){const o=t;t=o.length,r=e||{},e=o[0].length,this._init(t,e,new HashTable(r),r.threshold);for(var i=0;i0&&void 0!==arguments[0]?arguments[0]:1,e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:t;const r=Math.min(t,e),i=new SparseMatrix(t,e,{initialCapacity:r});for(var n=0;nthis.get(r,e)!==i?(t=!1,!1):i),t}bandWidth(){let t=this.columns,e=-1;return this.forEachNonZero((r,i,n)=>{let s=r-i;return t=Math.min(t,s),e=Math.max(e,s),n}),e-t}isBanded(t){return this.bandWidth()<=t}get cardinality(){return this.elements.size}get size(){return this.rows*this.columns}get(t,e){return this.elements.get(t*this.columns+e)}set(t,e,r){return this.threshold&&Math.abs(r)(t.forEachNonZero((t,s,o)=>(r===t&&i.set(e,s,i.get(e,s)+n*o),o)),n)),i}kroneckerProduct(t){const e=this.rows,r=this.columns,i=t.rows,n=t.columns,s=new SparseMatrix(e*i,r*n,{initialCapacity:this.cardinality*t.cardinality});return this.forEachNonZero((e,r,o)=>(t.forEachNonZero((t,a,h)=>(s.set(i*e+t,n*r+a,o*h),h)),o)),s}forEachNonZero(t){return this.elements.forEachPair((e,r)=>{const i=e/this.columns|0,n=e%this.columns;let s=t(i,n,r);return!1!==s&&(this.threshold&&Math.abs(s)(e[n]=t,r[n]=s,i[n]=o,n++,o)),{rows:e,columns:r,values:i}}setThreshold(t){return 0!==t&&t!==this.threshold&&(this.threshold=t,this.forEachNonZero((t,e,r)=>r)),this}transpose(){let t=new SparseMatrix(this.columns,this.rows,{initialCapacity:this.cardinality});return this.forEachNonZero((e,r,i)=>(t.set(r,e,i),i)),t}}SparseMatrix.prototype.klass="Matrix",SparseMatrix.identity=SparseMatrix.eye,SparseMatrix.prototype.tensorProduct=SparseMatrix.prototype.kroneckerProduct;var inplaceOperator="\n(function %name%(value) {\n if (typeof value === 'number') return this.%name%S(value);\n return this.%name%M(value);\n})\n",inplaceOperatorScalar="\n(function %name%S(value) {\n this.forEachNonZero((i, j, v) => v %op% value);\n return this;\n})\n",inplaceOperatorMatrix="\n(function %name%M(matrix) {\n matrix.forEachNonZero((i, j, v) => {\n this.set(i, j, this.get(i, j) %op% v);\n return v;\n });\n return this;\n})\n",staticOperator="\n(function %name%(matrix, value) {\n var newMatrix = new SparseMatrix(matrix);\n return newMatrix.%name%(value);\n})\n",inplaceMethod="\n(function %name%() {\n this.forEachNonZero((i, j, v) => %method%(v));\n return this;\n})\n",staticMethod="\n(function %name%(matrix) {\n var newMatrix = new SparseMatrix(matrix);\n return newMatrix.%name%();\n})\n";const operators=[["+","add"],["-","sub","subtract"],["*","mul","multiply"],["/","div","divide"],["%","mod","modulus"],["&","and"],["|","or"],["^","xor"],["<<","leftShift"],[">>","signPropagatingRightShift"],[">>>","rightShift","zeroFillRightShift"]];for(const operator of operators)for(let i=1;i1&&void 0!==arguments[1]?arguments[1]:{};var r=t[0];const{minWindow:i=.16,threshold:n=.01,from:s=r[0],to:o=r[r.length-1]}=e;return mainCreateTree(t[0],t[1],s,o,i,n)}function mainCreateTree(t,e,r,i,n,s){if(i-r=i);l++)a+=e[l],h+=t[l]*e[l];return a2&&void 0!==arguments[2]?arguments[2]:{};const{alpha:i=.1,beta:n=.33,gamma:s=.001}=r;return null===t||null===e?0:(Array.isArray(t)&&(t=createTree(t)),Array.isArray(e)&&(e=createTree(e)),n*(i*Math.min(t.sum,e.sum)/Math.max(t.sum,e.sum)+(1-i)*Math.exp(-s*Math.abs(t.center-e.center)))+(1-n)*(getSimilarity(t.left,e.left,r)+getSimilarity(t.right,e.right,r))/2)}function treeSimilarity(t,e){return getSimilarity(t,e,arguments.length>2&&void 0!==arguments[2]?arguments[2]:{})}function getFunction(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return(e,r)=>getSimilarity(e,r,t)}var index$4=Object.freeze({treeSimilarity:treeSimilarity,getFunction:getFunction,createTree:createTree});function cosine(t,e){for(var r=t.length,i=0,n=0,s=0,o=0;o{const e=t.cutoffs.length,r=new Array(e);for(var i=0;i{const e=t.cutoffs.length,r=new Array(e);for(var i=0;i{const e=t.cutoffs.length,r=new Array(e);for(var i=0;i{const e=t.cutoffs.length,r=new Array(e);for(var i=0;i{const e=t.cutoffs.length,r=new Array(e);for(var i=0;i{const e=t.cutoffs.length,r=new Array(e);for(var i=0;i{const e=t.cutoffs.length,r=new Array(e);for(var i=0;i{const e=t.cutoffs.length,r=new Array(e);for(var i=0;i{const e=t.cutoffs.length,r=new Array(e);for(var i=0;i{const e=t.cutoffs.length,r=new Array(e);for(var i=0;i{const e=t.cutoffs.length,r=new Array(e);for(var i=0;i{const e=t.cutoffs.length,r=new Array(e);for(var i=0;i{const e=t.cutoffs.length,r=new Array(e);for(var i=0;i{const e=t.cutoffs.slice();return e[0]=e[1],e},measures={acc:acc,err:err,fpr:fpr,tpr:tpr,fnr:fnr,tnr:tnr,ppv:ppv,npv:npv,pcfall:pcfall,pcmiss:pcmiss,lift:lift,rpp:rpp,rnp:rnp,threshold:threshold};class Performance{constructor(t,e,r){if(r=r||{},t.length!==e.length||t[0].length!==e[0].length)throw new Error("dimensions of prediction and target do not match");const i=t.length,n=t[0].length,s=!r.max,o=[];if(r.all)for(var a=0;at.pred-e.pred):o.sort((t,e)=>e.pred-t.pred);const l=this.cutoffs=[s?Number.MIN_VALUE:Number.MAX_VALUE],u=this.fp=[0],c=this.tp=[0];var f=0,m=0,g=o[0].pred,d=0,p=0;for(a=0;ar||e.size[1]>r)throw new RangeError("expanded value should not be bigger than the data length");for(n=0;n>8&255]+creator[t[r]>>16&255]+creator[t[r]>>24&255];return e}function and(t,e){for(var r=new Array(t.length),i=0;i>5]&r)}function setBit(t,e,r){var i=e>>5,n=1<<31-e%32;return t[i]=r?n|t[i]:~n&t[i],t}function toBinaryString(t){for(var e="",r=0;r>>0).toString(2);e+="00000000000000000000000000000000".substr(i.length)+i}return e}function parseBinaryString(t){for(var e=t.length/32,r=new Array(e),i=0;i>>0).toString(16);e+="00000000".substr(i.length)+i}return e}function parseHexString(t){for(var e=t.length/8,r=new Array(e),i=0;ir&&(r=i,e=t[s])}return e}function norm$1(t){var e=(arguments.length>1&&void 0!==arguments[1]?arguments[1]:{}).algorithm,r=void 0===e?"absolute":e;if(!Array.isArray(t))throw new Error("input must be an array");if(0===t.length)throw new Error("input must not be empty");switch(r.toLowerCase()){case"absolute":var i=absoluteSum(t);return 0===i?t.slice(0):t.map(function(t){return t/i});default:throw new Error("norm: unknown algorithm: ".concat(r))}}function absoluteSum(t){for(var e=0,r=0;r0&&void 0!==arguments[0]?arguments[0]:[],e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if("object"!==_typeof(t)||src(t)||(e=t,t=[]),!src(t))throw new TypeError("input must be an array");var r=e,i=r.from,n=void 0===i?0:i,s=r.to,o=void 0===s?10:s,a=r.size,h=void 0===a?t.length:a,l=r.step;if(h&&l)throw new Error("step is defined by the array size");if(h||(h=l?Math.floor((o-n)/l)+1:o-n+1),!l&&h&&(l=(o-n)/(h-1)),Array.isArray(t)){t.length=0;for(var u=0;u1&&void 0!==arguments[1]?arguments[1]:{};if(!src(t))throw new TypeError("input must be an array");for(var r=e.unbiased,i=void 0===r||r,n=e.mean,s=void 0===n?mean(t):n,o=0,a=0;a1&&void 0!==arguments[1]?arguments[1]:{};return Math.sqrt(variance(t,e))}function mergeByCentroids(t,e){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const{window:i=.01}=r;for(var n={x:e.slice(),y:new Array(e.length).fill(0)},s=0,o=0;s=0?{x:r[o],y:i[o]}:0!==(o=~o)&&Math.abs(r[o]-n)>.5||o===r.length?{x:r[o-1],y:i[o-1]}:{x:r[o],y:i[o]}}function maxMerge(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const{x:r,y:i}=t,{groupWidth:n=.001}=e;for(var s={x:[],y:[]},o={x:[],y:[]},a=0,h=0;hn?(o.x.push(r[h]),o.y.push(i[h]),s.x.push(r[h]),s.y.push(i[h]),h++,a++):(i[h]>o.y[a-1]&&(o.x[a-1]=r[h],o.y[a-1]=i[h]),s.x[a-1]=r[h],s.y[a-1]+=i[h],h++);return s.x=o.x.slice(),s}function maxY(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const{x:r,y:i}=t;let{from:n={index:0},to:s={index:r.length},reverse:o=!1}=e;void 0!==n.value&&void 0===n.index&&(n.index=calculateIndex(n.value,r,o)),void 0!==s.value&&void 0===s.index&&(s.index=calculateIndex(s.value,r,o));for(var a,h=Number.MIN_VALUE,l=n.index;l1&&void 0!==arguments[1]?arguments[1]:{};const{x:r,y:i}=t,{reverse:n=!1}=e;var s;s=n?(t,e)=>e.x-t.x:(t,e)=>t.x-e.x;for(var o=r.map((t,e)=>({x:t,y:i[e]})).sort(s),a={x:r.slice(),y:i.slice()},h=0;h0&&void 0!==arguments[0]?arguments[0]:{};const{x:e,y:r}=t;if(e.length<2)return;if(e.length!==r.length)throw new Error("The X and Y arrays mush have the same length");let i=e[0],n=0;for(let t=1;t1&&void 0!==arguments[1]?arguments[1]:{};const{x:r,y:i}=t,{groupWidth:n=.001}=e;for(var s={x:[],y:[]},o={x:[],y:[]},a=0,h=0;hn?(o.x.push(r[h]*i[h]),o.y.push(i[h]),s.x.push(r[h]),s.y.push(i[h]),h++,a++):(o.x[a-1]+=r[h]*i[h],o.y[a-1]+=i[h],s.x[a-1]=r[h],s.y[a-1]+=i[h],h++);for(var l=0;l=0;){var A=integral(0,f-m,x,g);if(v=w+A,h[S++]=(v-y)/o,S===n)break t;c=f,f+=o,y=v}w+=integral(m,d,x,M),m=d,g=p,b=d)throw new Error("x must be an increasing serie");for(;m-f>0;){if(x&&(y++,x=!1),u[b]=y<=0?0:M/y,++b===n)break t;c=f,f+=o,M=0,y=0}m>c&&(M+=g,y++),(m===-Number.MAX_VALUE||w>1)&&y--,m=d,g=p,v3&&void 0!==arguments[3]?arguments[3]:[];t>e&&([t,e]=[e,t]),i=i.filter(t=>void 0!==t.from&&void 0!==t.to),(i=JSON.parse(JSON.stringify(i))).forEach(t=>{t.from>t.to&&([t.to,t.from]=[t.from,t.to])}),i.sort((t,e)=>t.from-e.from),i.forEach(r=>{r.frome&&(r.to=e)});for(let t=0;ti[t+1].from&&(i[t].to=i[t+1].from);if(!(i=i.filter(t=>t.fromt+=e.to-e.from,0),s=(e-t-n)/r,o=[],a=t,h=0;for(let t of i){let e=Math.round((t.from-a)/s);h+=e,e>0&&o.push({from:a,to:t.from,numberOfPoints:e}),a=t.to}return r-h>0&&o.push({from:a,to:e,numberOfPoints:r-h}),o}function equallySpaced(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},{x:r,y:i}=t,n=r.length,s=!1;r.length>1&&r[0]>r[1]&&(r=r.slice().reverse(),i=i.slice().reverse(),s=!0);let{from:o=r[0],to:a=r[n-1],variant:h="smooth",numberOfPoints:l=100,exclusions:u=[]}=e;if(n!==i.length)throw new RangeError("the x and y vector doesn't have the same size.");if("number"!=typeof o||isNaN(o))throw new RangeError("'from' option must be a number");if("number"!=typeof a||isNaN(a))throw new RangeError("'to' option must be a number");if("number"!=typeof l||isNaN(l))throw new RangeError("'numberOfPoints' option must be a number");let c=getZones(o,a,l,u),f=[],m=[];for(let t of c){let e=processZone(r,i,t.from,t.to,t.numberOfPoints,h);f.push(...e.x),m.push(...e.y)}return s?o2&&void 0!==arguments[2]?arguments[2]:[];t>e&&([t,e]=[e,t]),r=r.filter(t=>void 0!==t.from&&void 0!==t.to),(r=JSON.parse(JSON.stringify(r))).forEach(t=>{t.from>t.to&&([t.to,t.from]=[t.from,t.to])}),r.sort((t,e)=>t.from-e.from),r.forEach(r=>{r.frome&&(r.to=e)});for(let t=0;tr[t+1].from&&(r[t].to=r[t+1].from);if(!(r=r.filter(t=>t.from1&&void 0!==arguments[1]?arguments[1]:{};const{x:r,y:i}=t,{from:n=r[0],to:s=r[r.length-1],exclusions:o=[]}=e;let a=getZones$1(n,s,o),h=0,l=[],u=[],c=0;for(;c=a[h].from)l.push(r[c]),u.push(i[c]);else if(r[c]>a[h].to&&!a[++h])break;c++}return{x:l,y:u}}const{Matrix:Matrix$3,SVD:SVD,EVD:EVD,CholeskyDecomposition:CholeskyDecomposition$1,LuDecomposition:LuDecomposition$1,QrDecomposition:QrDecomposition$1}=MatrixLib,Array$1={min:min,max:max,median:median,mean:mean,mode:mode$1,normed:norm$1,rescale:rescale,sequentialFill:sequentialFill,standardDeviation:standardDeviation,variance:variance},ArrayXY={centroidsMerge:mergeByCentroids,closestX:closestX,maxMerge:maxMerge,maxY:maxY,sortX:sortX,uniqueX:uniqueX,weightedMerge:weightedMerge,equallySpaced:equallySpaced,filterX:filterX};exports.Array=Array$1,exports.ArrayXY=ArrayXY,exports.BitArray=src$8,exports.CholeskyDecomposition=CholeskyDecomposition$1,exports.ConfusionMatrix=src$1,exports.CrossValidation=src$3,exports.DecisionTreeClassifier=DecisionTreeClassifier,exports.DecisionTreeRegression=DecisionTreeRegression,exports.Distance=distances,exports.EVD=EVD,exports.ExponentialRegression=ExponentialRegression,exports.FCNNLS=index$2,exports.FNN=FeedForwardNeuralNetwork,exports.HClust=index,exports.HashTable=HashTable,exports.KMeans=kmeans,exports.KNN=KNN,exports.KOPLS=KOPLS,exports.Kernel=kernel,exports.LuDecomposition=LuDecomposition$1,exports.Matrix=Matrix$3,exports.MatrixLib=MatrixLib,exports.MultivariateLinearRegression=MultivariateLinearRegression,exports.NaiveBayes=index$1,exports.PCA=PCA,exports.PLS=PLS,exports.Performance=src$5,exports.PolynomialRegression=PolynomialRegression,exports.PowerRegression=PowerRegression,exports.QrDecomposition=QrDecomposition$1,exports.Random=Random,exports.RandomForestClassifier=RandomForestClassifier,exports.RandomForestRegression=RandomForestRegression,exports.RobustPolynomialRegression=RobustPolynomialRegression,exports.SOM=src$4,exports.SVD=SVD,exports.Similarity=similarities,exports.SimpleLinearRegression=SimpleLinearRegression,exports.SparseMatrix=SparseMatrix,exports.TheilSenRegression=TheilSenRegression,exports.XSadd=XSadd,exports.binarySearch=binarySearch,exports.distanceMatrix=distanceMatrix,exports.levenbergMarquardt=levenbergMarquardt,exports.numSort=index$3,exports.padArray=src$6,exports.savitzkyGolay=src$7,Object.defineProperty(exports,"__esModule",{value:!0})}); //# sourceMappingURL=ml.min.js.map diff --git a/dist/ml.min.js.map b/dist/ml.min.js.map index 69917d7..3b7ea1d 100644 --- a/dist/ml.min.js.map +++ b/dist/ml.min.js.map @@ -1 +1 @@ -{"version":3,"file":"ml.min.js","sources":["../node_modules/is-any-array/src/index.js","../node_modules/ml-array-max/lib-es6/index.js","../node_modules/ml-array-min/lib-es6/index.js","../node_modules/ml-array-rescale/lib-es6/index.js","../node_modules/ml-matrix/src/util.js","../node_modules/ml-matrix/src/stat.js","../node_modules/ml-matrix/src/inspect.js","../node_modules/ml-matrix/src/mathOperations.js","../node_modules/ml-matrix/src/matrix.js","../node_modules/ml-matrix/src/views/base.js","../node_modules/ml-matrix/src/views/column.js","../node_modules/ml-matrix/src/views/columnSelection.js","../node_modules/ml-matrix/src/views/flipColumn.js","../node_modules/ml-matrix/src/views/flipRow.js","../node_modules/ml-matrix/src/views/row.js","../node_modules/ml-matrix/src/views/rowSelection.js","../node_modules/ml-matrix/src/views/selection.js","../node_modules/ml-matrix/src/views/sub.js","../node_modules/ml-matrix/src/views/transpose.js","../node_modules/ml-matrix/src/wrap/WrapperMatrix1D.js","../node_modules/ml-matrix/src/wrap/WrapperMatrix2D.js","../node_modules/ml-matrix/src/wrap/wrap.js","../node_modules/ml-matrix/src/dc/lu.js","../node_modules/ml-matrix/src/dc/util.js","../node_modules/ml-matrix/src/dc/qr.js","../node_modules/ml-matrix/src/dc/svd.js","../node_modules/ml-matrix/src/decompositions.js","../node_modules/ml-matrix/src/determinant.js","../node_modules/ml-matrix/src/linearDependencies.js","../node_modules/ml-matrix/src/pseudoInverse.js","../node_modules/ml-matrix/src/covariance.js","../node_modules/ml-matrix/src/correlation.js","../node_modules/ml-matrix/src/dc/evd.js","../node_modules/ml-matrix/src/dc/cholesky.js","../node_modules/ml-array-mean/lib-es6/index.js","../node_modules/ml-cart/src/utils.js","../node_modules/ml-cart/src/TreeNode.js","../node_modules/ml-cart/src/DecisionTreeClassifier.js","../node_modules/ml-cart/src/DecisionTreeRegression.js","../node_modules/random-js/dist/random-js.esm.js","../node_modules/ml-random-forest/src/utils.js","../node_modules/ml-random-forest/src/RandomForestBase.js","../node_modules/ml-random-forest/src/RandomForestClassifier.js","../node_modules/median-quickselect/lib/median-quickselect.min.js","../node_modules/ml-array-median/lib-es6/index.js","../node_modules/ml-random-forest/src/RandomForestRegression.js","../node_modules/ml-pca/src/pca.js","../node_modules/ml-distance-euclidean/lib-es6/euclidean.js","../node_modules/ml-distance-matrix/src/index.js","../node_modules/heap/lib/heap.js","../node_modules/heap/index.js","../node_modules/ml-hclust/src/Cluster.js","../node_modules/ml-hclust/src/ClusterLeaf.js","../node_modules/ml-hclust/src/agnes.js","../node_modules/ml-hclust/src/diana.js","../node_modules/ml-nearest-vector/lib-es6/index.js","../node_modules/ml-kmeans/src/utils.js","../node_modules/ml-xsadd/lib-es6/xsadd.js","../node_modules/ml-random/lib-es6/choice.js","../node_modules/ml-random/lib-es6/index.js","../node_modules/ml-kmeans/src/initialization.js","../node_modules/ml-kmeans/src/KMeansResult.js","../node_modules/ml-kmeans/src/kmeans.js","../node_modules/ml-naivebayes/src/utils.js","../node_modules/ml-naivebayes/src/GaussianNB.js","../node_modules/ml-naivebayes/src/MultinomialNB.js","../node_modules/ml-knn/src/KDTree.js","../node_modules/ml-knn/src/index.js","../node_modules/ml-pls/src/utils.js","../node_modules/ml-pls/src/pls.js","../node_modules/ml-pls/src/kopls.js","../node_modules/ml-confusion-matrix/src/index.js","../node_modules/ml-combinations/src/index.js","../node_modules/ml-cross-validation/src/index.js","../node_modules/ml-fnn/FeedForwardNeuralNetwork.js","../node_modules/ml-som/src/node-square.js","../node_modules/ml-som/src/node-hexagonal.js","../node_modules/ml-som/src/index.js","../node_modules/ml-regression-base/src/maybeToPrecision.js","../node_modules/ml-regression-base/src/checkArrayLength.js","../node_modules/ml-regression-base/src/index.js","../node_modules/ml-regression-polynomial/src/index.js","../node_modules/ml-regression-simple-linear/src/index.js","../node_modules/ml-regression-exponential/src/index.js","../node_modules/ml-regression-power/src/index.js","../node_modules/ml-regression-multivariate-linear/src/index.js","../node_modules/ml-kernel-gaussian/gaussian-kernel.js","../node_modules/ml-kernel-polynomial/polynomial-kernel.js","../node_modules/ml-kernel-sigmoid/sigmoid-kernel.js","../node_modules/ml-kernel/src/kernels/anova-kernel.js","../node_modules/ml-kernel/src/kernels/cauchy-kernel.js","../node_modules/ml-kernel/src/kernels/exponential-kernel.js","../node_modules/ml-kernel/src/kernels/histogram-intersection-kernel.js","../node_modules/ml-kernel/src/kernels/laplacian-kernel.js","../node_modules/ml-kernel/src/kernels/multiquadratic-kernel.js","../node_modules/ml-kernel/src/kernels/rational-quadratic-kernel.js","../node_modules/ml-kernel/src/kernel.js","../node_modules/ml-regression-theil-sen/src/index.js","../node_modules/ml-regression-robust-polynomial/src/index.js","../node_modules/ml-levenberg-marquardt/src/errorCalculation.js","../node_modules/ml-levenberg-marquardt/src/step.js","../node_modules/ml-levenberg-marquardt/src/index.js","../node_modules/binary-search/index.js","../node_modules/num-sort/index.js","../node_modules/ml-hash-table/src/primeFinder.js","../node_modules/ml-hash-table/src/HashTable.js","../node_modules/ml-sparse-matrix/src/index.js","../node_modules/ml-distance/src/distances/additiveSymmetric.js","../node_modules/ml-distance/src/distances/avg.js","../node_modules/ml-distance/src/distances/bhattacharyya.js","../node_modules/ml-distance/src/distances/canberra.js","../node_modules/ml-distance/src/distances/chebyshev.js","../node_modules/ml-distance/src/distances/clark.js","../node_modules/ml-distance/src/similarities/czekanowski.js","../node_modules/ml-distance/src/distances/czekanowski.js","../node_modules/ml-distance/src/distances/dice.js","../node_modules/ml-distance/src/distances/divergence.js","../node_modules/ml-distance/src/distances/fidelity.js","../node_modules/ml-distance/src/distances/gower.js","../node_modules/ml-distance/src/distances/harmonicMean.js","../node_modules/ml-distance/src/distances/hellinger.js","../node_modules/ml-distance/src/distances/innerProduct.js","../node_modules/ml-distance/src/distances/intersection.js","../node_modules/ml-distance/src/distances/jaccard.js","../node_modules/ml-distance/src/distances/jeffreys.js","../node_modules/ml-distance/src/distances/jensenDifference.js","../node_modules/ml-distance/src/distances/jensenShannon.js","../node_modules/ml-distance/src/distances/kdivergence.js","../node_modules/ml-distance/src/distances/kulczynski.js","../node_modules/ml-distance/src/distances/kullbackLeibler.js","../node_modules/ml-distance/src/distances/kumarHassebrook.js","../node_modules/ml-distance/src/distances/kumarJohnson.js","../node_modules/ml-distance/src/distances/lorentzian.js","../node_modules/ml-distance/src/distances/manhattan.js","../node_modules/ml-distance/src/distances/matusita.js","../node_modules/ml-distance/src/distances/minkowski.js","../node_modules/ml-distance/src/distances/motyka.js","../node_modules/ml-distance/src/distances/neyman.js","../node_modules/ml-distance/src/distances/pearson.js","../node_modules/ml-distance/src/distances/probabilisticSymmetric.js","../node_modules/ml-distance/src/distances/ruzicka.js","../node_modules/ml-distance/src/distances/soergel.js","../node_modules/ml-distance/src/distances/sorensen.js","../node_modules/ml-distance/src/distances/squared.js","../node_modules/ml-distance/src/distances/squaredChord.js","../node_modules/ml-distance/src/distances/taneja.js","../node_modules/ml-distance/src/similarities/tanimoto.js","../node_modules/ml-distance/src/distances/tanimoto.js","../node_modules/ml-distance/src/distances/topsoe.js","../node_modules/ml-distance/src/distances/waveHedges.js","../node_modules/ml-tree-similarity/src/createTree.js","../node_modules/ml-tree-similarity/src/getSimilarity.js","../node_modules/ml-tree-similarity/src/index.js","../node_modules/ml-distance/src/similarities/cosine.js","../node_modules/ml-distance/src/similarities/dice.js","../node_modules/ml-distance/src/similarities/intersection.js","../node_modules/ml-distance/src/similarities/jaccard.js","../node_modules/ml-distance/src/similarities/kulczynski.js","../node_modules/ml-distance/src/similarities/motyka.js","../node_modules/ml-distance/src/similarities/pearson.js","../node_modules/ml-distance/src/similarities/squaredChord.js","../node_modules/ml-performance/src/measures.js","../node_modules/ml-performance/src/index.js","../node_modules/ml-pad-array/src/index.js","../node_modules/ml-savitzky-golay/src/index.js","../node_modules/ml-bit-array/src/creator.js","../node_modules/ml-bit-array/src/index.js","../node_modules/ml-array-mode/lib-es6/index.js","../node_modules/ml-array-normed/lib-es6/index.js","../node_modules/ml-array-sequential-fill/lib-es6/index.js","../node_modules/ml-array-variance/lib-es6/index.js","../node_modules/ml-array-standard-deviation/lib-es6/index.js","../node_modules/ml-array-xy-centroids-merge/src/index.js","../node_modules/ml-arrayxy-closestx/src/index.js","../node_modules/ml-array-xy-max-merge/src/index.js","../node_modules/ml-array-xy-max-y/src/index.js","../node_modules/ml-array-xy-sort-x/src/index.js","../node_modules/ml-arrayxy-uniquex/src/index.js","../node_modules/ml-array-xy-weighted-merge/src/index.js","../node_modules/ml-array-xy-equally-spaced/src/integral.js","../node_modules/ml-array-xy-equally-spaced/src/equallySpacedSmooth.js","../node_modules/ml-array-xy-equally-spaced/src/equallySpacedSlot.js","../node_modules/ml-array-xy-equally-spaced/src/getZones.js","../node_modules/ml-array-xy-equally-spaced/src/index.js","../node_modules/ml-array-xy-filter-x/src/getZones.js","../node_modules/ml-array-xy-filter-x/src/index.js","../src/index.js"],"sourcesContent":["'use strict';\n\nconst toString = Object.prototype.toString;\n\nfunction isAnyArray(object) {\n return toString.call(object).endsWith('Array]');\n}\n\nmodule.exports = isAnyArray;\n","import isArray from 'is-any-array';\n\n/**\n * Computes the maximum of the given values\n * @param {Array} input\n * @return {number}\n */\n\nfunction max(input) {\n if (!isArray(input)) {\n throw new TypeError('input must be an array');\n }\n\n if (input.length === 0) {\n throw new TypeError('input must not be empty');\n }\n\n var max = input[0];\n\n for (var i = 1; i < input.length; i++) {\n if (input[i] > max) max = input[i];\n }\n\n return max;\n}\n\nexport default max;\n","import isArray from 'is-any-array';\n\n/**\n * Computes the minimum of the given values\n * @param {Array} input\n * @return {number}\n */\n\nfunction min(input) {\n if (!isArray(input)) {\n throw new TypeError('input must be an array');\n }\n\n if (input.length === 0) {\n throw new TypeError('input must not be empty');\n }\n\n var min = input[0];\n\n for (var i = 1; i < input.length; i++) {\n if (input[i] < min) min = input[i];\n }\n\n return min;\n}\n\nexport default min;\n","import max from 'ml-array-max';\nimport min from 'ml-array-min';\nimport isArray from 'is-any-array';\n\nfunction rescale(input) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n if (!isArray(input)) {\n throw new TypeError('input must be an array');\n } else if (input.length === 0) {\n throw new TypeError('input must not be empty');\n }\n\n var output;\n\n if (options.output !== undefined) {\n if (!isArray(options.output)) {\n throw new TypeError('output option must be an array if specified');\n }\n\n output = options.output;\n } else {\n output = new Array(input.length);\n }\n\n var currentMin = min(input);\n var currentMax = max(input);\n\n if (currentMin === currentMax) {\n throw new RangeError('minimum and maximum input values are equal. Cannot rescale a constant array');\n }\n\n var _options$min = options.min,\n minValue = _options$min === void 0 ? options.autoMinMax ? currentMin : 0 : _options$min,\n _options$max = options.max,\n maxValue = _options$max === void 0 ? options.autoMinMax ? currentMax : 1 : _options$max;\n\n if (minValue >= maxValue) {\n throw new RangeError('min option must be smaller than max option');\n }\n\n var factor = (maxValue - minValue) / (currentMax - currentMin);\n\n for (var i = 0; i < input.length; i++) {\n output[i] = (input[i] - currentMin) * factor + minValue;\n }\n\n return output;\n}\n\nexport default rescale;\n","/**\n * @private\n * Check that a row index is not out of bounds\n * @param {Matrix} matrix\n * @param {number} index\n * @param {boolean} [outer]\n */\nexport function checkRowIndex(matrix, index, outer) {\n var 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 var 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 var 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 var 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 var array = [];\n for (var i = 0; i < length; i++) {\n array.push(value);\n }\n return array;\n}\n\nfunction checkNumber(name, value) {\n if (typeof value !== 'number') {\n throw new TypeError(`${name} must be a number`);\n }\n}\n","import { newArray } from './util';\n\nexport function sumByRow(matrix) {\n var sum = newArray(matrix.rows);\n for (var i = 0; i < matrix.rows; ++i) {\n for (var 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 var sum = newArray(matrix.columns);\n for (var i = 0; i < matrix.rows; ++i) {\n for (var 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 var v = 0;\n for (var i = 0; i < matrix.rows; i++) {\n for (var j = 0; j < matrix.columns; j++) {\n v += matrix.get(i, j);\n }\n }\n return v;\n}\n\nexport function productByRow(matrix) {\n var sum = newArray(matrix.rows, 1);\n for (var i = 0; i < matrix.rows; ++i) {\n for (var 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 var sum = newArray(matrix.columns, 1);\n for (var i = 0; i < matrix.rows; ++i) {\n for (var 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 var v = 1;\n for (var i = 0; i < matrix.rows; i++) {\n for (var 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 (var i = 0; i < rows; i++) {\n var sum1 = 0;\n var sum2 = 0;\n var x = 0;\n for (var 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 (var j = 0; j < cols; j++) {\n var sum1 = 0;\n var sum2 = 0;\n var x = 0;\n for (var 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 var sum1 = 0;\n var sum2 = 0;\n var x = 0;\n for (var i = 0; i < rows; i++) {\n for (var j = 0; j < cols; j++) {\n x = matrix.get(i, j) - mean;\n sum1 += x;\n sum2 += x * x;\n }\n }\n if (unbiased) {\n return (sum2 - (sum1 * sum1) / size) / (size - 1);\n } else {\n return (sum2 - (sum1 * sum1) / size) / size;\n }\n}\n\nexport function centerByRow(matrix, mean) {\n for (let i = 0; i < matrix.rows; i++) {\n for (let j = 0; j < matrix.columns; j++) {\n matrix.set(i, j, matrix.get(i, j) - mean[i]);\n }\n }\n}\n\nexport function centerByColumn(matrix, mean) {\n for (let i = 0; i < matrix.rows; i++) {\n for (let j = 0; j < matrix.columns; j++) {\n matrix.set(i, j, matrix.get(i, j) - mean[j]);\n }\n }\n}\n\nexport function centerAll(matrix, mean) {\n for (let i = 0; i < matrix.rows; i++) {\n for (let j = 0; j < matrix.columns; j++) {\n matrix.set(i, j, matrix.get(i, j) - mean);\n }\n }\n}\n\nexport function getScaleByRow(matrix) {\n const scale = [];\n for (let i = 0; i < matrix.rows; i++) {\n let sum = 0;\n for (let j = 0; j < matrix.columns; j++) {\n sum += Math.pow(matrix.get(i, j), 2) / (matrix.columns - 1);\n }\n scale.push(Math.sqrt(sum));\n }\n return scale;\n}\n\nexport function scaleByRow(matrix, scale) {\n for (let i = 0; i < matrix.rows; i++) {\n for (let j = 0; j < matrix.columns; j++) {\n matrix.set(i, j, matrix.get(i, j) / scale[i]);\n }\n }\n}\n\nexport function getScaleByColumn(matrix) {\n const scale = [];\n for (let j = 0; j < matrix.columns; j++) {\n let sum = 0;\n for (let i = 0; i < matrix.rows; i++) {\n sum += Math.pow(matrix.get(i, j), 2) / (matrix.rows - 1);\n }\n scale.push(Math.sqrt(sum));\n }\n return scale;\n}\n\nexport function scaleByColumn(matrix, scale) {\n for (let i = 0; i < matrix.rows; i++) {\n for (let j = 0; j < matrix.columns; j++) {\n matrix.set(i, j, matrix.get(i, j) / scale[j]);\n }\n }\n}\n\nexport function getScaleAll(matrix) {\n const divider = matrix.size - 1;\n let sum = 0;\n for (let j = 0; j < matrix.columns; j++) {\n for (let i = 0; i < matrix.rows; i++) {\n sum += Math.pow(matrix.get(i, j), 2) / divider;\n }\n }\n return Math.sqrt(sum);\n}\n\nexport function scaleAll(matrix, scale) {\n for (let i = 0; i < matrix.rows; i++) {\n for (let j = 0; j < matrix.columns; j++) {\n matrix.set(i, j, matrix.get(i, j) / scale);\n }\n }\n}\n","export function inspectMatrix() {\n const indent = ' '.repeat(2);\n const indentData = ' '.repeat(4);\n return `${this.constructor.name} {\n${indent}[\n${indentData}${inspectData(this, indentData)}\n${indent}]\n${indent}rows: ${this.rows}\n${indent}columns: ${this.columns}\n}`;\n}\n\nconst maxRows = 15;\nconst maxColumns = 10;\nconst maxNumSize = 8;\n\nfunction inspectData(matrix, indent) {\n const { rows, columns } = matrix;\n const maxI = Math.min(rows, maxRows);\n const maxJ = Math.min(columns, maxColumns);\n const result = [];\n for (var i = 0; i < maxI; i++) {\n let line = [];\n for (var j = 0; j < maxJ; j++) {\n line.push(formatNumber(matrix.get(i, j)));\n }\n result.push(`${line.join(' ')}`);\n }\n if (maxJ !== columns) {\n result[result.length - 1] += ` ... ${columns - maxColumns} more columns`;\n }\n if (maxI !== rows) {\n result.push(`... ${rows - maxRows} more rows`);\n }\n return result.join(`\\n${indent}`);\n}\n\nfunction formatNumber(num) {\n const numStr = String(num);\n if (numStr.length <= maxNumSize) {\n return numStr.padEnd(maxNumSize, ' ');\n }\n const precise = num.toPrecision(maxNumSize - 2);\n if (precise.length <= maxNumSize) {\n return precise;\n }\n const exponential = num.toExponential(maxNumSize - 2);\n const eIndex = exponential.indexOf('e');\n const e = exponential.substring(eIndex);\n return exponential.substring(0, maxNumSize - e.length) + e;\n}\n","export function installMathOperations(AbstractMatrix, Matrix) {\n AbstractMatrix.prototype.add = function add(value) {\n if (typeof value === 'number') return this.addS(value);\n return this.addM(value);\n };\n\n AbstractMatrix.prototype.addS = function addS(value) {\n for (var i = 0; i < this.rows; i++) {\n for (var 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 (var i = 0; i < this.rows; i++) {\n for (var 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 var 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 (var i = 0; i < this.rows; i++) {\n for (var 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 (var i = 0; i < this.rows; i++) {\n for (var 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 var 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 (var i = 0; i < this.rows; i++) {\n for (var 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 (var i = 0; i < this.rows; i++) {\n for (var 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 var 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 (var i = 0; i < this.rows; i++) {\n for (var 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 (var i = 0; i < this.rows; i++) {\n for (var 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 var 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 (var i = 0; i < this.rows; i++) {\n for (var 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 (var i = 0; i < this.rows; i++) {\n for (var 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 var 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 (var i = 0; i < this.rows; i++) {\n for (var 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 (var i = 0; i < this.rows; i++) {\n for (var 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 var 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 (var i = 0; i < this.rows; i++) {\n for (var 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 (var i = 0; i < this.rows; i++) {\n for (var 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 var 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 (var i = 0; i < this.rows; i++) {\n for (var 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 (var i = 0; i < this.rows; i++) {\n for (var 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 var 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 (var i = 0; i < this.rows; i++) {\n for (var 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 (var i = 0; i < this.rows; i++) {\n for (var 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 var 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 (var i = 0; i < this.rows; i++) {\n for (var 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 (var i = 0; i < this.rows; i++) {\n for (var 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 var 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 (var i = 0; i < this.rows; i++) {\n for (var 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 (var i = 0; i < this.rows; i++) {\n for (var 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 var 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 (var i = 0; i < this.rows; i++) {\n for (var 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 var newMatrix = new Matrix(matrix);\n return newMatrix.not();\n };\n\n AbstractMatrix.prototype.abs = function abs() {\n for (var i = 0; i < this.rows; i++) {\n for (var 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 var newMatrix = new Matrix(matrix);\n return newMatrix.abs();\n };\n\n AbstractMatrix.prototype.acos = function acos() {\n for (var i = 0; i < this.rows; i++) {\n for (var 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 var newMatrix = new Matrix(matrix);\n return newMatrix.acos();\n };\n\n AbstractMatrix.prototype.acosh = function acosh() {\n for (var i = 0; i < this.rows; i++) {\n for (var 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 var newMatrix = new Matrix(matrix);\n return newMatrix.acosh();\n };\n\n AbstractMatrix.prototype.asin = function asin() {\n for (var i = 0; i < this.rows; i++) {\n for (var 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 var newMatrix = new Matrix(matrix);\n return newMatrix.asin();\n };\n\n AbstractMatrix.prototype.asinh = function asinh() {\n for (var i = 0; i < this.rows; i++) {\n for (var 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 var newMatrix = new Matrix(matrix);\n return newMatrix.asinh();\n };\n\n AbstractMatrix.prototype.atan = function atan() {\n for (var i = 0; i < this.rows; i++) {\n for (var 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 var newMatrix = new Matrix(matrix);\n return newMatrix.atan();\n };\n\n AbstractMatrix.prototype.atanh = function atanh() {\n for (var i = 0; i < this.rows; i++) {\n for (var 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 var newMatrix = new Matrix(matrix);\n return newMatrix.atanh();\n };\n\n AbstractMatrix.prototype.cbrt = function cbrt() {\n for (var i = 0; i < this.rows; i++) {\n for (var 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 var newMatrix = new Matrix(matrix);\n return newMatrix.cbrt();\n };\n\n AbstractMatrix.prototype.ceil = function ceil() {\n for (var i = 0; i < this.rows; i++) {\n for (var 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 var newMatrix = new Matrix(matrix);\n return newMatrix.ceil();\n };\n\n AbstractMatrix.prototype.clz32 = function clz32() {\n for (var i = 0; i < this.rows; i++) {\n for (var 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 var newMatrix = new Matrix(matrix);\n return newMatrix.clz32();\n };\n\n AbstractMatrix.prototype.cos = function cos() {\n for (var i = 0; i < this.rows; i++) {\n for (var 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 var newMatrix = new Matrix(matrix);\n return newMatrix.cos();\n };\n\n AbstractMatrix.prototype.cosh = function cosh() {\n for (var i = 0; i < this.rows; i++) {\n for (var 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 var newMatrix = new Matrix(matrix);\n return newMatrix.cosh();\n };\n\n AbstractMatrix.prototype.exp = function exp() {\n for (var i = 0; i < this.rows; i++) {\n for (var 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 var newMatrix = new Matrix(matrix);\n return newMatrix.exp();\n };\n\n AbstractMatrix.prototype.expm1 = function expm1() {\n for (var i = 0; i < this.rows; i++) {\n for (var 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 var newMatrix = new Matrix(matrix);\n return newMatrix.expm1();\n };\n\n AbstractMatrix.prototype.floor = function floor() {\n for (var i = 0; i < this.rows; i++) {\n for (var 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 var newMatrix = new Matrix(matrix);\n return newMatrix.floor();\n };\n\n AbstractMatrix.prototype.fround = function fround() {\n for (var i = 0; i < this.rows; i++) {\n for (var 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 var newMatrix = new Matrix(matrix);\n return newMatrix.fround();\n };\n\n AbstractMatrix.prototype.log = function log() {\n for (var i = 0; i < this.rows; i++) {\n for (var 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 var newMatrix = new Matrix(matrix);\n return newMatrix.log();\n };\n\n AbstractMatrix.prototype.log1p = function log1p() {\n for (var i = 0; i < this.rows; i++) {\n for (var 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 var newMatrix = new Matrix(matrix);\n return newMatrix.log1p();\n };\n\n AbstractMatrix.prototype.log10 = function log10() {\n for (var i = 0; i < this.rows; i++) {\n for (var 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 var newMatrix = new Matrix(matrix);\n return newMatrix.log10();\n };\n\n AbstractMatrix.prototype.log2 = function log2() {\n for (var i = 0; i < this.rows; i++) {\n for (var 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 var newMatrix = new Matrix(matrix);\n return newMatrix.log2();\n };\n\n AbstractMatrix.prototype.round = function round() {\n for (var i = 0; i < this.rows; i++) {\n for (var 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 var newMatrix = new Matrix(matrix);\n return newMatrix.round();\n };\n\n AbstractMatrix.prototype.sign = function sign() {\n for (var i = 0; i < this.rows; i++) {\n for (var 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 var newMatrix = new Matrix(matrix);\n return newMatrix.sign();\n };\n\n AbstractMatrix.prototype.sin = function sin() {\n for (var i = 0; i < this.rows; i++) {\n for (var 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 var newMatrix = new Matrix(matrix);\n return newMatrix.sin();\n };\n\n AbstractMatrix.prototype.sinh = function sinh() {\n for (var i = 0; i < this.rows; i++) {\n for (var 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 var newMatrix = new Matrix(matrix);\n return newMatrix.sinh();\n };\n\n AbstractMatrix.prototype.sqrt = function sqrt() {\n for (var i = 0; i < this.rows; i++) {\n for (var 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 var newMatrix = new Matrix(matrix);\n return newMatrix.sqrt();\n };\n\n AbstractMatrix.prototype.tan = function tan() {\n for (var i = 0; i < this.rows; i++) {\n for (var 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 var newMatrix = new Matrix(matrix);\n return newMatrix.tan();\n };\n\n AbstractMatrix.prototype.tanh = function tanh() {\n for (var i = 0; i < this.rows; i++) {\n for (var 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 var newMatrix = new Matrix(matrix);\n return newMatrix.tanh();\n };\n\n AbstractMatrix.prototype.trunc = function trunc() {\n for (var i = 0; i < this.rows; i++) {\n for (var 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 var newMatrix = new Matrix(matrix);\n return newMatrix.trunc();\n };\n\n AbstractMatrix.pow = function pow(matrix, arg0) {\n var 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 (var i = 0; i < this.rows; i++) {\n for (var 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 (var i = 0; i < this.rows; i++) {\n for (var j = 0; j < this.columns; j++) {\n this.set(i, j, Math.pow(this.get(i, j), matrix.get(i, j)));\n }\n }\n return this;\n };\n}\n","import rescale from 'ml-array-rescale';\n\nimport {\n checkRowVector,\n checkRowIndex,\n checkColumnIndex,\n checkColumnVector,\n checkRange,\n checkIndices\n} from './util';\nimport {\n sumByRow,\n sumByColumn,\n sumAll,\n productByRow,\n productByColumn,\n productAll,\n varianceByRow,\n varianceByColumn,\n varianceAll,\n centerByRow,\n centerByColumn,\n centerAll,\n scaleByRow,\n scaleByColumn,\n scaleAll,\n getScaleByRow,\n getScaleByColumn,\n getScaleAll\n} from './stat';\nimport { inspectMatrix } from './inspect';\nimport { installMathOperations } from './mathOperations';\n\nexport class AbstractMatrix {\n static from1DArray(newRows, newColumns, newData) {\n var length = newRows * newColumns;\n if (length !== newData.length) {\n throw new RangeError('data length does not match given dimensions');\n }\n var newMatrix = new Matrix(newRows, newColumns);\n for (var row = 0; row < newRows; row++) {\n for (var 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 var vector = new Matrix(1, newData.length);\n for (var i = 0; i < newData.length; i++) {\n vector.set(0, i, newData[i]);\n }\n return vector;\n }\n\n static columnVector(newData) {\n var vector = new Matrix(newData.length, 1);\n for (var 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 var matrix = new Matrix(rows, columns);\n for (var i = 0; i < rows; i++) {\n for (var 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 var interval = max - min;\n var matrix = new Matrix(rows, columns);\n for (var i = 0; i < rows; i++) {\n for (var j = 0; j < columns; j++) {\n var 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 var min = Math.min(rows, columns);\n var matrix = this.zeros(rows, columns);\n for (var i = 0; i < min; i++) {\n matrix.set(i, i, value);\n }\n return matrix;\n }\n\n static diag(data, rows, columns) {\n var l = data.length;\n if (rows === undefined) rows = l;\n if (columns === undefined) columns = rows;\n var min = Math.min(l, rows, columns);\n var matrix = this.zeros(rows, columns);\n for (var 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 var rows = matrix1.rows;\n var columns = matrix1.columns;\n var result = new Matrix(rows, columns);\n for (var i = 0; i < rows; i++) {\n for (var 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 var rows = matrix1.rows;\n var columns = matrix1.columns;\n var result = new this(rows, columns);\n for (var i = 0; i < rows; i++) {\n for (var 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 (var i = 0; i < this.rows; i++) {\n for (var j = 0; j < this.columns; j++) {\n callback.call(this, i, j);\n }\n }\n return this;\n }\n\n to1DArray() {\n var array = [];\n for (var i = 0; i < this.rows; i++) {\n for (var j = 0; j < this.columns; j++) {\n array.push(this.get(i, j));\n }\n }\n return array;\n }\n\n to2DArray() {\n var copy = [];\n for (var i = 0; i < this.rows; i++) {\n copy.push([]);\n for (var j = 0; j < this.columns; j++) {\n copy[i].push(this.get(i, j));\n }\n }\n return copy;\n }\n\n toJSON() {\n return this.to2DArray();\n }\n\n isRowVector() {\n return this.rows === 1;\n }\n\n isColumnVector() {\n return this.columns === 1;\n }\n\n isVector() {\n return this.rows === 1 || this.columns === 1;\n }\n\n isSquare() {\n return this.rows === this.columns;\n }\n\n isSymmetric() {\n if (this.isSquare()) {\n for (var i = 0; i < this.rows; i++) {\n for (var 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 var matrix = new Matrix(this.rows * rows, this.columns * columns);\n for (var i = 0; i < rows; i++) {\n for (var 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 (var i = 0; i < this.rows; i++) {\n for (var 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 var row = [];\n for (var 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 (var 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 (var i = 0; i < this.columns; i++) {\n var 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 var column = [];\n for (var 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 (var 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 (var i = 0; i < this.rows; i++) {\n var 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 (var i = 0; i < this.rows; i++) {\n for (var 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 (var i = 0; i < this.rows; i++) {\n for (var 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 (var i = 0; i < this.rows; i++) {\n for (var 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 (var i = 0; i < this.rows; i++) {\n for (var 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 (var i = 0; i < this.rows; i++) {\n for (var 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 (var i = 0; i < this.rows; i++) {\n for (var 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 (var i = 0; i < this.rows; i++) {\n for (var 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 (var i = 0; i < this.rows; i++) {\n for (var 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 (var 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 (var 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 var v = this.get(0, 0);\n for (var i = 0; i < this.rows; i++) {\n for (var 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 var v = this.get(0, 0);\n var idx = [0, 0];\n for (var i = 0; i < this.rows; i++) {\n for (var 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 var v = this.get(0, 0);\n for (var i = 0; i < this.rows; i++) {\n for (var 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 var v = this.get(0, 0);\n var idx = [0, 0];\n for (var i = 0; i < this.rows; i++) {\n for (var 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 var v = this.get(row, 0);\n for (var 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 var v = this.get(row, 0);\n var idx = [row, 0];\n for (var 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 var v = this.get(row, 0);\n for (var 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 var v = this.get(row, 0);\n var idx = [row, 0];\n for (var 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 var v = this.get(0, column);\n for (var 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 var v = this.get(0, column);\n var idx = [0, column];\n for (var 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 var v = this.get(0, column);\n for (var 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 var v = this.get(0, column);\n var idx = [0, column];\n for (var 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 var min = Math.min(this.rows, this.columns);\n var diag = [];\n for (var i = 0; i < min; i++) {\n diag.push(this.get(i, i));\n }\n return diag;\n }\n\n norm(type = 'frobenius') {\n var result = 0;\n if (type === 'max') {\n return this.max();\n } else if (type === 'frobenius') {\n for (var i = 0; i < this.rows; i++) {\n for (var 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 var sum = 0;\n for (var i = 0; i < this.rows; i++) {\n for (var 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 var vector1 = this.to1DArray();\n if (vector1.length !== vector2.length) {\n throw new RangeError('vectors do not have the same size');\n }\n var dot = 0;\n for (var 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 var m = this.rows;\n var n = this.columns;\n var p = other.columns;\n\n var result = new Matrix(m, p);\n\n var Bcolj = new Float64Array(n);\n for (var j = 0; j < p; j++) {\n for (var k = 0; k < n; k++) {\n Bcolj[k] = other.get(k, j);\n }\n\n for (var i = 0; i < m; i++) {\n var s = 0;\n for (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 var 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 var 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 var x = this.clone();\n var r1 = x.rows;\n var c1 = x.columns;\n var r2 = y.rows;\n var 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 var r = mat.rows;\n var c = mat.columns;\n if (r === rows && c === cols) {\n return mat;\n } else {\n var 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 var r = Math.max(r1, r2);\n var 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 var halfRows = parseInt(a.rows / 2, 10);\n var halfCols = parseInt(a.columns / 2, 10);\n // Subdivide input matrices.\n var a11 = a.subMatrix(0, halfRows - 1, 0, halfCols - 1);\n var b11 = b.subMatrix(0, halfRows - 1, 0, halfCols - 1);\n\n var a12 = a.subMatrix(0, halfRows - 1, halfCols, a.columns - 1);\n var b12 = b.subMatrix(0, halfRows - 1, halfCols, b.columns - 1);\n\n var a21 = a.subMatrix(halfRows, a.rows - 1, 0, halfCols - 1);\n var b21 = b.subMatrix(halfRows, b.rows - 1, 0, halfCols - 1);\n\n var a22 = a.subMatrix(halfRows, a.rows - 1, halfCols, a.columns - 1);\n var b22 = b.subMatrix(halfRows, b.rows - 1, halfCols, b.columns - 1);\n\n // Compute intermediate values.\n var m1 = blockMult(\n AbstractMatrix.add(a11, a22),\n AbstractMatrix.add(b11, b22),\n halfRows,\n halfCols\n );\n var m2 = blockMult(AbstractMatrix.add(a21, a22), b11, halfRows, halfCols);\n var m3 = blockMult(a11, AbstractMatrix.sub(b12, b22), halfRows, halfCols);\n var m4 = blockMult(a22, AbstractMatrix.sub(b21, b11), halfRows, halfCols);\n var m5 = blockMult(AbstractMatrix.add(a11, a12), b22, halfRows, halfCols);\n var m6 = blockMult(\n AbstractMatrix.sub(a21, a11),\n AbstractMatrix.add(b11, b12),\n halfRows,\n halfCols\n );\n var 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 var c11 = AbstractMatrix.add(m1, m4);\n c11.sub(m5);\n c11.add(m7);\n var c12 = AbstractMatrix.add(m3, m5);\n var c21 = AbstractMatrix.add(m2, m4);\n var 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 var 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 var newMatrix = new Matrix(this.rows, this.columns);\n for (var i = 0; i < this.rows; i++) {\n const row = this.getRow(i);\n rescale(row, { min, max, output: row });\n newMatrix.setRow(i, row);\n }\n return newMatrix;\n }\n\n scaleColumns(options = {}) {\n if (typeof options !== 'object') {\n throw new TypeError('options must be an object');\n }\n const { min = 0, max = 1 } = options;\n if (!Number.isFinite(min)) throw new TypeError('min must be a number');\n if (!Number.isFinite(max)) throw new TypeError('max must be a number');\n if (min >= max) throw new RangeError('min must be smaller than max');\n var newMatrix = new Matrix(this.rows, this.columns);\n for (var i = 0; i < this.columns; i++) {\n const column = this.getColumn(i);\n rescale(column, {\n min: min,\n max: max,\n output: column\n });\n newMatrix.setColumn(i, column);\n }\n return newMatrix;\n }\n\n flipRows() {\n const middle = Math.ceil(this.columns / 2);\n for (var i = 0; i < this.rows; i++) {\n for (var j = 0; j < middle; j++) {\n var first = this.get(i, j);\n var 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 (var j = 0; j < this.columns; j++) {\n for (var i = 0; i < middle; i++) {\n var first = this.get(i, j);\n var 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 var m = this.rows;\n var n = this.columns;\n var p = other.rows;\n var q = other.columns;\n\n var result = new Matrix(m * p, n * q);\n for (var i = 0; i < m; i++) {\n for (var j = 0; j < n; j++) {\n for (var k = 0; k < p; k++) {\n for (var 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 var result = new Matrix(this.columns, this.rows);\n for (var i = 0; i < this.rows; i++) {\n for (var 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 (var 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 (var 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 var newMatrix = new Matrix(\n endRow - startRow + 1,\n endColumn - startColumn + 1\n );\n for (var i = startRow; i <= endRow; i++) {\n for (var 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 var newMatrix = new Matrix(indices.length, endColumn - startColumn + 1);\n for (var i = 0; i < indices.length; i++) {\n for (var 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 var newMatrix = new Matrix(endRow - startRow + 1, indices.length);\n for (var i = 0; i < indices.length; i++) {\n for (var 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 var endRow = startRow + matrix.rows - 1;\n var endColumn = startColumn + matrix.columns - 1;\n checkRange(this, startRow, endRow, startColumn, endColumn);\n for (var i = 0; i < matrix.rows; i++) {\n for (var 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 var indices = checkIndices(this, rowIndices, columnIndices);\n var newMatrix = new Matrix(rowIndices.length, columnIndices.length);\n for (var i = 0; i < indices.row.length; i++) {\n var rowIndex = indices.row[i];\n for (var j = 0; j < indices.column.length; j++) {\n var columnIndex = indices.column[j];\n newMatrix.set(i, j, this.get(rowIndex, columnIndex));\n }\n }\n return newMatrix;\n }\n\n trace() {\n var min = Math.min(this.rows, this.columns);\n var trace = 0;\n for (var i = 0; i < min; i++) {\n trace += this.get(i, i);\n }\n return trace;\n }\n\n clone() {\n var newMatrix = new Matrix(this.rows, this.columns);\n for (var row = 0; row < this.rows; row++) {\n for (var 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 (var 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 } case undefined: {\n if (typeof center !== 'number') {\n throw new TypeError('center must be a number');\n }\n centerAll(this, center);\n return this;\n }\n default:\n throw new Error(`invalid option: ${by}`);\n }\n }\n\n scale(by, options = {}) {\n if (typeof by === 'object') {\n options = by;\n by = undefined;\n }\n if (typeof options !== 'object') {\n throw new TypeError('options must be an object');\n }\n let scale = options.scale;\n switch (by) {\n case 'row': {\n if (scale === undefined) {\n scale = getScaleByRow(this);\n } else if (!Array.isArray(scale)) {\n throw new TypeError('scale must be an array');\n }\n scaleByRow(this, scale);\n return this;\n }\n case 'column': {\n if (scale === undefined) {\n scale = getScaleByColumn(this);\n } else if (!Array.isArray(scale)) {\n throw new TypeError('scale must be an array');\n }\n scaleByColumn(this, scale);\n return this;\n }\n case undefined: {\n if (scale === undefined) {\n scale = getScaleAll(this);\n } else if (typeof scale !== 'number') {\n throw new TypeError('scale must be a number');\n }\n scaleAll(this, scale);\n return this;\n }\n default:\n throw new Error(`invalid option: ${by}`);\n }\n }\n}\n\nAbstractMatrix.prototype.klass = 'Matrix';\nif (typeof Symbol !== 'undefined') {\n AbstractMatrix.prototype[\n Symbol.for('nodejs.util.inspect.custom')\n ] = inspectMatrix;\n}\n\nfunction compareNumbers(a, b) {\n return a - b;\n}\n\n// Synonyms\nAbstractMatrix.random = AbstractMatrix.rand;\nAbstractMatrix.randomInt = AbstractMatrix.randInt;\nAbstractMatrix.diagonal = AbstractMatrix.diag;\nAbstractMatrix.prototype.diagonal = AbstractMatrix.prototype.diag;\nAbstractMatrix.identity = AbstractMatrix.eye;\nAbstractMatrix.prototype.negate = AbstractMatrix.prototype.neg;\nAbstractMatrix.prototype.tensorProduct =\n AbstractMatrix.prototype.kroneckerProduct;\n\nexport default class Matrix extends AbstractMatrix {\n constructor(nRows, nColumns) {\n super();\n if (Matrix.isMatrix(nRows)) {\n return nRows.clone();\n } else if (Number.isInteger(nRows) && nRows > 0) {\n // Create an empty matrix\n this.data = [];\n if (Number.isInteger(nColumns) && nColumns > 0) {\n for (let i = 0; i < nRows; i++) {\n this.data.push(new Float64Array(nColumns));\n }\n } else {\n throw new TypeError('nColumns must be a positive integer');\n }\n } else if (Array.isArray(nRows)) {\n // Copy the values from the 2D array\n const arrayData = nRows;\n nRows = arrayData.length;\n nColumns = arrayData[0].length;\n if (typeof nColumns !== 'number' || nColumns === 0) {\n throw new TypeError(\n 'Data must be a 2D array with at least one element'\n );\n }\n this.data = [];\n for (let i = 0; i < nRows; i++) {\n if (arrayData[i].length !== nColumns) {\n throw new RangeError('Inconsistent array dimensions');\n }\n this.data.push(Float64Array.from(arrayData[i]));\n }\n } else {\n throw new TypeError(\n 'First argument must be a positive number or an array'\n );\n }\n this.rows = nRows;\n this.columns = nColumns;\n return this;\n }\n\n set(rowIndex, columnIndex, value) {\n this.data[rowIndex][columnIndex] = value;\n return this;\n }\n\n get(rowIndex, columnIndex) {\n return this.data[rowIndex][columnIndex];\n }\n\n removeRow(index) {\n checkRowIndex(this, index);\n if (this.rows === 1) {\n throw new RangeError('A matrix cannot have less than one row');\n }\n this.data.splice(index, 1);\n this.rows -= 1;\n return this;\n }\n\n addRow(index, array) {\n if (array === undefined) {\n array = index;\n index = this.rows;\n }\n checkRowIndex(this, index, true);\n array = Float64Array.from(checkRowVector(this, array, true));\n this.data.splice(index, 0, array);\n this.rows += 1;\n return this;\n }\n\n removeColumn(index) {\n checkColumnIndex(this, index);\n if (this.columns === 1) {\n throw new RangeError('A matrix cannot have less than one column');\n }\n for (var 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 (var i = 0; i < this.rows; i++) {\n const newRow = new Float64Array(this.columns + 1);\n let j = 0;\n for (; j < index; j++) {\n newRow[j] = this.data[i][j];\n }\n newRow[j++] = array[i];\n for (; j < this.columns + 1; j++) {\n newRow[j] = this.data[i][j - 1];\n }\n this.data[i] = newRow;\n }\n this.columns += 1;\n return this;\n }\n}\n\ninstallMathOperations(AbstractMatrix, Matrix);\n","import { AbstractMatrix } from '../matrix';\n\nexport default class BaseView extends AbstractMatrix {\n constructor(matrix, rows, columns) {\n super();\n this.matrix = matrix;\n this.rows = rows;\n this.columns = columns;\n }\n}\n","import { checkColumnIndex } from '../util';\n\nimport BaseView from './base';\n\nexport default class MatrixColumnView extends BaseView {\n constructor(matrix, column) {\n checkColumnIndex(matrix, column);\n super(matrix, matrix.rows, 1);\n this.column = column;\n }\n\n set(rowIndex, columnIndex, value) {\n this.matrix.set(rowIndex, this.column, value);\n return this;\n }\n\n get(rowIndex) {\n return this.matrix.get(rowIndex, this.column);\n }\n}\n","import { checkColumnIndices } from '../util';\r\n\r\nimport BaseView from './base';\r\n\r\nexport default class MatrixColumnSelectionView extends BaseView {\r\n constructor(matrix, columnIndices) {\r\n columnIndices = checkColumnIndices(matrix, columnIndices);\r\n super(matrix, matrix.rows, columnIndices.length);\r\n this.columnIndices = columnIndices;\r\n }\r\n\r\n set(rowIndex, columnIndex, value) {\r\n this.matrix.set(rowIndex, this.columnIndices[columnIndex], value);\r\n return this;\r\n }\r\n\r\n get(rowIndex, columnIndex) {\r\n return this.matrix.get(rowIndex, this.columnIndices[columnIndex]);\r\n }\r\n}\r\n","import BaseView from './base';\r\n\r\nexport default class MatrixFlipColumnView extends BaseView {\r\n constructor(matrix) {\r\n super(matrix, matrix.rows, matrix.columns);\r\n }\r\n\r\n set(rowIndex, columnIndex, value) {\r\n this.matrix.set(rowIndex, this.columns - columnIndex - 1, value);\r\n return this;\r\n }\r\n\r\n get(rowIndex, columnIndex) {\r\n return this.matrix.get(rowIndex, this.columns - columnIndex - 1);\r\n }\r\n}\r\n","import BaseView from './base';\r\n\r\nexport default class MatrixFlipRowView extends BaseView {\r\n constructor(matrix) {\r\n super(matrix, matrix.rows, matrix.columns);\r\n }\r\n\r\n set(rowIndex, columnIndex, value) {\r\n this.matrix.set(this.rows - rowIndex - 1, columnIndex, value);\r\n return this;\r\n }\r\n\r\n get(rowIndex, columnIndex) {\r\n return this.matrix.get(this.rows - rowIndex - 1, columnIndex);\r\n }\r\n}\r\n","import { checkRowIndex } from '../util';\n\nimport BaseView from './base';\n\nexport default class MatrixRowView extends BaseView {\n constructor(matrix, row) {\n checkRowIndex(matrix, row);\n super(matrix, 1, matrix.columns);\n this.row = row;\n }\n\n set(rowIndex, columnIndex, value) {\n this.matrix.set(this.row, columnIndex, value);\n return this;\n }\n\n get(rowIndex, columnIndex) {\n return this.matrix.get(this.row, columnIndex);\n }\n}\n","import { checkRowIndices } from '../util';\r\n\r\nimport BaseView from './base';\r\n\r\nexport default class MatrixRowSelectionView extends BaseView {\r\n constructor(matrix, rowIndices) {\r\n rowIndices = checkRowIndices(matrix, rowIndices);\r\n super(matrix, rowIndices.length, matrix.columns);\r\n this.rowIndices = rowIndices;\r\n }\r\n\r\n set(rowIndex, columnIndex, value) {\r\n this.matrix.set(this.rowIndices[rowIndex], columnIndex, value);\r\n return this;\r\n }\r\n\r\n get(rowIndex, columnIndex) {\r\n return this.matrix.get(this.rowIndices[rowIndex], columnIndex);\r\n }\r\n}\r\n","import { checkIndices } from '../util';\r\n\r\nimport BaseView from './base';\r\n\r\nexport default class MatrixSelectionView extends BaseView {\r\n constructor(matrix, rowIndices, columnIndices) {\r\n var indices = checkIndices(matrix, rowIndices, columnIndices);\r\n super(matrix, indices.row.length, indices.column.length);\r\n this.rowIndices = indices.row;\r\n this.columnIndices = indices.column;\r\n }\r\n\r\n set(rowIndex, columnIndex, value) {\r\n this.matrix.set(\r\n this.rowIndices[rowIndex],\r\n this.columnIndices[columnIndex],\r\n value\r\n );\r\n return this;\r\n }\r\n\r\n get(rowIndex, columnIndex) {\r\n return this.matrix.get(\r\n this.rowIndices[rowIndex],\r\n this.columnIndices[columnIndex]\r\n );\r\n }\r\n}\r\n","import { checkRange } from '../util';\r\n\r\nimport BaseView from './base';\r\n\r\nexport default class MatrixSubView extends BaseView {\r\n constructor(matrix, startRow, endRow, startColumn, endColumn) {\r\n checkRange(matrix, startRow, endRow, startColumn, endColumn);\r\n super(matrix, endRow - startRow + 1, endColumn - startColumn + 1);\r\n this.startRow = startRow;\r\n this.startColumn = startColumn;\r\n }\r\n\r\n set(rowIndex, columnIndex, value) {\r\n this.matrix.set(\r\n this.startRow + rowIndex,\r\n this.startColumn + columnIndex,\r\n value\r\n );\r\n return this;\r\n }\r\n\r\n get(rowIndex, columnIndex) {\r\n return this.matrix.get(\r\n this.startRow + rowIndex,\r\n this.startColumn + columnIndex\r\n );\r\n }\r\n}\r\n","import BaseView from './base';\r\n\r\nexport default class MatrixTransposeView extends BaseView {\r\n constructor(matrix) {\r\n super(matrix, matrix.columns, matrix.rows);\r\n }\r\n\r\n set(rowIndex, columnIndex, value) {\r\n this.matrix.set(columnIndex, rowIndex, value);\r\n return this;\r\n }\r\n\r\n get(rowIndex, columnIndex) {\r\n return this.matrix.get(columnIndex, rowIndex);\r\n }\r\n}\r\n","import { AbstractMatrix } from '../matrix';\n\nexport default class WrapperMatrix1D extends AbstractMatrix {\n constructor(data, options = {}) {\n const { rows = 1 } = options;\n\n if (data.length % rows !== 0) {\n throw new Error('the data length is not divisible by the number of rows');\n }\n super();\n this.rows = rows;\n this.columns = data.length / rows;\n this.data = data;\n }\n\n set(rowIndex, columnIndex, value) {\n var index = this._calculateIndex(rowIndex, columnIndex);\n this.data[index] = value;\n return this;\n }\n\n get(rowIndex, columnIndex) {\n var index = this._calculateIndex(rowIndex, columnIndex);\n return this.data[index];\n }\n\n _calculateIndex(row, column) {\n return row * this.columns + column;\n }\n}\n","import { AbstractMatrix } from '../matrix';\n\nexport default class WrapperMatrix2D extends AbstractMatrix {\n constructor(data) {\n super();\n this.data = data;\n this.rows = data.length;\n this.columns = data[0].length;\n }\n\n set(rowIndex, columnIndex, value) {\n this.data[rowIndex][columnIndex] = value;\n return this;\n }\n\n get(rowIndex, columnIndex) {\n return this.data[rowIndex][columnIndex];\n }\n}\n","import WrapperMatrix1D from './WrapperMatrix1D';\nimport WrapperMatrix2D from './WrapperMatrix2D';\n\nexport function wrap(array, options) {\n if (Array.isArray(array)) {\n if (array[0] && Array.isArray(array[0])) {\n return new WrapperMatrix2D(array);\n } else {\n return new WrapperMatrix1D(array, options);\n }\n } else {\n throw new Error('the argument is not an array');\n }\n}\n","import Matrix from '../matrix';\nimport WrapperMatrix2D from '../wrap/WrapperMatrix2D';\n\nexport default class LuDecomposition {\n constructor(matrix) {\n matrix = WrapperMatrix2D.checkMatrix(matrix);\n\n var lu = matrix.clone();\n var rows = lu.rows;\n var columns = lu.columns;\n var pivotVector = new Float64Array(rows);\n var pivotSign = 1;\n var i, j, k, p, s, t, v;\n var 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 var data = this.LU;\n var col = data.columns;\n for (var 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 var lu = this.LU;\n var 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 var count = value.columns;\n var X = value.subMatrixRow(this.pivotVector, 0, count - 1);\n var columns = lu.columns;\n var 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 var data = this.LU;\n if (!data.isSquare()) {\n throw new Error('Matrix must be square');\n }\n var determinant = this.pivotSign;\n var col = data.columns;\n for (var j = 0; j < col; j++) {\n determinant *= data.get(j, j);\n }\n return determinant;\n }\n\n get lowerTriangularMatrix() {\n var data = this.LU;\n var rows = data.rows;\n var columns = data.columns;\n var X = new Matrix(rows, columns);\n for (var i = 0; i < rows; i++) {\n for (var 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 var data = this.LU;\n var rows = data.rows;\n var columns = data.columns;\n var X = new Matrix(rows, columns);\n for (var i = 0; i < rows; i++) {\n for (var 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 var 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 var qr = value.clone();\n var m = value.rows;\n var n = value.columns;\n var rdiag = new Float64Array(n);\n var i, j, k, s;\n\n for (k = 0; k < n; k++) {\n var 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 var qr = this.QR;\n var 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 var count = value.columns;\n var X = value.clone();\n var n = qr.columns;\n var 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 var columns = this.QR.columns;\n for (var 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 var qr = this.QR;\n var n = qr.columns;\n var X = new Matrix(n, n);\n var 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 var qr = this.QR;\n var rows = qr.rows;\n var columns = qr.columns;\n var X = new Matrix(rows, columns);\n var 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[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 var m = value.rows;\n var n = value.columns;\n\n const {\n computeLeftSingularVectors = true,\n computeRightSingularVectors = true,\n autoTranspose = false\n } = options;\n\n var wantu = Boolean(computeLeftSingularVectors);\n var wantv = Boolean(computeRightSingularVectors);\n\n var swapped = false;\n var 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 var aux = wantu;\n wantu = wantv;\n wantv = aux;\n }\n } else {\n a = value.clone();\n }\n\n var nu = Math.min(m, n);\n var ni = Math.min(m + 1, n);\n var s = new Float64Array(ni);\n var U = new Matrix(m, nu);\n var V = new Matrix(n, n);\n\n var e = new Float64Array(n);\n var work = new Float64Array(m);\n\n var si = new Float64Array(ni);\n for (let i = 0; i < ni; i++) si[i] = i;\n\n var nct = Math.min(m - 1, n);\n var nrt = Math.max(0, Math.min(n - 2, m));\n var 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 var pp = p - 1;\n var iter = 0;\n var 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 var 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 var Y = value;\n var e = this.threshold;\n var scols = this.s.length;\n var 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 var U = this.U;\n var V = this.rightSingularVectors;\n\n var VL = V.mmul(Ls);\n var vrows = V.rows;\n var urows = U.rows;\n var 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 var V = this.V;\n var e = this.threshold;\n var vrows = V.rows;\n var vcols = V.columns;\n var 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 var U = this.U;\n\n var urows = U.rows;\n var ucols = U.columns;\n var 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 var tol = Math.max(this.m, this.n) * this.s[0] * Number.EPSILON;\n var r = 0;\n var s = this.s;\n for (var i = 0, ii = s.length; i < ii; i++) {\n if (s[i] > tol) {\n r++;\n }\n }\n return r;\n }\n\n get diagonal() {\n return Array.from(this.s);\n }\n\n get threshold() {\n return (Number.EPSILON / 2) * Math.max(this.m, this.n) * this.s[0];\n }\n\n get leftSingularVectors() {\n return this.U;\n }\n\n get rightSingularVectors() {\n return this.V;\n }\n\n get diagonalMatrix() {\n return Matrix.diag(this.s);\n }\n}\n","import LuDecomposition from './dc/lu';\nimport QrDecomposition from './dc/qr';\nimport SingularValueDecomposition from './dc/svd';\nimport Matrix from './matrix';\nimport WrapperMatrix2D from './wrap/WrapperMatrix2D';\n\nexport function inverse(matrix, useSVD = false) {\n matrix = WrapperMatrix2D.checkMatrix(matrix);\n if (useSVD) {\n return new SingularValueDecomposition(matrix).inverse();\n } else {\n return solve(matrix, Matrix.eye(matrix.rows));\n }\n}\n\nexport function solve(leftHandSide, rightHandSide, useSVD = false) {\n leftHandSide = WrapperMatrix2D.checkMatrix(leftHandSide);\n rightHandSide = WrapperMatrix2D.checkMatrix(rightHandSide);\n if (useSVD) {\n return new SingularValueDecomposition(leftHandSide).solve(rightHandSide);\n } else {\n return leftHandSide.isSquare()\n ? new LuDecomposition(leftHandSide).solve(rightHandSide)\n : new QrDecomposition(leftHandSide).solve(rightHandSide);\n }\n}\n","import Matrix from './matrix';\nimport LuDecomposition from './dc/lu';\nimport MatrixSelectionView from './views/selection';\n\nexport function determinant(matrix) {\n matrix = Matrix.checkMatrix(matrix);\n if (matrix.isSquare()) {\n var a, b, c, d;\n if (matrix.columns === 2) {\n // 2 x 2 matrix\n a = matrix.get(0, 0);\n b = matrix.get(0, 1);\n c = matrix.get(1, 0);\n d = matrix.get(1, 1);\n\n return a * d - b * c;\n } else if (matrix.columns === 3) {\n // 3 x 3 matrix\n var subMatrix0, subMatrix1, subMatrix2;\n subMatrix0 = new MatrixSelectionView(matrix, [1, 2], [1, 2]);\n subMatrix1 = new MatrixSelectionView(matrix, [1, 2], [0, 2]);\n subMatrix2 = new MatrixSelectionView(matrix, [1, 2], [0, 1]);\n a = matrix.get(0, 0);\n b = matrix.get(0, 1);\n c = matrix.get(0, 2);\n\n return (\n a * determinant(subMatrix0) -\n b * determinant(subMatrix1) +\n c * determinant(subMatrix2)\n );\n } else {\n // general purpose determinant using the LU decomposition\n return new LuDecomposition(matrix).determinant;\n }\n } else {\n throw Error('determinant can only be calculated for a square matrix');\n }\n}\n","import Matrix from './matrix';\nimport SingularValueDecomposition from './dc/svd';\n\nfunction xrange(n, exception) {\n var range = [];\n for (var i = 0; i < n; i++) {\n if (i !== exception) {\n range.push(i);\n }\n }\n return range;\n}\n\nfunction dependenciesOneRow(\n error,\n matrix,\n index,\n thresholdValue = 10e-10,\n thresholdError = 10e-10\n) {\n if (error > thresholdError) {\n return new Array(matrix.rows + 1).fill(0);\n } else {\n var returnArray = matrix.addRow(index, [0]);\n for (var i = 0; i < returnArray.rows; i++) {\n if (Math.abs(returnArray.get(i, 0)) < thresholdValue) {\n returnArray.set(i, 0, 0);\n }\n }\n return returnArray.to1DArray();\n }\n}\n\nexport function linearDependencies(matrix, options = {}) {\n const { thresholdValue = 10e-10, thresholdError = 10e-10 } = options;\n matrix = Matrix.checkMatrix(matrix);\n\n var n = matrix.rows;\n var results = new Matrix(n, n);\n\n for (var i = 0; i < n; i++) {\n var b = Matrix.columnVector(matrix.getRow(i));\n var Abis = matrix.subMatrixRow(xrange(n, i)).transpose();\n var svd = new SingularValueDecomposition(Abis);\n var x = svd.solve(b);\n var error = Matrix.sub(b, Abis.mmul(x))\n .abs()\n .max();\n results.setRow(\n i,\n dependenciesOneRow(error, x, i, thresholdValue, thresholdError)\n );\n }\n return results;\n}\n","import SVD from './dc/svd';\nimport Matrix from './matrix';\n\nexport function pseudoInverse(matrix, threshold = Number.EPSILON) {\n matrix = Matrix.checkMatrix(matrix);\n var svdSolution = new SVD(matrix, { autoTranspose: true });\n\n var U = svdSolution.leftSingularVectors;\n var V = svdSolution.rightSingularVectors;\n var s = svdSolution.diagonal;\n\n for (var i = 0; i < s.length; i++) {\n if (Math.abs(s[i]) > threshold) {\n s[i] = 1.0 / s[i];\n } else {\n s[i] = 0.0;\n }\n }\n\n return V.mmul(Matrix.diag(s).mmul(U.transpose()));\n}\n","import Matrix from './matrix';\n\nexport function covariance(xMatrix, yMatrix = xMatrix, options = {}) {\n xMatrix = Matrix.checkMatrix(xMatrix);\n let yIsSame = false;\n if (typeof yMatrix === 'object' && !Matrix.isMatrix(yMatrix) && !Array.isArray(yMatrix)) {\n options = yMatrix;\n yMatrix = xMatrix;\n yIsSame = true;\n } else {\n yMatrix = Matrix.checkMatrix(yMatrix);\n }\n if (xMatrix.rows !== yMatrix.rows) {\n throw new TypeError('Both matrices must have the same number of rows');\n }\n const { center = true } = options;\n if (center) {\n xMatrix = xMatrix.center('column');\n if (!yIsSame) {\n yMatrix = yMatrix.center('column');\n }\n }\n const covariance = xMatrix.transpose().mmul(yMatrix);\n for (let i = 0; i < covariance.rows; i++) {\n for (let j = 0; j < covariance.columns; j++) {\n covariance.set(i, j, covariance.get(i, j) * (1 / (xMatrix.rows - 1)));\n }\n }\n return covariance;\n}\n","import Matrix from './matrix';\n\nexport function correlation(xMatrix, yMatrix = xMatrix, options = {}) {\n xMatrix = Matrix.checkMatrix(xMatrix);\n let yIsSame = false;\n if (typeof yMatrix === 'object' && !Matrix.isMatrix(yMatrix) && !Array.isArray(yMatrix)) {\n options = yMatrix;\n yMatrix = xMatrix;\n yIsSame = true;\n } else {\n yMatrix = Matrix.checkMatrix(yMatrix);\n }\n if (xMatrix.rows !== yMatrix.rows) {\n throw new TypeError('Both matrices must have the same number of rows');\n }\n\n const { center = true, scale = true } = options;\n if (center) {\n xMatrix.center('column');\n if (!yIsSame) {\n yMatrix.center('column');\n }\n }\n if (scale) {\n xMatrix.scale('column');\n if (!yIsSame) {\n yMatrix.scale('column');\n }\n }\n\n const sdx = xMatrix.standardDeviation('column', { unbiased: true });\n const sdy = yIsSame ? sdx : yMatrix.standardDeviation('column', { unbiased: true });\n\n const correlation = xMatrix.transpose().mmul(yMatrix);\n for (let i = 0; i < correlation.rows; i++) {\n for (let j = 0; j < correlation.columns; j++) {\n correlation.set(i, j, correlation.get(i, j) * (1 / (sdx[i] * sdy[j])) * (1 / (xMatrix.rows - 1)));\n }\n }\n return correlation;\n}\n","import Matrix from '../matrix';\nimport WrapperMatrix2D from '../wrap/WrapperMatrix2D';\n\nimport { hypotenuse } from './util';\n\nexport default class EigenvalueDecomposition {\n constructor(matrix, options = {}) {\n const { assumeSymmetric = false } = options;\n\n matrix = WrapperMatrix2D.checkMatrix(matrix);\n if (!matrix.isSquare()) {\n throw new Error('Matrix is not a square matrix');\n }\n\n var n = matrix.columns;\n var V = new Matrix(n, n);\n var d = new Float64Array(n);\n var e = new Float64Array(n);\n var value = matrix;\n var i, j;\n\n var isSymmetric = false;\n if (assumeSymmetric) {\n isSymmetric = true;\n } else {\n isSymmetric = matrix.isSymmetric();\n }\n\n if (isSymmetric) {\n for (i = 0; i < n; i++) {\n for (j = 0; j < n; j++) {\n V.set(i, j, value.get(i, j));\n }\n }\n tred2(n, e, d, V);\n tql2(n, e, d, V);\n } else {\n var H = new Matrix(n, n);\n var ort = new Float64Array(n);\n for (j = 0; j < n; j++) {\n for (i = 0; i < n; i++) {\n H.set(i, j, value.get(i, j));\n }\n }\n orthes(n, H, ort, V);\n hqr2(n, e, d, V, H);\n }\n\n this.n = n;\n this.e = e;\n this.d = d;\n this.V = V;\n }\n\n get realEigenvalues() {\n return Array.from(this.d);\n }\n\n get imaginaryEigenvalues() {\n return Array.from(this.e);\n }\n\n get eigenvectorMatrix() {\n return this.V;\n }\n\n get diagonalMatrix() {\n var n = this.n;\n var e = this.e;\n var d = this.d;\n var X = new Matrix(n, n);\n var i, j;\n for (i = 0; i < n; i++) {\n for (j = 0; j < n; j++) {\n X.set(i, j, 0);\n }\n X.set(i, i, d[i]);\n if (e[i] > 0) {\n X.set(i, i + 1, e[i]);\n } else if (e[i] < 0) {\n X.set(i, i - 1, e[i]);\n }\n }\n return X;\n }\n}\n\nfunction tred2(n, e, d, V) {\n var f, g, h, i, j, k, hh, scale;\n\n for (j = 0; j < n; j++) {\n d[j] = V.get(n - 1, j);\n }\n\n for (i = n - 1; i > 0; i--) {\n scale = 0;\n h = 0;\n for (k = 0; k < i; k++) {\n scale = scale + Math.abs(d[k]);\n }\n\n if (scale === 0) {\n e[i] = d[i - 1];\n for (j = 0; j < i; j++) {\n d[j] = V.get(i - 1, j);\n V.set(i, j, 0);\n V.set(j, i, 0);\n }\n } else {\n for (k = 0; k < i; k++) {\n d[k] /= scale;\n h += d[k] * d[k];\n }\n\n f = d[i - 1];\n g = Math.sqrt(h);\n if (f > 0) {\n g = -g;\n }\n\n e[i] = scale * g;\n h = h - f * g;\n d[i - 1] = f - g;\n for (j = 0; j < i; j++) {\n e[j] = 0;\n }\n\n for (j = 0; j < i; j++) {\n f = d[j];\n V.set(j, i, f);\n g = e[j] + V.get(j, j) * f;\n for (k = j + 1; k <= i - 1; k++) {\n g += V.get(k, j) * d[k];\n e[k] += V.get(k, j) * f;\n }\n e[j] = g;\n }\n\n f = 0;\n for (j = 0; j < i; j++) {\n e[j] /= h;\n f += e[j] * d[j];\n }\n\n hh = f / (h + h);\n for (j = 0; j < i; j++) {\n e[j] -= hh * d[j];\n }\n\n for (j = 0; j < i; j++) {\n f = d[j];\n g = e[j];\n for (k = j; k <= i - 1; k++) {\n V.set(k, j, V.get(k, j) - (f * e[k] + g * d[k]));\n }\n d[j] = V.get(i - 1, j);\n V.set(i, j, 0);\n }\n }\n d[i] = h;\n }\n\n for (i = 0; i < n - 1; i++) {\n V.set(n - 1, i, V.get(i, i));\n V.set(i, i, 1);\n h = d[i + 1];\n if (h !== 0) {\n for (k = 0; k <= i; k++) {\n d[k] = V.get(k, i + 1) / h;\n }\n\n for (j = 0; j <= i; j++) {\n g = 0;\n for (k = 0; k <= i; k++) {\n g += V.get(k, i + 1) * V.get(k, j);\n }\n for (k = 0; k <= i; k++) {\n V.set(k, j, V.get(k, j) - g * d[k]);\n }\n }\n }\n\n for (k = 0; k <= i; k++) {\n V.set(k, i + 1, 0);\n }\n }\n\n for (j = 0; j < n; j++) {\n d[j] = V.get(n - 1, j);\n V.set(n - 1, j, 0);\n }\n\n V.set(n - 1, n - 1, 1);\n e[0] = 0;\n}\n\nfunction tql2(n, e, d, V) {\n var g, h, i, j, k, l, m, p, r, dl1, c, c2, c3, el1, s, s2, iter;\n\n for (i = 1; i < n; i++) {\n e[i - 1] = e[i];\n }\n\n e[n - 1] = 0;\n\n var f = 0;\n var tst1 = 0;\n var eps = Number.EPSILON;\n\n for (l = 0; l < n; l++) {\n tst1 = Math.max(tst1, Math.abs(d[l]) + Math.abs(e[l]));\n m = l;\n while (m < n) {\n if (Math.abs(e[m]) <= eps * tst1) {\n break;\n }\n m++;\n }\n\n if (m > l) {\n iter = 0;\n do {\n iter = iter + 1;\n\n g = d[l];\n p = (d[l + 1] - g) / (2 * e[l]);\n r = hypotenuse(p, 1);\n if (p < 0) {\n r = -r;\n }\n\n d[l] = e[l] / (p + r);\n d[l + 1] = e[l] * (p + r);\n dl1 = d[l + 1];\n h = g - d[l];\n for (i = l + 2; i < n; i++) {\n d[i] -= h;\n }\n\n f = f + h;\n\n p = d[m];\n c = 1;\n c2 = c;\n c3 = c;\n el1 = e[l + 1];\n s = 0;\n s2 = 0;\n for (i = m - 1; i >= l; i--) {\n c3 = c2;\n c2 = c;\n s2 = s;\n g = c * e[i];\n h = c * p;\n r = hypotenuse(p, e[i]);\n e[i + 1] = s * r;\n s = e[i] / r;\n c = p / r;\n p = c * d[i] - s * g;\n d[i + 1] = h + s * (c * g + s * d[i]);\n\n for (k = 0; k < n; k++) {\n h = V.get(k, i + 1);\n V.set(k, i + 1, s * V.get(k, i) + c * h);\n V.set(k, i, c * V.get(k, i) - s * h);\n }\n }\n\n p = (-s * s2 * c3 * el1 * e[l]) / dl1;\n e[l] = s * p;\n d[l] = c * p;\n } while (Math.abs(e[l]) > eps * tst1);\n }\n d[l] = d[l] + f;\n e[l] = 0;\n }\n\n for (i = 0; i < n - 1; i++) {\n k = i;\n p = d[i];\n for (j = i + 1; j < n; j++) {\n if (d[j] < p) {\n k = j;\n p = d[j];\n }\n }\n\n if (k !== i) {\n d[k] = d[i];\n d[i] = p;\n for (j = 0; j < n; j++) {\n p = V.get(j, i);\n V.set(j, i, V.get(j, k));\n V.set(j, k, p);\n }\n }\n }\n}\n\nfunction orthes(n, H, ort, V) {\n var low = 0;\n var high = n - 1;\n var f, g, h, i, j, m;\n var scale;\n\n for (m = low + 1; m <= high - 1; m++) {\n scale = 0;\n for (i = m; i <= high; i++) {\n scale = scale + Math.abs(H.get(i, m - 1));\n }\n\n if (scale !== 0) {\n h = 0;\n for (i = high; i >= m; i--) {\n ort[i] = H.get(i, m - 1) / scale;\n h += ort[i] * ort[i];\n }\n\n g = Math.sqrt(h);\n if (ort[m] > 0) {\n g = -g;\n }\n\n h = h - ort[m] * g;\n ort[m] = ort[m] - g;\n\n for (j = m; j < n; j++) {\n f = 0;\n for (i = high; i >= m; i--) {\n f += ort[i] * H.get(i, j);\n }\n\n f = f / h;\n for (i = m; i <= high; i++) {\n H.set(i, j, H.get(i, j) - f * ort[i]);\n }\n }\n\n for (i = 0; i <= high; i++) {\n f = 0;\n for (j = high; j >= m; j--) {\n f += ort[j] * H.get(i, j);\n }\n\n f = f / h;\n for (j = m; j <= high; j++) {\n H.set(i, j, H.get(i, j) - f * ort[j]);\n }\n }\n\n ort[m] = scale * ort[m];\n H.set(m, m - 1, scale * g);\n }\n }\n\n for (i = 0; i < n; i++) {\n for (j = 0; j < n; j++) {\n V.set(i, j, i === j ? 1 : 0);\n }\n }\n\n for (m = high - 1; m >= low + 1; m--) {\n if (H.get(m, m - 1) !== 0) {\n for (i = m + 1; i <= high; i++) {\n ort[i] = H.get(i, m - 1);\n }\n\n for (j = m; j <= high; j++) {\n g = 0;\n for (i = m; i <= high; i++) {\n g += ort[i] * V.get(i, j);\n }\n\n g = g / ort[m] / H.get(m, m - 1);\n for (i = m; i <= high; i++) {\n V.set(i, j, V.get(i, j) + g * ort[i]);\n }\n }\n }\n }\n}\n\nfunction hqr2(nn, e, d, V, H) {\n var n = nn - 1;\n var low = 0;\n var high = nn - 1;\n var eps = Number.EPSILON;\n var exshift = 0;\n var norm = 0;\n var p = 0;\n var q = 0;\n var r = 0;\n var s = 0;\n var z = 0;\n var iter = 0;\n var i, j, k, l, m, t, w, x, y;\n var ra, sa, vr, vi;\n var notlast, cdivres;\n\n for (i = 0; i < nn; i++) {\n if (i < low || i > high) {\n d[i] = H.get(i, i);\n e[i] = 0;\n }\n\n for (j = Math.max(i - 1, 0); j < nn; j++) {\n norm = norm + Math.abs(H.get(i, j));\n }\n }\n\n while (n >= low) {\n l = n;\n while (l > low) {\n s = Math.abs(H.get(l - 1, l - 1)) + Math.abs(H.get(l, l));\n if (s === 0) {\n s = norm;\n }\n if (Math.abs(H.get(l, l - 1)) < eps * s) {\n break;\n }\n l--;\n }\n\n if (l === n) {\n H.set(n, n, H.get(n, n) + exshift);\n d[n] = H.get(n, n);\n e[n] = 0;\n n--;\n iter = 0;\n } else if (l === n - 1) {\n w = H.get(n, n - 1) * H.get(n - 1, n);\n p = (H.get(n - 1, n - 1) - H.get(n, n)) / 2;\n q = p * p + w;\n z = Math.sqrt(Math.abs(q));\n H.set(n, n, H.get(n, n) + exshift);\n H.set(n - 1, n - 1, H.get(n - 1, n - 1) + exshift);\n x = H.get(n, n);\n\n if (q >= 0) {\n z = p >= 0 ? p + z : p - z;\n d[n - 1] = x + z;\n d[n] = d[n - 1];\n if (z !== 0) {\n d[n] = x - w / z;\n }\n e[n - 1] = 0;\n e[n] = 0;\n x = H.get(n, n - 1);\n s = Math.abs(x) + Math.abs(z);\n p = x / s;\n q = z / s;\n r = Math.sqrt(p * p + q * q);\n p = p / r;\n q = q / r;\n\n for (j = n - 1; j < nn; j++) {\n z = H.get(n - 1, j);\n H.set(n - 1, j, q * z + p * H.get(n, j));\n H.set(n, j, q * H.get(n, j) - p * z);\n }\n\n for (i = 0; i <= n; i++) {\n z = H.get(i, n - 1);\n H.set(i, n - 1, q * z + p * H.get(i, n));\n H.set(i, n, q * H.get(i, n) - p * z);\n }\n\n for (i = low; i <= high; i++) {\n z = V.get(i, n - 1);\n V.set(i, n - 1, q * z + p * V.get(i, n));\n V.set(i, n, q * V.get(i, n) - p * z);\n }\n } else {\n d[n - 1] = x + p;\n d[n] = x + p;\n e[n - 1] = z;\n e[n] = -z;\n }\n\n n = n - 2;\n iter = 0;\n } else {\n x = H.get(n, n);\n y = 0;\n w = 0;\n if (l < n) {\n y = H.get(n - 1, n - 1);\n w = H.get(n, n - 1) * H.get(n - 1, n);\n }\n\n if (iter === 10) {\n exshift += x;\n for (i = low; i <= n; i++) {\n H.set(i, i, H.get(i, i) - x);\n }\n s = Math.abs(H.get(n, n - 1)) + Math.abs(H.get(n - 1, n - 2));\n x = y = 0.75 * s;\n w = -0.4375 * s * s;\n }\n\n if (iter === 30) {\n s = (y - x) / 2;\n s = s * s + w;\n if (s > 0) {\n s = Math.sqrt(s);\n if (y < x) {\n s = -s;\n }\n s = x - w / ((y - x) / 2 + s);\n for (i = low; i <= n; i++) {\n H.set(i, i, H.get(i, i) - s);\n }\n exshift += s;\n x = y = w = 0.964;\n }\n }\n\n iter = iter + 1;\n\n m = n - 2;\n while (m >= l) {\n z = H.get(m, m);\n r = x - z;\n s = y - z;\n p = (r * s - w) / H.get(m + 1, m) + H.get(m, m + 1);\n q = H.get(m + 1, m + 1) - z - r - s;\n r = H.get(m + 2, m + 1);\n s = Math.abs(p) + Math.abs(q) + Math.abs(r);\n p = p / s;\n q = q / s;\n r = r / s;\n if (m === l) {\n break;\n }\n if (\n Math.abs(H.get(m, m - 1)) * (Math.abs(q) + Math.abs(r)) <\n eps *\n (Math.abs(p) *\n (Math.abs(H.get(m - 1, m - 1)) +\n Math.abs(z) +\n Math.abs(H.get(m + 1, m + 1))))\n ) {\n break;\n }\n m--;\n }\n\n for (i = m + 2; i <= n; i++) {\n H.set(i, i - 2, 0);\n if (i > m + 2) {\n H.set(i, i - 3, 0);\n }\n }\n\n for (k = m; k <= n - 1; k++) {\n notlast = k !== n - 1;\n if (k !== m) {\n p = H.get(k, k - 1);\n q = H.get(k + 1, k - 1);\n r = notlast ? H.get(k + 2, k - 1) : 0;\n x = Math.abs(p) + Math.abs(q) + Math.abs(r);\n if (x !== 0) {\n p = p / x;\n q = q / x;\n r = r / x;\n }\n }\n\n if (x === 0) {\n break;\n }\n\n s = Math.sqrt(p * p + q * q + r * r);\n if (p < 0) {\n s = -s;\n }\n\n if (s !== 0) {\n if (k !== m) {\n H.set(k, k - 1, -s * x);\n } else if (l !== m) {\n H.set(k, k - 1, -H.get(k, k - 1));\n }\n\n p = p + s;\n x = p / s;\n y = q / s;\n z = r / s;\n q = q / p;\n r = r / p;\n\n for (j = k; j < nn; j++) {\n p = H.get(k, j) + q * H.get(k + 1, j);\n if (notlast) {\n p = p + r * H.get(k + 2, j);\n H.set(k + 2, j, H.get(k + 2, j) - p * z);\n }\n\n H.set(k, j, H.get(k, j) - p * x);\n H.set(k + 1, j, H.get(k + 1, j) - p * y);\n }\n\n for (i = 0; i <= Math.min(n, k + 3); i++) {\n p = x * H.get(i, k) + y * H.get(i, k + 1);\n if (notlast) {\n p = p + z * H.get(i, k + 2);\n H.set(i, k + 2, H.get(i, k + 2) - p * r);\n }\n\n H.set(i, k, H.get(i, k) - p);\n H.set(i, k + 1, H.get(i, k + 1) - p * q);\n }\n\n for (i = low; i <= high; i++) {\n p = x * V.get(i, k) + y * V.get(i, k + 1);\n if (notlast) {\n p = p + z * V.get(i, k + 2);\n V.set(i, k + 2, V.get(i, k + 2) - p * r);\n }\n\n V.set(i, k, V.get(i, k) - p);\n V.set(i, k + 1, V.get(i, k + 1) - p * q);\n }\n }\n }\n }\n }\n\n if (norm === 0) {\n return;\n }\n\n for (n = nn - 1; n >= 0; n--) {\n p = d[n];\n q = e[n];\n\n if (q === 0) {\n l = n;\n H.set(n, n, 1);\n for (i = n - 1; i >= 0; i--) {\n w = H.get(i, i) - p;\n r = 0;\n for (j = l; j <= n; j++) {\n r = r + H.get(i, j) * H.get(j, n);\n }\n\n if (e[i] < 0) {\n z = w;\n s = r;\n } else {\n l = i;\n if (e[i] === 0) {\n H.set(i, n, w !== 0 ? -r / w : -r / (eps * norm));\n } else {\n x = H.get(i, i + 1);\n y = H.get(i + 1, i);\n q = (d[i] - p) * (d[i] - p) + e[i] * e[i];\n t = (x * s - z * r) / q;\n H.set(i, n, t);\n H.set(\n i + 1,\n n,\n Math.abs(x) > Math.abs(z) ? (-r - w * t) / x : (-s - y * t) / z\n );\n }\n\n t = Math.abs(H.get(i, n));\n if (eps * t * t > 1) {\n for (j = i; j <= n; j++) {\n H.set(j, n, H.get(j, n) / t);\n }\n }\n }\n }\n } else if (q < 0) {\n l = n - 1;\n\n if (Math.abs(H.get(n, n - 1)) > Math.abs(H.get(n - 1, n))) {\n H.set(n - 1, n - 1, q / H.get(n, n - 1));\n H.set(n - 1, n, -(H.get(n, n) - p) / H.get(n, n - 1));\n } else {\n cdivres = cdiv(0, -H.get(n - 1, n), H.get(n - 1, n - 1) - p, q);\n H.set(n - 1, n - 1, cdivres[0]);\n H.set(n - 1, n, cdivres[1]);\n }\n\n H.set(n, n - 1, 0);\n H.set(n, n, 1);\n for (i = n - 2; i >= 0; i--) {\n ra = 0;\n sa = 0;\n for (j = l; j <= n; j++) {\n ra = ra + H.get(i, j) * H.get(j, n - 1);\n sa = sa + H.get(i, j) * H.get(j, n);\n }\n\n w = H.get(i, i) - p;\n\n if (e[i] < 0) {\n z = w;\n r = ra;\n s = sa;\n } else {\n l = i;\n if (e[i] === 0) {\n cdivres = cdiv(-ra, -sa, w, q);\n H.set(i, n - 1, cdivres[0]);\n H.set(i, n, cdivres[1]);\n } else {\n x = H.get(i, i + 1);\n y = H.get(i + 1, i);\n vr = (d[i] - p) * (d[i] - p) + e[i] * e[i] - q * q;\n vi = (d[i] - p) * 2 * q;\n if (vr === 0 && vi === 0) {\n vr =\n eps *\n norm *\n (Math.abs(w) +\n Math.abs(q) +\n Math.abs(x) +\n Math.abs(y) +\n Math.abs(z));\n }\n cdivres = cdiv(\n x * r - z * ra + q * sa,\n x * s - z * sa - q * ra,\n vr,\n vi\n );\n H.set(i, n - 1, cdivres[0]);\n H.set(i, n, cdivres[1]);\n if (Math.abs(x) > Math.abs(z) + Math.abs(q)) {\n H.set(\n i + 1,\n n - 1,\n (-ra - w * H.get(i, n - 1) + q * H.get(i, n)) / x\n );\n H.set(\n i + 1,\n n,\n (-sa - w * H.get(i, n) - q * H.get(i, n - 1)) / x\n );\n } else {\n cdivres = cdiv(\n -r - y * H.get(i, n - 1),\n -s - y * H.get(i, n),\n z,\n q\n );\n H.set(i + 1, n - 1, cdivres[0]);\n H.set(i + 1, n, cdivres[1]);\n }\n }\n\n t = Math.max(Math.abs(H.get(i, n - 1)), Math.abs(H.get(i, n)));\n if (eps * t * t > 1) {\n for (j = i; j <= n; j++) {\n H.set(j, n - 1, H.get(j, n - 1) / t);\n H.set(j, n, H.get(j, n) / t);\n }\n }\n }\n }\n }\n }\n\n for (i = 0; i < nn; i++) {\n if (i < low || i > high) {\n for (j = i; j < nn; j++) {\n V.set(i, j, H.get(i, j));\n }\n }\n }\n\n for (j = nn - 1; j >= low; j--) {\n for (i = low; i <= high; i++) {\n z = 0;\n for (k = low; k <= Math.min(j, high); k++) {\n z = z + V.get(i, k) * H.get(k, j);\n }\n V.set(i, j, z);\n }\n }\n}\n\nfunction cdiv(xr, xi, yr, yi) {\n var r, d;\n if (Math.abs(yr) > Math.abs(yi)) {\n r = yi / yr;\n d = yr + r * yi;\n return [(xr + r * xi) / d, (xi - r * xr) / d];\n } else {\n r = yr / yi;\n d = yi + r * yr;\n return [(r * xr + xi) / d, (r * xi - xr) / d];\n }\n}\n","import Matrix from '../matrix';\nimport WrapperMatrix2D from '../wrap/WrapperMatrix2D';\n\nexport default class CholeskyDecomposition {\n constructor(value) {\n value = WrapperMatrix2D.checkMatrix(value);\n if (!value.isSymmetric()) {\n throw new Error('Matrix is not symmetric');\n }\n\n var a = value;\n var dimension = a.rows;\n var l = new Matrix(dimension, dimension);\n var positiveDefinite = true;\n var i, j, k;\n\n for (j = 0; j < dimension; j++) {\n var d = 0;\n for (k = 0; k < j; k++) {\n var s = 0;\n for (i = 0; i < k; i++) {\n s += l.get(k, i) * l.get(j, i);\n }\n s = (a.get(j, k) - s) / l.get(k, k);\n l.set(j, k, s);\n d = d + s * s;\n }\n\n d = a.get(j, j) - d;\n\n positiveDefinite &= d > 0;\n l.set(j, j, Math.sqrt(Math.max(d, 0)));\n for (k = j + 1; k < dimension; k++) {\n l.set(j, k, 0);\n }\n }\n\n if (!positiveDefinite) {\n throw new Error('Matrix is not positive definite');\n }\n\n this.L = l;\n }\n\n solve(value) {\n value = WrapperMatrix2D.checkMatrix(value);\n\n var l = this.L;\n var dimension = l.rows;\n\n if (value.rows !== dimension) {\n throw new Error('Matrix dimensions do not match');\n }\n\n var count = value.columns;\n var B = value.clone();\n var i, j, k;\n\n for (k = 0; k < dimension; k++) {\n for (j = 0; j < count; j++) {\n for (i = 0; i < k; i++) {\n B.set(k, j, B.get(k, j) - B.get(i, j) * l.get(k, i));\n }\n B.set(k, j, B.get(k, j) / l.get(k, k));\n }\n }\n\n for (k = dimension - 1; k >= 0; k--) {\n for (j = 0; j < count; j++) {\n for (i = k + 1; i < dimension; i++) {\n B.set(k, j, B.get(k, j) - B.get(i, j) * l.get(i, k));\n }\n B.set(k, j, B.get(k, j) / l.get(k, k));\n }\n }\n\n return B;\n }\n\n get lowerTriangularMatrix() {\n return this.L;\n }\n}\n","import isArray from 'is-any-array';\n\n/**\n * Computes the mean of the given values\n * @param {Array} input\n * @return {number}\n */\n\nfunction mean(input) {\n if (!isArray(input)) {\n throw new TypeError('input must be an array');\n }\n\n if (input.length === 0) {\n throw new TypeError('input must not be empty');\n }\n\n var sum = 0;\n\n for (var i = 0; i < input.length; i++) {\n sum += input[i];\n }\n\n return sum / input.length;\n}\n\nexport default mean;\n","import Matrix from 'ml-matrix';\nimport meanArray from 'ml-array-mean';\n\n/**\n * @private\n * return an array of probabilities of each class\n * @param {Array} array - contains the classes\n * @param {number} numberOfClasses\n * @return {Matrix} - rowVector of probabilities.\n */\nexport function toDiscreteDistribution(array, numberOfClasses) {\n var counts = new Array(numberOfClasses).fill(0);\n for (var i = 0; i < array.length; ++i) {\n counts[array[i]] += 1 / array.length;\n }\n\n return Matrix.rowVector(counts);\n}\n\n/**\n * @private\n * Retrieves the impurity of array of predictions\n * @param {Array} array - predictions.\n * @return {number} Gini impurity\n */\nexport function giniImpurity(array) {\n if (array.length === 0) {\n return 0;\n }\n\n var probabilities = toDiscreteDistribution(\n array,\n getNumberOfClasses(array)\n ).getRow(0);\n\n var sum = 0.0;\n for (var i = 0; i < probabilities.length; ++i) {\n sum += probabilities[i] * probabilities[i];\n }\n\n return 1 - sum;\n}\n\n/**\n * @private\n * Return the number of classes given the array of predictions.\n * @param {Array} array - predictions.\n * @return {number} Number of classes.\n */\nexport function getNumberOfClasses(array) {\n return array.filter(function (val, i, arr) {\n return arr.indexOf(val) === i;\n }).length;\n}\n\n/**\n * @private\n * Calculates the Gini Gain of an array of predictions and those predictions splitted by a feature.\n * @para {Array} array - Predictions\n * @param {object} splitted - Object with elements \"greater\" and \"lesser\" that contains an array of predictions splitted.\n * @return {number} - Gini Gain.\n */\n\nexport function giniGain(array, splitted) {\n var splitsImpurity = 0.0;\n var splits = ['greater', 'lesser'];\n\n for (var i = 0; i < splits.length; ++i) {\n var currentSplit = splitted[splits[i]];\n splitsImpurity +=\n (giniImpurity(currentSplit) * currentSplit.length) / array.length;\n }\n\n return giniImpurity(array) - splitsImpurity;\n}\n\n/**\n * @private\n * Calculates the squared error of a predictions values.\n * @param {Array} array - predictions values\n * @return {number} squared error.\n */\nexport function squaredError(array) {\n var l = array.length;\n\n var m = meanArray(array);\n var squaredError = 0.0;\n\n for (var i = 0; i < l; ++i) {\n var currentElement = array[i];\n squaredError += (currentElement - m) * (currentElement - m);\n }\n\n return squaredError;\n}\n\n/**\n * @private\n * Calculates the sum of squared error of the two arrays that contains the splitted values.\n * @param {Array} array - this argument is no necessary but is used to fit with the main interface.\n * @param {object} splitted - Object with elements \"greater\" and \"lesser\" that contains an array of predictions splitted.\n * @return {number} - sum of squared errors.\n */\nexport function regressionError(array, splitted) {\n var error = 0.0;\n var splits = ['greater', 'lesser'];\n\n for (var i = 0; i < splits.length; ++i) {\n var currentSplit = splitted[splits[i]];\n error += squaredError(currentSplit);\n }\n return error;\n}\n\n/**\n * @private\n * Split the training set and values from a given column of the training set if is less than a value\n * @param {Matrix} X - Training set.\n * @param {Array} y - Training values.\n * @param {number} column - Column to split.\n * @param {number} value - value to split the Training set and values.\n * @return {object} - Object that contains the splitted values.\n */\nexport function matrixSplitter(X, y, column, value) {\n var lesserX = [];\n var greaterX = [];\n var lesserY = [];\n var greaterY = [];\n\n for (var i = 0; i < X.rows; ++i) {\n if (X.get(i, column) < value) {\n lesserX.push(X.getRow(i));\n lesserY.push(y[i]);\n } else {\n greaterX.push(X.getRow(i));\n greaterY.push(y[i]);\n }\n }\n\n return {\n greaterX: greaterX,\n greaterY: greaterY,\n lesserX: lesserX,\n lesserY: lesserY\n };\n}\n\n/**\n * @private\n * Calculates the mean between two values\n * @param {number} a\n * @param {number} b\n * @return {number}\n */\nexport function mean(a, b) {\n return (a + b) / 2;\n}\n\n/**\n * @private\n * Returns a list of tuples that contains the i-th element of each array.\n * @param {Array} a\n * @param {Array} b\n * @return {Array} list of tuples.\n */\nexport function zip(a, b) {\n if (a.length !== b.length) {\n throw new TypeError(\n `Error on zip: the size of a: ${a.length} is different from b: ${\n b.length\n }`\n );\n }\n\n var ret = new Array(a.length);\n for (var i = 0; i < a.length; ++i) {\n ret[i] = [a[i], b[i]];\n }\n\n return ret;\n}\n","import Matrix from 'ml-matrix';\nimport mean from 'ml-array-mean';\n\nimport * as Utils from './utils';\n\nconst gainFunctions = {\n gini: Utils.giniGain,\n regression: Utils.regressionError\n};\n\nconst splitFunctions = {\n mean: Utils.mean\n};\n\nexport default class TreeNode {\n /**\n * @private\n * Constructor for a tree node given the options received on the main classes (DecisionTreeClassifier, DecisionTreeRegression)\n * @param {object|TreeNode} options for loading\n * @constructor\n */\n constructor(options) {\n // options parameters\n this.kind = options.kind;\n this.gainFunction = options.gainFunction;\n this.splitFunction = options.splitFunction;\n this.minNumSamples = options.minNumSamples;\n this.maxDepth = options.maxDepth;\n }\n\n /**\n * @private\n * Function that retrieve the best feature to make the split.\n * @param {Matrix} XTranspose - Training set transposed\n * @param {Array} y - labels or values (depending of the decision tree)\n * @return {object} - return tree values, the best gain, column and the split value.\n */\n bestSplit(XTranspose, y) {\n // Depending in the node tree class, we set the variables to check information gain (to classify)\n // or error (for regression)\n\n var bestGain = this.kind === 'classifier' ? -Infinity : Infinity;\n var check = this.kind === 'classifier' ? (a, b) => a > b : (a, b) => a < b;\n\n var maxColumn;\n var maxValue;\n\n for (var i = 0; i < XTranspose.rows; ++i) {\n var currentFeature = XTranspose.getRow(i);\n var splitValues = this.featureSplit(currentFeature, y);\n for (var j = 0; j < splitValues.length; ++j) {\n var currentSplitVal = splitValues[j];\n var splitted = this.split(currentFeature, y, currentSplitVal);\n\n var gain = gainFunctions[this.gainFunction](y, splitted);\n if (check(gain, bestGain)) {\n maxColumn = i;\n maxValue = currentSplitVal;\n bestGain = gain;\n }\n }\n }\n\n return {\n maxGain: bestGain,\n maxColumn: maxColumn,\n maxValue: maxValue\n };\n }\n\n /**\n * @private\n * Makes the split of the training labels or values from the training set feature given a split value.\n * @param {Array} x - Training set feature\n * @param {Array} y - Training set value or label\n * @param {number} splitValue\n * @return {object}\n */\n split(x, y, splitValue) {\n var lesser = [];\n var greater = [];\n\n for (var i = 0; i < x.length; ++i) {\n if (x[i] < splitValue) {\n lesser.push(y[i]);\n } else {\n greater.push(y[i]);\n }\n }\n\n return {\n greater: greater,\n lesser: lesser\n };\n }\n\n /**\n * @private\n * Calculates the possible points to split over the tree given a training set feature and corresponding labels or values.\n * @param {Array} x - Training set feature\n * @param {Array} y - Training set value or label\n * @return {Array} possible split values.\n */\n featureSplit(x, y) {\n var splitValues = [];\n var arr = Utils.zip(x, y);\n arr.sort(function (a, b) {\n return a[0] - b[0];\n });\n\n for (var i = 1; i < arr.length; ++i) {\n if (arr[i - 1][1] !== arr[i][1]) {\n splitValues.push(\n splitFunctions[this.splitFunction](arr[i - 1][0], arr[i][0])\n );\n }\n }\n\n return splitValues;\n }\n\n /**\n * @private\n * Calculate the predictions of a leaf tree node given the training labels or values\n * @param {Array} y\n */\n calculatePrediction(y) {\n if (this.kind === 'classifier') {\n this.distribution = Utils.toDiscreteDistribution(\n y,\n Utils.getNumberOfClasses(y)\n );\n if (this.distribution.columns === 0) {\n throw new TypeError('Error on calculate the prediction');\n }\n } else {\n this.distribution = mean(y);\n }\n }\n\n /**\n * @private\n * Train a node given the training set and labels, because it trains recursively, it also receive\n * the current depth of the node, parent gain to avoid infinite recursion and boolean value to check if\n * the training set is transposed.\n * @param {Matrix} X - Training set (could be transposed or not given transposed).\n * @param {Array} y - Training labels or values.\n * @param {number} currentDepth - Current depth of the node.\n * @param {number} parentGain - parent node gain or error.\n */\n train(X, y, currentDepth, parentGain) {\n if (X.rows <= this.minNumSamples) {\n this.calculatePrediction(y);\n return;\n }\n if (parentGain === undefined) parentGain = 0.0;\n\n var XTranspose = X.transpose();\n var split = this.bestSplit(XTranspose, y);\n\n this.splitValue = split.maxValue;\n this.splitColumn = split.maxColumn;\n this.gain = split.maxGain;\n\n var splittedMatrix = Utils.matrixSplitter(\n X,\n y,\n this.splitColumn,\n this.splitValue\n );\n\n if (\n currentDepth < this.maxDepth &&\n (this.gain > 0.01 && this.gain !== parentGain) &&\n (splittedMatrix.lesserX.length > 0 && splittedMatrix.greaterX.length > 0)\n ) {\n this.left = new TreeNode(this);\n this.right = new TreeNode(this);\n\n var lesserX = new Matrix(splittedMatrix.lesserX);\n var greaterX = new Matrix(splittedMatrix.greaterX);\n\n this.left.train(\n lesserX,\n splittedMatrix.lesserY,\n currentDepth + 1,\n this.gain\n );\n this.right.train(\n greaterX,\n splittedMatrix.greaterY,\n currentDepth + 1,\n this.gain\n );\n } else {\n this.calculatePrediction(y);\n }\n }\n\n /**\n * @private\n * Calculates the prediction of a given element.\n * @param {Array} row\n * @return {number|Array} prediction\n * * if a node is a classifier returns an array of probabilities of each class.\n * * if a node is for regression returns a number with the prediction.\n */\n classify(row) {\n if (this.right && this.left) {\n if (row[this.splitColumn] < this.splitValue) {\n return this.left.classify(row);\n } else {\n return this.right.classify(row);\n }\n }\n\n return this.distribution;\n }\n\n /**\n * @private\n * Set the parameter of the current node and their children.\n * @param {object} node - parameters of the current node and the children.\n */\n setNodeParameters(node) {\n if (node.distribution !== undefined) {\n this.distribution =\n node.distribution.constructor === Array\n ? new Matrix(node.distribution)\n : node.distribution;\n } else {\n this.distribution = undefined;\n this.splitValue = node.splitValue;\n this.splitColumn = node.splitColumn;\n this.gain = node.gain;\n\n this.left = new TreeNode(this);\n this.right = new TreeNode(this);\n\n if (node.left !== {}) {\n this.left.setNodeParameters(node.left);\n }\n if (node.right !== {}) {\n this.right.setNodeParameters(node.right);\n }\n }\n }\n}\n","import Matrix from 'ml-matrix';\n\nimport Tree from './TreeNode';\n\nconst defaultOptions = {\n gainFunction: 'gini',\n splitFunction: 'mean',\n minNumSamples: 3,\n maxDepth: Infinity\n};\n\nexport class DecisionTreeClassifier {\n /**\n * Create new Decision Tree Classifier with CART implementation with the given options\n * @param {object} options\n * @param {string} [options.gainFunction=\"gini\"] - gain function to get the best split, \"gini\" the only one supported.\n * @param {string} [options.splitFunction=\"mean\"] - given two integers from a split feature, get the value to split, \"mean\" the only one supported.\n * @param {number} [options.minNumSamples=3] - minimum number of samples to create a leaf node to decide a class.\n * @param {number} [options.maxDepth=Infinity] - Max depth of the tree.\n * @param {object} model - for load purposes.\n * @constructor\n */\n constructor(options, model) {\n if (options === true) {\n this.options = model.options;\n this.root = new Tree(model.options);\n this.root.setNodeParameters(model.root);\n } else {\n this.options = Object.assign({}, defaultOptions, options);\n this.options.kind = 'classifier';\n }\n }\n\n /**\n * Train the decision tree with the given training set and labels.\n * @param {Matrix|MatrixTransposeView|Array} trainingSet\n * @param {Array} trainingLabels\n */\n train(trainingSet, trainingLabels) {\n this.root = new Tree(this.options);\n trainingSet = Matrix.checkMatrix(trainingSet);\n this.root.train(trainingSet, trainingLabels, 0, null);\n }\n\n /**\n * Predicts the output given the matrix to predict.\n * @param {Matrix|MatrixTransposeView|Array} toPredict\n * @return {Array} predictions\n */\n predict(toPredict) {\n toPredict = Matrix.checkMatrix(toPredict);\n var predictions = new Array(toPredict.rows);\n\n for (var i = 0; i < toPredict.rows; ++i) {\n predictions[i] = this.root\n .classify(toPredict.getRow(i))\n .maxRowIndex(0)[1];\n }\n\n return predictions;\n }\n\n /**\n * Export the current model to JSON.\n * @return {object} - Current model.\n */\n toJSON() {\n return {\n options: this.options,\n root: this.root,\n name: 'DTClassifier'\n };\n }\n\n /**\n * Load a Decision tree classifier with the given model.\n * @param {object} model\n * @return {DecisionTreeClassifier}\n */\n static load(model) {\n if (model.name !== 'DTClassifier') {\n throw new RangeError(`Invalid model: ${model.name}`);\n }\n\n return new DecisionTreeClassifier(true, model);\n }\n}\n","import Matrix from 'ml-matrix';\n\nimport Tree from './TreeNode';\n\nconst defaultOptions = {\n gainFunction: 'regression',\n splitFunction: 'mean',\n minNumSamples: 3,\n maxDepth: Infinity\n};\n\nexport class DecisionTreeRegression {\n /**\n * Create new Decision Tree Regression with CART implementation with the given options.\n * @param {object} options\n * @param {string} [options.gainFunction=\"regression\"] - gain function to get the best split, \"regression\" the only one supported.\n * @param {string} [options.splitFunction=\"mean\"] - given two integers from a split feature, get the value to split, \"mean\" the only one supported.\n * @param {number} [options.minNumSamples=3] - minimum number of samples to create a leaf node to decide a class.\n * @param {number} [options.maxDepth=Infinity] - Max depth of the tree.\n * @param {object} model - for load purposes.\n */\n constructor(options, model) {\n if (options === true) {\n this.options = model.options;\n this.root = new Tree(model.options);\n this.root.setNodeParameters(model.root);\n } else {\n this.options = Object.assign({}, defaultOptions, options);\n this.options.kind = 'regression';\n }\n }\n\n /**\n * Train the decision tree with the given training set and values.\n * @param {Matrix|MatrixTransposeView|Array} trainingSet\n * @param {Array} trainingValues\n */\n train(trainingSet, trainingValues) {\n this.root = new Tree(this.options);\n\n if (typeof trainingSet[0] !== 'undefined' && trainingSet[0].length === undefined) {\n trainingSet = Matrix.columnVector(trainingSet);\n } else {\n trainingSet = Matrix.checkMatrix(trainingSet);\n }\n this.root.train(trainingSet, trainingValues, 0);\n }\n\n /**\n * Predicts the values given the matrix to predict.\n * @param {Matrix|MatrixTransposeView|Array} toPredict\n * @return {Array} predictions\n */\n predict(toPredict) {\n if (typeof toPredict[0] !== 'undefined' && toPredict[0].length === undefined) {\n toPredict = Matrix.columnVector(toPredict);\n }\n toPredict = Matrix.checkMatrix(toPredict);\n\n var predictions = new Array(toPredict.rows);\n for (var i = 0; i < toPredict.rows; ++i) {\n predictions[i] = this.root.classify(toPredict.getRow(i));\n }\n\n return predictions;\n }\n\n /**\n * Export the current model to JSON.\n * @return {object} - Current model.\n */\n toJSON() {\n return {\n options: this.options,\n root: this.root,\n name: 'DTRegression'\n };\n }\n\n /**\n * Load a Decision tree regression with the given model.\n * @param {object} model\n * @return {DecisionTreeRegression}\n */\n static load(model) {\n if (model.name !== 'DTRegression') {\n throw new RangeError(`Invalid model:${model.name}`);\n }\n\n return new DecisionTreeRegression(true, model);\n }\n}\n","const SMALLEST_UNSAFE_INTEGER = 0x20000000000000;\r\nconst LARGEST_SAFE_INTEGER = SMALLEST_UNSAFE_INTEGER - 1;\r\nconst UINT32_MAX = -1 >>> 0;\r\nconst UINT32_SIZE = UINT32_MAX + 1;\r\nconst INT32_SIZE = UINT32_SIZE / 2;\r\nconst INT32_MAX = INT32_SIZE - 1;\r\nconst UINT21_SIZE = 1 << 21;\r\nconst UINT21_MAX = UINT21_SIZE - 1;\n\n/**\r\n * Returns a value within [-0x80000000, 0x7fffffff]\r\n */\r\nfunction int32(engine) {\r\n return engine.next() | 0;\r\n}\n\nfunction add(distribution, addend) {\r\n if (addend === 0) {\r\n return distribution;\r\n }\r\n else {\r\n return engine => distribution(engine) + addend;\r\n }\r\n}\n\n/**\r\n * Returns a value within [-0x20000000000000, 0x1fffffffffffff]\r\n */\r\nfunction int53(engine) {\r\n const high = engine.next() | 0;\r\n const low = engine.next() >>> 0;\r\n return ((high & UINT21_MAX) * UINT32_SIZE +\r\n low +\r\n (high & UINT21_SIZE ? -SMALLEST_UNSAFE_INTEGER : 0));\r\n}\n\n/**\r\n * Returns a value within [-0x20000000000000, 0x20000000000000]\r\n */\r\nfunction int53Full(engine) {\r\n while (true) {\r\n const high = engine.next() | 0;\r\n if (high & 0x400000) {\r\n if ((high & 0x7fffff) === 0x400000 && (engine.next() | 0) === 0) {\r\n return SMALLEST_UNSAFE_INTEGER;\r\n }\r\n }\r\n else {\r\n const low = engine.next() >>> 0;\r\n return ((high & UINT21_MAX) * UINT32_SIZE +\r\n low +\r\n (high & UINT21_SIZE ? -SMALLEST_UNSAFE_INTEGER : 0));\r\n }\r\n }\r\n}\n\n/**\r\n * Returns a value within [0, 0xffffffff]\r\n */\r\nfunction uint32(engine) {\r\n return engine.next() >>> 0;\r\n}\n\n/**\r\n * Returns a value within [0, 0x1fffffffffffff]\r\n */\r\nfunction uint53(engine) {\r\n const high = engine.next() & UINT21_MAX;\r\n const low = engine.next() >>> 0;\r\n return high * UINT32_SIZE + low;\r\n}\n\n/**\r\n * Returns a value within [0, 0x20000000000000]\r\n */\r\nfunction uint53Full(engine) {\r\n while (true) {\r\n const high = engine.next() | 0;\r\n if (high & UINT21_SIZE) {\r\n if ((high & UINT21_MAX) === 0 && (engine.next() | 0) === 0) {\r\n return SMALLEST_UNSAFE_INTEGER;\r\n }\r\n }\r\n else {\r\n const low = engine.next() >>> 0;\r\n return (high & UINT21_MAX) * UINT32_SIZE + low;\r\n }\r\n }\r\n}\n\nfunction isPowerOfTwoMinusOne(value) {\r\n return ((value + 1) & value) === 0;\r\n}\r\nfunction bitmask(masking) {\r\n return (engine) => engine.next() & masking;\r\n}\r\nfunction downscaleToLoopCheckedRange(range) {\r\n const extendedRange = range + 1;\r\n const maximum = extendedRange * Math.floor(UINT32_SIZE / extendedRange);\r\n return engine => {\r\n let value = 0;\r\n do {\r\n value = engine.next() >>> 0;\r\n } while (value >= maximum);\r\n return value % extendedRange;\r\n };\r\n}\r\nfunction downscaleToRange(range) {\r\n if (isPowerOfTwoMinusOne(range)) {\r\n return bitmask(range);\r\n }\r\n else {\r\n return downscaleToLoopCheckedRange(range);\r\n }\r\n}\r\nfunction isEvenlyDivisibleByMaxInt32(value) {\r\n return (value | 0) === 0;\r\n}\r\nfunction upscaleWithHighMasking(masking) {\r\n return engine => {\r\n const high = engine.next() & masking;\r\n const low = engine.next() >>> 0;\r\n return high * UINT32_SIZE + low;\r\n };\r\n}\r\nfunction upscaleToLoopCheckedRange(extendedRange) {\r\n const maximum = extendedRange * Math.floor(SMALLEST_UNSAFE_INTEGER / extendedRange);\r\n return engine => {\r\n let ret = 0;\r\n do {\r\n const high = engine.next() & UINT21_MAX;\r\n const low = engine.next() >>> 0;\r\n ret = high * UINT32_SIZE + low;\r\n } while (ret >= maximum);\r\n return ret % extendedRange;\r\n };\r\n}\r\nfunction upscaleWithinU53(range) {\r\n const extendedRange = range + 1;\r\n if (isEvenlyDivisibleByMaxInt32(extendedRange)) {\r\n const highRange = ((extendedRange / UINT32_SIZE) | 0) - 1;\r\n if (isPowerOfTwoMinusOne(highRange)) {\r\n return upscaleWithHighMasking(highRange);\r\n }\r\n }\r\n return upscaleToLoopCheckedRange(extendedRange);\r\n}\r\nfunction upscaleWithinI53AndLoopCheck(min, max) {\r\n return engine => {\r\n let ret = 0;\r\n do {\r\n const high = engine.next() | 0;\r\n const low = engine.next() >>> 0;\r\n ret =\r\n (high & UINT21_MAX) * UINT32_SIZE +\r\n low +\r\n (high & UINT21_SIZE ? -SMALLEST_UNSAFE_INTEGER : 0);\r\n } while (ret < min || ret > max);\r\n return ret;\r\n };\r\n}\r\n/**\r\n * Returns a Distribution to return a value within [min, max]\r\n * @param min The minimum integer value, inclusive. No less than -0x20000000000000.\r\n * @param max The maximum integer value, inclusive. No greater than 0x20000000000000.\r\n */\r\nfunction integer(min, max) {\r\n min = Math.floor(min);\r\n max = Math.floor(max);\r\n if (min < -SMALLEST_UNSAFE_INTEGER || !isFinite(min)) {\r\n throw new RangeError(`Expected min to be at least ${-SMALLEST_UNSAFE_INTEGER}`);\r\n }\r\n else if (max > SMALLEST_UNSAFE_INTEGER || !isFinite(max)) {\r\n throw new RangeError(`Expected max to be at most ${SMALLEST_UNSAFE_INTEGER}`);\r\n }\r\n const range = max - min;\r\n if (range <= 0 || !isFinite(range)) {\r\n return () => min;\r\n }\r\n else if (range === UINT32_MAX) {\r\n if (min === 0) {\r\n return uint32;\r\n }\r\n else {\r\n return add(int32, min + INT32_SIZE);\r\n }\r\n }\r\n else if (range < UINT32_MAX) {\r\n return add(downscaleToRange(range), min);\r\n }\r\n else if (range === LARGEST_SAFE_INTEGER) {\r\n return add(uint53, min);\r\n }\r\n else if (range < LARGEST_SAFE_INTEGER) {\r\n return add(upscaleWithinU53(range), min);\r\n }\r\n else if (max - 1 - min === LARGEST_SAFE_INTEGER) {\r\n return add(uint53Full, min);\r\n }\r\n else if (min === -SMALLEST_UNSAFE_INTEGER &&\r\n max === SMALLEST_UNSAFE_INTEGER) {\r\n return int53Full;\r\n }\r\n else if (min === -SMALLEST_UNSAFE_INTEGER && max === LARGEST_SAFE_INTEGER) {\r\n return int53;\r\n }\r\n else if (min === -LARGEST_SAFE_INTEGER && max === SMALLEST_UNSAFE_INTEGER) {\r\n return add(int53, 1);\r\n }\r\n else if (max === SMALLEST_UNSAFE_INTEGER) {\r\n return add(upscaleWithinI53AndLoopCheck(min - 1, max - 1), 1);\r\n }\r\n else {\r\n return upscaleWithinI53AndLoopCheck(min, max);\r\n }\r\n}\n\nfunction isLeastBitTrue(engine) {\r\n return (engine.next() & 1) === 1;\r\n}\r\nfunction lessThan(distribution, value) {\r\n return engine => distribution(engine) < value;\r\n}\r\nfunction probability(percentage) {\r\n if (percentage <= 0) {\r\n return () => false;\r\n }\r\n else if (percentage >= 1) {\r\n return () => true;\r\n }\r\n else {\r\n const scaled = percentage * UINT32_SIZE;\r\n if (scaled % 1 === 0) {\r\n return lessThan(int32, (scaled - INT32_SIZE) | 0);\r\n }\r\n else {\r\n return lessThan(uint53, Math.round(percentage * SMALLEST_UNSAFE_INTEGER));\r\n }\r\n }\r\n}\r\nfunction bool(numerator, denominator) {\r\n if (denominator == null) {\r\n if (numerator == null) {\r\n return isLeastBitTrue;\r\n }\r\n return probability(numerator);\r\n }\r\n else {\r\n if (numerator <= 0) {\r\n return () => false;\r\n }\r\n else if (numerator >= denominator) {\r\n return () => true;\r\n }\r\n return lessThan(integer(0, denominator - 1), numerator);\r\n }\r\n}\n\n/**\r\n * Returns a Distribution that returns a random `Date` within the inclusive\r\n * range of [`start`, `end`].\r\n * @param start The minimum `Date`\r\n * @param end The maximum `Date`\r\n */\r\nfunction date(start, end) {\r\n const distribution = integer(+start, +end);\r\n return engine => new Date(distribution(engine));\r\n}\n\n/**\r\n * Returns a Distribution to return a value within [1, sideCount]\r\n * @param sideCount The number of sides of the die\r\n */\r\nfunction die(sideCount) {\r\n return integer(1, sideCount);\r\n}\n\n/**\r\n * Returns a distribution that returns an array of length `dieCount` of values\r\n * within [1, `sideCount`]\r\n * @param sideCount The number of sides of each die\r\n * @param dieCount The number of dice\r\n */\r\nfunction dice(sideCount, dieCount) {\r\n const distribution = die(sideCount);\r\n return engine => {\r\n const result = [];\r\n for (let i = 0; i < dieCount; ++i) {\r\n result.push(distribution(engine));\r\n }\r\n return result;\r\n };\r\n}\n\n// tslint:disable:unified-signatures\r\n// has 2**x chars, for faster uniform distribution\r\nconst DEFAULT_STRING_POOL = \"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_-\";\r\nfunction string(pool = DEFAULT_STRING_POOL) {\r\n const poolLength = pool.length;\r\n if (!poolLength) {\r\n throw new Error(\"Expected pool not to be an empty string\");\r\n }\r\n const distribution = integer(0, poolLength - 1);\r\n return (engine, length) => {\r\n let result = \"\";\r\n for (let i = 0; i < length; ++i) {\r\n const j = distribution(engine);\r\n result += pool.charAt(j);\r\n }\r\n return result;\r\n };\r\n}\n\nconst LOWER_HEX_POOL = \"0123456789abcdef\";\r\nconst lowerHex = string(LOWER_HEX_POOL);\r\nconst upperHex = string(LOWER_HEX_POOL.toUpperCase());\r\n/**\r\n * Returns a Distribution that returns a random string comprised of numbers\r\n * or the characters `abcdef` (or `ABCDEF`) of length `length`.\r\n * @param length Length of the result string\r\n * @param uppercase Whether the string should use `ABCDEF` instead of `abcdef`\r\n */\r\nfunction hex(uppercase) {\r\n if (uppercase) {\r\n return upperHex;\r\n }\r\n else {\r\n return lowerHex;\r\n }\r\n}\n\nfunction convertSliceArgument(value, length) {\r\n if (value < 0) {\r\n return Math.max(value + length, 0);\r\n }\r\n else {\r\n return Math.min(value, length);\r\n }\r\n}\n\nfunction toInteger(value) {\r\n const num = +value;\r\n if (num < 0) {\r\n return Math.ceil(num);\r\n }\r\n else {\r\n return Math.floor(num);\r\n }\r\n}\n\n/**\r\n * Returns a random value within the provided `source` within the sliced\r\n * bounds of `begin` and `end`.\r\n * @param source an array of items to pick from\r\n * @param begin the beginning slice index (defaults to `0`)\r\n * @param end the ending slice index (defaults to `source.length`)\r\n */\r\nfunction pick(engine, source, begin, end) {\r\n const length = source.length;\r\n if (length === 0) {\r\n throw new RangeError(\"Cannot pick from an empty array\");\r\n }\r\n const start = begin == null ? 0 : convertSliceArgument(toInteger(begin), length);\r\n const finish = end === void 0 ? length : convertSliceArgument(toInteger(end), length);\r\n if (start >= finish) {\r\n throw new RangeError(`Cannot pick between bounds ${start} and ${finish}`);\r\n }\r\n const distribution = integer(start, finish - 1);\r\n return source[distribution(engine)];\r\n}\n\nfunction multiply(distribution, multiplier) {\r\n if (multiplier === 1) {\r\n return distribution;\r\n }\r\n else if (multiplier === 0) {\r\n return () => 0;\r\n }\r\n else {\r\n return engine => distribution(engine) * multiplier;\r\n }\r\n}\n\n/**\r\n * Returns a floating-point value within [0.0, 1.0)\r\n */\r\nfunction realZeroToOneExclusive(engine) {\r\n return uint53(engine) / SMALLEST_UNSAFE_INTEGER;\r\n}\n\n/**\r\n * Returns a floating-point value within [0.0, 1.0]\r\n */\r\nfunction realZeroToOneInclusive(engine) {\r\n return uint53Full(engine) / SMALLEST_UNSAFE_INTEGER;\r\n}\n\n/**\r\n * Returns a floating-point value within [min, max) or [min, max]\r\n * @param min The minimum floating-point value, inclusive.\r\n * @param max The maximum floating-point value.\r\n * @param inclusive If true, `max` will be inclusive.\r\n */\r\nfunction real(min, max, inclusive = false) {\r\n if (!isFinite(min)) {\r\n throw new RangeError(\"Expected min to be a finite number\");\r\n }\r\n else if (!isFinite(max)) {\r\n throw new RangeError(\"Expected max to be a finite number\");\r\n }\r\n return add(multiply(inclusive ? realZeroToOneInclusive : realZeroToOneExclusive, max - min), min);\r\n}\n\nconst sliceArray = Array.prototype.slice;\n\n/**\r\n * Shuffles an array in-place\r\n * @param engine The Engine to use when choosing random values\r\n * @param array The array to shuffle\r\n * @param downTo minimum index to shuffle. Only used internally.\r\n */\r\nfunction shuffle(engine, array, downTo = 0) {\r\n const length = array.length;\r\n if (length) {\r\n for (let i = (length - 1) >>> 0; i > downTo; --i) {\r\n const distribution = integer(0, i);\r\n const j = distribution(engine);\r\n if (i !== j) {\r\n const tmp = array[i];\r\n array[i] = array[j];\r\n array[j] = tmp;\r\n }\r\n }\r\n }\r\n return array;\r\n}\n\n/**\r\n * From the population array, produce an array with sampleSize elements that\r\n * are randomly chosen without repeats.\r\n * @param engine The Engine to use when choosing random values\r\n * @param population An array that has items to choose a sample from\r\n * @param sampleSize The size of the result array\r\n */\r\nfunction sample(engine, population, sampleSize) {\r\n if (sampleSize < 0 ||\r\n sampleSize > population.length ||\r\n !isFinite(sampleSize)) {\r\n throw new RangeError(\"Expected sampleSize to be within 0 and the length of the population\");\r\n }\r\n if (sampleSize === 0) {\r\n return [];\r\n }\r\n const clone = sliceArray.call(population);\r\n const length = clone.length;\r\n if (length === sampleSize) {\r\n return shuffle(engine, clone, 0);\r\n }\r\n const tailLength = length - sampleSize;\r\n return shuffle(engine, clone, tailLength - 1).slice(tailLength);\r\n}\n\nconst stringRepeat = (() => {\r\n try {\r\n if (\"x\".repeat(3) === \"xxx\") {\r\n return (pattern, count) => pattern.repeat(count);\r\n }\r\n }\r\n catch (_) {\r\n // nothing to do here\r\n }\r\n return (pattern, count) => {\r\n let result = \"\";\r\n while (count > 0) {\r\n if (count & 1) {\r\n result += pattern;\r\n }\r\n count >>= 1;\r\n pattern += pattern;\r\n }\r\n return result;\r\n };\r\n})();\n\nfunction zeroPad(text, zeroCount) {\r\n return stringRepeat(\"0\", zeroCount - text.length) + text;\r\n}\r\n/**\r\n * Returns a Universally Unique Identifier Version 4.\r\n *\r\n * See http://en.wikipedia.org/wiki/Universally_unique_identifier\r\n */\r\nfunction uuid4(engine) {\r\n const a = engine.next() >>> 0;\r\n const b = engine.next() | 0;\r\n const c = engine.next() | 0;\r\n const d = engine.next() >>> 0;\r\n return (zeroPad(a.toString(16), 8) +\r\n \"-\" +\r\n zeroPad((b & 0xffff).toString(16), 4) +\r\n \"-\" +\r\n zeroPad((((b >> 4) & 0x0fff) | 0x4000).toString(16), 4) +\r\n \"-\" +\r\n zeroPad(((c & 0x3fff) | 0x8000).toString(16), 4) +\r\n \"-\" +\r\n zeroPad(((c >> 4) & 0xffff).toString(16), 4) +\r\n zeroPad(d.toString(16), 8));\r\n}\n\n/**\r\n * An int32-producing Engine that uses `Math.random()`\r\n */\r\nconst nativeMath = {\r\n next() {\r\n return (Math.random() * UINT32_SIZE) | 0;\r\n }\r\n};\n\n// tslint:disable:unified-signatures\r\n/**\r\n * A wrapper around an Engine that provides easy-to-use methods for\r\n * producing values based on known distributions\r\n */\r\nclass Random {\r\n /**\r\n * Creates a new Random wrapper\r\n * @param engine The engine to use (defaults to a `Math.random`-based implementation)\r\n */\r\n constructor(engine = nativeMath) {\r\n this.engine = engine;\r\n }\r\n /**\r\n * Returns a value within [-0x80000000, 0x7fffffff]\r\n */\r\n int32() {\r\n return int32(this.engine);\r\n }\r\n /**\r\n * Returns a value within [0, 0xffffffff]\r\n */\r\n uint32() {\r\n return uint32(this.engine);\r\n }\r\n /**\r\n * Returns a value within [0, 0x1fffffffffffff]\r\n */\r\n uint53() {\r\n return uint53(this.engine);\r\n }\r\n /**\r\n * Returns a value within [0, 0x20000000000000]\r\n */\r\n uint53Full() {\r\n return uint53Full(this.engine);\r\n }\r\n /**\r\n * Returns a value within [-0x20000000000000, 0x1fffffffffffff]\r\n */\r\n int53() {\r\n return int53(this.engine);\r\n }\r\n /**\r\n * Returns a value within [-0x20000000000000, 0x20000000000000]\r\n */\r\n int53Full() {\r\n return int53Full(this.engine);\r\n }\r\n /**\r\n * Returns a value within [min, max]\r\n * @param min The minimum integer value, inclusive. No less than -0x20000000000000.\r\n * @param max The maximum integer value, inclusive. No greater than 0x20000000000000.\r\n */\r\n integer(min, max) {\r\n return integer(min, max)(this.engine);\r\n }\r\n /**\r\n * Returns a floating-point value within [0.0, 1.0]\r\n */\r\n realZeroToOneInclusive() {\r\n return realZeroToOneInclusive(this.engine);\r\n }\r\n /**\r\n * Returns a floating-point value within [0.0, 1.0)\r\n */\r\n realZeroToOneExclusive() {\r\n return realZeroToOneExclusive(this.engine);\r\n }\r\n /**\r\n * Returns a floating-point value within [min, max) or [min, max]\r\n * @param min The minimum floating-point value, inclusive.\r\n * @param max The maximum floating-point value.\r\n * @param inclusive If true, `max` will be inclusive.\r\n */\r\n real(min, max, inclusive = false) {\r\n return real(min, max, inclusive)(this.engine);\r\n }\r\n bool(numerator, denominator) {\r\n return bool(numerator, denominator)(this.engine);\r\n }\r\n /**\r\n * Return a random value within the provided `source` within the sliced\r\n * bounds of `begin` and `end`.\r\n * @param source an array of items to pick from\r\n * @param begin the beginning slice index (defaults to `0`)\r\n * @param end the ending slice index (defaults to `source.length`)\r\n */\r\n pick(source, begin, end) {\r\n return pick(this.engine, source, begin, end);\r\n }\r\n /**\r\n * Shuffles an array in-place\r\n * @param array The array to shuffle\r\n */\r\n shuffle(array) {\r\n return shuffle(this.engine, array);\r\n }\r\n /**\r\n * From the population array, returns an array with sampleSize elements that\r\n * are randomly chosen without repeats.\r\n * @param population An array that has items to choose a sample from\r\n * @param sampleSize The size of the result array\r\n */\r\n sample(population, sampleSize) {\r\n return sample(this.engine, population, sampleSize);\r\n }\r\n /**\r\n * Returns a value within [1, sideCount]\r\n * @param sideCount The number of sides of the die\r\n */\r\n die(sideCount) {\r\n return die(sideCount)(this.engine);\r\n }\r\n /**\r\n * Returns an array of length `dieCount` of values within [1, sideCount]\r\n * @param sideCount The number of sides of each die\r\n * @param dieCount The number of dice\r\n */\r\n dice(sideCount, dieCount) {\r\n return dice(sideCount, dieCount)(this.engine);\r\n }\r\n /**\r\n * Returns a Universally Unique Identifier Version 4.\r\n *\r\n * See http://en.wikipedia.org/wiki/Universally_unique_identifier\r\n */\r\n uuid4() {\r\n return uuid4(this.engine);\r\n }\r\n string(length, pool) {\r\n return string(pool)(this.engine, length);\r\n }\r\n /**\r\n * Returns a random string comprised of numbers or the characters `abcdef`\r\n * (or `ABCDEF`) of length `length`.\r\n * @param length Length of the result string\r\n * @param uppercase Whether the string should use `ABCDEF` instead of `abcdef`\r\n */\r\n hex(length, uppercase) {\r\n return hex(uppercase)(this.engine, length);\r\n }\r\n /**\r\n * Returns a random `Date` within the inclusive range of [`start`, `end`].\r\n * @param start The minimum `Date`\r\n * @param end The maximum `Date`\r\n */\r\n date(start, end) {\r\n return date(start, end)(this.engine);\r\n }\r\n}\n\n/**\r\n * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Int32Array\r\n */\r\nconst I32Array = (() => {\r\n try {\r\n const buffer = new ArrayBuffer(4);\r\n const view = new Int32Array(buffer);\r\n view[0] = INT32_SIZE;\r\n if (view[0] === -INT32_SIZE) {\r\n return Int32Array;\r\n }\r\n }\r\n catch (_) {\r\n // nothing to do here\r\n }\r\n return Array;\r\n})();\n\nlet data = null;\r\nconst COUNT = 128;\r\nlet index = COUNT;\r\n/**\r\n * An Engine that relies on the globally-available `crypto.getRandomValues`,\r\n * which is typically available in modern browsers.\r\n *\r\n * See https://developer.mozilla.org/en-US/docs/Web/API/Crypto/getRandomValues\r\n *\r\n * If unavailable or otherwise non-functioning, then `browserCrypto` will\r\n * likely `throw` on the first call to `next()`.\r\n */\r\nconst browserCrypto = {\r\n next() {\r\n if (index >= COUNT) {\r\n if (data === null) {\r\n data = new I32Array(COUNT);\r\n }\r\n crypto.getRandomValues(data);\r\n index = 0;\r\n }\r\n return data[index++] | 0;\r\n }\r\n};\n\n/**\r\n * Returns an array of random int32 values, based on current time\r\n * and a random number engine\r\n *\r\n * @param engine an Engine to pull random values from, default `nativeMath`\r\n * @param length the length of the Array, minimum 1, default 16\r\n */\r\nfunction createEntropy(engine = nativeMath, length = 16) {\r\n const array = [];\r\n array.push(new Date().getTime() | 0);\r\n for (let i = 1; i < length; ++i) {\r\n array[i] = engine.next() | 0;\r\n }\r\n return array;\r\n}\n\n/**\r\n * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/imul\r\n */\r\nconst imul = (() => {\r\n try {\r\n if (Math.imul(UINT32_MAX, 5) === -5) {\r\n return Math.imul;\r\n }\r\n }\r\n catch (_) {\r\n // nothing to do here\r\n }\r\n const UINT16_MAX = 0xffff;\r\n return (a, b) => {\r\n const ah = (a >>> 16) & UINT16_MAX;\r\n const al = a & UINT16_MAX;\r\n const bh = (b >>> 16) & UINT16_MAX;\r\n const bl = b & UINT16_MAX;\r\n // the shift by 0 fixes the sign on the high part\r\n // the final |0 converts the unsigned value into a signed value\r\n return (al * bl + (((ah * bl + al * bh) << 16) >>> 0)) | 0;\r\n };\r\n})();\n\nconst ARRAY_SIZE = 624;\r\nconst ARRAY_MAX = ARRAY_SIZE - 1;\r\nconst M = 397;\r\nconst ARRAY_SIZE_MINUS_M = ARRAY_SIZE - M;\r\nconst A = 0x9908b0df;\r\n/**\r\n * An Engine that is a pseudorandom number generator using the Mersenne\r\n * Twister algorithm based on the prime 2**19937 − 1\r\n *\r\n * See http://en.wikipedia.org/wiki/Mersenne_twister\r\n */\r\nclass MersenneTwister19937 {\r\n /**\r\n * MersenneTwister19937 should not be instantiated directly.\r\n * Instead, use the static methods `seed`, `seedWithArray`, or `autoSeed`.\r\n */\r\n constructor() {\r\n this.data = new I32Array(ARRAY_SIZE);\r\n this.index = 0; // integer within [0, 624]\r\n this.uses = 0;\r\n }\r\n /**\r\n * Returns a MersenneTwister19937 seeded with an initial int32 value\r\n * @param initial the initial seed value\r\n */\r\n static seed(initial) {\r\n return new MersenneTwister19937().seed(initial);\r\n }\r\n /**\r\n * Returns a MersenneTwister19937 seeded with zero or more int32 values\r\n * @param source A series of int32 values\r\n */\r\n static seedWithArray(source) {\r\n return new MersenneTwister19937().seedWithArray(source);\r\n }\r\n /**\r\n * Returns a MersenneTwister19937 seeded with the current time and\r\n * a series of natively-generated random values\r\n */\r\n static autoSeed() {\r\n return MersenneTwister19937.seedWithArray(createEntropy());\r\n }\r\n /**\r\n * Returns the next int32 value of the sequence\r\n */\r\n next() {\r\n if ((this.index | 0) >= ARRAY_SIZE) {\r\n refreshData(this.data);\r\n this.index = 0;\r\n }\r\n const value = this.data[this.index];\r\n this.index = (this.index + 1) | 0;\r\n this.uses += 1;\r\n return temper(value) | 0;\r\n }\r\n /**\r\n * Returns the number of times that the Engine has been used.\r\n *\r\n * This can be provided to an unused MersenneTwister19937 with the same\r\n * seed, bringing it to the exact point that was left off.\r\n */\r\n getUseCount() {\r\n return this.uses;\r\n }\r\n /**\r\n * Discards one or more items from the engine\r\n * @param count The count of items to discard\r\n */\r\n discard(count) {\r\n if (count <= 0) {\r\n return this;\r\n }\r\n this.uses += count;\r\n if ((this.index | 0) >= ARRAY_SIZE) {\r\n refreshData(this.data);\r\n this.index = 0;\r\n }\r\n while (count + this.index > ARRAY_SIZE) {\r\n count -= ARRAY_SIZE - this.index;\r\n refreshData(this.data);\r\n this.index = 0;\r\n }\r\n this.index = (this.index + count) | 0;\r\n return this;\r\n }\r\n seed(initial) {\r\n let previous = 0;\r\n this.data[0] = previous = initial | 0;\r\n for (let i = 1; i < ARRAY_SIZE; i = (i + 1) | 0) {\r\n this.data[i] = previous =\r\n (imul(previous ^ (previous >>> 30), 0x6c078965) + i) | 0;\r\n }\r\n this.index = ARRAY_SIZE;\r\n this.uses = 0;\r\n return this;\r\n }\r\n seedWithArray(source) {\r\n this.seed(0x012bd6aa);\r\n seedWithArray(this.data, source);\r\n return this;\r\n }\r\n}\r\nfunction refreshData(data) {\r\n let k = 0;\r\n let tmp = 0;\r\n for (; (k | 0) < ARRAY_SIZE_MINUS_M; k = (k + 1) | 0) {\r\n tmp = (data[k] & INT32_SIZE) | (data[(k + 1) | 0] & INT32_MAX);\r\n data[k] = data[(k + M) | 0] ^ (tmp >>> 1) ^ (tmp & 0x1 ? A : 0);\r\n }\r\n for (; (k | 0) < ARRAY_MAX; k = (k + 1) | 0) {\r\n tmp = (data[k] & INT32_SIZE) | (data[(k + 1) | 0] & INT32_MAX);\r\n data[k] =\r\n data[(k - ARRAY_SIZE_MINUS_M) | 0] ^ (tmp >>> 1) ^ (tmp & 0x1 ? A : 0);\r\n }\r\n tmp = (data[ARRAY_MAX] & INT32_SIZE) | (data[0] & INT32_MAX);\r\n data[ARRAY_MAX] = data[M - 1] ^ (tmp >>> 1) ^ (tmp & 0x1 ? A : 0);\r\n}\r\nfunction temper(value) {\r\n value ^= value >>> 11;\r\n value ^= (value << 7) & 0x9d2c5680;\r\n value ^= (value << 15) & 0xefc60000;\r\n return value ^ (value >>> 18);\r\n}\r\nfunction seedWithArray(data, source) {\r\n let i = 1;\r\n let j = 0;\r\n const sourceLength = source.length;\r\n let k = Math.max(sourceLength, ARRAY_SIZE) | 0;\r\n let previous = data[0] | 0;\r\n for (; (k | 0) > 0; --k) {\r\n data[i] = previous =\r\n ((data[i] ^ imul(previous ^ (previous >>> 30), 0x0019660d)) +\r\n (source[j] | 0) +\r\n (j | 0)) |\r\n 0;\r\n i = (i + 1) | 0;\r\n ++j;\r\n if ((i | 0) > ARRAY_MAX) {\r\n data[0] = data[ARRAY_MAX];\r\n i = 1;\r\n }\r\n if (j >= sourceLength) {\r\n j = 0;\r\n }\r\n }\r\n for (k = ARRAY_MAX; (k | 0) > 0; --k) {\r\n data[i] = previous =\r\n ((data[i] ^ imul(previous ^ (previous >>> 30), 0x5d588b65)) - i) | 0;\r\n i = (i + 1) | 0;\r\n if ((i | 0) > ARRAY_MAX) {\r\n data[0] = data[ARRAY_MAX];\r\n i = 1;\r\n }\r\n }\r\n data[0] = INT32_SIZE;\r\n}\n\nlet data$1 = null;\r\nconst COUNT$1 = 128;\r\nlet index$1 = COUNT$1;\r\n/**\r\n * An Engine that relies on the node-available\r\n * `require('crypto').randomBytes`, which has been available since 0.58.\r\n *\r\n * See https://nodejs.org/api/crypto.html#crypto_crypto_randombytes_size_callback\r\n *\r\n * If unavailable or otherwise non-functioning, then `nodeCrypto` will\r\n * likely `throw` on the first call to `next()`.\r\n */\r\nconst nodeCrypto = {\r\n next() {\r\n if (index$1 >= COUNT$1) {\r\n data$1 = new Int32Array(new Int8Array(require(\"crypto\").randomBytes(4 * COUNT$1)).buffer);\r\n index$1 = 0;\r\n }\r\n return data$1[index$1++] | 0;\r\n }\r\n};\n\n/**\r\n * Returns a Distribution to random value within the provided `source`\r\n * within the sliced bounds of `begin` and `end`.\r\n * @param source an array of items to pick from\r\n * @param begin the beginning slice index (defaults to `0`)\r\n * @param end the ending slice index (defaults to `source.length`)\r\n */\r\nfunction picker(source, begin, end) {\r\n const clone = sliceArray.call(source, begin, end);\r\n if (clone.length === 0) {\r\n throw new RangeError(`Cannot pick from a source with no items`);\r\n }\r\n const distribution = integer(0, clone.length - 1);\r\n return engine => clone[distribution(engine)];\r\n}\n\nexport { Random, browserCrypto, nativeMath, MersenneTwister19937, nodeCrypto, bool, date, dice, die, hex, int32, int53, int53Full, integer, pick, picker, real, realZeroToOneExclusive, realZeroToOneInclusive, sample, shuffle, string, uint32, uint53, uint53Full, uuid4, createEntropy };\n//# sourceMappingURL=random-js.esm.js.map\n","import * as Random from 'random-js';\nimport Matrix from 'ml-matrix';\n\nexport function checkFloat(n) {\n return n > 0.0 && n <= 1.0;\n}\n\n\n/**\n * Select n with replacement elements on the training set and values, where n is the size of the training set.\n * @ignore\n * @param {Matrix} trainingSet\n * @param {Array} trainingValue\n * @param {number} seed - seed for the random selection, must be a 32-bit integer.\n * @return {object} with new X and y.\n */\nexport function examplesBaggingWithReplacement(\n trainingSet,\n trainingValue,\n seed\n) {\n var engine;\n var distribution = Random.integer(0, trainingSet.rows - 1);\n if (seed === undefined) {\n engine = Random.MersenneTwister19937.autoSeed();\n } else if (Number.isInteger(seed)) {\n engine = Random.MersenneTwister19937.seed(seed);\n } else {\n throw new RangeError(\n `Expected seed must be undefined or integer not ${seed}`\n );\n }\n\n var Xr = new Array(trainingSet.rows);\n var yr = new Array(trainingSet.rows);\n\n for (var i = 0; i < trainingSet.rows; ++i) {\n var index = distribution(engine);\n Xr[i] = trainingSet.getRow(index);\n yr[i] = trainingValue[index];\n }\n\n return {\n X: new Matrix(Xr),\n y: yr\n };\n}\n\n/**\n * selects n features from the training set with or without replacement, returns the new training set and the indexes used.\n * @ignore\n * @param {Matrix} trainingSet\n * @param {number} n - features.\n * @param {boolean} replacement\n * @param {number} seed - seed for the random selection, must be a 32-bit integer.\n * @return {object}\n */\nexport function featureBagging(trainingSet, n, replacement, seed) {\n if (trainingSet.columns < n) {\n throw new RangeError(\n 'N should be less or equal to the number of columns of X'\n );\n }\n\n var distribution = Random.integer(0, trainingSet.columns - 1);\n var engine;\n if (seed === undefined) {\n engine = Random.MersenneTwister19937.autoSeed();\n } else if (Number.isInteger(seed)) {\n engine = Random.MersenneTwister19937.seed(seed);\n } else {\n throw new RangeError(\n `Expected seed must be undefined or integer not ${seed}`\n );\n }\n\n var toRet = new Matrix(trainingSet.rows, n);\n\n if (replacement) {\n var usedIndex = new Array(n);\n for (var i = 0; i < n; ++i) {\n var index = distribution(engine);\n usedIndex[i] = index;\n toRet.setColumn(i, trainingSet.getColumn(index));\n }\n } else {\n usedIndex = new Set();\n index = distribution(engine);\n for (i = 0; i < n; ++i) {\n while (usedIndex.has(index)) {\n index = distribution(engine);\n }\n toRet.setColumn(i, trainingSet.getColumn(index));\n usedIndex.add(index);\n }\n usedIndex = Array.from(usedIndex);\n }\n\n return {\n X: toRet,\n usedIndex: usedIndex\n };\n}\n","import {\n DecisionTreeClassifier as DTClassifier,\n DecisionTreeRegression as DTRegression\n} from 'ml-cart';\nimport { Matrix, WrapperMatrix2D, MatrixTransposeView, MatrixColumnSelectionView } from 'ml-matrix';\n\nimport * as Utils from './utils';\n\n/**\n * @class RandomForestBase\n */\nexport class RandomForestBase {\n /**\n * Create a new base random forest for a classifier or regression model.\n * @constructor\n * @param {object} options\n * @param {number|String} [options.maxFeatures] - the number of features used on each estimator.\n * * if is an integer it selects maxFeatures elements over the sample features.\n * * if is a float between (0, 1), it takes the percentage of features.\n * @param {boolean} [options.replacement] - use replacement over the sample features.\n * @param {number} [options.seed] - seed for feature and samples selection, must be a 32-bit integer.\n * @param {number} [options.nEstimators] - number of estimator to use.\n * @param {object} [options.treeOptions] - options for the tree classifier, see [ml-cart]{@link https://mljs.github.io/decision-tree-cart/}\n * @param {boolean} [options.isClassifier] - boolean to check if is a classifier or regression model (used by subclasses).\n * @param {boolean} [options.useSampleBagging] - use bagging over training samples.\n * @param {object} model - for load purposes.\n */\n constructor(options, model) {\n if (options === true) {\n this.replacement = model.replacement;\n this.maxFeatures = model.maxFeatures;\n this.nEstimators = model.nEstimators;\n this.treeOptions = model.treeOptions;\n this.isClassifier = model.isClassifier;\n this.seed = model.seed;\n this.n = model.n;\n this.indexes = model.indexes;\n this.useSampleBagging = model.useSampleBagging;\n\n var Estimator = this.isClassifier ? DTClassifier : DTRegression;\n this.estimators = model.estimators.map((est) => Estimator.load(est));\n } else {\n this.replacement = options.replacement;\n this.maxFeatures = options.maxFeatures;\n this.nEstimators = options.nEstimators;\n this.treeOptions = options.treeOptions;\n this.isClassifier = options.isClassifier;\n this.seed = options.seed;\n this.useSampleBagging = options.useSampleBagging;\n }\n }\n\n /**\n * Train the decision tree with the given training set and labels.\n * @param {Matrix|Array} trainingSet\n * @param {Array} trainingValues\n */\n train(trainingSet, trainingValues) {\n trainingSet = Matrix.checkMatrix(trainingSet);\n\n this.maxFeatures = this.maxFeatures || trainingSet.columns;\n\n if (Utils.checkFloat(this.maxFeatures)) {\n this.n = Math.floor(trainingSet.columns * this.maxFeatures);\n } else if (Number.isInteger(this.maxFeatures)) {\n if (this.maxFeatures > trainingSet.columns) {\n throw new RangeError(\n `The maxFeatures parameter should be less than ${trainingSet.columns}`\n );\n } else {\n this.n = this.maxFeatures;\n }\n } else {\n throw new RangeError(\n `Cannot process the maxFeatures parameter ${this.maxFeatures}`\n );\n }\n\n if (this.isClassifier) {\n var Estimator = DTClassifier;\n } else {\n Estimator = DTRegression;\n }\n\n this.estimators = new Array(this.nEstimators);\n this.indexes = new Array(this.nEstimators);\n\n for (var i = 0; i < this.nEstimators; ++i) {\n var res = this.useSampleBagging\n ? Utils.examplesBaggingWithReplacement(\n trainingSet,\n trainingValues,\n this.seed\n )\n : { X: trainingSet, y: trainingValues };\n var X = res.X;\n var y = res.y;\n\n res = Utils.featureBagging(X, this.n, this.replacement, this.seed);\n X = res.X;\n\n this.indexes[i] = res.usedIndex;\n this.estimators[i] = new Estimator(this.treeOptions);\n this.estimators[i].train(X, y);\n }\n }\n\n /**\n * Method that returns the way the algorithm generates the predictions, for example, in classification\n * you can return the mode of all predictions retrieved by the trees, or in case of regression you can\n * use the mean or the median.\n * @abstract\n * @param {Array} values - predictions of the estimators.\n * @return {number} prediction.\n */\n // eslint-disable-next-line no-unused-vars\n selection(values) {\n throw new Error(\"Abstract method 'selection' not implemented!\");\n }\n\n /**\n * Predicts the output given the matrix to predict.\n * @param {Matrix|Array} toPredict\n * @return {Array} predictions\n */\n predict(toPredict) {\n var predictionValues = new Array(this.nEstimators);\n toPredict = Matrix.checkMatrix(toPredict);\n for (var i = 0; i < this.nEstimators; ++i) {\n var X = new MatrixColumnSelectionView(toPredict, this.indexes[i]); // get features for estimator\n predictionValues[i] = this.estimators[i].predict(X);\n }\n\n predictionValues = new MatrixTransposeView(new WrapperMatrix2D(predictionValues));\n var predictions = new Array(predictionValues.rows);\n for (i = 0; i < predictionValues.rows; ++i) {\n predictions[i] = this.selection(predictionValues.getRow(i));\n }\n\n return predictions;\n }\n\n /**\n * Export the current model to JSON.\n * @return {object} - Current model.\n */\n toJSON() {\n return {\n indexes: this.indexes,\n n: this.n,\n replacement: this.replacement,\n maxFeatures: this.maxFeatures,\n nEstimators: this.nEstimators,\n treeOptions: this.treeOptions,\n isClassifier: this.isClassifier,\n seed: this.seed,\n estimators: this.estimators.map((est) => est.toJSON()),\n useSampleBagging: this.useSampleBagging\n };\n }\n}\n","import { RandomForestBase } from './RandomForestBase';\n\nconst defaultOptions = {\n maxFeatures: 1.0,\n replacement: true,\n nEstimators: 10,\n seed: 42,\n useSampleBagging: false\n};\n\n/**\n * @class RandomForestClassifier\n * @augments RandomForestBase\n */\nexport class RandomForestClassifier extends RandomForestBase {\n /**\n * Create a new base random forest for a classifier or regression model.\n * @constructor\n * @param {object} options\n * @param {number} [options.maxFeatures=1.0] - the number of features used on each estimator.\n * * if is an integer it selects maxFeatures elements over the sample features.\n * * if is a float between (0, 1), it takes the percentage of features.\n * @param {boolean} [options.replacement=true] - use replacement over the sample features.\n * @param {number} [options.seed=42] - seed for feature and samples selection, must be a 32-bit integer.\n * @param {number} [options.nEstimators=10] - number of estimator to use.\n * @param {object} [options.treeOptions={}] - options for the tree classifier, see [ml-cart]{@link https://mljs.github.io/decision-tree-cart/}\n * @param {boolean} [options.useSampleBagging=false] - use bagging over training samples.\n * @param {object} model - for load purposes.\n */\n constructor(options, model) {\n if (options === true) {\n super(true, model.baseModel);\n } else {\n options = Object.assign({}, defaultOptions, options);\n options.isClassifier = true;\n super(options);\n }\n }\n\n /**\n * retrieve the prediction given the selection method.\n * @param {Array} values - predictions of the estimators.\n * @return {number} prediction\n */\n selection(values) {\n return mode(values);\n }\n\n /**\n * Export the current model to JSON.\n * @return {object} - Current model.\n */\n toJSON() {\n var baseModel = super.toJSON();\n return {\n baseModel: baseModel,\n name: 'RFClassifier'\n };\n }\n\n /**\n * Load a Decision tree classifier with the given model.\n * @param {object} model\n * @return {RandomForestClassifier}\n */\n static load(model) {\n if (model.name !== 'RFClassifier') {\n throw new RangeError(`Invalid model: ${model.name}`);\n }\n\n return new RandomForestClassifier(true, model);\n }\n}\n\n/**\n * Return the most repeated element on the array.\n * @param {Array} arr\n * @return {number} mode\n */\nfunction mode(arr) {\n return arr\n .sort(\n (a, b) =>\n arr.filter((v) => v === a).length - arr.filter((v) => v === b).length\n )\n .pop();\n}\n","(function(){function a(d){for(var e=0,f=d.length-1,g=void 0,h=void 0,i=void 0,j=c(e,f);!0;){if(f<=e)return d[j];if(f==e+1)return d[e]>d[f]&&b(d,e,f),d[j];for(g=c(e,f),d[g]>d[f]&&b(d,g,f),d[e]>d[f]&&b(d,e,f),d[g]>d[e]&&b(d,g,e),b(d,g,e+1),h=e+1,i=f;!0;){do h++;while(d[e]>d[h]);do i--;while(d[i]>d[e]);if(i=j&&(f=i-1)}}var b=function b(d,e,f){var _ref;return _ref=[d[f],d[e]],d[e]=_ref[0],d[f]=_ref[1],_ref},c=function c(d,e){return~~((d+e)/2)};'undefined'!=typeof module&&module.exports?module.exports=a:window.median=a})();\n","import quickSelectMedian from 'median-quickselect';\nimport isArray from 'is-any-array';\n\n/**\n * Computes the median of the given values\n * @param {Array} input\n * @return {number}\n */\n\nfunction median(input) {\n if (!isArray(input)) {\n throw new TypeError('input must be an array');\n }\n\n if (input.length === 0) {\n throw new TypeError('input must not be empty');\n }\n\n return quickSelectMedian(input.slice());\n}\n\nexport default median;\n","import arrayMean from 'ml-array-mean';\nimport arrayMedian from 'ml-array-median';\n\nimport { RandomForestBase } from './RandomForestBase';\n\nconst selectionMethods = {\n mean: arrayMean,\n median: arrayMedian\n};\n\nconst defaultOptions = {\n maxFeatures: 1.0,\n replacement: false,\n nEstimators: 10,\n treeOptions: {},\n selectionMethod: 'mean',\n seed: 42,\n useSampleBagging: false\n};\n\n/**\n * @class RandomForestRegression\n * @augments RandomForestBase\n */\nexport class RandomForestRegression extends RandomForestBase {\n /**\n * Create a new base random forest for a classifier or regression model.\n * @constructor\n * @param {object} options\n * @param {number} [options.maxFeatures=1.0] - the number of features used on each estimator.\n * * if is an integer it selects maxFeatures elements over the sample features.\n * * if is a float between (0, 1), it takes the percentage of features.\n * @param {boolean} [options.replacement=true] - use replacement over the sample features.\n * @param {number} [options.seed=42] - seed for feature and samples selection, must be a 32-bit integer.\n * @param {number} [options.nEstimators=10] - number of estimator to use.\n * @param {object} [options.treeOptions={}] - options for the tree classifier, see [ml-cart]{@link https://mljs.github.io/decision-tree-cart/}\n * @param {string} [options.selectionMethod=\"mean\"] - the way to calculate the prediction from estimators, \"mean\" and \"median\" are supported.\n * @param {boolean} [options.useSampleBagging=false] - use bagging over training samples.\n * @param {object} model - for load purposes.\n */\n constructor(options, model) {\n if (options === true) {\n super(true, model.baseModel);\n this.selectionMethod = model.selectionMethod;\n } else {\n options = Object.assign({}, defaultOptions, options);\n\n if (\n !(\n options.selectionMethod === 'mean' ||\n options.selectionMethod === 'median'\n )\n ) {\n throw new RangeError(\n `Unsupported selection method ${options.selectionMethod}`\n );\n }\n\n options.isClassifier = false;\n\n super(options);\n this.selectionMethod = options.selectionMethod;\n }\n }\n\n /**\n * retrieve the prediction given the selection method.\n * @param {Array} values - predictions of the estimators.\n * @return {number} prediction\n */\n selection(values) {\n return selectionMethods[this.selectionMethod](values);\n }\n\n /**\n * Export the current model to JSON.\n * @return {object} - Current model.\n */\n toJSON() {\n var baseModel = super.toJSON();\n return {\n baseModel: baseModel,\n selectionMethod: this.selectionMethod,\n name: 'RFRegression'\n };\n }\n\n /**\n * Load a Decision tree classifier with the given model.\n * @param {object} model\n * @return {RandomForestRegression}\n */\n static load(model) {\n if (model.name !== 'RFRegression') {\n throw new RangeError(`Invalid model: ${model.name}`);\n }\n\n return new RandomForestRegression(true, model);\n }\n}\n","import { Matrix, MatrixTransposeView, EVD, SVD } from 'ml-matrix';\n\n/**\n * Creates new PCA (Principal Component Analysis) from the dataset\n * @param {Matrix} dataset - dataset or covariance matrix\n * @param {Object} [options]\n * @param {boolean} [options.isCovarianceMatrix=false] - true if the dataset is a covariance matrix\n * @param {boolean} [options.useCovarianceMatrix=false] - force the use of the covariance matrix instead of singular value decomposition.\n * @param {boolean} [options.center=true] - should the data be centered (subtract the mean)\n * @param {boolean} [options.scale=false] - should the data be scaled (divide by the standard deviation)\n * */\nexport class PCA {\n constructor(dataset, options = {}) {\n if (dataset === true) {\n const model = options;\n this.center = model.center;\n this.scale = model.scale;\n this.means = model.means;\n this.stdevs = model.stdevs;\n this.U = Matrix.checkMatrix(model.U);\n this.S = model.S;\n return;\n }\n\n dataset = new Matrix(dataset);\n\n const {\n isCovarianceMatrix = false,\n center = true,\n scale = false\n } = options;\n\n this.center = center;\n this.scale = scale;\n this.means = null;\n this.stdevs = null;\n\n if (isCovarianceMatrix) {\n // user provided a covariance matrix instead of dataset\n this._computeFromCovarianceMatrix(dataset);\n return;\n }\n\n var useCovarianceMatrix;\n if (typeof options.useCovarianceMatrix === 'boolean') {\n useCovarianceMatrix = options.useCovarianceMatrix;\n } else {\n useCovarianceMatrix = dataset.rows > dataset.columns;\n }\n\n if (useCovarianceMatrix) {\n // user provided a dataset but wants us to compute and use the covariance matrix\n this._adjust(dataset);\n const covarianceMatrix = new MatrixTransposeView(dataset)\n .mmul(dataset)\n .div(dataset.rows - 1);\n this._computeFromCovarianceMatrix(covarianceMatrix);\n } else {\n this._adjust(dataset);\n var svd = new SVD(dataset, {\n computeLeftSingularVectors: false,\n computeRightSingularVectors: true,\n autoTranspose: true\n });\n\n this.U = svd.rightSingularVectors;\n\n const singularValues = svd.diagonal;\n const eigenvalues = [];\n for (const singularValue of singularValues) {\n eigenvalues.push((singularValue * singularValue) / (dataset.rows - 1));\n }\n this.S = eigenvalues;\n }\n }\n\n /**\n * Load a PCA model from JSON\n * @param {Object} model\n * @return {PCA}\n */\n static load(model) {\n if (typeof model.name !== 'string') {\n throw new TypeError('model must have a name property');\n }\n if (model.name !== 'PCA') {\n throw new RangeError(`invalid model: ${model.name}`);\n }\n return new PCA(true, model);\n }\n\n /**\n * Project the dataset into the PCA space\n * @param {Matrix} dataset\n * @param {Object} options\n * @return {Matrix} dataset projected in the PCA space\n */\n predict(dataset, options = {}) {\n const { nComponents = this.U.columns } = options;\n\n dataset = new Matrix(dataset);\n if (this.center) {\n dataset.subRowVector(this.means);\n if (this.scale) {\n dataset.divRowVector(this.stdevs);\n }\n }\n\n var predictions = dataset.mmul(this.U);\n return predictions.subMatrix(0, predictions.rows - 1, 0, nComponents - 1);\n }\n\n /**\n * Returns the proportion of variance for each component\n * @return {[number]}\n */\n getExplainedVariance() {\n var sum = 0;\n for (const s of this.S) {\n sum += s;\n }\n return this.S.map((value) => value / sum);\n }\n\n /**\n * Returns the cumulative proportion of variance\n * @return {[number]}\n */\n getCumulativeVariance() {\n var explained = this.getExplainedVariance();\n for (var i = 1; i < explained.length; i++) {\n explained[i] += explained[i - 1];\n }\n return explained;\n }\n\n /**\n * Returns the Eigenvectors of the covariance matrix\n * @returns {Matrix}\n */\n getEigenvectors() {\n return this.U;\n }\n\n /**\n * Returns the Eigenvalues (on the diagonal)\n * @returns {[number]}\n */\n getEigenvalues() {\n return this.S;\n }\n\n /**\n * Returns the standard deviations of the principal components\n * @returns {[number]}\n */\n getStandardDeviations() {\n return this.S.map((x) => Math.sqrt(x));\n }\n\n /**\n * Returns the loadings matrix\n * @return {Matrix}\n */\n getLoadings() {\n return this.U.transpose();\n }\n\n /**\n * Export the current model to a JSON object\n * @return {Object} model\n */\n toJSON() {\n return {\n name: 'PCA',\n center: this.center,\n scale: this.scale,\n means: this.means,\n stdevs: this.stdevs,\n U: this.U,\n S: this.S\n };\n }\n\n _adjust(dataset) {\n if (this.center) {\n const mean = dataset.mean('column');\n const stdevs = this.scale\n ? dataset.standardDeviation('column', { mean })\n : null;\n this.means = mean;\n dataset.subRowVector(mean);\n if (this.scale) {\n for (var i = 0; i < stdevs.length; i++) {\n if (stdevs[i] === 0) {\n throw new RangeError(\n `Cannot scale the dataset (standard deviation is zero at index ${i}`\n );\n }\n }\n this.stdevs = stdevs;\n dataset.divRowVector(stdevs);\n }\n }\n }\n\n _computeFromCovarianceMatrix(dataset) {\n const evd = new EVD(dataset, { assumeSymmetric: true });\n this.U = evd.eigenvectorMatrix;\n this.U.flipRows();\n this.S = evd.realEigenvalues;\n this.S.reverse();\n }\n}\n","export function squaredEuclidean(p, q) {\r\n let d = 0;\r\n for (let i = 0; i < p.length; i++) {\r\n d += (p[i] - q[i]) * (p[i] - q[i]);\r\n }\r\n return d;\r\n}\r\nexport function euclidean(p, q) {\r\n return Math.sqrt(squaredEuclidean(p, q));\r\n}\r\n","'use strict';\n\n\n/**\n * Computes a distance/similarity matrix given an array of data and a distance/similarity function.\n * @param {Array} data An array of data\n * @param {function} distanceFn A function that accepts two arguments and computes a distance/similarity between them\n * @return {Array} The similarity matrix. The similarity matrix is square and has a size equal to the length of\n * the data array\n */\nfunction distanceMatrix(data, distanceFn) {\n const length = data.length;\n let result = Array.from({length}).map(() => Array.from({length}));\n\n // Compute upper distance matrix\n for (let i = 0; i < length; i++) {\n for (let j = 0; j <= i; j++) {\n result[i][j] = distanceFn(data[i], data[j]);\n }\n }\n\n // Copy to lower distance matrix\n for (let i = 0; i < length; i++) {\n for (let j = i + 1; j < length; j++) {\n result[i][j] = result[j][i];\n }\n }\n\n return result;\n}\n\nmodule.exports = distanceMatrix;\n","// Generated by CoffeeScript 1.8.0\n(function() {\n var Heap, defaultCmp, floor, heapify, heappop, heappush, heappushpop, heapreplace, insort, min, nlargest, nsmallest, updateItem, _siftdown, _siftup;\n\n floor = Math.floor, min = Math.min;\n\n\n /*\n Default comparison function to be used\n */\n\n defaultCmp = function(x, y) {\n if (x < y) {\n return -1;\n }\n if (x > y) {\n return 1;\n }\n return 0;\n };\n\n\n /*\n Insert item x in list a, and keep it sorted assuming a is sorted.\n \n If x is already in a, insert it to the right of the rightmost x.\n \n Optional args lo (default 0) and hi (default a.length) bound the slice\n of a to be searched.\n */\n\n insort = function(a, x, lo, hi, cmp) {\n var mid;\n if (lo == null) {\n lo = 0;\n }\n if (cmp == null) {\n cmp = defaultCmp;\n }\n if (lo < 0) {\n throw new Error('lo must be non-negative');\n }\n if (hi == null) {\n hi = a.length;\n }\n while (lo < hi) {\n mid = floor((lo + hi) / 2);\n if (cmp(x, a[mid]) < 0) {\n hi = mid;\n } else {\n lo = mid + 1;\n }\n }\n return ([].splice.apply(a, [lo, lo - lo].concat(x)), x);\n };\n\n\n /*\n Push item onto heap, maintaining the heap invariant.\n */\n\n heappush = function(array, item, cmp) {\n if (cmp == null) {\n cmp = defaultCmp;\n }\n array.push(item);\n return _siftdown(array, 0, array.length - 1, cmp);\n };\n\n\n /*\n Pop the smallest item off the heap, maintaining the heap invariant.\n */\n\n heappop = function(array, cmp) {\n var lastelt, returnitem;\n if (cmp == null) {\n cmp = defaultCmp;\n }\n lastelt = array.pop();\n if (array.length) {\n returnitem = array[0];\n array[0] = lastelt;\n _siftup(array, 0, cmp);\n } else {\n returnitem = lastelt;\n }\n return returnitem;\n };\n\n\n /*\n Pop and return the current smallest value, and add the new item.\n \n This is more efficient than heappop() followed by heappush(), and can be\n more appropriate when using a fixed size heap. Note that the value\n returned may be larger than item! That constrains reasonable use of\n this routine unless written as part of a conditional replacement:\n if item > array[0]\n item = heapreplace(array, item)\n */\n\n heapreplace = function(array, item, cmp) {\n var returnitem;\n if (cmp == null) {\n cmp = defaultCmp;\n }\n returnitem = array[0];\n array[0] = item;\n _siftup(array, 0, cmp);\n return returnitem;\n };\n\n\n /*\n Fast version of a heappush followed by a heappop.\n */\n\n heappushpop = function(array, item, cmp) {\n var _ref;\n if (cmp == null) {\n cmp = defaultCmp;\n }\n if (array.length && cmp(array[0], item) < 0) {\n _ref = [array[0], item], item = _ref[0], array[0] = _ref[1];\n _siftup(array, 0, cmp);\n }\n return item;\n };\n\n\n /*\n Transform list into a heap, in-place, in O(array.length) time.\n */\n\n heapify = function(array, cmp) {\n var i, _i, _j, _len, _ref, _ref1, _results, _results1;\n if (cmp == null) {\n cmp = defaultCmp;\n }\n _ref1 = (function() {\n _results1 = [];\n for (var _j = 0, _ref = floor(array.length / 2); 0 <= _ref ? _j < _ref : _j > _ref; 0 <= _ref ? _j++ : _j--){ _results1.push(_j); }\n return _results1;\n }).apply(this).reverse();\n _results = [];\n for (_i = 0, _len = _ref1.length; _i < _len; _i++) {\n i = _ref1[_i];\n _results.push(_siftup(array, i, cmp));\n }\n return _results;\n };\n\n\n /*\n Update the position of the given item in the heap.\n This function should be called every time the item is being modified.\n */\n\n updateItem = function(array, item, cmp) {\n var pos;\n if (cmp == null) {\n cmp = defaultCmp;\n }\n pos = array.indexOf(item);\n if (pos === -1) {\n return;\n }\n _siftdown(array, 0, pos, cmp);\n return _siftup(array, pos, cmp);\n };\n\n\n /*\n Find the n largest elements in a dataset.\n */\n\n nlargest = function(array, n, cmp) {\n var elem, result, _i, _len, _ref;\n if (cmp == null) {\n cmp = defaultCmp;\n }\n result = array.slice(0, n);\n if (!result.length) {\n return result;\n }\n heapify(result, cmp);\n _ref = array.slice(n);\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n elem = _ref[_i];\n heappushpop(result, elem, cmp);\n }\n return result.sort(cmp).reverse();\n };\n\n\n /*\n Find the n smallest elements in a dataset.\n */\n\n nsmallest = function(array, n, cmp) {\n var elem, i, los, result, _i, _j, _len, _ref, _ref1, _results;\n if (cmp == null) {\n cmp = defaultCmp;\n }\n if (n * 10 <= array.length) {\n result = array.slice(0, n).sort(cmp);\n if (!result.length) {\n return result;\n }\n los = result[result.length - 1];\n _ref = array.slice(n);\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n elem = _ref[_i];\n if (cmp(elem, los) < 0) {\n insort(result, elem, 0, null, cmp);\n result.pop();\n los = result[result.length - 1];\n }\n }\n return result;\n }\n heapify(array, cmp);\n _results = [];\n for (i = _j = 0, _ref1 = min(n, array.length); 0 <= _ref1 ? _j < _ref1 : _j > _ref1; i = 0 <= _ref1 ? ++_j : --_j) {\n _results.push(heappop(array, cmp));\n }\n return _results;\n };\n\n _siftdown = function(array, startpos, pos, cmp) {\n var newitem, parent, parentpos;\n if (cmp == null) {\n cmp = defaultCmp;\n }\n newitem = array[pos];\n while (pos > startpos) {\n parentpos = (pos - 1) >> 1;\n parent = array[parentpos];\n if (cmp(newitem, parent) < 0) {\n array[pos] = parent;\n pos = parentpos;\n continue;\n }\n break;\n }\n return array[pos] = newitem;\n };\n\n _siftup = function(array, pos, cmp) {\n var childpos, endpos, newitem, rightpos, startpos;\n if (cmp == null) {\n cmp = defaultCmp;\n }\n endpos = array.length;\n startpos = pos;\n newitem = array[pos];\n childpos = 2 * pos + 1;\n while (childpos < endpos) {\n rightpos = childpos + 1;\n if (rightpos < endpos && !(cmp(array[childpos], array[rightpos]) < 0)) {\n childpos = rightpos;\n }\n array[pos] = array[childpos];\n pos = childpos;\n childpos = 2 * pos + 1;\n }\n array[pos] = newitem;\n return _siftdown(array, startpos, pos, cmp);\n };\n\n Heap = (function() {\n Heap.push = heappush;\n\n Heap.pop = heappop;\n\n Heap.replace = heapreplace;\n\n Heap.pushpop = heappushpop;\n\n Heap.heapify = heapify;\n\n Heap.updateItem = updateItem;\n\n Heap.nlargest = nlargest;\n\n Heap.nsmallest = nsmallest;\n\n function Heap(cmp) {\n this.cmp = cmp != null ? cmp : defaultCmp;\n this.nodes = [];\n }\n\n Heap.prototype.push = function(x) {\n return heappush(this.nodes, x, this.cmp);\n };\n\n Heap.prototype.pop = function() {\n return heappop(this.nodes, this.cmp);\n };\n\n Heap.prototype.peek = function() {\n return this.nodes[0];\n };\n\n Heap.prototype.contains = function(x) {\n return this.nodes.indexOf(x) !== -1;\n };\n\n Heap.prototype.replace = function(x) {\n return heapreplace(this.nodes, x, this.cmp);\n };\n\n Heap.prototype.pushpop = function(x) {\n return heappushpop(this.nodes, x, this.cmp);\n };\n\n Heap.prototype.heapify = function() {\n return heapify(this.nodes, this.cmp);\n };\n\n Heap.prototype.updateItem = function(x) {\n return updateItem(this.nodes, x, this.cmp);\n };\n\n Heap.prototype.clear = function() {\n return this.nodes = [];\n };\n\n Heap.prototype.empty = function() {\n return this.nodes.length === 0;\n };\n\n Heap.prototype.size = function() {\n return this.nodes.length;\n };\n\n Heap.prototype.clone = function() {\n var heap;\n heap = new Heap();\n heap.nodes = this.nodes.slice(0);\n return heap;\n };\n\n Heap.prototype.toArray = function() {\n return this.nodes.slice(0);\n };\n\n Heap.prototype.insert = Heap.prototype.push;\n\n Heap.prototype.top = Heap.prototype.peek;\n\n Heap.prototype.front = Heap.prototype.peek;\n\n Heap.prototype.has = Heap.prototype.contains;\n\n Heap.prototype.copy = Heap.prototype.clone;\n\n return Heap;\n\n })();\n\n (function(root, factory) {\n if (typeof define === 'function' && define.amd) {\n return define([], factory);\n } else if (typeof exports === 'object') {\n return module.exports = factory();\n } else {\n return root.Heap = factory();\n }\n })(this, function() {\n return Heap;\n });\n\n}).call(this);\n","module.exports = require('./lib/heap');\n","import Heap from 'heap';\n\nexport default class Cluster {\n constructor() {\n this.children = [];\n this.distance = -1;\n this.index = [];\n }\n\n /**\n * Creates an array of values where maximum distance smaller than the threshold\n * @param {number} threshold\n * @return {Array }\n */\n cut(threshold) {\n if (threshold < 0) throw new RangeError('Threshold too small');\n var root = new Cluster();\n root.children = this.children;\n root.distance = this.distance;\n root.index = this.index;\n var list = [root];\n var ans = [];\n while (list.length > 0) {\n var aux = list.shift();\n if (threshold >= aux.distance) {\n ans.push(aux);\n } else {\n list = list.concat(aux.children);\n }\n }\n return ans;\n }\n\n /**\n * Merge the leaves in the minimum way to have 'minGroups' number of clusters\n * @param {number} minGroups - Them minimum number of children the first level of the tree should have\n * @return {Cluster}\n */\n group(minGroups) {\n if (!Number.isInteger(minGroups) || minGroups < 1) {\n throw new RangeError('Number of groups must be a positive integer');\n }\n\n const heap = new Heap(function (a, b) {\n return b.distance - a.distance;\n });\n\n heap.push(this);\n\n while (heap.size() < minGroups) {\n var first = heap.pop();\n if (first.children.length === 0) {\n break;\n }\n first.children.forEach((child) => heap.push(child));\n }\n\n var root = new Cluster();\n root.children = heap.toArray();\n root.distance = this.distance;\n\n return root;\n }\n\n /**\n * Traverses the tree depth-first and provide callback to be called on each individual node\n * @param {function} cb - The callback to be called on each node encounter\n * @type {Cluster}\n */\n traverse(cb) {\n function visit(root, callback) {\n callback(root);\n if (root.children) {\n for (var i = root.children.length - 1; i >= 0; i--) {\n visit(root.children[i], callback);\n }\n }\n }\n visit(this, cb);\n }\n}\n","import Cluster from './Cluster';\n\nexport default class ClusterLeaf extends Cluster {\n constructor(index) {\n super();\n this.index = index;\n this.distance = 0;\n this.children = [];\n }\n}\n","import { euclidean } from 'ml-distance-euclidean';\nimport distanceMatrix from 'ml-distance-matrix';\n\nimport ClusterLeaf from './ClusterLeaf';\nimport Cluster from './Cluster';\n\n/**\n * @private\n * @param cluster1\n * @param cluster2\n * @param disFun\n * @returns {number}\n */\nfunction simpleLink(cluster1, cluster2, disFun) {\n var m = 10e100;\n for (var i = 0; i < cluster1.length; i++) {\n for (var j = 0; j < cluster2.length; j++) {\n var d = disFun[cluster1[i]][cluster2[j]];\n m = Math.min(d, m);\n }\n }\n return m;\n}\n\n/**\n * @private\n * @param cluster1\n * @param cluster2\n * @param disFun\n * @returns {number}\n */\nfunction completeLink(cluster1, cluster2, disFun) {\n var m = -1;\n for (var i = 0; i < cluster1.length; i++) {\n for (var j = 0; j < cluster2.length; j++) {\n var d = disFun[cluster1[i]][cluster2[j]];\n m = Math.max(d, m);\n }\n }\n return m;\n}\n\n/**\n * @private\n * @param cluster1\n * @param cluster2\n * @param disFun\n * @returns {number}\n */\nfunction averageLink(cluster1, cluster2, disFun) {\n var m = 0;\n for (var i = 0; i < cluster1.length; i++) {\n for (var j = 0; j < cluster2.length; j++) {\n m += disFun[cluster1[i]][cluster2[j]];\n }\n }\n return m / (cluster1.length * cluster2.length);\n}\n\n/**\n * @private\n * @param cluster1\n * @param cluster2\n * @param disFun\n * @returns {*}\n */\nfunction centroidLink(cluster1, cluster2, disFun) {\n var dist = new Array(cluster1.length * cluster2.length);\n for (var i = 0; i < cluster1.length; i++) {\n for (var j = 0; j < cluster2.length; j++) {\n dist[i * cluster2.length + j] = disFun[cluster1[i]][cluster2[j]];\n }\n }\n return median(dist);\n}\n\n/**\n * @private\n * @param cluster1\n * @param cluster2\n * @param disFun\n * @returns {number}\n */\nfunction wardLink(cluster1, cluster2, disFun) {\n return (\n (centroidLink(cluster1, cluster2, disFun) *\n cluster1.length *\n cluster2.length) /\n (cluster1.length + cluster2.length)\n );\n}\n\nfunction compareNumbers(a, b) {\n return a - b;\n}\n\nfunction median(values, alreadySorted) {\n if (alreadySorted === undefined) alreadySorted = false;\n if (!alreadySorted) {\n values = [].concat(values).sort(compareNumbers);\n }\n var l = values.length;\n var half = Math.floor(l / 2);\n if (l % 2 === 0) {\n return (values[half - 1] + values[half]) * 0.5;\n } else {\n return values[half];\n }\n}\n\n/**\n * Continuously merge nodes that have the least dissimilarity\n * @param {Array>} distance - Array of points to be clustered\n * @param {object} [options]\n * @param {Function} [options.distanceFunction]\n * @param {string} [options.method]\n * @param {boolean} [options.isDistanceMatrix]\n * @option isDistanceMatrix: Is the input a distance matrix?\n * @constructor\n */\nexport function agnes(data, options = {}) {\n const {\n distanceFunction = euclidean,\n method = 'single',\n isDistanceMatrix = false\n } = options;\n let methodFunc;\n\n var len = data.length;\n var distance = data; // If source\n if (!isDistanceMatrix) {\n distance = distanceMatrix(data, distanceFunction);\n }\n\n // allows to use a string or a given function\n if (typeof method === 'string') {\n switch (method) {\n case 'single':\n methodFunc = simpleLink;\n break;\n case 'complete':\n methodFunc = completeLink;\n break;\n case 'average':\n methodFunc = averageLink;\n break;\n case 'centroid':\n methodFunc = centroidLink;\n break;\n case 'ward':\n methodFunc = wardLink;\n break;\n default:\n throw new RangeError(`unknown clustering method: ${method}`);\n }\n } else if (typeof method !== 'function') {\n throw new TypeError('method must be a string or function');\n }\n\n var list = new Array(len);\n for (var i = 0; i < distance.length; i++) {\n list[i] = new ClusterLeaf(i);\n }\n var min = 10e5;\n var d = {};\n var dis = 0;\n\n while (list.length > 1) {\n // calculates the minimum distance\n d = {};\n min = 10e5;\n for (var j = 0; j < list.length; j++) {\n for (var k = j + 1; k < list.length; k++) {\n var fdistance, sdistance;\n if (list[j] instanceof ClusterLeaf) {\n fdistance = [list[j].index];\n } else {\n fdistance = new Array(list[j].index.length);\n for (var e = 0; e < fdistance.length; e++) {\n fdistance[e] = list[j].index[e].index;\n }\n }\n if (list[k] instanceof ClusterLeaf) {\n sdistance = [list[k].index];\n } else {\n sdistance = new Array(list[k].index.length);\n for (var f = 0; f < sdistance.length; f++) {\n sdistance[f] = list[k].index[f].index;\n }\n }\n dis = methodFunc(fdistance, sdistance, distance).toFixed(4);\n if (dis in d) {\n d[dis].push([list[j], list[k]]);\n } else {\n d[dis] = [[list[j], list[k]]];\n }\n min = Math.min(dis, min);\n }\n }\n // cluster dots\n var dmin = d[min.toFixed(4)];\n var clustered = new Array(dmin.length);\n var count = 0;\n while (dmin.length > 0) {\n let aux = dmin.shift();\n const filterInt = function (n) {\n return aux.indexOf(n) !== -1;\n };\n const filterDiff = function (n) {\n return aux.indexOf(n) === -1;\n };\n for (var q = 0; q < dmin.length; q++) {\n var int = dmin[q].filter(filterInt);\n if (int.length > 0) {\n var diff = dmin[q].filter(filterDiff);\n aux = aux.concat(diff);\n dmin.splice(q--, 1);\n }\n }\n clustered[count++] = aux;\n }\n clustered.length = count;\n\n for (var ii = 0; ii < clustered.length; ii++) {\n var obj = new Cluster();\n obj.children = clustered[ii].concat();\n obj.distance = min;\n obj.index = new Array(len);\n var indCount = 0;\n for (var jj = 0; jj < clustered[ii].length; jj++) {\n if (clustered[ii][jj] instanceof ClusterLeaf) {\n obj.index[indCount++] = clustered[ii][jj];\n } else {\n indCount += clustered[ii][jj].index.length;\n obj.index = clustered[ii][jj].index.concat(obj.index);\n }\n list.splice(list.indexOf(clustered[ii][jj]), 1);\n }\n obj.index.length = indCount;\n list.push(obj);\n }\n }\n return list[0];\n}\n","import { euclidean } from 'ml-distance-euclidean';\n\nimport ClusterLeaf from './ClusterLeaf';\nimport Cluster from './Cluster';\n\n/**\n * @private\n * Returns the most distant point and his distance\n * @param {Array >} splitting - Clusters to split\n * @param {Array >} data - Original data\n * @param {function} disFun - Distance function\n * @returns {{d: number, p: number}} - d: maximum difference between points, p: the point more distant\n */\nfunction diff(splitting, data, disFun) {\n var ans = {\n d: 0,\n p: 0\n };\n\n var Ci = new Array(splitting[0].length);\n for (var e = 0; e < splitting[0].length; e++) {\n Ci[e] = data[splitting[0][e]];\n }\n var Cj = new Array(splitting[1].length);\n for (var f = 0; f < splitting[1].length; f++) {\n Cj[f] = data[splitting[1][f]];\n }\n\n var dist, ndist;\n for (var i = 0; i < Ci.length; i++) {\n dist = 0;\n for (var j = 0; j < Ci.length; j++) {\n if (i !== j) {\n dist += disFun(Ci[i], Ci[j]);\n }\n }\n dist /= Ci.length - 1;\n ndist = 0;\n for (var k = 0; k < Cj.length; k++) {\n ndist += disFun(Ci[i], Cj[k]);\n }\n ndist /= Cj.length;\n if (dist - ndist > ans.d) {\n ans.d = dist - ndist;\n ans.p = i;\n }\n }\n return ans;\n}\n\n/**\n * @private\n * Intra-cluster distance\n * @param {Array} index\n * @param {Array} data\n * @param {function} disFun\n * @returns {number}\n */\nfunction intrDist(index, data, disFun) {\n var dist = 0;\n var count = 0;\n for (var i = 0; i < index.length; i++) {\n for (var j = i; j < index.length; j++) {\n dist += disFun(data[index[i].index], data[index[j].index]);\n count++;\n }\n }\n return dist / count;\n}\n\n/**\n * Splits the higher level clusters\n * @param {Array >} data - Array of points to be clustered\n * @param {object} [options]\n * @param {Function} [options.distanceFunction]\n * @constructor\n */\nexport function diana(data, options = {}) {\n const { distanceFunction = euclidean } = options;\n var tree = new Cluster();\n tree.children = new Array(data.length);\n tree.index = new Array(data.length);\n for (var ind = 0; ind < data.length; ind++) {\n tree.children[ind] = new ClusterLeaf(ind);\n tree.index[ind] = new ClusterLeaf(ind);\n }\n\n tree.distance = intrDist(tree.index, data, distanceFunction);\n var m, M, clId, dist, rebel;\n var list = [tree];\n while (list.length > 0) {\n M = 0;\n clId = 0;\n for (var i = 0; i < list.length; i++) {\n m = 0;\n for (var j = 0; j < list[i].length; j++) {\n for (var l = j + 1; l < list[i].length; l++) {\n m = Math.max(\n distanceFunction(\n data[list[i].index[j].index],\n data[list[i].index[l].index]\n ),\n m\n );\n }\n }\n if (m > M) {\n M = m;\n clId = i;\n }\n }\n M = 0;\n if (list[clId].index.length === 2) {\n list[clId].children = [list[clId].index[0], list[clId].index[1]];\n list[clId].distance = distanceFunction(\n data[list[clId].index[0].index],\n data[list[clId].index[1].index]\n );\n } else if (list[clId].index.length === 3) {\n list[clId].children = [\n list[clId].index[0],\n list[clId].index[1],\n list[clId].index[2]\n ];\n var d = [\n distanceFunction(\n data[list[clId].index[0].index],\n data[list[clId].index[1].index]\n ),\n distanceFunction(\n data[list[clId].index[1].index],\n data[list[clId].index[2].index]\n )\n ];\n list[clId].distance = (d[0] + d[1]) / 2;\n } else {\n var C = new Cluster();\n var sG = new Cluster();\n var splitting = [new Array(list[clId].index.length), []];\n for (var spl = 0; spl < splitting[0].length; spl++) {\n splitting[0][spl] = spl;\n }\n for (var ii = 0; ii < splitting[0].length; ii++) {\n dist = 0;\n for (var jj = 0; jj < splitting[0].length; jj++) {\n if (ii !== jj) {\n dist += distanceFunction(\n data[list[clId].index[splitting[0][jj]].index],\n data[list[clId].index[splitting[0][ii]].index]\n );\n }\n }\n dist /= splitting[0].length - 1;\n if (dist > M) {\n M = dist;\n rebel = ii;\n }\n }\n splitting[1] = [rebel];\n splitting[0].splice(rebel, 1);\n dist = diff(splitting, data, distanceFunction);\n while (dist.d > 0) {\n splitting[1].push(splitting[0][dist.p]);\n splitting[0].splice(dist.p, 1);\n dist = diff(splitting, data, distanceFunction);\n }\n var fData = new Array(splitting[0].length);\n C.index = new Array(splitting[0].length);\n for (var e = 0; e < fData.length; e++) {\n fData[e] = data[list[clId].index[splitting[0][e]].index];\n C.index[e] = list[clId].index[splitting[0][e]];\n C.children[e] = list[clId].index[splitting[0][e]];\n }\n var sData = new Array(splitting[1].length);\n sG.index = new Array(splitting[1].length);\n for (var f = 0; f < sData.length; f++) {\n sData[f] = data[list[clId].index[splitting[1][f]].index];\n sG.index[f] = list[clId].index[splitting[1][f]];\n sG.children[f] = list[clId].index[splitting[1][f]];\n }\n C.distance = intrDist(C.index, data, distanceFunction);\n sG.distance = intrDist(sG.index, data, distanceFunction);\n list.push(C);\n list.push(sG);\n list[clId].children = [C, sG];\n }\n list.splice(clId, 1);\n }\n return tree;\n}\n","'use strict';\nimport { squaredEuclidean } from 'ml-distance-euclidean';\nconst defaultOptions = {\n distanceFunction: squaredEuclidean\n};\nexport default function nearestVector(listVectors, vector, options = defaultOptions) {\n const distanceFunction = options.distanceFunction || defaultOptions.distanceFunction;\n const similarityFunction = options.similarityFunction || defaultOptions.similarityFunction;\n let vectorIndex = -1;\n if (typeof similarityFunction === 'function') {\n // maximum similarity\n let maxSim = Number.MIN_VALUE;\n for (let j = 0; j < listVectors.length; j++) {\n const sim = similarityFunction(vector, listVectors[j]);\n if (sim > maxSim) {\n maxSim = sim;\n vectorIndex = j;\n }\n }\n }\n else if (typeof distanceFunction === 'function') {\n // minimum distance\n let minDist = Number.MAX_VALUE;\n for (let i = 0; i < listVectors.length; i++) {\n const dist = distanceFunction(vector, listVectors[i]);\n if (dist < minDist) {\n minDist = dist;\n vectorIndex = i;\n }\n }\n }\n else {\n throw new Error(\"A similarity or distance function it's required\");\n }\n return vectorIndex;\n}\nexport function findNearestVector(vectorList, vector, options = defaultOptions) {\n const index = nearestVector(vectorList, vector, options);\n return vectorList[index];\n}\n","import nearestVector from 'ml-nearest-vector';\n\n/**\n * Calculates the distance matrix for a given array of points\n * @ignore\n * @param {Array>} data - the [x,y,z,...] points to cluster\n * @param {function} distance - Distance function to use between the points\n * @return {Array>} - matrix with the distance values\n */\nexport function calculateDistanceMatrix(data, distance) {\n var distanceMatrix = new Array(data.length);\n for (var i = 0; i < data.length; ++i) {\n for (var j = i; j < data.length; ++j) {\n if (!distanceMatrix[i]) {\n distanceMatrix[i] = new Array(data.length);\n }\n if (!distanceMatrix[j]) {\n distanceMatrix[j] = new Array(data.length);\n }\n const dist = distance(data[i], data[j]);\n distanceMatrix[i][j] = dist;\n distanceMatrix[j][i] = dist;\n }\n }\n return distanceMatrix;\n}\n\n/**\n * Updates the cluster identifier based in the new data\n * @ignore\n * @param {Array>} data - the [x,y,z,...] points to cluster\n * @param {Array>} centers - the K centers in format [x,y,z,...]\n * @param {Array } clusterID - the cluster identifier for each data dot\n * @param {function} distance - Distance function to use between the points\n * @return {Array} the cluster identifier for each data dot\n */\nexport function updateClusterID(data, centers, clusterID, distance) {\n for (var i = 0; i < data.length; i++) {\n clusterID[i] = nearestVector(centers, data[i], {\n distanceFunction: distance\n });\n }\n return clusterID;\n}\n\n/**\n * Update the center values based in the new configurations of the clusters\n * @ignore\n * @param {Array>} prevCenters - Centroids from the previous iteration\n * @param {Array >} data - the [x,y,z,...] points to cluster\n * @param {Array } clusterID - the cluster identifier for each data dot\n * @param {number} K - Number of clusters\n * @return {Array} he K centers in format [x,y,z,...]\n */\nexport function updateCenters(prevCenters, data, clusterID, K) {\n const nDim = data[0].length;\n\n // copy previous centers\n var centers = new Array(K);\n var centersLen = new Array(K);\n for (var i = 0; i < K; i++) {\n centers[i] = new Array(nDim);\n centersLen[i] = 0;\n for (var j = 0; j < nDim; j++) {\n centers[i][j] = 0;\n }\n }\n\n // add the value for all dimensions of the point\n for (var l = 0; l < data.length; l++) {\n centersLen[clusterID[l]]++;\n for (var dim = 0; dim < nDim; dim++) {\n centers[clusterID[l]][dim] += data[l][dim];\n }\n }\n\n // divides by length\n for (var id = 0; id < K; id++) {\n for (var d = 0; d < nDim; d++) {\n if (centersLen[id]) {\n centers[id][d] /= centersLen[id];\n } else {\n centers[id][d] = prevCenters[id][d];\n }\n }\n }\n return centers;\n}\n\n/**\n * The centers have moved more than the tolerance value?\n * @ignore\n * @param {Array>} centers - the K centers in format [x,y,z,...]\n * @param {Array>} oldCenters - the K old centers in format [x,y,z,...]\n * @param {function} distanceFunction - Distance function to use between the points\n * @param {number} tolerance - Allowed distance for the centroids to move\n * @return {boolean}\n */\nexport function hasConverged(centers, oldCenters, distanceFunction, tolerance) {\n for (var i = 0; i < centers.length; i++) {\n if (distanceFunction(centers[i], oldCenters[i]) > tolerance) {\n return false;\n }\n }\n return true;\n}\n","const LOOP = 8;\nconst FLOAT_MUL = 1 / 16777216;\nconst sh1 = 15;\nconst sh2 = 18;\nconst sh3 = 11;\nfunction multiply_uint32(n, m) {\n n >>>= 0;\n m >>>= 0;\n const nlo = n & 0xffff;\n const nhi = n - nlo;\n return (((nhi * m) >>> 0) + nlo * m) >>> 0;\n}\nexport default class XSadd {\n constructor(seed = Date.now()) {\n this.state = new Uint32Array(4);\n this.init(seed);\n this.random = this.getFloat.bind(this);\n }\n /**\n * Returns a 32-bit integer r (0 <= r < 2^32)\n */\n getUint32() {\n this.nextState();\n return (this.state[3] + this.state[2]) >>> 0;\n }\n /**\n * Returns a floating point number r (0.0 <= r < 1.0)\n */\n getFloat() {\n return (this.getUint32() >>> 8) * FLOAT_MUL;\n }\n init(seed) {\n if (!Number.isInteger(seed)) {\n throw new TypeError('seed must be an integer');\n }\n this.state[0] = seed;\n this.state[1] = 0;\n this.state[2] = 0;\n this.state[3] = 0;\n for (let i = 1; i < LOOP; i++) {\n this.state[i & 3] ^=\n (i +\n multiply_uint32(1812433253, this.state[(i - 1) & 3] ^ ((this.state[(i - 1) & 3] >>> 30) >>> 0))) >>>\n 0;\n }\n this.periodCertification();\n for (let i = 0; i < LOOP; i++) {\n this.nextState();\n }\n }\n periodCertification() {\n if (this.state[0] === 0 &&\n this.state[1] === 0 &&\n this.state[2] === 0 &&\n this.state[3] === 0) {\n this.state[0] = 88; // X\n this.state[1] = 83; // S\n this.state[2] = 65; // A\n this.state[3] = 68; // D\n }\n }\n nextState() {\n let t = this.state[0];\n t ^= t << sh1;\n t ^= t >>> sh2;\n t ^= this.state[3] << sh3;\n this.state[0] = this.state[1];\n this.state[1] = this.state[2];\n this.state[2] = this.state[3];\n this.state[3] = t;\n }\n}\n","const PROB_TOLERANCE = 0.00000001;\nfunction randomChoice(values, options = {}, random = Math.random) {\n const { size = 1, replace = false, probabilities } = options;\n let valuesArr;\n let cumSum;\n if (typeof values === 'number') {\n valuesArr = getArray(values);\n }\n else {\n valuesArr = values.slice();\n }\n if (probabilities) {\n if (!replace) {\n throw new Error('choice with probabilities and no replacement is not implemented');\n }\n // check input is sane\n if (probabilities.length !== valuesArr.length) {\n throw new Error('the length of probabilities option should be equal to the number of choices');\n }\n cumSum = [probabilities[0]];\n for (let i = 1; i < probabilities.length; i++) {\n cumSum[i] = cumSum[i - 1] + probabilities[i];\n }\n if (Math.abs(1 - cumSum[cumSum.length - 1]) > PROB_TOLERANCE) {\n throw new Error(`probabilities should sum to 1, but instead sums to ${cumSum[cumSum.length - 1]}`);\n }\n }\n if (replace === false && size > valuesArr.length) {\n throw new Error('size option is too large');\n }\n const result = [];\n for (let i = 0; i < size; i++) {\n const index = randomIndex(valuesArr.length, random, cumSum);\n result.push(valuesArr[index]);\n if (!replace) {\n valuesArr.splice(index, 1);\n }\n }\n return result;\n}\nfunction getArray(n) {\n const arr = [];\n for (let i = 0; i < n; i++) {\n arr.push(i);\n }\n return arr;\n}\nfunction randomIndex(n, random, cumSum) {\n const rand = random();\n if (!cumSum) {\n return Math.floor(rand * n);\n }\n else {\n let idx = 0;\n while (rand > cumSum[idx]) {\n idx++;\n }\n return idx;\n }\n}\nexport default randomChoice;\n","// tslint:disable-next-line\nimport XSAdd from 'ml-xsadd';\nimport choice from './choice';\n/**\n * @classdesc Random class\n */\nexport default class Random {\n /**\n * @param [seedOrRandom=Math.random] - Control the random number generator used by the Random class instance. Pass a random number generator function with a uniform distribution over the half-open interval [0, 1[. If seed will pass it to ml-xsadd to create a seeded random number generator. If undefined will use Math.random.\n */\n constructor(seedOrRandom = Math.random) {\n if (typeof seedOrRandom === 'number') {\n const xsadd = new XSAdd(seedOrRandom);\n this.randomGenerator = xsadd.random;\n }\n else {\n this.randomGenerator = seedOrRandom;\n }\n }\n choice(values, options) {\n if (typeof values === 'number') {\n return choice(values, options, this.randomGenerator);\n }\n return choice(values, options, this.randomGenerator);\n }\n /**\n * Draw a random number from a uniform distribution on [0,1)\n * @return The random number\n */\n random() {\n return this.randomGenerator();\n }\n /**\n * Draw a random integer from a uniform distribution on [low, high). If only low is specified, the number is drawn on [0, low)\n * @param low - The lower bound of the uniform distribution interval.\n * @param high - The higher bound of the uniform distribution interval.\n */\n randInt(low, high) {\n if (high === undefined) {\n high = low;\n low = 0;\n }\n return low + Math.floor(this.randomGenerator() * (high - low));\n }\n /**\n * Draw several random number from a uniform distribution on [0, 1)\n * @param size - The number of number to draw\n * @return - The list of drawn numbers.\n */\n randomSample(size) {\n const result = [];\n for (let i = 0; i < size; i++) {\n result.push(this.random());\n }\n return result;\n }\n}\n","import Random from 'ml-random';\nimport { squaredEuclidean } from 'ml-distance-euclidean';\nimport { Matrix } from 'ml-matrix';\n\n/**\n * Choose K different random points from the original data\n * @ignore\n * @param {Array>} data - Points in the format to cluster [x,y,z,...]\n * @param {number} K - number of clusters\n * @param {number} seed - seed for random number generation\n * @return {Array>} - Initial random points\n */\nexport function random(data, K, seed) {\n const random = new Random(seed);\n return random.choice(data, { size: K });\n}\n\n/**\n * Chooses the most distant points to a first random pick\n * @ignore\n * @param {Array>} data - Points in the format to cluster [x,y,z,...]\n * @param {number} K - number of clusters\n * @param {Array>} distanceMatrix - matrix with the distance values\n * @param {number} seed - seed for random number generation\n * @return {Array>} - Initial random points\n */\nexport function mostDistant(data, K, distanceMatrix, seed) {\n const random = new Random(seed);\n var ans = new Array(K);\n // chooses a random point as initial cluster\n ans[0] = Math.floor(random.random() * data.length);\n\n if (K > 1) {\n // chooses the more distant point\n var maxDist = { dist: -1, index: -1 };\n for (var l = 0; l < data.length; ++l) {\n if (distanceMatrix[ans[0]][l] > maxDist.dist) {\n maxDist.dist = distanceMatrix[ans[0]][l];\n maxDist.index = l;\n }\n }\n ans[1] = maxDist.index;\n\n if (K > 2) {\n // chooses the set of points that maximises the min distance\n for (var k = 2; k < K; ++k) {\n var center = { dist: -1, index: -1 };\n for (var m = 0; m < data.length; ++m) {\n // minimum distance to centers\n var minDistCent = { dist: Number.MAX_VALUE, index: -1 };\n for (var n = 0; n < k; ++n) {\n if (\n distanceMatrix[n][m] < minDistCent.dist &&\n ans.indexOf(m) === -1\n ) {\n minDistCent = {\n dist: distanceMatrix[n][m],\n index: m\n };\n }\n }\n\n if (\n minDistCent.dist !== Number.MAX_VALUE &&\n minDistCent.dist > center.dist\n ) {\n center = Object.assign({}, minDistCent);\n }\n }\n\n ans[k] = center.index;\n }\n }\n }\n\n return ans.map((index) => data[index]);\n}\n\n// Implementation inspired from scikit\nexport function kmeanspp(X, K, options = {}) {\n X = new Matrix(X);\n const nSamples = X.rows;\n const random = new Random(options.seed);\n // Set the number of trials\n const centers = [];\n const localTrials = options.localTrials || 2 + Math.floor(Math.log(K));\n\n // Pick the first center at random from the dataset\n const firstCenterIdx = random.randInt(nSamples);\n centers.push(X.getRow(firstCenterIdx));\n\n // Init closest distances\n let closestDistSquared = new Matrix(1, X.rows);\n for (let i = 0; i < X.rows; i++) {\n closestDistSquared.set(0, i, squaredEuclidean(X.getRow(i), centers[0]));\n }\n let cumSumClosestDistSquared = [cumSum(closestDistSquared.getRow(0))];\n const factor = 1 / cumSumClosestDistSquared[0][nSamples - 1];\n let probabilities = Matrix.mul(closestDistSquared, factor);\n\n // Iterate over the remaining centers\n for (let i = 1; i < K; i++) {\n const candidateIdx = random.choice(nSamples, {\n replace: true,\n size: localTrials,\n probabilities: probabilities[0]\n });\n\n const candidates = X.selection(candidateIdx, range(X.columns));\n const distanceToCandidates = euclideanDistances(candidates, X);\n\n let bestCandidate;\n let bestPot;\n let bestDistSquared;\n\n for (let j = 0; j < localTrials; j++) {\n const newDistSquared = Matrix.min(closestDistSquared, [distanceToCandidates.getRow(j)]);\n const newPot = newDistSquared.sum();\n if (bestCandidate === undefined || newPot < bestPot) {\n bestCandidate = candidateIdx[j];\n bestPot = newPot;\n bestDistSquared = newDistSquared;\n }\n }\n centers[i] = X.getRow(bestCandidate);\n closestDistSquared = bestDistSquared;\n cumSumClosestDistSquared = [cumSum(closestDistSquared.getRow(0))];\n probabilities = Matrix.mul(\n closestDistSquared,\n 1 / cumSumClosestDistSquared[0][nSamples - 1]\n );\n }\n return centers;\n}\n\nfunction euclideanDistances(A, B) {\n const result = new Matrix(A.rows, B.rows);\n for (let i = 0; i < A.rows; i++) {\n for (let j = 0; j < B.rows; j++) {\n result.set(i, j, squaredEuclidean(A.getRow(i), B.getRow(j)));\n }\n }\n return result;\n}\n\nfunction range(l) {\n let r = [];\n for (let i = 0; i < l; i++) {\n r.push(i);\n }\n return r;\n}\n\nfunction cumSum(arr) {\n let cumSum = [arr[0]];\n for (let i = 1; i < arr.length; i++) {\n cumSum[i] = cumSum[i - 1] + arr[i];\n }\n return cumSum;\n}\n","import { updateClusterID } from './utils';\n\nconst distanceSymbol = Symbol('distance');\n\nexport default class KMeansResult {\n /**\n * Result of the kmeans algorithm\n * @param {Array} clusters - the cluster identifier for each data dot\n * @param {Array>} centroids - the K centers in format [x,y,z,...], the error and size of the cluster\n * @param {boolean} converged - Converge criteria satisfied\n * @param {number} iterations - Current number of iterations\n * @param {function} distance - (*Private*) Distance function to use between the points\n * @constructor\n */\n constructor(clusters, centroids, converged, iterations, distance) {\n this.clusters = clusters;\n this.centroids = centroids;\n this.converged = converged;\n this.iterations = iterations;\n this[distanceSymbol] = distance;\n }\n\n /**\n * Allows to compute for a new array of points their cluster id\n * @param {Array>} data - the [x,y,z,...] points to cluster\n * @return {Array} - cluster id for each point\n */\n nearest(data) {\n const clusterID = new Array(data.length);\n const centroids = this.centroids.map(function (centroid) {\n return centroid.centroid;\n });\n return updateClusterID(data, centroids, clusterID, this[distanceSymbol]);\n }\n\n /**\n * Returns a KMeansResult with the error and size of the cluster\n * @ignore\n * @param {Array>} data - the [x,y,z,...] points to cluster\n * @return {KMeansResult}\n */\n computeInformation(data) {\n var enrichedCentroids = this.centroids.map(function (centroid) {\n return {\n centroid: centroid,\n error: 0,\n size: 0\n };\n });\n\n for (var i = 0; i < data.length; i++) {\n enrichedCentroids[this.clusters[i]].error += this[distanceSymbol](\n data[i],\n this.centroids[this.clusters[i]]\n );\n enrichedCentroids[this.clusters[i]].size++;\n }\n\n for (var j = 0; j < this.centroids.length; j++) {\n if (enrichedCentroids[j].size) {\n enrichedCentroids[j].error /= enrichedCentroids[j].size;\n } else {\n enrichedCentroids[j].error = null;\n }\n }\n\n return new KMeansResult(\n this.clusters,\n enrichedCentroids,\n this.converged,\n this.iterations,\n this[distanceSymbol]\n );\n }\n}\n","import { squaredEuclidean } from 'ml-distance-euclidean';\n\nimport {\n updateClusterID,\n updateCenters,\n hasConverged,\n calculateDistanceMatrix\n} from './utils';\nimport { mostDistant, random, kmeanspp } from './initialization';\nimport KMeansResult from './KMeansResult';\n\nconst defaultOptions = {\n maxIterations: 100,\n tolerance: 1e-6,\n withIterations: false,\n initialization: 'kmeans++',\n distanceFunction: squaredEuclidean\n};\n\n/**\n * Each step operation for kmeans\n * @ignore\n * @param {Array>} centers - K centers in format [x,y,z,...]\n * @param {Array>} data - Points [x,y,z,...] to cluster\n * @param {Array} clusterID - Cluster identifier for each data dot\n * @param {number} K - Number of clusters\n * @param {object} [options] - Option object\n * @param {number} iterations - Current number of iterations\n * @return {KMeansResult}\n */\nfunction step(centers, data, clusterID, K, options, iterations) {\n clusterID = updateClusterID(\n data,\n centers,\n clusterID,\n options.distanceFunction\n );\n var newCenters = updateCenters(centers, data, clusterID, K);\n var converged = hasConverged(\n newCenters,\n centers,\n options.distanceFunction,\n options.tolerance\n );\n return new KMeansResult(\n clusterID,\n newCenters,\n converged,\n iterations,\n options.distanceFunction\n );\n}\n\n/**\n * Generator version for the algorithm\n * @ignore\n * @param {Array>} centers - K centers in format [x,y,z,...]\n * @param {Array>} data - Points [x,y,z,...] to cluster\n * @param {Array} clusterID - Cluster identifier for each data dot\n * @param {number} K - Number of clusters\n * @param {object} [options] - Option object\n */\nfunction* kmeansGenerator(centers, data, clusterID, K, options) {\n var converged = false;\n var stepNumber = 0;\n var stepResult;\n while (!converged && stepNumber < options.maxIterations) {\n stepResult = step(centers, data, clusterID, K, options, ++stepNumber);\n yield stepResult.computeInformation(data);\n converged = stepResult.converged;\n centers = stepResult.centroids;\n }\n}\n\n/**\n * K-means algorithm\n * @param {Array>} data - Points in the format to cluster [x,y,z,...]\n * @param {number} K - Number of clusters\n * @param {object} [options] - Option object\n * @param {number} [options.maxIterations = 100] - Maximum of iterations allowed\n * @param {number} [options.tolerance = 1e-6] - Error tolerance\n * @param {boolean} [options.withIterations = false] - Store clusters and centroids for each iteration\n * @param {function} [options.distanceFunction = squaredDistance] - Distance function to use between the points\n * @param {number} [options.seed] - Seed for random initialization.\n * @param {string|Array>} [options.initialization = 'kmeans++'] - K centers in format [x,y,z,...] or a method for initialize the data:\n * * You can either specify your custom start centroids, or select one of the following initialization method:\n * * `'kmeans++'` will use the kmeans++ method as described by http://ilpubs.stanford.edu:8090/778/1/2006-13.pdf\n * * `'random'` will choose K random different values.\n * * `'mostDistant'` will choose the more distant points to a first random pick\n * @return {KMeansResult} - Cluster identifier for each data dot and centroids with the following fields:\n * * `'clusters'`: Array of indexes for the clusters.\n * * `'centroids'`: Array with the resulting centroids.\n * * `'iterations'`: Number of iterations that took to converge\n */\nexport default function kmeans(data, K, options) {\n options = Object.assign({}, defaultOptions, options);\n\n if (K <= 0 || K > data.length || !Number.isInteger(K)) {\n throw new Error(\n 'K should be a positive integer smaller than the number of points'\n );\n }\n\n var centers;\n if (Array.isArray(options.initialization)) {\n if (options.initialization.length !== K) {\n throw new Error('The initial centers should have the same length as K');\n } else {\n centers = options.initialization;\n }\n } else {\n switch (options.initialization) {\n case 'kmeans++':\n centers = kmeanspp(data, K, options);\n break;\n case 'random':\n centers = random(data, K, options.seed);\n break;\n case 'mostDistant':\n centers = mostDistant(\n data,\n K,\n calculateDistanceMatrix(data, options.distanceFunction),\n options.seed\n );\n break;\n default:\n throw new Error(\n `Unknown initialization method: \"${options.initialization}\"`\n );\n }\n }\n\n // infinite loop until convergence\n if (options.maxIterations === 0) {\n options.maxIterations = Number.MAX_VALUE;\n }\n\n var clusterID = new Array(data.length);\n if (options.withIterations) {\n return kmeansGenerator(centers, data, clusterID, K, options);\n } else {\n var converged = false;\n var stepNumber = 0;\n var stepResult;\n while (!converged && stepNumber < options.maxIterations) {\n stepResult = step(centers, data, clusterID, K, options, ++stepNumber);\n converged = stepResult.converged;\n centers = stepResult.centroids;\n }\n return stepResult.computeInformation(data);\n }\n}\n","import Matrix from 'ml-matrix';\n\n/**\n * @private\n * Function that retuns an array of matrices of the cases that belong to each class.\n * @param {Matrix} X - dataset\n * @param {Array} y - predictions\n * @return {Array}\n */\nexport function separateClasses(X, y) {\n var features = X.columns;\n\n var classes = 0;\n var totalPerClasses = new Array(10000); // max upperbound of classes\n for (var i = 0; i < y.length; i++) {\n if (totalPerClasses[y[i]] === undefined) {\n totalPerClasses[y[i]] = 0;\n classes++;\n }\n totalPerClasses[y[i]]++;\n }\n var separatedClasses = new Array(classes);\n var currentIndex = new Array(classes);\n for (i = 0; i < classes; ++i) {\n separatedClasses[i] = new Matrix(totalPerClasses[i], features);\n currentIndex[i] = 0;\n }\n for (i = 0; i < X.rows; ++i) {\n separatedClasses[y[i]].setRow(currentIndex[y[i]], X.getRow(i));\n currentIndex[y[i]]++;\n }\n return separatedClasses;\n}\n","import { Matrix } from 'ml-matrix';\n\nimport { separateClasses } from './utils';\n\nexport class GaussianNB {\n /**\n * Constructor for the Gaussian Naive Bayes classifier, the parameters here is just for loading purposes.\n * @constructor\n * @param {boolean} reload\n * @param {object} model\n */\n constructor(reload, model) {\n if (reload) {\n this.means = model.means;\n this.calculateProbabilities = model.calculateProbabilities;\n }\n }\n\n /**\n * Function that trains the classifier with a matrix that represents the training set and an array that\n * represents the label of each row in the training set. the labels must be numbers between 0 to n-1 where\n * n represents the number of classes.\n *\n * WARNING: in the case that one class, all the cases in one or more features have the same value, the\n * Naive Bayes classifier will not work well.\n * @param {Matrix|Array} trainingSet\n * @param {Matrix|Array} trainingLabels\n */\n train(trainingSet, trainingLabels) {\n var C1 = Math.sqrt(2 * Math.PI); // constant to precalculate the squared root\n trainingSet = Matrix.checkMatrix(trainingSet);\n\n if (trainingSet.rows !== trainingLabels.length) {\n throw new RangeError(\n 'the size of the training set and the training labels must be the same.'\n );\n }\n\n var separatedClasses = separateClasses(trainingSet, trainingLabels);\n var calculateProbabilities = new Array(separatedClasses.length);\n this.means = new Array(separatedClasses.length);\n for (var i = 0; i < separatedClasses.length; ++i) {\n var means = separatedClasses[i].mean('column');\n var std = separatedClasses[i].standardDeviation('column', {\n mean: means\n });\n\n var logPriorProbability = Math.log(\n separatedClasses[i].rows / trainingSet.rows\n );\n calculateProbabilities[i] = new Array(means.length + 1);\n\n calculateProbabilities[i][0] = logPriorProbability;\n for (var j = 1; j < means.length + 1; ++j) {\n var currentStd = std[j - 1];\n calculateProbabilities[i][j] = [\n 1 / (C1 * currentStd),\n -2 * currentStd * currentStd\n ];\n }\n\n this.means[i] = means;\n }\n\n this.calculateProbabilities = calculateProbabilities;\n }\n\n /**\n * function that predicts each row of the dataset (must be a matrix).\n *\n * @param {Matrix|Array} dataset\n * @return {Array}\n */\n predict(dataset) {\n dataset = Matrix.checkMatrix(dataset);\n if (dataset.rows === this.calculateProbabilities[0].length) {\n throw new RangeError(\n 'the dataset must have the same features as the training set'\n );\n }\n\n var predictions = new Array(dataset.rows);\n\n for (var i = 0; i < predictions.length; ++i) {\n predictions[i] = getCurrentClass(\n dataset.getRow(i),\n this.means,\n this.calculateProbabilities\n );\n }\n\n return predictions;\n }\n\n /**\n * Function that export the NaiveBayes model.\n * @return {object}\n */\n toJSON() {\n return {\n modelName: 'NaiveBayes',\n means: this.means,\n calculateProbabilities: this.calculateProbabilities\n };\n }\n\n /**\n * Function that create a GaussianNB classifier with the given model.\n * @param {object} model\n * @return {GaussianNB}\n */\n static load(model) {\n if (model.modelName !== 'NaiveBayes') {\n throw new RangeError(\n 'The current model is not a Multinomial Naive Bayes, current model:',\n model.name\n );\n }\n\n return new GaussianNB(true, model);\n }\n}\n\n/**\n * @private\n * Function the retrieves a prediction with one case.\n *\n * @param {Array} currentCase\n * @param {Array} mean - Precalculated means of each class trained\n * @param {Array} classes - Precalculated value of each class (Prior probability and probability function of each feature)\n * @return {number}\n */\nfunction getCurrentClass(currentCase, mean, classes) {\n var maxProbability = 0;\n var predictedClass = -1;\n\n // going through all precalculated values for the classes\n for (var i = 0; i < classes.length; ++i) {\n var currentProbability = classes[i][0]; // initialize with the prior probability\n for (var j = 1; j < classes[0][1].length + 1; ++j) {\n currentProbability += calculateLogProbability(\n currentCase[j - 1],\n mean[i][j - 1],\n classes[i][j][0],\n classes[i][j][1]\n );\n }\n\n currentProbability = Math.exp(currentProbability);\n if (currentProbability > maxProbability) {\n maxProbability = currentProbability;\n predictedClass = i;\n }\n }\n\n return predictedClass;\n}\n\n/**\n * @private\n * function that retrieves the probability of the feature given the class.\n * @param {number} value - value of the feature.\n * @param {number} mean - mean of the feature for the given class.\n * @param {number} C1 - precalculated value of (1 / (sqrt(2*pi) * std)).\n * @param {number} C2 - precalculated value of (2 * std^2) for the denominator of the exponential.\n * @return {number}\n */\nfunction calculateLogProbability(value, mean, C1, C2) {\n value = value - mean;\n return Math.log(C1 * Math.exp((value * value) / C2));\n}\n","import { Matrix } from 'ml-matrix';\n\nimport { separateClasses } from './utils';\n\nexport class MultinomialNB {\n /**\n * Constructor for Multinomial Naive Bayes, the model parameter is for load purposes.\n * @constructor\n * @param {object} model - for load purposes.\n */\n constructor(model) {\n if (model) {\n this.conditionalProbability = Matrix.checkMatrix(\n model.conditionalProbability\n );\n this.priorProbability = Matrix.checkMatrix(model.priorProbability);\n }\n }\n\n /**\n * Train the classifier with the current training set and labels, the labels must be numbers between 0 and n.\n * @param {Matrix|Array} trainingSet\n * @param {Array} trainingLabels\n */\n train(trainingSet, trainingLabels) {\n trainingSet = Matrix.checkMatrix(trainingSet);\n\n if (trainingSet.rows !== trainingLabels.length) {\n throw new RangeError(\n 'the size of the training set and the training labels must be the same.'\n );\n }\n\n var separateClass = separateClasses(trainingSet, trainingLabels);\n\n this.priorProbability = new Matrix(separateClass.length, 1);\n\n for (var i = 0; i < separateClass.length; ++i) {\n this.priorProbability.set(i, 0, Math.log(\n separateClass[i].rows / trainingSet.rows\n ));\n }\n\n var features = trainingSet.columns;\n this.conditionalProbability = new Matrix(separateClass.length, features);\n for (i = 0; i < separateClass.length; ++i) {\n var classValues = Matrix.checkMatrix(separateClass[i]);\n var total = classValues.sum();\n var divisor = total + features;\n this.conditionalProbability.setRow(\n i,\n Matrix.rowVector(classValues\n .sum('column'))\n .add(1)\n .div(divisor)\n .apply(matrixLog)\n );\n }\n }\n\n /**\n * Retrieves the predictions for the dataset with the current model.\n * @param {Matrix|Array} dataset\n * @return {Array} - predictions from the dataset.\n */\n predict(dataset) {\n dataset = Matrix.checkMatrix(dataset);\n var predictions = new Array(dataset.rows);\n for (var i = 0; i < dataset.rows; ++i) {\n var currentElement = dataset.getRowVector(i);\n const v = Matrix.columnVector(this.conditionalProbability\n .clone()\n .mulRowVector(currentElement)\n .sum('row'));\n predictions[i] = v\n .add(this.priorProbability)\n .maxIndex()[0];\n }\n\n return predictions;\n }\n\n /**\n * Function that saves the current model.\n * @return {object} - model in JSON format.\n */\n toJSON() {\n return {\n name: 'MultinomialNB',\n priorProbability: this.priorProbability,\n conditionalProbability: this.conditionalProbability\n };\n }\n\n /**\n * Creates a new MultinomialNB from the given model\n * @param {object} model\n * @return {MultinomialNB}\n */\n static load(model) {\n if (model.name !== 'MultinomialNB') {\n throw new RangeError(`${model.name} is not a Multinomial Naive Bayes`);\n }\n\n return new MultinomialNB(model);\n }\n}\n\nfunction matrixLog(i, j) {\n this.set(i, j, Math.log(this.get(i, j)));\n}\n","/*\n * Original code from:\n *\n * k-d Tree JavaScript - V 1.01\n *\n * https://github.com/ubilabs/kd-tree-javascript\n *\n * @author Mircea Pricop , 2012\n * @author Martin Kleppe , 2012\n * @author Ubilabs http://ubilabs.net, 2012\n * @license MIT License \n */\n\nfunction Node(obj, dimension, parent) {\n this.obj = obj;\n this.left = null;\n this.right = null;\n this.parent = parent;\n this.dimension = dimension;\n}\n\nexport default class KDTree {\n constructor(points, metric) {\n // If points is not an array, assume we're loading a pre-built tree\n if (!Array.isArray(points)) {\n this.dimensions = points.dimensions;\n this.root = points;\n restoreParent(this.root);\n } else {\n this.dimensions = new Array(points[0].length);\n for (var i = 0; i < this.dimensions.length; i++) {\n this.dimensions[i] = i;\n }\n this.root = buildTree(points, 0, null, this.dimensions);\n }\n this.metric = metric;\n }\n\n // Convert to a JSON serializable structure; this just requires removing\n // the `parent` property\n toJSON() {\n const result = toJSONImpl(this.root, true);\n result.dimensions = this.dimensions;\n return result;\n }\n\n nearest(point, maxNodes, maxDistance) {\n const metric = this.metric;\n const dimensions = this.dimensions;\n var i;\n\n const bestNodes = new BinaryHeap(function (e) {\n return -e[1];\n });\n\n function nearestSearch(node) {\n const dimension = dimensions[node.dimension];\n const ownDistance = metric(point, node.obj);\n const linearPoint = {};\n var bestChild, linearDistance, otherChild, i;\n\n function saveNode(node, distance) {\n bestNodes.push([node, distance]);\n if (bestNodes.size() > maxNodes) {\n bestNodes.pop();\n }\n }\n\n for (i = 0; i < dimensions.length; i += 1) {\n if (i === node.dimension) {\n linearPoint[dimensions[i]] = point[dimensions[i]];\n } else {\n linearPoint[dimensions[i]] = node.obj[dimensions[i]];\n }\n }\n\n linearDistance = metric(linearPoint, node.obj);\n\n if (node.right === null && node.left === null) {\n if (bestNodes.size() < maxNodes || ownDistance < bestNodes.peek()[1]) {\n saveNode(node, ownDistance);\n }\n return;\n }\n\n if (node.right === null) {\n bestChild = node.left;\n } else if (node.left === null) {\n bestChild = node.right;\n } else {\n if (point[dimension] < node.obj[dimension]) {\n bestChild = node.left;\n } else {\n bestChild = node.right;\n }\n }\n\n nearestSearch(bestChild);\n\n if (bestNodes.size() < maxNodes || ownDistance < bestNodes.peek()[1]) {\n saveNode(node, ownDistance);\n }\n\n if (\n bestNodes.size() < maxNodes ||\n Math.abs(linearDistance) < bestNodes.peek()[1]\n ) {\n if (bestChild === node.left) {\n otherChild = node.right;\n } else {\n otherChild = node.left;\n }\n if (otherChild !== null) {\n nearestSearch(otherChild);\n }\n }\n }\n\n if (maxDistance) {\n for (i = 0; i < maxNodes; i += 1) {\n bestNodes.push([null, maxDistance]);\n }\n }\n\n if (this.root) {\n nearestSearch(this.root);\n }\n\n const result = [];\n for (i = 0; i < Math.min(maxNodes, bestNodes.content.length); i += 1) {\n if (bestNodes.content[i][0]) {\n result.push([bestNodes.content[i][0].obj, bestNodes.content[i][1]]);\n }\n }\n return result;\n }\n}\n\nfunction toJSONImpl(src) {\n const dest = new Node(src.obj, src.dimension, null);\n if (src.left) dest.left = toJSONImpl(src.left);\n if (src.right) dest.right = toJSONImpl(src.right);\n return dest;\n}\n\nfunction buildTree(points, depth, parent, dimensions) {\n const dim = depth % dimensions.length;\n\n if (points.length === 0) {\n return null;\n }\n if (points.length === 1) {\n return new Node(points[0], dim, parent);\n }\n\n points.sort((a, b) => a[dimensions[dim]] - b[dimensions[dim]]);\n\n const median = Math.floor(points.length / 2);\n const node = new Node(points[median], dim, parent);\n node.left = buildTree(points.slice(0, median), depth + 1, node, dimensions);\n node.right = buildTree(points.slice(median + 1), depth + 1, node, dimensions);\n\n return node;\n}\n\nfunction restoreParent(root) {\n if (root.left) {\n root.left.parent = root;\n restoreParent(root.left);\n }\n\n if (root.right) {\n root.right.parent = root;\n restoreParent(root.right);\n }\n}\n\n// Binary heap implementation from:\n// http://eloquentjavascript.net/appendix2.html\nclass BinaryHeap {\n constructor(scoreFunction) {\n this.content = [];\n this.scoreFunction = scoreFunction;\n }\n\n push(element) {\n // Add the new element to the end of the array.\n this.content.push(element);\n // Allow it to bubble up.\n this.bubbleUp(this.content.length - 1);\n }\n\n pop() {\n // Store the first element so we can return it later.\n var result = this.content[0];\n // Get the element at the end of the array.\n var end = this.content.pop();\n // If there are any elements left, put the end element at the\n // start, and let it sink down.\n if (this.content.length > 0) {\n this.content[0] = end;\n this.sinkDown(0);\n }\n return result;\n }\n\n peek() {\n return this.content[0];\n }\n\n size() {\n return this.content.length;\n }\n\n bubbleUp(n) {\n // Fetch the element that has to be moved.\n var element = this.content[n];\n // When at 0, an element can not go up any further.\n while (n > 0) {\n // Compute the parent element's index, and fetch it.\n const parentN = Math.floor((n + 1) / 2) - 1;\n const parent = this.content[parentN];\n // Swap the elements if the parent is greater.\n if (this.scoreFunction(element) < this.scoreFunction(parent)) {\n this.content[parentN] = element;\n this.content[n] = parent;\n // Update 'n' to continue at the new position.\n n = parentN;\n } else {\n // Found a parent that is less, no need to move it further.\n break;\n }\n }\n }\n\n sinkDown(n) {\n // Look up the target element and its score.\n var length = this.content.length;\n var element = this.content[n];\n var elemScore = this.scoreFunction(element);\n\n while (true) {\n // Compute the indices of the child elements.\n var child2N = (n + 1) * 2;\n var child1N = child2N - 1;\n // This is used to store the new position of the element,\n // if any.\n var swap = null;\n // If the first child exists (is inside the array)...\n if (child1N < length) {\n // Look it up and compute its score.\n var child1 = this.content[child1N];\n var child1Score = this.scoreFunction(child1);\n // If the score is less than our element's, we need to swap.\n if (child1Score < elemScore) {\n swap = child1N;\n }\n }\n // Do the same checks for the other child.\n if (child2N < length) {\n var child2 = this.content[child2N];\n var child2Score = this.scoreFunction(child2);\n if (child2Score < (swap === null ? elemScore : child1Score)) {\n swap = child2N;\n }\n }\n\n // If the element needs to be moved, swap it, and continue.\n if (swap !== null) {\n this.content[n] = this.content[swap];\n this.content[swap] = element;\n n = swap;\n } else {\n // Otherwise, we are done.\n break;\n }\n }\n }\n}\n","import { euclidean as euclideanDistance } from 'ml-distance-euclidean';\n\nimport KDTree from './KDTree';\n\nexport default class KNN {\n /**\n * @param {Array} dataset\n * @param {Array} labels\n * @param {object} options\n * @param {number} [options.k=numberOfClasses + 1] - Number of neighbors to classify.\n * @param {function} [options.distance=euclideanDistance] - Distance function that takes two parameters.\n */\n constructor(dataset, labels, options = {}) {\n if (dataset === true) {\n const model = labels;\n this.kdTree = new KDTree(model.kdTree, options);\n this.k = model.k;\n this.classes = new Set(model.classes);\n this.isEuclidean = model.isEuclidean;\n return;\n }\n\n const classes = new Set(labels);\n\n const { distance = euclideanDistance, k = classes.size + 1 } = options;\n\n const points = new Array(dataset.length);\n for (var i = 0; i < points.length; ++i) {\n points[i] = dataset[i].slice();\n }\n\n for (i = 0; i < labels.length; ++i) {\n points[i].push(labels[i]);\n }\n\n this.kdTree = new KDTree(points, distance);\n this.k = k;\n this.classes = classes;\n this.isEuclidean = distance === euclideanDistance;\n }\n\n /**\n * Create a new KNN instance with the given model.\n * @param {object} model\n * @param {function} distance=euclideanDistance - distance function must be provided if the model wasn't trained with euclidean distance.\n * @return {KNN}\n */\n static load(model, distance = euclideanDistance) {\n if (model.name !== 'KNN') {\n throw new Error(`invalid model: ${model.name}`);\n }\n if (!model.isEuclidean && distance === euclideanDistance) {\n throw new Error(\n 'a custom distance function was used to create the model. Please provide it again'\n );\n }\n if (model.isEuclidean && distance !== euclideanDistance) {\n throw new Error(\n 'the model was created with the default distance function. Do not load it with another one'\n );\n }\n return new KNN(true, model, distance);\n }\n\n /**\n * Return a JSON containing the kd-tree model.\n * @return {object} JSON KNN model.\n */\n toJSON() {\n return {\n name: 'KNN',\n kdTree: this.kdTree,\n k: this.k,\n classes: Array.from(this.classes),\n isEuclidean: this.isEuclidean\n };\n }\n\n /**\n * Predicts the output given the matrix to predict.\n * @param {Array} dataset\n * @return {Array} predictions\n */\n predict(dataset) {\n if (Array.isArray(dataset)) {\n if (typeof dataset[0] === 'number') {\n return getSinglePrediction(this, dataset);\n } else if (\n Array.isArray(dataset[0]) &&\n typeof dataset[0][0] === 'number'\n ) {\n const predictions = new Array(dataset.length);\n for (var i = 0; i < dataset.length; i++) {\n predictions[i] = getSinglePrediction(this, dataset[i]);\n }\n return predictions;\n }\n }\n throw new TypeError('dataset to predict must be an array or a matrix');\n }\n}\n\nfunction getSinglePrediction(knn, currentCase) {\n var nearestPoints = knn.kdTree.nearest(currentCase, knn.k);\n var pointsPerClass = {};\n var predictedClass = -1;\n var maxPoints = -1;\n var lastElement = nearestPoints[0][0].length - 1;\n\n for (var element of knn.classes) {\n pointsPerClass[element] = 0;\n }\n\n for (var i = 0; i < nearestPoints.length; ++i) {\n var currentClass = nearestPoints[i][0][lastElement];\n var currentPoints = ++pointsPerClass[currentClass];\n if (currentPoints > maxPoints) {\n predictedClass = currentClass;\n maxPoints = currentPoints;\n }\n }\n\n return predictedClass;\n}\n","import Matrix from 'ml-matrix';\n\n/**\n * @private\n * Function that given vector, returns its norm\n * @param {Vector} X\n * @return {number} Norm of the vector\n */\nexport function norm(X) {\n return Math.sqrt(X.clone().apply(pow2array).sum());\n}\n\n/**\n * @private\n * Function that pow 2 each element of a Matrix or a Vector,\n * used in the apply method of the Matrix object\n * @param {number} i - index i.\n * @param {number} j - index j.\n * @return {Matrix} The Matrix object modified at the index i, j.\n * */\nexport function pow2array(i, j) {\n this.set(i, j, this.get(i, j) ** 2);\n}\n\n/**\n * @private\n * Function that normalize the dataset and return the means and\n * standard deviation of each feature.\n * @param {Matrix} dataset\n * @return {object} dataset normalized, means and standard deviations\n */\nexport function featureNormalize(dataset) {\n var means = dataset.mean('column');\n var std = dataset.standardDeviation('column', { mean: means, unbiased: true });\n var result = Matrix.checkMatrix(dataset).subRowVector(means);\n return { result: result.divRowVector(std), means: means, std: std };\n}\n\n/**\n * @private\n * Function that initialize an array of matrices.\n * @param {Array} array\n * @param {boolean} isMatrix\n * @return {Array} array with the matrices initialized.\n */\nexport function initializeMatrices(array, isMatrix) {\n if (isMatrix) {\n for (var i = 0; i < array.length; ++i) {\n for (var j = 0; j < array[i].length; ++j) {\n var elem = array[i][j];\n array[i][j] = elem !== null ? new Matrix(array[i][j]) : undefined;\n }\n }\n } else {\n for (i = 0; i < array.length; ++i) {\n array[i] = new Matrix(array[i]);\n }\n }\n\n return array;\n}\n","import Matrix from 'ml-matrix';\n\nimport * as Utils from './utils';\n\n/**\n * @class PLS\n */\nexport class PLS {\n /**\n * Constructor for Partial Least Squares (PLS)\n * @param {object} options\n * @param {number} [options.latentVectors] - Number of latent vector to get (if the algorithm doesn't find a good model below the tolerance)\n * @param {number} [options.tolerance=1e-5]\n * @param {boolean} [options.scale=true] - rescale dataset using mean.\n * @param {object} model - for load purposes.\n */\n constructor(options, model) {\n if (options === true) {\n this.meanX = model.meanX;\n this.stdDevX = model.stdDevX;\n this.meanY = model.meanY;\n this.stdDevY = model.stdDevY;\n this.PBQ = Matrix.checkMatrix(model.PBQ);\n this.R2X = model.R2X;\n this.scale = model.scale;\n this.scaleMethod = model.scaleMethod;\n this.tolerance = model.tolerance;\n } else {\n var {\n tolerance = 1e-5,\n scale = true,\n } = options;\n this.tolerance = tolerance;\n this.scale = scale;\n this.latentVectors = options.latentVectors;\n }\n }\n\n /**\n * Fits the model with the given data and predictions, in this function is calculated the\n * following outputs:\n *\n * T - Score matrix of X\n * P - Loading matrix of X\n * U - Score matrix of Y\n * Q - Loading matrix of Y\n * B - Matrix of regression coefficient\n * W - Weight matrix of X\n *\n * @param {Matrix|Array} trainingSet\n * @param {Matrix|Array} trainingValues\n */\n train(trainingSet, trainingValues) {\n trainingSet = Matrix.checkMatrix(trainingSet);\n trainingValues = Matrix.checkMatrix(trainingValues);\n\n if (trainingSet.length !== trainingValues.length) {\n throw new RangeError('The number of X rows must be equal to the number of Y rows');\n }\n\n this.meanX = trainingSet.mean('column');\n this.stdDevX = trainingSet.standardDeviation('column', { mean: this.meanX, unbiased: true });\n this.meanY = trainingValues.mean('column');\n this.stdDevY = trainingValues.standardDeviation('column', { mean: this.meanY, unbiased: true });\n\n if (this.scale) {\n trainingSet = trainingSet.clone().subRowVector(this.meanX).divRowVector(this.stdDevX);\n trainingValues = trainingValues.clone().subRowVector(this.meanY).divRowVector(this.stdDevY);\n }\n\n if (this.latentVectors === undefined) {\n this.latentVectors = Math.min(trainingSet.rows - 1, trainingSet.columns);\n }\n\n var rx = trainingSet.rows;\n var cx = trainingSet.columns;\n var ry = trainingValues.rows;\n var cy = trainingValues.columns;\n\n var ssqXcal = trainingSet.clone().mul(trainingSet).sum(); // for the r²\n var sumOfSquaresY = trainingValues.clone().mul(trainingValues).sum();\n\n var tolerance = this.tolerance;\n var n = this.latentVectors;\n var T = Matrix.zeros(rx, n);\n var P = Matrix.zeros(cx, n);\n var U = Matrix.zeros(ry, n);\n var Q = Matrix.zeros(cy, n);\n var B = Matrix.zeros(n, n);\n var W = P.clone();\n var k = 0;\n\n while (Utils.norm(trainingValues) > tolerance && k < n) {\n var transposeX = trainingSet.transpose();\n var transposeY = trainingValues.transpose();\n\n var tIndex = maxSumColIndex(trainingSet.clone().mul(trainingSet));\n var uIndex = maxSumColIndex(trainingValues.clone().mul(trainingValues));\n\n var t1 = trainingSet.getColumnVector(tIndex);\n var u = trainingValues.getColumnVector(uIndex);\n var t = Matrix.zeros(rx, 1);\n\n while (Utils.norm(t1.clone().sub(t)) > tolerance) {\n var w = transposeX.mmul(u);\n w.div(Utils.norm(w));\n t = t1;\n t1 = trainingSet.mmul(w);\n var q = transposeY.mmul(t1);\n q.div(Utils.norm(q));\n u = trainingValues.mmul(q);\n }\n\n t = t1;\n var num = transposeX.mmul(t);\n var den = t.transpose().mmul(t).get(0, 0);\n var p = num.div(den);\n var pnorm = Utils.norm(p);\n p.div(pnorm);\n t.mul(pnorm);\n w.mul(pnorm);\n\n num = u.transpose().mmul(t);\n den = t.transpose().mmul(t).get(0, 0);\n var b = num.div(den).get(0, 0);\n trainingSet.sub(t.mmul(p.transpose()));\n trainingValues.sub(t.clone().mul(b).mmul(q.transpose()));\n\n T.setColumn(k, t);\n P.setColumn(k, p);\n U.setColumn(k, u);\n Q.setColumn(k, q);\n W.setColumn(k, w);\n\n B.set(k, k, b);\n k++;\n }\n\n k--;\n T = T.subMatrix(0, T.rows - 1, 0, k);\n P = P.subMatrix(0, P.rows - 1, 0, k);\n U = U.subMatrix(0, U.rows - 1, 0, k);\n Q = Q.subMatrix(0, Q.rows - 1, 0, k);\n W = W.subMatrix(0, W.rows - 1, 0, k);\n B = B.subMatrix(0, k, 0, k);\n\n // TODO: review of R2Y\n // this.R2Y = t.transpose().mmul(t).mul(q[k][0]*q[k][0]).divS(ssqYcal)[0][0];\n //\n this.ssqYcal = sumOfSquaresY;\n this.E = trainingSet;\n this.F = trainingValues;\n this.T = T;\n this.P = P;\n this.U = U;\n this.Q = Q;\n this.W = W;\n this.B = B;\n this.PBQ = P.mmul(B).mmul(Q.transpose());\n this.R2X = t.transpose().mmul(t).mmul(p.transpose().mmul(p)).div(ssqXcal).get(0, 0);\n }\n\n /**\n * Predicts the behavior of the given dataset.\n * @param {Matrix|Array} dataset - data to be predicted.\n * @return {Matrix} - predictions of each element of the dataset.\n */\n predict(dataset) {\n var X = Matrix.checkMatrix(dataset);\n if (this.scale) {\n X = X.subRowVector(this.meanX).divRowVector(this.stdDevX);\n }\n var Y = X.mmul(this.PBQ);\n Y = Y.mulRowVector(this.stdDevY).addRowVector(this.meanY);\n return Y;\n }\n\n /**\n * Returns the explained variance on training of the PLS model\n * @return {number}\n */\n getExplainedVariance() {\n return this.R2X;\n }\n\n /**\n * Export the current model to JSON.\n * @return {object} - Current model.\n */\n toJSON() {\n return {\n name: 'PLS',\n R2X: this.R2X,\n meanX: this.meanX,\n stdDevX: this.stdDevX,\n meanY: this.meanY,\n stdDevY: this.stdDevY,\n PBQ: this.PBQ,\n tolerance: this.tolerance,\n scale: this.scale,\n };\n }\n\n /**\n * Load a PLS model from a JSON Object\n * @param {object} model\n * @return {PLS} - PLS object from the given model\n */\n static load(model) {\n if (model.name !== 'PLS') {\n throw new RangeError(`Invalid model: ${model.name}`);\n }\n return new PLS(true, model);\n }\n}\n\n/**\n * @private\n * Function that returns the index where the sum of each\n * column vector is maximum.\n * @param {Matrix} data\n * @return {number} index of the maximum\n */\nfunction maxSumColIndex(data) {\n return Matrix.rowVector(data.sum('column')).maxIndex()[0];\n}\n","import { Matrix, SingularValueDecomposition, inverse } from 'ml-matrix';\n\nimport { initializeMatrices } from './utils';\n\n/**\n * @class KOPLS\n */\nexport class KOPLS {\n /**\n * Constructor for Kernel-based Orthogonal Projections to Latent Structures (K-OPLS)\n * @param {object} options\n * @param {number} [options.predictiveComponents] - Number of predictive components to use.\n * @param {number} [options.orthogonalComponents] - Number of Y-Orthogonal components.\n * @param {Kernel} [options.kernel] - Kernel object to apply, see [ml-kernel](https://github.com/mljs/kernel).\n * @param {object} model - for load purposes.\n */\n constructor(options, model) {\n if (options === true) {\n this.trainingSet = new Matrix(model.trainingSet);\n this.YLoadingMat = new Matrix(model.YLoadingMat);\n this.SigmaPow = new Matrix(model.SigmaPow);\n this.YScoreMat = new Matrix(model.YScoreMat);\n this.predScoreMat = initializeMatrices(model.predScoreMat, false);\n this.YOrthLoadingVec = initializeMatrices(model.YOrthLoadingVec, false);\n this.YOrthEigen = model.YOrthEigen;\n this.YOrthScoreMat = initializeMatrices(model.YOrthScoreMat, false);\n this.toNorm = initializeMatrices(model.toNorm, false);\n this.TURegressionCoeff = initializeMatrices(model.TURegressionCoeff, false);\n this.kernelX = initializeMatrices(model.kernelX, true);\n this.kernel = model.kernel;\n this.orthogonalComp = model.orthogonalComp;\n this.predictiveComp = model.predictiveComp;\n } else {\n if (options.predictiveComponents === undefined) {\n throw new RangeError('no predictive components found!');\n }\n if (options.orthogonalComponents === undefined) {\n throw new RangeError('no orthogonal components found!');\n }\n if (options.kernel === undefined) {\n throw new RangeError('no kernel found!');\n }\n\n this.orthogonalComp = options.orthogonalComponents;\n this.predictiveComp = options.predictiveComponents;\n this.kernel = options.kernel;\n }\n }\n\n /**\n * Train the K-OPLS model with the given training set and labels.\n * @param {Matrix|Array} trainingSet\n * @param {Matrix|Array} trainingValues\n */\n train(trainingSet, trainingValues) {\n trainingSet = Matrix.checkMatrix(trainingSet);\n trainingValues = Matrix.checkMatrix(trainingValues);\n\n // to save and compute kernel with the prediction dataset.\n this.trainingSet = trainingSet.clone();\n\n var kernelX = this.kernel.compute(trainingSet);\n\n var Identity = Matrix.eye(kernelX.rows, kernelX.rows, 1);\n var temp = kernelX;\n kernelX = new Array(this.orthogonalComp + 1);\n for (let i = 0; i < this.orthogonalComp + 1; i++) {\n kernelX[i] = new Array(this.orthogonalComp + 1);\n }\n kernelX[0][0] = temp;\n\n var result = new SingularValueDecomposition(trainingValues.transpose().mmul(kernelX[0][0]).mmul(trainingValues), {\n computeLeftSingularVectors: true,\n computeRightSingularVectors: false\n });\n var YLoadingMat = result.leftSingularVectors;\n var Sigma = result.diagonalMatrix;\n\n YLoadingMat = YLoadingMat.subMatrix(0, YLoadingMat.rows - 1, 0, this.predictiveComp - 1);\n Sigma = Sigma.subMatrix(0, this.predictiveComp - 1, 0, this.predictiveComp - 1);\n\n var YScoreMat = trainingValues.mmul(YLoadingMat);\n\n var predScoreMat = new Array(this.orthogonalComp + 1);\n var TURegressionCoeff = new Array(this.orthogonalComp + 1);\n var YOrthScoreMat = new Array(this.orthogonalComp);\n var YOrthLoadingVec = new Array(this.orthogonalComp);\n var YOrthEigen = new Array(this.orthogonalComp);\n var YOrthScoreNorm = new Array(this.orthogonalComp);\n\n var SigmaPow = Matrix.pow(Sigma, -0.5);\n // to avoid errors, check infinity\n SigmaPow.apply(function (i, j) {\n if (this.get(i, j) === Infinity) {\n this.set(i, j, 0);\n }\n });\n\n for (var i = 0; i < this.orthogonalComp; ++i) {\n predScoreMat[i] = kernelX[0][i].transpose().mmul(YScoreMat).mmul(SigmaPow);\n\n var TpiPrime = predScoreMat[i].transpose();\n TURegressionCoeff[i] = inverse(TpiPrime.mmul(predScoreMat[i])).mmul(TpiPrime).mmul(YScoreMat);\n\n result = new SingularValueDecomposition(TpiPrime.mmul(Matrix.sub(kernelX[i][i], predScoreMat[i].mmul(TpiPrime))).mmul(predScoreMat[i]), {\n computeLeftSingularVectors: true,\n computeRightSingularVectors: false\n });\n var CoTemp = result.leftSingularVectors;\n var SoTemp = result.diagonalMatrix;\n\n YOrthLoadingVec[i] = CoTemp.subMatrix(0, CoTemp.rows - 1, 0, 0);\n YOrthEigen[i] = SoTemp.get(0, 0);\n\n YOrthScoreMat[i] = Matrix.sub(kernelX[i][i], predScoreMat[i].mmul(TpiPrime)).mmul(predScoreMat[i]).mmul(YOrthLoadingVec[i]).mul(Math.pow(YOrthEigen[i], -0.5));\n\n var toiPrime = YOrthScoreMat[i].transpose();\n YOrthScoreNorm[i] = Matrix.sqrt(toiPrime.mmul(YOrthScoreMat[i]));\n\n YOrthScoreMat[i] = YOrthScoreMat[i].divRowVector(YOrthScoreNorm[i]);\n\n var ITo = Matrix.sub(Identity, YOrthScoreMat[i].mmul(YOrthScoreMat[i].transpose()));\n\n kernelX[0][i + 1] = kernelX[0][i].mmul(ITo);\n kernelX[i + 1][i + 1] = ITo.mmul(kernelX[i][i]).mmul(ITo);\n }\n\n var lastScoreMat = predScoreMat[this.orthogonalComp] = kernelX[0][this.orthogonalComp].transpose().mmul(YScoreMat).mmul(SigmaPow);\n\n var lastTpPrime = lastScoreMat.transpose();\n TURegressionCoeff[this.orthogonalComp] = inverse(lastTpPrime.mmul(lastScoreMat)).mmul(lastTpPrime).mmul(YScoreMat);\n\n this.YLoadingMat = YLoadingMat;\n this.SigmaPow = SigmaPow;\n this.YScoreMat = YScoreMat;\n this.predScoreMat = predScoreMat;\n this.YOrthLoadingVec = YOrthLoadingVec;\n this.YOrthEigen = YOrthEigen;\n this.YOrthScoreMat = YOrthScoreMat;\n this.toNorm = YOrthScoreNorm;\n this.TURegressionCoeff = TURegressionCoeff;\n this.kernelX = kernelX;\n }\n\n /**\n * Predicts the output given the matrix to predict.\n * @param {Matrix|Array} toPredict\n * @return {{y: Matrix, predScoreMat: Array, predYOrthVectors: Array}} predictions\n */\n predict(toPredict) {\n var KTestTrain = this.kernel.compute(toPredict, this.trainingSet);\n\n var temp = KTestTrain;\n KTestTrain = new Array(this.orthogonalComp + 1);\n for (let i = 0; i < this.orthogonalComp + 1; i++) {\n KTestTrain[i] = new Array(this.orthogonalComp + 1);\n }\n KTestTrain[0][0] = temp;\n\n var YOrthScoreVector = new Array(this.orthogonalComp);\n var predScoreMat = new Array(this.orthogonalComp);\n\n var i;\n for (i = 0; i < this.orthogonalComp; ++i) {\n predScoreMat[i] = KTestTrain[i][0].mmul(this.YScoreMat).mmul(this.SigmaPow);\n\n YOrthScoreVector[i] = Matrix.sub(KTestTrain[i][i], predScoreMat[i].mmul(this.predScoreMat[i].transpose())).mmul(this.predScoreMat[i]).mmul(this.YOrthLoadingVec[i]).mul(Math.pow(this.YOrthEigen[i], -0.5));\n\n YOrthScoreVector[i] = YOrthScoreVector[i].divRowVector(this.toNorm[i]);\n\n var scoreMatPrime = this.YOrthScoreMat[i].transpose();\n KTestTrain[i + 1][0] = Matrix.sub(KTestTrain[i][0], YOrthScoreVector[i].mmul(scoreMatPrime).mmul(this.kernelX[0][i].transpose()));\n\n var p1 = Matrix.sub(KTestTrain[i][0], KTestTrain[i][i].mmul(this.YOrthScoreMat[i]).mmul(scoreMatPrime));\n var p2 = YOrthScoreVector[i].mmul(scoreMatPrime).mmul(this.kernelX[i][i]);\n var p3 = p2.mmul(this.YOrthScoreMat[i]).mmul(scoreMatPrime);\n\n KTestTrain[i + 1][i + 1] = p1.sub(p2).add(p3);\n }\n\n predScoreMat[i] = KTestTrain[i][0].mmul(this.YScoreMat).mmul(this.SigmaPow);\n var prediction = predScoreMat[i].mmul(this.TURegressionCoeff[i]).mmul(this.YLoadingMat.transpose());\n\n return {\n prediction: prediction,\n predScoreMat: predScoreMat,\n predYOrthVectors: YOrthScoreVector\n };\n }\n\n /**\n * Export the current model to JSON.\n * @return {object} - Current model.\n */\n toJSON() {\n return {\n name: 'K-OPLS',\n YLoadingMat: this.YLoadingMat,\n SigmaPow: this.SigmaPow,\n YScoreMat: this.YScoreMat,\n predScoreMat: this.predScoreMat,\n YOrthLoadingVec: this.YOrthLoadingVec,\n YOrthEigen: this.YOrthEigen,\n YOrthScoreMat: this.YOrthScoreMat,\n toNorm: this.toNorm,\n TURegressionCoeff: this.TURegressionCoeff,\n kernelX: this.kernelX,\n trainingSet: this.trainingSet,\n orthogonalComp: this.orthogonalComp,\n predictiveComp: this.predictiveComp\n };\n }\n\n /**\n * Load a K-OPLS with the given model.\n * @param {object} model\n * @param {Kernel} kernel - kernel used on the model, see [ml-kernel](https://github.com/mljs/kernel).\n * @return {KOPLS}\n */\n static load(model, kernel) {\n if (model.name !== 'K-OPLS') {\n throw new RangeError(`Invalid model: ${model.name}`);\n }\n\n if (!kernel) {\n throw new RangeError('You must provide a kernel for the model!');\n }\n\n model.kernel = kernel;\n return new KOPLS(true, model);\n }\n}\n","/**\n * Constructs a confusion matrix\n * @class ConfusionMatrix\n * @example\n * const CM = new ConfusionMatrix([[13, 2], [10, 5]], ['cat', 'dog'])\n * @param {Array>} matrix - The confusion matrix, a 2D Array. Rows represent the actual label and columns\n * the predicted label.\n * @param {Array} labels - Labels of the confusion matrix, a 1D Array\n */\nclass ConfusionMatrix {\n constructor(matrix, labels) {\n if (matrix.length !== matrix[0].length) {\n throw new Error('Confusion matrix must be square');\n }\n if (labels.length !== matrix.length) {\n throw new Error('Confusion matrix and labels should have the same length');\n }\n this.labels = labels;\n this.matrix = matrix;\n }\n\n\n /**\n * Construct confusion matrix from the predicted and actual labels (classes). Be sure to provide the arguments in\n * the correct order!\n * @param {Array} actual - The predicted labels of the classification\n * @param {Array} predicted - The actual labels of the classification. Has to be of same length as\n * predicted.\n * @param {object} [options] - Additional options\n * @param {Array} [options.labels] - The list of labels that should be used. If not provided the distinct set\n * of labels present in predicted and actual is used. Labels are compared using the strict equality operator\n * '==='\n * @return {ConfusionMatrix} - Confusion matrix\n */\n static fromLabels(actual, predicted, options = {}) {\n if (predicted.length !== actual.length) {\n throw new Error('predicted and actual must have the same length');\n }\n let distinctLabels;\n if (options.labels) {\n distinctLabels = new Set(options.labels);\n } else {\n distinctLabels = new Set([...actual, ...predicted]);\n }\n distinctLabels = Array.from(distinctLabels);\n if (options.sort) {\n distinctLabels.sort(options.sort);\n }\n\n // Create confusion matrix and fill with 0's\n const matrix = Array.from({length: distinctLabels.length});\n for (let i = 0; i < matrix.length; i++) {\n matrix[i] = new Array(matrix.length);\n matrix[i].fill(0);\n }\n\n for (let i = 0; i < predicted.length; i++) {\n const actualIdx = distinctLabels.indexOf(actual[i]);\n const predictedIdx = distinctLabels.indexOf(predicted[i]);\n if (actualIdx >= 0 && predictedIdx >= 0) {\n matrix[actualIdx][predictedIdx]++;\n }\n }\n\n return new ConfusionMatrix(matrix, distinctLabels);\n }\n\n /**\n * Get the confusion matrix\n * @return {Array >}\n */\n getMatrix() {\n return this.matrix;\n }\n\n getLabels() {\n return this.labels;\n }\n\n /**\n * Get the total number of samples\n * @return {number}\n */\n getTotalCount() {\n let predicted = 0;\n for (var i = 0; i < this.matrix.length; i++) {\n for (var j = 0; j < this.matrix.length; j++) {\n predicted += this.matrix[i][j];\n }\n }\n return predicted;\n }\n\n /**\n * Get the total number of true predictions\n * @return {number}\n */\n getTrueCount() {\n var count = 0;\n for (var i = 0; i < this.matrix.length; i++) {\n count += this.matrix[i][i];\n }\n return count;\n }\n\n /**\n * Get the total number of false predictions.\n * @return {number}\n */\n getFalseCount() {\n return this.getTotalCount() - this.getTrueCount();\n }\n\n /**\n * Get the number of true positive predictions.\n * @param {any} label - The label that should be considered \"positive\"\n * @return {number}\n */\n getTruePositiveCount(label) {\n const index = this.getIndex(label);\n return this.matrix[index][index];\n }\n\n /**\n * Get the number of true negative predictions\n * @param {any} label - The label that should be considered \"positive\"\n * @return {number}\n */\n getTrueNegativeCount(label) {\n const index = this.getIndex(label);\n var count = 0;\n for (var i = 0; i < this.matrix.length; i++) {\n for (var j = 0; j < this.matrix.length; j++) {\n if (i !== index && j !== index) {\n count += this.matrix[i][j];\n }\n }\n }\n return count;\n }\n\n /**\n * Get the number of false positive predictions.\n * @param {any} label - The label that should be considered \"positive\"\n * @return {number}\n */\n getFalsePositiveCount(label) {\n const index = this.getIndex(label);\n var count = 0;\n for (var i = 0; i < this.matrix.length; i++) {\n if (i !== index) {\n count += this.matrix[i][index];\n }\n }\n return count;\n }\n\n /**\n * Get the number of false negative predictions.\n * @param {any} label - The label that should be considered \"positive\"\n * @return {number}\n */\n getFalseNegativeCount(label) {\n const index = this.getIndex(label);\n var count = 0;\n for (var i = 0; i < this.matrix.length; i++) {\n if (i !== index) {\n count += this.matrix[index][i];\n }\n }\n return count;\n }\n\n /**\n * Get the number of real positive samples.\n * @param {any} label - The label that should be considered \"positive\"\n * @return {number}\n */\n getPositiveCount(label) {\n return this.getTruePositiveCount(label) + this.getFalseNegativeCount(label);\n }\n\n /**\n * Get the number of real negative samples.\n * @param {any} label - The label that should be considered \"positive\"\n * @return {number}\n */\n getNegativeCount(label) {\n return this.getTrueNegativeCount(label) + this.getFalsePositiveCount(label);\n }\n\n /**\n * Get the index in the confusion matrix that corresponds to the given label\n * @param {any} label - The label to search for\n * @throws if the label is not found\n * @return {number}\n */\n getIndex(label) {\n const index = this.labels.indexOf(label);\n if (index === -1) throw new Error('The label does not exist');\n return index;\n }\n\n /**\n * Get the true positive rate a.k.a. sensitivity. Computes the ratio between the number of true positive predictions and the total number of positive samples.\n * {@link https://en.wikipedia.org/wiki/Sensitivity_and_specificity}\n * @param {any} label - The label that should be considered \"positive\"\n * @return {number} - The true positive rate [0-1]\n */\n getTruePositiveRate(label) {\n return this.getTruePositiveCount(label) / this.getPositiveCount(label);\n }\n\n /**\n * Get the true negative rate a.k.a. specificity. Computes the ration between the number of true negative predictions and the total number of negative samples.\n * {@link https://en.wikipedia.org/wiki/Sensitivity_and_specificity}\n * @param {any} label - The label that should be considered \"positive\"\n * @return {number}\n */\n getTrueNegativeRate(label) {\n return this.getTrueNegativeCount(label) / this.getNegativeCount(label);\n }\n\n /**\n * Get the positive predictive value a.k.a. precision. Computes TP / (TP + FP)\n * {@link https://en.wikipedia.org/wiki/Positive_and_negative_predictive_values}\n * @param {any} label - The label that should be considered \"positive\"\n * @return {number}\n */\n getPositivePredictiveValue(label) {\n const TP = this.getTruePositiveCount(label);\n return TP / (TP + this.getFalsePositiveCount(label));\n }\n\n /**\n * Negative predictive value\n * {@link https://en.wikipedia.org/wiki/Positive_and_negative_predictive_values}\n * @param {any} label - The label that should be considered \"positive\"\n * @return {number}\n */\n getNegativePredictiveValue(label) {\n const TN = this.getTrueNegativeCount(label);\n return TN / (TN + this.getFalseNegativeCount(label));\n }\n\n /**\n * False negative rate a.k.a. miss rate.\n * {@link https://en.wikipedia.org/wiki/Type_I_and_type_II_errors#False_positive_and_false_negative_rates}\n * @param {any} label - The label that should be considered \"positive\"\n * @return {number}\n */\n getFalseNegativeRate(label) {\n return 1 - this.getTruePositiveRate(label);\n }\n\n /**\n * False positive rate a.k.a. fall-out rate.\n * {@link https://en.wikipedia.org/wiki/Type_I_and_type_II_errors#False_positive_and_false_negative_rates}\n * @param {any} label - The label that should be considered \"positive\"\n * @return {number}\n */\n getFalsePositiveRate(label) {\n return 1 - this.getTrueNegativeRate(label);\n }\n\n /**\n * False discovery rate (FDR)\n * {@link https://en.wikipedia.org/wiki/False_discovery_rate}\n * @param {any} label - The label that should be considered \"positive\"\n * @return {number}\n */\n getFalseDiscoveryRate(label) {\n const FP = this.getFalsePositiveCount(label);\n return FP / (FP + this.getTruePositiveCount(label));\n }\n\n /**\n * False omission rate (FOR)\n * @param {any} label - The label that should be considered \"positive\"\n * @return {number}\n */\n getFalseOmissionRate(label) {\n const FN = this.getFalseNegativeCount(label);\n return FN / (FN + this.getTruePositiveCount(label));\n }\n\n /**\n * F1 score\n * {@link https://en.wikipedia.org/wiki/F1_score}\n * @param {any} label - The label that should be considered \"positive\"\n * @return {number}\n */\n getF1Score(label) {\n const TP = this.getTruePositiveCount(label);\n return 2 * TP / (2 * TP + this.getFalsePositiveCount(label) + this.getFalseNegativeCount(label));\n }\n\n /**\n * Matthews correlation coefficient (MCC)\n * {@link https://en.wikipedia.org/wiki/Matthews_correlation_coefficient}\n * @param {any} label - The label that should be considered \"positive\"\n * @return {number}\n */\n getMatthewsCorrelationCoefficient(label) {\n const TP = this.getTruePositiveCount(label);\n const TN = this.getTrueNegativeCount(label);\n const FP = this.getFalsePositiveCount(label);\n const FN = this.getFalseNegativeCount(label);\n return (TP * TN - FP * FN) / Math.sqrt((TP + FP) * (TP + FN) * (TN + FP) * (TN + FN));\n }\n\n /**\n * Informedness\n * {@link https://en.wikipedia.org/wiki/Youden%27s_J_statistic}\n * @param {any} label - The label that should be considered \"positive\"\n * @return {number}\n */\n getInformedness(label) {\n return this.getTruePositiveRate(label) + this.getTrueNegativeRate(label) - 1;\n }\n\n /**\n * Markedness\n * @param {any} label - The label that should be considered \"positive\"\n * @return {number}\n */\n getMarkedness(label) {\n return this.getPositivePredictiveValue(label) + this.getNegativePredictiveValue(label) - 1;\n }\n\n /**\n * Get the confusion table.\n * @param {any} label - The label that should be considered \"positive\"\n * @return {Array >} - The 2x2 confusion table. [[TP, FN], [FP, TN]]\n */\n getConfusionTable(label) {\n return [\n [\n this.getTruePositiveCount(label),\n this.getFalseNegativeCount(label)\n ],\n [\n this.getFalsePositiveCount(label),\n this.getTrueNegativeCount(label)\n ]\n ];\n }\n\n /**\n * Get total accuracy.\n * @return {number} - The ratio between the number of true predictions and total number of classifications ([0-1])\n */\n getAccuracy() {\n let correct = 0;\n let incorrect = 0;\n for (var i = 0; i < this.matrix.length; i++) {\n for (var j = 0; j < this.matrix.length; j++) {\n if (i === j) correct += this.matrix[i][j];\n else incorrect += this.matrix[i][j];\n }\n }\n return correct / (correct + incorrect);\n }\n\n\n /**\n * Returns the element in the confusion matrix that corresponds to the given actual and predicted labels.\n * @param {any} actual - The true label\n * @param {any} predicted - The predicted label\n * @return {number} - The element in the confusion matrix\n */\n getCount(actual, predicted) {\n const actualIndex = this.getIndex(actual);\n const predictedIndex = this.getIndex(predicted);\n return this.matrix[actualIndex][predictedIndex];\n }\n\n /**\n * Compute the general prediction accuracy\n * @deprecated Use getAccuracy\n * @return {number} - The prediction accuracy ([0-1]\n */\n get accuracy() {\n return this.getAccuracy();\n }\n\n /**\n * Compute the number of predicted observations\n * @deprecated Use getTotalCount\n * @return {number}\n */\n get total() {\n return this.getTotalCount();\n }\n}\n\nmodule.exports = ConfusionMatrix;\n","'use strict';\nconst defaultOptions = {\n mode: 'index'\n};\n\nmodule.exports = function *(M, N, options) {\n options = Object.assign({}, defaultOptions, options);\n var a = new Array(N);\n var c = new Array(M);\n var b = new Array(N);\n var p = new Array(N + 2);\n var x, y, z;\n\n // init a and b\n for (var i = 0; i < N; i++) {\n a[i] = i;\n if (i < N - M) b[i] = 0;\n else b[i] = 1;\n }\n\n // init c\n for (i = 0; i < M; i++) {\n c[i] = N - M + i;\n }\n\n // init p\n for (i = 0; i < p.length; i++) {\n if (i === 0) p[i] = N + 1;\n else if (i <= N - M) p[i] = 0;\n else if (i <= N) p[i] = i - N + M;\n else p[i] = -2;\n }\n\n function twiddle() {\n var i, j, k;\n j = 1;\n while (p[j] <= 0) {\n j++;\n }\n if (p[j - 1] === 0) {\n for (i = j - 1; i !== 1; i--) {\n p[i] = -1;\n }\n p[j] = 0;\n x = z = 0;\n p[1] = 1;\n y = j - 1;\n } else {\n if (j > 1) {\n p[j - 1] = 0;\n }\n do {\n j++;\n }\n while (p[j] > 0);\n k = j - 1;\n i = j;\n while (p[i] === 0) {\n p[i++] = -1;\n }\n if (p[i] === -1) {\n p[i] = p[k];\n z = p[k] - 1;\n x = i - 1;\n y = k - 1;\n p[k] = -1;\n } else {\n if (i === p[0]) {\n return 0;\n } else {\n p[j] = p[i];\n z = p[i] - 1;\n p[i] = 0;\n x = j - 1;\n y = i - 1;\n }\n }\n }\n return 1;\n }\n\n if (options.mode === 'index') {\n yield c.slice();\n while (twiddle()) {\n c[z] = a[x];\n yield c.slice();\n }\n } else if (options.mode === 'mask') {\n yield b.slice();\n while (twiddle()) {\n b[x] = 1;\n b[y] = 0;\n yield b.slice();\n }\n } else {\n throw new Error('Invalid mode');\n }\n};\n","'use strict';\n\nconst ConfusionMatrix = require('ml-confusion-matrix');\n\nconst CV = {};\nconst combinations = require('ml-combinations');\n\n/**\n * Performs a leave-one-out cross-validation (LOO-CV) of the given samples. In LOO-CV, 1 observation is used as the\n * validation set while the rest is used as the training set. This is repeated once for each observation. LOO-CV is a\n * special case of LPO-CV. @see leavePout\n * @param {function} Classifier - The classifier's constructor to use for the cross validation. Expect ml-classifier\n * api.\n * @param {Array} features - The features for all samples of the data-set\n * @param {Array} labels - The classification class of all samples of the data-set\n * @param {object} classifierOptions - The classifier options with which the classifier should be instantiated.\n * @return {ConfusionMatrix} - The cross-validation confusion matrix\n */\nCV.leaveOneOut = function (Classifier, features, labels, classifierOptions) {\n if (typeof labels === 'function') {\n var callback = labels;\n labels = features;\n features = Classifier;\n return CV.leavePOut(features, labels, 1, callback);\n }\n return CV.leavePOut(Classifier, features, labels, classifierOptions, 1);\n};\n\n\n/**\n * Performs a leave-p-out cross-validation (LPO-CV) of the given samples. In LPO-CV, p observations are used as the\n * validation set while the rest is used as the training set. This is repeated as many times as there are possible\n * ways to combine p observations from the set (unordered without replacement). Be aware that for relatively small\n * data-set size this can require a very large number of training and testing to do!\n * @param {function} Classifier - The classifier's constructor to use for the cross validation. Expect ml-classifier\n * api.\n * @param {Array} features - The features for all samples of the data-set\n * @param {Array} labels - The classification class of all samples of the data-set\n * @param {object} classifierOptions - The classifier options with which the classifier should be instantiated.\n * @param {number} p - The size of the validation sub-samples' set\n * @return {ConfusionMatrix} - The cross-validation confusion matrix\n */\nCV.leavePOut = function (Classifier, features, labels, classifierOptions, p) {\n if (typeof classifierOptions === 'function') {\n var callback = classifierOptions;\n p = labels;\n labels = features;\n features = Classifier;\n }\n check(features, labels);\n const distinct = getDistinct(labels);\n const confusionMatrix = initMatrix(distinct.length, distinct.length);\n\n var N = features.length;\n var gen = combinations(p, N);\n var allIdx = new Array(N);\n for (let i = 0; i < N; i++) {\n allIdx[i] = i;\n }\n for (const testIdx of gen) {\n var trainIdx = allIdx.slice();\n\n for (let i = testIdx.length - 1; i >= 0; i--) {\n trainIdx.splice(testIdx[i], 1);\n }\n\n if (callback) {\n validateWithCallback(features, labels, testIdx, trainIdx, confusionMatrix, distinct, callback);\n } else {\n validate(Classifier, features, labels, classifierOptions, testIdx, trainIdx, confusionMatrix, distinct);\n }\n\n }\n\n return new ConfusionMatrix(confusionMatrix, distinct);\n};\n\n/**\n * Performs k-fold cross-validation (KF-CV). KF-CV separates the data-set into k random equally sized partitions, and\n * uses each as a validation set, with all other partitions used in the training set. Observations left over from if k\n * does not divide the number of observations are left out of the cross-validation process.\n * @param {function} Classifier - The classifier's to use for the cross validation. Expect ml-classifier api.\n * @param {Array} features - The features for all samples of the data-set\n * @param {Array} labels - The classification class of all samples of the data-set\n * @param {object} classifierOptions - The classifier options with which the classifier should be instantiated.\n * @param {number} k - The number of partitions to create\n * @return {ConfusionMatrix} - The cross-validation confusion matrix\n */\nCV.kFold = function (Classifier, features, labels, classifierOptions, k) {\n if (typeof classifierOptions === 'function') {\n var callback = classifierOptions;\n k = labels;\n labels = features;\n features = Classifier;\n }\n check(features, labels);\n const distinct = getDistinct(labels);\n const confusionMatrix = initMatrix(distinct.length, distinct.length);\n var N = features.length;\n var allIdx = new Array(N);\n for (var i = 0; i < N; i++) {\n allIdx[i] = i;\n }\n\n var l = Math.floor(N / k);\n // create random k-folds\n var current = [];\n var folds = [];\n while (allIdx.length) {\n var randi = Math.floor(Math.random() * allIdx.length);\n current.push(allIdx[randi]);\n allIdx.splice(randi, 1);\n if (current.length === l) {\n folds.push(current);\n current = [];\n }\n }\n if (current.length) folds.push(current);\n folds = folds.slice(0, k);\n\n\n for (i = 0; i < folds.length; i++) {\n var testIdx = folds[i];\n var trainIdx = [];\n for (var j = 0; j < folds.length; j++) {\n if (j !== i) trainIdx = trainIdx.concat(folds[j]);\n }\n\n if (callback) {\n validateWithCallback(features, labels, testIdx, trainIdx, confusionMatrix, distinct, callback);\n } else {\n validate(Classifier, features, labels, classifierOptions, testIdx, trainIdx, confusionMatrix, distinct);\n }\n }\n\n return new ConfusionMatrix(confusionMatrix, distinct);\n};\n\nfunction check(features, labels) {\n if (features.length !== labels.length) {\n throw new Error('features and labels should have the same length');\n }\n}\n\nfunction initMatrix(rows, columns) {\n return new Array(rows).fill(0).map(() => new Array(columns).fill(0));\n}\n\nfunction getDistinct(arr) {\n var s = new Set();\n for (let i = 0; i < arr.length; i++) {\n s.add(arr[i]);\n }\n return Array.from(s);\n}\n\nfunction validate(Classifier, features, labels, classifierOptions, testIdx, trainIdx, confusionMatrix, distinct) {\n const {testFeatures, trainFeatures, testLabels, trainLabels} = getTrainTest(features, labels, testIdx, trainIdx);\n\n var classifier;\n if (Classifier.prototype.train) {\n classifier = new Classifier(classifierOptions);\n classifier.train(trainFeatures, trainLabels);\n } else {\n classifier = new Classifier(trainFeatures, trainLabels, classifierOptions);\n }\n\n var predictedLabels = classifier.predict(testFeatures);\n updateConfusionMatrix(confusionMatrix, testLabels, predictedLabels, distinct);\n}\n\nfunction validateWithCallback(features, labels, testIdx, trainIdx, confusionMatrix, distinct, callback) {\n const {testFeatures, trainFeatures, testLabels, trainLabels} = getTrainTest(features, labels, testIdx, trainIdx);\n const predictedLabels = callback(trainFeatures, trainLabels, testFeatures);\n updateConfusionMatrix(confusionMatrix, testLabels, predictedLabels, distinct);\n}\n\nfunction updateConfusionMatrix(confusionMatrix, testLabels, predictedLabels, distinct) {\n\n for (var i = 0; i < predictedLabels.length; i++) {\n const actualIdx = distinct.indexOf(testLabels[i]);\n const predictedIdx = distinct.indexOf(predictedLabels[i]);\n if (actualIdx < 0 || predictedIdx < 0) {\n // eslint-disable-next-line no-console\n console.warn(`ignore unknown predicted label ${predictedLabels[i]}`);\n }\n confusionMatrix[actualIdx][predictedIdx]++;\n }\n}\n\n\nfunction getTrainTest(features, labels, testIdx, trainIdx) {\n return {\n testFeatures: testIdx.map(function (index) {\n return features[index];\n }),\n trainFeatures: trainIdx.map(function (index) {\n return features[index];\n }),\n testLabels: testIdx.map(function (index) {\n return labels[index];\n }),\n trainLabels: trainIdx.map(function (index) {\n return labels[index];\n })\n };\n}\n\nmodule.exports = CV;\n","'use strict';\n\nvar mlMatrix = require('ml-matrix');\n\nfunction logistic(val) {\n return 1 / (1 + Math.exp(-val));\n}\n\nfunction expELU(val, param) {\n return val < 0 ? param * (Math.exp(val) - 1) : val;\n}\n\nfunction softExponential(val, param) {\n if (param < 0) {\n return -Math.log(1 - param * (val + param)) / param;\n }\n if (param > 0) {\n return ((Math.exp(param * val) - 1) / param) + param;\n }\n return val;\n}\n\nfunction softExponentialPrime(val, param) {\n if (param < 0) {\n return 1 / (1 - param * (param + val));\n } else {\n return Math.exp(param * val);\n }\n}\n\nconst ACTIVATION_FUNCTIONS = {\n tanh: {\n activation: Math.tanh,\n derivate: (val) => 1 - (val * val)\n },\n identity: {\n activation: (val) => val,\n derivate: () => 1\n },\n logistic: {\n activation: logistic,\n derivate: (val) => logistic(val) * (1 - logistic(val))\n },\n arctan: {\n activation: Math.atan,\n derivate: (val) => 1 / (val * val + 1)\n },\n softsign: {\n activation: (val) => val / (1 + Math.abs(val)),\n derivate: (val) => 1 / ((1 + Math.abs(val)) * (1 + Math.abs(val)))\n },\n relu: {\n activation: (val) => (val < 0 ? 0 : val),\n derivate: (val) => (val < 0 ? 0 : 1)\n },\n softplus: {\n activation: (val) => Math.log(1 + Math.exp(val)),\n derivate: (val) => 1 / (1 + Math.exp(-val))\n },\n bent: {\n activation: (val) => ((Math.sqrt(val * val + 1) - 1) / 2) + val,\n derivate: (val) => (val / (2 * Math.sqrt(val * val + 1))) + 1\n },\n sinusoid: {\n activation: Math.sin,\n derivate: Math.cos\n },\n sinc: {\n activation: (val) => (val === 0 ? 1 : Math.sin(val) / val),\n derivate: (val) => (val === 0 ? 0 : (Math.cos(val) / val) - (Math.sin(val) / (val * val)))\n },\n gaussian: {\n activation: (val) => Math.exp(-(val * val)),\n derivate: (val) => -2 * val * Math.exp(-(val * val))\n },\n 'parametric-relu': {\n activation: (val, param) => (val < 0 ? param * val : val),\n derivate: (val, param) => (val < 0 ? param : 1)\n },\n 'exponential-elu': {\n activation: expELU,\n derivate: (val, param) => (val < 0 ? expELU(val, param) + param : 1)\n },\n 'soft-exponential': {\n activation: softExponential,\n derivate: softExponentialPrime\n }\n};\n\nclass Layer {\n /**\n * @private\n * Create a new layer with the given options\n * @param {object} options\n * @param {number} [options.inputSize] - Number of conections that enter the neurons.\n * @param {number} [options.outputSize] - Number of conections that leave the neurons.\n * @param {number} [options.regularization] - Regularization parameter.\n * @param {number} [options.epsilon] - Learning rate parameter.\n * @param {string} [options.activation] - Activation function parameter from the FeedForwardNeuralNetwork class.\n * @param {number} [options.activationParam] - Activation parameter if needed.\n */\n constructor(options) {\n this.inputSize = options.inputSize;\n this.outputSize = options.outputSize;\n this.regularization = options.regularization;\n this.epsilon = options.epsilon;\n this.activation = options.activation;\n this.activationParam = options.activationParam;\n\n var selectedFunction = ACTIVATION_FUNCTIONS[options.activation];\n var params = selectedFunction.activation.length;\n\n var actFunction = params > 1 ? (val) => selectedFunction.activation(val, options.activationParam) : selectedFunction.activation;\n var derFunction = params > 1 ? (val) => selectedFunction.derivate(val, options.activationParam) : selectedFunction.derivate;\n\n this.activationFunction = function (i, j) {\n this.set(i, j, actFunction(this.get(i, j)));\n };\n this.derivate = function (i, j) {\n this.set(i, j, derFunction(this.get(i, j)));\n };\n\n if (options.model) {\n // load model\n this.W = mlMatrix.Matrix.checkMatrix(options.W);\n this.b = mlMatrix.Matrix.checkMatrix(options.b);\n } else {\n // default constructor\n this.W = mlMatrix.Matrix.rand(this.inputSize, this.outputSize);\n this.b = mlMatrix.Matrix.zeros(1, this.outputSize);\n\n this.W.apply(function (i, j) {\n this.set(i, j, this.get(i, j) / Math.sqrt(options.inputSize));\n });\n }\n }\n\n /**\n * @private\n * propagate the given input through the current layer.\n * @param {Matrix} X - input.\n * @return {Matrix} output at the current layer.\n */\n forward(X) {\n var z = X.mmul(this.W).addRowVector(this.b);\n z.apply(this.activationFunction);\n this.a = z.clone();\n return z;\n }\n\n /**\n * @private\n * apply backpropagation algorithm at the current layer\n * @param {Matrix} delta - delta values estimated at the following layer.\n * @param {Matrix} a - 'a' values from the following layer.\n * @return {Matrix} the new delta values for the next layer.\n */\n backpropagation(delta, a) {\n this.dW = a.transpose().mmul(delta);\n this.db = mlMatrix.Matrix.rowVector(delta.sum('column'));\n\n var aCopy = a.clone();\n return delta.mmul(this.W.transpose()).mul(aCopy.apply(this.derivate));\n }\n\n /**\n * @private\n * Function that updates the weights at the current layer with the derivatives.\n */\n update() {\n this.dW.add(this.W.clone().mul(this.regularization));\n this.W.add(this.dW.mul(-this.epsilon));\n this.b.add(this.db.mul(-this.epsilon));\n }\n\n /**\n * @private\n * Export the current layer to JSON.\n * @return {object} model\n */\n toJSON() {\n return {\n model: 'Layer',\n inputSize: this.inputSize,\n outputSize: this.outputSize,\n regularization: this.regularization,\n epsilon: this.epsilon,\n activation: this.activation,\n W: this.W,\n b: this.b\n };\n }\n\n /**\n * @private\n * Creates a new Layer with the given model.\n * @param {object} model\n * @return {Layer}\n */\n static load(model) {\n if (model.model !== 'Layer') {\n throw new RangeError('the current model is not a Layer model');\n }\n return new Layer(model);\n }\n}\n\nclass OutputLayer extends Layer {\n constructor(options) {\n super(options);\n\n this.activationFunction = function (i, j) {\n this.set(i, j, Math.exp(this.get(i, j)));\n };\n }\n\n static load(model) {\n if (model.model !== 'Layer') {\n throw new RangeError('the current model is not a Layer model');\n }\n\n return new OutputLayer(model);\n }\n}\n\nclass FeedForwardNeuralNetworks {\n /**\n * Create a new Feedforward neural network model.\n * @class FeedForwardNeuralNetworks\n * @param {object} [options]\n * @param {Array} [options.hiddenLayers=[10]] - Array that contains the sizes of the hidden layers.\n * @param {number} [options.iterations=50] - Number of iterations at the training step.\n * @param {number} [options.learningRate=0.01] - Learning rate of the neural net (also known as epsilon).\n * @param {number} [options.regularization=0.01] - Regularization parameter af the neural net.\n * @param {string} [options.activation='tanh'] - activation function to be used. (options: 'tanh'(default),\n * 'identity', 'logistic', 'arctan', 'softsign', 'relu', 'softplus', 'bent', 'sinusoid', 'sinc', 'gaussian').\n * (single-parametric options: 'parametric-relu', 'exponential-relu', 'soft-exponential').\n * @param {number} [options.activationParam=1] - if the selected activation function needs a parameter.\n */\n constructor(options) {\n options = options || {};\n if (options.model) {\n // load network\n this.hiddenLayers = options.hiddenLayers;\n this.iterations = options.iterations;\n this.learningRate = options.learningRate;\n this.regularization = options.regularization;\n this.dicts = options.dicts;\n this.activation = options.activation;\n this.activationParam = options.activationParam;\n this.model = new Array(options.layers.length);\n\n for (var i = 0; i < this.model.length - 1; ++i) {\n this.model[i] = Layer.load(options.layers[i]);\n }\n this.model[this.model.length - 1] = OutputLayer.load(options.layers[this.model.length - 1]);\n } else {\n // default constructor\n this.hiddenLayers = options.hiddenLayers || [10];\n this.iterations = options.iterations || 50;\n\n this.learningRate = options.learningRate || 0.01;\n this.regularization = options.regularization || 0.01;\n\n this.activation = options.activation || 'tanh';\n this.activationParam = options.activationParam || 1;\n if (!(this.activation in Object.keys(ACTIVATION_FUNCTIONS))) {\n this.activation = 'tanh';\n }\n }\n }\n\n /**\n * @private\n * Function that build and initialize the neural net.\n * @param {number} inputSize - total of features to fit.\n * @param {number} outputSize - total of labels of the prediction set.\n */\n buildNetwork(inputSize, outputSize) {\n var size = 2 + (this.hiddenLayers.length - 1);\n this.model = new Array(size);\n\n // input layer\n this.model[0] = new Layer({\n inputSize: inputSize,\n outputSize: this.hiddenLayers[0],\n activation: this.activation,\n activationParam: this.activationParam,\n regularization: this.regularization,\n epsilon: this.learningRate\n });\n\n // hidden layers\n for (var i = 1; i < this.hiddenLayers.length; ++i) {\n this.model[i] = new Layer({\n inputSize: this.hiddenLayers[i - 1],\n outputSize: this.hiddenLayers[i],\n activation: this.activation,\n activationParam: this.activationParam,\n regularization: this.regularization,\n epsilon: this.learningRate\n });\n }\n\n // output layer\n this.model[size - 1] = new OutputLayer({\n inputSize: this.hiddenLayers[this.hiddenLayers.length - 1],\n outputSize: outputSize,\n activation: this.activation,\n activationParam: this.activationParam,\n regularization: this.regularization,\n epsilon: this.learningRate\n });\n }\n\n /**\n * Train the neural net with the given features and labels.\n * @param {Matrix|Array} features\n * @param {Matrix|Array} labels\n */\n train(features, labels) {\n features = mlMatrix.Matrix.checkMatrix(features);\n this.dicts = dictOutputs(labels);\n\n var inputSize = features.columns;\n var outputSize = Object.keys(this.dicts.inputs).length;\n\n if (!this.model) {\n this.buildNetwork(inputSize, outputSize);\n }\n\n for (var i = 0; i < this.iterations; ++i) {\n var probabilities = this.propagate(features);\n this.backpropagation(features, labels, probabilities);\n }\n }\n\n /**\n * @private\n * Propagate the input(training set) and retrives the probabilities of each class.\n * @param {Matrix} X\n * @return {Matrix} probabilities of each class.\n */\n propagate(X) {\n var input = X;\n for (var i = 0; i < this.model.length; ++i) {\n input = this.model[i].forward(input);\n }\n\n // get probabilities\n return input.divColumnVector(input.sum('row'));\n }\n\n /**\n * @private\n * Function that applies the backpropagation algorithm on each layer of the network\n * in order to fit the features and labels.\n * @param {Matrix} features\n * @param {Array} labels\n * @param {Matrix} probabilities - probabilities of each class of the feature set.\n */\n backpropagation(features, labels, probabilities) {\n for (var i = 0; i < probabilities.rows; ++i) {\n probabilities.set(i, this.dicts.inputs[labels[i]], probabilities.get(i, this.dicts.inputs[labels[i]]) - 1);\n }\n\n // remember, the last delta doesn't matter\n var delta = probabilities;\n for (i = this.model.length - 1; i >= 0; --i) {\n var a = i > 0 ? this.model[i - 1].a : features;\n delta = this.model[i].backpropagation(delta, a);\n }\n\n for (i = 0; i < this.model.length; ++i) {\n this.model[i].update();\n }\n }\n\n /**\n * Predict the output given the feature set.\n * @param {Array|Matrix} features\n * @return {Array}\n */\n predict(features) {\n features = mlMatrix.Matrix.checkMatrix(features);\n var outputs = new Array(features.rows);\n var probabilities = this.propagate(features);\n for (var i = 0; i < features.rows; ++i) {\n outputs[i] = this.dicts.outputs[probabilities.maxRowIndex(i)[1]];\n }\n\n return outputs;\n }\n\n /**\n * Export the current model to JSON.\n * @return {object} model\n */\n toJSON() {\n var model = {\n model: 'FNN',\n hiddenLayers: this.hiddenLayers,\n iterations: this.iterations,\n learningRate: this.learningRate,\n regularization: this.regularization,\n activation: this.activation,\n activationParam: this.activationParam,\n dicts: this.dicts,\n layers: new Array(this.model.length)\n };\n\n for (var i = 0; i < this.model.length; ++i) {\n model.layers[i] = this.model[i].toJSON();\n }\n\n return model;\n }\n\n /**\n * Load a Feedforward Neural Network with the current model.\n * @param {object} model\n * @return {FeedForwardNeuralNetworks}\n */\n static load(model) {\n if (model.model !== 'FNN') {\n throw new RangeError('the current model is not a feed forward network');\n }\n\n return new FeedForwardNeuralNetworks(model);\n }\n}\n\n/**\n * @private\n * Method that given an array of labels(predictions), returns two dictionaries, one to transform from labels to\n * numbers and other in the reverse way\n * @param {Array} array\n * @return {object}\n */\nfunction dictOutputs(array) {\n var inputs = {};\n var outputs = {};\n var index = 0;\n for (var i = 0; i < array.length; i += 1) {\n if (inputs[array[i]] === undefined) {\n inputs[array[i]] = index;\n outputs[index] = array[i];\n index++;\n }\n }\n\n return {\n inputs: inputs,\n outputs: outputs\n };\n}\n\nmodule.exports = FeedForwardNeuralNetworks;\n","function NodeSquare(x, y, weights, som) {\n this.x = x;\n this.y = y;\n this.weights = weights;\n this.som = som;\n this.neighbors = {};\n}\n\nNodeSquare.prototype.adjustWeights = function adjustWeights(target, learningRate, influence) {\n for (var i = 0, ii = this.weights.length; i < ii; i++) {\n this.weights[i] += learningRate * influence * (target[i] - this.weights[i]);\n }\n};\n\nNodeSquare.prototype.getDistance = function getDistance(otherNode) {\n return Math.max(Math.abs(this.x - otherNode.x), Math.abs(this.y - otherNode.y));\n};\n\nNodeSquare.prototype.getDistanceTorus = function getDistanceTorus(otherNode) {\n var distX = Math.abs(this.x - otherNode.x),\n distY = Math.abs(this.y - otherNode.y);\n return Math.max(Math.min(distX, this.som.gridDim.x - distX), Math.min(distY, this.som.gridDim.y - distY));\n};\n\nNodeSquare.prototype.getNeighbors = function getNeighbors(xy) {\n if (!this.neighbors[xy]) {\n this.neighbors[xy] = new Array(2);\n\n // left or bottom neighbor\n var v;\n if (this[xy] > 0) {\n v = this[xy] - 1;\n } else if (this.som.torus) {\n v = this.som.gridDim[xy] - 1\n }\n if (typeof v !== 'undefined') {\n var x, y;\n if (xy === 'x') {\n x = v;\n y = this.y;\n } else {\n x = this.x;\n y = v;\n }\n this.neighbors[xy][0] = this.som.nodes[x][y];\n }\n\n // top or right neighbor\n var w;\n if (this[xy] < (this.som.gridDim[xy] - 1)) {\n w = this[xy] + 1;\n } else if (this.som.torus) {\n w = 0;\n }\n if (typeof w !== 'undefined') {\n if (xy === 'x') {\n x = w;\n y = this.y;\n } else {\n x = this.x;\n y = w;\n }\n this.neighbors[xy][1] = this.som.nodes[x][y];\n }\n }\n return this.neighbors[xy];\n};\n\nNodeSquare.prototype.getPos = function getPos(xy, element) {\n var neighbors = this.getNeighbors(xy),\n distance = this.som.distance,\n bestNeighbor,\n direction;\n if(neighbors[0]) {\n if (neighbors[1]) {\n var dist1 = distance(element, neighbors[0].weights),\n dist2 = distance(element, neighbors[1].weights);\n if(dist1 < dist2) {\n bestNeighbor = neighbors[0];\n direction = -1;\n } else {\n bestNeighbor = neighbors[1];\n direction = 1;\n }\n } else {\n bestNeighbor = neighbors[0];\n direction = -1;\n }\n } else {\n bestNeighbor = neighbors[1];\n direction = 1;\n }\n var simA = 1 - distance(element, this.weights),\n simB = 1 - distance(element, bestNeighbor.weights);\n var factor = ((simA - simB) / (2 - simA - simB));\n return 0.5 + 0.5 * factor * direction;\n};\n\nNodeSquare.prototype.getPosition = function getPosition(element) {\n return [\n this.getPos('x', element),\n this.getPos('y', element)\n ];\n};\n\nmodule.exports = NodeSquare;","var NodeSquare = require('./node-square');\n\nfunction NodeHexagonal(x, y, weights, som) {\n\n NodeSquare.call(this, x, y, weights, som);\n\n this.hX = x - Math.floor(y / 2);\n this.z = 0 - this.hX - y;\n\n}\n\nNodeHexagonal.prototype = new NodeSquare;\nNodeHexagonal.prototype.constructor = NodeHexagonal;\n\nNodeHexagonal.prototype.getDistance = function getDistanceHexagonal(otherNode) {\n return Math.max(Math.abs(this.hX - otherNode.hX), Math.abs(this.y - otherNode.y), Math.abs(this.z - otherNode.z));\n};\n\nNodeHexagonal.prototype.getDistanceTorus = function getDistanceTorus(otherNode) {\n var distX = Math.abs(this.hX - otherNode.hX),\n distY = Math.abs(this.y - otherNode.y),\n distZ = Math.abs(this.z - otherNode.z);\n return Math.max(Math.min(distX, this.som.gridDim.x - distX), Math.min(distY, this.som.gridDim.y - distY), Math.min(distZ, this.som.gridDim.z - distZ));\n};\n\nNodeHexagonal.prototype.getPosition = function getPosition() {\n throw new Error('Unimplemented : cannot get position of the points for hexagonal grid');\n};\n\nmodule.exports = NodeHexagonal;","'use strict';\n\nvar NodeSquare = require('./node-square'),\n NodeHexagonal = require('./node-hexagonal');\n\nvar defaultOptions = {\n fields: 3,\n randomizer: Math.random,\n distance: squareEuclidean,\n iterations: 10,\n learningRate: 0.1,\n gridType: 'rect',\n torus: true,\n method: 'random'\n};\n\nfunction SOM(x, y, options, reload) {\n\n this.x = x;\n this.y = y;\n\n options = options || {};\n this.options = {};\n for (var i in defaultOptions) {\n if (options.hasOwnProperty(i)) {\n this.options[i] = options[i];\n } else {\n this.options[i] = defaultOptions[i];\n }\n }\n\n if (typeof this.options.fields === 'number') {\n this.numWeights = this.options.fields;\n } else if (Array.isArray(this.options.fields)) {\n this.numWeights = this.options.fields.length;\n var converters = getConverters(this.options.fields);\n this.extractor = converters.extractor;\n this.creator = converters.creator;\n } else {\n throw new Error('Invalid fields definition');\n }\n\n if (this.options.gridType === 'rect') {\n this.nodeType = NodeSquare;\n this.gridDim = {\n x: x,\n y: y\n };\n } else {\n this.nodeType = NodeHexagonal;\n var hx = this.x - Math.floor(this.y / 2);\n this.gridDim = {\n x: hx,\n y: this.y,\n z: -(0 - hx - this.y)\n };\n }\n\n this.torus = this.options.torus;\n this.distanceMethod = this.torus ? 'getDistanceTorus' : 'getDistance';\n\n this.distance = this.options.distance;\n\n this.maxDistance = getMaxDistance(this.distance, this.numWeights);\n\n if (reload === true) { // For model loading\n this.done = true;\n return;\n }\n if (!(x > 0 && y > 0)) {\n throw new Error('x and y must be positive');\n }\n\n this.times = {\n findBMU: 0,\n adjust: 0\n };\n\n this.randomizer = this.options.randomizer;\n\n this.iterationCount = 0;\n this.iterations = this.options.iterations;\n\n this.startLearningRate = this.learningRate = this.options.learningRate;\n\n this.mapRadius = Math.floor(Math.max(x, y) / 2);\n\n this.algorithmMethod = this.options.method;\n\n this._initNodes();\n\n this.done = false;\n}\n\nSOM.load = function loadModel(model, distance) {\n if (model.name === 'SOM') {\n var x = model.data.length,\n y = model.data[0].length;\n if (distance) {\n model.options.distance = distance;\n } else if (model.options.distance) {\n model.options.distance = eval('(' + model.options.distance + ')');\n }\n var som = new SOM(x, y, model.options, true);\n som.nodes = new Array(x);\n for (var i = 0; i < x; i++) {\n som.nodes[i] = new Array(y);\n for (var j = 0; j < y; j++) {\n som.nodes[i][j] = new som.nodeType(i, j, model.data[i][j], som);\n }\n }\n return som;\n } else {\n throw new Error('expecting a SOM model');\n }\n};\n\nSOM.prototype.export = function exportModel(includeDistance) {\n if (!this.done) {\n throw new Error('model is not ready yet');\n }\n var model = {\n name: 'SOM'\n };\n model.options = {\n fields: this.options.fields,\n gridType: this.options.gridType,\n torus: this.options.torus\n };\n model.data = new Array(this.x);\n for (var i = 0; i < this.x; i++) {\n model.data[i] = new Array(this.y);\n for (var j = 0; j < this.y; j++) {\n model.data[i][j] = this.nodes[i][j].weights;\n }\n }\n if (includeDistance) {\n model.options.distance = this.distance.toString();\n }\n return model;\n};\n\nSOM.prototype._initNodes = function initNodes() {\n var now = Date.now(),\n i, j, k;\n this.nodes = new Array(this.x);\n for (i = 0; i < this.x; i++) {\n this.nodes[i] = new Array(this.y);\n for (j = 0; j < this.y; j++) {\n var weights = new Array(this.numWeights);\n for (k = 0; k < this.numWeights; k++) {\n weights[k] = this.randomizer();\n }\n this.nodes[i][j] = new this.nodeType(i, j, weights, this);\n }\n }\n this.times.initNodes = Date.now() - now;\n};\n\nSOM.prototype.setTraining = function setTraining(trainingSet) {\n if (this.trainingSet) {\n throw new Error('training set has already been set');\n }\n var now = Date.now();\n var convertedSet = trainingSet;\n var i, l = trainingSet.length;\n if (this.extractor) {\n convertedSet = new Array(l);\n for (i = 0; i < l; i++) {\n convertedSet[i] = this.extractor(trainingSet[i]);\n }\n }\n this.numIterations = this.iterations * l;\n\n if (this.algorithmMethod === 'random') {\n this.timeConstant = this.numIterations / Math.log(this.mapRadius);\n } else {\n this.timeConstant = l / Math.log(this.mapRadius);\n }\n this.trainingSet = convertedSet;\n this.times.setTraining = Date.now() - now;\n};\n\nSOM.prototype.trainOne = function trainOne() {\n if (this.done) {\n\n return false;\n\n } else if (this.numIterations-- > 0) {\n\n var neighbourhoodRadius,\n trainingValue,\n trainingSetFactor;\n\n if (this.algorithmMethod === 'random') { // Pick a random value of the training set at each step\n neighbourhoodRadius = this.mapRadius * Math.exp(-this.iterationCount / this.timeConstant);\n trainingValue = getRandomValue(this.trainingSet, this.randomizer);\n this._adjust(trainingValue, neighbourhoodRadius);\n this.learningRate = this.startLearningRate * Math.exp(-this.iterationCount / this.numIterations);\n } else { // Get next input vector\n trainingSetFactor = -Math.floor(this.iterationCount / this.trainingSet.length);\n neighbourhoodRadius = this.mapRadius * Math.exp(trainingSetFactor / this.timeConstant);\n trainingValue = this.trainingSet[this.iterationCount % this.trainingSet.length];\n this._adjust(trainingValue, neighbourhoodRadius);\n if (((this.iterationCount + 1) % this.trainingSet.length) === 0) {\n this.learningRate = this.startLearningRate * Math.exp(trainingSetFactor / Math.floor(this.numIterations / this.trainingSet.length));\n }\n }\n\n this.iterationCount++;\n\n return true;\n\n } else {\n\n this.done = true;\n return false;\n\n }\n};\n\nSOM.prototype._adjust = function adjust(trainingValue, neighbourhoodRadius) {\n var now = Date.now(),\n x, y, dist, influence;\n\n var bmu = this._findBestMatchingUnit(trainingValue);\n\n var now2 = Date.now();\n this.times.findBMU += now2 - now;\n\n var radiusLimit = Math.floor(neighbourhoodRadius);\n var xMin = bmu.x - radiusLimit,\n xMax = bmu.x + radiusLimit,\n yMin = bmu.y - radiusLimit,\n yMax = bmu.y + radiusLimit;\n\n for (x = xMin; x <= xMax; x++) {\n var theX = x;\n if (x < 0) {\n theX += this.x;\n } else if (x >= this.x) {\n theX -= this.x;\n }\n for (y = yMin; y <= yMax; y++) {\n var theY = y;\n if (y < 0) {\n theY += this.y;\n } else if (y >= this.y) {\n theY -= this.y;\n }\n\n dist = bmu[this.distanceMethod](this.nodes[theX][theY]);\n\n if (dist < neighbourhoodRadius) {\n influence = Math.exp(-dist / (2 * neighbourhoodRadius));\n this.nodes[theX][theY].adjustWeights(trainingValue, this.learningRate, influence);\n }\n\n }\n }\n\n this.times.adjust += (Date.now() - now2);\n\n};\n\nSOM.prototype.train = function train(trainingSet) {\n if (!this.done) {\n this.setTraining(trainingSet);\n while (this.trainOne()) {\n }\n }\n};\n\nSOM.prototype.getConvertedNodes = function getConvertedNodes() {\n var result = new Array(this.x);\n for (var i = 0; i < this.x; i++) {\n result[i] = new Array(this.y);\n for (var j = 0; j < this.y; j++) {\n var node = this.nodes[i][j];\n result[i][j] = this.creator ? this.creator(node.weights) : node.weights;\n }\n }\n return result;\n};\n\nSOM.prototype._findBestMatchingUnit = function findBestMatchingUnit(candidate) {\n\n var bmu,\n lowest = Infinity,\n dist;\n\n for (var i = 0; i < this.x; i++) {\n for (var j = 0; j < this.y; j++) {\n dist = this.distance(this.nodes[i][j].weights, candidate);\n if (dist < lowest) {\n lowest = dist;\n bmu = this.nodes[i][j];\n }\n }\n }\n\n return bmu;\n\n};\n\nSOM.prototype.predict = function predict(data, computePosition) {\n if (typeof data === 'boolean') {\n computePosition = data;\n data = null;\n }\n if (!data) {\n data = this.trainingSet;\n }\n if (Array.isArray(data) && (Array.isArray(data[0]) || (typeof data[0] === 'object'))) { // predict a dataset\n var self = this;\n return data.map(function (element) {\n return self._predict(element, computePosition);\n });\n } else { // predict a single element\n return this._predict(data, computePosition);\n }\n};\n\nSOM.prototype._predict = function _predict(element, computePosition) {\n if (!Array.isArray(element)) {\n element = this.extractor(element);\n }\n var bmu = this._findBestMatchingUnit(element);\n var result = [bmu.x, bmu.y];\n if (computePosition) {\n result[2] = bmu.getPosition(element);\n }\n return result;\n};\n\n// As seen in http://www.scholarpedia.org/article/Kohonen_network\nSOM.prototype.getQuantizationError = function getQuantizationError() {\n var fit = this.getFit(),\n l = fit.length,\n sum = 0;\n for (var i = 0; i < l; i++) {\n sum += fit[i];\n }\n return sum / l;\n};\n\nSOM.prototype.getFit = function getFit(dataset) {\n if (!dataset) {\n dataset = this.trainingSet;\n }\n var l = dataset.length,\n bmu,\n result = new Array(l);\n for (var i = 0; i < l; i++) {\n bmu = this._findBestMatchingUnit(dataset[i]);\n result[i] = Math.sqrt(this.distance(dataset[i], bmu.weights));\n }\n return result;\n};\n\nfunction getConverters(fields) {\n var l = fields.length,\n normalizers = new Array(l),\n denormalizers = new Array(l);\n for (var i = 0; i < l; i++) {\n normalizers[i] = getNormalizer(fields[i].range);\n denormalizers[i] = getDenormalizer(fields[i].range);\n }\n return {\n extractor: function extractor(value) {\n var result = new Array(l);\n for (var i = 0; i < l; i++) {\n result[i] = normalizers[i](value[fields[i].name]);\n }\n return result;\n },\n creator: function creator(value) {\n var result = {};\n for (var i = 0; i < l; i++) {\n result[fields[i].name] = denormalizers[i](value[i]);\n }\n return result;\n }\n };\n}\n\nfunction getNormalizer(minMax) {\n return function normalizer(value) {\n return (value - minMax[0]) / (minMax[1] - minMax[0]);\n };\n}\n\nfunction getDenormalizer(minMax) {\n return function denormalizer(value) {\n return (minMax[0] + value * (minMax[1] - minMax[0]));\n };\n}\n\nfunction squareEuclidean(a, b) {\n var d = 0;\n for (var i = 0, ii = a.length; i < ii; i++) {\n d += (a[i] - b[i]) * (a[i] - b[i]);\n }\n return d;\n}\n\nfunction getRandomValue(arr, randomizer) {\n return arr[Math.floor(randomizer() * arr.length)];\n}\n\nfunction getMaxDistance(distance, numWeights) {\n var zero = new Array(numWeights),\n one = new Array(numWeights);\n for (var i = 0; i < numWeights; i++) {\n zero[i] = 0;\n one[i] = 1;\n }\n return distance(zero, one);\n}\n\nmodule.exports = SOM;","export default function maybeToPrecision(value, digits) {\n if (value < 0) {\n value = 0 - value;\n if (typeof digits === 'number') {\n return `- ${value.toPrecision(digits)}`;\n } else {\n return `- ${value.toString()}`;\n }\n } else {\n if (typeof digits === 'number') {\n return value.toPrecision(digits);\n } else {\n return value.toString();\n }\n }\n}\n","export default function checkArraySize(x, y) {\n if (!Array.isArray(x) || !Array.isArray(y)) {\n throw new TypeError('x and y must be arrays');\n }\n if (x.length !== y.length) {\n throw new RangeError('x and y arrays must have the same length');\n }\n}\n","export { default as maybeToPrecision } from './maybeToPrecision';\nexport { default as checkArrayLength } from './checkArrayLength';\n\nexport default class BaseRegression {\n constructor() {\n if (new.target === BaseRegression) {\n throw new Error('BaseRegression must be subclassed');\n }\n }\n\n predict(x) {\n if (typeof x === 'number') {\n return this._predict(x);\n } else if (Array.isArray(x)) {\n const y = [];\n for (let i = 0; i < x.length; i++) {\n y.push(this._predict(x[i]));\n }\n return y;\n } else {\n throw new TypeError('x must be a number or array');\n }\n }\n\n _predict() {\n throw new Error('_predict must be implemented');\n }\n\n train() {\n // Do nothing for this package\n }\n\n toString() {\n return '';\n }\n\n toLaTeX() {\n return '';\n }\n\n /**\n * Return the correlation coefficient of determination (r) and chi-square.\n * @param {Array} x\n * @param {Array} y\n * @return {object}\n */\n score(x, y) {\n if (!Array.isArray(x) || !Array.isArray(y) || x.length !== y.length) {\n throw new Error('x and y must be arrays of the same length');\n }\n\n const n = x.length;\n const y2 = new Array(n);\n for (let i = 0; i < n; i++) {\n y2[i] = this._predict(x[i]);\n }\n\n let xSum = 0;\n let ySum = 0;\n let chi2 = 0;\n let rmsd = 0;\n let xSquared = 0;\n let ySquared = 0;\n let xY = 0;\n for (let i = 0; i < n; i++) {\n xSum += y2[i];\n ySum += y[i];\n xSquared += y2[i] * y2[i];\n ySquared += y[i] * y[i];\n xY += y2[i] * y[i];\n if (y[i] !== 0) {\n chi2 += ((y[i] - y2[i]) * (y[i] - y2[i])) / y[i];\n }\n rmsd += (y[i] - y2[i]) * (y[i] - y2[i]);\n }\n\n const r =\n (n * xY - xSum * ySum) /\n Math.sqrt((n * xSquared - xSum * xSum) * (n * ySquared - ySum * ySum));\n\n return {\n r: r,\n r2: r * r,\n chi2: chi2,\n rmsd: Math.sqrt(rmsd / n)\n };\n }\n}\n","import BaseRegression, {\n checkArrayLength,\n maybeToPrecision\n} from 'ml-regression-base';\nimport { Matrix, MatrixTransposeView, solve } from 'ml-matrix';\n\nexport default class PolynomialRegression extends BaseRegression {\n constructor(x, y, degree) {\n super();\n if (x === true) {\n this.degree = y.degree;\n this.powers = y.powers;\n this.coefficients = y.coefficients;\n } else {\n checkArrayLength(x, y);\n regress(this, x, y, degree);\n }\n }\n\n _predict(x) {\n let y = 0;\n for (let k = 0; k < this.powers.length; k++) {\n y += this.coefficients[k] * Math.pow(x, this.powers[k]);\n }\n return y;\n }\n\n toJSON() {\n return {\n name: 'polynomialRegression',\n degree: this.degree,\n powers: this.powers,\n coefficients: this.coefficients\n };\n }\n\n toString(precision) {\n return this._toFormula(precision, false);\n }\n\n toLaTeX(precision) {\n return this._toFormula(precision, true);\n }\n\n _toFormula(precision, isLaTeX) {\n let sup = '^';\n let closeSup = '';\n let times = ' * ';\n if (isLaTeX) {\n sup = '^{';\n closeSup = '}';\n times = '';\n }\n\n let fn = '';\n let str = '';\n for (let k = 0; k < this.coefficients.length; k++) {\n str = '';\n if (this.coefficients[k] !== 0) {\n if (this.powers[k] === 0) {\n str = maybeToPrecision(this.coefficients[k], precision);\n } else {\n if (this.powers[k] === 1) {\n str =\n `${maybeToPrecision(this.coefficients[k], precision) + times}x`;\n } else {\n str =\n `${maybeToPrecision(this.coefficients[k], precision) +\n times\n }x${\n sup\n }${this.powers[k]\n }${closeSup}`;\n }\n }\n\n if (this.coefficients[k] > 0 && k !== this.coefficients.length - 1) {\n str = ` + ${str}`;\n } else if (k !== this.coefficients.length - 1) {\n str = ` ${str}`;\n }\n }\n fn = str + fn;\n }\n if (fn.charAt(0) === '+') {\n fn = fn.slice(1);\n }\n\n return `f(x) = ${fn}`;\n }\n\n static load(json) {\n if (json.name !== 'polynomialRegression') {\n throw new TypeError('not a polynomial regression model');\n }\n return new PolynomialRegression(true, json);\n }\n}\n\nfunction regress(pr, x, y, degree) {\n const n = x.length;\n let powers;\n if (Array.isArray(degree)) {\n powers = degree;\n degree = powers.length;\n } else {\n degree++;\n powers = new Array(degree);\n for (let k = 0; k < degree; k++) {\n powers[k] = k;\n }\n }\n const F = new Matrix(n, degree);\n const Y = new Matrix([y]);\n for (let k = 0; k < degree; k++) {\n for (let i = 0; i < n; i++) {\n if (powers[k] === 0) {\n F.set(i, k, 1);\n } else {\n F.set(i, k, Math.pow(x[i], powers[k]));\n }\n }\n }\n\n const FT = new MatrixTransposeView(F);\n const A = FT.mmul(F);\n const B = FT.mmul(new MatrixTransposeView(Y));\n\n pr.degree = degree - 1;\n pr.powers = powers;\n pr.coefficients = solve(A, B).to1DArray();\n}\n","import BaseRegression, {\n checkArrayLength,\n maybeToPrecision\n} from 'ml-regression-base';\n\nexport default class SimpleLinearRegression extends BaseRegression {\n constructor(x, y) {\n super();\n if (x === true) {\n this.slope = y.slope;\n this.intercept = y.intercept;\n this.coefficients = [y.intercept, y.slope];\n } else {\n checkArrayLength(x, y);\n regress(this, x, y);\n }\n }\n\n toJSON() {\n return {\n name: 'simpleLinearRegression',\n slope: this.slope,\n intercept: this.intercept\n };\n }\n\n _predict(x) {\n return this.slope * x + this.intercept;\n }\n\n computeX(y) {\n return (y - this.intercept) / this.slope;\n }\n\n toString(precision) {\n let result = 'f(x) = ';\n if (this.slope !== 0) {\n const xFactor = maybeToPrecision(this.slope, precision);\n result += `${xFactor === '1' ? '' : `${xFactor} * `}x`;\n if (this.intercept !== 0) {\n const absIntercept = Math.abs(this.intercept);\n const operator = absIntercept === this.intercept ? '+' : '-';\n result += ` ${operator} ${maybeToPrecision(absIntercept, precision)}`;\n }\n } else {\n result += maybeToPrecision(this.intercept, precision);\n }\n return result;\n }\n\n toLaTeX(precision) {\n return this.toString(precision);\n }\n\n static load(json) {\n if (json.name !== 'simpleLinearRegression') {\n throw new TypeError('not a SLR model');\n }\n return new SimpleLinearRegression(true, json);\n }\n}\n\nfunction regress(slr, x, y) {\n const n = x.length;\n let xSum = 0;\n let ySum = 0;\n\n let xSquared = 0;\n let xY = 0;\n\n for (let i = 0; i < n; i++) {\n xSum += x[i];\n ySum += y[i];\n xSquared += x[i] * x[i];\n xY += x[i] * y[i];\n }\n\n const numerator = n * xY - xSum * ySum;\n slr.slope = numerator / (n * xSquared - xSum * xSum);\n slr.intercept = (1 / n) * ySum - slr.slope * (1 / n) * xSum;\n slr.coefficients = [slr.intercept, slr.slope];\n}\n","import BaseRegression, {\n checkArrayLength,\n maybeToPrecision\n} from 'ml-regression-base';\nimport SimpleLinearRegression from 'ml-regression-simple-linear';\n\nexport default class ExponentialRegression extends BaseRegression {\n constructor(x, y) {\n super();\n if (x === true) {\n this.A = y.A;\n this.B = y.B;\n } else {\n checkArrayLength(x, y);\n regress(this, x, y);\n }\n }\n\n _predict(input) {\n return this.B * Math.exp(input * this.A);\n }\n\n toJSON() {\n return {\n name: 'exponentialRegression',\n A: this.A,\n B: this.B\n };\n }\n\n toString(precision) {\n return (\n `f(x) = ${\n maybeToPrecision(this.B, precision)\n } * e^(${\n maybeToPrecision(this.A, precision)\n } * x)`\n );\n }\n\n toLaTeX(precision) {\n if (this.A >= 0) {\n return (\n `f(x) = ${\n maybeToPrecision(this.B, precision)\n }e^{${\n maybeToPrecision(this.A, precision)\n }x}`\n );\n } else {\n return (\n `f(x) = \\\\frac{${\n maybeToPrecision(this.B, precision)\n }}{e^{${\n maybeToPrecision(-this.A, precision)\n }x}}`\n );\n }\n }\n\n static load(json) {\n if (json.name !== 'exponentialRegression') {\n throw new TypeError('not a exponential regression model');\n }\n return new ExponentialRegression(true, json);\n }\n}\n\nfunction regress(er, x, y) {\n const n = x.length;\n const yl = new Array(n);\n for (let i = 0; i < n; i++) {\n yl[i] = Math.log(y[i]);\n }\n\n const linear = new SimpleLinearRegression(x, yl);\n er.A = linear.slope;\n er.B = Math.exp(linear.intercept);\n}\n","import BaseRegression, {\n checkArrayLength,\n maybeToPrecision\n} from 'ml-regression-base';\nimport SimpleLinearRegression from 'ml-regression-simple-linear';\n\nexport default class PowerRegression extends BaseRegression {\n constructor(x, y) {\n super();\n if (x === true) {\n // reloading model\n this.A = y.A;\n this.B = y.B;\n } else {\n checkArrayLength(x, y);\n regress(this, x, y);\n }\n }\n\n _predict(newInputs) {\n return this.A * Math.pow(newInputs, this.B);\n }\n\n toJSON() {\n return {\n name: 'powerRegression',\n A: this.A,\n B: this.B\n };\n }\n\n toString(precision) {\n return `f(x) = ${maybeToPrecision(\n this.A,\n precision\n )} * x^${maybeToPrecision(this.B, precision)}`;\n }\n\n toLaTeX(precision) {\n let latex = '';\n if (this.B >= 0) {\n latex = `f(x) = ${maybeToPrecision(\n this.A,\n precision\n )}x^{${maybeToPrecision(this.B, precision)}}`;\n } else {\n latex = `f(x) = \\\\frac{${maybeToPrecision(\n this.A,\n precision\n )}}{x^{${maybeToPrecision(-this.B, precision)}}}`;\n }\n latex = latex.replace(/e([+-]?[0-9]+)/g, 'e^{$1}');\n return latex;\n }\n\n static load(json) {\n if (json.name !== 'powerRegression') {\n throw new TypeError('not a power regression model');\n }\n return new PowerRegression(true, json);\n }\n}\n\nfunction regress(pr, x, y) {\n const n = x.length;\n const xl = new Array(n);\n const yl = new Array(n);\n for (let i = 0; i < n; i++) {\n xl[i] = Math.log(x[i]);\n yl[i] = Math.log(y[i]);\n }\n\n const linear = new SimpleLinearRegression(xl, yl);\n pr.A = Math.exp(linear.intercept);\n pr.B = linear.slope;\n}\n","import Matrix, { SVD, pseudoInverse } from 'ml-matrix';\n\nexport default class MultivariateLinearRegression {\n constructor(x, y, options = {}) {\n const { intercept = true, statistics = true } = options;\n this.statistics = statistics;\n if (x === true) {\n this.weights = y.weights;\n this.inputs = y.inputs;\n this.outputs = y.outputs;\n this.intercept = y.intercept;\n } else {\n x = new Matrix(x);\n y = new Matrix(y);\n if (intercept) {\n x.addColumn(new Array(x.rows).fill(1));\n }\n let xt = x.transpose();\n const xx = xt\n .mmul(x);\n const xy = xt\n .mmul(y);\n const invxx = new SVD(xx)\n .inverse();\n const beta = xy\n .transpose()\n .mmul(invxx)\n .transpose();\n this.weights = beta.to2DArray();\n this.inputs = x.columns;\n this.outputs = y.columns;\n if (intercept) this.inputs--;\n this.intercept = intercept;\n if (statistics) {\n /*\n * Let's add some basic statistics about the beta's to be able to interpret them.\n * source: http://dept.stat.lsa.umich.edu/~kshedden/Courses/Stat401/Notes/401-multreg.pdf\n * validated against Excel Regression AddIn\n * test: \"datamining statistics test\"\n */\n const fittedValues = x.mmul(beta);\n const residuals = y.clone().addM(fittedValues.neg());\n const variance =\n residuals\n .to2DArray()\n .map((ri) => Math.pow(ri[0], 2))\n .reduce((a, b) => a + b) /\n (y.rows - x.columns);\n this.stdError = Math.sqrt(variance);\n this.stdErrorMatrix = pseudoInverse(xx).mul(variance);\n this.stdErrors = this.stdErrorMatrix\n .diagonal()\n .map((d) => Math.sqrt(d));\n this.tStats = this.weights.map((d, i) =>\n (this.stdErrors[i] === 0 ? 0 : d[0] / this.stdErrors[i])\n );\n }\n }\n }\n\n predict(x) {\n if (Array.isArray(x)) {\n if (typeof x[0] === 'number') {\n return this._predict(x);\n } else if (Array.isArray(x[0])) {\n const y = new Array(x.length);\n for (let i = 0; i < x.length; i++) {\n y[i] = this._predict(x[i]);\n }\n return y;\n }\n } else if (Matrix.isMatrix(x)) {\n const y = new Matrix(x.rows, this.outputs);\n for (let i = 0; i < x.rows; i++) {\n y.setRow(i, this._predict(x.getRow(i)));\n }\n return y;\n }\n throw new TypeError('x must be a matrix or array of numbers');\n }\n\n _predict(x) {\n const result = new Array(this.outputs);\n if (this.intercept) {\n for (let i = 0; i < this.outputs; i++) {\n result[i] = this.weights[this.inputs][i];\n }\n } else {\n result.fill(0);\n }\n for (let i = 0; i < this.inputs; i++) {\n for (let j = 0; j < this.outputs; j++) {\n result[j] += this.weights[i][j] * x[i];\n }\n }\n return result;\n }\n\n score() {\n throw new Error('score method is not implemented yet');\n }\n\n toJSON() {\n return {\n name: 'multivariateLinearRegression',\n weights: this.weights,\n inputs: this.inputs,\n outputs: this.outputs,\n intercept: this.intercept,\n summary: this.statistics\n ? {\n regressionStatistics: {\n standardError: this.stdError,\n observations: this.outputs\n },\n variables: this.weights.map((d, i) => {\n return {\n label:\n i === this.weights.length - 1\n ? 'Intercept'\n : `X Variable ${i + 1}`,\n coefficients: d,\n standardError: this.stdErrors[i],\n tStat: this.tStats[i]\n };\n })\n }\n : undefined\n };\n }\n\n static load(model) {\n if (model.name !== 'multivariateLinearRegression') {\n throw new Error('not a MLR model');\n }\n return new MultivariateLinearRegression(true, model);\n }\n}\n","'use strict';\n\nconst { squaredEuclidean } = require('ml-distance-euclidean');\n\nconst defaultOptions = {\n sigma: 1\n};\n\nclass GaussianKernel {\n constructor(options) {\n options = Object.assign({}, defaultOptions, options);\n this.sigma = options.sigma;\n this.divisor = 2 * options.sigma * options.sigma;\n }\n compute(x, y) {\n const distance = squaredEuclidean(x, y);\n return Math.exp(-distance / this.divisor);\n }\n}\n\nmodule.exports = GaussianKernel;\n","'use strict';\n\nconst defaultOptions = {\n degree: 1,\n constant: 1,\n scale: 1\n};\n\nclass PolynomialKernel {\n constructor(options) {\n options = Object.assign({}, defaultOptions, options);\n\n this.degree = options.degree;\n this.constant = options.constant;\n this.scale = options.scale;\n }\n\n compute(x, y) {\n var sum = 0;\n for (var i = 0; i < x.length; i++) {\n sum += x[i] * y[i];\n }\n return Math.pow(this.scale * sum + this.constant, this.degree);\n }\n}\n\nmodule.exports = PolynomialKernel;\n","'use strict';\n\nconst defaultOptions = {\n alpha: 0.01,\n constant: -Math.E\n};\n\nclass SigmoidKernel {\n constructor(options) {\n options = Object.assign({}, defaultOptions, options);\n this.alpha = options.alpha;\n this.constant = options.constant;\n }\n\n compute(x, y) {\n var sum = 0;\n for (var i = 0; i < x.length; i++) {\n sum += x[i] * y[i];\n }\n return Math.tanh(this.alpha * sum + this.constant);\n }\n}\n\nmodule.exports = SigmoidKernel;\n","'use strict';\n\nconst defaultOptions = {\n sigma: 1,\n degree: 1\n};\n\nclass ANOVAKernel {\n constructor(options) {\n options = Object.assign({}, defaultOptions, options);\n this.sigma = options.sigma;\n this.degree = options.degree;\n }\n\n compute(x, y) {\n var sum = 0;\n var len = Math.min(x.length, y.length);\n for (var i = 1; i <= len; ++i) {\n sum += Math.pow(\n Math.exp(\n -this.sigma *\n Math.pow(Math.pow(x[i - 1], i) - Math.pow(y[i - 1], i), 2)\n ),\n this.degree\n );\n }\n return sum;\n }\n}\n\nmodule.exports = ANOVAKernel;\n","'use strict';\n\nconst { squaredEuclidean } = require('ml-distance-euclidean');\n\nconst defaultOptions = {\n sigma: 1\n};\n\nclass CauchyKernel {\n constructor(options) {\n options = Object.assign({}, defaultOptions, options);\n this.sigma = options.sigma;\n }\n\n compute(x, y) {\n return 1 / (1 + squaredEuclidean(x, y) / (this.sigma * this.sigma));\n }\n}\n\nmodule.exports = CauchyKernel;\n","'use strict';\n\nconst { euclidean } = require('ml-distance-euclidean');\n\nconst defaultOptions = {\n sigma: 1\n};\n\nclass ExponentialKernel {\n constructor(options) {\n options = Object.assign({}, defaultOptions, options);\n this.sigma = options.sigma;\n this.divisor = 2 * options.sigma * options.sigma;\n }\n\n compute(x, y) {\n const distance = euclidean(x, y);\n return Math.exp(-distance / this.divisor);\n }\n}\n\nmodule.exports = ExponentialKernel;\n","'use strict';\n\nclass HistogramIntersectionKernel {\n compute(x, y) {\n var min = Math.min(x.length, y.length);\n var sum = 0;\n for (var i = 0; i < min; ++i) {\n sum += Math.min(x[i], y[i]);\n }\n\n return sum;\n }\n}\n\nmodule.exports = HistogramIntersectionKernel;\n","'use strict';\n\nconst { euclidean } = require('ml-distance-euclidean');\n\nconst defaultOptions = {\n sigma: 1\n};\n\nclass LaplacianKernel {\n constructor(options) {\n options = Object.assign({}, defaultOptions, options);\n this.sigma = options.sigma;\n }\n\n compute(x, y) {\n const distance = euclidean(x, y);\n return Math.exp(-distance / this.sigma);\n }\n}\n\nmodule.exports = LaplacianKernel;\n","'use strict';\n\nconst { squaredEuclidean } = require('ml-distance-euclidean');\n\nconst defaultOptions = {\n constant: 1\n};\n\nclass MultiquadraticKernel {\n constructor(options) {\n options = Object.assign({}, defaultOptions, options);\n this.constant = options.constant;\n }\n\n compute(x, y) {\n return Math.sqrt(squaredEuclidean(x, y) + this.constant * this.constant);\n }\n}\n\nmodule.exports = MultiquadraticKernel;\n","'use strict';\n\nconst { squaredEuclidean } = require('ml-distance-euclidean');\n\nconst defaultOptions = {\n constant: 1\n};\n\nclass RationalQuadraticKernel {\n constructor(options) {\n options = Object.assign({}, defaultOptions, options);\n this.constant = options.constant;\n }\n\n compute(x, y) {\n const distance = squaredEuclidean(x, y);\n return 1 - distance / (distance + this.constant);\n }\n}\n\nmodule.exports = RationalQuadraticKernel;\n","'use strict';\n\nconst { Matrix, MatrixTransposeView } = require('ml-matrix');\nconst GaussianKernel = require('ml-kernel-gaussian');\nconst PolynomialKernel = require('ml-kernel-polynomial');\nconst SigmoidKernel = require('ml-kernel-sigmoid');\n\nconst ANOVAKernel = require('./kernels/anova-kernel');\nconst CauchyKernel = require('./kernels/cauchy-kernel');\nconst ExponentialKernel = require('./kernels/exponential-kernel');\nconst HistogramKernel = require('./kernels/histogram-intersection-kernel');\nconst LaplacianKernel = require('./kernels/laplacian-kernel');\nconst MultiquadraticKernel = require('./kernels/multiquadratic-kernel');\nconst RationalKernel = require('./kernels/rational-quadratic-kernel');\n\nconst kernelType = {\n gaussian: GaussianKernel,\n rbf: GaussianKernel,\n polynomial: PolynomialKernel,\n poly: PolynomialKernel,\n anova: ANOVAKernel,\n cauchy: CauchyKernel,\n exponential: ExponentialKernel,\n histogram: HistogramKernel,\n min: HistogramKernel,\n laplacian: LaplacianKernel,\n multiquadratic: MultiquadraticKernel,\n rational: RationalKernel,\n sigmoid: SigmoidKernel,\n mlp: SigmoidKernel\n};\n\nclass Kernel {\n constructor(type, options) {\n this.kernelType = type;\n if (type === 'linear') return;\n\n if (typeof type === 'string') {\n type = type.toLowerCase();\n\n var KernelConstructor = kernelType[type];\n if (KernelConstructor) {\n this.kernelFunction = new KernelConstructor(options);\n } else {\n throw new Error(`unsupported kernel type: ${type}`);\n }\n } else if (typeof type === 'object' && typeof type.compute === 'function') {\n this.kernelFunction = type;\n } else {\n throw new TypeError(\n 'first argument must be a valid kernel type or instance'\n );\n }\n }\n\n compute(inputs, landmarks) {\n inputs = Matrix.checkMatrix(inputs);\n if (landmarks === undefined) {\n landmarks = inputs;\n } else {\n landmarks = Matrix.checkMatrix(landmarks);\n }\n if (this.kernelType === 'linear') {\n return inputs.mmul(new MatrixTransposeView(landmarks));\n }\n\n const kernelMatrix = new Matrix(inputs.rows, landmarks.rows);\n if (inputs === landmarks) {\n // fast path, matrix is symmetric\n for (let i = 0; i < inputs.rows; i++) {\n for (let j = i; j < inputs.rows; j++) {\n const value = this.kernelFunction.compute(\n inputs.getRow(i),\n inputs.getRow(j)\n );\n kernelMatrix.set(i, j, value);\n kernelMatrix.set(j, i, value);\n }\n }\n } else {\n for (let i = 0; i < inputs.rows; i++) {\n for (let j = 0; j < landmarks.rows; j++) {\n kernelMatrix.set(\n i,\n j,\n this.kernelFunction.compute(inputs.getRow(i), landmarks.getRow(j))\n );\n }\n }\n }\n return kernelMatrix;\n }\n}\n\nmodule.exports = Kernel;\n","import BaseRegression, {\n checkArrayLength,\n maybeToPrecision\n} from 'ml-regression-base';\nimport median from 'ml-array-median';\n\nexport default class TheilSenRegression extends BaseRegression {\n /**\n * Theil–Sen estimator\n * https://en.wikipedia.org/wiki/Theil%E2%80%93Sen_estimator\n * @param {Array|boolean} x\n * @param {Array|object} y\n * @constructor\n */\n constructor(x, y) {\n super();\n if (x === true) {\n // loads the model\n this.slope = y.slope;\n this.intercept = y.intercept;\n this.coefficients = y.coefficients;\n } else {\n // creates the model\n checkArrayLength(x, y);\n theilSen(this, x, y);\n }\n }\n\n toJSON() {\n return {\n name: 'TheilSenRegression',\n slope: this.slope,\n intercept: this.intercept\n };\n }\n\n _predict(input) {\n return this.slope * input + this.intercept;\n }\n\n computeX(input) {\n return (input - this.intercept) / this.slope;\n }\n\n toString(precision) {\n var result = 'f(x) = ';\n if (this.slope) {\n var xFactor = maybeToPrecision(this.slope, precision);\n result += `${Math.abs(xFactor - 1) < 1e-5 ? '' : `${xFactor} * `}x`;\n if (this.intercept) {\n var absIntercept = Math.abs(this.intercept);\n var operator = absIntercept === this.intercept ? '+' : '-';\n result +=\n ` ${operator} ${maybeToPrecision(absIntercept, precision)}`;\n }\n } else {\n result += maybeToPrecision(this.intercept, precision);\n }\n return result;\n }\n\n toLaTeX(precision) {\n return this.toString(precision);\n }\n\n static load(json) {\n if (json.name !== 'TheilSenRegression') {\n throw new TypeError('not a Theil-Sen model');\n }\n return new TheilSenRegression(true, json);\n }\n}\n\nfunction theilSen(regression, x, y) {\n let len = x.length;\n let slopes = new Array(len * len);\n let count = 0;\n for (let i = 0; i < len; ++i) {\n for (let j = i + 1; j < len; ++j) {\n if (x[i] !== x[j]) {\n slopes[count++] = (y[j] - y[i]) / (x[j] - x[i]);\n }\n }\n }\n slopes.length = count;\n let medianSlope = median(slopes);\n\n let cuts = new Array(len);\n for (let i = 0; i < len; ++i) {\n cuts[i] = y[i] - medianSlope * x[i];\n }\n\n regression.slope = medianSlope;\n regression.intercept = median(cuts);\n regression.coefficients = [regression.intercept, regression.slope];\n}\n","import BaseRegression, {\n checkArrayLength,\n maybeToPrecision\n} from 'ml-regression-base';\nimport { solve } from 'ml-matrix';\n\n/**\n * @class RobustPolynomialRegression\n * @param {Array} x\n * @param {Array} y\n * @param {number} degree - polynomial degree\n */\nexport default class RobustPolynomialRegression extends BaseRegression {\n constructor(x, y, degree) {\n super();\n if (x === true) {\n this.degree = y.degree;\n this.powers = y.powers;\n this.coefficients = y.coefficients;\n } else {\n checkArrayLength(x, y);\n robustPolynomial(this, x, y, degree);\n }\n }\n\n toJSON() {\n return {\n name: 'robustPolynomialRegression',\n degree: this.degree,\n powers: this.powers,\n coefficients: this.coefficients\n };\n }\n\n _predict(x) {\n return predict(x, this.powers, this.coefficients);\n }\n\n /**\n * Display the formula\n * @param {number} precision - precision for the numbers\n * @return {string}\n */\n toString(precision) {\n return this._toFormula(precision, false);\n }\n\n /**\n * Display the formula in LaTeX format\n * @param {number} precision - precision for the numbers\n * @return {string}\n */\n toLaTeX(precision) {\n return this._toFormula(precision, true);\n }\n\n _toFormula(precision, isLaTeX) {\n let sup = '^';\n let closeSup = '';\n let times = ' * ';\n if (isLaTeX) {\n sup = '^{';\n closeSup = '}';\n times = '';\n }\n\n let fn = '';\n let str = '';\n for (let k = 0; k < this.coefficients.length; k++) {\n str = '';\n if (this.coefficients[k] !== 0) {\n if (this.powers[k] === 0) {\n str = maybeToPrecision(this.coefficients[k], precision);\n } else {\n if (this.powers[k] === 1) {\n str = `${maybeToPrecision(this.coefficients[k], precision) +\n times}x`;\n } else {\n str = `${maybeToPrecision(this.coefficients[k], precision) +\n times}x${sup}${this.powers[k]}${closeSup}`;\n }\n }\n\n if (this.coefficients[k] > 0 && k !== this.coefficients.length - 1) {\n str = ` + ${str}`;\n } else if (k !== this.coefficients.length - 1) {\n str = ` ${str}`;\n }\n }\n fn = str + fn;\n }\n if (fn.charAt(0) === '+') {\n fn = fn.slice(1);\n }\n\n return `f(x) = ${fn}`;\n }\n\n static load(json) {\n if (json.name !== 'robustPolynomialRegression') {\n throw new TypeError('not a RobustPolynomialRegression model');\n }\n return new RobustPolynomialRegression(true, json);\n }\n}\n\nfunction robustPolynomial(regression, x, y, degree) {\n let powers = Array(degree)\n .fill(0)\n .map((_, index) => index);\n\n const tuples = getRandomTuples(x, y, degree);\n\n var min;\n for (var i = 0; i < tuples.length; i++) {\n var tuple = tuples[i];\n var coefficients = calcCoefficients(tuple, powers);\n\n var residuals = x.slice();\n for (var j = 0; j < x.length; j++) {\n residuals[j] = y[j] - predict(x[j], powers, coefficients);\n residuals[j] = {\n residual: residuals[j] * residuals[j],\n coefficients\n };\n }\n\n var median = residualsMedian(residuals);\n if (!min || median.residual < min.residual) {\n min = median;\n }\n }\n\n regression.degree = degree;\n regression.powers = powers;\n regression.coefficients = min.coefficients;\n}\n\n/**\n * @ignore\n * @param {Array} x\n * @param {Array} y\n * @param {number} degree\n * @return {Array<{x:number,y:number}>}\n */\nfunction getRandomTuples(x, y, degree) {\n var len = Math.floor(x.length / degree);\n var tuples = new Array(len);\n\n for (var i = 0; i < x.length; i++) {\n var pos = Math.floor(Math.random() * len);\n\n var counter = 0;\n while (counter < x.length) {\n if (!tuples[pos]) {\n tuples[pos] = [\n {\n x: x[i],\n y: y[i]\n }\n ];\n break;\n } else if (tuples[pos].length < degree) {\n tuples[pos].push({\n x: x[i],\n y: y[i]\n });\n break;\n } else {\n counter++;\n pos = (pos + 1) % len;\n }\n }\n\n if (counter === x.length) {\n return tuples;\n }\n }\n return tuples;\n}\n\n/**\n * @ignore\n * @param {{x:number,y:number}} tuple\n * @param {Array} powers\n * @return {Array}\n */\nfunction calcCoefficients(tuple, powers) {\n var X = tuple.slice();\n var Y = tuple.slice();\n for (var i = 0; i < X.length; i++) {\n Y[i] = [tuple[i].y];\n X[i] = new Array(powers.length);\n for (var j = 0; j < powers.length; j++) {\n X[i][j] = Math.pow(tuple[i].x, powers[j]);\n }\n }\n\n return solve(X, Y).to1DArray();\n}\n\nfunction predict(x, powers, coefficients) {\n let y = 0;\n for (let k = 0; k < powers.length; k++) {\n y += coefficients[k] * Math.pow(x, powers[k]);\n }\n return y;\n}\n\nfunction residualsMedian(residuals) {\n residuals.sort((a, b) => a.residual - b.residual);\n\n var l = residuals.length;\n var half = Math.floor(l / 2);\n return l % 2 === 0 ? residuals[half - 1] : residuals[half];\n}\n","/**\n * Calculate current error\n * @ignore\n * @param {{x:Array, y:Array}} data - Array of points to fit in the format [x1, x2, ... ], [y1, y2, ... ]\n * @param {Array} parameters - Array of current parameter values\n * @param {function} parameterizedFunction - The parameters and returns a function with the independent variable as a parameter\n * @return {number}\n */\nexport default function errorCalculation(\n data,\n parameters,\n parameterizedFunction\n) {\n var error = 0;\n const func = parameterizedFunction(parameters);\n\n for (var i = 0; i < data.x.length; i++) {\n error += Math.abs(data.y[i] - func(data.x[i]));\n }\n\n return error;\n}\n","import { inverse, Matrix } from 'ml-matrix';\n\n/**\n * Difference of the matrix function over the parameters\n * @ignore\n * @param {{x:Array, y:Array}} data - Array of points to fit in the format [x1, x2, ... ], [y1, y2, ... ]\n * @param {Array} evaluatedData - Array of previous evaluated function values\n * @param {Array} params - Array of previous parameter values\n * @param {number} gradientDifference - Adjustment for decrease the damping parameter\n * @param {function} paramFunction - The parameters and returns a function with the independent variable as a parameter\n * @return {Matrix}\n */\nfunction gradientFunction(\n data,\n evaluatedData,\n params,\n gradientDifference,\n paramFunction\n) {\n const n = params.length;\n const m = data.x.length;\n\n var ans = new Array(n);\n\n for (var param = 0; param < n; param++) {\n ans[param] = new Array(m);\n var auxParams = params.concat();\n auxParams[param] += gradientDifference;\n var funcParam = paramFunction(auxParams);\n\n for (var point = 0; point < m; point++) {\n ans[param][point] = evaluatedData[point] - funcParam(data.x[point]);\n }\n }\n return new Matrix(ans);\n}\n\n/**\n * Matrix function over the samples\n * @ignore\n * @param {{x:Array, y:Array}} data - Array of points to fit in the format [x1, x2, ... ], [y1, y2, ... ]\n * @param {Array} evaluatedData - Array of previous evaluated function values\n * @return {Matrix}\n */\nfunction matrixFunction(data, evaluatedData) {\n const m = data.x.length;\n\n var ans = new Array(m);\n\n for (var point = 0; point < m; point++) {\n ans[point] = [data.y[point] - evaluatedData[point]];\n }\n\n return new Matrix(ans);\n}\n\n/**\n * Iteration for Levenberg-Marquardt\n * @ignore\n * @param {{x:Array, y:Array}} data - Array of points to fit in the format [x1, x2, ... ], [y1, y2, ... ]\n * @param {Array} params - Array of previous parameter values\n * @param {number} damping - Levenberg-Marquardt parameter\n * @param {number} gradientDifference - Adjustment for decrease the damping parameter\n * @param {function} parameterizedFunction - The parameters and returns a function with the independent variable as a parameter\n * @return {Array}\n */\nexport default function step(\n data,\n params,\n damping,\n gradientDifference,\n parameterizedFunction\n) {\n var value = damping * gradientDifference * gradientDifference;\n var identity = Matrix.eye(params.length, params.length, value);\n\n const func = parameterizedFunction(params);\n var evaluatedData = data.x.map((e) => func(e));\n\n var gradientFunc = gradientFunction(\n data,\n evaluatedData,\n params,\n gradientDifference,\n parameterizedFunction\n );\n var matrixFunc = matrixFunction(data, evaluatedData);\n var inverseMatrix = inverse(\n identity.add(gradientFunc.mmul(gradientFunc.transpose()))\n );\n\n params = new Matrix([params]);\n params = params.sub(\n inverseMatrix\n .mmul(gradientFunc)\n .mmul(matrixFunc)\n .mul(gradientDifference)\n .transpose()\n );\n\n return params.to1DArray();\n}\n","import errorCalculation from './errorCalculation';\nimport step from './step';\n\n/**\n * Curve fitting algorithm\n * @param {{x:Array, y:Array}} data - Array of points to fit in the format [x1, x2, ... ], [y1, y2, ... ]\n * @param {function} parameterizedFunction - The parameters and returns a function with the independent variable as a parameter\n * @param {object} [options] - Options object\n * @param {number} [options.damping] - Levenberg-Marquardt parameter\n * @param {number} [options.gradientDifference = 10e-2] - Adjustment for decrease the damping parameter\n * @param {Array} [options.minValues] - Minimum allowed values for parameters\n * @param {Array} [options.maxValues] - Maximum allowed values for parameters\n * @param {Array} [options.initialValues] - Array of initial parameter values\n * @param {number} [options.maxIterations = 100] - Maximum of allowed iterations\n * @param {number} [options.errorTolerance = 10e-3] - Minimum uncertainty allowed for each point\n * @return {{parameterValues: Array, parameterError: number, iterations: number}}\n */\nexport default function levenbergMarquardt(\n data,\n parameterizedFunction,\n options = {}\n) {\n let {\n maxIterations = 100,\n gradientDifference = 10e-2,\n damping = 0,\n errorTolerance = 10e-3,\n minValues,\n maxValues,\n initialValues\n } = options;\n\n if (damping <= 0) {\n throw new Error('The damping option must be a positive number');\n } else if (!data.x || !data.y) {\n throw new Error('The data parameter must have x and y elements');\n } else if (\n !Array.isArray(data.x) ||\n data.x.length < 2 ||\n !Array.isArray(data.y) ||\n data.y.length < 2\n ) {\n throw new Error(\n 'The data parameter elements must be an array with more than 2 points'\n );\n } else if (data.x.length !== data.y.length) {\n throw new Error('The data parameter elements must have the same size');\n }\n\n var parameters =\n initialValues || new Array(parameterizedFunction.length).fill(1);\n let parLen = parameters.length;\n maxValues = maxValues || new Array(parLen).fill(Number.MAX_SAFE_INTEGER);\n minValues = minValues || new Array(parLen).fill(Number.MIN_SAFE_INTEGER);\n\n if (maxValues.length !== minValues.length) {\n throw new Error('minValues and maxValues must be the same size');\n }\n\n if (!Array.isArray(parameters)) {\n throw new Error('initialValues must be an array');\n }\n\n var error = errorCalculation(data, parameters, parameterizedFunction);\n\n var converged = error <= errorTolerance;\n\n for (\n var iteration = 0;\n iteration < maxIterations && !converged;\n iteration++\n ) {\n parameters = step(\n data,\n parameters,\n damping,\n gradientDifference,\n parameterizedFunction\n );\n\n for (let k = 0; k < parLen; k++) {\n parameters[k] = Math.min(\n Math.max(minValues[k], parameters[k]),\n maxValues[k]\n );\n }\n\n error = errorCalculation(data, parameters, parameterizedFunction);\n if (isNaN(error)) break;\n converged = error <= errorTolerance;\n }\n\n return {\n parameterValues: parameters,\n parameterError: error,\n iterations: iteration\n };\n}\n","module.exports = function(haystack, needle, comparator, low, high) {\n var mid, cmp;\n\n if(low === undefined)\n low = 0;\n\n else {\n low = low|0;\n if(low < 0 || low >= haystack.length)\n throw new RangeError(\"invalid lower bound\");\n }\n\n if(high === undefined)\n high = haystack.length - 1;\n\n else {\n high = high|0;\n if(high < low || high >= haystack.length)\n throw new RangeError(\"invalid upper bound\");\n }\n\n while(low <= high) {\n /* Note that \"(low + high) >>> 1\" may overflow, and results in a typecast\n * to double (which gives the wrong results). */\n mid = low + (high - low >> 1);\n cmp = +comparator(haystack[mid], needle, mid, haystack);\n\n /* Too low. */\n if(cmp < 0.0)\n low = mid + 1;\n\n /* Too high. */\n else if(cmp > 0.0)\n high = mid - 1;\n\n /* Key found. */\n else\n return mid;\n }\n\n /* Key not found. */\n return ~low;\n}\n","'use strict';\n\nfunction assertNumber(number) {\n\tif (typeof number !== 'number' || Number.isNaN(number)) {\n\t\tthrow new TypeError('Expected a number');\n\t}\n}\n\nexports.ascending = (left, right) => {\n\tassertNumber(left);\n\tassertNumber(right);\n\treturn left - right;\n};\n\nexports.descending = (left, right) => {\n\tassertNumber(left);\n\tassertNumber(right);\n\treturn right - left;\n};\n","import binarySearch from 'binary-search';\nimport { ascending } from 'num-sort';\n\nexport const largestPrime = 0x7fffffff;\n\nconst primeNumbers = [\n // chunk #0\n largestPrime, // 2^31-1\n\n // chunk #1\n 5,\n 11,\n 23,\n 47,\n 97,\n 197,\n 397,\n 797,\n 1597,\n 3203,\n 6421,\n 12853,\n 25717,\n 51437,\n 102877,\n 205759,\n 411527,\n 823117,\n 1646237,\n 3292489,\n 6584983,\n 13169977,\n 26339969,\n 52679969,\n 105359939,\n 210719881,\n 421439783,\n 842879579,\n 1685759167,\n\n // chunk #2\n 433,\n 877,\n 1759,\n 3527,\n 7057,\n 14143,\n 28289,\n 56591,\n 113189,\n 226379,\n 452759,\n 905551,\n 1811107,\n 3622219,\n 7244441,\n 14488931,\n 28977863,\n 57955739,\n 115911563,\n 231823147,\n 463646329,\n 927292699,\n 1854585413,\n\n // chunk #3\n 953,\n 1907,\n 3821,\n 7643,\n 15287,\n 30577,\n 61169,\n 122347,\n 244703,\n 489407,\n 978821,\n 1957651,\n 3915341,\n 7830701,\n 15661423,\n 31322867,\n 62645741,\n 125291483,\n 250582987,\n 501165979,\n 1002331963,\n 2004663929,\n\n // chunk #4\n 1039,\n 2081,\n 4177,\n 8363,\n 16729,\n 33461,\n 66923,\n 133853,\n 267713,\n 535481,\n 1070981,\n 2141977,\n 4283963,\n 8567929,\n 17135863,\n 34271747,\n 68543509,\n 137087021,\n 274174111,\n 548348231,\n 1096696463,\n\n // chunk #5\n 31,\n 67,\n 137,\n 277,\n 557,\n 1117,\n 2237,\n 4481,\n 8963,\n 17929,\n 35863,\n 71741,\n 143483,\n 286973,\n 573953,\n 1147921,\n 2295859,\n 4591721,\n 9183457,\n 18366923,\n 36733847,\n 73467739,\n 146935499,\n 293871013,\n 587742049,\n 1175484103,\n\n // chunk #6\n 599,\n 1201,\n 2411,\n 4831,\n 9677,\n 19373,\n 38747,\n 77509,\n 155027,\n 310081,\n 620171,\n 1240361,\n 2480729,\n 4961459,\n 9922933,\n 19845871,\n 39691759,\n 79383533,\n 158767069,\n 317534141,\n 635068283,\n 1270136683,\n\n // chunk #7\n 311,\n 631,\n 1277,\n 2557,\n 5119,\n 10243,\n 20507,\n 41017,\n 82037,\n 164089,\n 328213,\n 656429,\n 1312867,\n 2625761,\n 5251529,\n 10503061,\n 21006137,\n 42012281,\n 84024581,\n 168049163,\n 336098327,\n 672196673,\n 1344393353,\n\n // chunk #8\n 3,\n 7,\n 17,\n 37,\n 79,\n 163,\n 331,\n 673,\n 1361,\n 2729,\n 5471,\n 10949,\n 21911,\n 43853,\n 87719,\n 175447,\n 350899,\n 701819,\n 1403641,\n 2807303,\n 5614657,\n 11229331,\n 22458671,\n 44917381,\n 89834777,\n 179669557,\n 359339171,\n 718678369,\n 1437356741,\n\n // chunk #9\n 43,\n 89,\n 179,\n 359,\n 719,\n 1439,\n 2879,\n 5779,\n 11579,\n 23159,\n 46327,\n 92657,\n 185323,\n 370661,\n 741337,\n 1482707,\n 2965421,\n 5930887,\n 11861791,\n 23723597,\n 47447201,\n 94894427,\n 189788857,\n 379577741,\n 759155483,\n 1518310967,\n\n // chunk #10\n 379,\n 761,\n 1523,\n 3049,\n 6101,\n 12203,\n 24407,\n 48817,\n 97649,\n 195311,\n 390647,\n 781301,\n 1562611,\n 3125257,\n 6250537,\n 12501169,\n 25002389,\n 50004791,\n 100009607,\n 200019221,\n 400038451,\n 800076929,\n 1600153859,\n\n // chunk #11\n 13,\n 29,\n 59,\n 127,\n 257,\n 521,\n 1049,\n 2099,\n 4201,\n 8419,\n 16843,\n 33703,\n 67409,\n 134837,\n 269683,\n 539389,\n 1078787,\n 2157587,\n 4315183,\n 8630387,\n 17260781,\n 34521589,\n 69043189,\n 138086407,\n 276172823,\n 552345671,\n 1104691373,\n\n // chunk #12\n 19,\n 41,\n 83,\n 167,\n 337,\n 677,\n 1361,\n 2729,\n 5471,\n 10949,\n 21911,\n 43853,\n 87719,\n 175447,\n 350899,\n 701819,\n 1403641,\n 2807303,\n 5614657,\n 11229331,\n 22458671,\n 44917381,\n 89834777,\n 179669557,\n 359339171,\n 718678369,\n 1437356741,\n\n // chunk #13\n 53,\n 107,\n 223,\n 449,\n 907,\n 1823,\n 3659,\n 7321,\n 14653,\n 29311,\n 58631,\n 117269,\n 234539,\n 469099,\n 938207,\n 1876417,\n 3752839,\n 7505681,\n 15011389,\n 30022781,\n 60045577,\n 120091177,\n 240182359,\n 480364727,\n 960729461,\n 1921458943\n];\n\nprimeNumbers.sort(ascending);\n\nexport function nextPrime(value) {\n let index = binarySearch(primeNumbers, value, ascending);\n if (index < 0) {\n index = ~index;\n }\n return primeNumbers[index];\n}\n","import { largestPrime, nextPrime } from './primeFinder';\n\nconst FREE = 0;\nconst FULL = 1;\nconst REMOVED = 2;\n\nconst defaultInitialCapacity = 150;\nconst defaultMinLoadFactor = 1 / 6;\nconst defaultMaxLoadFactor = 2 / 3;\n\nexport default class HashTable {\n constructor(options = {}) {\n if (options instanceof HashTable) {\n this.table = options.table.slice();\n this.values = options.values.slice();\n this.state = options.state.slice();\n this.minLoadFactor = options.minLoadFactor;\n this.maxLoadFactor = options.maxLoadFactor;\n this.distinct = options.distinct;\n this.freeEntries = options.freeEntries;\n this.lowWaterMark = options.lowWaterMark;\n this.highWaterMark = options.maxLoadFactor;\n return;\n }\n\n const initialCapacity =\n options.initialCapacity === undefined\n ? defaultInitialCapacity\n : options.initialCapacity;\n if (initialCapacity < 0) {\n throw new RangeError(\n `initial capacity must not be less than zero: ${initialCapacity}`\n );\n }\n\n const minLoadFactor =\n options.minLoadFactor === undefined\n ? defaultMinLoadFactor\n : options.minLoadFactor;\n const maxLoadFactor =\n options.maxLoadFactor === undefined\n ? defaultMaxLoadFactor\n : options.maxLoadFactor;\n if (minLoadFactor < 0 || minLoadFactor >= 1) {\n throw new RangeError(`invalid minLoadFactor: ${minLoadFactor}`);\n }\n if (maxLoadFactor <= 0 || maxLoadFactor >= 1) {\n throw new RangeError(`invalid maxLoadFactor: ${maxLoadFactor}`);\n }\n if (minLoadFactor >= maxLoadFactor) {\n throw new RangeError(\n `minLoadFactor (${minLoadFactor}) must be smaller than maxLoadFactor (${maxLoadFactor})`\n );\n }\n\n let capacity = initialCapacity;\n // User wants to put at least capacity elements. We need to choose the size based on the maxLoadFactor to\n // avoid the need to rehash before this capacity is reached.\n // actualCapacity * maxLoadFactor >= capacity\n capacity = (capacity / maxLoadFactor) | 0;\n capacity = nextPrime(capacity);\n if (capacity === 0) capacity = 1;\n\n this.table = newArray(capacity);\n this.values = newArray(capacity);\n this.state = newArray(capacity);\n\n this.minLoadFactor = minLoadFactor;\n if (capacity === largestPrime) {\n this.maxLoadFactor = 1;\n } else {\n this.maxLoadFactor = maxLoadFactor;\n }\n\n this.distinct = 0;\n this.freeEntries = capacity;\n\n this.lowWaterMark = 0;\n this.highWaterMark = chooseHighWaterMark(capacity, this.maxLoadFactor);\n }\n\n clone() {\n return new HashTable(this);\n }\n\n get size() {\n return this.distinct;\n }\n\n get(key) {\n const i = this.indexOfKey(key);\n if (i < 0) return 0;\n return this.values[i];\n }\n\n set(key, value) {\n let i = this.indexOfInsertion(key);\n if (i < 0) {\n i = -i - 1;\n this.values[i] = value;\n return false;\n }\n\n if (this.distinct > this.highWaterMark) {\n const newCapacity = chooseGrowCapacity(\n this.distinct + 1,\n this.minLoadFactor,\n this.maxLoadFactor\n );\n this.rehash(newCapacity);\n return this.set(key, value);\n }\n\n this.table[i] = key;\n this.values[i] = value;\n if (this.state[i] === FREE) this.freeEntries--;\n this.state[i] = FULL;\n this.distinct++;\n\n if (this.freeEntries < 1) {\n const newCapacity = chooseGrowCapacity(\n this.distinct + 1,\n this.minLoadFactor,\n this.maxLoadFactor\n );\n this.rehash(newCapacity);\n }\n\n return true;\n }\n\n remove(key, noRehash) {\n const i = this.indexOfKey(key);\n if (i < 0) return false;\n\n this.state[i] = REMOVED;\n this.distinct--;\n\n if (!noRehash) this.maybeShrinkCapacity();\n\n return true;\n }\n\n delete(key, noRehash) {\n const i = this.indexOfKey(key);\n if (i < 0) return false;\n\n this.state[i] = FREE;\n this.distinct--;\n\n if (!noRehash) this.maybeShrinkCapacity();\n\n return true;\n }\n\n maybeShrinkCapacity() {\n if (this.distinct < this.lowWaterMark) {\n const newCapacity = chooseShrinkCapacity(\n this.distinct,\n this.minLoadFactor,\n this.maxLoadFactor\n );\n this.rehash(newCapacity);\n }\n }\n\n containsKey(key) {\n return this.indexOfKey(key) >= 0;\n }\n\n indexOfKey(key) {\n const table = this.table;\n const state = this.state;\n const length = this.table.length;\n\n const hash = key & 0x7fffffff;\n let i = hash % length;\n let decrement = hash % (length - 2);\n if (decrement === 0) decrement = 1;\n\n while (state[i] !== FREE && (state[i] === REMOVED || table[i] !== key)) {\n i -= decrement;\n if (i < 0) i += length;\n }\n\n if (state[i] === FREE) return -1;\n return i;\n }\n\n containsValue(value) {\n return this.indexOfValue(value) >= 0;\n }\n\n indexOfValue(value) {\n const values = this.values;\n const state = this.state;\n\n for (var i = 0; i < state.length; i++) {\n if (state[i] === FULL && values[i] === value) {\n return i;\n }\n }\n\n return -1;\n }\n\n indexOfInsertion(key) {\n const table = this.table;\n const state = this.state;\n const length = table.length;\n\n const hash = key & 0x7fffffff;\n let i = hash % length;\n let decrement = hash % (length - 2);\n if (decrement === 0) decrement = 1;\n\n while (state[i] === FULL && table[i] !== key) {\n i -= decrement;\n if (i < 0) i += length;\n }\n\n if (state[i] === REMOVED) {\n const j = i;\n while (state[i] !== FREE && (state[i] === REMOVED || table[i] !== key)) {\n i -= decrement;\n if (i < 0) i += length;\n }\n if (state[i] === FREE) i = j;\n }\n\n if (state[i] === FULL) {\n return -i - 1;\n }\n\n return i;\n }\n\n ensureCapacity(minCapacity) {\n if (this.table.length < minCapacity) {\n const newCapacity = nextPrime(minCapacity);\n this.rehash(newCapacity);\n }\n }\n\n rehash(newCapacity) {\n const oldCapacity = this.table.length;\n\n if (newCapacity <= this.distinct) throw new Error('Unexpected');\n\n const oldTable = this.table;\n const oldValues = this.values;\n const oldState = this.state;\n\n const newTable = newArray(newCapacity);\n const newValues = newArray(newCapacity);\n const newState = newArray(newCapacity);\n\n this.lowWaterMark = chooseLowWaterMark(newCapacity, this.minLoadFactor);\n this.highWaterMark = chooseHighWaterMark(newCapacity, this.maxLoadFactor);\n\n this.table = newTable;\n this.values = newValues;\n this.state = newState;\n this.freeEntries = newCapacity - this.distinct;\n\n for (var i = 0; i < oldCapacity; i++) {\n if (oldState[i] === FULL) {\n var element = oldTable[i];\n var index = this.indexOfInsertion(element);\n newTable[index] = element;\n newValues[index] = oldValues[i];\n newState[index] = FULL;\n }\n }\n }\n\n forEachKey(callback) {\n for (var i = 0; i < this.state.length; i++) {\n if (this.state[i] === FULL) {\n if (!callback(this.table[i])) return false;\n }\n }\n return true;\n }\n\n forEachValue(callback) {\n for (var i = 0; i < this.state.length; i++) {\n if (this.state[i] === FULL) {\n if (!callback(this.values[i])) return false;\n }\n }\n return true;\n }\n\n forEachPair(callback) {\n for (var i = 0; i < this.state.length; i++) {\n if (this.state[i] === FULL) {\n if (!callback(this.table[i], this.values[i])) return false;\n }\n }\n return true;\n }\n}\n\nfunction chooseLowWaterMark(capacity, minLoad) {\n return (capacity * minLoad) | 0;\n}\n\nfunction chooseHighWaterMark(capacity, maxLoad) {\n return Math.min(capacity - 2, (capacity * maxLoad) | 0);\n}\n\nfunction chooseGrowCapacity(size, minLoad, maxLoad) {\n return nextPrime(\n Math.max(size + 1, ((4 * size) / (3 * minLoad + maxLoad)) | 0)\n );\n}\n\nfunction chooseShrinkCapacity(size, minLoad, maxLoad) {\n return nextPrime(\n Math.max(size + 1, ((4 * size) / (minLoad + 3 * maxLoad)) | 0)\n );\n}\n\nfunction newArray(size) {\n return Array(size).fill(0);\n}\n","import HashTable from 'ml-hash-table';\n\nexport class SparseMatrix {\n constructor(rows, columns, options = {}) {\n if (rows instanceof SparseMatrix) {\n // clone\n const other = rows;\n this._init(\n other.rows,\n other.columns,\n other.elements.clone(),\n other.threshold\n );\n return;\n }\n\n if (Array.isArray(rows)) {\n const matrix = rows;\n rows = matrix.length;\n options = columns || {};\n columns = matrix[0].length;\n this._init(rows, columns, new HashTable(options), options.threshold);\n for (var i = 0; i < rows; i++) {\n for (var j = 0; j < columns; j++) {\n var value = matrix[i][j];\n if (this.threshold && Math.abs(value) < this.threshold) value = 0;\n if (value !== 0) {\n this.elements.set(i * columns + j, matrix[i][j]);\n }\n }\n }\n } else {\n this._init(rows, columns, new HashTable(options), options.threshold);\n }\n }\n\n _init(rows, columns, elements, threshold) {\n this.rows = rows;\n this.columns = columns;\n this.elements = elements;\n this.threshold = threshold || 0;\n }\n\n static eye(rows = 1, columns = rows) {\n const min = Math.min(rows, columns);\n const matrix = new SparseMatrix(rows, columns, { initialCapacity: min });\n for (var i = 0; i < min; i++) {\n matrix.set(i, i, 1);\n }\n return matrix;\n }\n\n clone() {\n return new SparseMatrix(this);\n }\n\n to2DArray() {\n const copy = new Array(this.rows);\n for (var i = 0; i < this.rows; i++) {\n copy[i] = new Array(this.columns);\n for (var j = 0; j < this.columns; j++) {\n copy[i][j] = this.get(i, j);\n }\n }\n return copy;\n }\n\n isSquare() {\n return this.rows === this.columns;\n }\n\n isSymmetric() {\n if (!this.isSquare()) return false;\n\n var symmetric = true;\n this.forEachNonZero((i, j, v) => {\n if (this.get(j, i) !== v) {\n symmetric = false;\n return false;\n }\n return v;\n });\n return symmetric;\n }\n\n /**\n * Search for the wither band in the main diagonals\n * @return {number}\n */\n bandWidth() {\n let min = this.columns;\n let max = -1;\n this.forEachNonZero((i, j, v) => {\n let diff = i - j;\n min = Math.min(min, diff);\n max = Math.max(max, diff);\n return v;\n });\n return max - min;\n }\n\n /**\n * Test if a matrix is consider banded using a threshold\n * @param {number} width\n * @return {boolean}\n */\n isBanded(width) {\n let bandWidth = this.bandWidth();\n return bandWidth <= width;\n }\n\n get cardinality() {\n return this.elements.size;\n }\n\n get size() {\n return this.rows * this.columns;\n }\n\n get(row, column) {\n return this.elements.get(row * this.columns + column);\n }\n\n set(row, column, value) {\n if (this.threshold && Math.abs(value) < this.threshold) value = 0;\n if (value === 0) {\n this.elements.remove(row * this.columns + column);\n } else {\n this.elements.set(row * this.columns + column, value);\n }\n return this;\n }\n\n mmul(other) {\n if (this.columns !== other.rows) {\n // eslint-disable-next-line no-console\n console.warn(\n 'Number of columns of left matrix are not equal to number of rows of right matrix.'\n );\n }\n\n const m = this.rows;\n const p = other.columns;\n\n const result = new SparseMatrix(m, p);\n this.forEachNonZero((i, j, v1) => {\n other.forEachNonZero((k, l, v2) => {\n if (j === k) {\n result.set(i, l, result.get(i, l) + v1 * v2);\n }\n return v2;\n });\n return v1;\n });\n return result;\n }\n\n kroneckerProduct(other) {\n const m = this.rows;\n const n = this.columns;\n const p = other.rows;\n const q = other.columns;\n\n const result = new SparseMatrix(m * p, n * q, {\n initialCapacity: this.cardinality * other.cardinality\n });\n this.forEachNonZero((i, j, v1) => {\n other.forEachNonZero((k, l, v2) => {\n result.set(p * i + k, q * j + l, v1 * v2);\n return v2;\n });\n return v1;\n });\n return result;\n }\n\n forEachNonZero(callback) {\n this.elements.forEachPair((key, value) => {\n const i = (key / this.columns) | 0;\n const j = key % this.columns;\n let r = callback(i, j, value);\n if (r === false) return false; // stop iteration\n if (this.threshold && Math.abs(r) < this.threshold) r = 0;\n if (r !== value) {\n if (r === 0) {\n this.elements.remove(key, true);\n } else {\n this.elements.set(key, r);\n }\n }\n return true;\n });\n this.elements.maybeShrinkCapacity();\n return this;\n }\n\n getNonZeros() {\n const cardinality = this.cardinality;\n const rows = new Array(cardinality);\n const columns = new Array(cardinality);\n const values = new Array(cardinality);\n var idx = 0;\n this.forEachNonZero((i, j, value) => {\n rows[idx] = i;\n columns[idx] = j;\n values[idx] = value;\n idx++;\n return value;\n });\n return { rows, columns, values };\n }\n\n setThreshold(newThreshold) {\n if (newThreshold !== 0 && newThreshold !== this.threshold) {\n this.threshold = newThreshold;\n this.forEachNonZero((i, j, v) => v);\n }\n return this;\n }\n\n /**\n * @return {SparseMatrix} - New transposed sparse matrix\n */\n transpose() {\n let trans = new SparseMatrix(this.columns, this.rows, {\n initialCapacity: this.cardinality\n });\n this.forEachNonZero((i, j, value) => {\n trans.set(j, i, value);\n return value;\n });\n return trans;\n }\n}\n\nSparseMatrix.prototype.klass = 'Matrix';\n\nSparseMatrix.identity = SparseMatrix.eye;\nSparseMatrix.prototype.tensorProduct = SparseMatrix.prototype.kroneckerProduct;\n\n/*\n Add dynamically instance and static methods for mathematical operations\n */\n\nvar inplaceOperator = `\n(function %name%(value) {\n if (typeof value === 'number') return this.%name%S(value);\n return this.%name%M(value);\n})\n`;\n\nvar inplaceOperatorScalar = `\n(function %name%S(value) {\n this.forEachNonZero((i, j, v) => v %op% value);\n return this;\n})\n`;\n\nvar inplaceOperatorMatrix = `\n(function %name%M(matrix) {\n matrix.forEachNonZero((i, j, v) => {\n this.set(i, j, this.get(i, j) %op% v);\n return v;\n });\n return this;\n})\n`;\n\nvar staticOperator = `\n(function %name%(matrix, value) {\n var newMatrix = new SparseMatrix(matrix);\n return newMatrix.%name%(value);\n})\n`;\n\nvar inplaceMethod = `\n(function %name%() {\n this.forEachNonZero((i, j, v) => %method%(v));\n return this;\n})\n`;\n\nvar staticMethod = `\n(function %name%(matrix) {\n var newMatrix = new SparseMatrix(matrix);\n return newMatrix.%name%();\n})\n`;\n\nconst operators = [\n // Arithmetic operators\n ['+', 'add'],\n ['-', 'sub', 'subtract'],\n ['*', 'mul', 'multiply'],\n ['/', 'div', 'divide'],\n ['%', 'mod', 'modulus'],\n // Bitwise operators\n ['&', 'and'],\n ['|', 'or'],\n ['^', 'xor'],\n ['<<', 'leftShift'],\n ['>>', 'signPropagatingRightShift'],\n ['>>>', 'rightShift', 'zeroFillRightShift']\n];\n\nfor (const operator of operators) {\n for (let i = 1; i < operator.length; i++) {\n SparseMatrix.prototype[operator[i]] = eval(\n fillTemplateFunction(inplaceOperator, {\n name: operator[i],\n op: operator[0]\n })\n );\n SparseMatrix.prototype[`${operator[i]}S`] = eval(\n fillTemplateFunction(inplaceOperatorScalar, {\n name: `${operator[i]}S`,\n op: operator[0]\n })\n );\n SparseMatrix.prototype[`${operator[i]}M`] = eval(\n fillTemplateFunction(inplaceOperatorMatrix, {\n name: `${operator[i]}M`,\n op: operator[0]\n })\n );\n\n SparseMatrix[operator[i]] = eval(\n fillTemplateFunction(staticOperator, { name: operator[i] })\n );\n }\n}\n\nvar methods = [['~', 'not']];\n\n[\n 'abs',\n 'acos',\n 'acosh',\n 'asin',\n 'asinh',\n 'atan',\n 'atanh',\n 'cbrt',\n 'ceil',\n 'clz32',\n 'cos',\n 'cosh',\n 'exp',\n 'expm1',\n 'floor',\n 'fround',\n 'log',\n 'log1p',\n 'log10',\n 'log2',\n 'round',\n 'sign',\n 'sin',\n 'sinh',\n 'sqrt',\n 'tan',\n 'tanh',\n 'trunc'\n].forEach(function (mathMethod) {\n methods.push([`Math.${mathMethod}`, mathMethod]);\n});\n\nfor (const method of methods) {\n for (let i = 1; i < method.length; i++) {\n SparseMatrix.prototype[method[i]] = eval(\n fillTemplateFunction(inplaceMethod, {\n name: method[i],\n method: method[0]\n })\n );\n SparseMatrix[method[i]] = eval(\n fillTemplateFunction(staticMethod, { name: method[i] })\n );\n }\n}\n\nfunction fillTemplateFunction(template, values) {\n for (const i in values) {\n template = template.replace(new RegExp(`%${i}%`, 'g'), values[i]);\n }\n return template;\n}\n","export default function additiveSymmetric(a, b) {\n var i = 0;\n var ii = a.length;\n var d = 0;\n for (; i < ii; i++) {\n d += ((a[i] - b[i]) * (a[i] - b[i]) * (a[i] + b[i])) / (a[i] * b[i]);\n }\n return 2 * d;\n}\n","export default function avg(a, b) {\n var ii = a.length;\n var max = 0;\n var ans = 0;\n var aux = 0;\n for (var i = 0; i < ii; i++) {\n aux = Math.abs(a[i] - b[i]);\n ans += aux;\n if (max < aux) {\n max = aux;\n }\n }\n return (max + ans) / 2;\n}\n","export default function bhattacharyya(a, b) {\n var ii = a.length;\n var ans = 0;\n for (var i = 0; i < ii; i++) {\n ans += Math.sqrt(a[i] * b[i]);\n }\n return -Math.log(ans);\n}\n","export default function canberra(a, b) {\n var ii = a.length;\n var ans = 0;\n for (var i = 0; i < ii; i++) {\n ans += Math.abs(a[i] - b[i]) / (a[i] + b[i]);\n }\n return ans;\n}\n","export default function chebyshev(a, b) {\n var ii = a.length;\n var max = 0;\n var aux = 0;\n for (var i = 0; i < ii; i++) {\n aux = Math.abs(a[i] - b[i]);\n if (max < aux) {\n max = aux;\n }\n }\n return max;\n}\n","export default function clark(a, b) {\n var i = 0;\n var ii = a.length;\n var d = 0;\n for (; i < ii; i++) {\n d += Math.sqrt(\n ((a[i] - b[i]) * (a[i] - b[i])) / ((a[i] + b[i]) * (a[i] + b[i]))\n );\n }\n return 2 * d;\n}\n","export default function czekanowskiSimilarity(a, b) {\n var up = 0;\n var down = 0;\n for (var i = 0; i < a.length; i++) {\n up += Math.min(a[i], b[i]);\n down += a[i] + b[i];\n }\n return (2 * up) / down;\n}\n","import czekanowskiSimilarity from '../similarities/czekanowski';\n\nexport default function czekanowskiDistance(a, b) {\n return 1 - czekanowskiSimilarity(a, b);\n}\n","export default function dice(a, b) {\n var ii = a.length;\n var p = 0;\n var q1 = 0;\n var q2 = 0;\n for (var i = 0; i < ii; i++) {\n p += a[i] * a[i];\n q1 += b[i] * b[i];\n q2 += (a[i] - b[i]) * (a[i] - b[i]);\n }\n return q2 / (p + q1);\n}\n","export default function divergence(a, b) {\n var i = 0;\n var ii = a.length;\n var d = 0;\n for (; i < ii; i++) {\n d += ((a[i] - b[i]) * (a[i] - b[i])) / ((a[i] + b[i]) * (a[i] + b[i]));\n }\n return 2 * d;\n}\n","export default function fidelity(a, b) {\n var ii = a.length;\n var ans = 0;\n for (var i = 0; i < ii; i++) {\n ans += Math.sqrt(a[i] * b[i]);\n }\n return ans;\n}\n","export default function gower(a, b) {\n var ii = a.length;\n var ans = 0;\n for (var i = 0; i < ii; i++) {\n ans += Math.abs(a[i] - b[i]);\n }\n return ans / ii;\n}\n","export default function harmonicMean(a, b) {\n var ii = a.length;\n var ans = 0;\n for (var i = 0; i < ii; i++) {\n ans += (a[i] * b[i]) / (a[i] + b[i]);\n }\n return 2 * ans;\n}\n","export default function hellinger(a, b) {\n var ii = a.length;\n var ans = 0;\n for (var i = 0; i < ii; i++) {\n ans += Math.sqrt(a[i] * b[i]);\n }\n return 2 * Math.sqrt(1 - ans);\n}\n","export default function innerProduct(a, b) {\n var ii = a.length;\n var ans = 0;\n for (var i = 0; i < ii; i++) {\n ans += a[i] * b[i];\n }\n return ans;\n}\n","export default function intersection(a, b) {\n var ii = a.length;\n var ans = 0;\n for (var i = 0; i < ii; i++) {\n ans += Math.min(a[i], b[i]);\n }\n return 1 - ans;\n}\n","export default function jaccard(a, b) {\n var ii = a.length;\n var p1 = 0;\n var p2 = 0;\n var q1 = 0;\n var q2 = 0;\n for (var i = 0; i < ii; i++) {\n p1 += a[i] * b[i];\n p2 += a[i] * a[i];\n q1 += b[i] * b[i];\n q2 += (a[i] - b[i]) * (a[i] - b[i]);\n }\n return q2 / (p2 + q1 - p1);\n}\n","export default function jeffreys(a, b) {\n var ii = a.length;\n var ans = 0;\n for (var i = 0; i < ii; i++) {\n ans += (a[i] - b[i]) * Math.log(a[i] / b[i]);\n }\n return ans;\n}\n","export default function jensenDifference(a, b) {\n var ii = a.length;\n var ans = 0;\n for (var i = 0; i < ii; i++) {\n ans +=\n (a[i] * Math.log(a[i]) + b[i] * Math.log(b[i])) / 2 -\n ((a[i] + b[i]) / 2) * Math.log((a[i] + b[i]) / 2);\n }\n return ans;\n}\n","export default function jensenShannon(a, b) {\n var ii = a.length;\n var p = 0;\n var q = 0;\n for (var i = 0; i < ii; i++) {\n p += a[i] * Math.log((2 * a[i]) / (a[i] + b[i]));\n q += b[i] * Math.log((2 * b[i]) / (a[i] + b[i]));\n }\n return (p + q) / 2;\n}\n","export default function kdivergence(a, b) {\n var ii = a.length;\n var ans = 0;\n for (var i = 0; i < ii; i++) {\n ans += a[i] * Math.log((2 * a[i]) / (a[i] + b[i]));\n }\n return ans;\n}\n","export default function kulczynski(a, b) {\n var ii = a.length;\n var up = 0;\n var down = 0;\n for (var i = 0; i < ii; i++) {\n up += Math.abs(a[i] - b[i]);\n down += Math.min(a[i], b[i]);\n }\n return up / down;\n}\n","export default function kullbackLeibler(a, b) {\n var ii = a.length;\n var ans = 0;\n for (var i = 0; i < ii; i++) {\n ans += a[i] * Math.log(a[i] / b[i]);\n }\n return ans;\n}\n","export default function kumarHassebrook(a, b) {\n var ii = a.length;\n var p = 0;\n var p2 = 0;\n var q2 = 0;\n for (var i = 0; i < ii; i++) {\n p += a[i] * b[i];\n p2 += a[i] * a[i];\n q2 += b[i] * b[i];\n }\n return p / (p2 + q2 - p);\n}\n","export default function kumarJohnson(a, b) {\n var ii = a.length;\n var ans = 0;\n for (var i = 0; i < ii; i++) {\n ans +=\n Math.pow(a[i] * a[i] - b[i] * b[i], 2) / (2 * Math.pow(a[i] * b[i], 1.5));\n }\n return ans;\n}\n","export default function lorentzian(a, b) {\n var ii = a.length;\n var ans = 0;\n for (var i = 0; i < ii; i++) {\n ans += Math.log(Math.abs(a[i] - b[i]) + 1);\n }\n return ans;\n}\n","export default function manhattan(a, b) {\n var i = 0;\n var ii = a.length;\n var d = 0;\n for (; i < ii; i++) {\n d += Math.abs(a[i] - b[i]);\n }\n return d;\n}\n","export default function matusita(a, b) {\n var ii = a.length;\n var ans = 0;\n for (var i = 0; i < ii; i++) {\n ans += Math.sqrt(a[i] * b[i]);\n }\n return Math.sqrt(2 - 2 * ans);\n}\n","export default function minkowski(a, b, p) {\n var i = 0;\n var ii = a.length;\n var d = 0;\n for (; i < ii; i++) {\n d += Math.pow(Math.abs(a[i] - b[i]), p);\n }\n return Math.pow(d, 1 / p);\n}\n","export default function motyka(a, b) {\n var ii = a.length;\n var up = 0;\n var down = 0;\n for (var i = 0; i < ii; i++) {\n up += Math.min(a[i], b[i]);\n down += a[i] + b[i];\n }\n return 1 - up / down;\n}\n","export default function neyman(a, b) {\n var i = 0;\n var ii = a.length;\n var d = 0;\n for (; i < ii; i++) {\n d += ((a[i] - b[i]) * (a[i] - b[i])) / a[i];\n }\n return d;\n}\n","export default function pearson(a, b) {\n var i = 0;\n var ii = a.length;\n var d = 0;\n for (; i < ii; i++) {\n d += ((a[i] - b[i]) * (a[i] - b[i])) / b[i];\n }\n return d;\n}\n","export default function probabilisticSymmetric(a, b) {\n var i = 0;\n var ii = a.length;\n var d = 0;\n for (; i < ii; i++) {\n d += ((a[i] - b[i]) * (a[i] - b[i])) / (a[i] + b[i]);\n }\n return 2 * d;\n}\n","export default function ruzicka(a, b) {\n var ii = a.length;\n var up = 0;\n var down = 0;\n for (var i = 0; i < ii; i++) {\n up += Math.min(a[i], b[i]);\n down += Math.max(a[i], b[i]);\n }\n return up / down;\n}\n","export default function soergel(a, b) {\n var ii = a.length;\n var up = 0;\n var down = 0;\n for (var i = 0; i < ii; i++) {\n up += Math.abs(a[i] - b[i]);\n down += Math.max(a[i], b[i]);\n }\n return up / down;\n}\n","export default function sorensen(a, b) {\n var ii = a.length;\n var up = 0;\n var down = 0;\n for (var i = 0; i < ii; i++) {\n up += Math.abs(a[i] - b[i]);\n down += a[i] + b[i];\n }\n return up / down;\n}\n","export default function squared(a, b) {\n var i = 0;\n var ii = a.length;\n var d = 0;\n for (; i < ii; i++) {\n d += ((a[i] - b[i]) * (a[i] - b[i])) / (a[i] + b[i]);\n }\n return d;\n}\n","export default function squaredChord(a, b) {\n var ii = a.length;\n var ans = 0;\n for (var i = 0; i < ii; i++) {\n ans +=\n (Math.sqrt(a[i]) - Math.sqrt(b[i])) * (Math.sqrt(a[i]) - Math.sqrt(b[i]));\n }\n return ans;\n}\n","export default function taneja(a, b) {\n var ii = a.length;\n var ans = 0;\n for (var i = 0; i < ii; i++) {\n ans +=\n ((a[i] + b[i]) / 2) *\n Math.log((a[i] + b[i]) / (2 * Math.sqrt(a[i] * b[i])));\n }\n return ans;\n}\n","export default function tanimoto(a, b, bitvector) {\n if (bitvector) {\n var inter = 0;\n var union = 0;\n for (var j = 0; j < a.length; j++) {\n inter += a[j] && b[j];\n union += a[j] || b[j];\n }\n if (union === 0) {\n return 1;\n }\n return inter / union;\n } else {\n var ii = a.length;\n var p = 0;\n var q = 0;\n var m = 0;\n for (var i = 0; i < ii; i++) {\n p += a[i];\n q += b[i];\n m += Math.min(a[i], b[i]);\n }\n return 1 - (p + q - 2 * m) / (p + q - m);\n }\n}\n","import tanimotoS from '../similarities/tanimoto';\n\nexport default function tanimoto(a, b, bitvector) {\n if (bitvector) {\n return 1 - tanimotoS(a, b, bitvector);\n } else {\n var ii = a.length;\n var p = 0;\n var q = 0;\n var m = 0;\n for (var i = 0; i < ii; i++) {\n p += a[i];\n q += b[i];\n m += Math.min(a[i], b[i]);\n }\n return (p + q - 2 * m) / (p + q - m);\n }\n}\n","export default function topsoe(a, b) {\n var ii = a.length;\n var ans = 0;\n for (var i = 0; i < ii; i++) {\n ans +=\n a[i] * Math.log((2 * a[i]) / (a[i] + b[i])) +\n b[i] * Math.log((2 * b[i]) / (a[i] + b[i]));\n }\n return ans;\n}\n","export default function waveHedges(a, b) {\n var ii = a.length;\n var ans = 0;\n for (var i = 0; i < ii; i++) {\n ans += 1 - Math.min(a[i], b[i]) / Math.max(a[i], b[i]);\n }\n return ans;\n}\n","import binarySearch from 'binary-search';\nimport { ascending } from 'num-sort';\n\n/**\n * Function that creates the tree\n * @param {Array>} spectrum\n * @param {object} [options]\n * @return {Tree|null}\n * left and right have the same structure than the parent,\n * or are null if they are leaves\n */\nexport function createTree(spectrum, options = {}) {\n var X = spectrum[0];\n const {\n minWindow = 0.16,\n threshold = 0.01,\n from = X[0],\n to = X[X.length - 1]\n } = options;\n\n return mainCreateTree(\n spectrum[0],\n spectrum[1],\n from,\n to,\n minWindow,\n threshold\n );\n}\n\nfunction mainCreateTree(X, Y, from, to, minWindow, threshold) {\n if (to - from < minWindow) {\n return null;\n }\n\n // search first point\n var start = binarySearch(X, from, ascending);\n if (start < 0) {\n start = ~start;\n }\n\n // stop at last point\n var sum = 0;\n var center = 0;\n for (var i = start; i < X.length; i++) {\n if (X[i] >= to) {\n break;\n }\n sum += Y[i];\n center += X[i] * Y[i];\n }\n\n if (sum < threshold) {\n return null;\n }\n\n center /= sum;\n if (center - from < 1e-6 || to - center < 1e-6) {\n return null;\n }\n if (center - from < minWindow / 4) {\n return mainCreateTree(X, Y, center, to, minWindow, threshold);\n } else {\n if (to - center < minWindow / 4) {\n return mainCreateTree(X, Y, from, center, minWindow, threshold);\n } else {\n return new Tree(\n sum,\n center,\n mainCreateTree(X, Y, from, center, minWindow, threshold),\n mainCreateTree(X, Y, center, to, minWindow, threshold)\n );\n }\n }\n}\n\nclass Tree {\n constructor(sum, center, left, right) {\n this.sum = sum;\n this.center = center;\n this.left = left;\n this.right = right;\n }\n}\n","import { createTree } from './createTree';\n\n/**\n * Similarity between two nodes\n * @param {Tree|Array>} a - tree A node\n * @param {Tree|Array>} b - tree B node\n * @param {object} [options]\n * @return {number} similarity measure between tree nodes\n */\nexport function getSimilarity(a, b, options = {}) {\n const { alpha = 0.1, beta = 0.33, gamma = 0.001 } = options;\n\n if (a === null || b === null) {\n return 0;\n }\n if (Array.isArray(a)) {\n a = createTree(a);\n }\n if (Array.isArray(b)) {\n b = createTree(b);\n }\n\n var C =\n (alpha * Math.min(a.sum, b.sum)) / Math.max(a.sum, b.sum) +\n (1 - alpha) * Math.exp(-gamma * Math.abs(a.center - b.center));\n\n return (\n beta * C +\n ((1 - beta) *\n (getSimilarity(a.left, b.left, options) +\n getSimilarity(a.right, b.right, options))) /\n 2\n );\n}\n","import { getSimilarity } from './getSimilarity';\n\nexport { createTree } from './createTree';\n\nexport function treeSimilarity(A, B, options = {}) {\n return getSimilarity(A, B, options);\n}\n\nexport function getFunction(options = {}) {\n return (A, B) => getSimilarity(A, B, options);\n}\n","export default function cosine(a, b) {\n var ii = a.length;\n var p = 0;\n var p2 = 0;\n var q2 = 0;\n for (var i = 0; i < ii; i++) {\n p += a[i] * b[i];\n p2 += a[i] * a[i];\n q2 += b[i] * b[i];\n }\n return p / (Math.sqrt(p2) * Math.sqrt(q2));\n}\n","import diceD from '../distances/dice';\n\nexport default function dice(a, b) {\n return 1 - diceD(a, b);\n}\n","import intersectionD from '../distances/intersection';\n\nexport default function intersection(a, b) {\n return 1 - intersectionD(a, b);\n}\n","import jaccardD from '../distances/jaccard';\n\nexport default function jaccard(a, b) {\n return 1 - jaccardD(a, b);\n}\n","import kulczynskiD from '../distances/kulczynski';\n\nexport default function kulczynski(a, b) {\n return 1 / kulczynskiD(a, b);\n}\n","import motykaD from '../distances/motyka';\n\nexport default function motyka(a, b) {\n return 1 - motykaD(a, b);\n}\n","import mean from 'ml-array-mean';\n\nimport cosine from './cosine';\n\nexport default function pearson(a, b) {\n var avgA = mean(a);\n var avgB = mean(b);\n\n var newA = new Array(a.length);\n var newB = new Array(b.length);\n for (var i = 0; i < newA.length; i++) {\n newA[i] = a[i] - avgA;\n newB[i] = b[i] - avgB;\n }\n\n return cosine(newA, newB);\n}\n","import squaredChordD from '../distances/squaredChord';\n\nexport default function squaredChord(a, b) {\n return 1 - squaredChordD(a, b);\n}\n","'use strict';\n\n// Accuracy\nexports.acc = pred => {\n const l = pred.cutoffs.length;\n const result = new Array(l);\n for (var i = 0; i < l; i++) {\n result[i] = (pred.tn[i] + pred.tp[i]) / (l - 1);\n }\n return result;\n};\n\n// Error rate\nexports.err = pred => {\n const l = pred.cutoffs.length;\n const result = new Array(l);\n for (var i = 0; i < l; i++) {\n result[i] = (pred.fn[i] + pred.fp[i] / (l - 1));\n }\n return result;\n};\n\n// False positive rate\nexports.fpr = pred => {\n const l = pred.cutoffs.length;\n const result = new Array(l);\n for (var i = 0; i < l; i++) {\n result[i] = pred.fp[i] / pred.nNeg;\n }\n return result;\n};\n\n// True positive rate\nexports.tpr = pred => {\n const l = pred.cutoffs.length;\n const result = new Array(l);\n for (var i = 0; i < l; i++) {\n result[i] = pred.tp[i] / pred.nPos;\n }\n return result;\n};\n\n// False negative rate\nexports.fnr = pred => {\n const l = pred.cutoffs.length;\n const result = new Array(l);\n for (var i = 0; i < l; i++) {\n result[i] = pred.fn[i] / pred.nPos;\n }\n return result;\n};\n\n// True negative rate\nexports.tnr = pred => {\n const l = pred.cutoffs.length;\n const result = new Array(l);\n for (var i = 0; i < l; i++) {\n result[i] = pred.tn[i] / pred.nNeg;\n }\n return result;\n};\n\n// Positive predictive value\nexports.ppv = pred => {\n const l = pred.cutoffs.length;\n const result = new Array(l);\n for (var i = 0; i < l; i++) {\n result[i] = (pred.fp[i] + pred.tp[i] !== 0) ? (pred.tp[i] / (pred.fp[i] + pred.tp[i])) : 0;\n }\n return result;\n};\n\n// Negative predictive value\nexports.npv = pred => {\n const l = pred.cutoffs.length;\n const result = new Array(l);\n for (var i = 0; i < l; i++) {\n result[i] = (pred.fn[i] + pred.tn[i] !== 0) ? (pred.tn[i] / (pred.fn[i] + pred.tn[i])) : 0;\n }\n return result;\n};\n\n// Prediction conditioned fallout\nexports.pcfall = pred => {\n const l = pred.cutoffs.length;\n const result = new Array(l);\n for (var i = 0; i < l; i++) {\n result[i] = (pred.fp[i] + pred.tp[i] !== 0) ? 1 - (pred.tp[i] / (pred.fp[i] + pred.tp[i])) : 1;\n }\n return result;\n};\n\n// Prediction conditioned miss\nexports.pcmiss = pred => {\n const l = pred.cutoffs.length;\n const result = new Array(l);\n for (var i = 0; i < l; i++) {\n result[i] = (pred.fn[i] + pred.tn[i] !== 0) ? 1 - (pred.tn[i] / (pred.fn[i] + pred.tn[i])) : 1;\n }\n return result;\n};\n\n// Lift value\nexports.lift = pred => {\n const l = pred.cutoffs.length;\n const result = new Array(l);\n for (var i = 0; i < l; i++) {\n result[i] = (pred.nPosPred[i] !== 0) ? ((pred.tp[i] / pred.nPos) / (pred.nPosPred[i] / pred.nSamples)) : 0;\n }\n return result;\n};\n\n// Rate of positive predictions\nexports.rpp = pred => {\n const l = pred.cutoffs.length;\n const result = new Array(l);\n for (var i = 0; i < l; i++) {\n result[i] = pred.nPosPred[i] / pred.nSamples;\n }\n return result;\n};\n\n// Rate of negative predictions\nexports.rnp = pred => {\n const l = pred.cutoffs.length;\n const result = new Array(l);\n for (var i = 0; i < l; i++) {\n result[i] = pred.nNegPred[i] / pred.nSamples;\n }\n return result;\n};\n\n// Threshold\nexports.threshold = pred => {\n const clone = pred.cutoffs.slice();\n clone[0] = clone[1]; // Remove the infinite value\n return clone;\n};\n","'use strict';\n\nconst measures = require('./measures');\n\nclass Performance {\n /**\n *\n * @param prediction - The prediction matrix\n * @param target - The target matrix (values: truthy for same class, falsy for different class)\n * @param options\n *\n * @option all True if the entire matrix must be used. False to ignore the diagonal and lower part (default is false, for similarity/distance matrices)\n * @option max True if the max value corresponds to a perfect match (like in similarity matrices), false if it is the min value (default is false, like in distance matrices. All values will be multiplied by -1)\n */\n constructor(prediction, target, options) {\n options = options || {};\n if (prediction.length !== target.length || prediction[0].length !== target[0].length) {\n throw new Error('dimensions of prediction and target do not match');\n }\n const rows = prediction.length;\n const columns = prediction[0].length;\n const isDistance = !options.max;\n\n const predP = [];\n\n if (options.all) {\n for (var i = 0; i < rows; i++) {\n for (var j = 0; j < columns; j++) {\n predP.push({\n pred: prediction[i][j],\n targ: target[i][j]\n });\n }\n }\n } else {\n if (rows < 3 || rows !== columns) {\n throw new Error('When \"all\" option is false, the prediction matrix must be square and have at least 3 columns');\n }\n for (var i = 0; i < rows - 1; i++) {\n for (var j = i + 1; j < columns; j++) {\n predP.push({\n pred: prediction[i][j],\n targ: target[i][j]\n });\n }\n }\n }\n\n if (isDistance) {\n predP.sort((a, b) => a.pred - b.pred);\n } else {\n predP.sort((a, b) => b.pred - a.pred);\n }\n \n const cutoffs = this.cutoffs = [isDistance ? Number.MIN_VALUE : Number.MAX_VALUE];\n const fp = this.fp = [0];\n const tp = this.tp = [0];\n\n var nPos = 0;\n var nNeg = 0;\n\n var currentPred = predP[0].pred;\n var nTp = 0;\n var nFp = 0;\n for (var i = 0; i < predP.length; i++) {\n if (predP[i].pred !== currentPred) {\n cutoffs.push(currentPred);\n fp.push(nFp);\n tp.push(nTp);\n currentPred = predP[i].pred;\n }\n if (predP[i].targ) {\n nPos++;\n nTp++;\n } else {\n nNeg++;\n nFp++;\n }\n }\n cutoffs.push(currentPred);\n fp.push(nFp);\n tp.push(nTp);\n\n const l = cutoffs.length;\n const fn = this.fn = new Array(l);\n const tn = this.tn = new Array(l);\n const nPosPred = this.nPosPred = new Array(l);\n const nNegPred = this.nNegPred = new Array(l);\n\n for (var i = 0; i < l; i++) {\n fn[i] = nPos - tp[i];\n tn[i] = nNeg - fp[i];\n\n nPosPred[i] = tp[i] + fp[i];\n nNegPred[i] = tn[i] + fn[i];\n }\n\n this.nPos = nPos;\n this.nNeg = nNeg;\n this.nSamples = nPos + nNeg;\n }\n\n /**\n * Computes a measure from the prediction object.\n *\n * Many measures are available and can be combined :\n * To create a ROC curve, you need fpr and tpr\n * To create a DET curve, you need fnr and fpr\n * To create a Lift chart, you need rpp and lift\n *\n * Possible measures are : threshold (Threshold), acc (Accuracy), err (Error rate),\n * fpr (False positive rate), tpr (True positive rate), fnr (False negative rate), tnr (True negative rate), ppv (Positive predictive value),\n * npv (Negative predictive value), pcfall (Prediction-conditioned fallout), pcmiss (Prediction-conditioned miss), lift (Lift value), rpp (Rate of positive predictions), rnp (Rate of negative predictions)\n *\n * @param measure - The short name of the measure\n *\n * @return [number]\n */\n getMeasure(measure) {\n if (typeof measure !== 'string') {\n throw new Error('No measure specified');\n }\n if (!measures[measure]) {\n throw new Error(`The specified measure (${measure}) does not exist`);\n }\n return measures[measure](this);\n }\n\n /**\n * Returns the area under the ROC curve\n */\n getAURC() {\n const l = this.cutoffs.length;\n const x = new Array(l);\n const y = new Array(l);\n for (var i = 0; i < l; i++) {\n x[i] = this.fp[i] / this.nNeg;\n y[i] = this.tp[i] / this.nPos;\n }\n var auc = 0;\n for (i = 1; i < l; i++) {\n auc += 0.5 * (x[i] - x[i - 1]) * (y[i] + y[i - 1]);\n }\n return auc;\n }\n\n /**\n * Returns the area under the DET curve\n */\n getAUDC() {\n const l = this.cutoffs.length;\n const x = new Array(l);\n const y = new Array(l);\n for (var i = 0; i < l; i++) {\n x[i] = this.fn[i] / this.nPos;\n y[i] = this.fp[i] / this.nNeg;\n }\n var auc = 0;\n for (i = 1; i < l; i++) {\n auc += 0.5 * (x[i] + x[i - 1]) * (y[i] - y[i - 1]);\n }\n return auc;\n }\n\n getDistribution(options) {\n options = options || {};\n var cutLength = this.cutoffs.length;\n var cutLow = options.xMin || Math.floor(this.cutoffs[cutLength - 1] * 100) / 100;\n var cutHigh = options.xMax || Math.ceil(this.cutoffs[1] * 100) / 100;\n var interval = options.interval || Math.floor(((cutHigh - cutLow) / 20 * 10000000) - 1) / 10000000; // Trick to avoid the precision problem of float numbers\n\n var xLabels = [];\n var interValues = [];\n var intraValues = [];\n var interCumPercent = [];\n var intraCumPercent = [];\n\n var nTP = this.tp[cutLength - 1], currentTP = 0;\n var nFP = this.fp[cutLength - 1], currentFP = 0;\n\n for (var i = cutLow, j = (cutLength - 1); i <= cutHigh; i += interval) {\n while (this.cutoffs[j] < i)\n j--;\n\n xLabels.push(i);\n\n var thisTP = nTP - currentTP - this.tp[j];\n var thisFP = nFP - currentFP - this.fp[j];\n\n currentTP += thisTP;\n currentFP += thisFP;\n\n interValues.push(thisFP);\n intraValues.push(thisTP);\n\n interCumPercent.push(100 - (nFP - this.fp[j]) / nFP * 100);\n intraCumPercent.push(100 - (nTP - this.tp[j]) / nTP * 100);\n }\n\n return {\n xLabels: xLabels,\n interValues: interValues,\n intraValues: intraValues,\n interCumPercent: interCumPercent,\n intraCumPercent: intraCumPercent\n };\n }\n}\n\nPerformance.names = {\n acc: 'Accuracy',\n err: 'Error rate',\n fpr: 'False positive rate',\n tpr: 'True positive rate',\n fnr: 'False negative rate',\n tnr: 'True negative rate',\n ppv: 'Positive predictive value',\n npv: 'Negative predictive value',\n pcfall: 'Prediction-conditioned fallout',\n pcmiss: 'Prediction-conditioned miss',\n lift: 'Lift value',\n rpp: 'Rate of positive predictions',\n rnp: 'Rate of negative predictions',\n threshold: 'Threshold'\n};\n\nmodule.exports = Performance;\n","'use strict';\n\nvar defaultOptions = {\n size: 1,\n value: 0\n};\n\n/**\n * Case when the entry is an array\n * @param data\n * @param options\n * @returns {Array}\n */\nfunction arrayCase(data, options) {\n var len = data.length;\n if (typeof options.size === 'number') {\n options.size = [options.size, options.size];\n }\n\n var cond = len + options.size[0] + options.size[1];\n\n var output;\n if (options.output) {\n if (options.output.length !== cond) {\n throw new RangeError('Wrong output size');\n }\n output = options.output;\n } else {\n output = new Array(cond);\n }\n\n var i;\n if (options.value === 'circular') {\n for (i = 0; i < cond; i++) {\n if (i < options.size[0]) {\n output[i] = data[(len - (options.size[0] % len) + i) % len];\n } else if (i < options.size[0] + len) {\n output[i] = data[i - options.size[0]];\n } else {\n output[i] = data[(i - options.size[0]) % len];\n }\n }\n } else if (options.value === 'replicate') {\n for (i = 0; i < cond; i++) {\n if (i < options.size[0]) output[i] = data[0];\n else if (i < options.size[0] + len) output[i] = data[i - options.size[0]];\n else output[i] = data[len - 1];\n }\n } else if (options.value === 'symmetric') {\n if (options.size[0] > len || options.size[1] > len) {\n throw new RangeError(\n 'expanded value should not be bigger than the data length'\n );\n }\n for (i = 0; i < cond; i++) {\n if (i < options.size[0]) output[i] = data[options.size[0] - 1 - i];\n else if (i < options.size[0] + len) output[i] = data[i - options.size[0]];\n else output[i] = data[2 * len + options.size[0] - i - 1];\n }\n } else {\n for (i = 0; i < cond; i++) {\n if (i < options.size[0]) output[i] = options.value;\n else if (i < options.size[0] + len) output[i] = data[i - options.size[0]];\n else output[i] = options.value;\n }\n }\n\n return output;\n}\n\n/**\n * Case when the entry is a matrix\n * @param data\n * @param options\n * @returns {Array}\n */\nfunction matrixCase(data, options) {\n // var row = data.length;\n // var col = data[0].length;\n if (options.size[0] === undefined) {\n options.size = [options.size, options.size, options.size, options.size];\n }\n throw new Error('matrix not supported yet, sorry');\n}\n\n/**\n * Pads and array\n * @param {Array } data\n * @param {object} options\n */\nfunction padArray(data, options) {\n options = Object.assign({}, defaultOptions, options);\n if (Array.isArray(data)) {\n if (Array.isArray(data[0])) return matrixCase(data, options);\n else return arrayCase(data, options);\n } else {\n throw new TypeError('data should be an array');\n }\n}\n\nmodule.exports = padArray;\n","'use strict';\n\nconst { Matrix, MatrixTransposeView, inverse } = require('ml-matrix');\nconst padArray = require('ml-pad-array');\n\nconst defaultOptions = {\n windowSize: 5,\n derivative: 1,\n polynomial: 2,\n pad: 'none',\n padValue: 'replicate'\n};\n\n/**\n * Savitzky-Golay filter\n * @param {Array } data\n * @param {number} h\n * @param {Object} options\n * @returns {Array}\n */\nfunction SavitzkyGolay(data, h, options) {\n options = Object.assign({}, defaultOptions, options);\n if (\n options.windowSize % 2 === 0 ||\n options.windowSize < 5 ||\n !Number.isInteger(options.windowSize)\n ) {\n throw new RangeError(\n 'Invalid window size (should be odd and at least 5 integer number)'\n );\n }\n if (options.derivative < 0 || !Number.isInteger(options.derivative)) {\n throw new RangeError('Derivative should be a positive integer');\n }\n if (options.polynomial < 1 || !Number.isInteger(options.polynomial)) {\n throw new RangeError('Polynomial should be a positive integer');\n }\n\n var C, norm;\n var step = Math.floor(options.windowSize / 2);\n\n if (options.pad === 'pre') {\n data = padArray(data, { size: step, value: options.padValue });\n }\n\n var ans = new Array(data.length - 2 * step);\n\n if (\n options.windowSize === 5 &&\n options.polynomial === 2 &&\n (options.derivative === 1 || options.derivative === 2)\n ) {\n if (options.derivative === 1) {\n C = [-2, -1, 0, 1, 2];\n norm = 10;\n } else {\n C = [2, -1, -2, -1, 2];\n norm = 7;\n }\n } else {\n var J = Matrix.ones(options.windowSize, options.polynomial + 1);\n var inic = -(options.windowSize - 1) / 2;\n for (var i = 0; i < J.rows; i++) {\n for (var j = 0; j < J.columns; j++) {\n if (inic + 1 !== 0 || j !== 0) J.set(i, j, Math.pow(inic + i, j));\n }\n }\n var Jtranspose = new MatrixTransposeView(J);\n var Jinv = inverse(Jtranspose.mmul(J));\n C = Jinv.mmul(Jtranspose);\n C = C.getRow(options.derivative);\n norm = 1;\n }\n var det = norm * Math.pow(h, options.derivative);\n for (var k = step; k < data.length - step; k++) {\n var d = 0;\n for (var l = 0; l < C.length; l++) d += (C[l] * data[l + k - step]) / det;\n ans[k - step] = d;\n }\n\n if (options.pad === 'post') {\n ans = padArray(ans, { size: step, value: options.padValue });\n }\n\n return ans;\n}\n\nmodule.exports = SavitzkyGolay;\n","// auxiliary file to create the 256 look at table elements\n\nvar ans = new Array(256);\nfor (var i = 0; i < 256; i++) {\n var num = i;\n var c = 0;\n while (num) {\n num = num & (num - 1);\n c++;\n }\n ans[i] = c;\n}\n\nmodule.exports = ans;","'use strict';\n\nvar eightBits = require('./creator');\n\n/**\n * Count the number of true values in an array\n * @param {Array} arr\n * @return {number}\n */\nfunction count(arr) {\n var c = 0;\n for (var i = 0; i < arr.length; i++) {\n c += eightBits[arr[i] & 0xff] + eightBits[(arr[i] >> 8) & 0xff] + eightBits[(arr[i] >> 16) & 0xff] + eightBits[(arr[i] >> 24) & 0xff];\n }\n return c;\n}\n\n/**\n * Logical AND operation\n * @param {Array} arr1\n * @param {Array} arr2\n * @return {Array}\n */\nfunction and(arr1, arr2) {\n var ans = new Array(arr1.length);\n for (var i = 0; i < arr1.length; i++)\n ans[i] = arr1[i] & arr2[i];\n return ans;\n}\n\n/**\n * Logical OR operation\n * @param {Array} arr1\n * @param {Array} arr2\n * @return {Array}\n */\nfunction or(arr1, arr2) {\n var ans = new Array(arr1.length);\n for (var i = 0; i < arr1.length; i++)\n ans[i] = arr1[i] | arr2[i];\n return ans;\n}\n\n/**\n * Logical XOR operation\n * @param {Array} arr1\n * @param {Array} arr2\n * @return {Array}\n */\nfunction xor(arr1, arr2) {\n var ans = new Array(arr1.length);\n for (var i = 0; i < arr1.length; i++)\n ans[i] = arr1[i] ^ arr2[i];\n return ans;\n}\n\n/**\n * Logical NOT operation\n * @param {Array} arr\n * @return {Array}\n */\nfunction not(arr) {\n var ans = new Array(arr.length);\n for (var i = 0; i < ans.length; i++)\n ans[i] = ~arr[i];\n return ans;\n}\n\n/**\n * Gets the n value of array arr\n * @param {Array} arr\n * @param {number} n\n * @return {boolean}\n */\nfunction getBit(arr, n) {\n var index = n >> 5; // Same as Math.floor(n/32)\n var mask = 1 << (31 - n % 32);\n return Boolean(arr[index] & mask);\n}\n\n/**\n * Sets the n value of array arr to the value val\n * @param {Array} arr\n * @param {number} n\n * @param {boolean} val\n * @return {Array}\n */\nfunction setBit(arr, n, val) {\n var index = n >> 5; // Same as Math.floor(n/32)\n var mask = 1 << (31 - n % 32);\n if (val)\n arr[index] = mask | arr[index];\n else\n arr[index] = ~mask & arr[index];\n return arr;\n}\n\n/**\n * Translates an array of numbers to a string of bits\n * @param {Array} arr\n * @returns {string}\n */\nfunction toBinaryString(arr) {\n var str = '';\n for (var i = 0; i < arr.length; i++) {\n var obj = (arr[i] >>> 0).toString(2);\n str += '00000000000000000000000000000000'.substr(obj.length) + obj;\n }\n return str;\n}\n\n/**\n * Creates an array of numbers based on a string of bits\n * @param {string} str\n * @returns {Array}\n */\nfunction parseBinaryString(str) {\n var len = str.length / 32;\n var ans = new Array(len);\n for (var i = 0; i < len; i++) {\n ans[i] = parseInt(str.substr(i*32, 32), 2) | 0;\n }\n return ans;\n}\n\n/**\n * Translates an array of numbers to a hex string\n * @param {Array} arr\n * @returns {string}\n */\nfunction toHexString(arr) {\n var str = '';\n for (var i = 0; i < arr.length; i++) {\n var obj = (arr[i] >>> 0).toString(16);\n str += '00000000'.substr(obj.length) + obj;\n }\n return str;\n}\n\n/**\n * Creates an array of numbers based on a hex string\n * @param {string} str\n * @returns {Array}\n */\nfunction parseHexString(str) {\n var len = str.length / 8;\n var ans = new Array(len);\n for (var i = 0; i < len; i++) {\n ans[i] = parseInt(str.substr(i*8, 8), 16) | 0;\n }\n return ans;\n}\n\n/**\n * Creates a human readable string of the array\n * @param {Array} arr\n * @returns {string}\n */\nfunction toDebug(arr) {\n var binary = toBinaryString(arr);\n var str = '';\n for (var i = 0; i < arr.length; i++) {\n str += '0000'.substr((i * 32).toString(16).length) + (i * 32).toString(16) + ':';\n for (var j = 0; j < 32; j += 4) {\n str += ' ' + binary.substr(i * 32 + j, 4);\n }\n if (i < arr.length - 1) str += '\\n';\n }\n return str\n}\n\nmodule.exports = {\n count: count,\n and: and,\n or: or,\n xor: xor,\n not: not,\n getBit: getBit,\n setBit: setBit,\n toBinaryString: toBinaryString,\n parseBinaryString: parseBinaryString,\n toHexString: toHexString,\n parseHexString: parseHexString,\n toDebug: toDebug\n};\n","import isArray from 'is-any-array';\n\n/**\n * Computes the mode of the given values\n * @param {Array} input\n * @return {number}\n */\n\nfunction mode(input) {\n if (!isArray(input)) {\n throw new TypeError('input must be an array');\n }\n\n if (input.length === 0) {\n throw new TypeError('input must not be empty');\n }\n\n var maxValue = 0;\n var maxCount = 0;\n var count = 0;\n var counts = {};\n\n for (var i = 0; i < input.length; ++i) {\n var element = input[i];\n count = counts[element];\n\n if (count) {\n counts[element]++;\n count++;\n } else {\n counts[element] = count = 1;\n }\n\n if (count > maxCount) {\n maxCount = count;\n maxValue = input[i];\n }\n }\n\n return maxValue;\n}\n\nexport default mode;\n","/**\n * Computes the norm of the given values\n * @param {Array} input\n * @param {object} [options={}]\n * @param {string} [algorithm='absolute']\n * @return {number}\n */\nfunction norm(input) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var _options$algorithm = options.algorithm,\n algorithm = _options$algorithm === void 0 ? 'absolute' : _options$algorithm;\n\n if (!Array.isArray(input)) {\n throw new Error('input must be an array');\n }\n\n if (input.length === 0) {\n throw new Error('input must not be empty');\n }\n\n switch (algorithm.toLowerCase()) {\n case 'absolute':\n var sum = absoluteSum(input);\n if (sum === 0) return input.slice(0);\n return input.map(function (element) {\n return element / sum;\n });\n\n default:\n throw new Error(\"norm: unknown algorithm: \".concat(algorithm));\n }\n}\n\nfunction absoluteSum(input) {\n var sum = 0;\n\n for (var i = 0; i < input.length; i++) {\n sum += Math.abs(input[i]);\n }\n\n return sum;\n}\n\nexport default norm;\n","import isArray from 'is-any-array';\n\nfunction _typeof(obj) {\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function (obj) {\n return typeof obj;\n };\n } else {\n _typeof = function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\n/**\n * Fill an array with sequential numbers\n * @param {Array} [input] - optional destination array (if not provided a new array will be created)\n * @param {object} [options={}]\n * @param {number} [options.from=0] - first value in the array\n * @param {number} [options.to=10] - last value in the array\n * @param {number} [options.size=input.length] - size of the array (if not provided calculated from step)\n * @param {number} [options.step] - if not provided calculated from size\n * @return {Array}\n */\n\nfunction sequentialFill() {\n var input = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n if (_typeof(input) === 'object' && !isArray(input)) {\n options = input;\n input = [];\n }\n\n if (!isArray(input)) {\n throw new TypeError('input must be an array');\n }\n\n var _options = options,\n _options$from = _options.from,\n from = _options$from === void 0 ? 0 : _options$from,\n _options$to = _options.to,\n to = _options$to === void 0 ? 10 : _options$to,\n _options$size = _options.size,\n size = _options$size === void 0 ? input.length : _options$size,\n step = _options.step;\n\n if (size && step) {\n throw new Error('step is defined by the array size');\n }\n\n if (!size) {\n if (step) {\n size = Math.floor((to - from) / step) + 1;\n } else {\n size = to - from + 1;\n }\n }\n\n if (!step && size) {\n step = (to - from) / (size - 1);\n }\n\n if (Array.isArray(input)) {\n input.length = 0; // only works with normal array\n\n for (var i = 0; i < size; i++) {\n input.push(from);\n from += step;\n }\n } else {\n if (input.length !== size) {\n throw new Error('sequentialFill typed array must have the correct length');\n }\n\n for (var _i = 0; _i < size; _i++) {\n input[_i] = from;\n from += step;\n }\n }\n\n return input;\n}\n\nexport default sequentialFill;\n","import arrayMean from 'ml-array-mean';\nimport isArray from 'is-any-array';\n\n/**\n * Computes the variance of the given values\n * @param {Array} values\n * @param {object} [options]\n * @param {boolean} [options.unbiased = true] - if true, divide by (n-1); if false, divide by n.\n * @param {number} [options.mean = arrayMean] - precalculated mean, if any.\n * @return {number}\n */\n\nfunction variance(values) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n if (!isArray(values)) {\n throw new TypeError('input must be an array');\n }\n\n var _options$unbiased = options.unbiased,\n unbiased = _options$unbiased === void 0 ? true : _options$unbiased,\n _options$mean = options.mean,\n mean = _options$mean === void 0 ? arrayMean(values) : _options$mean;\n var sqrError = 0;\n\n for (var i = 0; i < values.length; i++) {\n var x = values[i] - mean;\n sqrError += x * x;\n }\n\n if (unbiased) {\n return sqrError / (values.length - 1);\n } else {\n return sqrError / values.length;\n }\n}\n\nexport default variance;\n","import variance from 'ml-array-variance';\n\n/**\n * Computes the standard deviation of the given values\n * @param {Array} values\n * @param {object} [options]\n * @param {boolean} [options.unbiased = true] - if true, divide by (n-1); if false, divide by n.\n * @param {number} [options.mean = arrayMean] - precalculated mean, if any.\n * @return {number}\n */\n\nfunction standardDeviation(values) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n return Math.sqrt(variance(values, options));\n}\n\nexport default standardDeviation;\n","/**\n * Merge abscissa values if the ordinate value is in a list of centroids\n * @param {object} originalPoints\n * @param {Array} originalPoints.x\n * @param {Array} originalPoints.y\n * @param {Array} centroids\n * @param {object} [options]\n * @param {number} [options.window = 0.01] - has to be a positive number\n * @return {{x: Array, y: Array}}\n */\nexport default function mergeByCentroids(\n originalPoints,\n centroids,\n options = {}\n) {\n const { window = 0.01 } = options;\n\n var mergedPoints = {\n x: centroids.slice(),\n y: new Array(centroids.length).fill(0)\n };\n\n var originalIndex = 0;\n var mergedIndex = 0;\n while (\n originalIndex < originalPoints.x.length &&\n mergedIndex < centroids.length\n ) {\n var diff = originalPoints.x[originalIndex] - centroids[mergedIndex];\n if (Math.abs(diff) < window) {\n mergedPoints.y[mergedIndex] += originalPoints.y[originalIndex++];\n } else if (diff < 0) {\n originalIndex++;\n } else {\n mergedIndex++;\n }\n }\n\n return mergedPoints;\n}\n","import binarySearch from 'binary-search';\nimport { ascending, descending } from 'num-sort';\n\n/**\n *\n * @param {object} points\n * @param {Array} originalPoints.x\n * @param {Array} originalPoints.y\n * @param {*} options\n * @return {{x: Array, y: Array}}\n */\nexport default function closestX(points, options) {\n const { x, y } = points;\n const { target = x[0], reverse = false } = options;\n\n let index;\n if (reverse) {\n index = binarySearch(x, target, descending);\n } else {\n index = binarySearch(x, target, ascending);\n }\n\n if (index >= 0) {\n return {\n x: x[index],\n y: y[index]\n };\n } else {\n index = ~index;\n if (\n (index !== 0 && Math.abs(x[index] - target) > 0.5) ||\n index === x.length\n ) {\n return {\n x: x[index - 1],\n y: y[index - 1]\n };\n } else {\n return {\n x: x[index],\n y: y[index]\n };\n }\n }\n}\n","/**\n * Merge abscissas values on similar ordinates and weight the group of abscissas\n * @param {object} points\n * @param {Array} points.x - sorted abscissas values\n * @param {Array} points.y - ordinates values\n * @param {object} [options]\n * @param {number} [options.groupWidth = 0.001] - window for abscissas to merge\n * @return {{x: Array, y: Array}}\n */\nexport default function maxMerge(points, options = {}) {\n const { x, y } = points;\n const { groupWidth = 0.001 } = options;\n\n var merged = { x: [], y: [] };\n var maxAbscissa = { x: [], y: [] };\n var size = 0;\n var index = 0;\n\n while (index < x.length) {\n if (size === 0 || x[index] - merged.x[size - 1] > groupWidth) {\n maxAbscissa.x.push(x[index]);\n maxAbscissa.y.push(y[index]);\n merged.x.push(x[index]);\n merged.y.push(y[index]);\n index++;\n size++;\n } else {\n if (y[index] > maxAbscissa.y[size - 1]) {\n maxAbscissa.x[size - 1] = x[index];\n maxAbscissa.y[size - 1] = y[index];\n }\n merged.x[size - 1] = x[index];\n merged.y[size - 1] += y[index];\n index++;\n }\n }\n\n merged.x = maxAbscissa.x.slice();\n\n return merged;\n}\n","import binarySearch from 'binary-search';\nimport { ascending, descending } from 'num-sort';\n\n/**\n * @param {object} points\n * @param {Array} points.x - sorted abscissas values\n * @param {Array} points.y - ordinates values\n * @param {object} [options]\n * @param {object} [options.from = {index: 0}]\n * @param {object} [options.to = {index: x.length-1}]\n * @param {boolean} [options.reverse = false]\n * @return {{index: number, value: number}}\n */\nexport default function maxY(points, options = {}) {\n const { x, y } = points;\n let {\n from = { index: 0 },\n to = { index: x.length },\n reverse = false\n } = options;\n\n if (from.value !== undefined && from.index === undefined) {\n from.index = calculateIndex(from.value, x, reverse);\n }\n\n if (to.value !== undefined && to.index === undefined) {\n to.index = calculateIndex(to.value, x, reverse);\n }\n\n var currentMax = Number.MIN_VALUE;\n var currentIndex;\n for (var i = from.index; i < to.index; i++) {\n if (currentMax < y[i]) {\n currentMax = y[i];\n currentIndex = i;\n }\n }\n\n return {\n index: currentIndex,\n value: currentMax\n };\n}\n\n/**\n * @param {number} value\n * @param {Array} x\n * @param {boolean} reverse\n * @return {number} index of the value in the array\n */\nfunction calculateIndex(value, x, reverse) {\n let index;\n if (reverse) {\n index = binarySearch(x, value, descending);\n } else {\n index = binarySearch(x, value, ascending);\n }\n\n if (index < 0) {\n throw new Error(`the value ${value} doesn't belongs to the abscissa value`);\n }\n\n return index;\n}\n","export default function sortX(points, options = {}) {\n const { x, y } = points;\n const { reverse = false } = options;\n\n var sortFunc;\n if (!reverse) {\n sortFunc = (a, b) => a.x - b.x;\n } else {\n sortFunc = (a, b) => b.x - a.x;\n }\n\n var grouped = x\n .map((val, index) => ({\n x: val,\n y: y[index]\n }))\n .sort(sortFunc);\n\n var response = { x: x.slice(), y: y.slice() };\n for (var i = 0; i < x.length; i++) {\n response.x[i] = grouped[i].x;\n response.y[i] = grouped[i].y;\n }\n\n return response;\n}\n","\n/**\n * In place modification of the 2 arrays to make X unique and sum the Y if X has the same value\n * @param {object} [points={}] : Object of points contains property x (an array) and y (an array)\n * @return points\n */\n\nexport default function uniqueX(points = {}) {\n const { x, y } = points;\n if (x.length < 2) return;\n if (x.length !== y.length) {\n throw new Error('The X and Y arrays mush have the same length');\n }\n\n let current = x[0];\n let counter = 0;\n\n for (let i = 1; i < x.length; i++) {\n if (current !== x[i]) {\n counter++;\n current = x[i];\n x[counter] = x[i];\n if (i !== counter) {\n y[counter] = 0;\n }\n }\n if (i !== counter) {\n y[counter] += y[i];\n }\n }\n\n x.length = counter + 1;\n y.length = counter + 1;\n}\n","/**\n * Merge abscissas values on similar ordinates and weight the group of abscissas\n * @param {object} points\n * @param {Array} points.x - sorted abscissas values\n * @param {Array} points.y - ordinates values\n * @param {object} [options]\n * @param {number} [options.groupWidth = 0.001] - window for abscissas to merge\n * @return {{x: Array, y: Array}}\n */\nexport default function weightedMerge(points, options = {}) {\n const { x, y } = points;\n const { groupWidth = 0.001 } = options;\n\n var merged = { x: [], y: [] };\n var weightedAbscissa = { x: [], y: [] };\n var size = 0;\n var index = 0;\n\n while (index < x.length) {\n if (size === 0 || x[index] - merged.x[size - 1] > groupWidth) {\n weightedAbscissa.x.push(x[index] * y[index]);\n weightedAbscissa.y.push(y[index]);\n merged.x.push(x[index]);\n merged.y.push(y[index]);\n index++;\n size++;\n } else {\n weightedAbscissa.x[size - 1] += x[index] * y[index];\n weightedAbscissa.y[size - 1] += y[index];\n merged.x[size - 1] = x[index];\n merged.y[size - 1] += y[index];\n index++;\n }\n }\n\n for (var i = 0; i < merged.x.length; i++) {\n merged.x[i] = weightedAbscissa.x[i] / weightedAbscissa.y[i];\n }\n\n return merged;\n}\n","/**\n * Function that calculates the integral of the line between two\n * x-coordinates, given the slope and intercept of the line.\n * @param {number} x0\n * @param {number} x1\n * @param {number} slope\n * @param {number} intercept\n * @return {number} integral value.\n */\nexport default function integral(x0, x1, slope, intercept) {\n return (\n 0.5 * slope * x1 * x1 +\n intercept * x1 -\n (0.5 * slope * x0 * x0 + intercept * x0)\n );\n}\n","import integral from './integral';\n\n/**\n * function that retrieves the getEquallySpacedData with the variant \"smooth\"\n *\n * @param {Array} x\n * @param {Array} y\n * @param {number} from - Initial point\n * @param {number} to - Final point\n * @param {number} numberOfPoints\n * @return {Array} - Array of y's equally spaced with the variant \"smooth\"\n */\nexport default function equallySpacedSmooth(x, y, from, to, numberOfPoints) {\n var xLength = x.length;\n\n var step = (to - from) / (numberOfPoints - 1);\n var halfStep = step / 2;\n\n var output = new Array(numberOfPoints);\n\n var initialOriginalStep = x[1] - x[0];\n var lastOriginalStep = x[xLength - 1] - x[xLength - 2];\n\n // Init main variables\n var min = from - halfStep;\n var max = from + halfStep;\n\n var previousX = Number.MIN_VALUE;\n var previousY = 0;\n var nextX = x[0] - initialOriginalStep;\n var nextY = 0;\n\n var currentValue = 0;\n var slope = 0;\n var intercept = 0;\n var sumAtMin = 0;\n var sumAtMax = 0;\n\n var i = 0; // index of input\n var j = 0; // index of output\n\n function getSlope(x0, y0, x1, y1) {\n return (y1 - y0) / (x1 - x0);\n }\n\n main: while (true) {\n if (previousX <= min && min <= nextX) {\n add = integral(0, min - previousX, slope, previousY);\n sumAtMin = currentValue + add;\n }\n\n while (nextX - max >= 0) {\n // no overlap with original point, just consume current value\n var add = integral(0, max - previousX, slope, previousY);\n sumAtMax = currentValue + add;\n\n output[j++] = (sumAtMax - sumAtMin) / step;\n\n if (j === numberOfPoints) {\n break main;\n }\n\n min = max;\n max += step;\n sumAtMin = sumAtMax;\n }\n\n currentValue += integral(previousX, nextX, slope, intercept);\n\n previousX = nextX;\n previousY = nextY;\n\n if (i < xLength) {\n nextX = x[i];\n nextY = y[i];\n i++;\n } else if (i === xLength) {\n nextX += lastOriginalStep;\n nextY = 0;\n }\n\n slope = getSlope(previousX, previousY, nextX, nextY);\n intercept = -slope * previousX + previousY;\n }\n\n return output;\n}\n","/**\n * function that retrieves the getEquallySpacedData with the variant \"slot\"\n *\n * @param {Array} x\n * @param {Array} y\n * @param {number} from - Initial point\n * @param {number} to - Final point\n * @param {number} numberOfPoints\n * @return {Array} - Array of y's equally spaced with the variant \"slot\"\n */\nexport default function equallySpacedSlot(x, y, from, to, numberOfPoints) {\n var xLength = x.length;\n\n var step = (to - from) / (numberOfPoints - 1);\n var halfStep = step / 2;\n var lastStep = x[x.length - 1] - x[x.length - 2];\n\n var start = from - halfStep;\n var output = new Array(numberOfPoints);\n\n // Init main variables\n var min = start;\n var max = start + step;\n\n var previousX = -Number.MAX_VALUE;\n var previousY = 0;\n var nextX = x[0];\n var nextY = y[0];\n var frontOutsideSpectra = 0;\n var backOutsideSpectra = true;\n\n var currentValue = 0;\n\n // for slot algorithm\n var currentPoints = 0;\n\n var i = 1; // index of input\n var j = 0; // index of output\n\n main: while (true) {\n if (previousX >= nextX) throw new Error('x must be an increasing serie');\n while (previousX - max > 0) {\n // no overlap with original point, just consume current value\n if (backOutsideSpectra) {\n currentPoints++;\n backOutsideSpectra = false;\n }\n\n output[j] = currentPoints <= 0 ? 0 : currentValue / currentPoints;\n j++;\n\n if (j === numberOfPoints) {\n break main;\n }\n\n min = max;\n max += step;\n currentValue = 0;\n currentPoints = 0;\n }\n\n if (previousX > min) {\n currentValue += previousY;\n currentPoints++;\n }\n\n if (previousX === -Number.MAX_VALUE || frontOutsideSpectra > 1) {\n currentPoints--;\n }\n\n previousX = nextX;\n previousY = nextY;\n\n if (i < xLength) {\n nextX = x[i];\n nextY = y[i];\n i++;\n } else {\n nextX += lastStep;\n nextY = 0;\n frontOutsideSpectra++;\n }\n }\n\n return output;\n}\n","export default function getZones(from, to, numberOfPoints, exclusions = []) {\n if (from > to) {\n [from, to] = [to, from];\n }\n\n // in exclusions from and to have to be defined\n exclusions = exclusions.filter(\n (exclusion) => exclusion.from !== undefined && exclusion.to !== undefined\n );\n\n exclusions = JSON.parse(JSON.stringify(exclusions));\n // we ensure that from before to\n exclusions.forEach((exclusion) => {\n if (exclusion.from > exclusion.to) {\n [exclusion.to, exclusion.from] = [exclusion.from, exclusion.to];\n }\n });\n\n exclusions.sort((a, b) => a.from - b.from);\n\n // we will rework the exclusions in order to remove overlap and outside range (from / to)\n exclusions.forEach((exclusion) => {\n if (exclusion.from < from) exclusion.from = from;\n if (exclusion.to > to) exclusion.to = to;\n });\n for (let i = 0; i < exclusions.length - 1; i++) {\n if (exclusions[i].to > exclusions[i + 1].from) {\n exclusions[i].to = exclusions[i + 1].from;\n }\n }\n exclusions = exclusions.filter((exclusion) => exclusion.from < exclusion.to);\n\n if (!exclusions || exclusions.length === 0) {\n return [{ from, to, numberOfPoints }];\n }\n\n // need to deal with overlapping exclusions and out of bound exclusions\n\n let toRemove = exclusions.reduce(\n (previous, exclusion) => (previous += exclusion.to - exclusion.from),\n 0\n );\n let total = to - from;\n let unitsPerPoint = (total - toRemove) / numberOfPoints;\n let zones = [];\n let currentFrom = from;\n let totalPoints = 0;\n for (let exclusion of exclusions) {\n let currentNbPoints = Math.round(\n (exclusion.from - currentFrom) / unitsPerPoint\n );\n totalPoints += currentNbPoints;\n if (currentNbPoints > 0) {\n zones.push({\n from: currentFrom,\n to: exclusion.from,\n numberOfPoints: currentNbPoints\n });\n }\n\n currentFrom = exclusion.to;\n }\n if (numberOfPoints - totalPoints > 0) {\n zones.push({\n from: currentFrom,\n to: to,\n numberOfPoints: numberOfPoints - totalPoints\n });\n }\n\n return zones;\n}\n","import sequentialFill from 'ml-array-sequential-fill';\n\nimport equallySpacedSmooth from './equallySpacedSmooth';\nimport equallySpacedSlot from './equallySpacedSlot';\nimport getZones from './getZones';\n\n/**\n * Function that returns a Number array of equally spaced numberOfPoints\n * containing a representation of intensities of the spectra arguments x\n * and y.\n *\n * The options parameter contains an object in the following form:\n * from: starting point\n * to: last point\n * numberOfPoints: number of points between from and to\n * variant: \"slot\" or \"smooth\" - smooth is the default option\n *\n * The slot variant consist that each point in the new array is calculated\n * averaging the existing points between the slot that belongs to the current\n * value. The smooth variant is the same but takes the integral of the range\n * of the slot and divide by the step size between two points in the new array.\n *\n * @param {object} [arrayXY={}] - object containing 2 properties x and y (both an array)\n * @param {object} [options={}]\n * @param {number} [options.from=x[0]]\n * @param {number} [options.to=x[x.length-1]]\n * @param {string} [options.variant='smooth']\n * @param {number} [options.numberOfPoints=100]\n * @param {Array} [options.exclusions=[]] array of from / to that should be skipped for the generation of the points\n * @return {object} new object with x / y array with the equally spaced data.\n */\n\nexport default function equallySpaced(arrayXY = {}, options = {}) {\n let { x, y } = arrayXY;\n let xLength = x.length;\n let reverse = false;\n if (x.length > 1 && x[0] > x[1]) {\n x = x.slice().reverse();\n y = y.slice().reverse();\n reverse = true;\n }\n\n let {\n from = x[0],\n to = x[xLength - 1],\n variant = 'smooth',\n numberOfPoints = 100,\n exclusions = []\n } = options;\n\n if (xLength !== y.length) {\n throw new RangeError(\"the x and y vector doesn't have the same size.\");\n }\n\n if (typeof from !== 'number' || isNaN(from)) {\n throw new RangeError(\"'from' option must be a number\");\n }\n\n if (typeof to !== 'number' || isNaN(to)) {\n throw new RangeError(\"'to' option must be a number\");\n }\n\n if (typeof numberOfPoints !== 'number' || isNaN(numberOfPoints)) {\n throw new RangeError(\"'numberOfPoints' option must be a number\");\n }\n\n let zones = getZones(from, to, numberOfPoints, exclusions);\n\n let xResult = [];\n let yResult = [];\n for (let zone of zones) {\n let zoneResult = processZone(\n x,\n y,\n zone.from,\n zone.to,\n zone.numberOfPoints,\n variant,\n reverse\n );\n xResult.push(...zoneResult.x);\n yResult.push(...zoneResult.y);\n }\n\n if (reverse) {\n if (from < to) {\n return { x: xResult.reverse(), y: yResult.reverse() };\n } else {\n return { x: xResult, y: yResult };\n }\n } else {\n if (from < to) {\n return { x: xResult, y: yResult };\n } else {\n return { x: xResult.reverse(), y: yResult.reverse() };\n }\n }\n}\n\nfunction processZone(x, y, from, to, numberOfPoints, variant) {\n if (numberOfPoints < 1) {\n throw new RangeError('the number of points must be at least 1');\n }\n\n var output =\n variant === 'slot'\n ? equallySpacedSlot(x, y, from, to, numberOfPoints)\n : equallySpacedSmooth(x, y, from, to, numberOfPoints);\n\n return {\n x: sequentialFill({\n from,\n to,\n size: numberOfPoints\n }),\n y: output\n };\n}\n","export default function getZones(from, to, exclusions = []) {\n if (from > to) {\n [from, to] = [to, from];\n }\n\n // in exclusions from and to have to be defined\n exclusions = exclusions.filter(\n (exclusion) => exclusion.from !== undefined && exclusion.to !== undefined\n );\n\n exclusions = JSON.parse(JSON.stringify(exclusions));\n // we ensure that from before to\n exclusions.forEach((exclusion) => {\n if (exclusion.from > exclusion.to) {\n [exclusion.to, exclusion.from] = [exclusion.from, exclusion.to];\n }\n });\n\n exclusions.sort((a, b) => a.from - b.from);\n\n // we will rework the exclusions in order to remove overlap and outside range (from / to)\n exclusions.forEach((exclusion) => {\n if (exclusion.from < from) exclusion.from = from;\n if (exclusion.to > to) exclusion.to = to;\n });\n for (let i = 0; i < exclusions.length - 1; i++) {\n if (exclusions[i].to > exclusions[i + 1].from) {\n exclusions[i].to = exclusions[i + 1].from;\n }\n }\n exclusions = exclusions.filter((exclusion) => exclusion.from < exclusion.to);\n\n if (!exclusions || exclusions.length === 0) {\n return [{ from, to }];\n }\n\n let zones = [];\n let currentFrom = from;\n for (let exclusion of exclusions) {\n if (currentFrom < exclusion.from) {\n zones.push({\n from: currentFrom,\n to: exclusion.from\n });\n }\n\n currentFrom = exclusion.to;\n }\n if (currentFrom < to) {\n zones.push({\n from: currentFrom,\n to: to\n });\n }\n\n return zones;\n}\n","import getZones from './getZones';\n\n/**\n * Filter an array x/y based on various criteria\n * x points are expected to be sorted\n *\n * @param {object} points\n * @param {object} [options={}]\n * @param {array} [options.from]\n * @param {array} [options.to]\n * @param {array} [options.exclusions=[]]\n * @return {{x: Array, y: Array}}\n */\n\nexport default function filterX(points, options = {}) {\n const { x, y } = points;\n const { from = x[0], to = x[x.length - 1], exclusions = [] } = options;\n\n let zones = getZones(from, to, exclusions);\n\n\n let currentZoneIndex = 0;\n let newX = [];\n let newY = [];\n let position = 0;\n while (position < x.length) {\n if (\n x[position] <= zones[currentZoneIndex].to &&\n x[position] >= zones[currentZoneIndex].from\n ) {\n newX.push(x[position]);\n newY.push(y[position]);\n } else {\n if (x[position] > zones[currentZoneIndex].to) {\n currentZoneIndex++;\n if (!zones[currentZoneIndex]) break;\n }\n }\n position++;\n }\n\n return {\n x: newX,\n y: newY\n };\n}\n","import { DecisionTreeClassifier, DecisionTreeRegression } from 'ml-cart';\nimport {\n RandomForestClassifier,\n RandomForestRegression\n} from 'ml-random-forest';\n\n// Try to keep this list in the same structure as the README.\n\n// Unsupervised learning\nexport { PCA } from 'ml-pca';\nimport * as HClust from 'ml-hclust';\nexport { HClust };\nexport { default as KMeans } from 'ml-kmeans';\n\n// Supervised learning\nimport * as NaiveBayes from 'ml-naivebayes';\nexport { NaiveBayes };\nexport { default as KNN } from 'ml-knn';\nexport { PLS, KOPLS } from 'ml-pls';\nexport { default as CrossValidation } from 'ml-cross-validation';\nexport { default as ConfusionMatrix } from 'ml-confusion-matrix';\nexport { DecisionTreeClassifier };\nexport { RandomForestClassifier };\n\n// Artificial neural networks\nexport { default as FNN } from 'ml-fnn';\nexport { default as SOM } from 'ml-som';\n\n// Regression\nexport {\n SimpleLinearRegression,\n PolynomialRegression,\n MultivariateLinearRegression,\n PowerRegression,\n ExponentialRegression,\n TheilSenRegression,\n RobustPolynomialRegression\n} from 'ml-regression';\nexport { DecisionTreeRegression };\nexport { RandomForestRegression };\n\n// Optimization\nexport { default as levenbergMarquardt } from 'ml-levenberg-marquardt';\n\n// Math\nimport * as MatrixLib from 'ml-matrix';\nconst {\n Matrix,\n SVD,\n EVD,\n CholeskyDecomposition,\n LuDecomposition,\n QrDecomposition\n} = MatrixLib;\nexport {\n MatrixLib,\n Matrix,\n SVD,\n EVD,\n CholeskyDecomposition,\n LuDecomposition,\n QrDecomposition\n};\n\nexport { SparseMatrix } from 'ml-sparse-matrix';\nexport { default as Kernel } from 'ml-kernel';\nimport { distance, similarity } from 'ml-distance';\nexport { distance as Distance, similarity as Similarity };\nexport { default as distanceMatrix } from 'ml-distance-matrix';\nexport { default as XSadd } from 'ml-xsadd';\n\n// Statistics\nexport { default as Performance } from 'ml-performance';\n\n// Data preprocessing\nexport { default as savitzkyGolay } from 'ml-savitzky-golay';\n\n// Utility\nexport { default as BitArray } from 'ml-bit-array';\nexport { default as HashTable } from 'ml-hash-table';\nexport { default as padArray } from 'ml-pad-array';\nexport { default as binarySearch } from 'binary-search';\nimport * as numSort from 'num-sort';\nexport { numSort };\nexport { default as Random } from 'ml-random';\n\nimport min from 'ml-array-min';\nimport max from 'ml-array-max';\nimport median from 'ml-array-median';\nimport mean from 'ml-array-mean';\nimport mode from 'ml-array-mode';\nimport normed from 'ml-array-normed';\nimport rescale from 'ml-array-rescale';\nimport sequentialFill from 'ml-array-sequential-fill';\nimport standardDeviation from 'ml-array-standard-deviation';\nimport variance from 'ml-array-variance';\nexport const Array = {\n min,\n max,\n median,\n mean,\n mode,\n normed,\n rescale,\n sequentialFill,\n standardDeviation,\n variance\n};\n\nimport centroidsMerge from 'ml-array-xy-centroids-merge';\nimport closestX from 'ml-arrayxy-closestx';\nimport maxMerge from 'ml-array-xy-max-merge';\nimport maxY from 'ml-array-xy-max-y';\nimport sortX from 'ml-array-xy-sort-x';\nimport uniqueX from 'ml-arrayxy-uniquex';\nimport weightedMerge from 'ml-array-xy-weighted-merge';\nimport equallySpaced from 'ml-array-xy-equally-spaced';\nimport filterX from 'ml-array-xy-filter-x';\nexport const ArrayXY = {\n centroidsMerge,\n closestX,\n maxMerge,\n maxY,\n sortX,\n uniqueX,\n weightedMerge,\n equallySpaced,\n filterX\n};\n"],"names":["toString","Object","prototype","isAnyArray","object","call","endsWith","max","input","isArray","TypeError","length","i","min","rescale","output","options","arguments","undefined","Array","currentMin","currentMax","RangeError","_options$min","minValue","autoMinMax","_options$max","maxValue","factor","checkRowIndex","matrix","index","outer","rows","checkColumnIndex","columns","checkRowVector","vector","to1DArray","checkColumnVector","checkIndices","rowIndices","columnIndices","row","checkRowIndices","column","checkColumnIndices","some","r","from","c","checkRange","startRow","endRow","startColumn","endColumn","checkNumber","newArray","value","array","push","name","sumByRow","sum","j","get","sumByColumn","sumAll","v","productByRow","productByColumn","productAll","varianceByRow","unbiased","mean","cols","variance","sum1","sum2","x","varianceByColumn","varianceAll","size","centerByRow","set","centerByColumn","centerAll","getScaleByRow","scale","Math","pow","sqrt","scaleByRow","getScaleByColumn","scaleByColumn","getScaleAll","divider","scaleAll","inspectMatrix","indent","repeat","indentData","this","constructor","inspectData","maxRows","maxColumns","maxNumSize","maxI","maxJ","result","line","formatNumber","join","num","numStr","String","padEnd","precise","toPrecision","exponential","toExponential","eIndex","indexOf","e","substring","installMathOperations","AbstractMatrix","Matrix","add","addS","addM","checkMatrix","sub","subS","subM","subtract","subtractS","subtractM","mul","mulS","mulM","multiply","multiplyS","multiplyM","div","divS","divM","divide","divideS","divideM","mod","modS","modM","modulus","modulusS","modulusM","and","andS","andM","or","orS","orM","xor","xorS","xorM","leftShift","leftShiftS","leftShiftM","signPropagatingRightShift","signPropagatingRightShiftS","signPropagatingRightShiftM","rightShift","rightShiftS","rightShiftM","zeroFillRightShift","zeroFillRightShiftS","zeroFillRightShiftM","not","abs","acos","acosh","asin","asinh","atan","atanh","cbrt","ceil","clz32","cos","cosh","exp","expm1","floor","fround","log","log1p","log10","log2","round","sign","sin","sinh","tan","tanh","trunc","arg0","powS","powM","newRows","newColumns","newData","newMatrix","fill","random","Number","isInteger","interval","zeros","data","l","matrix1","matrix2","isMatrix","klass","apply","callback","to2DArray","copy","toJSON","isRowVector","isColumnVector","isVector","isSquare","isSymmetric","isEchelonForm","previousColumn","checked","isReducedEchelonForm","k","echelonForm","clone","h","iMax","swapRows","tmp","reducedEchelonForm","m","n","maxRow","p","pivot","Error","setSubMatrix","neg","getRow","getRowVector","rowVector","setRow","row1","row2","temp","getColumn","getColumnVector","columnVector","setColumn","swapColumns","column1","column2","addRowVector","subRowVector","mulRowVector","divRowVector","addColumnVector","subColumnVector","mulColumnVector","divColumnVector","mulRow","mulColumn","maxIndex","idx","minIndex","maxRowIndex","minRow","minRowIndex","maxColumn","maxColumnIndex","minColumn","minColumnIndex","diag","norm","type","cumulativeSum","dot","vector2","vector1","mmul","other","Bcolj","Float64Array","s","strassen2x2","a11","b11","a12","b12","a21","b21","a22","b22","m1","m2","m3","m4","m5","c00","c01","c10","c11","strassen3x3","a00","a01","a02","a10","a20","b00","b01","b02","b10","b20","m6","m7","m8","m9","m12","m13","m14","m15","m16","m17","m18","c02","c12","c20","c21","c22","mmulStrassen","y","r1","c1","r2","c2","embed","mat","resultat","console","warn","blockMult","a","b","halfRows","parseInt","halfCols","subMatrix","scaleRows","isFinite","scaleColumns","flipRows","middle","first","last","flipColumns","kroneckerProduct","q","transpose","sortRows","compareFunction","compareNumbers","sort","sortColumns","subMatrixRow","indices","subMatrixColumn","selection","rowIndex","columnIndex","trace","by","product","standardDeviation","center","Symbol","for","rand","randomInt","randInt","diagonal","identity","eye","negate","tensorProduct","nRows","nColumns","arrayData","removeRow","splice","addRow","removeColumn","newRow","addColumn","BaseView","MatrixColumnView","MatrixColumnSelectionView","MatrixFlipColumnView","MatrixFlipRowView","MatrixRowView","MatrixRowSelectionView","MatrixSelectionView","MatrixSubView","MatrixTransposeView","WrapperMatrix1D","_calculateIndex","WrapperMatrix2D","wrap","LuDecomposition","t","LUcolj","kmax","lu","pivotVector","pivotSign","LU","isSingular","col","solve","count","X","determinant","hypotenuse","QrDecomposition","qr","rdiag","nrm","QR","Rdiag","isFullRank","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","tol","ii","useSVD","leftHandSide","rightHandSide","subMatrix0","subMatrix1","subMatrix2","xrange","exception","range","dependenciesOneRow","error","thresholdValue","returnArray","linearDependencies","thresholdError","results","Abis","pseudoInverse","svdSolution","SVD","leftSingularVectors","covariance","xMatrix","yMatrix","yIsSame","correlation","sdx","sdy","EigenvalueDecomposition","assumeSymmetric","d","tred2","tql2","H","ort","orthes","hqr2","hh","dl1","c3","el1","s2","tst1","high","low","nn","w","ra","sa","vr","vi","notlast","cdivres","exshift","z","iter","cdiv","xr","xi","yr","yi","CholeskyDecomposition","dimension","positiveDefinite","L","B","toDiscreteDistribution","numberOfClasses","counts","giniImpurity","probabilities","getNumberOfClasses","filter","val","arr","giniGain","splitted","splitsImpurity","splits","currentSplit","squaredError","meanArray","currentElement","regressionError","matrixSplitter","lesserX","greaterX","lesserY","greaterY","zip","ret","gainFunctions","gini","Utils","regression","splitFunctions","TreeNode","kind","gainFunction","splitFunction","minNumSamples","maxDepth","bestSplit","XTranspose","bestGain","Infinity","check","currentFeature","splitValues","featureSplit","currentSplitVal","split","gain","maxGain","splitValue","lesser","greater","calculatePrediction","distribution","train","currentDepth","parentGain","splitColumn","splittedMatrix","left","right","classify","setNodeParameters","node","defaultOptions","DecisionTreeClassifier","model","root","Tree","assign","trainingSet","trainingLabels","predict","toPredict","predictions","DecisionTreeRegression","trainingValues","SMALLEST_UNSAFE_INTEGER","LARGEST_SAFE_INTEGER","UINT32_MAX","UINT32_SIZE","INT32_SIZE","INT32_MAX","UINT21_SIZE","UINT21_MAX","checkFloat","examplesBaggingWithReplacement","trainingValue","seed","engine","Random","autoSeed","Xr","featureBagging","replacement","toRet","usedIndex","Set","has","RandomForestBase","maxFeatures","nEstimators","treeOptions","isClassifier","indexes","useSampleBagging","Estimator","DTClassifier","DTRegression","estimators","map","est","load","res","values","predictionValues","RandomForestClassifier","baseModel","mode","super","pop","_ref","module","exports","window","median","quickSelectMedian","slice","selectionMethods","arrayMean","arrayMedian","selectionMethod","RandomForestRegression","PCA","dataset","means","stdevs","S","isCovarianceMatrix","_computeFromCovarianceMatrix","useCovarianceMatrix","_adjust","covarianceMatrix","svd","singularValues","eigenvalues","singularValue","nComponents","getExplainedVariance","getCumulativeVariance","explained","getEigenvectors","getEigenvalues","getStandardDeviations","getLoadings","evd","EVD","eigenvectorMatrix","realEigenvalues","reverse","squaredEuclidean","euclidean","distanceMatrix","distanceFn","Heap","defaultCmp","heapify","heappop","heappush","heappushpop","heapreplace","insort","nlargest","nsmallest","updateItem","_siftdown","_siftup","lo","hi","cmp","mid","concat","item","lastelt","returnitem","_i","_j","_ref1","_results","_results1","_len","pos","elem","los","startpos","newitem","parent","parentpos","childpos","endpos","rightpos","nodes","replace","pushpop","peek","contains","clear","empty","heap","toArray","insert","top","front","require$$0","Cluster","children","distance","cut","list","ans","group","minGroups","forEach","child","traverse","cb","visit","ClusterLeaf","simpleLink","cluster1","cluster2","disFun","completeLink","averageLink","centroidLink","dist","wardLink","alreadySorted","half","agnes","distanceFunction","method","isDistanceMatrix","methodFunc","len","dis","fdistance","sdistance","toFixed","dmin","clustered","filterInt","filterDiff","diff","obj","indCount","jj","splitting","Ci","ndist","Cj","intrDist","diana","M","clId","rebel","tree","ind","C","sG","spl","fData","sData","nearestVector","listVectors","similarityFunction","vectorIndex","maxSim","sim","minDist","MAX_VALUE","calculateDistanceMatrix","updateClusterID","centers","clusterID","updateCenters","prevCenters","K","nDim","centersLen","dim","id","hasConverged","oldCenters","tolerance","LOOP","FLOAT_MUL","sh1","sh2","sh3","multiply_uint32","nlo","XSadd","Date","now","state","Uint32Array","init","getFloat","bind","getUint32","nextState","periodCertification","PROB_TOLERANCE","randomChoice","valuesArr","cumSum","getArray","randomIndex","seedOrRandom","xsadd","XSAdd","randomGenerator","choice","randomSample","mostDistant","maxDist","minDistCent","kmeanspp","nSamples","localTrials","firstCenterIdx","closestDistSquared","cumSumClosestDistSquared","candidateIdx","distanceToCandidates","euclideanDistances","bestCandidate","bestPot","bestDistSquared","newDistSquared","newPot","A","distanceSymbol","KMeansResult","clusters","centroids","converged","iterations","nearest","centroid","computeInformation","enrichedCentroids","maxIterations","withIterations","initialization","step","newCenters","kmeansGenerator","stepResult","stepNumber","kmeans","separateClasses","features","classes","totalPerClasses","separatedClasses","currentIndex","GaussianNB","reload","calculateProbabilities","C1","PI","std","logPriorProbability","currentStd","getCurrentClass","modelName","currentCase","maxProbability","predictedClass","currentProbability","calculateLogProbability","C2","MultinomialNB","conditionalProbability","priorProbability","separateClass","classValues","divisor","matrixLog","Node","KDTree","points","metric","dimensions","buildTree","restoreParent","toJSONImpl","point","maxNodes","maxDistance","bestNodes","BinaryHeap","nearestSearch","ownDistance","linearPoint","bestChild","linearDistance","otherChild","saveNode","content","src","dest","depth","scoreFunction","element","bubbleUp","end","sinkDown","parentN","elemScore","child2N","child1N","swap","child1","child1Score","child2","KNN","labels","kdTree","isEuclidean","euclideanDistance","getSinglePrediction","knn","nearestPoints","pointsPerClass","maxPoints","lastElement","currentClass","currentPoints","pow2array","initializeMatrices","PLS","meanX","stdDevX","meanY","stdDevY","PBQ","R2X","scaleMethod","latentVectors","rx","cx","ry","cy","ssqXcal","sumOfSquaresY","T","P","Q","W","transposeX","transposeY","tIndex","maxSumColIndex","uIndex","t1","u","den","pnorm","ssqYcal","E","F","KOPLS","YLoadingMat","SigmaPow","YScoreMat","predScoreMat","YOrthLoadingVec","YOrthEigen","YOrthScoreMat","toNorm","TURegressionCoeff","kernelX","kernel","orthogonalComp","predictiveComp","predictiveComponents","orthogonalComponents","compute","Identity","Sigma","diagonalMatrix","YOrthScoreNorm","TpiPrime","CoTemp","SoTemp","toiPrime","ITo","lastScoreMat","lastTpPrime","KTestTrain","YOrthScoreVector","scoreMatPrime","p1","p2","p3","prediction","predYOrthVectors","ConfusionMatrix","actual","predicted","distinctLabels","actualIdx","predictedIdx","getMatrix","getLabels","getTotalCount","getTrueCount","getFalseCount","getTruePositiveCount","label","getIndex","getTrueNegativeCount","getFalsePositiveCount","getFalseNegativeCount","getPositiveCount","getNegativeCount","getTruePositiveRate","getTrueNegativeRate","getPositivePredictiveValue","TP","getNegativePredictiveValue","TN","getFalseNegativeRate","getFalsePositiveRate","getFalseDiscoveryRate","FP","getFalseOmissionRate","FN","getF1Score","getMatthewsCorrelationCoefficient","getInformedness","getMarkedness","getConfusionTable","getAccuracy","correct","incorrect","getCount","actualIndex","predictedIndex","N","twiddle","CV","initMatrix","getDistinct","validate","Classifier","classifierOptions","testIdx","trainIdx","confusionMatrix","distinct","testFeatures","trainFeatures","testLabels","trainLabels","getTrainTest","classifier","updateConfusionMatrix","validateWithCallback","predictedLabels","leaveOneOut","leavePOut","gen","combinations","allIdx","kFold","current","folds","randi","logistic","expELU","param","softExponential","softExponentialPrime","ACTIVATION_FUNCTIONS","activation","derivate","arctan","softsign","relu","softplus","bent","sinusoid","sinc","gaussian","Layer","inputSize","outputSize","regularization","epsilon","activationParam","selectedFunction","params","actFunction","derFunction","activationFunction","mlMatrix","forward","backpropagation","delta","dW","db","aCopy","update","OutputLayer","FeedForwardNeuralNetworks","hiddenLayers","learningRate","dicts","layers","keys","buildNetwork","dictOutputs","inputs","propagate","outputs","NodeSquare","weights","som","neighbors","adjustWeights","target","influence","getDistance","otherNode","getDistanceTorus","distX","distY","gridDim","getNeighbors","xy","torus","getPos","bestNeighbor","direction","simA","simB","getPosition","NodeHexagonal","hX","distZ","fields","randomizer","squareEuclidean","gridType","SOM","hasOwnProperty","numWeights","converters","getConverters","extractor","creator","nodeType","hx","distanceMethod","getMaxDistance","times","findBMU","adjust","iterationCount","startLearningRate","mapRadius","algorithmMethod","_initNodes","done","normalizers","denormalizers","getNormalizer","getDenormalizer","minMax","getRandomValue","zero","one","loadModel","eval","export","includeDistance","initNodes","setTraining","convertedSet","numIterations","timeConstant","trainOne","neighbourhoodRadius","trainingSetFactor","bmu","_findBestMatchingUnit","now2","radiusLimit","xMin","xMax","yMin","yMax","theX","theY","getConvertedNodes","candidate","lowest","computePosition","self","_predict","getQuantizationError","fit","getFit","maybeToPrecision","digits","checkArraySize","BaseRegression","toLaTeX","score","y2","xSum","ySum","chi2","rmsd","xSquared","ySquared","xY","PolynomialRegression","degree","powers","coefficients","checkArrayLength","regress","precision","_toFormula","isLaTeX","sup","closeSup","fn","str","charAt","json","pr","FT","SimpleLinearRegression","slope","intercept","computeX","xFactor","absIntercept","operator","slr","numerator","ExponentialRegression","er","yl","linear","PowerRegression","newInputs","latex","xl","MultivariateLinearRegression","statistics","xt","xx","invxx","beta","fittedValues","ri","reduce","stdError","stdErrorMatrix","stdErrors","tStats","summary","regressionStatistics","standardError","observations","variables","tStat","sigma","GaussianKernel","constant","PolynomialKernel","SigmoidKernel","ANOVAKernel","CauchyKernel","ExponentialKernel","HistogramIntersectionKernel","LaplacianKernel","MultiquadraticKernel","RationalQuadraticKernel","kernelType","rbf","polynomial","poly","anova","cauchy","histogram","HistogramKernel","laplacian","multiquadratic","rational","RationalKernel","sigmoid","mlp","Kernel","toLowerCase","KernelConstructor","kernelFunction","landmarks","kernelMatrix","TheilSenRegression","theilSen","slopes","medianSlope","cuts","RobustPolynomialRegression","robustPolynomial","_","tuples","getRandomTuples","calcCoefficients","residuals","residual","residualsMedian","counter","tuple","errorCalculation","parameters","parameterizedFunction","func","gradientFunction","evaluatedData","gradientDifference","paramFunction","auxParams","funcParam","matrixFunction","damping","gradientFunc","matrixFunc","inverseMatrix","levenbergMarquardt","errorTolerance","minValues","maxValues","initialValues","parLen","MAX_SAFE_INTEGER","MIN_SAFE_INTEGER","iteration","parameterValues","parameterError","haystack","needle","comparator","assertNumber","number","largestPrime","primeNumbers","nextPrime","binarySearch","ascending","FREE","FULL","REMOVED","defaultInitialCapacity","defaultMinLoadFactor","defaultMaxLoadFactor","HashTable","table","minLoadFactor","maxLoadFactor","freeEntries","lowWaterMark","highWaterMark","initialCapacity","capacity","chooseHighWaterMark","key","indexOfKey","indexOfInsertion","newCapacity","chooseGrowCapacity","rehash","remove","noRehash","maybeShrinkCapacity","delete","chooseShrinkCapacity","containsKey","hash","decrement","containsValue","indexOfValue","ensureCapacity","minCapacity","oldCapacity","oldTable","oldValues","oldState","newTable","newValues","newState","chooseLowWaterMark","forEachKey","forEachValue","forEachPair","minLoad","maxLoad","SparseMatrix","_init","elements","symmetric","forEachNonZero","bandWidth","isBanded","width","v1","v2","cardinality","getNonZeros","setThreshold","newThreshold","trans","inplaceOperator","inplaceOperatorScalar","inplaceOperatorMatrix","staticOperator","inplaceMethod","staticMethod","operators","fillTemplateFunction","op","methods","mathMethod","template","RegExp","additiveSymmetric","avg","bhattacharyya","canberra","chebyshev","clark","czekanowskiSimilarity","up","down","czekanowskiDistance","dice","q1","q2","divergence","fidelity","gower","harmonicMean","hellinger","innerProduct","intersection","jaccard","jeffreys","jensenDifference","jensenShannon","kdivergence","kulczynski","kullbackLeibler","kumarHassebrook","kumarJohnson","lorentzian","manhattan","matusita","minkowski","motyka","neyman","pearson","probabilisticSymmetric","ruzicka","soergel","sorensen","squared","squaredChord","taneja","tanimoto","bitvector","inter","union","tanimotoS","topsoe","waveHedges","createTree","spectrum","minWindow","to","mainCreateTree","start","getSimilarity","gamma","treeSimilarity","getFunction","cosine","diceD","intersectionD","jaccardD","kulczynskiD","motykaD","avgA","avgB","newA","newB","squaredChordD","pred","cutoffs","tn","tp","fp","nNeg","nPos","nPosPred","nNegPred","Performance","isDistance","predP","all","targ","currentPred","nTp","nFp","getMeasure","measure","measures","getAURC","auc","getAUDC","getDistribution","cutLength","cutLow","cutHigh","xLabels","interValues","intraValues","interCumPercent","intraCumPercent","nTP","currentTP","nFP","currentFP","thisTP","thisFP","names","acc","err","fpr","tpr","fnr","tnr","ppv","npv","pcfall","pcmiss","lift","rpp","rnp","arrayCase","cond","matrixCase","padArray","windowSize","derivative","pad","padValue","SavitzkyGolay","J","ones","inic","Jtranspose","det","eightBits","arr1","arr2","getBit","mask","setBit","toBinaryString","substr","parseBinaryString","toHexString","parseHexString","toDebug","binary","maxCount","_options$algorithm","algorithm","absoluteSum","_typeof","iterator","sequentialFill","_options","_options$from","_options$to","_options$size","_options$unbiased","_options$mean","sqrError","mergeByCentroids","originalPoints","mergedPoints","originalIndex","mergedIndex","closestX","descending","maxMerge","groupWidth","merged","maxAbscissa","maxY","calculateIndex","sortX","sortFunc","grouped","response","uniqueX","weightedMerge","weightedAbscissa","integral","x0","x1","equallySpacedSmooth","numberOfPoints","xLength","halfStep","initialOriginalStep","lastOriginalStep","previousX","previousY","nextX","nextY","currentValue","sumAtMin","sumAtMax","main","equallySpacedSlot","lastStep","frontOutsideSpectra","backOutsideSpectra","getZones","exclusions","exclusion","JSON","parse","stringify","toRemove","previous","unitsPerPoint","zones","currentFrom","totalPoints","currentNbPoints","equallySpaced","arrayXY","variant","xResult","yResult","zone","zoneResult","processZone","filterX","currentZoneIndex","newX","newY","position","MatrixLib","normed","ArrayXY","centroidsMerge"],"mappings":"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IAAIW,WAAW,4BAGnBugB,GAAOD,OAIXyM,GAAOyqB,EAAWF,EADlBtqB,EAAMzM,GAAOD,EAAOC,GAAO,IACMg3B,EAAQvqB,EAAKsqB,IAGrC,EACP/2B,EAAOyM,EAAM,MAGV,CAAA,KAAGD,EAAM,GAKZ,OAAOC,EAJP1M,EAAO0M,EAAM,SAQTzM,GCvCV,SAASk3B,aAAaC,MACC,iBAAXA,GAAuBzrC,OAAO+P,MAAM07B,SACxC,IAAIt4C,UAAU,qBAItB,cAAoB,CAACmmB,EAAMC,KAC1BiyB,aAAalyB,GACbkyB,aAAajyB,GACND,EAAOC,cAGM,CAACD,EAAMC,KAC3BiyB,aAAalyB,GACbkyB,aAAajyB,GACNA,EAAQD,kKCdT,MAAMoyB,aAAe,WAEtBC,aAAe,CAEnBD,aAGA,EACA,GACA,GACA,GACA,GACA,IACA,IACA,IACA,KACA,KACA,KACA,MACA,MACA,MACA,OACA,OACA,OACA,OACA,QACA,QACA,QACA,SACA,SACA,SACA,UACA,UACA,UACA,UACA,WAGA,IACA,IACA,KACA,KACA,KACA,MACA,MACA,MACA,OACA,OACA,OACA,OACA,QACA,QACA,QACA,SACA,SACA,SACA,UACA,UACA,UACA,UACA,WAGA,IACA,KACA,KACA,KACA,MACA,MACA,MACA,OACA,OACA,OACA,OACA,QACA,QACA,QACA,SACA,SACA,SACA,UACA,UACA,UACA,WACA,WAGA,KACA,KACA,KACA,KACA,MACA,MACA,MACA,OACA,OACA,OACA,QACA,QACA,QACA,QACA,SACA,SACA,SACA,UACA,UACA,UACA,WAGA,GACA,GACA,IACA,IACA,IACA,KACA,KACA,KACA,KACA,MACA,MACA,MACA,OACA,OACA,OACA,QACA,QACA,QACA,QACA,SACA,SACA,SACA,UACA,UACA,UACA,WAGA,IACA,KACA,KACA,KACA,KACA,MACA,MACA,MACA,OACA,OACA,OACA,QACA,QACA,QACA,QACA,SACA,SACA,SACA,UACA,UACA,UACA,WAGA,IACA,IACA,KACA,KACA,KACA,MACA,MACA,MACA,MACA,OACA,OACA,OACA,QACA,QACA,QACA,SACA,SACA,SACA,SACA,UACA,UACA,UACA,WAGA,EACA,EACA,GACA,GACA,GACA,IACA,IACA,IACA,KACA,KACA,KACA,MACA,MACA,MACA,MACA,OACA,OACA,OACA,QACA,QACA,QACA,SACA,SACA,SACA,SACA,UACA,UACA,UACA,WAGA,GACA,GACA,IACA,IACA,IACA,KACA,KACA,KACA,MACA,MACA,MACA,MACA,OACA,OACA,OACA,QACA,QACA,QACA,SACA,SACA,SACA,SACA,UACA,UACA,UACA,WAGA,IACA,IACA,KACA,KACA,KACA,MACA,MACA,MACA,MACA,OACA,OACA,OACA,QACA,QACA,QACA,SACA,SACA,SACA,UACA,UACA,UACA,UACA,WAGA,GACA,GACA,GACA,IACA,IACA,IACA,KACA,KACA,KACA,KACA,MACA,MACA,MACA,OACA,OACA,OACA,QACA,QACA,QACA,QACA,SACA,SACA,SACA,UACA,UACA,UACA,WAGA,GACA,GACA,GACA,IACA,IACA,IACA,KACA,KACA,KACA,MACA,MACA,MACA,MACA,OACA,OACA,OACA,QACA,QACA,QACA,SACA,SACA,SACA,SACA,UACA,UACA,UACA,WAGA,GACA,IACA,IACA,IACA,IACA,KACA,KACA,KACA,MACA,MACA,MACA,OACA,OACA,OACA,OACA,QACA,QACA,QACA,SACA,SACA,SACA,UACA,UACA,UACA,UACA,YAKK,SAASE,UAAUz1C,OACpB3B,EAAQq3C,aAAaF,aAAcx1C,EAAO21C,kBAC1Ct3C,EAAQ,IACVA,GAASA,GAEJm3C,aAAan3C,GAPtBm3C,aAAaxhC,KAAK2hC,WCtWlB,MAAMC,KAAO,EACPC,KAAO,EACPC,QAAU,EAEVC,uBAAyB,IACzBC,qBAAuB,EAAI,EAC3BC,qBAAuB,EAAI,EAElB,MAAMC,UACnBrzC,kBAAYvF,yDAAU,MAChBA,aAAmB44C,sBAChBC,MAAQ74C,EAAQ64C,MAAM5uB,aACtBb,OAASppB,EAAQopB,OAAOa,aACxBkL,MAAQn1B,EAAQm1B,MAAMlL,aACtB6uB,cAAgB94C,EAAQ84C,mBACxBC,cAAgB/4C,EAAQ+4C,mBACxB1T,SAAWrlC,EAAQqlC,cACnB2T,YAAch5C,EAAQg5C,iBACtBC,aAAej5C,EAAQi5C,uBACvBC,cAAgBl5C,EAAQ+4C,qBAIzBI,OACwBj5C,IAA5BF,EAAQm5C,gBACJV,uBACAz4C,EAAQm5C,mBACVA,EAAkB,QACd,IAAI74C,kEACwC64C,UAI9CL,OACsB54C,IAA1BF,EAAQ84C,cACJJ,qBACA14C,EAAQ84C,cACRC,OACsB74C,IAA1BF,EAAQ+4C,cACJJ,qBACA34C,EAAQ+4C,iBACVD,EAAgB,GAAKA,GAAiB,QAClC,IAAIx4C,4CAAqCw4C,OAE7CC,GAAiB,GAAKA,GAAiB,QACnC,IAAIz4C,4CAAqCy4C,OAE7CD,GAAiBC,QACb,IAAIz4C,oCACUw4C,mDAAsDC,YAIxEK,EAAWD,EAME,KADjBC,EAAWjB,UADXiB,EAAYA,EAAWL,EAAiB,MAEpBK,EAAW,QAE1BP,MAAQp2C,WAAS22C,QACjBhwB,OAAS3mB,WAAS22C,QAClBjkB,MAAQ1yB,WAAS22C,QAEjBN,cAAgBA,OAEdC,cADHK,IAAanB,aACM,EAEAc,OAGlB1T,SAAW,OACX2T,YAAcI,OAEdH,aAAe,OACfC,cAAgBG,oBAAoBD,EAAU9zC,KAAKyzC,eAG1D9qC,eACS,IAAI2qC,UAAUtzC,wBAIdA,KAAK+/B,SAGdpiC,IAAIq2C,SACI15C,EAAI0F,KAAKi0C,WAAWD,UACtB15C,EAAI,EAAU,EACX0F,KAAK8jB,OAAOxpB,GAGrBwE,IAAIk1C,EAAK52C,OACH9C,EAAI0F,KAAKk0C,iBAAiBF,MAC1B15C,EAAI,SACNA,GAAKA,EAAI,OACJwpB,OAAOxpB,GAAK8C,GACV,KAGL4C,KAAK+/B,SAAW//B,KAAK4zC,cAAe,OAChCO,EAAcC,mBAClBp0C,KAAK+/B,SAAW,EAChB//B,KAAKwzC,cACLxzC,KAAKyzC,2BAEFY,OAAOF,GACLn0C,KAAKlB,IAAIk1C,EAAK52C,WAGlBm2C,MAAMj5C,GAAK05C,OACXlwB,OAAOxpB,GAAK8C,EACb4C,KAAK6vB,MAAMv1B,KAAO04C,MAAMhzC,KAAK0zC,mBAC5B7jB,MAAMv1B,GAAK24C,UACXlT,WAED//B,KAAK0zC,YAAc,EAAG,OAClBS,EAAcC,mBAClBp0C,KAAK+/B,SAAW,EAChB//B,KAAKwzC,cACLxzC,KAAKyzC,oBAEFY,OAAOF,UAGP,EAGTG,OAAON,EAAKO,SACJj6C,EAAI0F,KAAKi0C,WAAWD,WACtB15C,EAAI,UAEHu1B,MAAMv1B,GAAK44C,aACXnT,WAEAwU,GAAUv0C,KAAKw0C,uBAEb,GAGTC,OAAOT,EAAKO,SACJj6C,EAAI0F,KAAKi0C,WAAWD,WACtB15C,EAAI,UAEHu1B,MAAMv1B,GAAK04C,UACXjT,WAEAwU,GAAUv0C,KAAKw0C,uBAEb,GAGTA,yBACMx0C,KAAK+/B,SAAW//B,KAAK2zC,aAAc,OAC/BQ,EAAcO,qBAClB10C,KAAK+/B,SACL//B,KAAKwzC,cACLxzC,KAAKyzC,oBAEFY,OAAOF,IAIhBQ,YAAYX,UACHh0C,KAAKi0C,WAAWD,IAAQ,EAGjCC,WAAWD,SACHT,EAAQvzC,KAAKuzC,MACb1jB,EAAQ7vB,KAAK6vB,MACbx1B,EAAS2F,KAAKuzC,MAAMl5C,OAEpBu6C,EAAa,WAANZ,MACT15C,EAAIs6C,EAAOv6C,EACXw6C,EAAYD,GAAQv6C,EAAS,OACf,IAAdw6C,IAAiBA,EAAY,GAE1BhlB,EAAMv1B,KAAO04C,OAASnjB,EAAMv1B,KAAO44C,SAAWK,EAAMj5C,KAAO05C,KAChE15C,GAAKu6C,GACG,IAAGv6C,GAAKD,UAGdw1B,EAAMv1B,KAAO04C,MAAc,EACxB14C,EAGTw6C,cAAc13C,UACL4C,KAAK+0C,aAAa33C,IAAU,EAGrC23C,aAAa33C,SACL0mB,EAAS9jB,KAAK8jB,OACd+L,EAAQ7vB,KAAK6vB,UAEd,IAAIv1B,EAAI,EAAGA,EAAIu1B,EAAMx1B,OAAQC,OAC5Bu1B,EAAMv1B,KAAO24C,MAAQnvB,EAAOxpB,KAAO8C,SAC9B9C,SAIH,EAGV45C,iBAAiBF,SACTT,EAAQvzC,KAAKuzC,MACb1jB,EAAQ7vB,KAAK6vB,MACbx1B,EAASk5C,EAAMl5C,OAEfu6C,EAAa,WAANZ,MACT15C,EAAIs6C,EAAOv6C,EACXw6C,EAAYD,GAAQv6C,EAAS,OACf,IAAdw6C,IAAiBA,EAAY,GAE1BhlB,EAAMv1B,KAAO24C,MAAQM,EAAMj5C,KAAO05C,IACvC15C,GAAKu6C,GACG,IAAGv6C,GAAKD,MAGdw1B,EAAMv1B,KAAO44C,QAAS,OAClBx1C,EAAIpD,OACHu1B,EAAMv1B,KAAO04C,OAASnjB,EAAMv1B,KAAO44C,SAAWK,EAAMj5C,KAAO05C,KAChE15C,GAAKu6C,GACG,IAAGv6C,GAAKD,GAEdw1B,EAAMv1B,KAAO04C,OAAM14C,EAAIoD,UAGzBmyB,EAAMv1B,KAAO24C,MACP34C,EAAI,EAGPA,EAGT06C,eAAeC,MACTj1C,KAAKuzC,MAAMl5C,OAAS46C,EAAa,OAC7Bd,EAActB,UAAUoC,QACzBZ,OAAOF,IAIhBE,OAAOF,SACCe,EAAcl1C,KAAKuzC,MAAMl5C,UAE3B85C,GAAen0C,KAAK+/B,SAAU,MAAM,IAAIz2B,MAAM,oBAE5C6rC,EAAWn1C,KAAKuzC,MAChB6B,EAAYp1C,KAAK8jB,OACjBuxB,EAAWr1C,KAAK6vB,MAEhBylB,EAAWn4C,WAASg3C,GACpBoB,EAAYp4C,WAASg3C,GACrBqB,EAAWr4C,WAASg3C,QAErBR,aAAe8B,mBAAmBtB,EAAan0C,KAAKwzC,oBACpDI,cAAgBG,oBAAoBI,EAAan0C,KAAKyzC,oBAEtDF,MAAQ+B,OACRxxB,OAASyxB,OACT1lB,MAAQ2lB,OACR9B,YAAcS,EAAcn0C,KAAK+/B,aAEjC,IAAIzlC,EAAI,EAAGA,EAAI46C,EAAa56C,OAC3B+6C,EAAS/6C,KAAO24C,KAAM,KACpBrc,EAAUue,EAAS76C,GACnBmB,EAAQuE,KAAKk0C,iBAAiBtd,GAClC0e,EAAS75C,GAASm7B,EAClB2e,EAAU95C,GAAS25C,EAAU96C,GAC7Bk7C,EAAS/5C,GAASw3C,MAKxByC,WAAW9tC,OACJ,IAAItN,EAAI,EAAGA,EAAI0F,KAAK6vB,MAAMx1B,OAAQC,OACjC0F,KAAK6vB,MAAMv1B,KAAO24C,OACfrrC,EAAS5H,KAAKuzC,MAAMj5C,IAAK,OAAO,SAGlC,EAGTq7C,aAAa/tC,OACN,IAAItN,EAAI,EAAGA,EAAI0F,KAAK6vB,MAAMx1B,OAAQC,OACjC0F,KAAK6vB,MAAMv1B,KAAO24C,OACfrrC,EAAS5H,KAAK8jB,OAAOxpB,IAAK,OAAO,SAGnC,EAGTs7C,YAAYhuC,OACL,IAAItN,EAAI,EAAGA,EAAI0F,KAAK6vB,MAAMx1B,OAAQC,OACjC0F,KAAK6vB,MAAMv1B,KAAO24C,OACfrrC,EAAS5H,KAAKuzC,MAAMj5C,GAAI0F,KAAK8jB,OAAOxpB,IAAK,OAAO,SAGlD,GAIX,SAASm7C,mBAAmB3B,EAAU+B,UAC5B/B,EAAW+B,EAAW,EAGhC,SAAS9B,oBAAoBD,EAAUgC,UAC9B32C,KAAK5E,IAAIu5C,EAAW,EAAIA,EAAWgC,EAAW,GAGvD,SAAS1B,mBAAmBx1C,EAAMi3C,EAASC,UAClCjD,UACL1zC,KAAKlF,IAAI2E,EAAO,EAAK,EAAIA,GAAS,EAAIi3C,EAAUC,GAAY,IAIhE,SAASpB,qBAAqB91C,EAAMi3C,EAASC,UACpCjD,UACL1zC,KAAKlF,IAAI2E,EAAO,EAAK,EAAIA,GAASi3C,EAAU,EAAIC,GAAY,IAIhE,SAAS34C,WAASyB,UACT/D,MAAM+D,GAAMmI,KAAK,SCnUbgvC,aACX91C,YAAYtE,EAAME,OAASnB,yDAAU,MAC/BiB,aAAgBo6C,oBAEZ5pC,EAAQxQ,OACTq6C,MACH7pC,EAAMxQ,KACNwQ,EAAMtQ,QACNsQ,EAAM8pC,SAASttC,QACfwD,EAAM0L,mBAKNhd,MAAMV,QAAQwB,GAAO,OACjBH,EAASG,EACfA,EAAOH,EAAOnB,OACdK,EAAUmB,GAAW,GACrBA,EAAUL,EAAO,GAAGnB,YACf27C,MAAMr6C,EAAME,EAAS,IAAIy3C,UAAU54C,GAAUA,EAAQmd,eACrD,IAAIvd,EAAI,EAAGA,EAAIqB,EAAMrB,QACnB,IAAIoD,EAAI,EAAGA,EAAI7B,EAAS6B,IAAK,KAC5BN,EAAQ5B,EAAOlB,GAAGoD,GAClBsC,KAAK6X,WAAa1Y,KAAK0F,IAAIzH,GAAS4C,KAAK6X,YAAWza,EAAQ,GAClD,IAAVA,QACG64C,SAASn3C,IAAIxE,EAAIuB,EAAU6B,EAAGlC,EAAOlB,GAAGoD,eAK9Cs4C,MAAMr6C,EAAME,EAAS,IAAIy3C,UAAU54C,GAAUA,EAAQmd,WAI9Dm+B,MAAMr6C,EAAME,EAASo6C,EAAUp+B,QACxBlc,KAAOA,OACPE,QAAUA,OACVo6C,SAAWA,OACXp+B,UAAYA,GAAa,mBAGrBlc,yDAAO,EAAGE,yDAAUF,QACvBpB,EAAM4E,KAAK5E,IAAIoB,EAAME,GACrBL,EAAS,IAAIu6C,aAAap6C,EAAME,EAAS,CAAEg4C,gBAAiBt5C,QAC7D,IAAID,EAAI,EAAGA,EAAIC,EAAKD,IACvBkB,EAAOsD,IAAIxE,EAAGA,EAAG,UAEZkB,EAGTmN,eACS,IAAIotC,aAAa/1C,MAG1B6H,kBACQC,EAAO,IAAIjN,MAAMmF,KAAKrE,UACvB,IAAIrB,EAAI,EAAGA,EAAI0F,KAAKrE,KAAMrB,IAAK,CAClCwN,EAAKxN,GAAK,IAAIO,MAAMmF,KAAKnE,aACpB,IAAI6B,EAAI,EAAGA,EAAIsC,KAAKnE,QAAS6B,IAChCoK,EAAKxN,GAAGoD,GAAKsC,KAAKrC,IAAIrD,EAAGoD,UAGtBoK,EAGTK,kBACSnI,KAAKrE,OAASqE,KAAKnE,QAG5BuM,kBACOpI,KAAKmI,WAAY,OAAO,MAEzB+tC,GAAY,cACXC,eAAe,CAAC77C,EAAGoD,EAAGI,IACrBkC,KAAKrC,IAAID,EAAGpD,KAAOwD,GACrBo4C,GAAY,GACL,GAEFp4C,GAEFo4C,EAOTE,gBACM77C,EAAMyF,KAAKnE,QACX5B,GAAO,cACNk8C,eAAe,CAAC77C,EAAGoD,EAAGI,SACrB2uB,EAAOnyB,EAAIoD,SACfnD,EAAM4E,KAAK5E,IAAIA,EAAKkyB,GACpBxyB,EAAMkF,KAAKlF,IAAIA,EAAKwyB,GACb3uB,IAEF7D,EAAMM,EAQf87C,SAASC,UACSt2C,KAAKo2C,aACDE,2BAIbt2C,KAAKi2C,SAASr3C,uBAIdoB,KAAKrE,KAAOqE,KAAKnE,QAG1B8B,IAAItB,EAAKE,UACAyD,KAAKi2C,SAASt4C,IAAItB,EAAM2D,KAAKnE,QAAUU,GAGhDuC,IAAIzC,EAAKE,EAAQa,UACX4C,KAAK6X,WAAa1Y,KAAK0F,IAAIzH,GAAS4C,KAAK6X,YAAWza,EAAQ,GAClD,IAAVA,OACG64C,SAAS3B,OAAOj4C,EAAM2D,KAAKnE,QAAUU,QAErC05C,SAASn3C,IAAIzC,EAAM2D,KAAKnE,QAAUU,EAAQa,GAE1C4C,KAGTkM,KAAKC,GACCnM,KAAKnE,UAAYsQ,EAAMxQ,MAEzBkU,QAAQC,KACN,2FAIE7G,EAAIjJ,KAAKrE,KACTyN,EAAI+C,EAAMtQ,QAEV2E,EAAS,IAAIu1C,aAAa9sC,EAAGG,eAC9B+sC,eAAe,CAAC77C,EAAGoD,EAAG64C,KACzBpqC,EAAMgqC,eAAe,CAAC1tC,EAAGnB,EAAGkvC,KACtB94C,IAAM+K,GACRjI,EAAO1B,IAAIxE,EAAGgN,EAAG9G,EAAO7C,IAAIrD,EAAGgN,GAAKivC,EAAKC,GAEpCA,IAEFD,IAEF/1C,EAGTsQ,iBAAiB3E,SACTlD,EAAIjJ,KAAKrE,KACTuN,EAAIlJ,KAAKnE,QACTuN,EAAI+C,EAAMxQ,KACVoV,EAAI5E,EAAMtQ,QAEV2E,EAAS,IAAIu1C,aAAa9sC,EAAIG,EAAGF,EAAI6H,EAAG,CAC5C8iC,gBAAiB7zC,KAAKy2C,YAActqC,EAAMsqC,0BAEvCN,eAAe,CAAC77C,EAAGoD,EAAG64C,KACzBpqC,EAAMgqC,eAAe,CAAC1tC,EAAGnB,EAAGkvC,KAC1Bh2C,EAAO1B,IAAIsK,EAAI9O,EAAImO,EAAGsI,EAAIrT,EAAI4J,EAAGivC,EAAKC,GAC/BA,IAEFD,IAEF/1C,EAGT21C,eAAevuC,eACRquC,SAASL,YAAY,CAAC5B,EAAK52C,WACxB9C,EAAK05C,EAAMh0C,KAAKnE,QAAW,EAC3B6B,EAAIs2C,EAAMh0C,KAAKnE,YACjBa,EAAIkL,EAAStN,EAAGoD,EAAGN,UACb,IAANV,IACAsD,KAAK6X,WAAa1Y,KAAK0F,IAAInI,GAAKsD,KAAK6X,YAAWnb,EAAI,GACpDA,IAAMU,IACE,IAANV,OACGu5C,SAAS3B,OAAON,GAAK,QAErBiC,SAASn3C,IAAIk1C,EAAKt3C,KAGpB,UAEJu5C,SAASzB,sBACPx0C,KAGT02C,oBACQD,EAAcz2C,KAAKy2C,YACnB96C,EAAO,IAAId,MAAM47C,GACjB56C,EAAU,IAAIhB,MAAM47C,GACpB3yB,EAAS,IAAIjpB,MAAM47C,OACrBvrC,EAAM,cACLirC,eAAe,CAAC77C,EAAGoD,EAAGN,KACzBzB,EAAKuP,GAAO5Q,EACZuB,EAAQqP,GAAOxN,EACfomB,EAAO5Y,GAAO9N,EACd8N,IACO9N,IAEF,CAAEzB,KAAAA,EAAME,QAAAA,EAASioB,OAAAA,GAG1B6yB,aAAaC,UACU,IAAjBA,GAAsBA,IAAiB52C,KAAK6X,iBACzCA,UAAY++B,OACZT,eAAe,CAAC77C,EAAGoD,EAAGI,IAAMA,IAE5BkC,KAMTgR,gBACM6lC,EAAQ,IAAId,aAAa/1C,KAAKnE,QAASmE,KAAKrE,KAAM,CACpDk4C,gBAAiB7zC,KAAKy2C,0BAEnBN,eAAe,CAAC77C,EAAGoD,EAAGN,KACzBy5C,EAAM/3C,IAAIpB,EAAGpD,EAAG8C,GACTA,IAEFy5C,GAIXd,aAAan8C,UAAU8N,MAAQ,SAE/BquC,aAAaxjC,SAAWwjC,aAAavjC,IACrCujC,aAAan8C,UAAU8Y,cAAgBqjC,aAAan8C,UAAUkX,iBAM9D,IAAIgmC,qJAOAC,kIAOAC,oMAUAC,+IAOAC,mHAOAC,iIAOJ,MAAMC,UAAY,CAEhB,CAAC,IAAK,OACN,CAAC,IAAK,MAAO,YACb,CAAC,IAAK,MAAO,YACb,CAAC,IAAK,MAAO,UACb,CAAC,IAAK,MAAO,WAEb,CAAC,IAAK,OACN,CAAC,IAAK,MACN,CAAC,IAAK,OACN,CAAC,KAAM,aACP,CAAC,KAAM,6BACP,CAAC,MAAO,aAAc,uBAGxB,IAAK,MAAMtL,YAAYsL,cAChB,IAAI98C,EAAI,EAAGA,EAAIwxC,SAASzxC,OAAQC,IACnCy7C,aAAan8C,UAAUkyC,SAASxxC,IAAMqtC,KACpC0P,qBAAqBP,gBAAiB,CACpCv5C,KAAMuuC,SAASxxC,GACfg9C,GAAIxL,SAAS,MAGjBiK,aAAan8C,oBAAakyC,SAASxxC,SAASqtC,KAC1C0P,qBAAqBN,sBAAuB,CAC1Cx5C,eAASuuC,SAASxxC,QAClBg9C,GAAIxL,SAAS,MAGjBiK,aAAan8C,oBAAakyC,SAASxxC,SAASqtC,KAC1C0P,qBAAqBL,sBAAuB,CAC1Cz5C,eAASuuC,SAASxxC,QAClBg9C,GAAIxL,SAAS,MAIjBiK,aAAajK,SAASxxC,IAAMqtC,KAC1B0P,qBAAqBJ,eAAgB,CAAE15C,KAAMuuC,SAASxxC,MAK5D,IAAIi9C,QAAU,CAAC,CAAC,IAAK,QAErB,CACE,MACA,OACA,QACA,OACA,QACA,OACA,QACA,OACA,OACA,QACA,MACA,OACA,MACA,QACA,QACA,SACA,MACA,QACA,QACA,OACA,QACA,OACA,MACA,OACA,OACA,MACA,OACA,SACA7sB,QAAQ,SAAU8sB,GAClBD,QAAQj6C,KAAK,gBAASk6C,GAAcA,MAGtC,IAAK,MAAM3rB,UAAU0rB,YACd,IAAIj9C,EAAI,EAAGA,EAAIuxB,OAAOxxB,OAAQC,IACjCy7C,aAAan8C,UAAUiyB,OAAOvxB,IAAMqtC,KAClC0P,qBAAqBH,cAAe,CAClC35C,KAAMsuB,OAAOvxB,GACbuxB,OAAQA,OAAO,MAGnBkqB,aAAalqB,OAAOvxB,IAAMqtC,KACxB0P,qBAAqBF,aAAc,CAAE55C,KAAMsuB,OAAOvxB,MAKxD,SAAS+8C,qBAAqBI,EAAU3zB,OACjC,MAAMxpB,KAAKwpB,EACd2zB,EAAWA,EAASnuB,QAAQ,IAAIouB,kBAAWp9C,OAAM,KAAMwpB,EAAOxpB,WAEzDm9C,ECjYM,SAASE,kBAAkB3nC,EAAGC,WACvC3V,EAAI,EACJoe,EAAK1I,EAAE3V,OACPogB,EAAI,EACDngB,EAAIoe,EAAIpe,IACbmgB,IAAOzK,EAAE1V,GAAK2V,EAAE3V,KAAO0V,EAAE1V,GAAK2V,EAAE3V,KAAO0V,EAAE1V,GAAK2V,EAAE3V,KAAQ0V,EAAE1V,GAAK2V,EAAE3V,WAE5D,EAAImgB,ECPE,SAASm9B,IAAI5nC,EAAGC,WACzByI,EAAK1I,EAAE3V,OACPJ,EAAM,EACNswB,EAAM,EACNvU,EAAM,EACD1b,EAAI,EAAGA,EAAIoe,EAAIpe,IAEtBiwB,GADAvU,EAAM7W,KAAK0F,IAAImL,EAAE1V,GAAK2V,EAAE3V,IAEpBL,EAAM+b,IACR/b,EAAM+b,UAGF/b,EAAMswB,GAAO,ECZR,SAASstB,cAAc7nC,EAAGC,WACnCyI,EAAK1I,EAAE3V,OACPkwB,EAAM,EACDjwB,EAAI,EAAGA,EAAIoe,EAAIpe,IACtBiwB,GAAOprB,KAAKE,KAAK2Q,EAAE1V,GAAK2V,EAAE3V,WAEpB6E,KAAK0G,IAAI0kB,GCNJ,SAASutB,SAAS9nC,EAAGC,WAC9ByI,EAAK1I,EAAE3V,OACPkwB,EAAM,EACDjwB,EAAI,EAAGA,EAAIoe,EAAIpe,IACtBiwB,GAAOprB,KAAK0F,IAAImL,EAAE1V,GAAK2V,EAAE3V,KAAO0V,EAAE1V,GAAK2V,EAAE3V,WAEpCiwB,ECNM,SAASwtB,UAAU/nC,EAAGC,WAC/ByI,EAAK1I,EAAE3V,OACPJ,EAAM,EACN+b,EAAM,EACD1b,EAAI,EAAGA,EAAIoe,EAAIpe,IAElBL,GADJ+b,EAAM7W,KAAK0F,IAAImL,EAAE1V,GAAK2V,EAAE3V,OAEtBL,EAAM+b,UAGH/b,ECVM,SAAS+9C,MAAMhoC,EAAGC,WAC3B3V,EAAI,EACJoe,EAAK1I,EAAE3V,OACPogB,EAAI,EACDngB,EAAIoe,EAAIpe,IACbmgB,GAAKtb,KAAKE,MACN2Q,EAAE1V,GAAK2V,EAAE3V,KAAO0V,EAAE1V,GAAK2V,EAAE3V,MAAS0V,EAAE1V,GAAK2V,EAAE3V,KAAO0V,EAAE1V,GAAK2V,EAAE3V,aAG1D,EAAImgB,ECTE,SAASw9B,sBAAsBjoC,EAAGC,WAC3CioC,EAAK,EACLC,EAAO,EACF79C,EAAI,EAAGA,EAAI0V,EAAE3V,OAAQC,IAC5B49C,GAAM/4C,KAAK5E,IAAIyV,EAAE1V,GAAI2V,EAAE3V,IACvB69C,GAAQnoC,EAAE1V,GAAK2V,EAAE3V,UAEX,EAAI49C,EAAMC,ECLL,SAASC,oBAAoBpoC,EAAGC,UACtC,EAAIgoC,sBAAsBjoC,EAAGC,GCHvB,SAASooC,KAAKroC,EAAGC,WAC1ByI,EAAK1I,EAAE3V,OACP+O,EAAI,EACJkvC,EAAK,EACLC,EAAK,EACAj+C,EAAI,EAAGA,EAAIoe,EAAIpe,IACtB8O,GAAK4G,EAAE1V,GAAK0V,EAAE1V,GACdg+C,GAAMroC,EAAE3V,GAAK2V,EAAE3V,GACfi+C,IAAOvoC,EAAE1V,GAAK2V,EAAE3V,KAAO0V,EAAE1V,GAAK2V,EAAE3V,WAE3Bi+C,GAAMnvC,EAAIkvC,GCVJ,SAASE,WAAWxoC,EAAGC,WAChC3V,EAAI,EACJoe,EAAK1I,EAAE3V,OACPogB,EAAI,EACDngB,EAAIoe,EAAIpe,IACbmgB,IAAOzK,EAAE1V,GAAK2V,EAAE3V,KAAO0V,EAAE1V,GAAK2V,EAAE3V,MAAS0V,EAAE1V,GAAK2V,EAAE3V,KAAO0V,EAAE1V,GAAK2V,EAAE3V,YAE7D,EAAImgB,ECPE,SAASg+B,SAASzoC,EAAGC,WAC9ByI,EAAK1I,EAAE3V,OACPkwB,EAAM,EACDjwB,EAAI,EAAGA,EAAIoe,EAAIpe,IACtBiwB,GAAOprB,KAAKE,KAAK2Q,EAAE1V,GAAK2V,EAAE3V,WAErBiwB,ECNM,SAASmuB,MAAM1oC,EAAGC,WAC3ByI,EAAK1I,EAAE3V,OACPkwB,EAAM,EACDjwB,EAAI,EAAGA,EAAIoe,EAAIpe,IACtBiwB,GAAOprB,KAAK0F,IAAImL,EAAE1V,GAAK2V,EAAE3V,WAEpBiwB,EAAM7R,ECNA,SAASigC,aAAa3oC,EAAGC,WAClCyI,EAAK1I,EAAE3V,OACPkwB,EAAM,EACDjwB,EAAI,EAAGA,EAAIoe,EAAIpe,IACtBiwB,GAAQva,EAAE1V,GAAK2V,EAAE3V,IAAO0V,EAAE1V,GAAK2V,EAAE3V,WAE5B,EAAIiwB,ECNE,SAASquB,UAAU5oC,EAAGC,WAC/ByI,EAAK1I,EAAE3V,OACPkwB,EAAM,EACDjwB,EAAI,EAAGA,EAAIoe,EAAIpe,IACtBiwB,GAAOprB,KAAKE,KAAK2Q,EAAE1V,GAAK2V,EAAE3V,WAErB,EAAI6E,KAAKE,KAAK,EAAIkrB,GCNZ,SAASsuB,aAAa7oC,EAAGC,WAClCyI,EAAK1I,EAAE3V,OACPkwB,EAAM,EACDjwB,EAAI,EAAGA,EAAIoe,EAAIpe,IACtBiwB,GAAOva,EAAE1V,GAAK2V,EAAE3V,UAEXiwB,ECNM,SAASuuB,aAAa9oC,EAAGC,WAClCyI,EAAK1I,EAAE3V,OACPkwB,EAAM,EACDjwB,EAAI,EAAGA,EAAIoe,EAAIpe,IACtBiwB,GAAOprB,KAAK5E,IAAIyV,EAAE1V,GAAI2V,EAAE3V,WAEnB,EAAIiwB,ECNE,SAASwuB,QAAQ/oC,EAAGC,WAC7ByI,EAAK1I,EAAE3V,OACPgiC,EAAK,EACLC,EAAK,EACLgc,EAAK,EACLC,EAAK,EACAj+C,EAAI,EAAGA,EAAIoe,EAAIpe,IACtB+hC,GAAMrsB,EAAE1V,GAAK2V,EAAE3V,GACfgiC,GAAMtsB,EAAE1V,GAAK0V,EAAE1V,GACfg+C,GAAMroC,EAAE3V,GAAK2V,EAAE3V,GACfi+C,IAAOvoC,EAAE1V,GAAK2V,EAAE3V,KAAO0V,EAAE1V,GAAK2V,EAAE3V,WAE3Bi+C,GAAMjc,EAAKgc,EAAKjc,GCZV,SAAS2c,SAAShpC,EAAGC,WAC9ByI,EAAK1I,EAAE3V,OACPkwB,EAAM,EACDjwB,EAAI,EAAGA,EAAIoe,EAAIpe,IACtBiwB,IAAQva,EAAE1V,GAAK2V,EAAE3V,IAAM6E,KAAK0G,IAAImK,EAAE1V,GAAK2V,EAAE3V,WAEpCiwB,ECNM,SAAS0uB,iBAAiBjpC,EAAGC,WACtCyI,EAAK1I,EAAE3V,OACPkwB,EAAM,EACDjwB,EAAI,EAAGA,EAAIoe,EAAIpe,IACtBiwB,IACGva,EAAE1V,GAAK6E,KAAK0G,IAAImK,EAAE1V,IAAM2V,EAAE3V,GAAK6E,KAAK0G,IAAIoK,EAAE3V,KAAO,GAChD0V,EAAE1V,GAAK2V,EAAE3V,IAAM,EAAK6E,KAAK0G,KAAKmK,EAAE1V,GAAK2V,EAAE3V,IAAM,UAE5CiwB,ECRM,SAAS2uB,cAAclpC,EAAGC,WACnCyI,EAAK1I,EAAE3V,OACP+O,EAAI,EACJ2H,EAAI,EACCzW,EAAI,EAAGA,EAAIoe,EAAIpe,IACtB8O,GAAK4G,EAAE1V,GAAK6E,KAAK0G,IAAK,EAAImK,EAAE1V,IAAO0V,EAAE1V,GAAK2V,EAAE3V,KAC5CyW,GAAKd,EAAE3V,GAAK6E,KAAK0G,IAAK,EAAIoK,EAAE3V,IAAO0V,EAAE1V,GAAK2V,EAAE3V,YAEtC8O,EAAI2H,GAAK,ECRJ,SAASooC,YAAYnpC,EAAGC,WACjCyI,EAAK1I,EAAE3V,OACPkwB,EAAM,EACDjwB,EAAI,EAAGA,EAAIoe,EAAIpe,IACtBiwB,GAAOva,EAAE1V,GAAK6E,KAAK0G,IAAK,EAAImK,EAAE1V,IAAO0V,EAAE1V,GAAK2V,EAAE3V,YAEzCiwB,ECNM,SAAS6uB,WAAWppC,EAAGC,WAChCyI,EAAK1I,EAAE3V,OACP69C,EAAK,EACLC,EAAO,EACF79C,EAAI,EAAGA,EAAIoe,EAAIpe,IACtB49C,GAAM/4C,KAAK0F,IAAImL,EAAE1V,GAAK2V,EAAE3V,IACxB69C,GAAQh5C,KAAK5E,IAAIyV,EAAE1V,GAAI2V,EAAE3V,WAEpB49C,EAAKC,ECRC,SAASkB,gBAAgBrpC,EAAGC,WACrCyI,EAAK1I,EAAE3V,OACPkwB,EAAM,EACDjwB,EAAI,EAAGA,EAAIoe,EAAIpe,IACtBiwB,GAAOva,EAAE1V,GAAK6E,KAAK0G,IAAImK,EAAE1V,GAAK2V,EAAE3V,WAE3BiwB,ECNM,SAAS+uB,gBAAgBtpC,EAAGC,WACrCyI,EAAK1I,EAAE3V,OACP+O,EAAI,EACJkzB,EAAK,EACLic,EAAK,EACAj+C,EAAI,EAAGA,EAAIoe,EAAIpe,IACtB8O,GAAK4G,EAAE1V,GAAK2V,EAAE3V,GACdgiC,GAAMtsB,EAAE1V,GAAK0V,EAAE1V,GACfi+C,GAAMtoC,EAAE3V,GAAK2V,EAAE3V,UAEV8O,GAAKkzB,EAAKic,EAAKnvC,GCVT,SAASmwC,aAAavpC,EAAGC,WAClCyI,EAAK1I,EAAE3V,OACPkwB,EAAM,EACDjwB,EAAI,EAAGA,EAAIoe,EAAIpe,IACtBiwB,GACEprB,KAAKC,IAAI4Q,EAAE1V,GAAK0V,EAAE1V,GAAK2V,EAAE3V,GAAK2V,EAAE3V,GAAI,IAAM,EAAI6E,KAAKC,IAAI4Q,EAAE1V,GAAK2V,EAAE3V,GAAI,aAEjEiwB,ECPM,SAASivB,WAAWxpC,EAAGC,WAChCyI,EAAK1I,EAAE3V,OACPkwB,EAAM,EACDjwB,EAAI,EAAGA,EAAIoe,EAAIpe,IACtBiwB,GAAOprB,KAAK0G,IAAI1G,KAAK0F,IAAImL,EAAE1V,GAAK2V,EAAE3V,IAAM,UAEnCiwB,ECNM,SAASkvB,UAAUzpC,EAAGC,WAC/B3V,EAAI,EACJoe,EAAK1I,EAAE3V,OACPogB,EAAI,EACDngB,EAAIoe,EAAIpe,IACbmgB,GAAKtb,KAAK0F,IAAImL,EAAE1V,GAAK2V,EAAE3V,WAElBmgB,ECPM,SAASi/B,SAAS1pC,EAAGC,WAC9ByI,EAAK1I,EAAE3V,OACPkwB,EAAM,EACDjwB,EAAI,EAAGA,EAAIoe,EAAIpe,IACtBiwB,GAAOprB,KAAKE,KAAK2Q,EAAE1V,GAAK2V,EAAE3V,WAErB6E,KAAKE,KAAK,EAAI,EAAIkrB,YCNHovB,UAAU3pC,EAAGC,EAAG7G,WAClC9O,EAAI,EACJoe,EAAK1I,EAAE3V,OACPogB,EAAI,EACDngB,EAAIoe,EAAIpe,IACbmgB,GAAKtb,KAAKC,IAAID,KAAK0F,IAAImL,EAAE1V,GAAK2V,EAAE3V,IAAK8O,UAEhCjK,KAAKC,IAAIqb,EAAG,EAAIrR,GCPV,SAASwwC,OAAO5pC,EAAGC,WAC5ByI,EAAK1I,EAAE3V,OACP69C,EAAK,EACLC,EAAO,EACF79C,EAAI,EAAGA,EAAIoe,EAAIpe,IACtB49C,GAAM/4C,KAAK5E,IAAIyV,EAAE1V,GAAI2V,EAAE3V,IACvB69C,GAAQnoC,EAAE1V,GAAK2V,EAAE3V,UAEZ,EAAI49C,EAAKC,ECRH,SAAS0B,OAAO7pC,EAAGC,WAC5B3V,EAAI,EACJoe,EAAK1I,EAAE3V,OACPogB,EAAI,EACDngB,EAAIoe,EAAIpe,IACbmgB,IAAOzK,EAAE1V,GAAK2V,EAAE3V,KAAO0V,EAAE1V,GAAK2V,EAAE3V,IAAO0V,EAAE1V,UAEpCmgB,ECPM,SAASq/B,QAAQ9pC,EAAGC,WAC7B3V,EAAI,EACJoe,EAAK1I,EAAE3V,OACPogB,EAAI,EACDngB,EAAIoe,EAAIpe,IACbmgB,IAAOzK,EAAE1V,GAAK2V,EAAE3V,KAAO0V,EAAE1V,GAAK2V,EAAE3V,IAAO2V,EAAE3V,UAEpCmgB,ECPM,SAASs/B,uBAAuB/pC,EAAGC,WAC5C3V,EAAI,EACJoe,EAAK1I,EAAE3V,OACPogB,EAAI,EACDngB,EAAIoe,EAAIpe,IACbmgB,IAAOzK,EAAE1V,GAAK2V,EAAE3V,KAAO0V,EAAE1V,GAAK2V,EAAE3V,KAAQ0V,EAAE1V,GAAK2V,EAAE3V,WAE5C,EAAImgB,ECPE,SAASu/B,QAAQhqC,EAAGC,WAC7ByI,EAAK1I,EAAE3V,OACP69C,EAAK,EACLC,EAAO,EACF79C,EAAI,EAAGA,EAAIoe,EAAIpe,IACtB49C,GAAM/4C,KAAK5E,IAAIyV,EAAE1V,GAAI2V,EAAE3V,IACvB69C,GAAQh5C,KAAKlF,IAAI+V,EAAE1V,GAAI2V,EAAE3V,WAEpB49C,EAAKC,ECRC,SAAS8B,QAAQjqC,EAAGC,WAC7ByI,EAAK1I,EAAE3V,OACP69C,EAAK,EACLC,EAAO,EACF79C,EAAI,EAAGA,EAAIoe,EAAIpe,IACtB49C,GAAM/4C,KAAK0F,IAAImL,EAAE1V,GAAK2V,EAAE3V,IACxB69C,GAAQh5C,KAAKlF,IAAI+V,EAAE1V,GAAI2V,EAAE3V,WAEpB49C,EAAKC,ECRC,SAAS+B,SAASlqC,EAAGC,WAC9ByI,EAAK1I,EAAE3V,OACP69C,EAAK,EACLC,EAAO,EACF79C,EAAI,EAAGA,EAAIoe,EAAIpe,IACtB49C,GAAM/4C,KAAK0F,IAAImL,EAAE1V,GAAK2V,EAAE3V,IACxB69C,GAAQnoC,EAAE1V,GAAK2V,EAAE3V,UAEZ49C,EAAKC,ECRC,SAASgC,QAAQnqC,EAAGC,WAC7B3V,EAAI,EACJoe,EAAK1I,EAAE3V,OACPogB,EAAI,EACDngB,EAAIoe,EAAIpe,IACbmgB,IAAOzK,EAAE1V,GAAK2V,EAAE3V,KAAO0V,EAAE1V,GAAK2V,EAAE3V,KAAQ0V,EAAE1V,GAAK2V,EAAE3V,WAE5CmgB,ECPM,SAAS2/B,aAAapqC,EAAGC,WAClCyI,EAAK1I,EAAE3V,OACPkwB,EAAM,EACDjwB,EAAI,EAAGA,EAAIoe,EAAIpe,IACtBiwB,IACGprB,KAAKE,KAAK2Q,EAAE1V,IAAM6E,KAAKE,KAAK4Q,EAAE3V,MAAQ6E,KAAKE,KAAK2Q,EAAE1V,IAAM6E,KAAKE,KAAK4Q,EAAE3V,YAElEiwB,ECPM,SAAS8vB,OAAOrqC,EAAGC,WAC5ByI,EAAK1I,EAAE3V,OACPkwB,EAAM,EACDjwB,EAAI,EAAGA,EAAIoe,EAAIpe,IACtBiwB,IACIva,EAAE1V,GAAK2V,EAAE3V,IAAM,EACjB6E,KAAK0G,KAAKmK,EAAE1V,GAAK2V,EAAE3V,KAAO,EAAI6E,KAAKE,KAAK2Q,EAAE1V,GAAK2V,EAAE3V,aAE9CiwB,WCRe+vB,SAAStqC,EAAGC,EAAGsqC,MACjCA,EAAW,SACTC,EAAQ,EACRC,EAAQ,EACH/8C,EAAI,EAAGA,EAAIsS,EAAE3V,OAAQqD,IAC5B88C,GAASxqC,EAAEtS,IAAMuS,EAAEvS,GACnB+8C,GAASzqC,EAAEtS,IAAMuS,EAAEvS,UAEP,IAAV+8C,EACK,EAEFD,EAAQC,UAEX/hC,EAAK1I,EAAE3V,OACP+O,EAAI,EACJ2H,EAAI,EACJ9H,EAAI,EACC3O,EAAI,EAAGA,EAAIoe,EAAIpe,IACtB8O,GAAK4G,EAAE1V,GACPyW,GAAKd,EAAE3V,GACP2O,GAAK9J,KAAK5E,IAAIyV,EAAE1V,GAAI2V,EAAE3V,WAEjB,GAAK8O,EAAI2H,EAAI,EAAI9H,IAAMG,EAAI2H,EAAI9H,YCpBlBqxC,WAAStqC,EAAGC,EAAGsqC,MACjCA,SACK,EAAIG,SAAU1qC,EAAGC,EAAGsqC,WAEvB7hC,EAAK1I,EAAE3V,OACP+O,EAAI,EACJ2H,EAAI,EACJ9H,EAAI,EACC3O,EAAI,EAAGA,EAAIoe,EAAIpe,IACtB8O,GAAK4G,EAAE1V,GACPyW,GAAKd,EAAE3V,GACP2O,GAAK9J,KAAK5E,IAAIyV,EAAE1V,GAAI2V,EAAE3V,WAEhB8O,EAAI2H,EAAI,EAAI9H,IAAMG,EAAI2H,EAAI9H,GCfvB,SAAS0xC,OAAO3qC,EAAGC,WAC5ByI,EAAK1I,EAAE3V,OACPkwB,EAAM,EACDjwB,EAAI,EAAGA,EAAIoe,EAAIpe,IACtBiwB,GACEva,EAAE1V,GAAK6E,KAAK0G,IAAK,EAAImK,EAAE1V,IAAO0V,EAAE1V,GAAK2V,EAAE3V,KACvC2V,EAAE3V,GAAK6E,KAAK0G,IAAK,EAAIoK,EAAE3V,IAAO0V,EAAE1V,GAAK2V,EAAE3V,YAEpCiwB,ECRM,SAASqwB,WAAW5qC,EAAGC,WAChCyI,EAAK1I,EAAE3V,OACPkwB,EAAM,EACDjwB,EAAI,EAAGA,EAAIoe,EAAIpe,IACtBiwB,GAAO,EAAIprB,KAAK5E,IAAIyV,EAAE1V,GAAI2V,EAAE3V,IAAM6E,KAAKlF,IAAI+V,EAAE1V,GAAI2V,EAAE3V,WAE9CiwB,q8BCKF,SAASswB,WAAWC,OAAUpgD,yDAAU,OACzCoa,EAAIgmC,EAAS,SACXC,UACJA,EAAY,IADRljC,UAEJA,EAAY,IAFRlb,KAGJA,EAAOmY,EAAE,GAHLkmC,GAIJA,EAAKlmC,EAAEA,EAAEza,OAAS,IAChBK,SAEGugD,eACLH,EAAS,GACTA,EAAS,GACTn+C,EACAq+C,EACAD,EACAljC,GAIJ,SAASojC,eAAenmC,EAAG8C,EAAGjb,EAAMq+C,EAAID,EAAWljC,MAC7CmjC,EAAKr+C,EAAOo+C,SACP,SAILG,EAAQpI,aAAah+B,EAAGnY,EAAMo2C,WAC9BmI,EAAQ,IACVA,GAASA,WAIPz9C,EAAM,EACNuU,EAAS,EACJ1X,EAAI4gD,EAAO5gD,EAAIwa,EAAEza,UACpBya,EAAExa,IAAM0gD,GADoB1gD,IAIhCmD,GAAOma,EAAEtd,GACT0X,GAAU8C,EAAExa,GAAKsd,EAAEtd,UAGjBmD,EAAMoa,EACD,MAGT7F,GAAUvU,GACGd,EAAO,MAAQq+C,EAAKhpC,EAAS,KACjC,KAELA,EAASrV,EAAOo+C,EAAY,EACvBE,eAAenmC,EAAG8C,EAAG5F,EAAQgpC,EAAID,EAAWljC,GAE/CmjC,EAAKhpC,EAAS+oC,EAAY,EACrBE,eAAenmC,EAAG8C,EAAGjb,EAAMqV,EAAQ+oC,EAAWljC,GAE9C,IAAImJ,KACTvjB,EACAuU,EACAipC,eAAenmC,EAAG8C,EAAGjb,EAAMqV,EAAQ+oC,EAAWljC,GAC9CojC,eAAenmC,EAAG8C,EAAG5F,EAAQgpC,EAAID,EAAWljC,IAMpD,MAAMmJ,KACJ/gB,YAAYxC,EAAKuU,EAAQuO,EAAMC,QACxB/iB,IAAMA,OACNuU,OAASA,OACTuO,KAAOA,OACPC,MAAQA,GCxEV,SAAS26B,cAAcnrC,EAAGC,OAAGvV,yDAAU,SACtCoc,MAAEA,EAAQ,GAAVg2B,KAAeA,EAAO,IAAtBsO,MAA4BA,EAAQ,MAAU1gD,SAE1C,OAANsV,GAAoB,OAANC,EACT,GAELpV,MAAMV,QAAQ6V,KAChBA,EAAI6qC,WAAW7qC,IAEbnV,MAAMV,QAAQ8V,KAChBA,EAAI4qC,WAAW5qC,IAQf68B,GAJCh2B,EAAQ3X,KAAK5E,IAAIyV,EAAEvS,IAAKwS,EAAExS,KAAQ0B,KAAKlF,IAAI+V,EAAEvS,IAAKwS,EAAExS,MACpD,EAAIqZ,GAAS3X,KAAKsG,KAAK21C,EAAQj8C,KAAK0F,IAAImL,EAAEgC,OAAS/B,EAAE+B,WAIpD,EAAI86B,IACHqO,cAAcnrC,EAAEuQ,KAAMtQ,EAAEsQ,KAAM7lB,GAC7BygD,cAAcnrC,EAAEwQ,MAAOvQ,EAAEuQ,MAAO9lB,IAClC,GC3BC,SAAS2gD,eAAenpB,EAAGtV,UACzBu+B,cAAcjpB,EAAGtV,yDADqB,IAIxC,SAAS0+B,kBAAY5gD,yDAAU,SAC7B,CAACw3B,EAAGtV,IAAMu+B,cAAcjpB,EAAGtV,EAAGliB,4GCTxB,SAAS6gD,OAAOvrC,EAAGC,WAC5ByI,EAAK1I,EAAE3V,OACP+O,EAAI,EACJkzB,EAAK,EACLic,EAAK,EACAj+C,EAAI,EAAGA,EAAIoe,EAAIpe,IACtB8O,GAAK4G,EAAE1V,GAAK2V,EAAE3V,GACdgiC,GAAMtsB,EAAE1V,GAAK0V,EAAE1V,GACfi+C,GAAMtoC,EAAE3V,GAAK2V,EAAE3V,UAEV8O,GAAKjK,KAAKE,KAAKi9B,GAAMn9B,KAAKE,KAAKk5C,ICRzB,SAASF,OAAKroC,EAAGC,UACvB,EAAIurC,KAAMxrC,EAAGC,GCDP,SAAS6oC,eAAa9oC,EAAGC,UAC/B,EAAIwrC,aAAczrC,EAAGC,GCDf,SAAS8oC,UAAQ/oC,EAAGC,UAC1B,EAAIyrC,QAAS1rC,EAAGC,GCDV,SAASmpC,aAAWppC,EAAGC,UAC7B,EAAI0rC,WAAY3rC,EAAGC,GCDb,SAAS2pC,SAAO5pC,EAAGC,UACzB,EAAI2rC,OAAQ5rC,EAAGC,GCCT,SAAS6pC,UAAQ9pC,EAAGC,WAC7B4rC,EAAOz9C,KAAK4R,GACZ8rC,EAAO19C,KAAK6R,GAEZ8rC,EAAO,IAAIlhD,MAAMmV,EAAE3V,QACnB2hD,EAAO,IAAInhD,MAAMoV,EAAE5V,QACdC,EAAI,EAAGA,EAAIyhD,EAAK1hD,OAAQC,IAC/ByhD,EAAKzhD,GAAK0V,EAAE1V,GAAKuhD,EACjBG,EAAK1hD,GAAK2V,EAAE3V,GAAKwhD,SAGZP,OAAOQ,EAAMC,GCbP,SAAS5B,eAAapqC,EAAGC,UAC/B,EAAIgsC,aAAcjsC,EAAGC,wQCAhBisC,UACJ50C,EAAI40C,EAAKC,QAAQ9hD,OACjBmG,EAAS,IAAI3F,MAAMyM,OACpB,IAAIhN,EAAI,EAAGA,EAAIgN,EAAGhN,IACnBkG,EAAOlG,IAAM4hD,EAAKE,GAAG9hD,GAAK4hD,EAAKG,GAAG/hD,KAAOgN,EAAI,UAE1C9G,OAIG07C,UACJ50C,EAAI40C,EAAKC,QAAQ9hD,OACjBmG,EAAS,IAAI3F,MAAMyM,OACpB,IAAIhN,EAAI,EAAGA,EAAIgN,EAAGhN,IACnBkG,EAAOlG,GAAM4hD,EAAKhR,GAAG5wC,GAAK4hD,EAAKI,GAAGhiD,IAAMgN,EAAI,UAEzC9G,OAIG07C,UACJ50C,EAAI40C,EAAKC,QAAQ9hD,OACjBmG,EAAS,IAAI3F,MAAMyM,OACpB,IAAIhN,EAAI,EAAGA,EAAIgN,EAAGhN,IACnBkG,EAAOlG,GAAK4hD,EAAKI,GAAGhiD,GAAK4hD,EAAKK,YAE3B/7C,OAIG07C,UACJ50C,EAAI40C,EAAKC,QAAQ9hD,OACjBmG,EAAS,IAAI3F,MAAMyM,OACpB,IAAIhN,EAAI,EAAGA,EAAIgN,EAAGhN,IACnBkG,EAAOlG,GAAK4hD,EAAKG,GAAG/hD,GAAK4hD,EAAKM,YAE3Bh8C,OAIG07C,UACJ50C,EAAI40C,EAAKC,QAAQ9hD,OACjBmG,EAAS,IAAI3F,MAAMyM,OACpB,IAAIhN,EAAI,EAAGA,EAAIgN,EAAGhN,IACnBkG,EAAOlG,GAAK4hD,EAAKhR,GAAG5wC,GAAK4hD,EAAKM,YAE3Bh8C,OAIG07C,UACJ50C,EAAI40C,EAAKC,QAAQ9hD,OACjBmG,EAAS,IAAI3F,MAAMyM,OACpB,IAAIhN,EAAI,EAAGA,EAAIgN,EAAGhN,IACnBkG,EAAOlG,GAAK4hD,EAAKE,GAAG9hD,GAAK4hD,EAAKK,YAE3B/7C,OAIG07C,UACJ50C,EAAI40C,EAAKC,QAAQ9hD,OACjBmG,EAAS,IAAI3F,MAAMyM,OACpB,IAAIhN,EAAI,EAAGA,EAAIgN,EAAGhN,IACnBkG,EAAOlG,GAAM4hD,EAAKI,GAAGhiD,GAAK4hD,EAAKG,GAAG/hD,KAAO,EAAM4hD,EAAKG,GAAG/hD,IAAM4hD,EAAKI,GAAGhiD,GAAK4hD,EAAKG,GAAG/hD,IAAO,SAEtFkG,OAIG07C,UACJ50C,EAAI40C,EAAKC,QAAQ9hD,OACjBmG,EAAS,IAAI3F,MAAMyM,OACpB,IAAIhN,EAAI,EAAGA,EAAIgN,EAAGhN,IACnBkG,EAAOlG,GAAM4hD,EAAKhR,GAAG5wC,GAAK4hD,EAAKE,GAAG9hD,KAAO,EAAM4hD,EAAKE,GAAG9hD,IAAM4hD,EAAKhR,GAAG5wC,GAAK4hD,EAAKE,GAAG9hD,IAAO,SAEtFkG,UAIM07C,UACP50C,EAAI40C,EAAKC,QAAQ9hD,OACjBmG,EAAS,IAAI3F,MAAMyM,OACpB,IAAIhN,EAAI,EAAGA,EAAIgN,EAAGhN,IACnBkG,EAAOlG,GAAM4hD,EAAKI,GAAGhiD,GAAK4hD,EAAKG,GAAG/hD,KAAO,EAAK,EAAK4hD,EAAKG,GAAG/hD,IAAM4hD,EAAKI,GAAGhiD,GAAK4hD,EAAKG,GAAG/hD,IAAO,SAE1FkG,UAIM07C,UACP50C,EAAI40C,EAAKC,QAAQ9hD,OACjBmG,EAAS,IAAI3F,MAAMyM,OACpB,IAAIhN,EAAI,EAAGA,EAAIgN,EAAGhN,IACnBkG,EAAOlG,GAAM4hD,EAAKhR,GAAG5wC,GAAK4hD,EAAKE,GAAG9hD,KAAO,EAAK,EAAK4hD,EAAKE,GAAG9hD,IAAM4hD,EAAKhR,GAAG5wC,GAAK4hD,EAAKE,GAAG9hD,IAAO,SAE1FkG,QAII07C,UACL50C,EAAI40C,EAAKC,QAAQ9hD,OACjBmG,EAAS,IAAI3F,MAAMyM,OACpB,IAAIhN,EAAI,EAAGA,EAAIgN,EAAGhN,IACnBkG,EAAOlG,GAA2B,IAArB4hD,EAAKO,SAASniD,GAAc4hD,EAAKG,GAAG/hD,GAAK4hD,EAAKM,MAASN,EAAKO,SAASniD,GAAK4hD,EAAK7qB,UAAa,SAEtG7wB,OAIG07C,UACJ50C,EAAI40C,EAAKC,QAAQ9hD,OACjBmG,EAAS,IAAI3F,MAAMyM,OACpB,IAAIhN,EAAI,EAAGA,EAAIgN,EAAGhN,IACnBkG,EAAOlG,GAAK4hD,EAAKO,SAASniD,GAAK4hD,EAAK7qB,gBAEjC7wB,OAIG07C,UACJ50C,EAAI40C,EAAKC,QAAQ9hD,OACjBmG,EAAS,IAAI3F,MAAMyM,OACpB,IAAIhN,EAAI,EAAGA,EAAIgN,EAAGhN,IACnBkG,EAAOlG,GAAK4hD,EAAKQ,SAASpiD,GAAK4hD,EAAK7qB,gBAEjC7wB,aAIS07C,UACVvzC,EAAQuzC,EAAKC,QAAQx3B,eAC3Bhc,EAAM,GAAKA,EAAM,GACVA,wJCpIX,MAAMg0C,YAUF18C,YAAYu8B,EAAY8H,EAAQ5pC,MAC5BA,EAAUA,GAAW,GACjB8hC,EAAWniC,SAAWiqC,EAAOjqC,QAAUmiC,EAAW,GAAGniC,SAAWiqC,EAAO,GAAGjqC,aACpE,IAAIiP,MAAM,0DAEd3N,EAAO6gC,EAAWniC,OAClBwB,EAAU2gC,EAAW,GAAGniC,OACxBuiD,GAAcliD,EAAQT,IAEtB4iD,EAAQ,MAEVniD,EAAQoiD,QACH,IAAIxiD,EAAI,EAAGA,EAAIqB,EAAMrB,QACjB,IAAIoD,EAAI,EAAGA,EAAI7B,EAAS6B,IACzBm/C,EAAMv/C,KAAK,CACP4+C,KAAM1f,EAAWliC,GAAGoD,GACpBq/C,KAAMzY,EAAOhqC,GAAGoD,SAIzB,IACC/B,EAAO,GAAKA,IAASE,QACf,IAAIyN,MAAM,oGAEXhP,EAAI,EAAGA,EAAIqB,EAAO,EAAGrB,QACjBoD,EAAIpD,EAAI,EAAGoD,EAAI7B,EAAS6B,IAC7Bm/C,EAAMv/C,KAAK,CACP4+C,KAAM1f,EAAWliC,GAAGoD,GACpBq/C,KAAMzY,EAAOhqC,GAAGoD,KAM5Bk/C,EACAC,EAAMzrC,KAAK,CAACpB,EAAGC,IAAMD,EAAEksC,KAAOjsC,EAAEisC,MAEhCW,EAAMzrC,KAAK,CAACpB,EAAGC,IAAMA,EAAEisC,KAAOlsC,EAAEksC,YAG9BC,EAAUn8C,KAAKm8C,QAAU,CAACS,EAAa31C,OAAO8P,UAAY9P,OAAOmnB,WACjEkuB,EAAKt8C,KAAKs8C,GAAK,CAAC,GAChBD,EAAKr8C,KAAKq8C,GAAK,CAAC,OAElBG,EAAO,EACPD,EAAO,EAEPS,EAAcH,EAAM,GAAGX,KACvBe,EAAM,EACNC,EAAM,MACD5iD,EAAI,EAAGA,EAAIuiD,EAAMxiD,OAAQC,IAC1BuiD,EAAMviD,GAAG4hD,OAASc,IAClBb,EAAQ7+C,KAAK0/C,GACbV,EAAGh/C,KAAK4/C,GACRb,EAAG/+C,KAAK2/C,GACRD,EAAcH,EAAMviD,GAAG4hD,MAEvBW,EAAMviD,GAAGyiD,MACTP,IACAS,MAEAV,IACAW,KAGRf,EAAQ7+C,KAAK0/C,GACbV,EAAGh/C,KAAK4/C,GACRb,EAAG/+C,KAAK2/C,SAEF31C,EAAI60C,EAAQ9hD,OACZ6wC,EAAKlrC,KAAKkrC,GAAK,IAAIrwC,MAAMyM,GACzB80C,EAAKp8C,KAAKo8C,GAAK,IAAIvhD,MAAMyM,GACzBm1C,EAAWz8C,KAAKy8C,SAAW,IAAI5hD,MAAMyM,GACrCo1C,EAAW18C,KAAK08C,SAAW,IAAI7hD,MAAMyM,OAElChN,EAAI,EAAGA,EAAIgN,EAAGhN,IACnB4wC,EAAG5wC,GAAKkiD,EAAOH,EAAG/hD,GAClB8hD,EAAG9hD,GAAKiiD,EAAOD,EAAGhiD,GAElBmiD,EAASniD,GAAK+hD,EAAG/hD,GAAKgiD,EAAGhiD,GACzBoiD,EAASpiD,GAAK8hD,EAAG9hD,GAAK4wC,EAAG5wC,QAGxBkiD,KAAOA,OACPD,KAAOA,OACPlrB,SAAWmrB,EAAOD,EAmB3BY,WAAWC,MACgB,iBAAZA,QACD,IAAI9zC,MAAM,4BAEf+zC,SAASD,SACJ,IAAI9zC,uCAAgC8zC,8BAEvCC,SAASD,GAASp9C,MAM7Bs9C,gBACUh2C,EAAItH,KAAKm8C,QAAQ9hD,OACjBoE,EAAI,IAAI5D,MAAMyM,GACd+H,EAAI,IAAIxU,MAAMyM,OACf,IAAIhN,EAAI,EAAGA,EAAIgN,EAAGhN,IACnBmE,EAAEnE,GAAK0F,KAAKs8C,GAAGhiD,GAAK0F,KAAKu8C,KACzBltC,EAAE/U,GAAK0F,KAAKq8C,GAAG/hD,GAAK0F,KAAKw8C,SAEzBe,EAAM,MACLjjD,EAAI,EAAGA,EAAIgN,EAAGhN,IACfijD,GAAO,IAAO9+C,EAAEnE,GAAKmE,EAAEnE,EAAI,KAAO+U,EAAE/U,GAAK+U,EAAE/U,EAAI,WAE5CijD,EAMXC,gBACUl2C,EAAItH,KAAKm8C,QAAQ9hD,OACjBoE,EAAI,IAAI5D,MAAMyM,GACd+H,EAAI,IAAIxU,MAAMyM,OACf,IAAIhN,EAAI,EAAGA,EAAIgN,EAAGhN,IACnBmE,EAAEnE,GAAK0F,KAAKkrC,GAAG5wC,GAAK0F,KAAKw8C,KACzBntC,EAAE/U,GAAK0F,KAAKs8C,GAAGhiD,GAAK0F,KAAKu8C,SAEzBgB,EAAM,MACLjjD,EAAI,EAAGA,EAAIgN,EAAGhN,IACfijD,GAAO,IAAO9+C,EAAEnE,GAAKmE,EAAEnE,EAAI,KAAO+U,EAAE/U,GAAK+U,EAAE/U,EAAI,WAE5CijD,EAGXE,gBAAgB/iD,GACZA,EAAUA,GAAW,WACjBgjD,EAAY19C,KAAKm8C,QAAQ9hD,OACzBsjD,EAASjjD,EAAQguC,MAAQvpC,KAAKwG,MAAoC,IAA9B3F,KAAKm8C,QAAQuB,EAAY,IAAY,IACzEE,EAAUljD,EAAQiuC,MAAQxpC,KAAKkG,KAAuB,IAAlBrF,KAAKm8C,QAAQ,IAAY,IAC7Dh1C,EAAWzM,EAAQyM,UAAYhI,KAAKwG,OAAQi4C,EAAUD,GAAU,GAAK,IAAY,GAAK,IAEtFE,EAAU,GACVC,EAAc,GACdC,EAAc,GACdC,EAAkB,GAClBC,EAAkB,GAElBC,EAAMl+C,KAAKq8C,GAAGqB,EAAY,GAAIS,EAAY,EAC1CC,EAAMp+C,KAAKs8C,GAAGoB,EAAY,GAAIW,EAAY,EAErC/jD,EAAIqjD,EAAQjgD,EAAKggD,EAAY,EAAIpjD,GAAKsjD,EAAStjD,GAAK6M,EAAU,MAC5DnH,KAAKm8C,QAAQz+C,GAAKpD,GACrBoD,IAEJmgD,EAAQvgD,KAAKhD,OAETgkD,EAASJ,EAAMC,EAAYn+C,KAAKq8C,GAAG3+C,GACnC6gD,EAASH,EAAMC,EAAYr+C,KAAKs8C,GAAG5+C,GAEvCygD,GAAaG,EACbD,GAAaE,EAEbT,EAAYxgD,KAAKihD,GACjBR,EAAYzgD,KAAKghD,GAEjBN,EAAgB1gD,KAAK,KAAO8gD,EAAMp+C,KAAKs8C,GAAG5+C,IAAM0gD,EAAM,KACtDH,EAAgB3gD,KAAK,KAAO4gD,EAAMl+C,KAAKq8C,GAAG3+C,IAAMwgD,EAAM,WAGnD,CACHL,QAASA,EACTC,YAAaA,EACbC,YAAaA,EACbC,gBAAiBA,EACjBC,gBAAiBA,IAK7BtB,YAAY6B,MAAQ,CAChBC,IAAK,WACLC,IAAK,aACLC,IAAK,sBACLC,IAAK,qBACLC,IAAK,sBACLC,IAAK,qBACLC,IAAK,4BACLC,IAAK,4BACLC,OAAQ,iCACRC,OAAQ,8BACRC,KAAM,aACNC,IAAK,+BACLC,IAAK,+BACLxnC,UAAW,aAGf,UAAiB8kC,YChOb/7B,iBAAiB,CACnBhiB,KAAM,EACNxB,MAAO,GAST,SAASkiD,UAAUj4C,EAAM3M,OACnBsxB,EAAM3kB,EAAKhN,OACa,iBAAjBK,EAAQkE,OACjBlE,EAAQkE,KAAO,CAAClE,EAAQkE,KAAMlE,EAAQkE,WAKpCnE,EAUAH,EAZAilD,EAAOvzB,EAAMtxB,EAAQkE,KAAK,GAAKlE,EAAQkE,KAAK,MAG5ClE,EAAQD,OAAQ,IACdC,EAAQD,OAAOJ,SAAWklD,QACtB,IAAIvkD,WAAW,qBAEvBP,EAASC,EAAQD,YAEjBA,EAAS,IAAII,MAAM0kD,MAIC,aAAlB7kD,EAAQ0C,UACL9C,EAAI,EAAGA,EAAIilD,EAAMjlD,IAChBA,EAAII,EAAQkE,KAAK,GACnBnE,EAAOH,GAAK+M,GAAM2kB,EAAOtxB,EAAQkE,KAAK,GAAKotB,EAAO1xB,GAAK0xB,GAC9C1xB,EAAII,EAAQkE,KAAK,GAAKotB,EAC/BvxB,EAAOH,GAAK+M,EAAK/M,EAAII,EAAQkE,KAAK,IAElCnE,EAAOH,GAAK+M,GAAM/M,EAAII,EAAQkE,KAAK,IAAMotB,QAGxC,GAAsB,cAAlBtxB,EAAQ0C,UACZ9C,EAAI,EAAGA,EAAIilD,EAAMjlD,IAChBA,EAAII,EAAQkE,KAAK,GAAInE,EAAOH,GAAK+M,EAAK,GACjC/M,EAAII,EAAQkE,KAAK,GAAKotB,EAAKvxB,EAAOH,GAAK+M,EAAK/M,EAAII,EAAQkE,KAAK,IACjEnE,EAAOH,GAAK+M,EAAK2kB,EAAM,QAEzB,GAAsB,cAAlBtxB,EAAQ0C,MAAuB,IACpC1C,EAAQkE,KAAK,GAAKotB,GAAOtxB,EAAQkE,KAAK,GAAKotB,QACvC,IAAIhxB,WACR,gEAGCV,EAAI,EAAGA,EAAIilD,EAAMjlD,IAChBA,EAAII,EAAQkE,KAAK,GAAInE,EAAOH,GAAK+M,EAAK3M,EAAQkE,KAAK,GAAK,EAAItE,GACvDA,EAAII,EAAQkE,KAAK,GAAKotB,EAAKvxB,EAAOH,GAAK+M,EAAK/M,EAAII,EAAQkE,KAAK,IACjEnE,EAAOH,GAAK+M,EAAK,EAAI2kB,EAAMtxB,EAAQkE,KAAK,GAAKtE,EAAI,YAGnDA,EAAI,EAAGA,EAAIilD,EAAMjlD,IAChBA,EAAII,EAAQkE,KAAK,GAAInE,EAAOH,GAAKI,EAAQ0C,MACpC9C,EAAII,EAAQkE,KAAK,GAAKotB,EAAKvxB,EAAOH,GAAK+M,EAAK/M,EAAII,EAAQkE,KAAK,IACjEnE,EAAOH,GAAKI,EAAQ0C,aAItB3C,EAST,SAAS+kD,WAAWn4C,EAAM3M,cAGAE,IAApBF,EAAQkE,KAAK,KACflE,EAAQkE,KAAO,CAAClE,EAAQkE,KAAMlE,EAAQkE,KAAMlE,EAAQkE,KAAMlE,EAAQkE,OAE9D,IAAI0K,MAAM,mCAQlB,SAASm2C,SAASp4C,EAAM3M,MACtBA,EAAUf,OAAOsnB,OAAO,GAAIL,iBAAgBlmB,GACxCG,MAAMV,QAAQkN,UACZxM,MAAMV,QAAQkN,EAAK,IAAYm4C,WAAWn4C,EAAM3M,GACxC4kD,UAAUj4C,EAAM3M,SAEtB,IAAIN,UAAU,2BAIxB,UAAiBqlD,SClGjB,aAAQ/9C,6BAAQmS,8BAAqByE,WAAY2R,OAG3CrJ,iBAAiB,CACrB8+B,WAAY,EACZC,WAAY,EACZjR,WAAY,EACZkR,IAAK,OACLC,SAAU,aAUZ,SAASC,cAAcz4C,EAAMuB,EAAGlO,OAC9BA,EAAUf,OAAOsnB,OAAO,GAAIL,iBAAgBlmB,IAElCglD,WAAa,GAAM,GAC3BhlD,EAAQglD,WAAa,IACpBz4C,OAAOC,UAAUxM,EAAQglD,kBAEpB,IAAI1kD,WACR,wEAGAN,EAAQilD,WAAa,IAAM14C,OAAOC,UAAUxM,EAAQilD,kBAChD,IAAI3kD,WAAW,8CAEnBN,EAAQg0C,WAAa,IAAMznC,OAAOC,UAAUxM,EAAQg0C,kBAChD,IAAI1zC,WAAW,+CAGnBwyB,EAAG5hB,EACHonB,EAAO7zB,KAAKwG,MAAMjL,EAAQglD,WAAa,GAEvB,QAAhBhlD,EAAQklD,MACVv4C,EAAOo4C,MAASp4C,EAAM,CAAEzI,KAAMo0B,EAAM51B,MAAO1C,EAAQmlD,gBAGjDt1B,EAAM,IAAI1vB,MAAMwM,EAAKhN,OAAS,EAAI24B,MAGb,IAAvBt4B,EAAQglD,YACe,IAAvBhlD,EAAQg0C,YACgB,IAAvBh0C,EAAQilD,YAA2C,IAAvBjlD,EAAQilD,WAShC,SACDI,EAAIr+C,SAAOs+C,KAAKtlD,EAAQglD,WAAYhlD,EAAQg0C,WAAa,GACzDuR,IAASvlD,EAAQglD,WAAa,GAAK,EAC9BplD,EAAI,EAAGA,EAAIylD,EAAEpkD,KAAMrB,QACrB,IAAIoD,EAAI,EAAGA,EAAIqiD,EAAElkD,QAAS6B,IACzBuiD,EAAO,IAAM,GAAW,IAANviD,GAASqiD,EAAEjhD,IAAIxE,EAAGoD,EAAGyB,KAAKC,IAAI6gD,EAAO3lD,EAAGoD,QAG9DwiD,EAAa,IAAIrsC,sBAAoBksC,GAGzCvyB,GADAA,EADWlV,UAAQ4nC,EAAWh0C,KAAK6zC,IAC1B7zC,KAAKg0C,IACRz2C,OAAO/O,EAAQilD,YACrB/zC,EAAO,OAnBoB,IAAvBlR,EAAQilD,YACVnyB,EAAI,EAAE,GAAI,EAAG,EAAG,EAAG,GACnB5hB,EAAO,KAEP4hB,EAAI,CAAC,GAAI,GAAI,GAAI,EAAG,GACpB5hB,EAAO,WAgBPu0C,EAAMv0C,EAAOzM,KAAKC,IAAIwJ,EAAGlO,EAAQilD,YAC5Bl3C,EAAIuqB,EAAMvqB,EAAIpB,EAAKhN,OAAS24B,EAAMvqB,IAAK,SAC1CgS,EAAI,EACCnT,EAAI,EAAGA,EAAIkmB,EAAEnzB,OAAQiN,IAAKmT,GAAM+S,EAAElmB,GAAKD,EAAKC,EAAImB,EAAIuqB,GAASmtB,EACtE51B,EAAI9hB,EAAIuqB,GAAQvY,QAGE,SAAhB/f,EAAQklD,MACVr1B,EAAMk1B,MAASl1B,EAAK,CAAE3rB,KAAMo0B,EAAM51B,MAAO1C,EAAQmlD,YAG5Ct1B,ECjFT,IDoFA,UAAiBu1B,cCrFbv1B,IAAM,IAAI1vB,MAAM,KACXP,EAAI,EAAGA,EAAI,IAAKA,IAAK,SACtBsG,IAAMtG,EACNsC,EAAI,EACDgE,KACHA,KAAaA,IAAM,EACnBhE,IAEJ2tB,IAAIjwB,GAAKsC,EAGb,YAAiB2tB,ICJjB,SAAS1V,MAAMwI,WACPzgB,EAAI,EACCtC,EAAI,EAAGA,EAAI+iB,EAAIhjB,OAAQC,IAC5BsC,GAAKwjD,QAAmB,IAAT/iC,EAAI/iB,IAAa8lD,QAAW/iC,EAAI/iB,IAAM,EAAK,KAAQ8lD,QAAW/iC,EAAI/iB,IAAM,GAAM,KAAQ8lD,QAAW/iC,EAAI/iB,IAAM,GAAM,YAE7HsC,EASX,SAAS2G,IAAI88C,EAAMC,WACX/1B,EAAM,IAAI1vB,MAAMwlD,EAAKhmD,QAChBC,EAAI,EAAGA,EAAI+lD,EAAKhmD,OAAQC,IAC7BiwB,EAAIjwB,GAAK+lD,EAAK/lD,GAAKgmD,EAAKhmD,UACrBiwB,EASX,SAAS7mB,GAAG28C,EAAMC,WACV/1B,EAAM,IAAI1vB,MAAMwlD,EAAKhmD,QAChBC,EAAI,EAAGA,EAAI+lD,EAAKhmD,OAAQC,IAC7BiwB,EAAIjwB,GAAK+lD,EAAK/lD,GAAKgmD,EAAKhmD,UACrBiwB,EASX,SAAS1mB,IAAIw8C,EAAMC,WACX/1B,EAAM,IAAI1vB,MAAMwlD,EAAKhmD,QAChBC,EAAI,EAAGA,EAAI+lD,EAAKhmD,OAAQC,IAC7BiwB,EAAIjwB,GAAK+lD,EAAK/lD,GAAKgmD,EAAKhmD,UACrBiwB,EAQX,SAAS3lB,IAAIyY,WACLkN,EAAM,IAAI1vB,MAAMwiB,EAAIhjB,QACfC,EAAI,EAAGA,EAAIiwB,EAAIlwB,OAAQC,IAC5BiwB,EAAIjwB,IAAM+iB,EAAI/iB,UACXiwB,EASX,SAASg2B,OAAOljC,EAAKnU,OAEbs3C,EAAO,GAAM,GAAKt3C,EAAI,UACnB2M,QAAQwH,EAFHnU,GAAK,GAEWs3C,GAUhC,SAASC,OAAOpjC,EAAKnU,EAAGkU,OAChB3hB,EAAQyN,GAAK,EACbs3C,EAAO,GAAM,GAAKt3C,EAAI,UAEtBmU,EAAI5hB,GADJ2hB,EACaojC,EAAOnjC,EAAI5hB,IAEV+kD,EAAOnjC,EAAI5hB,GACtB4hB,EAQX,SAASqjC,eAAerjC,WAChB8tB,EAAM,GACD7wC,EAAI,EAAGA,EAAI+iB,EAAIhjB,OAAQC,IAAK,KAC7BoyB,GAAOrP,EAAI/iB,KAAO,GAAGZ,SAAS,GAClCyxC,GAAO,mCAAmCwV,OAAOj0B,EAAIryB,QAAUqyB,SAE5Dye,EAQX,SAASyV,kBAAkBzV,WACnBnf,EAAMmf,EAAI9wC,OAAS,GACnBkwB,EAAM,IAAI1vB,MAAMmxB,GACX1xB,EAAI,EAAGA,EAAI0xB,EAAK1xB,IACrBiwB,EAAIjwB,GAAyC,EAApC6V,SAASg7B,EAAIwV,OAAS,GAAFrmD,EAAM,IAAK,UAErCiwB,EAQX,SAASs2B,YAAYxjC,WACb8tB,EAAM,GACD7wC,EAAI,EAAGA,EAAI+iB,EAAIhjB,OAAQC,IAAK,KAC7BoyB,GAAOrP,EAAI/iB,KAAO,GAAGZ,SAAS,IAClCyxC,GAAO,WAAWwV,OAAOj0B,EAAIryB,QAAUqyB,SAEpCye,EAQX,SAAS2V,eAAe3V,WAChBnf,EAAMmf,EAAI9wC,OAAS,EACnBkwB,EAAM,IAAI1vB,MAAMmxB,GACX1xB,EAAI,EAAGA,EAAI0xB,EAAK1xB,IACrBiwB,EAAIjwB,GAAwC,EAAnC6V,SAASg7B,EAAIwV,OAAS,EAAFrmD,EAAK,GAAI,WAEnCiwB,EAQX,SAASw2B,QAAQ1jC,WACT2jC,EAASN,eAAerjC,GACxB8tB,EAAM,GACD7wC,EAAI,EAAGA,EAAI+iB,EAAIhjB,OAAQC,IAAK,CACjC6wC,GAAO,OAAOwV,QAAY,GAAJrmD,GAAQZ,SAAS,IAAIW,SAAe,GAAJC,GAAQZ,SAAS,IAAM,QACxE,IAAIgE,EAAI,EAAGA,EAAI,GAAIA,GAAK,EACzBytC,GAAO,IAAM6V,EAAOL,OAAW,GAAJrmD,EAASoD,EAAG,GAEvCpD,EAAI+iB,EAAIhjB,OAAS,IAAG8wC,GAAO,aAE5BA,EAGX,UAAiB,CACbt2B,MAAOA,MACPtR,IAAKA,IACLG,GAAIA,GACJG,IAAKA,IACLe,IAAKA,IACL27C,OAAQA,OACRE,OAAQA,OACRC,eAAgBA,eAChBE,kBAAmBA,kBACnBC,YAAaA,YACbC,eAAgBA,eAChBC,QAASA,SC/Kb,SAAS78B,OAAKhqB,OACPC,IAAQD,SACL,IAAIE,UAAU,6BAGD,IAAjBF,EAAMG,aACF,IAAID,UAAU,mCAGlBiB,EAAW,EACX4lD,EAAW,EACXpsC,EAAQ,EACRkI,EAAS,GAEJziB,EAAI,EAAGA,EAAIJ,EAAMG,SAAUC,EAAG,KACjCs8B,EAAU18B,EAAMI,IACpBua,EAAQkI,EAAO6Z,KAGb7Z,EAAO6Z,KACP/hB,KAEAkI,EAAO6Z,GAAW/hB,EAAQ,EAGxBA,EAAQosC,IACVA,EAAWpsC,EACXxZ,EAAWnB,EAAMI,WAIde,EChCT,SAASuQ,OAAK1R,OAERgnD,GADUvmD,UAAUN,OAAS,QAAsBO,IAAjBD,UAAU,GAAmBA,UAAU,GAAK,IACjDwmD,UAC7BA,OAAmC,IAAvBD,EAAgC,WAAaA,MAExDrmD,MAAMV,QAAQD,SACX,IAAIoP,MAAM,6BAGG,IAAjBpP,EAAMG,aACF,IAAIiP,MAAM,kCAGV63C,EAAU5R,mBACX,eACC9xC,EAAM2jD,YAAYlnD,UACV,IAARuD,EAAkBvD,EAAMyqB,MAAM,GAC3BzqB,EAAMwpB,IAAI,SAAUkT,UAClBA,EAAUn5B,kBAIb,IAAI6L,MAAM,4BAA4B2e,OAAOk5B,KAIzD,SAASC,YAAYlnD,WACfuD,EAAM,EAEDnD,EAAI,EAAGA,EAAIJ,EAAMG,OAAQC,IAChCmD,GAAO0B,KAAK0F,IAAI3K,EAAMI,WAGjBmD,ECtCT,SAAS4jD,QAAQ30B,UAEb20B,QADoB,mBAAXpvC,QAAoD,iBAApBA,OAAOqvC,SACtC,SAAU50B,iBACJA,GAGN,SAAUA,UACXA,GAAyB,mBAAXza,QAAyBya,EAAIzsB,cAAgBgS,QAAUya,IAAQza,OAAOrY,UAAY,gBAAkB8yB,IAI9GA,GAcjB,SAAS60B,qBACHrnD,EAAQS,UAAUN,OAAS,QAAsBO,IAAjBD,UAAU,GAAmBA,UAAU,GAAK,GAC5ED,EAAUC,UAAUN,OAAS,QAAsBO,IAAjBD,UAAU,GAAmBA,UAAU,GAAK,MAE3D,WAAnB0mD,QAAQnnD,IAAwBC,IAAQD,KAC1CQ,EAAUR,EACVA,EAAQ,KAGLC,IAAQD,SACL,IAAIE,UAAU,8BAGlBonD,EAAW9mD,EACX+mD,EAAgBD,EAAS7kD,KACzBA,OAAyB,IAAlB8kD,EAA2B,EAAIA,EACtCC,EAAcF,EAASxG,GACvBA,OAAqB,IAAhB0G,EAAyB,GAAKA,EACnCC,EAAgBH,EAAS5iD,KACzBA,OAAyB,IAAlB+iD,EAA2BznD,EAAMG,OAASsnD,EACjD3uB,EAAOwuB,EAASxuB,QAEhBp0B,GAAQo0B,QACJ,IAAI1pB,MAAM,wCAGb1K,IAEDA,EADEo0B,EACK7zB,KAAKwG,OAAOq1C,EAAKr+C,GAAQq2B,GAAQ,EAEjCgoB,EAAKr+C,EAAO,IAIlBq2B,GAAQp0B,IACXo0B,GAAQgoB,EAAKr+C,IAASiC,EAAO,IAG3B/D,MAAMV,QAAQD,GAAQ,CACxBA,EAAMG,OAAS,MAEV,IAAIC,EAAI,EAAGA,EAAIsE,EAAMtE,IACxBJ,EAAMoD,KAAKX,GACXA,GAAQq2B,MAEL,IACD94B,EAAMG,SAAWuE,QACb,IAAI0K,MAAM,+DAGb,IAAI+e,EAAK,EAAGA,EAAKzpB,EAAMypB,IAC1BnuB,EAAMmuB,GAAM1rB,EACZA,GAAQq2B,SAIL94B,ECvET,SAASoE,SAASwlB,OACZppB,EAAUC,UAAUN,OAAS,QAAsBO,IAAjBD,UAAU,GAAmBA,UAAU,GAAK,OAE7ER,IAAQ2pB,SACL,IAAI1pB,UAAU,kCAGlBwnD,EAAoBlnD,EAAQyD,SAC5BA,OAAiC,IAAtByjD,GAAsCA,EACjDC,EAAgBnnD,EAAQ0D,KACxBA,OAAyB,IAAlByjD,EAA2Bh9B,KAAUf,GAAU+9B,EACtDC,EAAW,EAENxnD,EAAI,EAAGA,EAAIwpB,EAAOzpB,OAAQC,IAAK,KAClCmE,EAAIqlB,EAAOxpB,GAAK8D,EACpB0jD,GAAYrjD,EAAIA,SAGdN,EACK2jD,GAAYh+B,EAAOzpB,OAAS,GAE5BynD,EAAWh+B,EAAOzpB,OCtB7B,SAAS0X,kBAAkB+R,OACrBppB,EAAUC,UAAUN,OAAS,QAAsBO,IAAjBD,UAAU,GAAmBA,UAAU,GAAK,UAC3EwE,KAAKE,KAAKf,SAASwlB,EAAQppB,ICHrB,SAASqnD,iBACtBC,EACA1vB,OACA53B,yDAAU,SAEJ8pB,OAAEA,EAAS,KAAS9pB,UAEtBunD,EAAe,CACjBxjD,EAAG6zB,EAAU3N,QACbtV,EAAG,IAAIxU,MAAMy3B,EAAUj4B,QAAQ0M,KAAK,IAGlCm7C,EAAgB,EAChBC,EAAc,EAEhBD,EAAgBF,EAAevjD,EAAEpE,QACjC8nD,EAAc7vB,EAAUj4B,QACxB,KACIoyB,EAAOu1B,EAAevjD,EAAEyjD,GAAiB5vB,EAAU6vB,GACnDhjD,KAAK0F,IAAI4nB,GAAQjI,EACnBy9B,EAAa5yC,EAAE8yC,IAAgBH,EAAe3yC,EAAE6yC,KACvCz1B,EAAO,EAChBy1B,IAEAC,WAIGF,EC3BM,SAASG,SAAS/sB,EAAQ36B,SACjC+D,EAAEA,EAAF4Q,EAAKA,GAAMgmB,GACXiP,OAAEA,EAAS7lC,EAAE,GAAbkoB,QAAiBA,GAAU,GAAUjsB,MAEvCe,SAEFA,EAAQq3C,aAAar0C,EAAG6lC,EADtB3d,EAC8B07B,WAEAtP,aAGrB,EACJ,CACLt0C,EAAGA,EAAEhD,GACL4T,EAAGA,EAAE5T,IAKM,KAFbA,GAASA,IAES0D,KAAK0F,IAAIpG,EAAEhD,GAAS6oC,GAAU,IAC9C7oC,IAAUgD,EAAEpE,OAEL,CACLoE,EAAGA,EAAEhD,EAAQ,GACb4T,EAAGA,EAAE5T,EAAQ,IAGR,CACLgD,EAAGA,EAAEhD,GACL4T,EAAGA,EAAE5T,IC/BE,SAAS6mD,SAASjtB,OAAQ36B,yDAAU,SAC3C+D,EAAEA,EAAF4Q,EAAKA,GAAMgmB,GACXktB,WAAEA,EAAa,MAAU7nD,UAE3B8nD,EAAS,CAAE/jD,EAAG,GAAI4Q,EAAG,IACrBozC,EAAc,CAAEhkD,EAAG,GAAI4Q,EAAG,IAC1BzQ,EAAO,EACPnD,EAAQ,EAELA,EAAQgD,EAAEpE,QACF,IAATuE,GAAcH,EAAEhD,GAAS+mD,EAAO/jD,EAAEG,EAAO,GAAK2jD,GAChDE,EAAYhkD,EAAEnB,KAAKmB,EAAEhD,IACrBgnD,EAAYpzC,EAAE/R,KAAK+R,EAAE5T,IACrB+mD,EAAO/jD,EAAEnB,KAAKmB,EAAEhD,IAChB+mD,EAAOnzC,EAAE/R,KAAK+R,EAAE5T,IAChBA,IACAmD,MAEIyQ,EAAE5T,GAASgnD,EAAYpzC,EAAEzQ,EAAO,KAClC6jD,EAAYhkD,EAAEG,EAAO,GAAKH,EAAEhD,GAC5BgnD,EAAYpzC,EAAEzQ,EAAO,GAAKyQ,EAAE5T,IAE9B+mD,EAAO/jD,EAAEG,EAAO,GAAKH,EAAEhD,GACvB+mD,EAAOnzC,EAAEzQ,EAAO,IAAMyQ,EAAE5T,GACxBA,YAIJ+mD,EAAO/jD,EAAIgkD,EAAYhkD,EAAEkmB,QAElB69B,EC1BM,SAASE,KAAKrtB,OAAQ36B,yDAAU,SACvC+D,EAAEA,EAAF4Q,EAAKA,GAAMgmB,MACb14B,KACFA,EAAO,CAAElB,MAAO,GADdu/C,GAEFA,EAAK,CAAEv/C,MAAOgD,EAAEpE,QAFdssB,QAGFA,GAAU,GACRjsB,OAEeE,IAAf+B,EAAKS,YAAsCxC,IAAf+B,EAAKlB,QACnCkB,EAAKlB,MAAQknD,eAAehmD,EAAKS,MAAOqB,EAAGkoB,SAG5B/rB,IAAbogD,EAAG59C,YAAoCxC,IAAbogD,EAAGv/C,QAC/Bu/C,EAAGv/C,MAAQknD,eAAe3H,EAAG59C,MAAOqB,EAAGkoB,YAIrCgN,EADA54B,EAAakM,OAAO8P,UAEfzc,EAAIqC,EAAKlB,MAAOnB,EAAI0gD,EAAGv/C,MAAOnB,IACjCS,EAAasU,EAAE/U,KACjBS,EAAasU,EAAE/U,GACfq5B,EAAer5B,SAIZ,CACLmB,MAAOk4B,EACPv2B,MAAOrC,GAUX,SAAS4nD,eAAevlD,EAAOqB,EAAGkoB,OAC5BlrB,MAEFA,EAAQq3C,aAAar0C,EAAGrB,EADtBupB,EAC6B07B,WAEAtP,YAGrB,QACJ,IAAIzpC,0BAAmBlM,oDAGxB3B,EC9DM,SAASmnD,MAAMvtB,OAAQ36B,yDAAU,SACxC+D,EAAEA,EAAF4Q,EAAKA,GAAMgmB,GACX1O,QAAEA,GAAU,GAAUjsB,MAExBmoD,EAIFA,EAHGl8B,EAGQ,CAAC3W,EAAGC,IAAMA,EAAExR,EAAIuR,EAAEvR,EAFlB,CAACuR,EAAGC,IAAMD,EAAEvR,EAAIwR,EAAExR,UAK3BqkD,EAAUrkD,EACXilB,IAAI,CAACtG,EAAK3hB,MACTgD,EAAG2e,EACH/N,EAAGA,EAAE5T,MAEN2V,KAAKyxC,GAEJE,EAAW,CAAEtkD,EAAGA,EAAEkmB,QAAStV,EAAGA,EAAEsV,SAC3BrqB,EAAI,EAAGA,EAAImE,EAAEpE,OAAQC,IAC5ByoD,EAAStkD,EAAEnE,GAAKwoD,EAAQxoD,GAAGmE,EAC3BskD,EAAS1zC,EAAE/U,GAAKwoD,EAAQxoD,GAAG+U,SAGtB0zC,ECjBM,SAASC,cAAQ3tB,yDAAS,SACjC52B,EAAEA,EAAF4Q,EAAKA,GAAMgmB,KACb52B,EAAEpE,OAAS,EAAG,UACdoE,EAAEpE,SAAWgV,EAAEhV,aACX,IAAIiP,MAAM,oDAGdy3B,EAAUtiC,EAAE,GACZiyC,EAAU,MAET,IAAIp2C,EAAI,EAAGA,EAAImE,EAAEpE,OAAQC,IACxBymC,IAAYtiC,EAAEnE,KAChBo2C,IACA3P,EAAUtiC,EAAEnE,GACZmE,EAAEiyC,GAAWjyC,EAAEnE,GACXA,IAAMo2C,IACRrhC,EAAEqhC,GAAW,IAGbp2C,IAAMo2C,IACRrhC,EAAEqhC,IAAYrhC,EAAE/U,IAIpBmE,EAAEpE,OAASq2C,EAAU,EACrBrhC,EAAEhV,OAASq2C,EAAU,ECvBR,SAASuS,cAAc5tB,OAAQ36B,yDAAU,SAChD+D,EAAEA,EAAF4Q,EAAKA,GAAMgmB,GACXktB,WAAEA,EAAa,MAAU7nD,UAE3B8nD,EAAS,CAAE/jD,EAAG,GAAI4Q,EAAG,IACrB6zC,EAAmB,CAAEzkD,EAAG,GAAI4Q,EAAG,IAC/BzQ,EAAO,EACPnD,EAAQ,EAELA,EAAQgD,EAAEpE,QACF,IAATuE,GAAcH,EAAEhD,GAAS+mD,EAAO/jD,EAAEG,EAAO,GAAK2jD,GAChDW,EAAiBzkD,EAAEnB,KAAKmB,EAAEhD,GAAS4T,EAAE5T,IACrCynD,EAAiB7zC,EAAE/R,KAAK+R,EAAE5T,IAC1B+mD,EAAO/jD,EAAEnB,KAAKmB,EAAEhD,IAChB+mD,EAAOnzC,EAAE/R,KAAK+R,EAAE5T,IAChBA,IACAmD,MAEAskD,EAAiBzkD,EAAEG,EAAO,IAAMH,EAAEhD,GAAS4T,EAAE5T,GAC7CynD,EAAiB7zC,EAAEzQ,EAAO,IAAMyQ,EAAE5T,GAClC+mD,EAAO/jD,EAAEG,EAAO,GAAKH,EAAEhD,GACvB+mD,EAAOnzC,EAAEzQ,EAAO,IAAMyQ,EAAE5T,GACxBA,SAIC,IAAInB,EAAI,EAAGA,EAAIkoD,EAAO/jD,EAAEpE,OAAQC,IACnCkoD,EAAO/jD,EAAEnE,GAAK4oD,EAAiBzkD,EAAEnE,GAAK4oD,EAAiB7zC,EAAE/U,UAGpDkoD,EC9BM,SAASW,SAASC,EAAIC,EAAI5X,EAAOC,SAE5C,GAAMD,EAAQ4X,EAAKA,EACnB3X,EAAY2X,GACX,GAAM5X,EAAQ2X,EAAKA,EAAK1X,EAAY0X,GCD1B,SAASE,oBAAoB7kD,EAAG4Q,EAAG1S,EAAMq+C,EAAIuI,OACtDC,EAAU/kD,EAAEpE,OAEZ24B,GAAQgoB,EAAKr+C,IAAS4mD,EAAiB,GACvCE,EAAWzwB,EAAO,EAElBv4B,EAAS,IAAII,MAAM0oD,GAEnBG,EAAsBjlD,EAAE,GAAKA,EAAE,GAC/BklD,EAAmBllD,EAAE+kD,EAAU,GAAK/kD,EAAE+kD,EAAU,GAGhDjpD,EAAMoC,EAAO8mD,EACbxpD,EAAM0C,EAAO8mD,EAEbG,EAAY38C,OAAO8P,UACnB8sC,EAAY,EACZC,EAAQrlD,EAAE,GAAKilD,EACfK,EAAQ,EAERC,EAAe,EACfvY,EAAQ,EACRC,EAAY,EACZuY,EAAW,EACXC,EAAW,EAEX5pD,EAAI,EACJoD,EAAI,EAMRymD,EAAM,OAAa,KACbP,GAAarpD,GAAOA,GAAOupD,IAE7BG,EAAWD,GADXriD,EAAMwhD,SAAS,EAAG5oD,EAAMqpD,EAAWnY,EAAOoY,KAIrCC,EAAQ7pD,GAAO,GAAG,KAEnB0H,EAAMwhD,SAAS,EAAGlpD,EAAM2pD,EAAWnY,EAAOoY,MAC9CK,EAAWF,EAAeriD,EAE1BlH,EAAOiD,MAAQwmD,EAAWD,GAAYjxB,EAElCt1B,IAAM6lD,QACFY,EAGR5pD,EAAMN,EACNA,GAAO+4B,EACPixB,EAAWC,EAGbF,GAAgBb,SAASS,EAAWE,EAAOrY,EAAOC,GAElDkY,EAAYE,EACZD,EAAYE,EAERzpD,EAAIkpD,GACNM,EAAQrlD,EAAEnE,GACVypD,EAAQ10C,EAAE/U,GACVA,KACSA,IAAMkpD,IACfM,GAASH,EACTI,EAAQ,GAIVrY,IADAD,GAA8CsY,EAAlBF,IAAWC,EAAtBF,IACIA,EAAYC,SAG5BppD,EC3EM,SAAS2pD,kBAAkB3lD,EAAG4Q,EAAG1S,EAAMq+C,EAAIuI,OACpDC,EAAU/kD,EAAEpE,OAEZ24B,GAAQgoB,EAAKr+C,IAAS4mD,EAAiB,GACvCE,EAAWzwB,EAAO,EAClBqxB,EAAW5lD,EAAEA,EAAEpE,OAAS,GAAKoE,EAAEA,EAAEpE,OAAS,GAE1C6gD,EAAQv+C,EAAO8mD,EACfhpD,EAAS,IAAII,MAAM0oD,GAGnBhpD,EAAM2gD,EACNjhD,EAAMihD,EAAQloB,EAEd4wB,GAAa38C,OAAOmnB,UACpBy1B,EAAY,EACZC,EAAQrlD,EAAE,GACVslD,EAAQ10C,EAAE,GACVi1C,EAAsB,EACtBC,GAAqB,EAErBP,EAAe,EAGf5rB,EAAgB,EAEhB99B,EAAI,EACJoD,EAAI,EAERymD,EAAM,OAAa,IACbP,GAAaE,EAAO,MAAM,IAAIx6C,MAAM,sCACjCs6C,EAAY3pD,EAAM,GAAG,IAEtBsqD,IACFnsB,IACAmsB,GAAqB,GAGvB9pD,EAAOiD,GAAK06B,GAAiB,EAAI,EAAI4rB,EAAe5rB,IACpD16B,IAEU6lD,QACFY,EAGR5pD,EAAMN,EACNA,GAAO+4B,EACPgxB,EAAe,EACf5rB,EAAgB,EAGdwrB,EAAYrpD,IACdypD,GAAgBH,EAChBzrB,MAGEwrB,KAAe38C,OAAOmnB,WAAak2B,EAAsB,IAC3DlsB,IAGFwrB,EAAYE,EACZD,EAAYE,EAERzpD,EAAIkpD,GACNM,EAAQrlD,EAAEnE,GACVypD,EAAQ10C,EAAE/U,GACVA,MAEAwpD,GAASO,EACTN,EAAQ,EACRO,YAIG7pD,WCpFe+pD,SAAS7nD,EAAMq+C,EAAIuI,OAAgBkB,yDAAa,GAClE9nD,EAAOq+C,KACRr+C,EAAMq+C,GAAM,CAACA,EAAIr+C,IAIpB8nD,EAAaA,EAAWtnC,OACrBunC,QAAiC9pD,IAAnB8pD,EAAU/nD,WAAuC/B,IAAjB8pD,EAAU1J,KAG3DyJ,EAAaE,KAAKC,MAAMD,KAAKE,UAAUJ,KAE5B/5B,QAASg6B,IACdA,EAAU/nD,KAAO+nD,EAAU1J,MAC5B0J,EAAU1J,GAAI0J,EAAU/nD,MAAQ,CAAC+nD,EAAU/nD,KAAM+nD,EAAU1J,OAIhEyJ,EAAWrzC,KAAK,CAACpB,EAAGC,IAAMD,EAAErT,KAAOsT,EAAEtT,MAGrC8nD,EAAW/5B,QAASg6B,IACdA,EAAU/nD,KAAOA,IAAM+nD,EAAU/nD,KAAOA,GACxC+nD,EAAU1J,GAAKA,IAAI0J,EAAU1J,GAAKA,SAEnC,IAAI1gD,EAAI,EAAGA,EAAImqD,EAAWpqD,OAAS,EAAGC,IACrCmqD,EAAWnqD,GAAG0gD,GAAKyJ,EAAWnqD,EAAI,GAAGqC,OACvC8nD,EAAWnqD,GAAG0gD,GAAKyJ,EAAWnqD,EAAI,GAAGqC,WAGzC8nD,EAAaA,EAAWtnC,OAAQunC,GAAcA,EAAU/nD,KAAO+nD,EAAU1J,MAEhC,IAAtByJ,EAAWpqD,aACrB,CAAC,CAAEsC,KAAAA,EAAMq+C,GAAAA,EAAIuI,eAAAA,QAKlBuB,EAAWL,EAAWxX,OACxB,CAAC8X,EAAUL,IAAeK,GAAYL,EAAU1J,GAAK0J,EAAU/nD,KAC/D,GAGEqoD,GADQhK,EAAKr+C,EACYmoD,GAAYvB,EACrC0B,EAAQ,GACRC,EAAcvoD,EACdwoD,EAAc,MACb,IAAIT,KAAaD,EAAY,KAC5BW,EAAkBjmD,KAAK8G,OACxBy+C,EAAU/nD,KAAOuoD,GAAeF,GAEnCG,GAAeC,EACXA,EAAkB,GACpBH,EAAM3nD,KAAK,CACTX,KAAMuoD,EACNlK,GAAI0J,EAAU/nD,KACd4mD,eAAgB6B,IAIpBF,EAAcR,EAAU1J,UAEtBuI,EAAiB4B,EAAc,GACjCF,EAAM3nD,KAAK,CACTX,KAAMuoD,EACNlK,GAAIA,EACJuI,eAAgBA,EAAiB4B,IAI9BF,ECtCM,SAASI,oBAAcC,yDAAU,GAAI5qD,yDAAU,IACxD+D,EAAEA,EAAF4Q,EAAKA,GAAMi2C,EACX9B,EAAU/kD,EAAEpE,OACZssB,GAAU,EACVloB,EAAEpE,OAAS,GAAKoE,EAAE,GAAKA,EAAE,KAC3BA,EAAIA,EAAEkmB,QAAQgC,UACdtX,EAAIA,EAAEsV,QAAQgC,UACdA,GAAU,OAGRhqB,KACFA,EAAO8B,EAAE,GADPu8C,GAEFA,EAAKv8C,EAAE+kD,EAAU,GAFf+B,QAGFA,EAAU,SAHRhC,eAIFA,EAAiB,IAJfkB,WAKFA,EAAa,IACX/pD,KAEA8oD,IAAYn0C,EAAEhV,aACV,IAAIW,WAAW,qDAGH,iBAAT2B,GAAqBqa,MAAMra,SAC9B,IAAI3B,WAAW,qCAGL,iBAAPggD,GAAmBhkC,MAAMgkC,SAC5B,IAAIhgD,WAAW,mCAGO,iBAAnBuoD,GAA+BvsC,MAAMusC,SACxC,IAAIvoD,WAAW,gDAGnBiqD,EAAQT,SAAS7nD,EAAMq+C,EAAIuI,EAAgBkB,GAE3Ce,EAAU,GACVC,EAAU,OACT,IAAIC,KAAQT,EAAO,KAClBU,EAAaC,YACfnnD,EACA4Q,EACAq2C,EAAK/oD,KACL+oD,EAAK1K,GACL0K,EAAKnC,eACLgC,GAGFC,EAAQloD,QAAQqoD,EAAWlnD,GAC3BgnD,EAAQnoD,QAAQqoD,EAAWt2C,UAGzBsX,EACEhqB,EAAOq+C,EACF,CAAEv8C,EAAG+mD,EAAQ7+B,UAAWtX,EAAGo2C,EAAQ9+B,WAEnC,CAAEloB,EAAG+mD,EAASn2C,EAAGo2C,GAGtB9oD,EAAOq+C,EACF,CAAEv8C,EAAG+mD,EAASn2C,EAAGo2C,GAEjB,CAAEhnD,EAAG+mD,EAAQ7+B,UAAWtX,EAAGo2C,EAAQ9+B,WAKhD,SAASi/B,YAAYnnD,EAAG4Q,EAAG1S,EAAMq+C,EAAIuI,EAAgBgC,MAC/ChC,EAAiB,QACb,IAAIvoD,WAAW,+CAGnBP,EACU,SAAZ8qD,EACInB,kBAAkB3lD,EAAG4Q,EAAG1S,EAAMq+C,EAAIuI,GAClCD,oBAAoB7kD,EAAG4Q,EAAG1S,EAAMq+C,EAAIuI,SAEnC,CACL9kD,EAAG8iD,eAAe,CAChB5kD,KAAAA,EACAq+C,GAAAA,EACAp8C,KAAM2kD,IAERl0C,EAAG5U,GCnHQ,SAAS+pD,WAAS7nD,EAAMq+C,OAAIyJ,yDAAa,GAClD9nD,EAAOq+C,KACRr+C,EAAMq+C,GAAM,CAACA,EAAIr+C,IAIpB8nD,EAAaA,EAAWtnC,OACrBunC,QAAiC9pD,IAAnB8pD,EAAU/nD,WAAuC/B,IAAjB8pD,EAAU1J,KAG3DyJ,EAAaE,KAAKC,MAAMD,KAAKE,UAAUJ,KAE5B/5B,QAASg6B,IACdA,EAAU/nD,KAAO+nD,EAAU1J,MAC5B0J,EAAU1J,GAAI0J,EAAU/nD,MAAQ,CAAC+nD,EAAU/nD,KAAM+nD,EAAU1J,OAIhEyJ,EAAWrzC,KAAK,CAACpB,EAAGC,IAAMD,EAAErT,KAAOsT,EAAEtT,MAGrC8nD,EAAW/5B,QAASg6B,IACdA,EAAU/nD,KAAOA,IAAM+nD,EAAU/nD,KAAOA,GACxC+nD,EAAU1J,GAAKA,IAAI0J,EAAU1J,GAAKA,SAEnC,IAAI1gD,EAAI,EAAGA,EAAImqD,EAAWpqD,OAAS,EAAGC,IACrCmqD,EAAWnqD,GAAG0gD,GAAKyJ,EAAWnqD,EAAI,GAAGqC,OACvC8nD,EAAWnqD,GAAG0gD,GAAKyJ,EAAWnqD,EAAI,GAAGqC,WAGzC8nD,EAAaA,EAAWtnC,OAAQunC,GAAcA,EAAU/nD,KAAO+nD,EAAU1J,MAEhC,IAAtByJ,EAAWpqD,aACrB,CAAC,CAAEsC,KAAAA,EAAMq+C,GAAAA,QAGdiK,EAAQ,GACRC,EAAcvoD,MACb,IAAI+nD,KAAaD,EAChBS,EAAcR,EAAU/nD,MAC1BsoD,EAAM3nD,KAAK,CACTX,KAAMuoD,EACNlK,GAAI0J,EAAU/nD,OAIlBuoD,EAAcR,EAAU1J,UAEtBkK,EAAclK,GAChBiK,EAAM3nD,KAAK,CACTX,KAAMuoD,EACNlK,GAAIA,IAIDiK,ECzCM,SAASY,QAAQxwB,OAAQ36B,yDAAU,SAC1C+D,EAAEA,EAAF4Q,EAAKA,GAAMgmB,GACX14B,KAAEA,EAAO8B,EAAE,GAAXu8C,GAAeA,EAAKv8C,EAAEA,EAAEpE,OAAS,GAAjCoqD,WAAqCA,EAAa,IAAO/pD,MAE3DuqD,EAAQT,WAAS7nD,EAAMq+C,EAAIyJ,GAG3BqB,EAAmB,EACnBC,EAAO,GACPC,EAAO,GACPC,EAAW,OACRA,EAAWxnD,EAAEpE,QAAQ,IAExBoE,EAAEwnD,IAAahB,EAAMa,GAAkB9K,IACvCv8C,EAAEwnD,IAAahB,EAAMa,GAAkBnpD,KAEvCopD,EAAKzoD,KAAKmB,EAAEwnD,IACZD,EAAK1oD,KAAK+R,EAAE42C,YAERxnD,EAAEwnD,GAAYhB,EAAMa,GAAkB9K,KAEnCiK,IADLa,GAC8B,MAGlCG,UAGK,CACLxnD,EAAGsnD,EACH12C,EAAG22C,gBCILtkD,SADIoY,IAEJA,IAFI0M,IAGJA,0BACAhK,wCACAtI,kCACAe,mBACEixC,UA2CSrrD,QAAQ,CACnBN,IAAAA,IACAN,IAAAA,IACAwqB,OAAAA,OACArmB,KAAAA,UACA8lB,cACAiiC,OACA3rD,QAAAA,QACA+mD,eAAAA,eACAxvC,kBAAAA,kBACAzT,SAAAA,UAYW8nD,QAAU,gBACrBC,iBACAjE,SAAAA,SACAE,SAAAA,SACAI,KAAAA,KACAE,MAAAA,MACAI,QAAAA,QACAC,cAAAA,cACAoC,cAAAA,cACAQ,QAAAA"} \ No newline at end of file +{"version":3,"file":"ml.min.js","sources":["../node_modules/is-any-array/src/index.js","../node_modules/ml-array-max/lib-es6/index.js","../node_modules/ml-array-min/lib-es6/index.js","../node_modules/ml-array-rescale/lib-es6/index.js","../node_modules/ml-matrix/src/util.js","../node_modules/ml-matrix/src/stat.js","../node_modules/ml-matrix/src/inspect.js","../node_modules/ml-matrix/src/mathOperations.js","../node_modules/ml-matrix/src/matrix.js","../node_modules/ml-matrix/src/views/base.js","../node_modules/ml-matrix/src/views/column.js","../node_modules/ml-matrix/src/views/columnSelection.js","../node_modules/ml-matrix/src/views/flipColumn.js","../node_modules/ml-matrix/src/views/flipRow.js","../node_modules/ml-matrix/src/views/row.js","../node_modules/ml-matrix/src/views/rowSelection.js","../node_modules/ml-matrix/src/views/selection.js","../node_modules/ml-matrix/src/views/sub.js","../node_modules/ml-matrix/src/views/transpose.js","../node_modules/ml-matrix/src/wrap/WrapperMatrix1D.js","../node_modules/ml-matrix/src/wrap/WrapperMatrix2D.js","../node_modules/ml-matrix/src/wrap/wrap.js","../node_modules/ml-matrix/src/dc/lu.js","../node_modules/ml-matrix/src/dc/util.js","../node_modules/ml-matrix/src/dc/qr.js","../node_modules/ml-matrix/src/dc/svd.js","../node_modules/ml-matrix/src/decompositions.js","../node_modules/ml-matrix/src/determinant.js","../node_modules/ml-matrix/src/linearDependencies.js","../node_modules/ml-matrix/src/pseudoInverse.js","../node_modules/ml-matrix/src/covariance.js","../node_modules/ml-matrix/src/correlation.js","../node_modules/ml-matrix/src/dc/evd.js","../node_modules/ml-matrix/src/dc/cholesky.js","../node_modules/ml-matrix/src/dc/nipals.js","../node_modules/ml-array-mean/lib-es6/index.js","../node_modules/ml-cart/src/utils.js","../node_modules/ml-cart/src/TreeNode.js","../node_modules/ml-cart/src/DecisionTreeClassifier.js","../node_modules/ml-cart/src/DecisionTreeRegression.js","../node_modules/random-js/dist/random-js.esm.js","../node_modules/ml-random-forest/src/utils.js","../node_modules/ml-random-forest/src/RandomForestBase.js","../node_modules/ml-random-forest/src/RandomForestClassifier.js","../node_modules/median-quickselect/lib/median-quickselect.min.js","../node_modules/ml-array-median/lib-es6/index.js","../node_modules/ml-random-forest/src/RandomForestRegression.js","../node_modules/ml-pca/src/pca.js","../node_modules/ml-distance-euclidean/lib-es6/euclidean.js","../node_modules/ml-distance-matrix/src/index.js","../node_modules/heap/lib/heap.js","../node_modules/heap/index.js","../node_modules/ml-hclust/src/Cluster.js","../node_modules/ml-hclust/src/agnes.js","../node_modules/ml-nearest-vector/lib-es6/index.js","../node_modules/ml-kmeans/src/utils.js","../node_modules/ml-xsadd/lib-es6/xsadd.js","../node_modules/ml-random/lib-es6/choice.js","../node_modules/ml-random/lib-es6/index.js","../node_modules/ml-kmeans/src/initialization.js","../node_modules/ml-kmeans/src/KMeansResult.js","../node_modules/ml-kmeans/src/kmeans.js","../node_modules/ml-naivebayes/src/utils.js","../node_modules/ml-naivebayes/src/GaussianNB.js","../node_modules/ml-naivebayes/src/MultinomialNB.js","../node_modules/ml-knn/src/KDTree.js","../node_modules/ml-knn/src/index.js","../node_modules/ml-pls/src/utils.js","../node_modules/ml-pls/src/pls.js","../node_modules/ml-pls/src/kopls.js","../node_modules/ml-confusion-matrix/src/index.js","../node_modules/ml-combinations/src/index.js","../node_modules/ml-cross-validation/src/index.js","../node_modules/ml-fnn/FeedForwardNeuralNetwork.js","../node_modules/ml-som/src/node-square.js","../node_modules/ml-som/src/node-hexagonal.js","../node_modules/ml-som/src/index.js","../node_modules/ml-regression-base/src/maybeToPrecision.js","../node_modules/ml-regression-base/src/checkArrayLength.js","../node_modules/ml-regression-base/src/index.js","../node_modules/ml-regression-polynomial/src/index.js","../node_modules/ml-regression-simple-linear/src/index.js","../node_modules/ml-regression-exponential/src/index.js","../node_modules/ml-regression-power/src/index.js","../node_modules/ml-regression-multivariate-linear/src/index.js","../node_modules/ml-kernel-gaussian/gaussian-kernel.js","../node_modules/ml-kernel-polynomial/polynomial-kernel.js","../node_modules/ml-kernel-sigmoid/sigmoid-kernel.js","../node_modules/ml-kernel/src/kernels/anova-kernel.js","../node_modules/ml-kernel/src/kernels/cauchy-kernel.js","../node_modules/ml-kernel/src/kernels/exponential-kernel.js","../node_modules/ml-kernel/src/kernels/histogram-intersection-kernel.js","../node_modules/ml-kernel/src/kernels/laplacian-kernel.js","../node_modules/ml-kernel/src/kernels/multiquadratic-kernel.js","../node_modules/ml-kernel/src/kernels/rational-quadratic-kernel.js","../node_modules/ml-kernel/src/kernel.js","../node_modules/ml-regression-theil-sen/src/index.js","../node_modules/ml-regression-robust-polynomial/src/index.js","../node_modules/ml-levenberg-marquardt/src/errorCalculation.js","../node_modules/ml-levenberg-marquardt/src/step.js","../node_modules/ml-levenberg-marquardt/src/index.js","../node_modules/ml-fcnnls/src/util/selection.js","../node_modules/ml-fcnnls/src/util/sortCollectionSet.js","../node_modules/ml-fcnnls/src/cssls.js","../node_modules/ml-fcnnls/src/initialisation.js","../node_modules/ml-fcnnls/src/util/setDifference.js","../node_modules/ml-fcnnls/src/optimality.js","../node_modules/ml-fcnnls/src/fcnnls.js","../node_modules/ml-fcnnls/src/fcnnlsVector.js","../node_modules/binary-search/index.js","../node_modules/num-sort/index.js","../node_modules/ml-hash-table/src/primeFinder.js","../node_modules/ml-hash-table/src/HashTable.js","../node_modules/ml-sparse-matrix/src/index.js","../node_modules/ml-distance/src/distances/additiveSymmetric.js","../node_modules/ml-distance/src/distances/avg.js","../node_modules/ml-distance/src/distances/bhattacharyya.js","../node_modules/ml-distance/src/distances/canberra.js","../node_modules/ml-distance/src/distances/chebyshev.js","../node_modules/ml-distance/src/distances/clark.js","../node_modules/ml-distance/src/similarities/czekanowski.js","../node_modules/ml-distance/src/distances/czekanowski.js","../node_modules/ml-distance/src/distances/dice.js","../node_modules/ml-distance/src/distances/divergence.js","../node_modules/ml-distance/src/distances/fidelity.js","../node_modules/ml-distance/src/distances/gower.js","../node_modules/ml-distance/src/distances/harmonicMean.js","../node_modules/ml-distance/src/distances/hellinger.js","../node_modules/ml-distance/src/distances/innerProduct.js","../node_modules/ml-distance/src/distances/intersection.js","../node_modules/ml-distance/src/distances/jaccard.js","../node_modules/ml-distance/src/distances/jeffreys.js","../node_modules/ml-distance/src/distances/jensenDifference.js","../node_modules/ml-distance/src/distances/jensenShannon.js","../node_modules/ml-distance/src/distances/kdivergence.js","../node_modules/ml-distance/src/distances/kulczynski.js","../node_modules/ml-distance/src/distances/kullbackLeibler.js","../node_modules/ml-distance/src/distances/kumarHassebrook.js","../node_modules/ml-distance/src/distances/kumarJohnson.js","../node_modules/ml-distance/src/distances/lorentzian.js","../node_modules/ml-distance/src/distances/manhattan.js","../node_modules/ml-distance/src/distances/matusita.js","../node_modules/ml-distance/src/distances/minkowski.js","../node_modules/ml-distance/src/distances/motyka.js","../node_modules/ml-distance/src/distances/neyman.js","../node_modules/ml-distance/src/distances/pearson.js","../node_modules/ml-distance/src/distances/probabilisticSymmetric.js","../node_modules/ml-distance/src/distances/ruzicka.js","../node_modules/ml-distance/src/distances/soergel.js","../node_modules/ml-distance/src/distances/sorensen.js","../node_modules/ml-distance/src/distances/squared.js","../node_modules/ml-distance/src/distances/squaredChord.js","../node_modules/ml-distance/src/distances/taneja.js","../node_modules/ml-distance/src/similarities/tanimoto.js","../node_modules/ml-distance/src/distances/tanimoto.js","../node_modules/ml-distance/src/distances/topsoe.js","../node_modules/ml-distance/src/distances/waveHedges.js","../node_modules/ml-tree-similarity/src/createTree.js","../node_modules/ml-tree-similarity/src/getSimilarity.js","../node_modules/ml-tree-similarity/src/index.js","../node_modules/ml-distance/src/similarities/cosine.js","../node_modules/ml-distance/src/similarities/dice.js","../node_modules/ml-distance/src/similarities/intersection.js","../node_modules/ml-distance/src/similarities/jaccard.js","../node_modules/ml-distance/src/similarities/kulczynski.js","../node_modules/ml-distance/src/similarities/motyka.js","../node_modules/ml-distance/src/similarities/pearson.js","../node_modules/ml-distance/src/similarities/squaredChord.js","../node_modules/ml-performance/src/measures.js","../node_modules/ml-performance/src/index.js","../node_modules/ml-pad-array/src/index.js","../node_modules/ml-savitzky-golay/src/index.js","../node_modules/ml-bit-array/src/creator.js","../node_modules/ml-bit-array/src/index.js","../node_modules/ml-array-mode/lib-es6/index.js","../node_modules/ml-array-normed/lib-es6/index.js","../node_modules/ml-array-sequential-fill/lib-es6/index.js","../node_modules/ml-array-variance/lib-es6/index.js","../node_modules/ml-array-standard-deviation/lib-es6/index.js","../node_modules/ml-array-xy-centroids-merge/src/index.js","../node_modules/ml-arrayxy-closestx/src/index.js","../node_modules/ml-array-xy-max-merge/src/index.js","../node_modules/ml-array-xy-max-y/src/index.js","../node_modules/ml-array-xy-sort-x/src/index.js","../node_modules/ml-arrayxy-uniquex/src/index.js","../node_modules/ml-array-xy-weighted-merge/src/index.js","../node_modules/ml-array-xy-equally-spaced/src/integral.js","../node_modules/ml-array-xy-equally-spaced/src/equallySpacedSmooth.js","../node_modules/ml-array-xy-equally-spaced/src/equallySpacedSlot.js","../node_modules/ml-array-xy-equally-spaced/src/getZones.js","../node_modules/ml-array-xy-equally-spaced/src/index.js","../node_modules/ml-array-xy-filter-x/src/getZones.js","../node_modules/ml-array-xy-filter-x/src/index.js","../src/index.js"],"sourcesContent":["'use strict';\n\nconst toString = Object.prototype.toString;\n\nfunction isAnyArray(object) {\n return toString.call(object).endsWith('Array]');\n}\n\nmodule.exports = isAnyArray;\n","import isArray from 'is-any-array';\n\n/**\n * Computes the maximum of the given values\n * @param {Array} input\n * @return {number}\n */\n\nfunction max(input) {\n if (!isArray(input)) {\n throw new TypeError('input must be an array');\n }\n\n if (input.length === 0) {\n throw new TypeError('input must not be empty');\n }\n\n var max = input[0];\n\n for (var i = 1; i < input.length; i++) {\n if (input[i] > max) max = input[i];\n }\n\n return max;\n}\n\nexport default max;\n","import isArray from 'is-any-array';\n\n/**\n * Computes the minimum of the given values\n * @param {Array} input\n * @return {number}\n */\n\nfunction min(input) {\n if (!isArray(input)) {\n throw new TypeError('input must be an array');\n }\n\n if (input.length === 0) {\n throw new TypeError('input must not be empty');\n }\n\n var min = input[0];\n\n for (var i = 1; i < input.length; i++) {\n if (input[i] < min) min = input[i];\n }\n\n return min;\n}\n\nexport default min;\n","import max from 'ml-array-max';\nimport min from 'ml-array-min';\nimport isArray from 'is-any-array';\n\nfunction rescale(input) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n if (!isArray(input)) {\n throw new TypeError('input must be an array');\n } else if (input.length === 0) {\n throw new TypeError('input must not be empty');\n }\n\n var output;\n\n if (options.output !== undefined) {\n if (!isArray(options.output)) {\n throw new TypeError('output option must be an array if specified');\n }\n\n output = options.output;\n } else {\n output = new Array(input.length);\n }\n\n var currentMin = min(input);\n var currentMax = max(input);\n\n if (currentMin === currentMax) {\n throw new RangeError('minimum and maximum input values are equal. Cannot rescale a constant array');\n }\n\n var _options$min = options.min,\n minValue = _options$min === void 0 ? options.autoMinMax ? currentMin : 0 : _options$min,\n _options$max = options.max,\n maxValue = _options$max === void 0 ? options.autoMinMax ? currentMax : 1 : _options$max;\n\n if (minValue >= maxValue) {\n throw new RangeError('min option must be smaller than max option');\n }\n\n var factor = (maxValue - minValue) / (currentMax - currentMin);\n\n for (var i = 0; i < input.length; i++) {\n output[i] = (input[i] - currentMin) * factor + minValue;\n }\n\n return output;\n}\n\nexport default rescale;\n","/**\n * @private\n * Check that a row index is not out of bounds\n * @param {Matrix} matrix\n * @param {number} index\n * @param {boolean} [outer]\n */\nexport function checkRowIndex(matrix, index, outer) {\n let max = outer ? matrix.rows : matrix.rows - 1;\n if (index < 0 || index > max) {\n throw new RangeError('Row index out of range');\n }\n}\n\n/**\n * @private\n * Check that a column index is not out of bounds\n * @param {Matrix} matrix\n * @param {number} index\n * @param {boolean} [outer]\n */\nexport function checkColumnIndex(matrix, index, outer) {\n let max = outer ? matrix.columns : matrix.columns - 1;\n if (index < 0 || index > max) {\n throw new RangeError('Column index out of range');\n }\n}\n\n/**\n * @private\n * Check that the provided vector is an array with the right length\n * @param {Matrix} matrix\n * @param {Array|Matrix} vector\n * @return {Array}\n * @throws {RangeError}\n */\nexport function checkRowVector(matrix, vector) {\n if (vector.to1DArray) {\n vector = vector.to1DArray();\n }\n if (vector.length !== matrix.columns) {\n throw new RangeError(\n 'vector size must be the same as the number of columns',\n );\n }\n return vector;\n}\n\n/**\n * @private\n * Check that the provided vector is an array with the right length\n * @param {Matrix} matrix\n * @param {Array|Matrix} vector\n * @return {Array}\n * @throws {RangeError}\n */\nexport function checkColumnVector(matrix, vector) {\n if (vector.to1DArray) {\n vector = vector.to1DArray();\n }\n if (vector.length !== matrix.rows) {\n throw new RangeError('vector size must be the same as the number of rows');\n }\n return vector;\n}\n\nexport function checkIndices(matrix, rowIndices, columnIndices) {\n return {\n row: checkRowIndices(matrix, rowIndices),\n column: checkColumnIndices(matrix, columnIndices),\n };\n}\n\nexport function checkRowIndices(matrix, rowIndices) {\n if (typeof rowIndices !== 'object') {\n throw new TypeError('unexpected type for row indices');\n }\n\n let rowOut = rowIndices.some((r) => {\n return r < 0 || r >= matrix.rows;\n });\n\n if (rowOut) {\n throw new RangeError('row indices are out of range');\n }\n\n if (!Array.isArray(rowIndices)) rowIndices = Array.from(rowIndices);\n\n return rowIndices;\n}\n\nexport function checkColumnIndices(matrix, columnIndices) {\n if (typeof columnIndices !== 'object') {\n throw new TypeError('unexpected type for column indices');\n }\n\n let columnOut = columnIndices.some((c) => {\n return c < 0 || c >= matrix.columns;\n });\n\n if (columnOut) {\n throw new RangeError('column indices are out of range');\n }\n if (!Array.isArray(columnIndices)) columnIndices = Array.from(columnIndices);\n\n return columnIndices;\n}\n\nexport function checkRange(matrix, startRow, endRow, startColumn, endColumn) {\n if (arguments.length !== 5) {\n throw new RangeError('expected 4 arguments');\n }\n checkNumber('startRow', startRow);\n checkNumber('endRow', endRow);\n checkNumber('startColumn', startColumn);\n checkNumber('endColumn', endColumn);\n if (\n startRow > endRow ||\n startColumn > endColumn ||\n startRow < 0 ||\n startRow >= matrix.rows ||\n endRow < 0 ||\n endRow >= matrix.rows ||\n startColumn < 0 ||\n startColumn >= matrix.columns ||\n endColumn < 0 ||\n endColumn >= matrix.columns\n ) {\n throw new RangeError('Submatrix indices are out of range');\n }\n}\n\nexport function newArray(length, value = 0) {\n let array = [];\n for (let i = 0; i < length; i++) {\n array.push(value);\n }\n return array;\n}\n\nfunction checkNumber(name, value) {\n if (typeof value !== 'number') {\n throw new TypeError(`${name} must be a number`);\n }\n}\n","import { newArray } from './util';\n\nexport function sumByRow(matrix) {\n let sum = newArray(matrix.rows);\n for (let i = 0; i < matrix.rows; ++i) {\n for (let j = 0; j < matrix.columns; ++j) {\n sum[i] += matrix.get(i, j);\n }\n }\n return sum;\n}\n\nexport function sumByColumn(matrix) {\n let sum = newArray(matrix.columns);\n for (let i = 0; i < matrix.rows; ++i) {\n for (let j = 0; j < matrix.columns; ++j) {\n sum[j] += matrix.get(i, j);\n }\n }\n return sum;\n}\n\nexport function sumAll(matrix) {\n let v = 0;\n for (let i = 0; i < matrix.rows; i++) {\n for (let j = 0; j < matrix.columns; j++) {\n v += matrix.get(i, j);\n }\n }\n return v;\n}\n\nexport function productByRow(matrix) {\n let sum = newArray(matrix.rows, 1);\n for (let i = 0; i < matrix.rows; ++i) {\n for (let j = 0; j < matrix.columns; ++j) {\n sum[i] *= matrix.get(i, j);\n }\n }\n return sum;\n}\n\nexport function productByColumn(matrix) {\n let sum = newArray(matrix.columns, 1);\n for (let i = 0; i < matrix.rows; ++i) {\n for (let j = 0; j < matrix.columns; ++j) {\n sum[j] *= matrix.get(i, j);\n }\n }\n return sum;\n}\n\nexport function productAll(matrix) {\n let v = 1;\n for (let i = 0; i < matrix.rows; i++) {\n for (let j = 0; j < matrix.columns; j++) {\n v *= matrix.get(i, j);\n }\n }\n return v;\n}\n\nexport function varianceByRow(matrix, unbiased, mean) {\n const rows = matrix.rows;\n const cols = matrix.columns;\n const variance = [];\n\n for (let i = 0; i < rows; i++) {\n let sum1 = 0;\n let sum2 = 0;\n let x = 0;\n for (let j = 0; j < cols; j++) {\n x = matrix.get(i, j) - mean[i];\n sum1 += x;\n sum2 += x * x;\n }\n if (unbiased) {\n variance.push((sum2 - (sum1 * sum1) / cols) / (cols - 1));\n } else {\n variance.push((sum2 - (sum1 * sum1) / cols) / cols);\n }\n }\n return variance;\n}\n\nexport function varianceByColumn(matrix, unbiased, mean) {\n const rows = matrix.rows;\n const cols = matrix.columns;\n const variance = [];\n\n for (let j = 0; j < cols; j++) {\n let sum1 = 0;\n let sum2 = 0;\n let x = 0;\n for (let i = 0; i < rows; i++) {\n x = matrix.get(i, j) - mean[j];\n sum1 += x;\n sum2 += x * x;\n }\n if (unbiased) {\n variance.push((sum2 - (sum1 * sum1) / rows) / (rows - 1));\n } else {\n variance.push((sum2 - (sum1 * sum1) / rows) / rows);\n }\n }\n return variance;\n}\n\nexport function varianceAll(matrix, unbiased, mean) {\n const rows = matrix.rows;\n const cols = matrix.columns;\n const size = rows * cols;\n\n let sum1 = 0;\n let sum2 = 0;\n let x = 0;\n for (let i = 0; i < rows; i++) {\n for (let j = 0; j < cols; j++) {\n x = matrix.get(i, j) - mean;\n sum1 += x;\n sum2 += x * x;\n }\n }\n if (unbiased) {\n return (sum2 - (sum1 * sum1) / size) / (size - 1);\n } else {\n return (sum2 - (sum1 * sum1) / size) / size;\n }\n}\n\nexport function centerByRow(matrix, mean) {\n for (let i = 0; i < matrix.rows; i++) {\n for (let j = 0; j < matrix.columns; j++) {\n matrix.set(i, j, matrix.get(i, j) - mean[i]);\n }\n }\n}\n\nexport function centerByColumn(matrix, mean) {\n for (let i = 0; i < matrix.rows; i++) {\n for (let j = 0; j < matrix.columns; j++) {\n matrix.set(i, j, matrix.get(i, j) - mean[j]);\n }\n }\n}\n\nexport function centerAll(matrix, mean) {\n for (let i = 0; i < matrix.rows; i++) {\n for (let j = 0; j < matrix.columns; j++) {\n matrix.set(i, j, matrix.get(i, j) - mean);\n }\n }\n}\n\nexport function getScaleByRow(matrix) {\n const scale = [];\n for (let i = 0; i < matrix.rows; i++) {\n let sum = 0;\n for (let j = 0; j < matrix.columns; j++) {\n sum += Math.pow(matrix.get(i, j), 2) / (matrix.columns - 1);\n }\n scale.push(Math.sqrt(sum));\n }\n return scale;\n}\n\nexport function scaleByRow(matrix, scale) {\n for (let i = 0; i < matrix.rows; i++) {\n for (let j = 0; j < matrix.columns; j++) {\n matrix.set(i, j, matrix.get(i, j) / scale[i]);\n }\n }\n}\n\nexport function getScaleByColumn(matrix) {\n const scale = [];\n for (let j = 0; j < matrix.columns; j++) {\n let sum = 0;\n for (let i = 0; i < matrix.rows; i++) {\n sum += Math.pow(matrix.get(i, j), 2) / (matrix.rows - 1);\n }\n scale.push(Math.sqrt(sum));\n }\n return scale;\n}\n\nexport function scaleByColumn(matrix, scale) {\n for (let i = 0; i < matrix.rows; i++) {\n for (let j = 0; j < matrix.columns; j++) {\n matrix.set(i, j, matrix.get(i, j) / scale[j]);\n }\n }\n}\n\nexport function getScaleAll(matrix) {\n const divider = matrix.size - 1;\n let sum = 0;\n for (let j = 0; j < matrix.columns; j++) {\n for (let i = 0; i < matrix.rows; i++) {\n sum += Math.pow(matrix.get(i, j), 2) / divider;\n }\n }\n return Math.sqrt(sum);\n}\n\nexport function scaleAll(matrix, scale) {\n for (let i = 0; i < matrix.rows; i++) {\n for (let j = 0; j < matrix.columns; j++) {\n matrix.set(i, j, matrix.get(i, j) / scale);\n }\n }\n}\n","export function inspectMatrix() {\n const indent = ' '.repeat(2);\n const indentData = ' '.repeat(4);\n return `${this.constructor.name} {\n${indent}[\n${indentData}${inspectData(this, indentData)}\n${indent}]\n${indent}rows: ${this.rows}\n${indent}columns: ${this.columns}\n}`;\n}\n\nconst maxRows = 15;\nconst maxColumns = 10;\nconst maxNumSize = 8;\n\nfunction inspectData(matrix, indent) {\n const { rows, columns } = matrix;\n const maxI = Math.min(rows, maxRows);\n const maxJ = Math.min(columns, maxColumns);\n const result = [];\n for (let i = 0; i < maxI; i++) {\n let line = [];\n for (let j = 0; j < maxJ; j++) {\n line.push(formatNumber(matrix.get(i, j)));\n }\n result.push(`${line.join(' ')}`);\n }\n if (maxJ !== columns) {\n result[result.length - 1] += ` ... ${columns - maxColumns} more columns`;\n }\n if (maxI !== rows) {\n result.push(`... ${rows - maxRows} more rows`);\n }\n return result.join(`\\n${indent}`);\n}\n\nfunction formatNumber(num) {\n const numStr = String(num);\n if (numStr.length <= maxNumSize) {\n return numStr.padEnd(maxNumSize, ' ');\n }\n const precise = num.toPrecision(maxNumSize - 2);\n if (precise.length <= maxNumSize) {\n return precise;\n }\n const exponential = num.toExponential(maxNumSize - 2);\n const eIndex = exponential.indexOf('e');\n const e = exponential.substring(eIndex);\n return exponential.substring(0, maxNumSize - e.length) + e;\n}\n","export function installMathOperations(AbstractMatrix, Matrix) {\n AbstractMatrix.prototype.add = function add(value) {\n if (typeof value === 'number') return this.addS(value);\n return this.addM(value);\n };\n\n AbstractMatrix.prototype.addS = function addS(value) {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) + value);\n }\n }\n return this;\n };\n\n AbstractMatrix.prototype.addM = function addM(matrix) {\n matrix = Matrix.checkMatrix(matrix);\n if (this.rows !== matrix.rows ||\n this.columns !== matrix.columns) {\n throw new RangeError('Matrices dimensions must be equal');\n }\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) + matrix.get(i, j));\n }\n }\n return this;\n };\n\n AbstractMatrix.add = function add(matrix, value) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.add(value);\n };\n\n AbstractMatrix.prototype.sub = function sub(value) {\n if (typeof value === 'number') return this.subS(value);\n return this.subM(value);\n };\n\n AbstractMatrix.prototype.subS = function subS(value) {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) - value);\n }\n }\n return this;\n };\n\n AbstractMatrix.prototype.subM = function subM(matrix) {\n matrix = Matrix.checkMatrix(matrix);\n if (this.rows !== matrix.rows ||\n this.columns !== matrix.columns) {\n throw new RangeError('Matrices dimensions must be equal');\n }\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) - matrix.get(i, j));\n }\n }\n return this;\n };\n\n AbstractMatrix.sub = function sub(matrix, value) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.sub(value);\n };\n AbstractMatrix.prototype.subtract = AbstractMatrix.prototype.sub;\n AbstractMatrix.prototype.subtractS = AbstractMatrix.prototype.subS;\n AbstractMatrix.prototype.subtractM = AbstractMatrix.prototype.subM;\n AbstractMatrix.subtract = AbstractMatrix.sub;\n\n AbstractMatrix.prototype.mul = function mul(value) {\n if (typeof value === 'number') return this.mulS(value);\n return this.mulM(value);\n };\n\n AbstractMatrix.prototype.mulS = function mulS(value) {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) * value);\n }\n }\n return this;\n };\n\n AbstractMatrix.prototype.mulM = function mulM(matrix) {\n matrix = Matrix.checkMatrix(matrix);\n if (this.rows !== matrix.rows ||\n this.columns !== matrix.columns) {\n throw new RangeError('Matrices dimensions must be equal');\n }\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) * matrix.get(i, j));\n }\n }\n return this;\n };\n\n AbstractMatrix.mul = function mul(matrix, value) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.mul(value);\n };\n AbstractMatrix.prototype.multiply = AbstractMatrix.prototype.mul;\n AbstractMatrix.prototype.multiplyS = AbstractMatrix.prototype.mulS;\n AbstractMatrix.prototype.multiplyM = AbstractMatrix.prototype.mulM;\n AbstractMatrix.multiply = AbstractMatrix.mul;\n\n AbstractMatrix.prototype.div = function div(value) {\n if (typeof value === 'number') return this.divS(value);\n return this.divM(value);\n };\n\n AbstractMatrix.prototype.divS = function divS(value) {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) / value);\n }\n }\n return this;\n };\n\n AbstractMatrix.prototype.divM = function divM(matrix) {\n matrix = Matrix.checkMatrix(matrix);\n if (this.rows !== matrix.rows ||\n this.columns !== matrix.columns) {\n throw new RangeError('Matrices dimensions must be equal');\n }\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) / matrix.get(i, j));\n }\n }\n return this;\n };\n\n AbstractMatrix.div = function div(matrix, value) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.div(value);\n };\n AbstractMatrix.prototype.divide = AbstractMatrix.prototype.div;\n AbstractMatrix.prototype.divideS = AbstractMatrix.prototype.divS;\n AbstractMatrix.prototype.divideM = AbstractMatrix.prototype.divM;\n AbstractMatrix.divide = AbstractMatrix.div;\n\n AbstractMatrix.prototype.mod = function mod(value) {\n if (typeof value === 'number') return this.modS(value);\n return this.modM(value);\n };\n\n AbstractMatrix.prototype.modS = function modS(value) {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) % value);\n }\n }\n return this;\n };\n\n AbstractMatrix.prototype.modM = function modM(matrix) {\n matrix = Matrix.checkMatrix(matrix);\n if (this.rows !== matrix.rows ||\n this.columns !== matrix.columns) {\n throw new RangeError('Matrices dimensions must be equal');\n }\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) % matrix.get(i, j));\n }\n }\n return this;\n };\n\n AbstractMatrix.mod = function mod(matrix, value) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.mod(value);\n };\n AbstractMatrix.prototype.modulus = AbstractMatrix.prototype.mod;\n AbstractMatrix.prototype.modulusS = AbstractMatrix.prototype.modS;\n AbstractMatrix.prototype.modulusM = AbstractMatrix.prototype.modM;\n AbstractMatrix.modulus = AbstractMatrix.mod;\n\n AbstractMatrix.prototype.and = function and(value) {\n if (typeof value === 'number') return this.andS(value);\n return this.andM(value);\n };\n\n AbstractMatrix.prototype.andS = function andS(value) {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) & value);\n }\n }\n return this;\n };\n\n AbstractMatrix.prototype.andM = function andM(matrix) {\n matrix = Matrix.checkMatrix(matrix);\n if (this.rows !== matrix.rows ||\n this.columns !== matrix.columns) {\n throw new RangeError('Matrices dimensions must be equal');\n }\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) & matrix.get(i, j));\n }\n }\n return this;\n };\n\n AbstractMatrix.and = function and(matrix, value) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.and(value);\n };\n\n AbstractMatrix.prototype.or = function or(value) {\n if (typeof value === 'number') return this.orS(value);\n return this.orM(value);\n };\n\n AbstractMatrix.prototype.orS = function orS(value) {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) | value);\n }\n }\n return this;\n };\n\n AbstractMatrix.prototype.orM = function orM(matrix) {\n matrix = Matrix.checkMatrix(matrix);\n if (this.rows !== matrix.rows ||\n this.columns !== matrix.columns) {\n throw new RangeError('Matrices dimensions must be equal');\n }\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) | matrix.get(i, j));\n }\n }\n return this;\n };\n\n AbstractMatrix.or = function or(matrix, value) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.or(value);\n };\n\n AbstractMatrix.prototype.xor = function xor(value) {\n if (typeof value === 'number') return this.xorS(value);\n return this.xorM(value);\n };\n\n AbstractMatrix.prototype.xorS = function xorS(value) {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) ^ value);\n }\n }\n return this;\n };\n\n AbstractMatrix.prototype.xorM = function xorM(matrix) {\n matrix = Matrix.checkMatrix(matrix);\n if (this.rows !== matrix.rows ||\n this.columns !== matrix.columns) {\n throw new RangeError('Matrices dimensions must be equal');\n }\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) ^ matrix.get(i, j));\n }\n }\n return this;\n };\n\n AbstractMatrix.xor = function xor(matrix, value) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.xor(value);\n };\n\n AbstractMatrix.prototype.leftShift = function leftShift(value) {\n if (typeof value === 'number') return this.leftShiftS(value);\n return this.leftShiftM(value);\n };\n\n AbstractMatrix.prototype.leftShiftS = function leftShiftS(value) {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) << value);\n }\n }\n return this;\n };\n\n AbstractMatrix.prototype.leftShiftM = function leftShiftM(matrix) {\n matrix = Matrix.checkMatrix(matrix);\n if (this.rows !== matrix.rows ||\n this.columns !== matrix.columns) {\n throw new RangeError('Matrices dimensions must be equal');\n }\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) << matrix.get(i, j));\n }\n }\n return this;\n };\n\n AbstractMatrix.leftShift = function leftShift(matrix, value) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.leftShift(value);\n };\n\n AbstractMatrix.prototype.signPropagatingRightShift = function signPropagatingRightShift(value) {\n if (typeof value === 'number') return this.signPropagatingRightShiftS(value);\n return this.signPropagatingRightShiftM(value);\n };\n\n AbstractMatrix.prototype.signPropagatingRightShiftS = function signPropagatingRightShiftS(value) {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) >> value);\n }\n }\n return this;\n };\n\n AbstractMatrix.prototype.signPropagatingRightShiftM = function signPropagatingRightShiftM(matrix) {\n matrix = Matrix.checkMatrix(matrix);\n if (this.rows !== matrix.rows ||\n this.columns !== matrix.columns) {\n throw new RangeError('Matrices dimensions must be equal');\n }\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) >> matrix.get(i, j));\n }\n }\n return this;\n };\n\n AbstractMatrix.signPropagatingRightShift = function signPropagatingRightShift(matrix, value) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.signPropagatingRightShift(value);\n };\n\n AbstractMatrix.prototype.rightShift = function rightShift(value) {\n if (typeof value === 'number') return this.rightShiftS(value);\n return this.rightShiftM(value);\n };\n\n AbstractMatrix.prototype.rightShiftS = function rightShiftS(value) {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) >>> value);\n }\n }\n return this;\n };\n\n AbstractMatrix.prototype.rightShiftM = function rightShiftM(matrix) {\n matrix = Matrix.checkMatrix(matrix);\n if (this.rows !== matrix.rows ||\n this.columns !== matrix.columns) {\n throw new RangeError('Matrices dimensions must be equal');\n }\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) >>> matrix.get(i, j));\n }\n }\n return this;\n };\n\n AbstractMatrix.rightShift = function rightShift(matrix, value) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.rightShift(value);\n };\n AbstractMatrix.prototype.zeroFillRightShift = AbstractMatrix.prototype.rightShift;\n AbstractMatrix.prototype.zeroFillRightShiftS = AbstractMatrix.prototype.rightShiftS;\n AbstractMatrix.prototype.zeroFillRightShiftM = AbstractMatrix.prototype.rightShiftM;\n AbstractMatrix.zeroFillRightShift = AbstractMatrix.rightShift;\n\n AbstractMatrix.prototype.not = function not() {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, ~(this.get(i, j)));\n }\n }\n return this;\n };\n\n AbstractMatrix.not = function not(matrix) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.not();\n };\n\n AbstractMatrix.prototype.abs = function abs() {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, Math.abs(this.get(i, j)));\n }\n }\n return this;\n };\n\n AbstractMatrix.abs = function abs(matrix) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.abs();\n };\n\n AbstractMatrix.prototype.acos = function acos() {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, Math.acos(this.get(i, j)));\n }\n }\n return this;\n };\n\n AbstractMatrix.acos = function acos(matrix) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.acos();\n };\n\n AbstractMatrix.prototype.acosh = function acosh() {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, Math.acosh(this.get(i, j)));\n }\n }\n return this;\n };\n\n AbstractMatrix.acosh = function acosh(matrix) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.acosh();\n };\n\n AbstractMatrix.prototype.asin = function asin() {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, Math.asin(this.get(i, j)));\n }\n }\n return this;\n };\n\n AbstractMatrix.asin = function asin(matrix) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.asin();\n };\n\n AbstractMatrix.prototype.asinh = function asinh() {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, Math.asinh(this.get(i, j)));\n }\n }\n return this;\n };\n\n AbstractMatrix.asinh = function asinh(matrix) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.asinh();\n };\n\n AbstractMatrix.prototype.atan = function atan() {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, Math.atan(this.get(i, j)));\n }\n }\n return this;\n };\n\n AbstractMatrix.atan = function atan(matrix) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.atan();\n };\n\n AbstractMatrix.prototype.atanh = function atanh() {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, Math.atanh(this.get(i, j)));\n }\n }\n return this;\n };\n\n AbstractMatrix.atanh = function atanh(matrix) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.atanh();\n };\n\n AbstractMatrix.prototype.cbrt = function cbrt() {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, Math.cbrt(this.get(i, j)));\n }\n }\n return this;\n };\n\n AbstractMatrix.cbrt = function cbrt(matrix) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.cbrt();\n };\n\n AbstractMatrix.prototype.ceil = function ceil() {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, Math.ceil(this.get(i, j)));\n }\n }\n return this;\n };\n\n AbstractMatrix.ceil = function ceil(matrix) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.ceil();\n };\n\n AbstractMatrix.prototype.clz32 = function clz32() {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, Math.clz32(this.get(i, j)));\n }\n }\n return this;\n };\n\n AbstractMatrix.clz32 = function clz32(matrix) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.clz32();\n };\n\n AbstractMatrix.prototype.cos = function cos() {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, Math.cos(this.get(i, j)));\n }\n }\n return this;\n };\n\n AbstractMatrix.cos = function cos(matrix) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.cos();\n };\n\n AbstractMatrix.prototype.cosh = function cosh() {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, Math.cosh(this.get(i, j)));\n }\n }\n return this;\n };\n\n AbstractMatrix.cosh = function cosh(matrix) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.cosh();\n };\n\n AbstractMatrix.prototype.exp = function exp() {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, Math.exp(this.get(i, j)));\n }\n }\n return this;\n };\n\n AbstractMatrix.exp = function exp(matrix) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.exp();\n };\n\n AbstractMatrix.prototype.expm1 = function expm1() {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, Math.expm1(this.get(i, j)));\n }\n }\n return this;\n };\n\n AbstractMatrix.expm1 = function expm1(matrix) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.expm1();\n };\n\n AbstractMatrix.prototype.floor = function floor() {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, Math.floor(this.get(i, j)));\n }\n }\n return this;\n };\n\n AbstractMatrix.floor = function floor(matrix) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.floor();\n };\n\n AbstractMatrix.prototype.fround = function fround() {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, Math.fround(this.get(i, j)));\n }\n }\n return this;\n };\n\n AbstractMatrix.fround = function fround(matrix) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.fround();\n };\n\n AbstractMatrix.prototype.log = function log() {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, Math.log(this.get(i, j)));\n }\n }\n return this;\n };\n\n AbstractMatrix.log = function log(matrix) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.log();\n };\n\n AbstractMatrix.prototype.log1p = function log1p() {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, Math.log1p(this.get(i, j)));\n }\n }\n return this;\n };\n\n AbstractMatrix.log1p = function log1p(matrix) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.log1p();\n };\n\n AbstractMatrix.prototype.log10 = function log10() {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, Math.log10(this.get(i, j)));\n }\n }\n return this;\n };\n\n AbstractMatrix.log10 = function log10(matrix) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.log10();\n };\n\n AbstractMatrix.prototype.log2 = function log2() {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, Math.log2(this.get(i, j)));\n }\n }\n return this;\n };\n\n AbstractMatrix.log2 = function log2(matrix) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.log2();\n };\n\n AbstractMatrix.prototype.round = function round() {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, Math.round(this.get(i, j)));\n }\n }\n return this;\n };\n\n AbstractMatrix.round = function round(matrix) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.round();\n };\n\n AbstractMatrix.prototype.sign = function sign() {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, Math.sign(this.get(i, j)));\n }\n }\n return this;\n };\n\n AbstractMatrix.sign = function sign(matrix) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.sign();\n };\n\n AbstractMatrix.prototype.sin = function sin() {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, Math.sin(this.get(i, j)));\n }\n }\n return this;\n };\n\n AbstractMatrix.sin = function sin(matrix) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.sin();\n };\n\n AbstractMatrix.prototype.sinh = function sinh() {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, Math.sinh(this.get(i, j)));\n }\n }\n return this;\n };\n\n AbstractMatrix.sinh = function sinh(matrix) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.sinh();\n };\n\n AbstractMatrix.prototype.sqrt = function sqrt() {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, Math.sqrt(this.get(i, j)));\n }\n }\n return this;\n };\n\n AbstractMatrix.sqrt = function sqrt(matrix) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.sqrt();\n };\n\n AbstractMatrix.prototype.tan = function tan() {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, Math.tan(this.get(i, j)));\n }\n }\n return this;\n };\n\n AbstractMatrix.tan = function tan(matrix) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.tan();\n };\n\n AbstractMatrix.prototype.tanh = function tanh() {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, Math.tanh(this.get(i, j)));\n }\n }\n return this;\n };\n\n AbstractMatrix.tanh = function tanh(matrix) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.tanh();\n };\n\n AbstractMatrix.prototype.trunc = function trunc() {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, Math.trunc(this.get(i, j)));\n }\n }\n return this;\n };\n\n AbstractMatrix.trunc = function trunc(matrix) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.trunc();\n };\n\n AbstractMatrix.pow = function pow(matrix, arg0) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.pow(arg0);\n };\n\n AbstractMatrix.prototype.pow = function pow(value) {\n if (typeof value === 'number') return this.powS(value);\n return this.powM(value);\n };\n\n AbstractMatrix.prototype.powS = function powS(value) {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, Math.pow(this.get(i, j), value));\n }\n }\n return this;\n };\n\n AbstractMatrix.prototype.powM = function powM(matrix) {\n matrix = Matrix.checkMatrix(matrix);\n if (this.rows !== matrix.rows ||\n this.columns !== matrix.columns) {\n throw new RangeError('Matrices dimensions must be equal');\n }\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, Math.pow(this.get(i, j), matrix.get(i, j)));\n }\n }\n return this;\n };\n}\n","import rescale from 'ml-array-rescale';\n\nimport {\n checkRowVector,\n checkRowIndex,\n checkColumnIndex,\n checkColumnVector,\n checkRange,\n checkIndices,\n} from './util';\nimport {\n sumByRow,\n sumByColumn,\n sumAll,\n productByRow,\n productByColumn,\n productAll,\n varianceByRow,\n varianceByColumn,\n varianceAll,\n centerByRow,\n centerByColumn,\n centerAll,\n scaleByRow,\n scaleByColumn,\n scaleAll,\n getScaleByRow,\n getScaleByColumn,\n getScaleAll,\n} from './stat';\nimport { inspectMatrix } from './inspect';\nimport { installMathOperations } from './mathOperations';\n\nexport class AbstractMatrix {\n static from1DArray(newRows, newColumns, newData) {\n let length = newRows * newColumns;\n if (length !== newData.length) {\n throw new RangeError('data length does not match given dimensions');\n }\n let newMatrix = new Matrix(newRows, newColumns);\n for (let row = 0; row < newRows; row++) {\n for (let column = 0; column < newColumns; column++) {\n newMatrix.set(row, column, newData[row * newColumns + column]);\n }\n }\n return newMatrix;\n }\n\n static rowVector(newData) {\n let vector = new Matrix(1, newData.length);\n for (let i = 0; i < newData.length; i++) {\n vector.set(0, i, newData[i]);\n }\n return vector;\n }\n\n static columnVector(newData) {\n let vector = new Matrix(newData.length, 1);\n for (let i = 0; i < newData.length; i++) {\n vector.set(i, 0, newData[i]);\n }\n return vector;\n }\n\n static zeros(rows, columns) {\n return new Matrix(rows, columns);\n }\n\n static ones(rows, columns) {\n return new Matrix(rows, columns).fill(1);\n }\n\n static rand(rows, columns, options = {}) {\n if (typeof options !== 'object') {\n throw new TypeError('options must be an object');\n }\n const { random = Math.random } = options;\n let matrix = new Matrix(rows, columns);\n for (let i = 0; i < rows; i++) {\n for (let j = 0; j < columns; j++) {\n matrix.set(i, j, random());\n }\n }\n return matrix;\n }\n\n static randInt(rows, columns, options = {}) {\n if (typeof options !== 'object') {\n throw new TypeError('options must be an object');\n }\n const { min = 0, max = 1000, random = Math.random } = options;\n if (!Number.isInteger(min)) throw new TypeError('min must be an integer');\n if (!Number.isInteger(max)) throw new TypeError('max must be an integer');\n if (min >= max) throw new RangeError('min must be smaller than max');\n let interval = max - min;\n let matrix = new Matrix(rows, columns);\n for (let i = 0; i < rows; i++) {\n for (let j = 0; j < columns; j++) {\n let value = min + Math.round(random() * interval);\n matrix.set(i, j, value);\n }\n }\n return matrix;\n }\n\n static eye(rows, columns, value) {\n if (columns === undefined) columns = rows;\n if (value === undefined) value = 1;\n let min = Math.min(rows, columns);\n let matrix = this.zeros(rows, columns);\n for (let i = 0; i < min; i++) {\n matrix.set(i, i, value);\n }\n return matrix;\n }\n\n static diag(data, rows, columns) {\n let l = data.length;\n if (rows === undefined) rows = l;\n if (columns === undefined) columns = rows;\n let min = Math.min(l, rows, columns);\n let matrix = this.zeros(rows, columns);\n for (let i = 0; i < min; i++) {\n matrix.set(i, i, data[i]);\n }\n return matrix;\n }\n\n static min(matrix1, matrix2) {\n matrix1 = this.checkMatrix(matrix1);\n matrix2 = this.checkMatrix(matrix2);\n let rows = matrix1.rows;\n let columns = matrix1.columns;\n let result = new Matrix(rows, columns);\n for (let i = 0; i < rows; i++) {\n for (let j = 0; j < columns; j++) {\n result.set(i, j, Math.min(matrix1.get(i, j), matrix2.get(i, j)));\n }\n }\n return result;\n }\n\n static max(matrix1, matrix2) {\n matrix1 = this.checkMatrix(matrix1);\n matrix2 = this.checkMatrix(matrix2);\n let rows = matrix1.rows;\n let columns = matrix1.columns;\n let result = new this(rows, columns);\n for (let i = 0; i < rows; i++) {\n for (let j = 0; j < columns; j++) {\n result.set(i, j, Math.max(matrix1.get(i, j), matrix2.get(i, j)));\n }\n }\n return result;\n }\n\n static checkMatrix(value) {\n return AbstractMatrix.isMatrix(value) ? value : new Matrix(value);\n }\n\n static isMatrix(value) {\n return value != null && value.klass === 'Matrix';\n }\n\n get size() {\n return this.rows * this.columns;\n }\n\n apply(callback) {\n if (typeof callback !== 'function') {\n throw new TypeError('callback must be a function');\n }\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n callback.call(this, i, j);\n }\n }\n return this;\n }\n\n to1DArray() {\n let array = [];\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n array.push(this.get(i, j));\n }\n }\n return array;\n }\n\n to2DArray() {\n let copy = [];\n for (let i = 0; i < this.rows; i++) {\n copy.push([]);\n for (let j = 0; j < this.columns; j++) {\n copy[i].push(this.get(i, j));\n }\n }\n return copy;\n }\n\n toJSON() {\n return this.to2DArray();\n }\n\n isRowVector() {\n return this.rows === 1;\n }\n\n isColumnVector() {\n return this.columns === 1;\n }\n\n isVector() {\n return this.rows === 1 || this.columns === 1;\n }\n\n isSquare() {\n return this.rows === this.columns;\n }\n\n isSymmetric() {\n if (this.isSquare()) {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j <= i; j++) {\n if (this.get(i, j) !== this.get(j, i)) {\n return false;\n }\n }\n }\n return true;\n }\n return false;\n }\n\n isEchelonForm() {\n let i = 0;\n let j = 0;\n let previousColumn = -1;\n let isEchelonForm = true;\n let checked = false;\n while (i < this.rows && isEchelonForm) {\n j = 0;\n checked = false;\n while (j < this.columns && checked === false) {\n if (this.get(i, j) === 0) {\n j++;\n } else if (this.get(i, j) === 1 && j > previousColumn) {\n checked = true;\n previousColumn = j;\n } else {\n isEchelonForm = false;\n checked = true;\n }\n }\n i++;\n }\n return isEchelonForm;\n }\n\n isReducedEchelonForm() {\n let i = 0;\n let j = 0;\n let previousColumn = -1;\n let isReducedEchelonForm = true;\n let checked = false;\n while (i < this.rows && isReducedEchelonForm) {\n j = 0;\n checked = false;\n while (j < this.columns && checked === false) {\n if (this.get(i, j) === 0) {\n j++;\n } else if (this.get(i, j) === 1 && j > previousColumn) {\n checked = true;\n previousColumn = j;\n } else {\n isReducedEchelonForm = false;\n checked = true;\n }\n }\n for (let k = j + 1; k < this.rows; k++) {\n if (this.get(i, k) !== 0) {\n isReducedEchelonForm = false;\n }\n }\n i++;\n }\n return isReducedEchelonForm;\n }\n\n echelonForm() {\n let result = this.clone();\n let h = 0;\n let k = 0;\n while (h < result.rows && k < result.columns) {\n let iMax = h;\n for (let i = h; i < result.rows; i++) {\n if (result.get(i, k) > result.get(iMax, k)) {\n iMax = i;\n }\n }\n if (result.get(iMax, k) === 0) {\n k++;\n } else {\n result.swapRows(h, iMax);\n let tmp = result.get(h, k);\n for (let j = k; j < result.columns; j++) {\n result.set(h, j, result.get(h, j) / tmp);\n }\n for (let i = h + 1; i < result.rows; i++) {\n let factor = result.get(i, k) / result.get(h, k);\n result.set(i, k, 0);\n for (let j = k + 1; j < result.columns; j++) {\n result.set(i, j, result.get(i, j) - result.get(h, j) * factor);\n }\n }\n h++;\n k++;\n }\n }\n return result;\n }\n\n reducedEchelonForm() {\n let result = this.echelonForm();\n let m = result.columns;\n let n = result.rows;\n let h = n - 1;\n while (h >= 0) {\n if (result.maxRow(h) === 0) {\n h--;\n } else {\n let p = 0;\n let pivot = false;\n while (p < n && pivot === false) {\n if (result.get(h, p) === 1) {\n pivot = true;\n } else {\n p++;\n }\n }\n for (let i = 0; i < h; i++) {\n let factor = result.get(i, p);\n for (let j = p; j < m; j++) {\n let tmp = result.get(i, j) - factor * result.get(h, j);\n result.set(i, j, tmp);\n }\n }\n h--;\n }\n }\n return result;\n }\n\n set() {\n throw new Error('set method is unimplemented');\n }\n\n get() {\n throw new Error('get method is unimplemented');\n }\n\n repeat(options = {}) {\n if (typeof options !== 'object') {\n throw new TypeError('options must be an object');\n }\n const { rows = 1, columns = 1 } = options;\n if (!Number.isInteger(rows) || rows <= 0) {\n throw new TypeError('rows must be a positive integer');\n }\n if (!Number.isInteger(columns) || columns <= 0) {\n throw new TypeError('columns must be a positive integer');\n }\n let matrix = new Matrix(this.rows * rows, this.columns * columns);\n for (let i = 0; i < rows; i++) {\n for (let j = 0; j < columns; j++) {\n matrix.setSubMatrix(this, this.rows * i, this.columns * j);\n }\n }\n return matrix;\n }\n\n fill(value) {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, value);\n }\n }\n return this;\n }\n\n neg() {\n return this.mulS(-1);\n }\n\n getRow(index) {\n checkRowIndex(this, index);\n let row = [];\n for (let i = 0; i < this.columns; i++) {\n row.push(this.get(index, i));\n }\n return row;\n }\n\n getRowVector(index) {\n return Matrix.rowVector(this.getRow(index));\n }\n\n setRow(index, array) {\n checkRowIndex(this, index);\n array = checkRowVector(this, array);\n for (let i = 0; i < this.columns; i++) {\n this.set(index, i, array[i]);\n }\n return this;\n }\n\n swapRows(row1, row2) {\n checkRowIndex(this, row1);\n checkRowIndex(this, row2);\n for (let i = 0; i < this.columns; i++) {\n let temp = this.get(row1, i);\n this.set(row1, i, this.get(row2, i));\n this.set(row2, i, temp);\n }\n return this;\n }\n\n getColumn(index) {\n checkColumnIndex(this, index);\n let column = [];\n for (let i = 0; i < this.rows; i++) {\n column.push(this.get(i, index));\n }\n return column;\n }\n\n getColumnVector(index) {\n return Matrix.columnVector(this.getColumn(index));\n }\n\n setColumn(index, array) {\n checkColumnIndex(this, index);\n array = checkColumnVector(this, array);\n for (let i = 0; i < this.rows; i++) {\n this.set(i, index, array[i]);\n }\n return this;\n }\n\n swapColumns(column1, column2) {\n checkColumnIndex(this, column1);\n checkColumnIndex(this, column2);\n for (let i = 0; i < this.rows; i++) {\n let temp = this.get(i, column1);\n this.set(i, column1, this.get(i, column2));\n this.set(i, column2, temp);\n }\n return this;\n }\n\n addRowVector(vector) {\n vector = checkRowVector(this, vector);\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) + vector[j]);\n }\n }\n return this;\n }\n\n subRowVector(vector) {\n vector = checkRowVector(this, vector);\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) - vector[j]);\n }\n }\n return this;\n }\n\n mulRowVector(vector) {\n vector = checkRowVector(this, vector);\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) * vector[j]);\n }\n }\n return this;\n }\n\n divRowVector(vector) {\n vector = checkRowVector(this, vector);\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) / vector[j]);\n }\n }\n return this;\n }\n\n addColumnVector(vector) {\n vector = checkColumnVector(this, vector);\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) + vector[i]);\n }\n }\n return this;\n }\n\n subColumnVector(vector) {\n vector = checkColumnVector(this, vector);\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) - vector[i]);\n }\n }\n return this;\n }\n\n mulColumnVector(vector) {\n vector = checkColumnVector(this, vector);\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) * vector[i]);\n }\n }\n return this;\n }\n\n divColumnVector(vector) {\n vector = checkColumnVector(this, vector);\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) / vector[i]);\n }\n }\n return this;\n }\n\n mulRow(index, value) {\n checkRowIndex(this, index);\n for (let i = 0; i < this.columns; i++) {\n this.set(index, i, this.get(index, i) * value);\n }\n return this;\n }\n\n mulColumn(index, value) {\n checkColumnIndex(this, index);\n for (let i = 0; i < this.rows; i++) {\n this.set(i, index, this.get(i, index) * value);\n }\n return this;\n }\n\n max() {\n let v = this.get(0, 0);\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n if (this.get(i, j) > v) {\n v = this.get(i, j);\n }\n }\n }\n return v;\n }\n\n maxIndex() {\n let v = this.get(0, 0);\n let idx = [0, 0];\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n if (this.get(i, j) > v) {\n v = this.get(i, j);\n idx[0] = i;\n idx[1] = j;\n }\n }\n }\n return idx;\n }\n\n min() {\n let v = this.get(0, 0);\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n if (this.get(i, j) < v) {\n v = this.get(i, j);\n }\n }\n }\n return v;\n }\n\n minIndex() {\n let v = this.get(0, 0);\n let idx = [0, 0];\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n if (this.get(i, j) < v) {\n v = this.get(i, j);\n idx[0] = i;\n idx[1] = j;\n }\n }\n }\n return idx;\n }\n\n maxRow(row) {\n checkRowIndex(this, row);\n let v = this.get(row, 0);\n for (let i = 1; i < this.columns; i++) {\n if (this.get(row, i) > v) {\n v = this.get(row, i);\n }\n }\n return v;\n }\n\n maxRowIndex(row) {\n checkRowIndex(this, row);\n let v = this.get(row, 0);\n let idx = [row, 0];\n for (let i = 1; i < this.columns; i++) {\n if (this.get(row, i) > v) {\n v = this.get(row, i);\n idx[1] = i;\n }\n }\n return idx;\n }\n\n minRow(row) {\n checkRowIndex(this, row);\n let v = this.get(row, 0);\n for (let i = 1; i < this.columns; i++) {\n if (this.get(row, i) < v) {\n v = this.get(row, i);\n }\n }\n return v;\n }\n\n minRowIndex(row) {\n checkRowIndex(this, row);\n let v = this.get(row, 0);\n let idx = [row, 0];\n for (let i = 1; i < this.columns; i++) {\n if (this.get(row, i) < v) {\n v = this.get(row, i);\n idx[1] = i;\n }\n }\n return idx;\n }\n\n maxColumn(column) {\n checkColumnIndex(this, column);\n let v = this.get(0, column);\n for (let i = 1; i < this.rows; i++) {\n if (this.get(i, column) > v) {\n v = this.get(i, column);\n }\n }\n return v;\n }\n\n maxColumnIndex(column) {\n checkColumnIndex(this, column);\n let v = this.get(0, column);\n let idx = [0, column];\n for (let i = 1; i < this.rows; i++) {\n if (this.get(i, column) > v) {\n v = this.get(i, column);\n idx[0] = i;\n }\n }\n return idx;\n }\n\n minColumn(column) {\n checkColumnIndex(this, column);\n let v = this.get(0, column);\n for (let i = 1; i < this.rows; i++) {\n if (this.get(i, column) < v) {\n v = this.get(i, column);\n }\n }\n return v;\n }\n\n minColumnIndex(column) {\n checkColumnIndex(this, column);\n let v = this.get(0, column);\n let idx = [0, column];\n for (let i = 1; i < this.rows; i++) {\n if (this.get(i, column) < v) {\n v = this.get(i, column);\n idx[0] = i;\n }\n }\n return idx;\n }\n\n diag() {\n let min = Math.min(this.rows, this.columns);\n let diag = [];\n for (let i = 0; i < min; i++) {\n diag.push(this.get(i, i));\n }\n return diag;\n }\n\n norm(type = 'frobenius') {\n let result = 0;\n if (type === 'max') {\n return this.max();\n } else if (type === 'frobenius') {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n result = result + this.get(i, j) * this.get(i, j);\n }\n }\n return Math.sqrt(result);\n } else {\n throw new RangeError(`unknown norm type: ${type}`);\n }\n }\n\n cumulativeSum() {\n let sum = 0;\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n sum += this.get(i, j);\n this.set(i, j, sum);\n }\n }\n return this;\n }\n\n dot(vector2) {\n if (AbstractMatrix.isMatrix(vector2)) vector2 = vector2.to1DArray();\n let vector1 = this.to1DArray();\n if (vector1.length !== vector2.length) {\n throw new RangeError('vectors do not have the same size');\n }\n let dot = 0;\n for (let i = 0; i < vector1.length; i++) {\n dot += vector1[i] * vector2[i];\n }\n return dot;\n }\n\n mmul(other) {\n other = Matrix.checkMatrix(other);\n\n let m = this.rows;\n let n = this.columns;\n let p = other.columns;\n\n let result = new Matrix(m, p);\n\n let Bcolj = new Float64Array(n);\n for (let j = 0; j < p; j++) {\n for (let k = 0; k < n; k++) {\n Bcolj[k] = other.get(k, j);\n }\n\n for (let i = 0; i < m; i++) {\n let s = 0;\n for (let k = 0; k < n; k++) {\n s += this.get(i, k) * Bcolj[k];\n }\n\n result.set(i, j, s);\n }\n }\n return result;\n }\n\n strassen2x2(other) {\n other = Matrix.checkMatrix(other);\n let result = new Matrix(2, 2);\n const a11 = this.get(0, 0);\n const b11 = other.get(0, 0);\n const a12 = this.get(0, 1);\n const b12 = other.get(0, 1);\n const a21 = this.get(1, 0);\n const b21 = other.get(1, 0);\n const a22 = this.get(1, 1);\n const b22 = other.get(1, 1);\n\n // Compute intermediate values.\n const m1 = (a11 + a22) * (b11 + b22);\n const m2 = (a21 + a22) * b11;\n const m3 = a11 * (b12 - b22);\n const m4 = a22 * (b21 - b11);\n const m5 = (a11 + a12) * b22;\n const m6 = (a21 - a11) * (b11 + b12);\n const m7 = (a12 - a22) * (b21 + b22);\n\n // Combine intermediate values into the output.\n const c00 = m1 + m4 - m5 + m7;\n const c01 = m3 + m5;\n const c10 = m2 + m4;\n const c11 = m1 - m2 + m3 + m6;\n\n result.set(0, 0, c00);\n result.set(0, 1, c01);\n result.set(1, 0, c10);\n result.set(1, 1, c11);\n return result;\n }\n\n strassen3x3(other) {\n other = Matrix.checkMatrix(other);\n let result = new Matrix(3, 3);\n\n const a00 = this.get(0, 0);\n const a01 = this.get(0, 1);\n const a02 = this.get(0, 2);\n const a10 = this.get(1, 0);\n const a11 = this.get(1, 1);\n const a12 = this.get(1, 2);\n const a20 = this.get(2, 0);\n const a21 = this.get(2, 1);\n const a22 = this.get(2, 2);\n\n const b00 = other.get(0, 0);\n const b01 = other.get(0, 1);\n const b02 = other.get(0, 2);\n const b10 = other.get(1, 0);\n const b11 = other.get(1, 1);\n const b12 = other.get(1, 2);\n const b20 = other.get(2, 0);\n const b21 = other.get(2, 1);\n const b22 = other.get(2, 2);\n\n const m1 = (a00 + a01 + a02 - a10 - a11 - a21 - a22) * b11;\n const m2 = (a00 - a10) * (-b01 + b11);\n const m3 = a11 * (-b00 + b01 + b10 - b11 - b12 - b20 + b22);\n const m4 = (-a00 + a10 + a11) * (b00 - b01 + b11);\n const m5 = (a10 + a11) * (-b00 + b01);\n const m6 = a00 * b00;\n const m7 = (-a00 + a20 + a21) * (b00 - b02 + b12);\n const m8 = (-a00 + a20) * (b02 - b12);\n const m9 = (a20 + a21) * (-b00 + b02);\n const m10 = (a00 + a01 + a02 - a11 - a12 - a20 - a21) * b12;\n const m11 = a21 * (-b00 + b02 + b10 - b11 - b12 - b20 + b21);\n const m12 = (-a02 + a21 + a22) * (b11 + b20 - b21);\n const m13 = (a02 - a22) * (b11 - b21);\n const m14 = a02 * b20;\n const m15 = (a21 + a22) * (-b20 + b21);\n const m16 = (-a02 + a11 + a12) * (b12 + b20 - b22);\n const m17 = (a02 - a12) * (b12 - b22);\n const m18 = (a11 + a12) * (-b20 + b22);\n const m19 = a01 * b10;\n const m20 = a12 * b21;\n const m21 = a10 * b02;\n const m22 = a20 * b01;\n const m23 = a22 * b22;\n\n const c00 = m6 + m14 + m19;\n const c01 = m1 + m4 + m5 + m6 + m12 + m14 + m15;\n const c02 = m6 + m7 + m9 + m10 + m14 + m16 + m18;\n const c10 = m2 + m3 + m4 + m6 + m14 + m16 + m17;\n const c11 = m2 + m4 + m5 + m6 + m20;\n const c12 = m14 + m16 + m17 + m18 + m21;\n const c20 = m6 + m7 + m8 + m11 + m12 + m13 + m14;\n const c21 = m12 + m13 + m14 + m15 + m22;\n const c22 = m6 + m7 + m8 + m9 + m23;\n\n result.set(0, 0, c00);\n result.set(0, 1, c01);\n result.set(0, 2, c02);\n result.set(1, 0, c10);\n result.set(1, 1, c11);\n result.set(1, 2, c12);\n result.set(2, 0, c20);\n result.set(2, 1, c21);\n result.set(2, 2, c22);\n return result;\n }\n\n mmulStrassen(y) {\n y = Matrix.checkMatrix(y);\n let x = this.clone();\n let r1 = x.rows;\n let c1 = x.columns;\n let r2 = y.rows;\n let c2 = y.columns;\n if (c1 !== r2) {\n // eslint-disable-next-line no-console\n console.warn(\n `Multiplying ${r1} x ${c1} and ${r2} x ${c2} matrix: dimensions do not match.`,\n );\n }\n\n // Put a matrix into the top left of a matrix of zeros.\n // `rows` and `cols` are the dimensions of the output matrix.\n function embed(mat, rows, cols) {\n let r = mat.rows;\n let c = mat.columns;\n if (r === rows && c === cols) {\n return mat;\n } else {\n let resultat = AbstractMatrix.zeros(rows, cols);\n resultat = resultat.setSubMatrix(mat, 0, 0);\n return resultat;\n }\n }\n\n // Make sure both matrices are the same size.\n // This is exclusively for simplicity:\n // this algorithm can be implemented with matrices of different sizes.\n\n let r = Math.max(r1, r2);\n let c = Math.max(c1, c2);\n x = embed(x, r, c);\n y = embed(y, r, c);\n\n // Our recursive multiplication function.\n function blockMult(a, b, rows, cols) {\n // For small matrices, resort to naive multiplication.\n if (rows <= 512 || cols <= 512) {\n return a.mmul(b); // a is equivalent to this\n }\n\n // Apply dynamic padding.\n if (rows % 2 === 1 && cols % 2 === 1) {\n a = embed(a, rows + 1, cols + 1);\n b = embed(b, rows + 1, cols + 1);\n } else if (rows % 2 === 1) {\n a = embed(a, rows + 1, cols);\n b = embed(b, rows + 1, cols);\n } else if (cols % 2 === 1) {\n a = embed(a, rows, cols + 1);\n b = embed(b, rows, cols + 1);\n }\n\n let halfRows = parseInt(a.rows / 2, 10);\n let halfCols = parseInt(a.columns / 2, 10);\n // Subdivide input matrices.\n let a11 = a.subMatrix(0, halfRows - 1, 0, halfCols - 1);\n let b11 = b.subMatrix(0, halfRows - 1, 0, halfCols - 1);\n\n let a12 = a.subMatrix(0, halfRows - 1, halfCols, a.columns - 1);\n let b12 = b.subMatrix(0, halfRows - 1, halfCols, b.columns - 1);\n\n let a21 = a.subMatrix(halfRows, a.rows - 1, 0, halfCols - 1);\n let b21 = b.subMatrix(halfRows, b.rows - 1, 0, halfCols - 1);\n\n let a22 = a.subMatrix(halfRows, a.rows - 1, halfCols, a.columns - 1);\n let b22 = b.subMatrix(halfRows, b.rows - 1, halfCols, b.columns - 1);\n\n // Compute intermediate values.\n let m1 = blockMult(\n AbstractMatrix.add(a11, a22),\n AbstractMatrix.add(b11, b22),\n halfRows,\n halfCols,\n );\n let m2 = blockMult(AbstractMatrix.add(a21, a22), b11, halfRows, halfCols);\n let m3 = blockMult(a11, AbstractMatrix.sub(b12, b22), halfRows, halfCols);\n let m4 = blockMult(a22, AbstractMatrix.sub(b21, b11), halfRows, halfCols);\n let m5 = blockMult(AbstractMatrix.add(a11, a12), b22, halfRows, halfCols);\n let m6 = blockMult(\n AbstractMatrix.sub(a21, a11),\n AbstractMatrix.add(b11, b12),\n halfRows,\n halfCols,\n );\n let m7 = blockMult(\n AbstractMatrix.sub(a12, a22),\n AbstractMatrix.add(b21, b22),\n halfRows,\n halfCols,\n );\n\n // Combine intermediate values into the output.\n let c11 = AbstractMatrix.add(m1, m4);\n c11.sub(m5);\n c11.add(m7);\n let c12 = AbstractMatrix.add(m3, m5);\n let c21 = AbstractMatrix.add(m2, m4);\n let c22 = AbstractMatrix.sub(m1, m2);\n c22.add(m3);\n c22.add(m6);\n\n // Crop output to the desired size (undo dynamic padding).\n let resultat = AbstractMatrix.zeros(2 * c11.rows, 2 * c11.columns);\n resultat = resultat.setSubMatrix(c11, 0, 0);\n resultat = resultat.setSubMatrix(c12, c11.rows, 0);\n resultat = resultat.setSubMatrix(c21, 0, c11.columns);\n resultat = resultat.setSubMatrix(c22, c11.rows, c11.columns);\n return resultat.subMatrix(0, rows - 1, 0, cols - 1);\n }\n return blockMult(x, y, r, c);\n }\n\n scaleRows(options = {}) {\n if (typeof options !== 'object') {\n throw new TypeError('options must be an object');\n }\n const { min = 0, max = 1 } = options;\n if (!Number.isFinite(min)) throw new TypeError('min must be a number');\n if (!Number.isFinite(max)) throw new TypeError('max must be a number');\n if (min >= max) throw new RangeError('min must be smaller than max');\n let newMatrix = new Matrix(this.rows, this.columns);\n for (let i = 0; i < this.rows; i++) {\n const row = this.getRow(i);\n rescale(row, { min, max, output: row });\n newMatrix.setRow(i, row);\n }\n return newMatrix;\n }\n\n scaleColumns(options = {}) {\n if (typeof options !== 'object') {\n throw new TypeError('options must be an object');\n }\n const { min = 0, max = 1 } = options;\n if (!Number.isFinite(min)) throw new TypeError('min must be a number');\n if (!Number.isFinite(max)) throw new TypeError('max must be a number');\n if (min >= max) throw new RangeError('min must be smaller than max');\n let newMatrix = new Matrix(this.rows, this.columns);\n for (let i = 0; i < this.columns; i++) {\n const column = this.getColumn(i);\n rescale(column, {\n min: min,\n max: max,\n output: column,\n });\n newMatrix.setColumn(i, column);\n }\n return newMatrix;\n }\n\n flipRows() {\n const middle = Math.ceil(this.columns / 2);\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < middle; j++) {\n let first = this.get(i, j);\n let last = this.get(i, this.columns - 1 - j);\n this.set(i, j, last);\n this.set(i, this.columns - 1 - j, first);\n }\n }\n return this;\n }\n\n flipColumns() {\n const middle = Math.ceil(this.rows / 2);\n for (let j = 0; j < this.columns; j++) {\n for (let i = 0; i < middle; i++) {\n let first = this.get(i, j);\n let last = this.get(this.rows - 1 - i, j);\n this.set(i, j, last);\n this.set(this.rows - 1 - i, j, first);\n }\n }\n return this;\n }\n\n kroneckerProduct(other) {\n other = Matrix.checkMatrix(other);\n\n let m = this.rows;\n let n = this.columns;\n let p = other.rows;\n let q = other.columns;\n\n let result = new Matrix(m * p, n * q);\n for (let i = 0; i < m; i++) {\n for (let j = 0; j < n; j++) {\n for (let k = 0; k < p; k++) {\n for (let l = 0; l < q; l++) {\n result.set(p * i + k, q * j + l, this.get(i, j) * other.get(k, l));\n }\n }\n }\n }\n return result;\n }\n\n transpose() {\n let result = new Matrix(this.columns, this.rows);\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n result.set(j, i, this.get(i, j));\n }\n }\n return result;\n }\n\n sortRows(compareFunction = compareNumbers) {\n for (let i = 0; i < this.rows; i++) {\n this.setRow(i, this.getRow(i).sort(compareFunction));\n }\n return this;\n }\n\n sortColumns(compareFunction = compareNumbers) {\n for (let i = 0; i < this.columns; i++) {\n this.setColumn(i, this.getColumn(i).sort(compareFunction));\n }\n return this;\n }\n\n subMatrix(startRow, endRow, startColumn, endColumn) {\n checkRange(this, startRow, endRow, startColumn, endColumn);\n let newMatrix = new Matrix(\n endRow - startRow + 1,\n endColumn - startColumn + 1,\n );\n for (let i = startRow; i <= endRow; i++) {\n for (let j = startColumn; j <= endColumn; j++) {\n newMatrix.set(i - startRow, j - startColumn, this.get(i, j));\n }\n }\n return newMatrix;\n }\n\n subMatrixRow(indices, startColumn, endColumn) {\n if (startColumn === undefined) startColumn = 0;\n if (endColumn === undefined) endColumn = this.columns - 1;\n if (\n startColumn > endColumn ||\n startColumn < 0 ||\n startColumn >= this.columns ||\n endColumn < 0 ||\n endColumn >= this.columns\n ) {\n throw new RangeError('Argument out of range');\n }\n\n let newMatrix = new Matrix(indices.length, endColumn - startColumn + 1);\n for (let i = 0; i < indices.length; i++) {\n for (let j = startColumn; j <= endColumn; j++) {\n if (indices[i] < 0 || indices[i] >= this.rows) {\n throw new RangeError(`Row index out of range: ${indices[i]}`);\n }\n newMatrix.set(i, j - startColumn, this.get(indices[i], j));\n }\n }\n return newMatrix;\n }\n\n subMatrixColumn(indices, startRow, endRow) {\n if (startRow === undefined) startRow = 0;\n if (endRow === undefined) endRow = this.rows - 1;\n if (\n startRow > endRow ||\n startRow < 0 ||\n startRow >= this.rows ||\n endRow < 0 ||\n endRow >= this.rows\n ) {\n throw new RangeError('Argument out of range');\n }\n\n let newMatrix = new Matrix(endRow - startRow + 1, indices.length);\n for (let i = 0; i < indices.length; i++) {\n for (let j = startRow; j <= endRow; j++) {\n if (indices[i] < 0 || indices[i] >= this.columns) {\n throw new RangeError(`Column index out of range: ${indices[i]}`);\n }\n newMatrix.set(j - startRow, i, this.get(j, indices[i]));\n }\n }\n return newMatrix;\n }\n\n setSubMatrix(matrix, startRow, startColumn) {\n matrix = Matrix.checkMatrix(matrix);\n let endRow = startRow + matrix.rows - 1;\n let endColumn = startColumn + matrix.columns - 1;\n checkRange(this, startRow, endRow, startColumn, endColumn);\n for (let i = 0; i < matrix.rows; i++) {\n for (let j = 0; j < matrix.columns; j++) {\n this.set(startRow + i, startColumn + j, matrix.get(i, j));\n }\n }\n return this;\n }\n\n selection(rowIndices, columnIndices) {\n let indices = checkIndices(this, rowIndices, columnIndices);\n let newMatrix = new Matrix(rowIndices.length, columnIndices.length);\n for (let i = 0; i < indices.row.length; i++) {\n let rowIndex = indices.row[i];\n for (let j = 0; j < indices.column.length; j++) {\n let columnIndex = indices.column[j];\n newMatrix.set(i, j, this.get(rowIndex, columnIndex));\n }\n }\n return newMatrix;\n }\n\n trace() {\n let min = Math.min(this.rows, this.columns);\n let trace = 0;\n for (let i = 0; i < min; i++) {\n trace += this.get(i, i);\n }\n return trace;\n }\n\n clone() {\n let newMatrix = new Matrix(this.rows, this.columns);\n for (let row = 0; row < this.rows; row++) {\n for (let column = 0; column < this.columns; column++) {\n newMatrix.set(row, column, this.get(row, column));\n }\n }\n return newMatrix;\n }\n\n sum(by) {\n switch (by) {\n case 'row':\n return sumByRow(this);\n case 'column':\n return sumByColumn(this);\n case undefined:\n return sumAll(this);\n default:\n throw new Error(`invalid option: ${by}`);\n }\n }\n\n product(by) {\n switch (by) {\n case 'row':\n return productByRow(this);\n case 'column':\n return productByColumn(this);\n case undefined:\n return productAll(this);\n default:\n throw new Error(`invalid option: ${by}`);\n }\n }\n\n mean(by) {\n const sum = this.sum(by);\n switch (by) {\n case 'row': {\n for (let i = 0; i < this.rows; i++) {\n sum[i] /= this.columns;\n }\n return sum;\n }\n case 'column': {\n for (let i = 0; i < this.columns; i++) {\n sum[i] /= this.rows;\n }\n return sum;\n }\n case undefined:\n return sum / this.size;\n default:\n throw new Error(`invalid option: ${by}`);\n }\n }\n\n variance(by, options = {}) {\n if (typeof by === 'object') {\n options = by;\n by = undefined;\n }\n if (typeof options !== 'object') {\n throw new TypeError('options must be an object');\n }\n const { unbiased = true, mean = this.mean(by) } = options;\n if (typeof unbiased !== 'boolean') {\n throw new TypeError('unbiased must be a boolean');\n }\n switch (by) {\n case 'row': {\n if (!Array.isArray(mean)) {\n throw new TypeError('mean must be an array');\n }\n return varianceByRow(this, unbiased, mean);\n }\n case 'column': {\n if (!Array.isArray(mean)) {\n throw new TypeError('mean must be an array');\n }\n return varianceByColumn(this, unbiased, mean);\n }\n case undefined: {\n if (typeof mean !== 'number') {\n throw new TypeError('mean must be a number');\n }\n return varianceAll(this, unbiased, mean);\n }\n default:\n throw new Error(`invalid option: ${by}`);\n }\n }\n\n standardDeviation(by, options) {\n if (typeof by === 'object') {\n options = by;\n by = undefined;\n }\n const variance = this.variance(by, options);\n if (by === undefined) {\n return Math.sqrt(variance);\n } else {\n for (let i = 0; i < variance.length; i++) {\n variance[i] = Math.sqrt(variance[i]);\n }\n return variance;\n }\n }\n\n center(by, options = {}) {\n if (typeof by === 'object') {\n options = by;\n by = undefined;\n }\n if (typeof options !== 'object') {\n throw new TypeError('options must be an object');\n }\n const { center = this.mean(by) } = options;\n switch (by) {\n case 'row': {\n if (!Array.isArray(center)) {\n throw new TypeError('center must be an array');\n }\n centerByRow(this, center);\n return this;\n }\n case 'column': {\n if (!Array.isArray(center)) {\n throw new TypeError('center must be an array');\n }\n centerByColumn(this, center);\n return this;\n }\n case undefined: {\n if (typeof center !== 'number') {\n throw new TypeError('center must be a number');\n }\n centerAll(this, center);\n return this;\n }\n default:\n throw new Error(`invalid option: ${by}`);\n }\n }\n\n scale(by, options = {}) {\n if (typeof by === 'object') {\n options = by;\n by = undefined;\n }\n if (typeof options !== 'object') {\n throw new TypeError('options must be an object');\n }\n let scale = options.scale;\n switch (by) {\n case 'row': {\n if (scale === undefined) {\n scale = getScaleByRow(this);\n } else if (!Array.isArray(scale)) {\n throw new TypeError('scale must be an array');\n }\n scaleByRow(this, scale);\n return this;\n }\n case 'column': {\n if (scale === undefined) {\n scale = getScaleByColumn(this);\n } else if (!Array.isArray(scale)) {\n throw new TypeError('scale must be an array');\n }\n scaleByColumn(this, scale);\n return this;\n }\n case undefined: {\n if (scale === undefined) {\n scale = getScaleAll(this);\n } else if (typeof scale !== 'number') {\n throw new TypeError('scale must be a number');\n }\n scaleAll(this, scale);\n return this;\n }\n default:\n throw new Error(`invalid option: ${by}`);\n }\n }\n}\n\nAbstractMatrix.prototype.klass = 'Matrix';\nif (typeof Symbol !== 'undefined') {\n AbstractMatrix.prototype[\n Symbol.for('nodejs.util.inspect.custom')\n ] = inspectMatrix;\n}\n\nfunction compareNumbers(a, b) {\n return a - b;\n}\n\n// Synonyms\nAbstractMatrix.random = AbstractMatrix.rand;\nAbstractMatrix.randomInt = AbstractMatrix.randInt;\nAbstractMatrix.diagonal = AbstractMatrix.diag;\nAbstractMatrix.prototype.diagonal = AbstractMatrix.prototype.diag;\nAbstractMatrix.identity = AbstractMatrix.eye;\nAbstractMatrix.prototype.negate = AbstractMatrix.prototype.neg;\nAbstractMatrix.prototype.tensorProduct =\n AbstractMatrix.prototype.kroneckerProduct;\n\nexport default class Matrix extends AbstractMatrix {\n constructor(nRows, nColumns) {\n super();\n if (Matrix.isMatrix(nRows)) {\n return nRows.clone();\n } else if (Number.isInteger(nRows) && nRows > 0) {\n // Create an empty matrix\n this.data = [];\n if (Number.isInteger(nColumns) && nColumns > 0) {\n for (let i = 0; i < nRows; i++) {\n this.data.push(new Float64Array(nColumns));\n }\n } else {\n throw new TypeError('nColumns must be a positive integer');\n }\n } else if (Array.isArray(nRows)) {\n // Copy the values from the 2D array\n const arrayData = nRows;\n nRows = arrayData.length;\n nColumns = arrayData[0].length;\n if (typeof nColumns !== 'number' || nColumns === 0) {\n throw new TypeError(\n 'Data must be a 2D array with at least one element',\n );\n }\n this.data = [];\n for (let i = 0; i < nRows; i++) {\n if (arrayData[i].length !== nColumns) {\n throw new RangeError('Inconsistent array dimensions');\n }\n this.data.push(Float64Array.from(arrayData[i]));\n }\n } else {\n throw new TypeError(\n 'First argument must be a positive number or an array',\n );\n }\n this.rows = nRows;\n this.columns = nColumns;\n return this;\n }\n\n set(rowIndex, columnIndex, value) {\n this.data[rowIndex][columnIndex] = value;\n return this;\n }\n\n get(rowIndex, columnIndex) {\n return this.data[rowIndex][columnIndex];\n }\n\n removeRow(index) {\n checkRowIndex(this, index);\n if (this.rows === 1) {\n throw new RangeError('A matrix cannot have less than one row');\n }\n this.data.splice(index, 1);\n this.rows -= 1;\n return this;\n }\n\n addRow(index, array) {\n if (array === undefined) {\n array = index;\n index = this.rows;\n }\n checkRowIndex(this, index, true);\n array = Float64Array.from(checkRowVector(this, array, true));\n this.data.splice(index, 0, array);\n this.rows += 1;\n return this;\n }\n\n removeColumn(index) {\n checkColumnIndex(this, index);\n if (this.columns === 1) {\n throw new RangeError('A matrix cannot have less than one column');\n }\n for (let i = 0; i < this.rows; i++) {\n const newRow = new Float64Array(this.columns - 1);\n for (let j = 0; j < index; j++) {\n newRow[j] = this.data[i][j];\n }\n for (let j = index + 1; j < this.columns; j++) {\n newRow[j - 1] = this.data[i][j];\n }\n this.data[i] = newRow;\n }\n this.columns -= 1;\n return this;\n }\n\n addColumn(index, array) {\n if (typeof array === 'undefined') {\n array = index;\n index = this.columns;\n }\n checkColumnIndex(this, index, true);\n array = checkColumnVector(this, array);\n for (let i = 0; i < this.rows; i++) {\n const newRow = new Float64Array(this.columns + 1);\n let j = 0;\n for (; j < index; j++) {\n newRow[j] = this.data[i][j];\n }\n newRow[j++] = array[i];\n for (; j < this.columns + 1; j++) {\n newRow[j] = this.data[i][j - 1];\n }\n this.data[i] = newRow;\n }\n this.columns += 1;\n return this;\n }\n}\n\ninstallMathOperations(AbstractMatrix, Matrix);\n","import { AbstractMatrix } from '../matrix';\n\nexport default class BaseView extends AbstractMatrix {\n constructor(matrix, rows, columns) {\n super();\n this.matrix = matrix;\n this.rows = rows;\n this.columns = columns;\n }\n}\n","import { checkColumnIndex } from '../util';\n\nimport BaseView from './base';\n\nexport default class MatrixColumnView extends BaseView {\n constructor(matrix, column) {\n checkColumnIndex(matrix, column);\n super(matrix, matrix.rows, 1);\n this.column = column;\n }\n\n set(rowIndex, columnIndex, value) {\n this.matrix.set(rowIndex, this.column, value);\n return this;\n }\n\n get(rowIndex) {\n return this.matrix.get(rowIndex, this.column);\n }\n}\n","import { checkColumnIndices } from '../util';\r\n\r\nimport BaseView from './base';\r\n\r\nexport default class MatrixColumnSelectionView extends BaseView {\r\n constructor(matrix, columnIndices) {\r\n columnIndices = checkColumnIndices(matrix, columnIndices);\r\n super(matrix, matrix.rows, columnIndices.length);\r\n this.columnIndices = columnIndices;\r\n }\r\n\r\n set(rowIndex, columnIndex, value) {\r\n this.matrix.set(rowIndex, this.columnIndices[columnIndex], value);\r\n return this;\r\n }\r\n\r\n get(rowIndex, columnIndex) {\r\n return this.matrix.get(rowIndex, this.columnIndices[columnIndex]);\r\n }\r\n}\r\n","import BaseView from './base';\r\n\r\nexport default class MatrixFlipColumnView extends BaseView {\r\n constructor(matrix) {\r\n super(matrix, matrix.rows, matrix.columns);\r\n }\r\n\r\n set(rowIndex, columnIndex, value) {\r\n this.matrix.set(rowIndex, this.columns - columnIndex - 1, value);\r\n return this;\r\n }\r\n\r\n get(rowIndex, columnIndex) {\r\n return this.matrix.get(rowIndex, this.columns - columnIndex - 1);\r\n }\r\n}\r\n","import BaseView from './base';\r\n\r\nexport default class MatrixFlipRowView extends BaseView {\r\n constructor(matrix) {\r\n super(matrix, matrix.rows, matrix.columns);\r\n }\r\n\r\n set(rowIndex, columnIndex, value) {\r\n this.matrix.set(this.rows - rowIndex - 1, columnIndex, value);\r\n return this;\r\n }\r\n\r\n get(rowIndex, columnIndex) {\r\n return this.matrix.get(this.rows - rowIndex - 1, columnIndex);\r\n }\r\n}\r\n","import { checkRowIndex } from '../util';\n\nimport BaseView from './base';\n\nexport default class MatrixRowView extends BaseView {\n constructor(matrix, row) {\n checkRowIndex(matrix, row);\n super(matrix, 1, matrix.columns);\n this.row = row;\n }\n\n set(rowIndex, columnIndex, value) {\n this.matrix.set(this.row, columnIndex, value);\n return this;\n }\n\n get(rowIndex, columnIndex) {\n return this.matrix.get(this.row, columnIndex);\n }\n}\n","import { checkRowIndices } from '../util';\r\n\r\nimport BaseView from './base';\r\n\r\nexport default class MatrixRowSelectionView extends BaseView {\r\n constructor(matrix, rowIndices) {\r\n rowIndices = checkRowIndices(matrix, rowIndices);\r\n super(matrix, rowIndices.length, matrix.columns);\r\n this.rowIndices = rowIndices;\r\n }\r\n\r\n set(rowIndex, columnIndex, value) {\r\n this.matrix.set(this.rowIndices[rowIndex], columnIndex, value);\r\n return this;\r\n }\r\n\r\n get(rowIndex, columnIndex) {\r\n return this.matrix.get(this.rowIndices[rowIndex], columnIndex);\r\n }\r\n}\r\n","import { checkIndices } from '../util';\n\nimport BaseView from './base';\n\nexport default class MatrixSelectionView extends BaseView {\n constructor(matrix, rowIndices, columnIndices) {\n let indices = checkIndices(matrix, rowIndices, columnIndices);\n super(matrix, indices.row.length, indices.column.length);\n this.rowIndices = indices.row;\n this.columnIndices = indices.column;\n }\n\n set(rowIndex, columnIndex, value) {\n this.matrix.set(\n this.rowIndices[rowIndex],\n this.columnIndices[columnIndex],\n value,\n );\n return this;\n }\n\n get(rowIndex, columnIndex) {\n return this.matrix.get(\n this.rowIndices[rowIndex],\n this.columnIndices[columnIndex],\n );\n }\n}\n","import { checkRange } from '../util';\n\nimport BaseView from './base';\n\nexport default class MatrixSubView extends BaseView {\n constructor(matrix, startRow, endRow, startColumn, endColumn) {\n checkRange(matrix, startRow, endRow, startColumn, endColumn);\n super(matrix, endRow - startRow + 1, endColumn - startColumn + 1);\n this.startRow = startRow;\n this.startColumn = startColumn;\n }\n\n set(rowIndex, columnIndex, value) {\n this.matrix.set(\n this.startRow + rowIndex,\n this.startColumn + columnIndex,\n value,\n );\n return this;\n }\n\n get(rowIndex, columnIndex) {\n return this.matrix.get(\n this.startRow + rowIndex,\n this.startColumn + columnIndex,\n );\n }\n}\n","import BaseView from './base';\r\n\r\nexport default class MatrixTransposeView extends BaseView {\r\n constructor(matrix) {\r\n super(matrix, matrix.columns, matrix.rows);\r\n }\r\n\r\n set(rowIndex, columnIndex, value) {\r\n this.matrix.set(columnIndex, rowIndex, value);\r\n return this;\r\n }\r\n\r\n get(rowIndex, columnIndex) {\r\n return this.matrix.get(columnIndex, rowIndex);\r\n }\r\n}\r\n","import { AbstractMatrix } from '../matrix';\n\nexport default class WrapperMatrix1D extends AbstractMatrix {\n constructor(data, options = {}) {\n const { rows = 1 } = options;\n\n if (data.length % rows !== 0) {\n throw new Error('the data length is not divisible by the number of rows');\n }\n super();\n this.rows = rows;\n this.columns = data.length / rows;\n this.data = data;\n }\n\n set(rowIndex, columnIndex, value) {\n let index = this._calculateIndex(rowIndex, columnIndex);\n this.data[index] = value;\n return this;\n }\n\n get(rowIndex, columnIndex) {\n let index = this._calculateIndex(rowIndex, columnIndex);\n return this.data[index];\n }\n\n _calculateIndex(row, column) {\n return row * this.columns + column;\n }\n}\n","import { AbstractMatrix } from '../matrix';\n\nexport default class WrapperMatrix2D extends AbstractMatrix {\n constructor(data) {\n super();\n this.data = data;\n this.rows = data.length;\n this.columns = data[0].length;\n }\n\n set(rowIndex, columnIndex, value) {\n this.data[rowIndex][columnIndex] = value;\n return this;\n }\n\n get(rowIndex, columnIndex) {\n return this.data[rowIndex][columnIndex];\n }\n}\n","import WrapperMatrix1D from './WrapperMatrix1D';\nimport WrapperMatrix2D from './WrapperMatrix2D';\n\nexport function wrap(array, options) {\n if (Array.isArray(array)) {\n if (array[0] && Array.isArray(array[0])) {\n return new WrapperMatrix2D(array);\n } else {\n return new WrapperMatrix1D(array, options);\n }\n } else {\n throw new Error('the argument is not an array');\n }\n}\n","import Matrix from '../matrix';\nimport WrapperMatrix2D from '../wrap/WrapperMatrix2D';\n\nexport default class LuDecomposition {\n constructor(matrix) {\n matrix = WrapperMatrix2D.checkMatrix(matrix);\n\n let lu = matrix.clone();\n let rows = lu.rows;\n let columns = lu.columns;\n let pivotVector = new Float64Array(rows);\n let pivotSign = 1;\n let i, j, k, p, s, t, v;\n let LUcolj, kmax;\n\n for (i = 0; i < rows; i++) {\n pivotVector[i] = i;\n }\n\n LUcolj = new Float64Array(rows);\n\n for (j = 0; j < columns; j++) {\n for (i = 0; i < rows; i++) {\n LUcolj[i] = lu.get(i, j);\n }\n\n for (i = 0; i < rows; i++) {\n kmax = Math.min(i, j);\n s = 0;\n for (k = 0; k < kmax; k++) {\n s += lu.get(i, k) * LUcolj[k];\n }\n LUcolj[i] -= s;\n lu.set(i, j, LUcolj[i]);\n }\n\n p = j;\n for (i = j + 1; i < rows; i++) {\n if (Math.abs(LUcolj[i]) > Math.abs(LUcolj[p])) {\n p = i;\n }\n }\n\n if (p !== j) {\n for (k = 0; k < columns; k++) {\n t = lu.get(p, k);\n lu.set(p, k, lu.get(j, k));\n lu.set(j, k, t);\n }\n\n v = pivotVector[p];\n pivotVector[p] = pivotVector[j];\n pivotVector[j] = v;\n\n pivotSign = -pivotSign;\n }\n\n if (j < rows && lu.get(j, j) !== 0) {\n for (i = j + 1; i < rows; i++) {\n lu.set(i, j, lu.get(i, j) / lu.get(j, j));\n }\n }\n }\n\n this.LU = lu;\n this.pivotVector = pivotVector;\n this.pivotSign = pivotSign;\n }\n\n isSingular() {\n let data = this.LU;\n let col = data.columns;\n for (let j = 0; j < col; j++) {\n if (data.get(j, j) === 0) {\n return true;\n }\n }\n return false;\n }\n\n solve(value) {\n value = Matrix.checkMatrix(value);\n\n let lu = this.LU;\n let rows = lu.rows;\n\n if (rows !== value.rows) {\n throw new Error('Invalid matrix dimensions');\n }\n if (this.isSingular()) {\n throw new Error('LU matrix is singular');\n }\n\n let count = value.columns;\n let X = value.subMatrixRow(this.pivotVector, 0, count - 1);\n let columns = lu.columns;\n let i, j, k;\n\n for (k = 0; k < columns; k++) {\n for (i = k + 1; i < columns; i++) {\n for (j = 0; j < count; j++) {\n X.set(i, j, X.get(i, j) - X.get(k, j) * lu.get(i, k));\n }\n }\n }\n for (k = columns - 1; k >= 0; k--) {\n for (j = 0; j < count; j++) {\n X.set(k, j, X.get(k, j) / lu.get(k, k));\n }\n for (i = 0; i < k; i++) {\n for (j = 0; j < count; j++) {\n X.set(i, j, X.get(i, j) - X.get(k, j) * lu.get(i, k));\n }\n }\n }\n return X;\n }\n\n get determinant() {\n let data = this.LU;\n if (!data.isSquare()) {\n throw new Error('Matrix must be square');\n }\n let determinant = this.pivotSign;\n let col = data.columns;\n for (let j = 0; j < col; j++) {\n determinant *= data.get(j, j);\n }\n return determinant;\n }\n\n get lowerTriangularMatrix() {\n let data = this.LU;\n let rows = data.rows;\n let columns = data.columns;\n let X = new Matrix(rows, columns);\n for (let i = 0; i < rows; i++) {\n for (let j = 0; j < columns; j++) {\n if (i > j) {\n X.set(i, j, data.get(i, j));\n } else if (i === j) {\n X.set(i, j, 1);\n } else {\n X.set(i, j, 0);\n }\n }\n }\n return X;\n }\n\n get upperTriangularMatrix() {\n let data = this.LU;\n let rows = data.rows;\n let columns = data.columns;\n let X = new Matrix(rows, columns);\n for (let i = 0; i < rows; i++) {\n for (let j = 0; j < columns; j++) {\n if (i <= j) {\n X.set(i, j, data.get(i, j));\n } else {\n X.set(i, j, 0);\n }\n }\n }\n return X;\n }\n\n get pivotPermutationVector() {\n return Array.from(this.pivotVector);\n }\n}\n","export function hypotenuse(a, b) {\n let r = 0;\n if (Math.abs(a) > Math.abs(b)) {\n r = b / a;\n return Math.abs(a) * Math.sqrt(1 + r * r);\n }\n if (b !== 0) {\n r = a / b;\n return Math.abs(b) * Math.sqrt(1 + r * r);\n }\n return 0;\n}\n","import Matrix from '../matrix';\nimport WrapperMatrix2D from '../wrap/WrapperMatrix2D';\n\nimport { hypotenuse } from './util';\n\nexport default class QrDecomposition {\n constructor(value) {\n value = WrapperMatrix2D.checkMatrix(value);\n\n let qr = value.clone();\n let m = value.rows;\n let n = value.columns;\n let rdiag = new Float64Array(n);\n let i, j, k, s;\n\n for (k = 0; k < n; k++) {\n let nrm = 0;\n for (i = k; i < m; i++) {\n nrm = hypotenuse(nrm, qr.get(i, k));\n }\n if (nrm !== 0) {\n if (qr.get(k, k) < 0) {\n nrm = -nrm;\n }\n for (i = k; i < m; i++) {\n qr.set(i, k, qr.get(i, k) / nrm);\n }\n qr.set(k, k, qr.get(k, k) + 1);\n for (j = k + 1; j < n; j++) {\n s = 0;\n for (i = k; i < m; i++) {\n s += qr.get(i, k) * qr.get(i, j);\n }\n s = -s / qr.get(k, k);\n for (i = k; i < m; i++) {\n qr.set(i, j, qr.get(i, j) + s * qr.get(i, k));\n }\n }\n }\n rdiag[k] = -nrm;\n }\n\n this.QR = qr;\n this.Rdiag = rdiag;\n }\n\n solve(value) {\n value = Matrix.checkMatrix(value);\n\n let qr = this.QR;\n let m = qr.rows;\n\n if (value.rows !== m) {\n throw new Error('Matrix row dimensions must agree');\n }\n if (!this.isFullRank()) {\n throw new Error('Matrix is rank deficient');\n }\n\n let count = value.columns;\n let X = value.clone();\n let n = qr.columns;\n let i, j, k, s;\n\n for (k = 0; k < n; k++) {\n for (j = 0; j < count; j++) {\n s = 0;\n for (i = k; i < m; i++) {\n s += qr.get(i, k) * X.get(i, j);\n }\n s = -s / qr.get(k, k);\n for (i = k; i < m; i++) {\n X.set(i, j, X.get(i, j) + s * qr.get(i, k));\n }\n }\n }\n for (k = n - 1; k >= 0; k--) {\n for (j = 0; j < count; j++) {\n X.set(k, j, X.get(k, j) / this.Rdiag[k]);\n }\n for (i = 0; i < k; i++) {\n for (j = 0; j < count; j++) {\n X.set(i, j, X.get(i, j) - X.get(k, j) * qr.get(i, k));\n }\n }\n }\n\n return X.subMatrix(0, n - 1, 0, count - 1);\n }\n\n isFullRank() {\n let columns = this.QR.columns;\n for (let i = 0; i < columns; i++) {\n if (this.Rdiag[i] === 0) {\n return false;\n }\n }\n return true;\n }\n\n get upperTriangularMatrix() {\n let qr = this.QR;\n let n = qr.columns;\n let X = new Matrix(n, n);\n let i, j;\n for (i = 0; i < n; i++) {\n for (j = 0; j < n; j++) {\n if (i < j) {\n X.set(i, j, qr.get(i, j));\n } else if (i === j) {\n X.set(i, j, this.Rdiag[i]);\n } else {\n X.set(i, j, 0);\n }\n }\n }\n return X;\n }\n\n get orthogonalMatrix() {\n let qr = this.QR;\n let rows = qr.rows;\n let columns = qr.columns;\n let X = new Matrix(rows, columns);\n let i, j, k, s;\n\n for (k = columns - 1; k >= 0; k--) {\n for (i = 0; i < rows; i++) {\n X.set(i, k, 0);\n }\n X.set(k, k, 1);\n for (j = k; j < columns; j++) {\n if (qr.get(k, k) !== 0) {\n s = 0;\n for (i = k; i < rows; i++) {\n s += qr.get(i, k) * X.get(i, j);\n }\n\n s = -s / qr[k][k];\n\n for (i = k; i < rows; i++) {\n X.set(i, j, X.get(i, j) + s * qr.get(i, k));\n }\n }\n }\n }\n return X;\n }\n}\n","import Matrix from '../matrix';\nimport WrapperMatrix2D from '../wrap/WrapperMatrix2D';\n\nimport { hypotenuse } from './util';\n\nexport default class SingularValueDecomposition {\n constructor(value, options = {}) {\n value = WrapperMatrix2D.checkMatrix(value);\n\n let m = value.rows;\n let n = value.columns;\n\n const {\n computeLeftSingularVectors = true,\n computeRightSingularVectors = true,\n autoTranspose = false,\n } = options;\n\n let wantu = Boolean(computeLeftSingularVectors);\n let wantv = Boolean(computeRightSingularVectors);\n\n let swapped = false;\n let a;\n if (m < n) {\n if (!autoTranspose) {\n a = value.clone();\n // eslint-disable-next-line no-console\n console.warn(\n 'Computing SVD on a matrix with more columns than rows. Consider enabling autoTranspose',\n );\n } else {\n a = value.transpose();\n m = a.rows;\n n = a.columns;\n swapped = true;\n let aux = wantu;\n wantu = wantv;\n wantv = aux;\n }\n } else {\n a = value.clone();\n }\n\n let nu = Math.min(m, n);\n let ni = Math.min(m + 1, n);\n let s = new Float64Array(ni);\n let U = new Matrix(m, nu);\n let V = new Matrix(n, n);\n\n let e = new Float64Array(n);\n let work = new Float64Array(m);\n\n let si = new Float64Array(ni);\n for (let i = 0; i < ni; i++) si[i] = i;\n\n let nct = Math.min(m - 1, n);\n let nrt = Math.max(0, Math.min(n - 2, m));\n let mrc = Math.max(nct, nrt);\n\n for (let k = 0; k < mrc; k++) {\n if (k < nct) {\n s[k] = 0;\n for (let i = k; i < m; i++) {\n s[k] = hypotenuse(s[k], a.get(i, k));\n }\n if (s[k] !== 0) {\n if (a.get(k, k) < 0) {\n s[k] = -s[k];\n }\n for (let i = k; i < m; i++) {\n a.set(i, k, a.get(i, k) / s[k]);\n }\n a.set(k, k, a.get(k, k) + 1);\n }\n s[k] = -s[k];\n }\n\n for (let j = k + 1; j < n; j++) {\n if (k < nct && s[k] !== 0) {\n let t = 0;\n for (let i = k; i < m; i++) {\n t += a.get(i, k) * a.get(i, j);\n }\n t = -t / a.get(k, k);\n for (let i = k; i < m; i++) {\n a.set(i, j, a.get(i, j) + t * a.get(i, k));\n }\n }\n e[j] = a.get(k, j);\n }\n\n if (wantu && k < nct) {\n for (let i = k; i < m; i++) {\n U.set(i, k, a.get(i, k));\n }\n }\n\n if (k < nrt) {\n e[k] = 0;\n for (let i = k + 1; i < n; i++) {\n e[k] = hypotenuse(e[k], e[i]);\n }\n if (e[k] !== 0) {\n if (e[k + 1] < 0) {\n e[k] = 0 - e[k];\n }\n for (let i = k + 1; i < n; i++) {\n e[i] /= e[k];\n }\n e[k + 1] += 1;\n }\n e[k] = -e[k];\n if (k + 1 < m && e[k] !== 0) {\n for (let i = k + 1; i < m; i++) {\n work[i] = 0;\n }\n for (let i = k + 1; i < m; i++) {\n for (let j = k + 1; j < n; j++) {\n work[i] += e[j] * a.get(i, j);\n }\n }\n for (let j = k + 1; j < n; j++) {\n let t = -e[j] / e[k + 1];\n for (let i = k + 1; i < m; i++) {\n a.set(i, j, a.get(i, j) + t * work[i]);\n }\n }\n }\n if (wantv) {\n for (let i = k + 1; i < n; i++) {\n V.set(i, k, e[i]);\n }\n }\n }\n }\n\n let p = Math.min(n, m + 1);\n if (nct < n) {\n s[nct] = a.get(nct, nct);\n }\n if (m < p) {\n s[p - 1] = 0;\n }\n if (nrt + 1 < p) {\n e[nrt] = a.get(nrt, p - 1);\n }\n e[p - 1] = 0;\n\n if (wantu) {\n for (let j = nct; j < nu; j++) {\n for (let i = 0; i < m; i++) {\n U.set(i, j, 0);\n }\n U.set(j, j, 1);\n }\n for (let k = nct - 1; k >= 0; k--) {\n if (s[k] !== 0) {\n for (let j = k + 1; j < nu; j++) {\n let t = 0;\n for (let i = k; i < m; i++) {\n t += U.get(i, k) * U.get(i, j);\n }\n t = -t / U.get(k, k);\n for (let i = k; i < m; i++) {\n U.set(i, j, U.get(i, j) + t * U.get(i, k));\n }\n }\n for (let i = k; i < m; i++) {\n U.set(i, k, -U.get(i, k));\n }\n U.set(k, k, 1 + U.get(k, k));\n for (let i = 0; i < k - 1; i++) {\n U.set(i, k, 0);\n }\n } else {\n for (let i = 0; i < m; i++) {\n U.set(i, k, 0);\n }\n U.set(k, k, 1);\n }\n }\n }\n\n if (wantv) {\n for (let k = n - 1; k >= 0; k--) {\n if (k < nrt && e[k] !== 0) {\n for (let j = k + 1; j < n; j++) {\n let t = 0;\n for (let i = k + 1; i < n; i++) {\n t += V.get(i, k) * V.get(i, j);\n }\n t = -t / V.get(k + 1, k);\n for (let i = k + 1; i < n; i++) {\n V.set(i, j, V.get(i, j) + t * V.get(i, k));\n }\n }\n }\n for (let i = 0; i < n; i++) {\n V.set(i, k, 0);\n }\n V.set(k, k, 1);\n }\n }\n\n let pp = p - 1;\n let iter = 0;\n let eps = Number.EPSILON;\n while (p > 0) {\n let k, kase;\n for (k = p - 2; k >= -1; k--) {\n if (k === -1) {\n break;\n }\n const alpha =\n Number.MIN_VALUE + eps * Math.abs(s[k] + Math.abs(s[k + 1]));\n if (Math.abs(e[k]) <= alpha || Number.isNaN(e[k])) {\n e[k] = 0;\n break;\n }\n }\n if (k === p - 2) {\n kase = 4;\n } else {\n let ks;\n for (ks = p - 1; ks >= k; ks--) {\n if (ks === k) {\n break;\n }\n let t =\n (ks !== p ? Math.abs(e[ks]) : 0) +\n (ks !== k + 1 ? Math.abs(e[ks - 1]) : 0);\n if (Math.abs(s[ks]) <= eps * t) {\n s[ks] = 0;\n break;\n }\n }\n if (ks === k) {\n kase = 3;\n } else if (ks === p - 1) {\n kase = 1;\n } else {\n kase = 2;\n k = ks;\n }\n }\n\n k++;\n\n switch (kase) {\n case 1: {\n let f = e[p - 2];\n e[p - 2] = 0;\n for (let j = p - 2; j >= k; j--) {\n let t = hypotenuse(s[j], f);\n let cs = s[j] / t;\n let sn = f / t;\n s[j] = t;\n if (j !== k) {\n f = -sn * e[j - 1];\n e[j - 1] = cs * e[j - 1];\n }\n if (wantv) {\n for (let i = 0; i < n; i++) {\n t = cs * V.get(i, j) + sn * V.get(i, p - 1);\n V.set(i, p - 1, -sn * V.get(i, j) + cs * V.get(i, p - 1));\n V.set(i, j, t);\n }\n }\n }\n break;\n }\n case 2: {\n let f = e[k - 1];\n e[k - 1] = 0;\n for (let j = k; j < p; j++) {\n let t = hypotenuse(s[j], f);\n let cs = s[j] / t;\n let sn = f / t;\n s[j] = t;\n f = -sn * e[j];\n e[j] = cs * e[j];\n if (wantu) {\n for (let i = 0; i < m; i++) {\n t = cs * U.get(i, j) + sn * U.get(i, k - 1);\n U.set(i, k - 1, -sn * U.get(i, j) + cs * U.get(i, k - 1));\n U.set(i, j, t);\n }\n }\n }\n break;\n }\n case 3: {\n const scale = Math.max(\n Math.abs(s[p - 1]),\n Math.abs(s[p - 2]),\n Math.abs(e[p - 2]),\n Math.abs(s[k]),\n Math.abs(e[k]),\n );\n const sp = s[p - 1] / scale;\n const spm1 = s[p - 2] / scale;\n const epm1 = e[p - 2] / scale;\n const sk = s[k] / scale;\n const ek = e[k] / scale;\n const b = ((spm1 + sp) * (spm1 - sp) + epm1 * epm1) / 2;\n const c = sp * epm1 * (sp * epm1);\n let shift = 0;\n if (b !== 0 || c !== 0) {\n if (b < 0) {\n shift = 0 - Math.sqrt(b * b + c);\n } else {\n shift = Math.sqrt(b * b + c);\n }\n shift = c / (b + shift);\n }\n let f = (sk + sp) * (sk - sp) + shift;\n let g = sk * ek;\n for (let j = k; j < p - 1; j++) {\n let t = hypotenuse(f, g);\n if (t === 0) t = Number.MIN_VALUE;\n let cs = f / t;\n let sn = g / t;\n if (j !== k) {\n e[j - 1] = t;\n }\n f = cs * s[j] + sn * e[j];\n e[j] = cs * e[j] - sn * s[j];\n g = sn * s[j + 1];\n s[j + 1] = cs * s[j + 1];\n if (wantv) {\n for (let i = 0; i < n; i++) {\n t = cs * V.get(i, j) + sn * V.get(i, j + 1);\n V.set(i, j + 1, -sn * V.get(i, j) + cs * V.get(i, j + 1));\n V.set(i, j, t);\n }\n }\n t = hypotenuse(f, g);\n if (t === 0) t = Number.MIN_VALUE;\n cs = f / t;\n sn = g / t;\n s[j] = t;\n f = cs * e[j] + sn * s[j + 1];\n s[j + 1] = -sn * e[j] + cs * s[j + 1];\n g = sn * e[j + 1];\n e[j + 1] = cs * e[j + 1];\n if (wantu && j < m - 1) {\n for (let i = 0; i < m; i++) {\n t = cs * U.get(i, j) + sn * U.get(i, j + 1);\n U.set(i, j + 1, -sn * U.get(i, j) + cs * U.get(i, j + 1));\n U.set(i, j, t);\n }\n }\n }\n e[p - 2] = f;\n iter = iter + 1;\n break;\n }\n case 4: {\n if (s[k] <= 0) {\n s[k] = s[k] < 0 ? -s[k] : 0;\n if (wantv) {\n for (let i = 0; i <= pp; i++) {\n V.set(i, k, -V.get(i, k));\n }\n }\n }\n while (k < pp) {\n if (s[k] >= s[k + 1]) {\n break;\n }\n let t = s[k];\n s[k] = s[k + 1];\n s[k + 1] = t;\n if (wantv && k < n - 1) {\n for (let i = 0; i < n; i++) {\n t = V.get(i, k + 1);\n V.set(i, k + 1, V.get(i, k));\n V.set(i, k, t);\n }\n }\n if (wantu && k < m - 1) {\n for (let i = 0; i < m; i++) {\n t = U.get(i, k + 1);\n U.set(i, k + 1, U.get(i, k));\n U.set(i, k, t);\n }\n }\n k++;\n }\n iter = 0;\n p--;\n break;\n }\n // no default\n }\n }\n\n if (swapped) {\n let tmp = V;\n V = U;\n U = tmp;\n }\n\n this.m = m;\n this.n = n;\n this.s = s;\n this.U = U;\n this.V = V;\n }\n\n solve(value) {\n let Y = value;\n let e = this.threshold;\n let scols = this.s.length;\n let Ls = Matrix.zeros(scols, scols);\n\n for (let i = 0; i < scols; i++) {\n if (Math.abs(this.s[i]) <= e) {\n Ls.set(i, i, 0);\n } else {\n Ls.set(i, i, 1 / this.s[i]);\n }\n }\n\n let U = this.U;\n let V = this.rightSingularVectors;\n\n let VL = V.mmul(Ls);\n let vrows = V.rows;\n let urows = U.rows;\n let VLU = Matrix.zeros(vrows, urows);\n\n for (let i = 0; i < vrows; i++) {\n for (let j = 0; j < urows; j++) {\n let sum = 0;\n for (let k = 0; k < scols; k++) {\n sum += VL.get(i, k) * U.get(j, k);\n }\n VLU.set(i, j, sum);\n }\n }\n\n return VLU.mmul(Y);\n }\n\n solveForDiagonal(value) {\n return this.solve(Matrix.diag(value));\n }\n\n inverse() {\n let V = this.V;\n let e = this.threshold;\n let vrows = V.rows;\n let vcols = V.columns;\n let X = new Matrix(vrows, this.s.length);\n\n for (let i = 0; i < vrows; i++) {\n for (let j = 0; j < vcols; j++) {\n if (Math.abs(this.s[j]) > e) {\n X.set(i, j, V.get(i, j) / this.s[j]);\n }\n }\n }\n\n let U = this.U;\n\n let urows = U.rows;\n let ucols = U.columns;\n let Y = new Matrix(vrows, urows);\n\n for (let i = 0; i < vrows; i++) {\n for (let j = 0; j < urows; j++) {\n let sum = 0;\n for (let k = 0; k < ucols; k++) {\n sum += X.get(i, k) * U.get(j, k);\n }\n Y.set(i, j, sum);\n }\n }\n\n return Y;\n }\n\n get condition() {\n return this.s[0] / this.s[Math.min(this.m, this.n) - 1];\n }\n\n get norm2() {\n return this.s[0];\n }\n\n get rank() {\n let tol = Math.max(this.m, this.n) * this.s[0] * Number.EPSILON;\n let r = 0;\n let s = this.s;\n for (let i = 0, ii = s.length; i < ii; i++) {\n if (s[i] > tol) {\n r++;\n }\n }\n return r;\n }\n\n get diagonal() {\n return Array.from(this.s);\n }\n\n get threshold() {\n return (Number.EPSILON / 2) * Math.max(this.m, this.n) * this.s[0];\n }\n\n get leftSingularVectors() {\n return this.U;\n }\n\n get rightSingularVectors() {\n return this.V;\n }\n\n get diagonalMatrix() {\n return Matrix.diag(this.s);\n }\n}\n","import LuDecomposition from './dc/lu';\nimport QrDecomposition from './dc/qr';\nimport SingularValueDecomposition from './dc/svd';\nimport Matrix from './matrix';\nimport WrapperMatrix2D from './wrap/WrapperMatrix2D';\n\nexport function inverse(matrix, useSVD = false) {\n matrix = WrapperMatrix2D.checkMatrix(matrix);\n if (useSVD) {\n return new SingularValueDecomposition(matrix).inverse();\n } else {\n return solve(matrix, Matrix.eye(matrix.rows));\n }\n}\n\nexport function solve(leftHandSide, rightHandSide, useSVD = false) {\n leftHandSide = WrapperMatrix2D.checkMatrix(leftHandSide);\n rightHandSide = WrapperMatrix2D.checkMatrix(rightHandSide);\n if (useSVD) {\n return new SingularValueDecomposition(leftHandSide).solve(rightHandSide);\n } else {\n return leftHandSide.isSquare()\n ? new LuDecomposition(leftHandSide).solve(rightHandSide)\n : new QrDecomposition(leftHandSide).solve(rightHandSide);\n }\n}\n","import Matrix from './matrix';\nimport LuDecomposition from './dc/lu';\nimport MatrixSelectionView from './views/selection';\n\nexport function determinant(matrix) {\n matrix = Matrix.checkMatrix(matrix);\n if (matrix.isSquare()) {\n let a, b, c, d;\n if (matrix.columns === 2) {\n // 2 x 2 matrix\n a = matrix.get(0, 0);\n b = matrix.get(0, 1);\n c = matrix.get(1, 0);\n d = matrix.get(1, 1);\n\n return a * d - b * c;\n } else if (matrix.columns === 3) {\n // 3 x 3 matrix\n let subMatrix0, subMatrix1, subMatrix2;\n subMatrix0 = new MatrixSelectionView(matrix, [1, 2], [1, 2]);\n subMatrix1 = new MatrixSelectionView(matrix, [1, 2], [0, 2]);\n subMatrix2 = new MatrixSelectionView(matrix, [1, 2], [0, 1]);\n a = matrix.get(0, 0);\n b = matrix.get(0, 1);\n c = matrix.get(0, 2);\n\n return (\n a * determinant(subMatrix0) -\n b * determinant(subMatrix1) +\n c * determinant(subMatrix2)\n );\n } else {\n // general purpose determinant using the LU decomposition\n return new LuDecomposition(matrix).determinant;\n }\n } else {\n throw Error('determinant can only be calculated for a square matrix');\n }\n}\n","import Matrix from './matrix';\nimport SingularValueDecomposition from './dc/svd';\n\nfunction xrange(n, exception) {\n let range = [];\n for (let i = 0; i < n; i++) {\n if (i !== exception) {\n range.push(i);\n }\n }\n return range;\n}\n\nfunction dependenciesOneRow(\n error,\n matrix,\n index,\n thresholdValue = 10e-10,\n thresholdError = 10e-10,\n) {\n if (error > thresholdError) {\n return new Array(matrix.rows + 1).fill(0);\n } else {\n let returnArray = matrix.addRow(index, [0]);\n for (let i = 0; i < returnArray.rows; i++) {\n if (Math.abs(returnArray.get(i, 0)) < thresholdValue) {\n returnArray.set(i, 0, 0);\n }\n }\n return returnArray.to1DArray();\n }\n}\n\nexport function linearDependencies(matrix, options = {}) {\n const { thresholdValue = 10e-10, thresholdError = 10e-10 } = options;\n matrix = Matrix.checkMatrix(matrix);\n\n let n = matrix.rows;\n let results = new Matrix(n, n);\n\n for (let i = 0; i < n; i++) {\n let b = Matrix.columnVector(matrix.getRow(i));\n let Abis = matrix.subMatrixRow(xrange(n, i)).transpose();\n let svd = new SingularValueDecomposition(Abis);\n let x = svd.solve(b);\n let error = Matrix.sub(b, Abis.mmul(x))\n .abs()\n .max();\n results.setRow(\n i,\n dependenciesOneRow(error, x, i, thresholdValue, thresholdError),\n );\n }\n return results;\n}\n","import SVD from './dc/svd';\nimport Matrix from './matrix';\n\nexport function pseudoInverse(matrix, threshold = Number.EPSILON) {\n matrix = Matrix.checkMatrix(matrix);\n let svdSolution = new SVD(matrix, { autoTranspose: true });\n\n let U = svdSolution.leftSingularVectors;\n let V = svdSolution.rightSingularVectors;\n let s = svdSolution.diagonal;\n\n for (let i = 0; i < s.length; i++) {\n if (Math.abs(s[i]) > threshold) {\n s[i] = 1.0 / s[i];\n } else {\n s[i] = 0.0;\n }\n }\n\n return V.mmul(Matrix.diag(s).mmul(U.transpose()));\n}\n","import Matrix from './matrix';\n\nexport function covariance(xMatrix, yMatrix = xMatrix, options = {}) {\n xMatrix = Matrix.checkMatrix(xMatrix);\n let yIsSame = false;\n if (\n typeof yMatrix === 'object' &&\n !Matrix.isMatrix(yMatrix) &&\n !Array.isArray(yMatrix)\n ) {\n options = yMatrix;\n yMatrix = xMatrix;\n yIsSame = true;\n } else {\n yMatrix = Matrix.checkMatrix(yMatrix);\n }\n if (xMatrix.rows !== yMatrix.rows) {\n throw new TypeError('Both matrices must have the same number of rows');\n }\n const { center = true } = options;\n if (center) {\n xMatrix = xMatrix.center('column');\n if (!yIsSame) {\n yMatrix = yMatrix.center('column');\n }\n }\n const cov = xMatrix.transpose().mmul(yMatrix);\n for (let i = 0; i < cov.rows; i++) {\n for (let j = 0; j < cov.columns; j++) {\n cov.set(i, j, cov.get(i, j) * (1 / (xMatrix.rows - 1)));\n }\n }\n return cov;\n}\n","import Matrix from './matrix';\n\nexport function correlation(xMatrix, yMatrix = xMatrix, options = {}) {\n xMatrix = Matrix.checkMatrix(xMatrix);\n let yIsSame = false;\n if (\n typeof yMatrix === 'object' &&\n !Matrix.isMatrix(yMatrix) &&\n !Array.isArray(yMatrix)\n ) {\n options = yMatrix;\n yMatrix = xMatrix;\n yIsSame = true;\n } else {\n yMatrix = Matrix.checkMatrix(yMatrix);\n }\n if (xMatrix.rows !== yMatrix.rows) {\n throw new TypeError('Both matrices must have the same number of rows');\n }\n\n const { center = true, scale = true } = options;\n if (center) {\n xMatrix.center('column');\n if (!yIsSame) {\n yMatrix.center('column');\n }\n }\n if (scale) {\n xMatrix.scale('column');\n if (!yIsSame) {\n yMatrix.scale('column');\n }\n }\n\n const sdx = xMatrix.standardDeviation('column', { unbiased: true });\n const sdy = yIsSame\n ? sdx\n : yMatrix.standardDeviation('column', { unbiased: true });\n\n const corr = xMatrix.transpose().mmul(yMatrix);\n for (let i = 0; i < corr.rows; i++) {\n for (let j = 0; j < corr.columns; j++) {\n corr.set(\n i,\n j,\n corr.get(i, j) * (1 / (sdx[i] * sdy[j])) * (1 / (xMatrix.rows - 1)),\n );\n }\n }\n return corr;\n}\n","import Matrix from '../matrix';\nimport WrapperMatrix2D from '../wrap/WrapperMatrix2D';\n\nimport { hypotenuse } from './util';\n\nexport default class EigenvalueDecomposition {\n constructor(matrix, options = {}) {\n const { assumeSymmetric = false } = options;\n\n matrix = WrapperMatrix2D.checkMatrix(matrix);\n if (!matrix.isSquare()) {\n throw new Error('Matrix is not a square matrix');\n }\n\n let n = matrix.columns;\n let V = new Matrix(n, n);\n let d = new Float64Array(n);\n let e = new Float64Array(n);\n let value = matrix;\n let i, j;\n\n let isSymmetric = false;\n if (assumeSymmetric) {\n isSymmetric = true;\n } else {\n isSymmetric = matrix.isSymmetric();\n }\n\n if (isSymmetric) {\n for (i = 0; i < n; i++) {\n for (j = 0; j < n; j++) {\n V.set(i, j, value.get(i, j));\n }\n }\n tred2(n, e, d, V);\n tql2(n, e, d, V);\n } else {\n let H = new Matrix(n, n);\n let ort = new Float64Array(n);\n for (j = 0; j < n; j++) {\n for (i = 0; i < n; i++) {\n H.set(i, j, value.get(i, j));\n }\n }\n orthes(n, H, ort, V);\n hqr2(n, e, d, V, H);\n }\n\n this.n = n;\n this.e = e;\n this.d = d;\n this.V = V;\n }\n\n get realEigenvalues() {\n return Array.from(this.d);\n }\n\n get imaginaryEigenvalues() {\n return Array.from(this.e);\n }\n\n get eigenvectorMatrix() {\n return this.V;\n }\n\n get diagonalMatrix() {\n let n = this.n;\n let e = this.e;\n let d = this.d;\n let X = new Matrix(n, n);\n let i, j;\n for (i = 0; i < n; i++) {\n for (j = 0; j < n; j++) {\n X.set(i, j, 0);\n }\n X.set(i, i, d[i]);\n if (e[i] > 0) {\n X.set(i, i + 1, e[i]);\n } else if (e[i] < 0) {\n X.set(i, i - 1, e[i]);\n }\n }\n return X;\n }\n}\n\nfunction tred2(n, e, d, V) {\n let f, g, h, i, j, k, hh, scale;\n\n for (j = 0; j < n; j++) {\n d[j] = V.get(n - 1, j);\n }\n\n for (i = n - 1; i > 0; i--) {\n scale = 0;\n h = 0;\n for (k = 0; k < i; k++) {\n scale = scale + Math.abs(d[k]);\n }\n\n if (scale === 0) {\n e[i] = d[i - 1];\n for (j = 0; j < i; j++) {\n d[j] = V.get(i - 1, j);\n V.set(i, j, 0);\n V.set(j, i, 0);\n }\n } else {\n for (k = 0; k < i; k++) {\n d[k] /= scale;\n h += d[k] * d[k];\n }\n\n f = d[i - 1];\n g = Math.sqrt(h);\n if (f > 0) {\n g = -g;\n }\n\n e[i] = scale * g;\n h = h - f * g;\n d[i - 1] = f - g;\n for (j = 0; j < i; j++) {\n e[j] = 0;\n }\n\n for (j = 0; j < i; j++) {\n f = d[j];\n V.set(j, i, f);\n g = e[j] + V.get(j, j) * f;\n for (k = j + 1; k <= i - 1; k++) {\n g += V.get(k, j) * d[k];\n e[k] += V.get(k, j) * f;\n }\n e[j] = g;\n }\n\n f = 0;\n for (j = 0; j < i; j++) {\n e[j] /= h;\n f += e[j] * d[j];\n }\n\n hh = f / (h + h);\n for (j = 0; j < i; j++) {\n e[j] -= hh * d[j];\n }\n\n for (j = 0; j < i; j++) {\n f = d[j];\n g = e[j];\n for (k = j; k <= i - 1; k++) {\n V.set(k, j, V.get(k, j) - (f * e[k] + g * d[k]));\n }\n d[j] = V.get(i - 1, j);\n V.set(i, j, 0);\n }\n }\n d[i] = h;\n }\n\n for (i = 0; i < n - 1; i++) {\n V.set(n - 1, i, V.get(i, i));\n V.set(i, i, 1);\n h = d[i + 1];\n if (h !== 0) {\n for (k = 0; k <= i; k++) {\n d[k] = V.get(k, i + 1) / h;\n }\n\n for (j = 0; j <= i; j++) {\n g = 0;\n for (k = 0; k <= i; k++) {\n g += V.get(k, i + 1) * V.get(k, j);\n }\n for (k = 0; k <= i; k++) {\n V.set(k, j, V.get(k, j) - g * d[k]);\n }\n }\n }\n\n for (k = 0; k <= i; k++) {\n V.set(k, i + 1, 0);\n }\n }\n\n for (j = 0; j < n; j++) {\n d[j] = V.get(n - 1, j);\n V.set(n - 1, j, 0);\n }\n\n V.set(n - 1, n - 1, 1);\n e[0] = 0;\n}\n\nfunction tql2(n, e, d, V) {\n let g, h, i, j, k, l, m, p, r, dl1, c, c2, c3, el1, s, s2, iter;\n\n for (i = 1; i < n; i++) {\n e[i - 1] = e[i];\n }\n\n e[n - 1] = 0;\n\n let f = 0;\n let tst1 = 0;\n let eps = Number.EPSILON;\n\n for (l = 0; l < n; l++) {\n tst1 = Math.max(tst1, Math.abs(d[l]) + Math.abs(e[l]));\n m = l;\n while (m < n) {\n if (Math.abs(e[m]) <= eps * tst1) {\n break;\n }\n m++;\n }\n\n if (m > l) {\n iter = 0;\n do {\n iter = iter + 1;\n\n g = d[l];\n p = (d[l + 1] - g) / (2 * e[l]);\n r = hypotenuse(p, 1);\n if (p < 0) {\n r = -r;\n }\n\n d[l] = e[l] / (p + r);\n d[l + 1] = e[l] * (p + r);\n dl1 = d[l + 1];\n h = g - d[l];\n for (i = l + 2; i < n; i++) {\n d[i] -= h;\n }\n\n f = f + h;\n\n p = d[m];\n c = 1;\n c2 = c;\n c3 = c;\n el1 = e[l + 1];\n s = 0;\n s2 = 0;\n for (i = m - 1; i >= l; i--) {\n c3 = c2;\n c2 = c;\n s2 = s;\n g = c * e[i];\n h = c * p;\n r = hypotenuse(p, e[i]);\n e[i + 1] = s * r;\n s = e[i] / r;\n c = p / r;\n p = c * d[i] - s * g;\n d[i + 1] = h + s * (c * g + s * d[i]);\n\n for (k = 0; k < n; k++) {\n h = V.get(k, i + 1);\n V.set(k, i + 1, s * V.get(k, i) + c * h);\n V.set(k, i, c * V.get(k, i) - s * h);\n }\n }\n\n p = (-s * s2 * c3 * el1 * e[l]) / dl1;\n e[l] = s * p;\n d[l] = c * p;\n } while (Math.abs(e[l]) > eps * tst1);\n }\n d[l] = d[l] + f;\n e[l] = 0;\n }\n\n for (i = 0; i < n - 1; i++) {\n k = i;\n p = d[i];\n for (j = i + 1; j < n; j++) {\n if (d[j] < p) {\n k = j;\n p = d[j];\n }\n }\n\n if (k !== i) {\n d[k] = d[i];\n d[i] = p;\n for (j = 0; j < n; j++) {\n p = V.get(j, i);\n V.set(j, i, V.get(j, k));\n V.set(j, k, p);\n }\n }\n }\n}\n\nfunction orthes(n, H, ort, V) {\n let low = 0;\n let high = n - 1;\n let f, g, h, i, j, m;\n let scale;\n\n for (m = low + 1; m <= high - 1; m++) {\n scale = 0;\n for (i = m; i <= high; i++) {\n scale = scale + Math.abs(H.get(i, m - 1));\n }\n\n if (scale !== 0) {\n h = 0;\n for (i = high; i >= m; i--) {\n ort[i] = H.get(i, m - 1) / scale;\n h += ort[i] * ort[i];\n }\n\n g = Math.sqrt(h);\n if (ort[m] > 0) {\n g = -g;\n }\n\n h = h - ort[m] * g;\n ort[m] = ort[m] - g;\n\n for (j = m; j < n; j++) {\n f = 0;\n for (i = high; i >= m; i--) {\n f += ort[i] * H.get(i, j);\n }\n\n f = f / h;\n for (i = m; i <= high; i++) {\n H.set(i, j, H.get(i, j) - f * ort[i]);\n }\n }\n\n for (i = 0; i <= high; i++) {\n f = 0;\n for (j = high; j >= m; j--) {\n f += ort[j] * H.get(i, j);\n }\n\n f = f / h;\n for (j = m; j <= high; j++) {\n H.set(i, j, H.get(i, j) - f * ort[j]);\n }\n }\n\n ort[m] = scale * ort[m];\n H.set(m, m - 1, scale * g);\n }\n }\n\n for (i = 0; i < n; i++) {\n for (j = 0; j < n; j++) {\n V.set(i, j, i === j ? 1 : 0);\n }\n }\n\n for (m = high - 1; m >= low + 1; m--) {\n if (H.get(m, m - 1) !== 0) {\n for (i = m + 1; i <= high; i++) {\n ort[i] = H.get(i, m - 1);\n }\n\n for (j = m; j <= high; j++) {\n g = 0;\n for (i = m; i <= high; i++) {\n g += ort[i] * V.get(i, j);\n }\n\n g = g / ort[m] / H.get(m, m - 1);\n for (i = m; i <= high; i++) {\n V.set(i, j, V.get(i, j) + g * ort[i]);\n }\n }\n }\n }\n}\n\nfunction hqr2(nn, e, d, V, H) {\n let n = nn - 1;\n let low = 0;\n let high = nn - 1;\n let eps = Number.EPSILON;\n let exshift = 0;\n let norm = 0;\n let p = 0;\n let q = 0;\n let r = 0;\n let s = 0;\n let z = 0;\n let iter = 0;\n let i, j, k, l, m, t, w, x, y;\n let ra, sa, vr, vi;\n let notlast, cdivres;\n\n for (i = 0; i < nn; i++) {\n if (i < low || i > high) {\n d[i] = H.get(i, i);\n e[i] = 0;\n }\n\n for (j = Math.max(i - 1, 0); j < nn; j++) {\n norm = norm + Math.abs(H.get(i, j));\n }\n }\n\n while (n >= low) {\n l = n;\n while (l > low) {\n s = Math.abs(H.get(l - 1, l - 1)) + Math.abs(H.get(l, l));\n if (s === 0) {\n s = norm;\n }\n if (Math.abs(H.get(l, l - 1)) < eps * s) {\n break;\n }\n l--;\n }\n\n if (l === n) {\n H.set(n, n, H.get(n, n) + exshift);\n d[n] = H.get(n, n);\n e[n] = 0;\n n--;\n iter = 0;\n } else if (l === n - 1) {\n w = H.get(n, n - 1) * H.get(n - 1, n);\n p = (H.get(n - 1, n - 1) - H.get(n, n)) / 2;\n q = p * p + w;\n z = Math.sqrt(Math.abs(q));\n H.set(n, n, H.get(n, n) + exshift);\n H.set(n - 1, n - 1, H.get(n - 1, n - 1) + exshift);\n x = H.get(n, n);\n\n if (q >= 0) {\n z = p >= 0 ? p + z : p - z;\n d[n - 1] = x + z;\n d[n] = d[n - 1];\n if (z !== 0) {\n d[n] = x - w / z;\n }\n e[n - 1] = 0;\n e[n] = 0;\n x = H.get(n, n - 1);\n s = Math.abs(x) + Math.abs(z);\n p = x / s;\n q = z / s;\n r = Math.sqrt(p * p + q * q);\n p = p / r;\n q = q / r;\n\n for (j = n - 1; j < nn; j++) {\n z = H.get(n - 1, j);\n H.set(n - 1, j, q * z + p * H.get(n, j));\n H.set(n, j, q * H.get(n, j) - p * z);\n }\n\n for (i = 0; i <= n; i++) {\n z = H.get(i, n - 1);\n H.set(i, n - 1, q * z + p * H.get(i, n));\n H.set(i, n, q * H.get(i, n) - p * z);\n }\n\n for (i = low; i <= high; i++) {\n z = V.get(i, n - 1);\n V.set(i, n - 1, q * z + p * V.get(i, n));\n V.set(i, n, q * V.get(i, n) - p * z);\n }\n } else {\n d[n - 1] = x + p;\n d[n] = x + p;\n e[n - 1] = z;\n e[n] = -z;\n }\n\n n = n - 2;\n iter = 0;\n } else {\n x = H.get(n, n);\n y = 0;\n w = 0;\n if (l < n) {\n y = H.get(n - 1, n - 1);\n w = H.get(n, n - 1) * H.get(n - 1, n);\n }\n\n if (iter === 10) {\n exshift += x;\n for (i = low; i <= n; i++) {\n H.set(i, i, H.get(i, i) - x);\n }\n s = Math.abs(H.get(n, n - 1)) + Math.abs(H.get(n - 1, n - 2));\n x = y = 0.75 * s;\n w = -0.4375 * s * s;\n }\n\n if (iter === 30) {\n s = (y - x) / 2;\n s = s * s + w;\n if (s > 0) {\n s = Math.sqrt(s);\n if (y < x) {\n s = -s;\n }\n s = x - w / ((y - x) / 2 + s);\n for (i = low; i <= n; i++) {\n H.set(i, i, H.get(i, i) - s);\n }\n exshift += s;\n x = y = w = 0.964;\n }\n }\n\n iter = iter + 1;\n\n m = n - 2;\n while (m >= l) {\n z = H.get(m, m);\n r = x - z;\n s = y - z;\n p = (r * s - w) / H.get(m + 1, m) + H.get(m, m + 1);\n q = H.get(m + 1, m + 1) - z - r - s;\n r = H.get(m + 2, m + 1);\n s = Math.abs(p) + Math.abs(q) + Math.abs(r);\n p = p / s;\n q = q / s;\n r = r / s;\n if (m === l) {\n break;\n }\n if (\n Math.abs(H.get(m, m - 1)) * (Math.abs(q) + Math.abs(r)) <\n eps *\n (Math.abs(p) *\n (Math.abs(H.get(m - 1, m - 1)) +\n Math.abs(z) +\n Math.abs(H.get(m + 1, m + 1))))\n ) {\n break;\n }\n m--;\n }\n\n for (i = m + 2; i <= n; i++) {\n H.set(i, i - 2, 0);\n if (i > m + 2) {\n H.set(i, i - 3, 0);\n }\n }\n\n for (k = m; k <= n - 1; k++) {\n notlast = k !== n - 1;\n if (k !== m) {\n p = H.get(k, k - 1);\n q = H.get(k + 1, k - 1);\n r = notlast ? H.get(k + 2, k - 1) : 0;\n x = Math.abs(p) + Math.abs(q) + Math.abs(r);\n if (x !== 0) {\n p = p / x;\n q = q / x;\n r = r / x;\n }\n }\n\n if (x === 0) {\n break;\n }\n\n s = Math.sqrt(p * p + q * q + r * r);\n if (p < 0) {\n s = -s;\n }\n\n if (s !== 0) {\n if (k !== m) {\n H.set(k, k - 1, -s * x);\n } else if (l !== m) {\n H.set(k, k - 1, -H.get(k, k - 1));\n }\n\n p = p + s;\n x = p / s;\n y = q / s;\n z = r / s;\n q = q / p;\n r = r / p;\n\n for (j = k; j < nn; j++) {\n p = H.get(k, j) + q * H.get(k + 1, j);\n if (notlast) {\n p = p + r * H.get(k + 2, j);\n H.set(k + 2, j, H.get(k + 2, j) - p * z);\n }\n\n H.set(k, j, H.get(k, j) - p * x);\n H.set(k + 1, j, H.get(k + 1, j) - p * y);\n }\n\n for (i = 0; i <= Math.min(n, k + 3); i++) {\n p = x * H.get(i, k) + y * H.get(i, k + 1);\n if (notlast) {\n p = p + z * H.get(i, k + 2);\n H.set(i, k + 2, H.get(i, k + 2) - p * r);\n }\n\n H.set(i, k, H.get(i, k) - p);\n H.set(i, k + 1, H.get(i, k + 1) - p * q);\n }\n\n for (i = low; i <= high; i++) {\n p = x * V.get(i, k) + y * V.get(i, k + 1);\n if (notlast) {\n p = p + z * V.get(i, k + 2);\n V.set(i, k + 2, V.get(i, k + 2) - p * r);\n }\n\n V.set(i, k, V.get(i, k) - p);\n V.set(i, k + 1, V.get(i, k + 1) - p * q);\n }\n }\n }\n }\n }\n\n if (norm === 0) {\n return;\n }\n\n for (n = nn - 1; n >= 0; n--) {\n p = d[n];\n q = e[n];\n\n if (q === 0) {\n l = n;\n H.set(n, n, 1);\n for (i = n - 1; i >= 0; i--) {\n w = H.get(i, i) - p;\n r = 0;\n for (j = l; j <= n; j++) {\n r = r + H.get(i, j) * H.get(j, n);\n }\n\n if (e[i] < 0) {\n z = w;\n s = r;\n } else {\n l = i;\n if (e[i] === 0) {\n H.set(i, n, w !== 0 ? -r / w : -r / (eps * norm));\n } else {\n x = H.get(i, i + 1);\n y = H.get(i + 1, i);\n q = (d[i] - p) * (d[i] - p) + e[i] * e[i];\n t = (x * s - z * r) / q;\n H.set(i, n, t);\n H.set(\n i + 1,\n n,\n Math.abs(x) > Math.abs(z) ? (-r - w * t) / x : (-s - y * t) / z,\n );\n }\n\n t = Math.abs(H.get(i, n));\n if (eps * t * t > 1) {\n for (j = i; j <= n; j++) {\n H.set(j, n, H.get(j, n) / t);\n }\n }\n }\n }\n } else if (q < 0) {\n l = n - 1;\n\n if (Math.abs(H.get(n, n - 1)) > Math.abs(H.get(n - 1, n))) {\n H.set(n - 1, n - 1, q / H.get(n, n - 1));\n H.set(n - 1, n, -(H.get(n, n) - p) / H.get(n, n - 1));\n } else {\n cdivres = cdiv(0, -H.get(n - 1, n), H.get(n - 1, n - 1) - p, q);\n H.set(n - 1, n - 1, cdivres[0]);\n H.set(n - 1, n, cdivres[1]);\n }\n\n H.set(n, n - 1, 0);\n H.set(n, n, 1);\n for (i = n - 2; i >= 0; i--) {\n ra = 0;\n sa = 0;\n for (j = l; j <= n; j++) {\n ra = ra + H.get(i, j) * H.get(j, n - 1);\n sa = sa + H.get(i, j) * H.get(j, n);\n }\n\n w = H.get(i, i) - p;\n\n if (e[i] < 0) {\n z = w;\n r = ra;\n s = sa;\n } else {\n l = i;\n if (e[i] === 0) {\n cdivres = cdiv(-ra, -sa, w, q);\n H.set(i, n - 1, cdivres[0]);\n H.set(i, n, cdivres[1]);\n } else {\n x = H.get(i, i + 1);\n y = H.get(i + 1, i);\n vr = (d[i] - p) * (d[i] - p) + e[i] * e[i] - q * q;\n vi = (d[i] - p) * 2 * q;\n if (vr === 0 && vi === 0) {\n vr =\n eps *\n norm *\n (Math.abs(w) +\n Math.abs(q) +\n Math.abs(x) +\n Math.abs(y) +\n Math.abs(z));\n }\n cdivres = cdiv(\n x * r - z * ra + q * sa,\n x * s - z * sa - q * ra,\n vr,\n vi,\n );\n H.set(i, n - 1, cdivres[0]);\n H.set(i, n, cdivres[1]);\n if (Math.abs(x) > Math.abs(z) + Math.abs(q)) {\n H.set(\n i + 1,\n n - 1,\n (-ra - w * H.get(i, n - 1) + q * H.get(i, n)) / x,\n );\n H.set(\n i + 1,\n n,\n (-sa - w * H.get(i, n) - q * H.get(i, n - 1)) / x,\n );\n } else {\n cdivres = cdiv(\n -r - y * H.get(i, n - 1),\n -s - y * H.get(i, n),\n z,\n q,\n );\n H.set(i + 1, n - 1, cdivres[0]);\n H.set(i + 1, n, cdivres[1]);\n }\n }\n\n t = Math.max(Math.abs(H.get(i, n - 1)), Math.abs(H.get(i, n)));\n if (eps * t * t > 1) {\n for (j = i; j <= n; j++) {\n H.set(j, n - 1, H.get(j, n - 1) / t);\n H.set(j, n, H.get(j, n) / t);\n }\n }\n }\n }\n }\n }\n\n for (i = 0; i < nn; i++) {\n if (i < low || i > high) {\n for (j = i; j < nn; j++) {\n V.set(i, j, H.get(i, j));\n }\n }\n }\n\n for (j = nn - 1; j >= low; j--) {\n for (i = low; i <= high; i++) {\n z = 0;\n for (k = low; k <= Math.min(j, high); k++) {\n z = z + V.get(i, k) * H.get(k, j);\n }\n V.set(i, j, z);\n }\n }\n}\n\nfunction cdiv(xr, xi, yr, yi) {\n let r, d;\n if (Math.abs(yr) > Math.abs(yi)) {\n r = yi / yr;\n d = yr + r * yi;\n return [(xr + r * xi) / d, (xi - r * xr) / d];\n } else {\n r = yr / yi;\n d = yi + r * yr;\n return [(r * xr + xi) / d, (r * xi - xr) / d];\n }\n}\n","import Matrix from '../matrix';\nimport WrapperMatrix2D from '../wrap/WrapperMatrix2D';\n\nexport default class CholeskyDecomposition {\n constructor(value) {\n value = WrapperMatrix2D.checkMatrix(value);\n if (!value.isSymmetric()) {\n throw new Error('Matrix is not symmetric');\n }\n\n let a = value;\n let dimension = a.rows;\n let l = new Matrix(dimension, dimension);\n let positiveDefinite = true;\n let i, j, k;\n\n for (j = 0; j < dimension; j++) {\n let d = 0;\n for (k = 0; k < j; k++) {\n let s = 0;\n for (i = 0; i < k; i++) {\n s += l.get(k, i) * l.get(j, i);\n }\n s = (a.get(j, k) - s) / l.get(k, k);\n l.set(j, k, s);\n d = d + s * s;\n }\n\n d = a.get(j, j) - d;\n\n positiveDefinite &= d > 0;\n l.set(j, j, Math.sqrt(Math.max(d, 0)));\n for (k = j + 1; k < dimension; k++) {\n l.set(j, k, 0);\n }\n }\n\n this.L = l;\n this.positiveDefinite = Boolean(positiveDefinite);\n }\n\n isPositiveDefinite() {\n return this.positiveDefinite;\n }\n\n solve(value) {\n value = WrapperMatrix2D.checkMatrix(value);\n\n let l = this.L;\n let dimension = l.rows;\n\n if (value.rows !== dimension) {\n throw new Error('Matrix dimensions do not match');\n }\n if (this.isPositiveDefinite() === false) {\n throw new Error('Matrix is not positive definite');\n }\n\n let count = value.columns;\n let B = value.clone();\n let i, j, k;\n\n for (k = 0; k < dimension; k++) {\n for (j = 0; j < count; j++) {\n for (i = 0; i < k; i++) {\n B.set(k, j, B.get(k, j) - B.get(i, j) * l.get(k, i));\n }\n B.set(k, j, B.get(k, j) / l.get(k, k));\n }\n }\n\n for (k = dimension - 1; k >= 0; k--) {\n for (j = 0; j < count; j++) {\n for (i = k + 1; i < dimension; i++) {\n B.set(k, j, B.get(k, j) - B.get(i, j) * l.get(i, k));\n }\n B.set(k, j, B.get(k, j) / l.get(k, k));\n }\n }\n\n return B;\n }\n\n get lowerTriangularMatrix() {\n return this.L;\n }\n}\n","import WrapperMatrix2D from '../wrap/WrapperMatrix2D';\nimport Matrix from '../matrix';\n\nexport default class nipals {\n constructor(X, options = {}) {\n X = WrapperMatrix2D.checkMatrix(X);\n let { Y } = options;\n const {\n scaleScores = false,\n maxIterations = 1000,\n terminationCriteria = 1e-10,\n } = options;\n\n let u;\n if (Y) {\n if (Array.isArray(Y) && typeof Y[0] === 'number') {\n Y = Matrix.columnVector(Y);\n } else {\n Y = WrapperMatrix2D.checkMatrix(Y);\n }\n if (!Y.isColumnVector() || Y.rows !== X.rows) {\n throw new Error('Y must be a column vector of length X.rows');\n }\n u = Y;\n } else {\n u = X.getColumnVector(0);\n }\n\n let diff = 1;\n let t, q, w, tOld;\n\n for (\n let counter = 0;\n counter < maxIterations && diff > terminationCriteria;\n counter++\n ) {\n w = X.transpose()\n .mmul(u)\n .div(\n u\n .transpose()\n .mmul(u)\n .get(0, 0),\n );\n w = w.div(w.norm());\n\n t = X.mmul(w).div(\n w\n .transpose()\n .mmul(w)\n .get(0, 0),\n );\n\n if (counter > 0) {\n diff = t\n .clone()\n .sub(tOld)\n .pow(2)\n .sum();\n }\n tOld = t.clone();\n\n if (Y) {\n q = Y.transpose()\n .mmul(t)\n .div(\n t\n .transpose()\n .mmul(t)\n .get(0, 0),\n );\n q = q.div(q.norm());\n\n u = Y.mmul(q).div(\n q\n .transpose()\n .mmul(q)\n .get(0, 0),\n );\n } else {\n u = t;\n }\n }\n\n if (Y) {\n let p = X.transpose()\n .mmul(t)\n .div(\n t\n .transpose()\n .mmul(t)\n .get(0, 0),\n );\n p = p.div(p.norm());\n let xResidual = X.clone().sub(t.clone().mmul(p.transpose()));\n let residual = u\n .transpose()\n .mmul(t)\n .div(\n t\n .transpose()\n .mmul(t)\n .get(0, 0),\n );\n let yResidual = Y.clone().sub(\n t\n .clone()\n .mulS(residual.get(0, 0))\n .mmul(q.transpose()),\n );\n\n this.t = t;\n this.p = p.transpose();\n this.w = w.transpose();\n this.q = q;\n this.u = u;\n this.s = t.transpose().mmul(t);\n this.xResidual = xResidual;\n this.yResidual = yResidual;\n this.betas = residual;\n } else {\n this.w = w.transpose();\n this.s = t\n .transpose()\n .mmul(t)\n .sqrt();\n if (scaleScores) {\n this.t = t.clone().div(this.s.get(0, 0));\n } else {\n this.t = t;\n }\n this.xResidual = X.sub(t.mmul(w.transpose()));\n }\n }\n}\n","import isArray from 'is-any-array';\n\n/**\n * Computes the mean of the given values\n * @param {Array} input\n * @return {number}\n */\n\nfunction mean(input) {\n if (!isArray(input)) {\n throw new TypeError('input must be an array');\n }\n\n if (input.length === 0) {\n throw new TypeError('input must not be empty');\n }\n\n var sum = 0;\n\n for (var i = 0; i < input.length; i++) {\n sum += input[i];\n }\n\n return sum / input.length;\n}\n\nexport default mean;\n","import Matrix from 'ml-matrix';\nimport meanArray from 'ml-array-mean';\n\n/**\n * @private\n * return an array of probabilities of each class\n * @param {Array} array - contains the classes\n * @param {number} numberOfClasses\n * @return {Matrix} - rowVector of probabilities.\n */\nexport function toDiscreteDistribution(array, numberOfClasses) {\n var counts = new Array(numberOfClasses).fill(0);\n for (var i = 0; i < array.length; ++i) {\n counts[array[i]] += 1 / array.length;\n }\n\n return Matrix.rowVector(counts);\n}\n\n/**\n * @private\n * Retrieves the impurity of array of predictions\n * @param {Array} array - predictions.\n * @return {number} Gini impurity\n */\nexport function giniImpurity(array) {\n if (array.length === 0) {\n return 0;\n }\n\n var probabilities = toDiscreteDistribution(\n array,\n getNumberOfClasses(array)\n ).getRow(0);\n\n var sum = 0.0;\n for (var i = 0; i < probabilities.length; ++i) {\n sum += probabilities[i] * probabilities[i];\n }\n\n return 1 - sum;\n}\n\n/**\n * @private\n * Return the number of classes given the array of predictions.\n * @param {Array} array - predictions.\n * @return {number} Number of classes.\n */\nexport function getNumberOfClasses(array) {\n return array.filter(function (val, i, arr) {\n return arr.indexOf(val) === i;\n }).length;\n}\n\n/**\n * @private\n * Calculates the Gini Gain of an array of predictions and those predictions splitted by a feature.\n * @para {Array} array - Predictions\n * @param {object} splitted - Object with elements \"greater\" and \"lesser\" that contains an array of predictions splitted.\n * @return {number} - Gini Gain.\n */\n\nexport function giniGain(array, splitted) {\n var splitsImpurity = 0.0;\n var splits = ['greater', 'lesser'];\n\n for (var i = 0; i < splits.length; ++i) {\n var currentSplit = splitted[splits[i]];\n splitsImpurity +=\n (giniImpurity(currentSplit) * currentSplit.length) / array.length;\n }\n\n return giniImpurity(array) - splitsImpurity;\n}\n\n/**\n * @private\n * Calculates the squared error of a predictions values.\n * @param {Array} array - predictions values\n * @return {number} squared error.\n */\nexport function squaredError(array) {\n var l = array.length;\n\n var m = meanArray(array);\n var squaredError = 0.0;\n\n for (var i = 0; i < l; ++i) {\n var currentElement = array[i];\n squaredError += (currentElement - m) * (currentElement - m);\n }\n\n return squaredError;\n}\n\n/**\n * @private\n * Calculates the sum of squared error of the two arrays that contains the splitted values.\n * @param {Array} array - this argument is no necessary but is used to fit with the main interface.\n * @param {object} splitted - Object with elements \"greater\" and \"lesser\" that contains an array of predictions splitted.\n * @return {number} - sum of squared errors.\n */\nexport function regressionError(array, splitted) {\n var error = 0.0;\n var splits = ['greater', 'lesser'];\n\n for (var i = 0; i < splits.length; ++i) {\n var currentSplit = splitted[splits[i]];\n error += squaredError(currentSplit);\n }\n return error;\n}\n\n/**\n * @private\n * Split the training set and values from a given column of the training set if is less than a value\n * @param {Matrix} X - Training set.\n * @param {Array} y - Training values.\n * @param {number} column - Column to split.\n * @param {number} value - value to split the Training set and values.\n * @return {object} - Object that contains the splitted values.\n */\nexport function matrixSplitter(X, y, column, value) {\n var lesserX = [];\n var greaterX = [];\n var lesserY = [];\n var greaterY = [];\n\n for (var i = 0; i < X.rows; ++i) {\n if (X.get(i, column) < value) {\n lesserX.push(X.getRow(i));\n lesserY.push(y[i]);\n } else {\n greaterX.push(X.getRow(i));\n greaterY.push(y[i]);\n }\n }\n\n return {\n greaterX: greaterX,\n greaterY: greaterY,\n lesserX: lesserX,\n lesserY: lesserY\n };\n}\n\n/**\n * @private\n * Calculates the mean between two values\n * @param {number} a\n * @param {number} b\n * @return {number}\n */\nexport function mean(a, b) {\n return (a + b) / 2;\n}\n\n/**\n * @private\n * Returns a list of tuples that contains the i-th element of each array.\n * @param {Array} a\n * @param {Array} b\n * @return {Array} list of tuples.\n */\nexport function zip(a, b) {\n if (a.length !== b.length) {\n throw new TypeError(\n `Error on zip: the size of a: ${a.length} is different from b: ${\n b.length\n }`\n );\n }\n\n var ret = new Array(a.length);\n for (var i = 0; i < a.length; ++i) {\n ret[i] = [a[i], b[i]];\n }\n\n return ret;\n}\n","import Matrix from 'ml-matrix';\nimport mean from 'ml-array-mean';\n\nimport * as Utils from './utils';\n\nconst gainFunctions = {\n gini: Utils.giniGain,\n regression: Utils.regressionError\n};\n\nconst splitFunctions = {\n mean: Utils.mean\n};\n\nexport default class TreeNode {\n /**\n * @private\n * Constructor for a tree node given the options received on the main classes (DecisionTreeClassifier, DecisionTreeRegression)\n * @param {object|TreeNode} options for loading\n * @constructor\n */\n constructor(options) {\n // options parameters\n this.kind = options.kind;\n this.gainFunction = options.gainFunction;\n this.splitFunction = options.splitFunction;\n this.minNumSamples = options.minNumSamples;\n this.maxDepth = options.maxDepth;\n }\n\n /**\n * @private\n * Function that retrieve the best feature to make the split.\n * @param {Matrix} XTranspose - Training set transposed\n * @param {Array} y - labels or values (depending of the decision tree)\n * @return {object} - return tree values, the best gain, column and the split value.\n */\n bestSplit(XTranspose, y) {\n // Depending in the node tree class, we set the variables to check information gain (to classify)\n // or error (for regression)\n\n var bestGain = this.kind === 'classifier' ? -Infinity : Infinity;\n var check = this.kind === 'classifier' ? (a, b) => a > b : (a, b) => a < b;\n\n var maxColumn;\n var maxValue;\n\n for (var i = 0; i < XTranspose.rows; ++i) {\n var currentFeature = XTranspose.getRow(i);\n var splitValues = this.featureSplit(currentFeature, y);\n for (var j = 0; j < splitValues.length; ++j) {\n var currentSplitVal = splitValues[j];\n var splitted = this.split(currentFeature, y, currentSplitVal);\n\n var gain = gainFunctions[this.gainFunction](y, splitted);\n if (check(gain, bestGain)) {\n maxColumn = i;\n maxValue = currentSplitVal;\n bestGain = gain;\n }\n }\n }\n\n return {\n maxGain: bestGain,\n maxColumn: maxColumn,\n maxValue: maxValue\n };\n }\n\n /**\n * @private\n * Makes the split of the training labels or values from the training set feature given a split value.\n * @param {Array} x - Training set feature\n * @param {Array} y - Training set value or label\n * @param {number} splitValue\n * @return {object}\n */\n split(x, y, splitValue) {\n var lesser = [];\n var greater = [];\n\n for (var i = 0; i < x.length; ++i) {\n if (x[i] < splitValue) {\n lesser.push(y[i]);\n } else {\n greater.push(y[i]);\n }\n }\n\n return {\n greater: greater,\n lesser: lesser\n };\n }\n\n /**\n * @private\n * Calculates the possible points to split over the tree given a training set feature and corresponding labels or values.\n * @param {Array} x - Training set feature\n * @param {Array} y - Training set value or label\n * @return {Array} possible split values.\n */\n featureSplit(x, y) {\n var splitValues = [];\n var arr = Utils.zip(x, y);\n arr.sort(function (a, b) {\n return a[0] - b[0];\n });\n\n for (var i = 1; i < arr.length; ++i) {\n if (arr[i - 1][1] !== arr[i][1]) {\n splitValues.push(\n splitFunctions[this.splitFunction](arr[i - 1][0], arr[i][0])\n );\n }\n }\n\n return splitValues;\n }\n\n /**\n * @private\n * Calculate the predictions of a leaf tree node given the training labels or values\n * @param {Array} y\n */\n calculatePrediction(y) {\n if (this.kind === 'classifier') {\n this.distribution = Utils.toDiscreteDistribution(\n y,\n Utils.getNumberOfClasses(y)\n );\n if (this.distribution.columns === 0) {\n throw new TypeError('Error on calculate the prediction');\n }\n } else {\n this.distribution = mean(y);\n }\n }\n\n /**\n * @private\n * Train a node given the training set and labels, because it trains recursively, it also receive\n * the current depth of the node, parent gain to avoid infinite recursion and boolean value to check if\n * the training set is transposed.\n * @param {Matrix} X - Training set (could be transposed or not given transposed).\n * @param {Array} y - Training labels or values.\n * @param {number} currentDepth - Current depth of the node.\n * @param {number} parentGain - parent node gain or error.\n */\n train(X, y, currentDepth, parentGain) {\n if (X.rows <= this.minNumSamples) {\n this.calculatePrediction(y);\n return;\n }\n if (parentGain === undefined) parentGain = 0.0;\n\n var XTranspose = X.transpose();\n var split = this.bestSplit(XTranspose, y);\n\n this.splitValue = split.maxValue;\n this.splitColumn = split.maxColumn;\n this.gain = split.maxGain;\n\n var splittedMatrix = Utils.matrixSplitter(\n X,\n y,\n this.splitColumn,\n this.splitValue\n );\n\n if (\n currentDepth < this.maxDepth &&\n (this.gain > 0.01 && this.gain !== parentGain) &&\n (splittedMatrix.lesserX.length > 0 && splittedMatrix.greaterX.length > 0)\n ) {\n this.left = new TreeNode(this);\n this.right = new TreeNode(this);\n\n var lesserX = new Matrix(splittedMatrix.lesserX);\n var greaterX = new Matrix(splittedMatrix.greaterX);\n\n this.left.train(\n lesserX,\n splittedMatrix.lesserY,\n currentDepth + 1,\n this.gain\n );\n this.right.train(\n greaterX,\n splittedMatrix.greaterY,\n currentDepth + 1,\n this.gain\n );\n } else {\n this.calculatePrediction(y);\n }\n }\n\n /**\n * @private\n * Calculates the prediction of a given element.\n * @param {Array} row\n * @return {number|Array} prediction\n * * if a node is a classifier returns an array of probabilities of each class.\n * * if a node is for regression returns a number with the prediction.\n */\n classify(row) {\n if (this.right && this.left) {\n if (row[this.splitColumn] < this.splitValue) {\n return this.left.classify(row);\n } else {\n return this.right.classify(row);\n }\n }\n\n return this.distribution;\n }\n\n /**\n * @private\n * Set the parameter of the current node and their children.\n * @param {object} node - parameters of the current node and the children.\n */\n setNodeParameters(node) {\n if (node.distribution !== undefined) {\n this.distribution =\n node.distribution.constructor === Array\n ? new Matrix(node.distribution)\n : node.distribution;\n } else {\n this.distribution = undefined;\n this.splitValue = node.splitValue;\n this.splitColumn = node.splitColumn;\n this.gain = node.gain;\n\n this.left = new TreeNode(this);\n this.right = new TreeNode(this);\n\n if (node.left !== {}) {\n this.left.setNodeParameters(node.left);\n }\n if (node.right !== {}) {\n this.right.setNodeParameters(node.right);\n }\n }\n }\n}\n","import Matrix from 'ml-matrix';\n\nimport Tree from './TreeNode';\n\nconst defaultOptions = {\n gainFunction: 'gini',\n splitFunction: 'mean',\n minNumSamples: 3,\n maxDepth: Infinity\n};\n\nexport class DecisionTreeClassifier {\n /**\n * Create new Decision Tree Classifier with CART implementation with the given options\n * @param {object} options\n * @param {string} [options.gainFunction=\"gini\"] - gain function to get the best split, \"gini\" the only one supported.\n * @param {string} [options.splitFunction=\"mean\"] - given two integers from a split feature, get the value to split, \"mean\" the only one supported.\n * @param {number} [options.minNumSamples=3] - minimum number of samples to create a leaf node to decide a class.\n * @param {number} [options.maxDepth=Infinity] - Max depth of the tree.\n * @param {object} model - for load purposes.\n * @constructor\n */\n constructor(options, model) {\n if (options === true) {\n this.options = model.options;\n this.root = new Tree(model.options);\n this.root.setNodeParameters(model.root);\n } else {\n this.options = Object.assign({}, defaultOptions, options);\n this.options.kind = 'classifier';\n }\n }\n\n /**\n * Train the decision tree with the given training set and labels.\n * @param {Matrix|MatrixTransposeView|Array} trainingSet\n * @param {Array} trainingLabels\n */\n train(trainingSet, trainingLabels) {\n this.root = new Tree(this.options);\n trainingSet = Matrix.checkMatrix(trainingSet);\n this.root.train(trainingSet, trainingLabels, 0, null);\n }\n\n /**\n * Predicts the output given the matrix to predict.\n * @param {Matrix|MatrixTransposeView|Array} toPredict\n * @return {Array} predictions\n */\n predict(toPredict) {\n toPredict = Matrix.checkMatrix(toPredict);\n var predictions = new Array(toPredict.rows);\n\n for (var i = 0; i < toPredict.rows; ++i) {\n predictions[i] = this.root\n .classify(toPredict.getRow(i))\n .maxRowIndex(0)[1];\n }\n\n return predictions;\n }\n\n /**\n * Export the current model to JSON.\n * @return {object} - Current model.\n */\n toJSON() {\n return {\n options: this.options,\n root: this.root,\n name: 'DTClassifier'\n };\n }\n\n /**\n * Load a Decision tree classifier with the given model.\n * @param {object} model\n * @return {DecisionTreeClassifier}\n */\n static load(model) {\n if (model.name !== 'DTClassifier') {\n throw new RangeError(`Invalid model: ${model.name}`);\n }\n\n return new DecisionTreeClassifier(true, model);\n }\n}\n","import Matrix from 'ml-matrix';\n\nimport Tree from './TreeNode';\n\nconst defaultOptions = {\n gainFunction: 'regression',\n splitFunction: 'mean',\n minNumSamples: 3,\n maxDepth: Infinity\n};\n\nexport class DecisionTreeRegression {\n /**\n * Create new Decision Tree Regression with CART implementation with the given options.\n * @param {object} options\n * @param {string} [options.gainFunction=\"regression\"] - gain function to get the best split, \"regression\" the only one supported.\n * @param {string} [options.splitFunction=\"mean\"] - given two integers from a split feature, get the value to split, \"mean\" the only one supported.\n * @param {number} [options.minNumSamples=3] - minimum number of samples to create a leaf node to decide a class.\n * @param {number} [options.maxDepth=Infinity] - Max depth of the tree.\n * @param {object} model - for load purposes.\n */\n constructor(options, model) {\n if (options === true) {\n this.options = model.options;\n this.root = new Tree(model.options);\n this.root.setNodeParameters(model.root);\n } else {\n this.options = Object.assign({}, defaultOptions, options);\n this.options.kind = 'regression';\n }\n }\n\n /**\n * Train the decision tree with the given training set and values.\n * @param {Matrix|MatrixTransposeView|Array} trainingSet\n * @param {Array} trainingValues\n */\n train(trainingSet, trainingValues) {\n this.root = new Tree(this.options);\n\n if (typeof trainingSet[0] !== 'undefined' && trainingSet[0].length === undefined) {\n trainingSet = Matrix.columnVector(trainingSet);\n } else {\n trainingSet = Matrix.checkMatrix(trainingSet);\n }\n this.root.train(trainingSet, trainingValues, 0);\n }\n\n /**\n * Predicts the values given the matrix to predict.\n * @param {Matrix|MatrixTransposeView|Array} toPredict\n * @return {Array} predictions\n */\n predict(toPredict) {\n if (typeof toPredict[0] !== 'undefined' && toPredict[0].length === undefined) {\n toPredict = Matrix.columnVector(toPredict);\n }\n toPredict = Matrix.checkMatrix(toPredict);\n\n var predictions = new Array(toPredict.rows);\n for (var i = 0; i < toPredict.rows; ++i) {\n predictions[i] = this.root.classify(toPredict.getRow(i));\n }\n\n return predictions;\n }\n\n /**\n * Export the current model to JSON.\n * @return {object} - Current model.\n */\n toJSON() {\n return {\n options: this.options,\n root: this.root,\n name: 'DTRegression'\n };\n }\n\n /**\n * Load a Decision tree regression with the given model.\n * @param {object} model\n * @return {DecisionTreeRegression}\n */\n static load(model) {\n if (model.name !== 'DTRegression') {\n throw new RangeError(`Invalid model:${model.name}`);\n }\n\n return new DecisionTreeRegression(true, model);\n }\n}\n","const SMALLEST_UNSAFE_INTEGER = 0x20000000000000;\r\nconst LARGEST_SAFE_INTEGER = SMALLEST_UNSAFE_INTEGER - 1;\r\nconst UINT32_MAX = -1 >>> 0;\r\nconst UINT32_SIZE = UINT32_MAX + 1;\r\nconst INT32_SIZE = UINT32_SIZE / 2;\r\nconst INT32_MAX = INT32_SIZE - 1;\r\nconst UINT21_SIZE = 1 << 21;\r\nconst UINT21_MAX = UINT21_SIZE - 1;\n\n/**\r\n * Returns a value within [-0x80000000, 0x7fffffff]\r\n */\r\nfunction int32(engine) {\r\n return engine.next() | 0;\r\n}\n\nfunction add(distribution, addend) {\r\n if (addend === 0) {\r\n return distribution;\r\n }\r\n else {\r\n return engine => distribution(engine) + addend;\r\n }\r\n}\n\n/**\r\n * Returns a value within [-0x20000000000000, 0x1fffffffffffff]\r\n */\r\nfunction int53(engine) {\r\n const high = engine.next() | 0;\r\n const low = engine.next() >>> 0;\r\n return ((high & UINT21_MAX) * UINT32_SIZE +\r\n low +\r\n (high & UINT21_SIZE ? -SMALLEST_UNSAFE_INTEGER : 0));\r\n}\n\n/**\r\n * Returns a value within [-0x20000000000000, 0x20000000000000]\r\n */\r\nfunction int53Full(engine) {\r\n while (true) {\r\n const high = engine.next() | 0;\r\n if (high & 0x400000) {\r\n if ((high & 0x7fffff) === 0x400000 && (engine.next() | 0) === 0) {\r\n return SMALLEST_UNSAFE_INTEGER;\r\n }\r\n }\r\n else {\r\n const low = engine.next() >>> 0;\r\n return ((high & UINT21_MAX) * UINT32_SIZE +\r\n low +\r\n (high & UINT21_SIZE ? -SMALLEST_UNSAFE_INTEGER : 0));\r\n }\r\n }\r\n}\n\n/**\r\n * Returns a value within [0, 0xffffffff]\r\n */\r\nfunction uint32(engine) {\r\n return engine.next() >>> 0;\r\n}\n\n/**\r\n * Returns a value within [0, 0x1fffffffffffff]\r\n */\r\nfunction uint53(engine) {\r\n const high = engine.next() & UINT21_MAX;\r\n const low = engine.next() >>> 0;\r\n return high * UINT32_SIZE + low;\r\n}\n\n/**\r\n * Returns a value within [0, 0x20000000000000]\r\n */\r\nfunction uint53Full(engine) {\r\n while (true) {\r\n const high = engine.next() | 0;\r\n if (high & UINT21_SIZE) {\r\n if ((high & UINT21_MAX) === 0 && (engine.next() | 0) === 0) {\r\n return SMALLEST_UNSAFE_INTEGER;\r\n }\r\n }\r\n else {\r\n const low = engine.next() >>> 0;\r\n return (high & UINT21_MAX) * UINT32_SIZE + low;\r\n }\r\n }\r\n}\n\nfunction isPowerOfTwoMinusOne(value) {\r\n return ((value + 1) & value) === 0;\r\n}\r\nfunction bitmask(masking) {\r\n return (engine) => engine.next() & masking;\r\n}\r\nfunction downscaleToLoopCheckedRange(range) {\r\n const extendedRange = range + 1;\r\n const maximum = extendedRange * Math.floor(UINT32_SIZE / extendedRange);\r\n return engine => {\r\n let value = 0;\r\n do {\r\n value = engine.next() >>> 0;\r\n } while (value >= maximum);\r\n return value % extendedRange;\r\n };\r\n}\r\nfunction downscaleToRange(range) {\r\n if (isPowerOfTwoMinusOne(range)) {\r\n return bitmask(range);\r\n }\r\n else {\r\n return downscaleToLoopCheckedRange(range);\r\n }\r\n}\r\nfunction isEvenlyDivisibleByMaxInt32(value) {\r\n return (value | 0) === 0;\r\n}\r\nfunction upscaleWithHighMasking(masking) {\r\n return engine => {\r\n const high = engine.next() & masking;\r\n const low = engine.next() >>> 0;\r\n return high * UINT32_SIZE + low;\r\n };\r\n}\r\nfunction upscaleToLoopCheckedRange(extendedRange) {\r\n const maximum = extendedRange * Math.floor(SMALLEST_UNSAFE_INTEGER / extendedRange);\r\n return engine => {\r\n let ret = 0;\r\n do {\r\n const high = engine.next() & UINT21_MAX;\r\n const low = engine.next() >>> 0;\r\n ret = high * UINT32_SIZE + low;\r\n } while (ret >= maximum);\r\n return ret % extendedRange;\r\n };\r\n}\r\nfunction upscaleWithinU53(range) {\r\n const extendedRange = range + 1;\r\n if (isEvenlyDivisibleByMaxInt32(extendedRange)) {\r\n const highRange = ((extendedRange / UINT32_SIZE) | 0) - 1;\r\n if (isPowerOfTwoMinusOne(highRange)) {\r\n return upscaleWithHighMasking(highRange);\r\n }\r\n }\r\n return upscaleToLoopCheckedRange(extendedRange);\r\n}\r\nfunction upscaleWithinI53AndLoopCheck(min, max) {\r\n return engine => {\r\n let ret = 0;\r\n do {\r\n const high = engine.next() | 0;\r\n const low = engine.next() >>> 0;\r\n ret =\r\n (high & UINT21_MAX) * UINT32_SIZE +\r\n low +\r\n (high & UINT21_SIZE ? -SMALLEST_UNSAFE_INTEGER : 0);\r\n } while (ret < min || ret > max);\r\n return ret;\r\n };\r\n}\r\n/**\r\n * Returns a Distribution to return a value within [min, max]\r\n * @param min The minimum integer value, inclusive. No less than -0x20000000000000.\r\n * @param max The maximum integer value, inclusive. No greater than 0x20000000000000.\r\n */\r\nfunction integer(min, max) {\r\n min = Math.floor(min);\r\n max = Math.floor(max);\r\n if (min < -SMALLEST_UNSAFE_INTEGER || !isFinite(min)) {\r\n throw new RangeError(`Expected min to be at least ${-SMALLEST_UNSAFE_INTEGER}`);\r\n }\r\n else if (max > SMALLEST_UNSAFE_INTEGER || !isFinite(max)) {\r\n throw new RangeError(`Expected max to be at most ${SMALLEST_UNSAFE_INTEGER}`);\r\n }\r\n const range = max - min;\r\n if (range <= 0 || !isFinite(range)) {\r\n return () => min;\r\n }\r\n else if (range === UINT32_MAX) {\r\n if (min === 0) {\r\n return uint32;\r\n }\r\n else {\r\n return add(int32, min + INT32_SIZE);\r\n }\r\n }\r\n else if (range < UINT32_MAX) {\r\n return add(downscaleToRange(range), min);\r\n }\r\n else if (range === LARGEST_SAFE_INTEGER) {\r\n return add(uint53, min);\r\n }\r\n else if (range < LARGEST_SAFE_INTEGER) {\r\n return add(upscaleWithinU53(range), min);\r\n }\r\n else if (max - 1 - min === LARGEST_SAFE_INTEGER) {\r\n return add(uint53Full, min);\r\n }\r\n else if (min === -SMALLEST_UNSAFE_INTEGER &&\r\n max === SMALLEST_UNSAFE_INTEGER) {\r\n return int53Full;\r\n }\r\n else if (min === -SMALLEST_UNSAFE_INTEGER && max === LARGEST_SAFE_INTEGER) {\r\n return int53;\r\n }\r\n else if (min === -LARGEST_SAFE_INTEGER && max === SMALLEST_UNSAFE_INTEGER) {\r\n return add(int53, 1);\r\n }\r\n else if (max === SMALLEST_UNSAFE_INTEGER) {\r\n return add(upscaleWithinI53AndLoopCheck(min - 1, max - 1), 1);\r\n }\r\n else {\r\n return upscaleWithinI53AndLoopCheck(min, max);\r\n }\r\n}\n\nfunction isLeastBitTrue(engine) {\r\n return (engine.next() & 1) === 1;\r\n}\r\nfunction lessThan(distribution, value) {\r\n return engine => distribution(engine) < value;\r\n}\r\nfunction probability(percentage) {\r\n if (percentage <= 0) {\r\n return () => false;\r\n }\r\n else if (percentage >= 1) {\r\n return () => true;\r\n }\r\n else {\r\n const scaled = percentage * UINT32_SIZE;\r\n if (scaled % 1 === 0) {\r\n return lessThan(int32, (scaled - INT32_SIZE) | 0);\r\n }\r\n else {\r\n return lessThan(uint53, Math.round(percentage * SMALLEST_UNSAFE_INTEGER));\r\n }\r\n }\r\n}\r\nfunction bool(numerator, denominator) {\r\n if (denominator == null) {\r\n if (numerator == null) {\r\n return isLeastBitTrue;\r\n }\r\n return probability(numerator);\r\n }\r\n else {\r\n if (numerator <= 0) {\r\n return () => false;\r\n }\r\n else if (numerator >= denominator) {\r\n return () => true;\r\n }\r\n return lessThan(integer(0, denominator - 1), numerator);\r\n }\r\n}\n\n/**\r\n * Returns a Distribution that returns a random `Date` within the inclusive\r\n * range of [`start`, `end`].\r\n * @param start The minimum `Date`\r\n * @param end The maximum `Date`\r\n */\r\nfunction date(start, end) {\r\n const distribution = integer(+start, +end);\r\n return engine => new Date(distribution(engine));\r\n}\n\n/**\r\n * Returns a Distribution to return a value within [1, sideCount]\r\n * @param sideCount The number of sides of the die\r\n */\r\nfunction die(sideCount) {\r\n return integer(1, sideCount);\r\n}\n\n/**\r\n * Returns a distribution that returns an array of length `dieCount` of values\r\n * within [1, `sideCount`]\r\n * @param sideCount The number of sides of each die\r\n * @param dieCount The number of dice\r\n */\r\nfunction dice(sideCount, dieCount) {\r\n const distribution = die(sideCount);\r\n return engine => {\r\n const result = [];\r\n for (let i = 0; i < dieCount; ++i) {\r\n result.push(distribution(engine));\r\n }\r\n return result;\r\n };\r\n}\n\n// tslint:disable:unified-signatures\r\n// has 2**x chars, for faster uniform distribution\r\nconst DEFAULT_STRING_POOL = \"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_-\";\r\nfunction string(pool = DEFAULT_STRING_POOL) {\r\n const poolLength = pool.length;\r\n if (!poolLength) {\r\n throw new Error(\"Expected pool not to be an empty string\");\r\n }\r\n const distribution = integer(0, poolLength - 1);\r\n return (engine, length) => {\r\n let result = \"\";\r\n for (let i = 0; i < length; ++i) {\r\n const j = distribution(engine);\r\n result += pool.charAt(j);\r\n }\r\n return result;\r\n };\r\n}\n\nconst LOWER_HEX_POOL = \"0123456789abcdef\";\r\nconst lowerHex = string(LOWER_HEX_POOL);\r\nconst upperHex = string(LOWER_HEX_POOL.toUpperCase());\r\n/**\r\n * Returns a Distribution that returns a random string comprised of numbers\r\n * or the characters `abcdef` (or `ABCDEF`) of length `length`.\r\n * @param length Length of the result string\r\n * @param uppercase Whether the string should use `ABCDEF` instead of `abcdef`\r\n */\r\nfunction hex(uppercase) {\r\n if (uppercase) {\r\n return upperHex;\r\n }\r\n else {\r\n return lowerHex;\r\n }\r\n}\n\nfunction convertSliceArgument(value, length) {\r\n if (value < 0) {\r\n return Math.max(value + length, 0);\r\n }\r\n else {\r\n return Math.min(value, length);\r\n }\r\n}\n\nfunction toInteger(value) {\r\n const num = +value;\r\n if (num < 0) {\r\n return Math.ceil(num);\r\n }\r\n else {\r\n return Math.floor(num);\r\n }\r\n}\n\n/**\r\n * Returns a random value within the provided `source` within the sliced\r\n * bounds of `begin` and `end`.\r\n * @param source an array of items to pick from\r\n * @param begin the beginning slice index (defaults to `0`)\r\n * @param end the ending slice index (defaults to `source.length`)\r\n */\r\nfunction pick(engine, source, begin, end) {\r\n const length = source.length;\r\n if (length === 0) {\r\n throw new RangeError(\"Cannot pick from an empty array\");\r\n }\r\n const start = begin == null ? 0 : convertSliceArgument(toInteger(begin), length);\r\n const finish = end === void 0 ? length : convertSliceArgument(toInteger(end), length);\r\n if (start >= finish) {\r\n throw new RangeError(`Cannot pick between bounds ${start} and ${finish}`);\r\n }\r\n const distribution = integer(start, finish - 1);\r\n return source[distribution(engine)];\r\n}\n\nfunction multiply(distribution, multiplier) {\r\n if (multiplier === 1) {\r\n return distribution;\r\n }\r\n else if (multiplier === 0) {\r\n return () => 0;\r\n }\r\n else {\r\n return engine => distribution(engine) * multiplier;\r\n }\r\n}\n\n/**\r\n * Returns a floating-point value within [0.0, 1.0)\r\n */\r\nfunction realZeroToOneExclusive(engine) {\r\n return uint53(engine) / SMALLEST_UNSAFE_INTEGER;\r\n}\n\n/**\r\n * Returns a floating-point value within [0.0, 1.0]\r\n */\r\nfunction realZeroToOneInclusive(engine) {\r\n return uint53Full(engine) / SMALLEST_UNSAFE_INTEGER;\r\n}\n\n/**\r\n * Returns a floating-point value within [min, max) or [min, max]\r\n * @param min The minimum floating-point value, inclusive.\r\n * @param max The maximum floating-point value.\r\n * @param inclusive If true, `max` will be inclusive.\r\n */\r\nfunction real(min, max, inclusive = false) {\r\n if (!isFinite(min)) {\r\n throw new RangeError(\"Expected min to be a finite number\");\r\n }\r\n else if (!isFinite(max)) {\r\n throw new RangeError(\"Expected max to be a finite number\");\r\n }\r\n return add(multiply(inclusive ? realZeroToOneInclusive : realZeroToOneExclusive, max - min), min);\r\n}\n\nconst sliceArray = Array.prototype.slice;\n\n/**\r\n * Shuffles an array in-place\r\n * @param engine The Engine to use when choosing random values\r\n * @param array The array to shuffle\r\n * @param downTo minimum index to shuffle. Only used internally.\r\n */\r\nfunction shuffle(engine, array, downTo = 0) {\r\n const length = array.length;\r\n if (length) {\r\n for (let i = (length - 1) >>> 0; i > downTo; --i) {\r\n const distribution = integer(0, i);\r\n const j = distribution(engine);\r\n if (i !== j) {\r\n const tmp = array[i];\r\n array[i] = array[j];\r\n array[j] = tmp;\r\n }\r\n }\r\n }\r\n return array;\r\n}\n\n/**\r\n * From the population array, produce an array with sampleSize elements that\r\n * are randomly chosen without repeats.\r\n * @param engine The Engine to use when choosing random values\r\n * @param population An array that has items to choose a sample from\r\n * @param sampleSize The size of the result array\r\n */\r\nfunction sample(engine, population, sampleSize) {\r\n if (sampleSize < 0 ||\r\n sampleSize > population.length ||\r\n !isFinite(sampleSize)) {\r\n throw new RangeError(\"Expected sampleSize to be within 0 and the length of the population\");\r\n }\r\n if (sampleSize === 0) {\r\n return [];\r\n }\r\n const clone = sliceArray.call(population);\r\n const length = clone.length;\r\n if (length === sampleSize) {\r\n return shuffle(engine, clone, 0);\r\n }\r\n const tailLength = length - sampleSize;\r\n return shuffle(engine, clone, tailLength - 1).slice(tailLength);\r\n}\n\nconst stringRepeat = (() => {\r\n try {\r\n if (\"x\".repeat(3) === \"xxx\") {\r\n return (pattern, count) => pattern.repeat(count);\r\n }\r\n }\r\n catch (_) {\r\n // nothing to do here\r\n }\r\n return (pattern, count) => {\r\n let result = \"\";\r\n while (count > 0) {\r\n if (count & 1) {\r\n result += pattern;\r\n }\r\n count >>= 1;\r\n pattern += pattern;\r\n }\r\n return result;\r\n };\r\n})();\n\nfunction zeroPad(text, zeroCount) {\r\n return stringRepeat(\"0\", zeroCount - text.length) + text;\r\n}\r\n/**\r\n * Returns a Universally Unique Identifier Version 4.\r\n *\r\n * See http://en.wikipedia.org/wiki/Universally_unique_identifier\r\n */\r\nfunction uuid4(engine) {\r\n const a = engine.next() >>> 0;\r\n const b = engine.next() | 0;\r\n const c = engine.next() | 0;\r\n const d = engine.next() >>> 0;\r\n return (zeroPad(a.toString(16), 8) +\r\n \"-\" +\r\n zeroPad((b & 0xffff).toString(16), 4) +\r\n \"-\" +\r\n zeroPad((((b >> 4) & 0x0fff) | 0x4000).toString(16), 4) +\r\n \"-\" +\r\n zeroPad(((c & 0x3fff) | 0x8000).toString(16), 4) +\r\n \"-\" +\r\n zeroPad(((c >> 4) & 0xffff).toString(16), 4) +\r\n zeroPad(d.toString(16), 8));\r\n}\n\n/**\r\n * An int32-producing Engine that uses `Math.random()`\r\n */\r\nconst nativeMath = {\r\n next() {\r\n return (Math.random() * UINT32_SIZE) | 0;\r\n }\r\n};\n\n// tslint:disable:unified-signatures\r\n/**\r\n * A wrapper around an Engine that provides easy-to-use methods for\r\n * producing values based on known distributions\r\n */\r\nclass Random {\r\n /**\r\n * Creates a new Random wrapper\r\n * @param engine The engine to use (defaults to a `Math.random`-based implementation)\r\n */\r\n constructor(engine = nativeMath) {\r\n this.engine = engine;\r\n }\r\n /**\r\n * Returns a value within [-0x80000000, 0x7fffffff]\r\n */\r\n int32() {\r\n return int32(this.engine);\r\n }\r\n /**\r\n * Returns a value within [0, 0xffffffff]\r\n */\r\n uint32() {\r\n return uint32(this.engine);\r\n }\r\n /**\r\n * Returns a value within [0, 0x1fffffffffffff]\r\n */\r\n uint53() {\r\n return uint53(this.engine);\r\n }\r\n /**\r\n * Returns a value within [0, 0x20000000000000]\r\n */\r\n uint53Full() {\r\n return uint53Full(this.engine);\r\n }\r\n /**\r\n * Returns a value within [-0x20000000000000, 0x1fffffffffffff]\r\n */\r\n int53() {\r\n return int53(this.engine);\r\n }\r\n /**\r\n * Returns a value within [-0x20000000000000, 0x20000000000000]\r\n */\r\n int53Full() {\r\n return int53Full(this.engine);\r\n }\r\n /**\r\n * Returns a value within [min, max]\r\n * @param min The minimum integer value, inclusive. No less than -0x20000000000000.\r\n * @param max The maximum integer value, inclusive. No greater than 0x20000000000000.\r\n */\r\n integer(min, max) {\r\n return integer(min, max)(this.engine);\r\n }\r\n /**\r\n * Returns a floating-point value within [0.0, 1.0]\r\n */\r\n realZeroToOneInclusive() {\r\n return realZeroToOneInclusive(this.engine);\r\n }\r\n /**\r\n * Returns a floating-point value within [0.0, 1.0)\r\n */\r\n realZeroToOneExclusive() {\r\n return realZeroToOneExclusive(this.engine);\r\n }\r\n /**\r\n * Returns a floating-point value within [min, max) or [min, max]\r\n * @param min The minimum floating-point value, inclusive.\r\n * @param max The maximum floating-point value.\r\n * @param inclusive If true, `max` will be inclusive.\r\n */\r\n real(min, max, inclusive = false) {\r\n return real(min, max, inclusive)(this.engine);\r\n }\r\n bool(numerator, denominator) {\r\n return bool(numerator, denominator)(this.engine);\r\n }\r\n /**\r\n * Return a random value within the provided `source` within the sliced\r\n * bounds of `begin` and `end`.\r\n * @param source an array of items to pick from\r\n * @param begin the beginning slice index (defaults to `0`)\r\n * @param end the ending slice index (defaults to `source.length`)\r\n */\r\n pick(source, begin, end) {\r\n return pick(this.engine, source, begin, end);\r\n }\r\n /**\r\n * Shuffles an array in-place\r\n * @param array The array to shuffle\r\n */\r\n shuffle(array) {\r\n return shuffle(this.engine, array);\r\n }\r\n /**\r\n * From the population array, returns an array with sampleSize elements that\r\n * are randomly chosen without repeats.\r\n * @param population An array that has items to choose a sample from\r\n * @param sampleSize The size of the result array\r\n */\r\n sample(population, sampleSize) {\r\n return sample(this.engine, population, sampleSize);\r\n }\r\n /**\r\n * Returns a value within [1, sideCount]\r\n * @param sideCount The number of sides of the die\r\n */\r\n die(sideCount) {\r\n return die(sideCount)(this.engine);\r\n }\r\n /**\r\n * Returns an array of length `dieCount` of values within [1, sideCount]\r\n * @param sideCount The number of sides of each die\r\n * @param dieCount The number of dice\r\n */\r\n dice(sideCount, dieCount) {\r\n return dice(sideCount, dieCount)(this.engine);\r\n }\r\n /**\r\n * Returns a Universally Unique Identifier Version 4.\r\n *\r\n * See http://en.wikipedia.org/wiki/Universally_unique_identifier\r\n */\r\n uuid4() {\r\n return uuid4(this.engine);\r\n }\r\n string(length, pool) {\r\n return string(pool)(this.engine, length);\r\n }\r\n /**\r\n * Returns a random string comprised of numbers or the characters `abcdef`\r\n * (or `ABCDEF`) of length `length`.\r\n * @param length Length of the result string\r\n * @param uppercase Whether the string should use `ABCDEF` instead of `abcdef`\r\n */\r\n hex(length, uppercase) {\r\n return hex(uppercase)(this.engine, length);\r\n }\r\n /**\r\n * Returns a random `Date` within the inclusive range of [`start`, `end`].\r\n * @param start The minimum `Date`\r\n * @param end The maximum `Date`\r\n */\r\n date(start, end) {\r\n return date(start, end)(this.engine);\r\n }\r\n}\n\n/**\r\n * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Int32Array\r\n */\r\nconst I32Array = (() => {\r\n try {\r\n const buffer = new ArrayBuffer(4);\r\n const view = new Int32Array(buffer);\r\n view[0] = INT32_SIZE;\r\n if (view[0] === -INT32_SIZE) {\r\n return Int32Array;\r\n }\r\n }\r\n catch (_) {\r\n // nothing to do here\r\n }\r\n return Array;\r\n})();\n\nlet data = null;\r\nconst COUNT = 128;\r\nlet index = COUNT;\r\n/**\r\n * An Engine that relies on the globally-available `crypto.getRandomValues`,\r\n * which is typically available in modern browsers.\r\n *\r\n * See https://developer.mozilla.org/en-US/docs/Web/API/Crypto/getRandomValues\r\n *\r\n * If unavailable or otherwise non-functioning, then `browserCrypto` will\r\n * likely `throw` on the first call to `next()`.\r\n */\r\nconst browserCrypto = {\r\n next() {\r\n if (index >= COUNT) {\r\n if (data === null) {\r\n data = new I32Array(COUNT);\r\n }\r\n crypto.getRandomValues(data);\r\n index = 0;\r\n }\r\n return data[index++] | 0;\r\n }\r\n};\n\n/**\r\n * Returns an array of random int32 values, based on current time\r\n * and a random number engine\r\n *\r\n * @param engine an Engine to pull random values from, default `nativeMath`\r\n * @param length the length of the Array, minimum 1, default 16\r\n */\r\nfunction createEntropy(engine = nativeMath, length = 16) {\r\n const array = [];\r\n array.push(new Date().getTime() | 0);\r\n for (let i = 1; i < length; ++i) {\r\n array[i] = engine.next() | 0;\r\n }\r\n return array;\r\n}\n\n/**\r\n * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/imul\r\n */\r\nconst imul = (() => {\r\n try {\r\n if (Math.imul(UINT32_MAX, 5) === -5) {\r\n return Math.imul;\r\n }\r\n }\r\n catch (_) {\r\n // nothing to do here\r\n }\r\n const UINT16_MAX = 0xffff;\r\n return (a, b) => {\r\n const ah = (a >>> 16) & UINT16_MAX;\r\n const al = a & UINT16_MAX;\r\n const bh = (b >>> 16) & UINT16_MAX;\r\n const bl = b & UINT16_MAX;\r\n // the shift by 0 fixes the sign on the high part\r\n // the final |0 converts the unsigned value into a signed value\r\n return (al * bl + (((ah * bl + al * bh) << 16) >>> 0)) | 0;\r\n };\r\n})();\n\nconst ARRAY_SIZE = 624;\r\nconst ARRAY_MAX = ARRAY_SIZE - 1;\r\nconst M = 397;\r\nconst ARRAY_SIZE_MINUS_M = ARRAY_SIZE - M;\r\nconst A = 0x9908b0df;\r\n/**\r\n * An Engine that is a pseudorandom number generator using the Mersenne\r\n * Twister algorithm based on the prime 2**19937 − 1\r\n *\r\n * See http://en.wikipedia.org/wiki/Mersenne_twister\r\n */\r\nclass MersenneTwister19937 {\r\n /**\r\n * MersenneTwister19937 should not be instantiated directly.\r\n * Instead, use the static methods `seed`, `seedWithArray`, or `autoSeed`.\r\n */\r\n constructor() {\r\n this.data = new I32Array(ARRAY_SIZE);\r\n this.index = 0; // integer within [0, 624]\r\n this.uses = 0;\r\n }\r\n /**\r\n * Returns a MersenneTwister19937 seeded with an initial int32 value\r\n * @param initial the initial seed value\r\n */\r\n static seed(initial) {\r\n return new MersenneTwister19937().seed(initial);\r\n }\r\n /**\r\n * Returns a MersenneTwister19937 seeded with zero or more int32 values\r\n * @param source A series of int32 values\r\n */\r\n static seedWithArray(source) {\r\n return new MersenneTwister19937().seedWithArray(source);\r\n }\r\n /**\r\n * Returns a MersenneTwister19937 seeded with the current time and\r\n * a series of natively-generated random values\r\n */\r\n static autoSeed() {\r\n return MersenneTwister19937.seedWithArray(createEntropy());\r\n }\r\n /**\r\n * Returns the next int32 value of the sequence\r\n */\r\n next() {\r\n if ((this.index | 0) >= ARRAY_SIZE) {\r\n refreshData(this.data);\r\n this.index = 0;\r\n }\r\n const value = this.data[this.index];\r\n this.index = (this.index + 1) | 0;\r\n this.uses += 1;\r\n return temper(value) | 0;\r\n }\r\n /**\r\n * Returns the number of times that the Engine has been used.\r\n *\r\n * This can be provided to an unused MersenneTwister19937 with the same\r\n * seed, bringing it to the exact point that was left off.\r\n */\r\n getUseCount() {\r\n return this.uses;\r\n }\r\n /**\r\n * Discards one or more items from the engine\r\n * @param count The count of items to discard\r\n */\r\n discard(count) {\r\n if (count <= 0) {\r\n return this;\r\n }\r\n this.uses += count;\r\n if ((this.index | 0) >= ARRAY_SIZE) {\r\n refreshData(this.data);\r\n this.index = 0;\r\n }\r\n while (count + this.index > ARRAY_SIZE) {\r\n count -= ARRAY_SIZE - this.index;\r\n refreshData(this.data);\r\n this.index = 0;\r\n }\r\n this.index = (this.index + count) | 0;\r\n return this;\r\n }\r\n seed(initial) {\r\n let previous = 0;\r\n this.data[0] = previous = initial | 0;\r\n for (let i = 1; i < ARRAY_SIZE; i = (i + 1) | 0) {\r\n this.data[i] = previous =\r\n (imul(previous ^ (previous >>> 30), 0x6c078965) + i) | 0;\r\n }\r\n this.index = ARRAY_SIZE;\r\n this.uses = 0;\r\n return this;\r\n }\r\n seedWithArray(source) {\r\n this.seed(0x012bd6aa);\r\n seedWithArray(this.data, source);\r\n return this;\r\n }\r\n}\r\nfunction refreshData(data) {\r\n let k = 0;\r\n let tmp = 0;\r\n for (; (k | 0) < ARRAY_SIZE_MINUS_M; k = (k + 1) | 0) {\r\n tmp = (data[k] & INT32_SIZE) | (data[(k + 1) | 0] & INT32_MAX);\r\n data[k] = data[(k + M) | 0] ^ (tmp >>> 1) ^ (tmp & 0x1 ? A : 0);\r\n }\r\n for (; (k | 0) < ARRAY_MAX; k = (k + 1) | 0) {\r\n tmp = (data[k] & INT32_SIZE) | (data[(k + 1) | 0] & INT32_MAX);\r\n data[k] =\r\n data[(k - ARRAY_SIZE_MINUS_M) | 0] ^ (tmp >>> 1) ^ (tmp & 0x1 ? A : 0);\r\n }\r\n tmp = (data[ARRAY_MAX] & INT32_SIZE) | (data[0] & INT32_MAX);\r\n data[ARRAY_MAX] = data[M - 1] ^ (tmp >>> 1) ^ (tmp & 0x1 ? A : 0);\r\n}\r\nfunction temper(value) {\r\n value ^= value >>> 11;\r\n value ^= (value << 7) & 0x9d2c5680;\r\n value ^= (value << 15) & 0xefc60000;\r\n return value ^ (value >>> 18);\r\n}\r\nfunction seedWithArray(data, source) {\r\n let i = 1;\r\n let j = 0;\r\n const sourceLength = source.length;\r\n let k = Math.max(sourceLength, ARRAY_SIZE) | 0;\r\n let previous = data[0] | 0;\r\n for (; (k | 0) > 0; --k) {\r\n data[i] = previous =\r\n ((data[i] ^ imul(previous ^ (previous >>> 30), 0x0019660d)) +\r\n (source[j] | 0) +\r\n (j | 0)) |\r\n 0;\r\n i = (i + 1) | 0;\r\n ++j;\r\n if ((i | 0) > ARRAY_MAX) {\r\n data[0] = data[ARRAY_MAX];\r\n i = 1;\r\n }\r\n if (j >= sourceLength) {\r\n j = 0;\r\n }\r\n }\r\n for (k = ARRAY_MAX; (k | 0) > 0; --k) {\r\n data[i] = previous =\r\n ((data[i] ^ imul(previous ^ (previous >>> 30), 0x5d588b65)) - i) | 0;\r\n i = (i + 1) | 0;\r\n if ((i | 0) > ARRAY_MAX) {\r\n data[0] = data[ARRAY_MAX];\r\n i = 1;\r\n }\r\n }\r\n data[0] = INT32_SIZE;\r\n}\n\nlet data$1 = null;\r\nconst COUNT$1 = 128;\r\nlet index$1 = COUNT$1;\r\n/**\r\n * An Engine that relies on the node-available\r\n * `require('crypto').randomBytes`, which has been available since 0.58.\r\n *\r\n * See https://nodejs.org/api/crypto.html#crypto_crypto_randombytes_size_callback\r\n *\r\n * If unavailable or otherwise non-functioning, then `nodeCrypto` will\r\n * likely `throw` on the first call to `next()`.\r\n */\r\nconst nodeCrypto = {\r\n next() {\r\n if (index$1 >= COUNT$1) {\r\n data$1 = new Int32Array(new Int8Array(require(\"crypto\").randomBytes(4 * COUNT$1)).buffer);\r\n index$1 = 0;\r\n }\r\n return data$1[index$1++] | 0;\r\n }\r\n};\n\n/**\r\n * Returns a Distribution to random value within the provided `source`\r\n * within the sliced bounds of `begin` and `end`.\r\n * @param source an array of items to pick from\r\n * @param begin the beginning slice index (defaults to `0`)\r\n * @param end the ending slice index (defaults to `source.length`)\r\n */\r\nfunction picker(source, begin, end) {\r\n const clone = sliceArray.call(source, begin, end);\r\n if (clone.length === 0) {\r\n throw new RangeError(`Cannot pick from a source with no items`);\r\n }\r\n const distribution = integer(0, clone.length - 1);\r\n return engine => clone[distribution(engine)];\r\n}\n\nexport { Random, browserCrypto, nativeMath, MersenneTwister19937, nodeCrypto, bool, date, dice, die, hex, int32, int53, int53Full, integer, pick, picker, real, realZeroToOneExclusive, realZeroToOneInclusive, sample, shuffle, string, uint32, uint53, uint53Full, uuid4, createEntropy };\n//# sourceMappingURL=random-js.esm.js.map\n","import * as Random from 'random-js';\nimport Matrix from 'ml-matrix';\n\nexport function checkFloat(n) {\n return n > 0.0 && n <= 1.0;\n}\n\n\n/**\n * Select n with replacement elements on the training set and values, where n is the size of the training set.\n * @ignore\n * @param {Matrix} trainingSet\n * @param {Array} trainingValue\n * @param {number} seed - seed for the random selection, must be a 32-bit integer.\n * @return {object} with new X and y.\n */\nexport function examplesBaggingWithReplacement(\n trainingSet,\n trainingValue,\n seed\n) {\n var engine;\n var distribution = Random.integer(0, trainingSet.rows - 1);\n if (seed === undefined) {\n engine = Random.MersenneTwister19937.autoSeed();\n } else if (Number.isInteger(seed)) {\n engine = Random.MersenneTwister19937.seed(seed);\n } else {\n throw new RangeError(\n `Expected seed must be undefined or integer not ${seed}`\n );\n }\n\n var Xr = new Array(trainingSet.rows);\n var yr = new Array(trainingSet.rows);\n\n for (var i = 0; i < trainingSet.rows; ++i) {\n var index = distribution(engine);\n Xr[i] = trainingSet.getRow(index);\n yr[i] = trainingValue[index];\n }\n\n return {\n X: new Matrix(Xr),\n y: yr\n };\n}\n\n/**\n * selects n features from the training set with or without replacement, returns the new training set and the indexes used.\n * @ignore\n * @param {Matrix} trainingSet\n * @param {number} n - features.\n * @param {boolean} replacement\n * @param {number} seed - seed for the random selection, must be a 32-bit integer.\n * @return {object}\n */\nexport function featureBagging(trainingSet, n, replacement, seed) {\n if (trainingSet.columns < n) {\n throw new RangeError(\n 'N should be less or equal to the number of columns of X'\n );\n }\n\n var distribution = Random.integer(0, trainingSet.columns - 1);\n var engine;\n if (seed === undefined) {\n engine = Random.MersenneTwister19937.autoSeed();\n } else if (Number.isInteger(seed)) {\n engine = Random.MersenneTwister19937.seed(seed);\n } else {\n throw new RangeError(\n `Expected seed must be undefined or integer not ${seed}`\n );\n }\n\n var toRet = new Matrix(trainingSet.rows, n);\n\n if (replacement) {\n var usedIndex = new Array(n);\n for (var i = 0; i < n; ++i) {\n var index = distribution(engine);\n usedIndex[i] = index;\n toRet.setColumn(i, trainingSet.getColumn(index));\n }\n } else {\n usedIndex = new Set();\n index = distribution(engine);\n for (i = 0; i < n; ++i) {\n while (usedIndex.has(index)) {\n index = distribution(engine);\n }\n toRet.setColumn(i, trainingSet.getColumn(index));\n usedIndex.add(index);\n }\n usedIndex = Array.from(usedIndex);\n }\n\n return {\n X: toRet,\n usedIndex: usedIndex\n };\n}\n","import {\n DecisionTreeClassifier as DTClassifier,\n DecisionTreeRegression as DTRegression\n} from 'ml-cart';\nimport { Matrix, WrapperMatrix2D, MatrixTransposeView, MatrixColumnSelectionView } from 'ml-matrix';\n\nimport * as Utils from './utils';\n\n/**\n * @class RandomForestBase\n */\nexport class RandomForestBase {\n /**\n * Create a new base random forest for a classifier or regression model.\n * @constructor\n * @param {object} options\n * @param {number|String} [options.maxFeatures] - the number of features used on each estimator.\n * * if is an integer it selects maxFeatures elements over the sample features.\n * * if is a float between (0, 1), it takes the percentage of features.\n * @param {boolean} [options.replacement] - use replacement over the sample features.\n * @param {number} [options.seed] - seed for feature and samples selection, must be a 32-bit integer.\n * @param {number} [options.nEstimators] - number of estimator to use.\n * @param {object} [options.treeOptions] - options for the tree classifier, see [ml-cart]{@link https://mljs.github.io/decision-tree-cart/}\n * @param {boolean} [options.isClassifier] - boolean to check if is a classifier or regression model (used by subclasses).\n * @param {boolean} [options.useSampleBagging] - use bagging over training samples.\n * @param {object} model - for load purposes.\n */\n constructor(options, model) {\n if (options === true) {\n this.replacement = model.replacement;\n this.maxFeatures = model.maxFeatures;\n this.nEstimators = model.nEstimators;\n this.treeOptions = model.treeOptions;\n this.isClassifier = model.isClassifier;\n this.seed = model.seed;\n this.n = model.n;\n this.indexes = model.indexes;\n this.useSampleBagging = model.useSampleBagging;\n\n var Estimator = this.isClassifier ? DTClassifier : DTRegression;\n this.estimators = model.estimators.map((est) => Estimator.load(est));\n } else {\n this.replacement = options.replacement;\n this.maxFeatures = options.maxFeatures;\n this.nEstimators = options.nEstimators;\n this.treeOptions = options.treeOptions;\n this.isClassifier = options.isClassifier;\n this.seed = options.seed;\n this.useSampleBagging = options.useSampleBagging;\n }\n }\n\n /**\n * Train the decision tree with the given training set and labels.\n * @param {Matrix|Array} trainingSet\n * @param {Array} trainingValues\n */\n train(trainingSet, trainingValues) {\n trainingSet = Matrix.checkMatrix(trainingSet);\n\n this.maxFeatures = this.maxFeatures || trainingSet.columns;\n\n if (Utils.checkFloat(this.maxFeatures)) {\n this.n = Math.floor(trainingSet.columns * this.maxFeatures);\n } else if (Number.isInteger(this.maxFeatures)) {\n if (this.maxFeatures > trainingSet.columns) {\n throw new RangeError(\n `The maxFeatures parameter should be less than ${trainingSet.columns}`\n );\n } else {\n this.n = this.maxFeatures;\n }\n } else {\n throw new RangeError(\n `Cannot process the maxFeatures parameter ${this.maxFeatures}`\n );\n }\n\n if (this.isClassifier) {\n var Estimator = DTClassifier;\n } else {\n Estimator = DTRegression;\n }\n\n this.estimators = new Array(this.nEstimators);\n this.indexes = new Array(this.nEstimators);\n\n for (var i = 0; i < this.nEstimators; ++i) {\n var res = this.useSampleBagging\n ? Utils.examplesBaggingWithReplacement(\n trainingSet,\n trainingValues,\n this.seed\n )\n : { X: trainingSet, y: trainingValues };\n var X = res.X;\n var y = res.y;\n\n res = Utils.featureBagging(X, this.n, this.replacement, this.seed);\n X = res.X;\n\n this.indexes[i] = res.usedIndex;\n this.estimators[i] = new Estimator(this.treeOptions);\n this.estimators[i].train(X, y);\n }\n }\n\n /**\n * Method that returns the way the algorithm generates the predictions, for example, in classification\n * you can return the mode of all predictions retrieved by the trees, or in case of regression you can\n * use the mean or the median.\n * @abstract\n * @param {Array} values - predictions of the estimators.\n * @return {number} prediction.\n */\n // eslint-disable-next-line no-unused-vars\n selection(values) {\n throw new Error(\"Abstract method 'selection' not implemented!\");\n }\n\n /**\n * Predicts the output given the matrix to predict.\n * @param {Matrix|Array} toPredict\n * @return {Array} predictions\n */\n predict(toPredict) {\n var predictionValues = new Array(this.nEstimators);\n toPredict = Matrix.checkMatrix(toPredict);\n for (var i = 0; i < this.nEstimators; ++i) {\n var X = new MatrixColumnSelectionView(toPredict, this.indexes[i]); // get features for estimator\n predictionValues[i] = this.estimators[i].predict(X);\n }\n\n predictionValues = new MatrixTransposeView(new WrapperMatrix2D(predictionValues));\n var predictions = new Array(predictionValues.rows);\n for (i = 0; i < predictionValues.rows; ++i) {\n predictions[i] = this.selection(predictionValues.getRow(i));\n }\n\n return predictions;\n }\n\n /**\n * Export the current model to JSON.\n * @return {object} - Current model.\n */\n toJSON() {\n return {\n indexes: this.indexes,\n n: this.n,\n replacement: this.replacement,\n maxFeatures: this.maxFeatures,\n nEstimators: this.nEstimators,\n treeOptions: this.treeOptions,\n isClassifier: this.isClassifier,\n seed: this.seed,\n estimators: this.estimators.map((est) => est.toJSON()),\n useSampleBagging: this.useSampleBagging\n };\n }\n}\n","import { RandomForestBase } from './RandomForestBase';\n\nconst defaultOptions = {\n maxFeatures: 1.0,\n replacement: true,\n nEstimators: 10,\n seed: 42,\n useSampleBagging: false\n};\n\n/**\n * @class RandomForestClassifier\n * @augments RandomForestBase\n */\nexport class RandomForestClassifier extends RandomForestBase {\n /**\n * Create a new base random forest for a classifier or regression model.\n * @constructor\n * @param {object} options\n * @param {number} [options.maxFeatures=1.0] - the number of features used on each estimator.\n * * if is an integer it selects maxFeatures elements over the sample features.\n * * if is a float between (0, 1), it takes the percentage of features.\n * @param {boolean} [options.replacement=true] - use replacement over the sample features.\n * @param {number} [options.seed=42] - seed for feature and samples selection, must be a 32-bit integer.\n * @param {number} [options.nEstimators=10] - number of estimator to use.\n * @param {object} [options.treeOptions={}] - options for the tree classifier, see [ml-cart]{@link https://mljs.github.io/decision-tree-cart/}\n * @param {boolean} [options.useSampleBagging=false] - use bagging over training samples.\n * @param {object} model - for load purposes.\n */\n constructor(options, model) {\n if (options === true) {\n super(true, model.baseModel);\n } else {\n options = Object.assign({}, defaultOptions, options);\n options.isClassifier = true;\n super(options);\n }\n }\n\n /**\n * retrieve the prediction given the selection method.\n * @param {Array} values - predictions of the estimators.\n * @return {number} prediction\n */\n selection(values) {\n return mode(values);\n }\n\n /**\n * Export the current model to JSON.\n * @return {object} - Current model.\n */\n toJSON() {\n var baseModel = super.toJSON();\n return {\n baseModel: baseModel,\n name: 'RFClassifier'\n };\n }\n\n /**\n * Load a Decision tree classifier with the given model.\n * @param {object} model\n * @return {RandomForestClassifier}\n */\n static load(model) {\n if (model.name !== 'RFClassifier') {\n throw new RangeError(`Invalid model: ${model.name}`);\n }\n\n return new RandomForestClassifier(true, model);\n }\n}\n\n/**\n * Return the most repeated element on the array.\n * @param {Array} arr\n * @return {number} mode\n */\nfunction mode(arr) {\n return arr\n .sort(\n (a, b) =>\n arr.filter((v) => v === a).length - arr.filter((v) => v === b).length\n )\n .pop();\n}\n","(function(){function a(d){for(var e=0,f=d.length-1,g=void 0,h=void 0,i=void 0,j=c(e,f);!0;){if(f<=e)return d[j];if(f==e+1)return d[e]>d[f]&&b(d,e,f),d[j];for(g=c(e,f),d[g]>d[f]&&b(d,g,f),d[e]>d[f]&&b(d,e,f),d[g]>d[e]&&b(d,g,e),b(d,g,e+1),h=e+1,i=f;!0;){do h++;while(d[e]>d[h]);do i--;while(d[i]>d[e]);if(i=j&&(f=i-1)}}var b=function b(d,e,f){var _ref;return _ref=[d[f],d[e]],d[e]=_ref[0],d[f]=_ref[1],_ref},c=function c(d,e){return~~((d+e)/2)};'undefined'!=typeof module&&module.exports?module.exports=a:window.median=a})();\n","import quickSelectMedian from 'median-quickselect';\nimport isArray from 'is-any-array';\n\n/**\n * Computes the median of the given values\n * @param {Array} input\n * @return {number}\n */\n\nfunction median(input) {\n if (!isArray(input)) {\n throw new TypeError('input must be an array');\n }\n\n if (input.length === 0) {\n throw new TypeError('input must not be empty');\n }\n\n return quickSelectMedian(input.slice());\n}\n\nexport default median;\n","import arrayMean from 'ml-array-mean';\nimport arrayMedian from 'ml-array-median';\n\nimport { RandomForestBase } from './RandomForestBase';\n\nconst selectionMethods = {\n mean: arrayMean,\n median: arrayMedian\n};\n\nconst defaultOptions = {\n maxFeatures: 1.0,\n replacement: false,\n nEstimators: 10,\n treeOptions: {},\n selectionMethod: 'mean',\n seed: 42,\n useSampleBagging: false\n};\n\n/**\n * @class RandomForestRegression\n * @augments RandomForestBase\n */\nexport class RandomForestRegression extends RandomForestBase {\n /**\n * Create a new base random forest for a classifier or regression model.\n * @constructor\n * @param {object} options\n * @param {number} [options.maxFeatures=1.0] - the number of features used on each estimator.\n * * if is an integer it selects maxFeatures elements over the sample features.\n * * if is a float between (0, 1), it takes the percentage of features.\n * @param {boolean} [options.replacement=true] - use replacement over the sample features.\n * @param {number} [options.seed=42] - seed for feature and samples selection, must be a 32-bit integer.\n * @param {number} [options.nEstimators=10] - number of estimator to use.\n * @param {object} [options.treeOptions={}] - options for the tree classifier, see [ml-cart]{@link https://mljs.github.io/decision-tree-cart/}\n * @param {string} [options.selectionMethod=\"mean\"] - the way to calculate the prediction from estimators, \"mean\" and \"median\" are supported.\n * @param {boolean} [options.useSampleBagging=false] - use bagging over training samples.\n * @param {object} model - for load purposes.\n */\n constructor(options, model) {\n if (options === true) {\n super(true, model.baseModel);\n this.selectionMethod = model.selectionMethod;\n } else {\n options = Object.assign({}, defaultOptions, options);\n\n if (\n !(\n options.selectionMethod === 'mean' ||\n options.selectionMethod === 'median'\n )\n ) {\n throw new RangeError(\n `Unsupported selection method ${options.selectionMethod}`\n );\n }\n\n options.isClassifier = false;\n\n super(options);\n this.selectionMethod = options.selectionMethod;\n }\n }\n\n /**\n * retrieve the prediction given the selection method.\n * @param {Array} values - predictions of the estimators.\n * @return {number} prediction\n */\n selection(values) {\n return selectionMethods[this.selectionMethod](values);\n }\n\n /**\n * Export the current model to JSON.\n * @return {object} - Current model.\n */\n toJSON() {\n var baseModel = super.toJSON();\n return {\n baseModel: baseModel,\n selectionMethod: this.selectionMethod,\n name: 'RFRegression'\n };\n }\n\n /**\n * Load a Decision tree classifier with the given model.\n * @param {object} model\n * @return {RandomForestRegression}\n */\n static load(model) {\n if (model.name !== 'RFRegression') {\n throw new RangeError(`Invalid model: ${model.name}`);\n }\n\n return new RandomForestRegression(true, model);\n }\n}\n","import { Matrix, MatrixTransposeView, EVD, SVD, NIPALS } from 'ml-matrix';\n\n/**\n * Creates new PCA (Principal Component Analysis) from the dataset\n * @param {Matrix} dataset - dataset or covariance matrix.\n * @param {Object} [options]\n * @param {boolean} [options.isCovarianceMatrix=false] - true if the dataset is a covariance matrix.\n * @param {boolean} [options.method='SVD'] - select which method to use: SVD (default), covarianceMatrirx or NIPALS.\n * @param {boolean} [options.nCompNIPALS=2] - number of components to be computed with NIPALS.\n * @param {boolean} [options.center=true] - should the data be centered (subtract the mean).\n * @param {boolean} [options.scale=false] - should the data be scaled (divide by the standard deviation).\n * @param {boolean} [options.ignoreZeroVariance=false] - ignore columns with zero variance if `scale` is `true`.\n * */\nexport class PCA {\n constructor(dataset, options = {}) {\n if (dataset === true) {\n const model = options;\n this.center = model.center;\n this.scale = model.scale;\n this.means = model.means;\n this.stdevs = model.stdevs;\n this.U = Matrix.checkMatrix(model.U);\n this.S = model.S;\n this.R = model.R;\n this.excludedFeatures = model.excludedFeatures;\n return;\n }\n\n dataset = new Matrix(dataset);\n\n const {\n isCovarianceMatrix = false,\n method = 'SVD',\n nCompNIPALS = 2,\n center = true,\n scale = false,\n ignoreZeroVariance = false,\n } = options;\n\n this.center = center;\n this.scale = scale;\n this.means = null;\n this.stdevs = null;\n this.excludedFeatures = [];\n\n if (isCovarianceMatrix) {\n // User provided a covariance matrix instead of dataset.\n this._computeFromCovarianceMatrix(dataset);\n return;\n }\n\n this._adjust(dataset, ignoreZeroVariance);\n switch (method) {\n case 'covarianceMatrix': {\n // User provided a dataset but wants us to compute and use the covariance matrix.\n const covarianceMatrix = new MatrixTransposeView(dataset)\n .mmul(dataset)\n .div(dataset.rows - 1);\n this._computeFromCovarianceMatrix(covarianceMatrix);\n break;\n }\n case 'NIPALS': {\n this._computeWithNIPALS(dataset, nCompNIPALS);\n break;\n }\n case 'SVD': {\n const svd = new SVD(dataset, {\n computeLeftSingularVectors: false,\n computeRightSingularVectors: true,\n autoTranspose: true,\n });\n\n this.U = svd.rightSingularVectors;\n\n const singularValues = svd.diagonal;\n const eigenvalues = [];\n for (const singularValue of singularValues) {\n eigenvalues.push((singularValue * singularValue) / (dataset.rows - 1));\n }\n this.S = eigenvalues;\n break;\n }\n default: {\n throw new Error(`unknown method: ${method}`);\n }\n }\n }\n\n /**\n * Load a PCA model from JSON\n * @param {Object} model\n * @return {PCA}\n */\n static load(model) {\n if (typeof model.name !== 'string') {\n throw new TypeError('model must have a name property');\n }\n if (model.name !== 'PCA') {\n throw new RangeError(`invalid model: ${model.name}`);\n }\n return new PCA(true, model);\n }\n\n /**\n * Project the dataset into the PCA space\n * @param {Matrix} dataset\n * @param {Object} options\n * @return {Matrix} dataset projected in the PCA space\n */\n predict(dataset, options = {}) {\n const { nComponents = this.U.columns } = options;\n dataset = new Matrix(dataset);\n if (this.center) {\n dataset.subRowVector(this.means);\n if (this.scale) {\n for (let i of this.excludedFeatures) {\n dataset.removeColumn(i);\n }\n dataset.divRowVector(this.stdevs);\n }\n }\n var predictions = dataset.mmul(this.U);\n return predictions.subMatrix(0, predictions.rows - 1, 0, nComponents - 1);\n }\n\n /**\n * Calculates the inverse PCA transform\n * @param {Matrix} dataset\n * @return {Matrix} dataset projected in the PCA space\n */\n invert(dataset) {\n dataset = Matrix.checkMatrix(dataset);\n\n var inverse = dataset.mmul(this.U.transpose());\n\n if (this.center) {\n if (this.scale) {\n inverse.mulRowVector(this.stdevs);\n }\n inverse.addRowVector(this.means);\n }\n\n return inverse;\n }\n\n\n /**\n * Returns the proportion of variance for each component\n * @return {[number]}\n */\n getExplainedVariance() {\n var sum = 0;\n for (const s of this.S) {\n sum += s;\n }\n return this.S.map((value) => value / sum);\n }\n\n /**\n * Returns the cumulative proportion of variance\n * @return {[number]}\n */\n getCumulativeVariance() {\n var explained = this.getExplainedVariance();\n for (var i = 1; i < explained.length; i++) {\n explained[i] += explained[i - 1];\n }\n return explained;\n }\n\n /**\n * Returns the Eigenvectors of the covariance matrix\n * @returns {Matrix}\n */\n getEigenvectors() {\n return this.U;\n }\n\n /**\n * Returns the Eigenvalues (on the diagonal)\n * @returns {[number]}\n */\n getEigenvalues() {\n return this.S;\n }\n\n /**\n * Returns the standard deviations of the principal components\n * @returns {[number]}\n */\n getStandardDeviations() {\n return this.S.map((x) => Math.sqrt(x));\n }\n\n /**\n * Returns the loadings matrix\n * @return {Matrix}\n */\n getLoadings() {\n return this.U.transpose();\n }\n\n /**\n * Export the current model to a JSON object\n * @return {Object} model\n */\n toJSON() {\n return {\n name: 'PCA',\n center: this.center,\n scale: this.scale,\n means: this.means,\n stdevs: this.stdevs,\n U: this.U,\n S: this.S,\n };\n }\n\n _adjust(dataset, ignoreZeroVariance) {\n if (this.center) {\n const mean = dataset.mean('column');\n const stdevs = this.scale\n ? dataset.standardDeviation('column', { mean })\n : null;\n this.means = mean;\n dataset.subRowVector(mean);\n if (this.scale) {\n for (let i = 0; i < stdevs.length; i++) {\n if (stdevs[i] === 0) {\n if (ignoreZeroVariance) {\n dataset.removeColumn(i);\n stdevs.splice(i, 1);\n this.excludedFeatures.push(i);\n i--;\n } else {\n throw new RangeError(\n `Cannot scale the dataset (standard deviation is zero at index ${i}`,\n );\n }\n }\n }\n this.stdevs = stdevs;\n dataset.divRowVector(stdevs);\n }\n }\n }\n\n _computeFromCovarianceMatrix(dataset) {\n const evd = new EVD(dataset, { assumeSymmetric: true });\n this.U = evd.eigenvectorMatrix;\n this.U.flipRows();\n this.S = evd.realEigenvalues;\n this.S.reverse();\n }\n\n _computeWithNIPALS(dataset, nCompNIPALS) {\n this.U = new Matrix(nCompNIPALS, dataset.columns);\n this.S = [];\n\n let x = dataset;\n for (let i = 0; i < nCompNIPALS; i++) {\n let dc = new NIPALS(x);\n\n this.U.setRow(i, dc.w.transpose());\n this.S.push(Math.pow(dc.s.get(0, 0), 2));\n\n x = dc.xResidual;\n }\n this.U = this.U.transpose(); // to be compatible with API\n }\n}\n","export function squaredEuclidean(p, q) {\r\n let d = 0;\r\n for (let i = 0; i < p.length; i++) {\r\n d += (p[i] - q[i]) * (p[i] - q[i]);\r\n }\r\n return d;\r\n}\r\nexport function euclidean(p, q) {\r\n return Math.sqrt(squaredEuclidean(p, q));\r\n}\r\n","/**\n * Computes a distance/similarity matrix given an array of data and a distance/similarity function.\n * @param {Array} data An array of data\n * @param {function} distanceFn A function that accepts two arguments and computes a distance/similarity between them\n * @return {Array} The distance/similarity matrix. The matrix is square and has a size equal to the length of\n * the data array\n */\nexport default function distanceMatrix(data, distanceFn) {\n const result = getMatrix(data.length);\n\n // Compute upper distance matrix\n for (let i = 0; i < data.length; i++) {\n for (let j = 0; j <= i; j++) {\n result[i][j] = distanceFn(data[i], data[j]);\n result[j][i] = result[i][j];\n }\n }\n\n return result;\n}\n\nfunction getMatrix(size) {\n const matrix = [];\n for (let i = 0; i < size; i++) {\n const row = [];\n matrix.push(row);\n for (let j = 0; j < size; j++) {\n row.push(0);\n }\n }\n return matrix;\n}\n","// Generated by CoffeeScript 1.8.0\n(function() {\n var Heap, defaultCmp, floor, heapify, heappop, heappush, heappushpop, heapreplace, insort, min, nlargest, nsmallest, updateItem, _siftdown, _siftup;\n\n floor = Math.floor, min = Math.min;\n\n\n /*\n Default comparison function to be used\n */\n\n defaultCmp = function(x, y) {\n if (x < y) {\n return -1;\n }\n if (x > y) {\n return 1;\n }\n return 0;\n };\n\n\n /*\n Insert item x in list a, and keep it sorted assuming a is sorted.\n \n If x is already in a, insert it to the right of the rightmost x.\n \n Optional args lo (default 0) and hi (default a.length) bound the slice\n of a to be searched.\n */\n\n insort = function(a, x, lo, hi, cmp) {\n var mid;\n if (lo == null) {\n lo = 0;\n }\n if (cmp == null) {\n cmp = defaultCmp;\n }\n if (lo < 0) {\n throw new Error('lo must be non-negative');\n }\n if (hi == null) {\n hi = a.length;\n }\n while (lo < hi) {\n mid = floor((lo + hi) / 2);\n if (cmp(x, a[mid]) < 0) {\n hi = mid;\n } else {\n lo = mid + 1;\n }\n }\n return ([].splice.apply(a, [lo, lo - lo].concat(x)), x);\n };\n\n\n /*\n Push item onto heap, maintaining the heap invariant.\n */\n\n heappush = function(array, item, cmp) {\n if (cmp == null) {\n cmp = defaultCmp;\n }\n array.push(item);\n return _siftdown(array, 0, array.length - 1, cmp);\n };\n\n\n /*\n Pop the smallest item off the heap, maintaining the heap invariant.\n */\n\n heappop = function(array, cmp) {\n var lastelt, returnitem;\n if (cmp == null) {\n cmp = defaultCmp;\n }\n lastelt = array.pop();\n if (array.length) {\n returnitem = array[0];\n array[0] = lastelt;\n _siftup(array, 0, cmp);\n } else {\n returnitem = lastelt;\n }\n return returnitem;\n };\n\n\n /*\n Pop and return the current smallest value, and add the new item.\n \n This is more efficient than heappop() followed by heappush(), and can be\n more appropriate when using a fixed size heap. Note that the value\n returned may be larger than item! That constrains reasonable use of\n this routine unless written as part of a conditional replacement:\n if item > array[0]\n item = heapreplace(array, item)\n */\n\n heapreplace = function(array, item, cmp) {\n var returnitem;\n if (cmp == null) {\n cmp = defaultCmp;\n }\n returnitem = array[0];\n array[0] = item;\n _siftup(array, 0, cmp);\n return returnitem;\n };\n\n\n /*\n Fast version of a heappush followed by a heappop.\n */\n\n heappushpop = function(array, item, cmp) {\n var _ref;\n if (cmp == null) {\n cmp = defaultCmp;\n }\n if (array.length && cmp(array[0], item) < 0) {\n _ref = [array[0], item], item = _ref[0], array[0] = _ref[1];\n _siftup(array, 0, cmp);\n }\n return item;\n };\n\n\n /*\n Transform list into a heap, in-place, in O(array.length) time.\n */\n\n heapify = function(array, cmp) {\n var i, _i, _j, _len, _ref, _ref1, _results, _results1;\n if (cmp == null) {\n cmp = defaultCmp;\n }\n _ref1 = (function() {\n _results1 = [];\n for (var _j = 0, _ref = floor(array.length / 2); 0 <= _ref ? _j < _ref : _j > _ref; 0 <= _ref ? _j++ : _j--){ _results1.push(_j); }\n return _results1;\n }).apply(this).reverse();\n _results = [];\n for (_i = 0, _len = _ref1.length; _i < _len; _i++) {\n i = _ref1[_i];\n _results.push(_siftup(array, i, cmp));\n }\n return _results;\n };\n\n\n /*\n Update the position of the given item in the heap.\n This function should be called every time the item is being modified.\n */\n\n updateItem = function(array, item, cmp) {\n var pos;\n if (cmp == null) {\n cmp = defaultCmp;\n }\n pos = array.indexOf(item);\n if (pos === -1) {\n return;\n }\n _siftdown(array, 0, pos, cmp);\n return _siftup(array, pos, cmp);\n };\n\n\n /*\n Find the n largest elements in a dataset.\n */\n\n nlargest = function(array, n, cmp) {\n var elem, result, _i, _len, _ref;\n if (cmp == null) {\n cmp = defaultCmp;\n }\n result = array.slice(0, n);\n if (!result.length) {\n return result;\n }\n heapify(result, cmp);\n _ref = array.slice(n);\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n elem = _ref[_i];\n heappushpop(result, elem, cmp);\n }\n return result.sort(cmp).reverse();\n };\n\n\n /*\n Find the n smallest elements in a dataset.\n */\n\n nsmallest = function(array, n, cmp) {\n var elem, i, los, result, _i, _j, _len, _ref, _ref1, _results;\n if (cmp == null) {\n cmp = defaultCmp;\n }\n if (n * 10 <= array.length) {\n result = array.slice(0, n).sort(cmp);\n if (!result.length) {\n return result;\n }\n los = result[result.length - 1];\n _ref = array.slice(n);\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n elem = _ref[_i];\n if (cmp(elem, los) < 0) {\n insort(result, elem, 0, null, cmp);\n result.pop();\n los = result[result.length - 1];\n }\n }\n return result;\n }\n heapify(array, cmp);\n _results = [];\n for (i = _j = 0, _ref1 = min(n, array.length); 0 <= _ref1 ? _j < _ref1 : _j > _ref1; i = 0 <= _ref1 ? ++_j : --_j) {\n _results.push(heappop(array, cmp));\n }\n return _results;\n };\n\n _siftdown = function(array, startpos, pos, cmp) {\n var newitem, parent, parentpos;\n if (cmp == null) {\n cmp = defaultCmp;\n }\n newitem = array[pos];\n while (pos > startpos) {\n parentpos = (pos - 1) >> 1;\n parent = array[parentpos];\n if (cmp(newitem, parent) < 0) {\n array[pos] = parent;\n pos = parentpos;\n continue;\n }\n break;\n }\n return array[pos] = newitem;\n };\n\n _siftup = function(array, pos, cmp) {\n var childpos, endpos, newitem, rightpos, startpos;\n if (cmp == null) {\n cmp = defaultCmp;\n }\n endpos = array.length;\n startpos = pos;\n newitem = array[pos];\n childpos = 2 * pos + 1;\n while (childpos < endpos) {\n rightpos = childpos + 1;\n if (rightpos < endpos && !(cmp(array[childpos], array[rightpos]) < 0)) {\n childpos = rightpos;\n }\n array[pos] = array[childpos];\n pos = childpos;\n childpos = 2 * pos + 1;\n }\n array[pos] = newitem;\n return _siftdown(array, startpos, pos, cmp);\n };\n\n Heap = (function() {\n Heap.push = heappush;\n\n Heap.pop = heappop;\n\n Heap.replace = heapreplace;\n\n Heap.pushpop = heappushpop;\n\n Heap.heapify = heapify;\n\n Heap.updateItem = updateItem;\n\n Heap.nlargest = nlargest;\n\n Heap.nsmallest = nsmallest;\n\n function Heap(cmp) {\n this.cmp = cmp != null ? cmp : defaultCmp;\n this.nodes = [];\n }\n\n Heap.prototype.push = function(x) {\n return heappush(this.nodes, x, this.cmp);\n };\n\n Heap.prototype.pop = function() {\n return heappop(this.nodes, this.cmp);\n };\n\n Heap.prototype.peek = function() {\n return this.nodes[0];\n };\n\n Heap.prototype.contains = function(x) {\n return this.nodes.indexOf(x) !== -1;\n };\n\n Heap.prototype.replace = function(x) {\n return heapreplace(this.nodes, x, this.cmp);\n };\n\n Heap.prototype.pushpop = function(x) {\n return heappushpop(this.nodes, x, this.cmp);\n };\n\n Heap.prototype.heapify = function() {\n return heapify(this.nodes, this.cmp);\n };\n\n Heap.prototype.updateItem = function(x) {\n return updateItem(this.nodes, x, this.cmp);\n };\n\n Heap.prototype.clear = function() {\n return this.nodes = [];\n };\n\n Heap.prototype.empty = function() {\n return this.nodes.length === 0;\n };\n\n Heap.prototype.size = function() {\n return this.nodes.length;\n };\n\n Heap.prototype.clone = function() {\n var heap;\n heap = new Heap();\n heap.nodes = this.nodes.slice(0);\n return heap;\n };\n\n Heap.prototype.toArray = function() {\n return this.nodes.slice(0);\n };\n\n Heap.prototype.insert = Heap.prototype.push;\n\n Heap.prototype.top = Heap.prototype.peek;\n\n Heap.prototype.front = Heap.prototype.peek;\n\n Heap.prototype.has = Heap.prototype.contains;\n\n Heap.prototype.copy = Heap.prototype.clone;\n\n return Heap;\n\n })();\n\n (function(root, factory) {\n if (typeof define === 'function' && define.amd) {\n return define([], factory);\n } else if (typeof exports === 'object') {\n return module.exports = factory();\n } else {\n return root.Heap = factory();\n }\n })(this, function() {\n return Heap;\n });\n\n}).call(this);\n","module.exports = require('./lib/heap');\n","import Heap from 'heap';\n\nexport default class Cluster {\n constructor() {\n this.children = [];\n this.height = 0;\n this.size = 1;\n this.index = -1;\n this.isLeaf = false;\n }\n\n /**\n * Creates an array of clusters where the maximum height is smaller than the threshold\n * @param {number} threshold\n * @return {Array}\n */\n cut(threshold) {\n if (typeof threshold !== 'number') {\n throw new TypeError('threshold must be a number');\n }\n if (threshold < 0) {\n throw new RangeError('threshold must be a positive number');\n }\n let list = [this];\n const ans = [];\n while (list.length > 0) {\n const aux = list.shift();\n if (threshold >= aux.height) {\n ans.push(aux);\n } else {\n list = list.concat(aux.children);\n }\n }\n return ans;\n }\n\n /**\n * Merge the leaves in the minimum way to have `groups` number of clusters.\n * @param {number} groups - Them number of children the first level of the tree should have.\n * @return {Cluster}\n */\n group(groups) {\n if (!Number.isInteger(groups) || groups < 1) {\n throw new RangeError('groups must be a positive integer');\n }\n\n const heap = new Heap((a, b) => {\n return b.height - a.height;\n });\n\n heap.push(this);\n\n while (heap.size() < groups) {\n var first = heap.pop();\n if (first.children.length === 0) {\n break;\n }\n first.children.forEach((child) => heap.push(child));\n }\n\n var root = new Cluster();\n root.children = heap.toArray();\n root.height = this.height;\n\n return root;\n }\n\n /**\n * Traverses the tree depth-first and calls the provided callback with each individual node\n * @param {function} cb - The callback to be called on each node encounter\n */\n traverse(cb) {\n function visit(root, callback) {\n callback(root);\n if (root.children) {\n for (const child of root.children) {\n visit(child, callback);\n }\n }\n }\n visit(this, cb);\n }\n\n /**\n * Returns a list of indices for all the leaves of this cluster.\n * The list is ordered in such a way that a dendrogram could be drawn without crossing branches.\n * @returns {Array}\n */\n indices() {\n const result = [];\n this.traverse((cluster) => {\n if (cluster.isLeaf) {\n result.push(cluster.index);\n }\n });\n return result;\n }\n}\n","import { euclidean } from 'ml-distance-euclidean';\nimport getDistanceMatrix from 'ml-distance-matrix';\nimport { Matrix } from 'ml-matrix';\n\nimport Cluster from './Cluster';\n\nfunction singleLink(dKI, dKJ) {\n return Math.min(dKI, dKJ);\n}\n\nfunction completeLink(dKI, dKJ) {\n return Math.max(dKI, dKJ);\n}\n\nfunction averageLink(dKI, dKJ, dIJ, ni, nj) {\n const ai = ni / (ni + nj);\n const aj = nj / (ni + nj);\n return ai * dKI + aj * dKJ;\n}\n\nfunction weightedAverageLink(dKI, dKJ) {\n return (dKI + dKJ) / 2;\n}\n\nfunction centroidLink(dKI, dKJ, dIJ, ni, nj) {\n const ai = ni / (ni + nj);\n const aj = nj / (ni + nj);\n const b = -(ni * nj) / (ni + nj) ** 2;\n return ai * dKI + aj * dKJ + b * dIJ;\n}\n\nfunction medianLink(dKI, dKJ, dIJ) {\n return dKI / 2 + dKJ / 2 - dIJ / 4;\n}\n\nfunction wardLink(dKI, dKJ, dIJ, ni, nj, nk) {\n const ai = (ni + nk) / (ni + nj + nk);\n const aj = (nj + nk) / (ni + nj + nk);\n const b = -nk / (ni + nj + nk);\n return ai * dKI + aj * dKJ + b * dIJ;\n}\n\nfunction wardLink2(dKI, dKJ, dIJ, ni, nj, nk) {\n const ai = (ni + nk) / (ni + nj + nk);\n const aj = (nj + nk) / (ni + nj + nk);\n const b = -nk / (ni + nj + nk);\n return Math.sqrt(ai * dKI * dKI + aj * dKJ * dKJ + b * dIJ * dIJ);\n}\n\n/**\n * Continuously merge nodes that have the least dissimilarity\n * @param {Array>} data - Array of points to be clustered\n * @param {object} [options]\n * @param {Function} [options.distanceFunction]\n * @param {string} [options.method] - Default: `'complete'`\n * @param {boolean} [options.isDistanceMatrix] - Is the input already a distance matrix?\n * @constructor\n */\nexport function agnes(data, options = {}) {\n const {\n distanceFunction = euclidean,\n method = 'complete',\n isDistanceMatrix = false,\n } = options;\n\n let updateFunc;\n if (!isDistanceMatrix) {\n data = getDistanceMatrix(data, distanceFunction);\n }\n let distanceMatrix = new Matrix(data);\n const numLeaves = distanceMatrix.rows;\n\n // allows to use a string or a given function\n if (typeof method === 'string') {\n switch (method.toLowerCase()) {\n case 'single':\n updateFunc = singleLink;\n break;\n case 'complete':\n updateFunc = completeLink;\n break;\n case 'average':\n case 'upgma':\n updateFunc = averageLink;\n break;\n case 'wpgma':\n updateFunc = weightedAverageLink;\n break;\n case 'centroid':\n case 'upgmc':\n updateFunc = centroidLink;\n break;\n case 'median':\n case 'wpgmc':\n updateFunc = medianLink;\n break;\n case 'ward':\n updateFunc = wardLink;\n break;\n case 'ward2':\n updateFunc = wardLink2;\n break;\n default:\n throw new RangeError(`unknown clustering method: ${method}`);\n }\n } else if (typeof method !== 'function') {\n throw new TypeError('method must be a string or function');\n }\n\n let clusters = [];\n for (let i = 0; i < numLeaves; i++) {\n const cluster = new Cluster();\n cluster.isLeaf = true;\n cluster.index = i;\n clusters.push(cluster);\n }\n\n for (let n = 0; n < numLeaves - 1; n++) {\n const [row, column, distance] = getSmallestDistance(distanceMatrix);\n const cluster1 = clusters[row];\n const cluster2 = clusters[column];\n const newCluster = new Cluster();\n newCluster.size = cluster1.size + cluster2.size;\n newCluster.children.push(cluster1, cluster2);\n newCluster.height = distance;\n\n const newClusters = [newCluster];\n const newDistanceMatrix = new Matrix(\n distanceMatrix.rows - 1,\n distanceMatrix.rows - 1,\n );\n const previous = (newIndex) =>\n getPreviousIndex(newIndex, Math.min(row, column), Math.max(row, column));\n\n for (let i = 1; i < newDistanceMatrix.rows; i++) {\n const prevI = previous(i);\n const prevICluster = clusters[prevI];\n newClusters.push(prevICluster);\n for (let j = 0; j < i; j++) {\n if (j === 0) {\n const dKI = distanceMatrix.get(row, prevI);\n const dKJ = distanceMatrix.get(prevI, column);\n const val = updateFunc(\n dKI,\n dKJ,\n distance,\n cluster1.size,\n cluster2.size,\n prevICluster.size,\n );\n newDistanceMatrix.set(i, j, val);\n newDistanceMatrix.set(j, i, val);\n } else {\n // Just copy distance from previous matrix\n const val = distanceMatrix.get(prevI, previous(j));\n newDistanceMatrix.set(i, j, val);\n newDistanceMatrix.set(j, i, val);\n }\n }\n }\n\n clusters = newClusters;\n distanceMatrix = newDistanceMatrix;\n }\n\n return clusters[0];\n}\n\nfunction getSmallestDistance(distance) {\n let smallest = Infinity;\n let smallestI = 0;\n let smallestJ = 0;\n for (let i = 1; i < distance.rows; i++) {\n for (let j = 0; j < i; j++) {\n if (distance.get(i, j) < smallest) {\n smallest = distance.get(i, j);\n smallestI = i;\n smallestJ = j;\n }\n }\n }\n return [smallestI, smallestJ, smallest];\n}\n\nfunction getPreviousIndex(newIndex, prev1, prev2) {\n newIndex -= 1;\n if (newIndex >= prev1) newIndex++;\n if (newIndex >= prev2) newIndex++;\n return newIndex;\n}\n","'use strict';\nimport { squaredEuclidean } from 'ml-distance-euclidean';\nconst defaultOptions = {\n distanceFunction: squaredEuclidean\n};\nexport default function nearestVector(listVectors, vector, options = defaultOptions) {\n const distanceFunction = options.distanceFunction || defaultOptions.distanceFunction;\n const similarityFunction = options.similarityFunction || defaultOptions.similarityFunction;\n let vectorIndex = -1;\n if (typeof similarityFunction === 'function') {\n // maximum similarity\n let maxSim = Number.MIN_VALUE;\n for (let j = 0; j < listVectors.length; j++) {\n const sim = similarityFunction(vector, listVectors[j]);\n if (sim > maxSim) {\n maxSim = sim;\n vectorIndex = j;\n }\n }\n }\n else if (typeof distanceFunction === 'function') {\n // minimum distance\n let minDist = Number.MAX_VALUE;\n for (let i = 0; i < listVectors.length; i++) {\n const dist = distanceFunction(vector, listVectors[i]);\n if (dist < minDist) {\n minDist = dist;\n vectorIndex = i;\n }\n }\n }\n else {\n throw new Error(\"A similarity or distance function it's required\");\n }\n return vectorIndex;\n}\nexport function findNearestVector(vectorList, vector, options = defaultOptions) {\n const index = nearestVector(vectorList, vector, options);\n return vectorList[index];\n}\n","import nearestVector from 'ml-nearest-vector';\n\n/**\n * Calculates the distance matrix for a given array of points\n * @ignore\n * @param {Array>} data - the [x,y,z,...] points to cluster\n * @param {function} distance - Distance function to use between the points\n * @return {Array>} - matrix with the distance values\n */\nexport function calculateDistanceMatrix(data, distance) {\n var distanceMatrix = new Array(data.length);\n for (var i = 0; i < data.length; ++i) {\n for (var j = i; j < data.length; ++j) {\n if (!distanceMatrix[i]) {\n distanceMatrix[i] = new Array(data.length);\n }\n if (!distanceMatrix[j]) {\n distanceMatrix[j] = new Array(data.length);\n }\n const dist = distance(data[i], data[j]);\n distanceMatrix[i][j] = dist;\n distanceMatrix[j][i] = dist;\n }\n }\n return distanceMatrix;\n}\n\n/**\n * Updates the cluster identifier based in the new data\n * @ignore\n * @param {Array>} data - the [x,y,z,...] points to cluster\n * @param {Array>} centers - the K centers in format [x,y,z,...]\n * @param {Array } clusterID - the cluster identifier for each data dot\n * @param {function} distance - Distance function to use between the points\n * @return {Array} the cluster identifier for each data dot\n */\nexport function updateClusterID(data, centers, clusterID, distance) {\n for (var i = 0; i < data.length; i++) {\n clusterID[i] = nearestVector(centers, data[i], {\n distanceFunction: distance\n });\n }\n return clusterID;\n}\n\n/**\n * Update the center values based in the new configurations of the clusters\n * @ignore\n * @param {Array>} prevCenters - Centroids from the previous iteration\n * @param {Array >} data - the [x,y,z,...] points to cluster\n * @param {Array } clusterID - the cluster identifier for each data dot\n * @param {number} K - Number of clusters\n * @return {Array} he K centers in format [x,y,z,...]\n */\nexport function updateCenters(prevCenters, data, clusterID, K) {\n const nDim = data[0].length;\n\n // copy previous centers\n var centers = new Array(K);\n var centersLen = new Array(K);\n for (var i = 0; i < K; i++) {\n centers[i] = new Array(nDim);\n centersLen[i] = 0;\n for (var j = 0; j < nDim; j++) {\n centers[i][j] = 0;\n }\n }\n\n // add the value for all dimensions of the point\n for (var l = 0; l < data.length; l++) {\n centersLen[clusterID[l]]++;\n for (var dim = 0; dim < nDim; dim++) {\n centers[clusterID[l]][dim] += data[l][dim];\n }\n }\n\n // divides by length\n for (var id = 0; id < K; id++) {\n for (var d = 0; d < nDim; d++) {\n if (centersLen[id]) {\n centers[id][d] /= centersLen[id];\n } else {\n centers[id][d] = prevCenters[id][d];\n }\n }\n }\n return centers;\n}\n\n/**\n * The centers have moved more than the tolerance value?\n * @ignore\n * @param {Array>} centers - the K centers in format [x,y,z,...]\n * @param {Array>} oldCenters - the K old centers in format [x,y,z,...]\n * @param {function} distanceFunction - Distance function to use between the points\n * @param {number} tolerance - Allowed distance for the centroids to move\n * @return {boolean}\n */\nexport function hasConverged(centers, oldCenters, distanceFunction, tolerance) {\n for (var i = 0; i < centers.length; i++) {\n if (distanceFunction(centers[i], oldCenters[i]) > tolerance) {\n return false;\n }\n }\n return true;\n}\n","const LOOP = 8;\nconst FLOAT_MUL = 1 / 16777216;\nconst sh1 = 15;\nconst sh2 = 18;\nconst sh3 = 11;\nfunction multiply_uint32(n, m) {\n n >>>= 0;\n m >>>= 0;\n const nlo = n & 0xffff;\n const nhi = n - nlo;\n return (((nhi * m) >>> 0) + nlo * m) >>> 0;\n}\nexport default class XSadd {\n constructor(seed = Date.now()) {\n this.state = new Uint32Array(4);\n this.init(seed);\n this.random = this.getFloat.bind(this);\n }\n /**\n * Returns a 32-bit integer r (0 <= r < 2^32)\n */\n getUint32() {\n this.nextState();\n return (this.state[3] + this.state[2]) >>> 0;\n }\n /**\n * Returns a floating point number r (0.0 <= r < 1.0)\n */\n getFloat() {\n return (this.getUint32() >>> 8) * FLOAT_MUL;\n }\n init(seed) {\n if (!Number.isInteger(seed)) {\n throw new TypeError('seed must be an integer');\n }\n this.state[0] = seed;\n this.state[1] = 0;\n this.state[2] = 0;\n this.state[3] = 0;\n for (let i = 1; i < LOOP; i++) {\n this.state[i & 3] ^=\n (i +\n multiply_uint32(1812433253, this.state[(i - 1) & 3] ^ ((this.state[(i - 1) & 3] >>> 30) >>> 0))) >>>\n 0;\n }\n this.periodCertification();\n for (let i = 0; i < LOOP; i++) {\n this.nextState();\n }\n }\n periodCertification() {\n if (this.state[0] === 0 &&\n this.state[1] === 0 &&\n this.state[2] === 0 &&\n this.state[3] === 0) {\n this.state[0] = 88; // X\n this.state[1] = 83; // S\n this.state[2] = 65; // A\n this.state[3] = 68; // D\n }\n }\n nextState() {\n let t = this.state[0];\n t ^= t << sh1;\n t ^= t >>> sh2;\n t ^= this.state[3] << sh3;\n this.state[0] = this.state[1];\n this.state[1] = this.state[2];\n this.state[2] = this.state[3];\n this.state[3] = t;\n }\n}\n","const PROB_TOLERANCE = 0.00000001;\nfunction randomChoice(values, options = {}, random = Math.random) {\n const { size = 1, replace = false, probabilities } = options;\n let valuesArr;\n let cumSum;\n if (typeof values === 'number') {\n valuesArr = getArray(values);\n }\n else {\n valuesArr = values.slice();\n }\n if (probabilities) {\n if (!replace) {\n throw new Error('choice with probabilities and no replacement is not implemented');\n }\n // check input is sane\n if (probabilities.length !== valuesArr.length) {\n throw new Error('the length of probabilities option should be equal to the number of choices');\n }\n cumSum = [probabilities[0]];\n for (let i = 1; i < probabilities.length; i++) {\n cumSum[i] = cumSum[i - 1] + probabilities[i];\n }\n if (Math.abs(1 - cumSum[cumSum.length - 1]) > PROB_TOLERANCE) {\n throw new Error(`probabilities should sum to 1, but instead sums to ${cumSum[cumSum.length - 1]}`);\n }\n }\n if (replace === false && size > valuesArr.length) {\n throw new Error('size option is too large');\n }\n const result = [];\n for (let i = 0; i < size; i++) {\n const index = randomIndex(valuesArr.length, random, cumSum);\n result.push(valuesArr[index]);\n if (!replace) {\n valuesArr.splice(index, 1);\n }\n }\n return result;\n}\nfunction getArray(n) {\n const arr = [];\n for (let i = 0; i < n; i++) {\n arr.push(i);\n }\n return arr;\n}\nfunction randomIndex(n, random, cumSum) {\n const rand = random();\n if (!cumSum) {\n return Math.floor(rand * n);\n }\n else {\n let idx = 0;\n while (rand > cumSum[idx]) {\n idx++;\n }\n return idx;\n }\n}\nexport default randomChoice;\n","// tslint:disable-next-line\nimport XSAdd from 'ml-xsadd';\nimport choice from './choice';\n/**\n * @classdesc Random class\n */\nexport default class Random {\n /**\n * @param [seedOrRandom=Math.random] - Control the random number generator used by the Random class instance. Pass a random number generator function with a uniform distribution over the half-open interval [0, 1[. If seed will pass it to ml-xsadd to create a seeded random number generator. If undefined will use Math.random.\n */\n constructor(seedOrRandom = Math.random) {\n if (typeof seedOrRandom === 'number') {\n const xsadd = new XSAdd(seedOrRandom);\n this.randomGenerator = xsadd.random;\n }\n else {\n this.randomGenerator = seedOrRandom;\n }\n }\n choice(values, options) {\n if (typeof values === 'number') {\n return choice(values, options, this.randomGenerator);\n }\n return choice(values, options, this.randomGenerator);\n }\n /**\n * Draw a random number from a uniform distribution on [0,1)\n * @return The random number\n */\n random() {\n return this.randomGenerator();\n }\n /**\n * Draw a random integer from a uniform distribution on [low, high). If only low is specified, the number is drawn on [0, low)\n * @param low - The lower bound of the uniform distribution interval.\n * @param high - The higher bound of the uniform distribution interval.\n */\n randInt(low, high) {\n if (high === undefined) {\n high = low;\n low = 0;\n }\n return low + Math.floor(this.randomGenerator() * (high - low));\n }\n /**\n * Draw several random number from a uniform distribution on [0, 1)\n * @param size - The number of number to draw\n * @return - The list of drawn numbers.\n */\n randomSample(size) {\n const result = [];\n for (let i = 0; i < size; i++) {\n result.push(this.random());\n }\n return result;\n }\n}\n","import Random from 'ml-random';\nimport { squaredEuclidean } from 'ml-distance-euclidean';\nimport { Matrix } from 'ml-matrix';\n\n/**\n * Choose K different random points from the original data\n * @ignore\n * @param {Array>} data - Points in the format to cluster [x,y,z,...]\n * @param {number} K - number of clusters\n * @param {number} seed - seed for random number generation\n * @return {Array>} - Initial random points\n */\nexport function random(data, K, seed) {\n const random = new Random(seed);\n return random.choice(data, { size: K });\n}\n\n/**\n * Chooses the most distant points to a first random pick\n * @ignore\n * @param {Array>} data - Points in the format to cluster [x,y,z,...]\n * @param {number} K - number of clusters\n * @param {Array>} distanceMatrix - matrix with the distance values\n * @param {number} seed - seed for random number generation\n * @return {Array>} - Initial random points\n */\nexport function mostDistant(data, K, distanceMatrix, seed) {\n const random = new Random(seed);\n var ans = new Array(K);\n // chooses a random point as initial cluster\n ans[0] = Math.floor(random.random() * data.length);\n\n if (K > 1) {\n // chooses the more distant point\n var maxDist = { dist: -1, index: -1 };\n for (var l = 0; l < data.length; ++l) {\n if (distanceMatrix[ans[0]][l] > maxDist.dist) {\n maxDist.dist = distanceMatrix[ans[0]][l];\n maxDist.index = l;\n }\n }\n ans[1] = maxDist.index;\n\n if (K > 2) {\n // chooses the set of points that maximises the min distance\n for (var k = 2; k < K; ++k) {\n var center = { dist: -1, index: -1 };\n for (var m = 0; m < data.length; ++m) {\n // minimum distance to centers\n var minDistCent = { dist: Number.MAX_VALUE, index: -1 };\n for (var n = 0; n < k; ++n) {\n if (\n distanceMatrix[n][m] < minDistCent.dist &&\n ans.indexOf(m) === -1\n ) {\n minDistCent = {\n dist: distanceMatrix[n][m],\n index: m\n };\n }\n }\n\n if (\n minDistCent.dist !== Number.MAX_VALUE &&\n minDistCent.dist > center.dist\n ) {\n center = Object.assign({}, minDistCent);\n }\n }\n\n ans[k] = center.index;\n }\n }\n }\n\n return ans.map((index) => data[index]);\n}\n\n// Implementation inspired from scikit\nexport function kmeanspp(X, K, options = {}) {\n X = new Matrix(X);\n const nSamples = X.rows;\n const random = new Random(options.seed);\n // Set the number of trials\n const centers = [];\n const localTrials = options.localTrials || 2 + Math.floor(Math.log(K));\n\n // Pick the first center at random from the dataset\n const firstCenterIdx = random.randInt(nSamples);\n centers.push(X.getRow(firstCenterIdx));\n\n // Init closest distances\n let closestDistSquared = new Matrix(1, X.rows);\n for (let i = 0; i < X.rows; i++) {\n closestDistSquared.set(0, i, squaredEuclidean(X.getRow(i), centers[0]));\n }\n let cumSumClosestDistSquared = [cumSum(closestDistSquared.getRow(0))];\n const factor = 1 / cumSumClosestDistSquared[0][nSamples - 1];\n let probabilities = Matrix.mul(closestDistSquared, factor);\n\n // Iterate over the remaining centers\n for (let i = 1; i < K; i++) {\n const candidateIdx = random.choice(nSamples, {\n replace: true,\n size: localTrials,\n probabilities: probabilities[0]\n });\n\n const candidates = X.selection(candidateIdx, range(X.columns));\n const distanceToCandidates = euclideanDistances(candidates, X);\n\n let bestCandidate;\n let bestPot;\n let bestDistSquared;\n\n for (let j = 0; j < localTrials; j++) {\n const newDistSquared = Matrix.min(closestDistSquared, [distanceToCandidates.getRow(j)]);\n const newPot = newDistSquared.sum();\n if (bestCandidate === undefined || newPot < bestPot) {\n bestCandidate = candidateIdx[j];\n bestPot = newPot;\n bestDistSquared = newDistSquared;\n }\n }\n centers[i] = X.getRow(bestCandidate);\n closestDistSquared = bestDistSquared;\n cumSumClosestDistSquared = [cumSum(closestDistSquared.getRow(0))];\n probabilities = Matrix.mul(\n closestDistSquared,\n 1 / cumSumClosestDistSquared[0][nSamples - 1]\n );\n }\n return centers;\n}\n\nfunction euclideanDistances(A, B) {\n const result = new Matrix(A.rows, B.rows);\n for (let i = 0; i < A.rows; i++) {\n for (let j = 0; j < B.rows; j++) {\n result.set(i, j, squaredEuclidean(A.getRow(i), B.getRow(j)));\n }\n }\n return result;\n}\n\nfunction range(l) {\n let r = [];\n for (let i = 0; i < l; i++) {\n r.push(i);\n }\n return r;\n}\n\nfunction cumSum(arr) {\n let cumSum = [arr[0]];\n for (let i = 1; i < arr.length; i++) {\n cumSum[i] = cumSum[i - 1] + arr[i];\n }\n return cumSum;\n}\n","import { updateClusterID } from './utils';\n\nconst distanceSymbol = Symbol('distance');\n\nexport default class KMeansResult {\n /**\n * Result of the kmeans algorithm\n * @param {Array} clusters - the cluster identifier for each data dot\n * @param {Array>} centroids - the K centers in format [x,y,z,...], the error and size of the cluster\n * @param {boolean} converged - Converge criteria satisfied\n * @param {number} iterations - Current number of iterations\n * @param {function} distance - (*Private*) Distance function to use between the points\n * @constructor\n */\n constructor(clusters, centroids, converged, iterations, distance) {\n this.clusters = clusters;\n this.centroids = centroids;\n this.converged = converged;\n this.iterations = iterations;\n this[distanceSymbol] = distance;\n }\n\n /**\n * Allows to compute for a new array of points their cluster id\n * @param {Array>} data - the [x,y,z,...] points to cluster\n * @return {Array} - cluster id for each point\n */\n nearest(data) {\n const clusterID = new Array(data.length);\n const centroids = this.centroids.map(function (centroid) {\n return centroid.centroid;\n });\n return updateClusterID(data, centroids, clusterID, this[distanceSymbol]);\n }\n\n /**\n * Returns a KMeansResult with the error and size of the cluster\n * @ignore\n * @param {Array>} data - the [x,y,z,...] points to cluster\n * @return {KMeansResult}\n */\n computeInformation(data) {\n var enrichedCentroids = this.centroids.map(function (centroid) {\n return {\n centroid: centroid,\n error: 0,\n size: 0\n };\n });\n\n for (var i = 0; i < data.length; i++) {\n enrichedCentroids[this.clusters[i]].error += this[distanceSymbol](\n data[i],\n this.centroids[this.clusters[i]]\n );\n enrichedCentroids[this.clusters[i]].size++;\n }\n\n for (var j = 0; j < this.centroids.length; j++) {\n if (enrichedCentroids[j].size) {\n enrichedCentroids[j].error /= enrichedCentroids[j].size;\n } else {\n enrichedCentroids[j].error = null;\n }\n }\n\n return new KMeansResult(\n this.clusters,\n enrichedCentroids,\n this.converged,\n this.iterations,\n this[distanceSymbol]\n );\n }\n}\n","import { squaredEuclidean } from 'ml-distance-euclidean';\n\nimport {\n updateClusterID,\n updateCenters,\n hasConverged,\n calculateDistanceMatrix\n} from './utils';\nimport { mostDistant, random, kmeanspp } from './initialization';\nimport KMeansResult from './KMeansResult';\n\nconst defaultOptions = {\n maxIterations: 100,\n tolerance: 1e-6,\n withIterations: false,\n initialization: 'kmeans++',\n distanceFunction: squaredEuclidean\n};\n\n/**\n * Each step operation for kmeans\n * @ignore\n * @param {Array>} centers - K centers in format [x,y,z,...]\n * @param {Array>} data - Points [x,y,z,...] to cluster\n * @param {Array} clusterID - Cluster identifier for each data dot\n * @param {number} K - Number of clusters\n * @param {object} [options] - Option object\n * @param {number} iterations - Current number of iterations\n * @return {KMeansResult}\n */\nfunction step(centers, data, clusterID, K, options, iterations) {\n clusterID = updateClusterID(\n data,\n centers,\n clusterID,\n options.distanceFunction\n );\n var newCenters = updateCenters(centers, data, clusterID, K);\n var converged = hasConverged(\n newCenters,\n centers,\n options.distanceFunction,\n options.tolerance\n );\n return new KMeansResult(\n clusterID,\n newCenters,\n converged,\n iterations,\n options.distanceFunction\n );\n}\n\n/**\n * Generator version for the algorithm\n * @ignore\n * @param {Array>} centers - K centers in format [x,y,z,...]\n * @param {Array>} data - Points [x,y,z,...] to cluster\n * @param {Array} clusterID - Cluster identifier for each data dot\n * @param {number} K - Number of clusters\n * @param {object} [options] - Option object\n */\nfunction* kmeansGenerator(centers, data, clusterID, K, options) {\n var converged = false;\n var stepNumber = 0;\n var stepResult;\n while (!converged && stepNumber < options.maxIterations) {\n stepResult = step(centers, data, clusterID, K, options, ++stepNumber);\n yield stepResult.computeInformation(data);\n converged = stepResult.converged;\n centers = stepResult.centroids;\n }\n}\n\n/**\n * K-means algorithm\n * @param {Array>} data - Points in the format to cluster [x,y,z,...]\n * @param {number} K - Number of clusters\n * @param {object} [options] - Option object\n * @param {number} [options.maxIterations = 100] - Maximum of iterations allowed\n * @param {number} [options.tolerance = 1e-6] - Error tolerance\n * @param {boolean} [options.withIterations = false] - Store clusters and centroids for each iteration\n * @param {function} [options.distanceFunction = squaredDistance] - Distance function to use between the points\n * @param {number} [options.seed] - Seed for random initialization.\n * @param {string|Array>} [options.initialization = 'kmeans++'] - K centers in format [x,y,z,...] or a method for initialize the data:\n * * You can either specify your custom start centroids, or select one of the following initialization method:\n * * `'kmeans++'` will use the kmeans++ method as described by http://ilpubs.stanford.edu:8090/778/1/2006-13.pdf\n * * `'random'` will choose K random different values.\n * * `'mostDistant'` will choose the more distant points to a first random pick\n * @return {KMeansResult} - Cluster identifier for each data dot and centroids with the following fields:\n * * `'clusters'`: Array of indexes for the clusters.\n * * `'centroids'`: Array with the resulting centroids.\n * * `'iterations'`: Number of iterations that took to converge\n */\nexport default function kmeans(data, K, options) {\n options = Object.assign({}, defaultOptions, options);\n\n if (K <= 0 || K > data.length || !Number.isInteger(K)) {\n throw new Error(\n 'K should be a positive integer smaller than the number of points'\n );\n }\n\n var centers;\n if (Array.isArray(options.initialization)) {\n if (options.initialization.length !== K) {\n throw new Error('The initial centers should have the same length as K');\n } else {\n centers = options.initialization;\n }\n } else {\n switch (options.initialization) {\n case 'kmeans++':\n centers = kmeanspp(data, K, options);\n break;\n case 'random':\n centers = random(data, K, options.seed);\n break;\n case 'mostDistant':\n centers = mostDistant(\n data,\n K,\n calculateDistanceMatrix(data, options.distanceFunction),\n options.seed\n );\n break;\n default:\n throw new Error(\n `Unknown initialization method: \"${options.initialization}\"`\n );\n }\n }\n\n // infinite loop until convergence\n if (options.maxIterations === 0) {\n options.maxIterations = Number.MAX_VALUE;\n }\n\n var clusterID = new Array(data.length);\n if (options.withIterations) {\n return kmeansGenerator(centers, data, clusterID, K, options);\n } else {\n var converged = false;\n var stepNumber = 0;\n var stepResult;\n while (!converged && stepNumber < options.maxIterations) {\n stepResult = step(centers, data, clusterID, K, options, ++stepNumber);\n converged = stepResult.converged;\n centers = stepResult.centroids;\n }\n return stepResult.computeInformation(data);\n }\n}\n","import Matrix from 'ml-matrix';\n\n/**\n * @private\n * Function that retuns an array of matrices of the cases that belong to each class.\n * @param {Matrix} X - dataset\n * @param {Array} y - predictions\n * @return {Array}\n */\nexport function separateClasses(X, y) {\n var features = X.columns;\n\n var classes = 0;\n var totalPerClasses = new Array(10000); // max upperbound of classes\n for (var i = 0; i < y.length; i++) {\n if (totalPerClasses[y[i]] === undefined) {\n totalPerClasses[y[i]] = 0;\n classes++;\n }\n totalPerClasses[y[i]]++;\n }\n var separatedClasses = new Array(classes);\n var currentIndex = new Array(classes);\n for (i = 0; i < classes; ++i) {\n separatedClasses[i] = new Matrix(totalPerClasses[i], features);\n currentIndex[i] = 0;\n }\n for (i = 0; i < X.rows; ++i) {\n separatedClasses[y[i]].setRow(currentIndex[y[i]], X.getRow(i));\n currentIndex[y[i]]++;\n }\n return separatedClasses;\n}\n","import { Matrix } from 'ml-matrix';\n\nimport { separateClasses } from './utils';\n\nexport class GaussianNB {\n /**\n * Constructor for the Gaussian Naive Bayes classifier, the parameters here is just for loading purposes.\n * @constructor\n * @param {boolean} reload\n * @param {object} model\n */\n constructor(reload, model) {\n if (reload) {\n this.means = model.means;\n this.calculateProbabilities = model.calculateProbabilities;\n }\n }\n\n /**\n * Function that trains the classifier with a matrix that represents the training set and an array that\n * represents the label of each row in the training set. the labels must be numbers between 0 to n-1 where\n * n represents the number of classes.\n *\n * WARNING: in the case that one class, all the cases in one or more features have the same value, the\n * Naive Bayes classifier will not work well.\n * @param {Matrix|Array} trainingSet\n * @param {Matrix|Array} trainingLabels\n */\n train(trainingSet, trainingLabels) {\n var C1 = Math.sqrt(2 * Math.PI); // constant to precalculate the squared root\n trainingSet = Matrix.checkMatrix(trainingSet);\n\n if (trainingSet.rows !== trainingLabels.length) {\n throw new RangeError(\n 'the size of the training set and the training labels must be the same.'\n );\n }\n\n var separatedClasses = separateClasses(trainingSet, trainingLabels);\n var calculateProbabilities = new Array(separatedClasses.length);\n this.means = new Array(separatedClasses.length);\n for (var i = 0; i < separatedClasses.length; ++i) {\n var means = separatedClasses[i].mean('column');\n var std = separatedClasses[i].standardDeviation('column', {\n mean: means\n });\n\n var logPriorProbability = Math.log(\n separatedClasses[i].rows / trainingSet.rows\n );\n calculateProbabilities[i] = new Array(means.length + 1);\n\n calculateProbabilities[i][0] = logPriorProbability;\n for (var j = 1; j < means.length + 1; ++j) {\n var currentStd = std[j - 1];\n calculateProbabilities[i][j] = [\n 1 / (C1 * currentStd),\n -2 * currentStd * currentStd\n ];\n }\n\n this.means[i] = means;\n }\n\n this.calculateProbabilities = calculateProbabilities;\n }\n\n /**\n * function that predicts each row of the dataset (must be a matrix).\n *\n * @param {Matrix|Array} dataset\n * @return {Array}\n */\n predict(dataset) {\n dataset = Matrix.checkMatrix(dataset);\n if (dataset.rows === this.calculateProbabilities[0].length) {\n throw new RangeError(\n 'the dataset must have the same features as the training set'\n );\n }\n\n var predictions = new Array(dataset.rows);\n\n for (var i = 0; i < predictions.length; ++i) {\n predictions[i] = getCurrentClass(\n dataset.getRow(i),\n this.means,\n this.calculateProbabilities\n );\n }\n\n return predictions;\n }\n\n /**\n * Function that export the NaiveBayes model.\n * @return {object}\n */\n toJSON() {\n return {\n modelName: 'NaiveBayes',\n means: this.means,\n calculateProbabilities: this.calculateProbabilities\n };\n }\n\n /**\n * Function that create a GaussianNB classifier with the given model.\n * @param {object} model\n * @return {GaussianNB}\n */\n static load(model) {\n if (model.modelName !== 'NaiveBayes') {\n throw new RangeError(\n 'The current model is not a Multinomial Naive Bayes, current model:',\n model.name\n );\n }\n\n return new GaussianNB(true, model);\n }\n}\n\n/**\n * @private\n * Function the retrieves a prediction with one case.\n *\n * @param {Array} currentCase\n * @param {Array} mean - Precalculated means of each class trained\n * @param {Array} classes - Precalculated value of each class (Prior probability and probability function of each feature)\n * @return {number}\n */\nfunction getCurrentClass(currentCase, mean, classes) {\n var maxProbability = 0;\n var predictedClass = -1;\n\n // going through all precalculated values for the classes\n for (var i = 0; i < classes.length; ++i) {\n var currentProbability = classes[i][0]; // initialize with the prior probability\n for (var j = 1; j < classes[0][1].length + 1; ++j) {\n currentProbability += calculateLogProbability(\n currentCase[j - 1],\n mean[i][j - 1],\n classes[i][j][0],\n classes[i][j][1]\n );\n }\n\n currentProbability = Math.exp(currentProbability);\n if (currentProbability > maxProbability) {\n maxProbability = currentProbability;\n predictedClass = i;\n }\n }\n\n return predictedClass;\n}\n\n/**\n * @private\n * function that retrieves the probability of the feature given the class.\n * @param {number} value - value of the feature.\n * @param {number} mean - mean of the feature for the given class.\n * @param {number} C1 - precalculated value of (1 / (sqrt(2*pi) * std)).\n * @param {number} C2 - precalculated value of (2 * std^2) for the denominator of the exponential.\n * @return {number}\n */\nfunction calculateLogProbability(value, mean, C1, C2) {\n value = value - mean;\n return Math.log(C1 * Math.exp((value * value) / C2));\n}\n","import { Matrix } from 'ml-matrix';\n\nimport { separateClasses } from './utils';\n\nexport class MultinomialNB {\n /**\n * Constructor for Multinomial Naive Bayes, the model parameter is for load purposes.\n * @constructor\n * @param {object} model - for load purposes.\n */\n constructor(model) {\n if (model) {\n this.conditionalProbability = Matrix.checkMatrix(\n model.conditionalProbability\n );\n this.priorProbability = Matrix.checkMatrix(model.priorProbability);\n }\n }\n\n /**\n * Train the classifier with the current training set and labels, the labels must be numbers between 0 and n.\n * @param {Matrix|Array} trainingSet\n * @param {Array} trainingLabels\n */\n train(trainingSet, trainingLabels) {\n trainingSet = Matrix.checkMatrix(trainingSet);\n\n if (trainingSet.rows !== trainingLabels.length) {\n throw new RangeError(\n 'the size of the training set and the training labels must be the same.'\n );\n }\n\n var separateClass = separateClasses(trainingSet, trainingLabels);\n\n this.priorProbability = new Matrix(separateClass.length, 1);\n\n for (var i = 0; i < separateClass.length; ++i) {\n this.priorProbability.set(i, 0, Math.log(\n separateClass[i].rows / trainingSet.rows\n ));\n }\n\n var features = trainingSet.columns;\n this.conditionalProbability = new Matrix(separateClass.length, features);\n for (i = 0; i < separateClass.length; ++i) {\n var classValues = Matrix.checkMatrix(separateClass[i]);\n var total = classValues.sum();\n var divisor = total + features;\n this.conditionalProbability.setRow(\n i,\n Matrix.rowVector(classValues\n .sum('column'))\n .add(1)\n .div(divisor)\n .apply(matrixLog)\n );\n }\n }\n\n /**\n * Retrieves the predictions for the dataset with the current model.\n * @param {Matrix|Array} dataset\n * @return {Array} - predictions from the dataset.\n */\n predict(dataset) {\n dataset = Matrix.checkMatrix(dataset);\n var predictions = new Array(dataset.rows);\n for (var i = 0; i < dataset.rows; ++i) {\n var currentElement = dataset.getRowVector(i);\n const v = Matrix.columnVector(this.conditionalProbability\n .clone()\n .mulRowVector(currentElement)\n .sum('row'));\n predictions[i] = v\n .add(this.priorProbability)\n .maxIndex()[0];\n }\n\n return predictions;\n }\n\n /**\n * Function that saves the current model.\n * @return {object} - model in JSON format.\n */\n toJSON() {\n return {\n name: 'MultinomialNB',\n priorProbability: this.priorProbability,\n conditionalProbability: this.conditionalProbability\n };\n }\n\n /**\n * Creates a new MultinomialNB from the given model\n * @param {object} model\n * @return {MultinomialNB}\n */\n static load(model) {\n if (model.name !== 'MultinomialNB') {\n throw new RangeError(`${model.name} is not a Multinomial Naive Bayes`);\n }\n\n return new MultinomialNB(model);\n }\n}\n\nfunction matrixLog(i, j) {\n this.set(i, j, Math.log(this.get(i, j)));\n}\n","/*\n * Original code from:\n *\n * k-d Tree JavaScript - V 1.01\n *\n * https://github.com/ubilabs/kd-tree-javascript\n *\n * @author Mircea Pricop , 2012\n * @author Martin Kleppe , 2012\n * @author Ubilabs http://ubilabs.net, 2012\n * @license MIT License \n */\n\nfunction Node(obj, dimension, parent) {\n this.obj = obj;\n this.left = null;\n this.right = null;\n this.parent = parent;\n this.dimension = dimension;\n}\n\nexport default class KDTree {\n constructor(points, metric) {\n // If points is not an array, assume we're loading a pre-built tree\n if (!Array.isArray(points)) {\n this.dimensions = points.dimensions;\n this.root = points;\n restoreParent(this.root);\n } else {\n this.dimensions = new Array(points[0].length);\n for (var i = 0; i < this.dimensions.length; i++) {\n this.dimensions[i] = i;\n }\n this.root = buildTree(points, 0, null, this.dimensions);\n }\n this.metric = metric;\n }\n\n // Convert to a JSON serializable structure; this just requires removing\n // the `parent` property\n toJSON() {\n const result = toJSONImpl(this.root, true);\n result.dimensions = this.dimensions;\n return result;\n }\n\n nearest(point, maxNodes, maxDistance) {\n const metric = this.metric;\n const dimensions = this.dimensions;\n var i;\n\n const bestNodes = new BinaryHeap(function (e) {\n return -e[1];\n });\n\n function nearestSearch(node) {\n const dimension = dimensions[node.dimension];\n const ownDistance = metric(point, node.obj);\n const linearPoint = {};\n var bestChild, linearDistance, otherChild, i;\n\n function saveNode(node, distance) {\n bestNodes.push([node, distance]);\n if (bestNodes.size() > maxNodes) {\n bestNodes.pop();\n }\n }\n\n for (i = 0; i < dimensions.length; i += 1) {\n if (i === node.dimension) {\n linearPoint[dimensions[i]] = point[dimensions[i]];\n } else {\n linearPoint[dimensions[i]] = node.obj[dimensions[i]];\n }\n }\n\n linearDistance = metric(linearPoint, node.obj);\n\n if (node.right === null && node.left === null) {\n if (bestNodes.size() < maxNodes || ownDistance < bestNodes.peek()[1]) {\n saveNode(node, ownDistance);\n }\n return;\n }\n\n if (node.right === null) {\n bestChild = node.left;\n } else if (node.left === null) {\n bestChild = node.right;\n } else {\n if (point[dimension] < node.obj[dimension]) {\n bestChild = node.left;\n } else {\n bestChild = node.right;\n }\n }\n\n nearestSearch(bestChild);\n\n if (bestNodes.size() < maxNodes || ownDistance < bestNodes.peek()[1]) {\n saveNode(node, ownDistance);\n }\n\n if (\n bestNodes.size() < maxNodes ||\n Math.abs(linearDistance) < bestNodes.peek()[1]\n ) {\n if (bestChild === node.left) {\n otherChild = node.right;\n } else {\n otherChild = node.left;\n }\n if (otherChild !== null) {\n nearestSearch(otherChild);\n }\n }\n }\n\n if (maxDistance) {\n for (i = 0; i < maxNodes; i += 1) {\n bestNodes.push([null, maxDistance]);\n }\n }\n\n if (this.root) {\n nearestSearch(this.root);\n }\n\n const result = [];\n for (i = 0; i < Math.min(maxNodes, bestNodes.content.length); i += 1) {\n if (bestNodes.content[i][0]) {\n result.push([bestNodes.content[i][0].obj, bestNodes.content[i][1]]);\n }\n }\n return result;\n }\n}\n\nfunction toJSONImpl(src) {\n const dest = new Node(src.obj, src.dimension, null);\n if (src.left) dest.left = toJSONImpl(src.left);\n if (src.right) dest.right = toJSONImpl(src.right);\n return dest;\n}\n\nfunction buildTree(points, depth, parent, dimensions) {\n const dim = depth % dimensions.length;\n\n if (points.length === 0) {\n return null;\n }\n if (points.length === 1) {\n return new Node(points[0], dim, parent);\n }\n\n points.sort((a, b) => a[dimensions[dim]] - b[dimensions[dim]]);\n\n const median = Math.floor(points.length / 2);\n const node = new Node(points[median], dim, parent);\n node.left = buildTree(points.slice(0, median), depth + 1, node, dimensions);\n node.right = buildTree(points.slice(median + 1), depth + 1, node, dimensions);\n\n return node;\n}\n\nfunction restoreParent(root) {\n if (root.left) {\n root.left.parent = root;\n restoreParent(root.left);\n }\n\n if (root.right) {\n root.right.parent = root;\n restoreParent(root.right);\n }\n}\n\n// Binary heap implementation from:\n// http://eloquentjavascript.net/appendix2.html\nclass BinaryHeap {\n constructor(scoreFunction) {\n this.content = [];\n this.scoreFunction = scoreFunction;\n }\n\n push(element) {\n // Add the new element to the end of the array.\n this.content.push(element);\n // Allow it to bubble up.\n this.bubbleUp(this.content.length - 1);\n }\n\n pop() {\n // Store the first element so we can return it later.\n var result = this.content[0];\n // Get the element at the end of the array.\n var end = this.content.pop();\n // If there are any elements left, put the end element at the\n // start, and let it sink down.\n if (this.content.length > 0) {\n this.content[0] = end;\n this.sinkDown(0);\n }\n return result;\n }\n\n peek() {\n return this.content[0];\n }\n\n size() {\n return this.content.length;\n }\n\n bubbleUp(n) {\n // Fetch the element that has to be moved.\n var element = this.content[n];\n // When at 0, an element can not go up any further.\n while (n > 0) {\n // Compute the parent element's index, and fetch it.\n const parentN = Math.floor((n + 1) / 2) - 1;\n const parent = this.content[parentN];\n // Swap the elements if the parent is greater.\n if (this.scoreFunction(element) < this.scoreFunction(parent)) {\n this.content[parentN] = element;\n this.content[n] = parent;\n // Update 'n' to continue at the new position.\n n = parentN;\n } else {\n // Found a parent that is less, no need to move it further.\n break;\n }\n }\n }\n\n sinkDown(n) {\n // Look up the target element and its score.\n var length = this.content.length;\n var element = this.content[n];\n var elemScore = this.scoreFunction(element);\n\n while (true) {\n // Compute the indices of the child elements.\n var child2N = (n + 1) * 2;\n var child1N = child2N - 1;\n // This is used to store the new position of the element,\n // if any.\n var swap = null;\n // If the first child exists (is inside the array)...\n if (child1N < length) {\n // Look it up and compute its score.\n var child1 = this.content[child1N];\n var child1Score = this.scoreFunction(child1);\n // If the score is less than our element's, we need to swap.\n if (child1Score < elemScore) {\n swap = child1N;\n }\n }\n // Do the same checks for the other child.\n if (child2N < length) {\n var child2 = this.content[child2N];\n var child2Score = this.scoreFunction(child2);\n if (child2Score < (swap === null ? elemScore : child1Score)) {\n swap = child2N;\n }\n }\n\n // If the element needs to be moved, swap it, and continue.\n if (swap !== null) {\n this.content[n] = this.content[swap];\n this.content[swap] = element;\n n = swap;\n } else {\n // Otherwise, we are done.\n break;\n }\n }\n }\n}\n","import { euclidean as euclideanDistance } from 'ml-distance-euclidean';\n\nimport KDTree from './KDTree';\n\nexport default class KNN {\n /**\n * @param {Array} dataset\n * @param {Array} labels\n * @param {object} options\n * @param {number} [options.k=numberOfClasses + 1] - Number of neighbors to classify.\n * @param {function} [options.distance=euclideanDistance] - Distance function that takes two parameters.\n */\n constructor(dataset, labels, options = {}) {\n if (dataset === true) {\n const model = labels;\n this.kdTree = new KDTree(model.kdTree, options);\n this.k = model.k;\n this.classes = new Set(model.classes);\n this.isEuclidean = model.isEuclidean;\n return;\n }\n\n const classes = new Set(labels);\n\n const { distance = euclideanDistance, k = classes.size + 1 } = options;\n\n const points = new Array(dataset.length);\n for (var i = 0; i < points.length; ++i) {\n points[i] = dataset[i].slice();\n }\n\n for (i = 0; i < labels.length; ++i) {\n points[i].push(labels[i]);\n }\n\n this.kdTree = new KDTree(points, distance);\n this.k = k;\n this.classes = classes;\n this.isEuclidean = distance === euclideanDistance;\n }\n\n /**\n * Create a new KNN instance with the given model.\n * @param {object} model\n * @param {function} distance=euclideanDistance - distance function must be provided if the model wasn't trained with euclidean distance.\n * @return {KNN}\n */\n static load(model, distance = euclideanDistance) {\n if (model.name !== 'KNN') {\n throw new Error(`invalid model: ${model.name}`);\n }\n if (!model.isEuclidean && distance === euclideanDistance) {\n throw new Error(\n 'a custom distance function was used to create the model. Please provide it again'\n );\n }\n if (model.isEuclidean && distance !== euclideanDistance) {\n throw new Error(\n 'the model was created with the default distance function. Do not load it with another one'\n );\n }\n return new KNN(true, model, distance);\n }\n\n /**\n * Return a JSON containing the kd-tree model.\n * @return {object} JSON KNN model.\n */\n toJSON() {\n return {\n name: 'KNN',\n kdTree: this.kdTree,\n k: this.k,\n classes: Array.from(this.classes),\n isEuclidean: this.isEuclidean\n };\n }\n\n /**\n * Predicts the output given the matrix to predict.\n * @param {Array} dataset\n * @return {Array} predictions\n */\n predict(dataset) {\n if (Array.isArray(dataset)) {\n if (typeof dataset[0] === 'number') {\n return getSinglePrediction(this, dataset);\n } else if (\n Array.isArray(dataset[0]) &&\n typeof dataset[0][0] === 'number'\n ) {\n const predictions = new Array(dataset.length);\n for (var i = 0; i < dataset.length; i++) {\n predictions[i] = getSinglePrediction(this, dataset[i]);\n }\n return predictions;\n }\n }\n throw new TypeError('dataset to predict must be an array or a matrix');\n }\n}\n\nfunction getSinglePrediction(knn, currentCase) {\n var nearestPoints = knn.kdTree.nearest(currentCase, knn.k);\n var pointsPerClass = {};\n var predictedClass = -1;\n var maxPoints = -1;\n var lastElement = nearestPoints[0][0].length - 1;\n\n for (var element of knn.classes) {\n pointsPerClass[element] = 0;\n }\n\n for (var i = 0; i < nearestPoints.length; ++i) {\n var currentClass = nearestPoints[i][0][lastElement];\n var currentPoints = ++pointsPerClass[currentClass];\n if (currentPoints > maxPoints) {\n predictedClass = currentClass;\n maxPoints = currentPoints;\n }\n }\n\n return predictedClass;\n}\n","import Matrix from 'ml-matrix';\n\n/**\n * @private\n * Function that given vector, returns its norm\n * @param {Vector} X\n * @return {number} Norm of the vector\n */\nexport function norm(X) {\n return Math.sqrt(X.clone().apply(pow2array).sum());\n}\n\n/**\n * @private\n * Function that pow 2 each element of a Matrix or a Vector,\n * used in the apply method of the Matrix object\n * @param {number} i - index i.\n * @param {number} j - index j.\n * @return {Matrix} The Matrix object modified at the index i, j.\n * */\nexport function pow2array(i, j) {\n this.set(i, j, this.get(i, j) ** 2);\n}\n\n/**\n * @private\n * Function that normalize the dataset and return the means and\n * standard deviation of each feature.\n * @param {Matrix} dataset\n * @return {object} dataset normalized, means and standard deviations\n */\nexport function featureNormalize(dataset) {\n var means = dataset.mean('column');\n var std = dataset.standardDeviation('column', { mean: means, unbiased: true });\n var result = Matrix.checkMatrix(dataset).subRowVector(means);\n return { result: result.divRowVector(std), means: means, std: std };\n}\n\n/**\n * @private\n * Function that initialize an array of matrices.\n * @param {Array} array\n * @param {boolean} isMatrix\n * @return {Array} array with the matrices initialized.\n */\nexport function initializeMatrices(array, isMatrix) {\n if (isMatrix) {\n for (var i = 0; i < array.length; ++i) {\n for (var j = 0; j < array[i].length; ++j) {\n var elem = array[i][j];\n array[i][j] = elem !== null ? new Matrix(array[i][j]) : undefined;\n }\n }\n } else {\n for (i = 0; i < array.length; ++i) {\n array[i] = new Matrix(array[i]);\n }\n }\n\n return array;\n}\n","import Matrix from 'ml-matrix';\n\nimport * as Utils from './utils';\n\n/**\n * @class PLS\n */\nexport class PLS {\n /**\n * Constructor for Partial Least Squares (PLS)\n * @param {object} options\n * @param {number} [options.latentVectors] - Number of latent vector to get (if the algorithm doesn't find a good model below the tolerance)\n * @param {number} [options.tolerance=1e-5]\n * @param {boolean} [options.scale=true] - rescale dataset using mean.\n * @param {object} model - for load purposes.\n */\n constructor(options, model) {\n if (options === true) {\n this.meanX = model.meanX;\n this.stdDevX = model.stdDevX;\n this.meanY = model.meanY;\n this.stdDevY = model.stdDevY;\n this.PBQ = Matrix.checkMatrix(model.PBQ);\n this.R2X = model.R2X;\n this.scale = model.scale;\n this.scaleMethod = model.scaleMethod;\n this.tolerance = model.tolerance;\n } else {\n var {\n tolerance = 1e-5,\n scale = true,\n } = options;\n this.tolerance = tolerance;\n this.scale = scale;\n this.latentVectors = options.latentVectors;\n }\n }\n\n /**\n * Fits the model with the given data and predictions, in this function is calculated the\n * following outputs:\n *\n * T - Score matrix of X\n * P - Loading matrix of X\n * U - Score matrix of Y\n * Q - Loading matrix of Y\n * B - Matrix of regression coefficient\n * W - Weight matrix of X\n *\n * @param {Matrix|Array} trainingSet\n * @param {Matrix|Array} trainingValues\n */\n train(trainingSet, trainingValues) {\n trainingSet = Matrix.checkMatrix(trainingSet);\n trainingValues = Matrix.checkMatrix(trainingValues);\n\n if (trainingSet.length !== trainingValues.length) {\n throw new RangeError('The number of X rows must be equal to the number of Y rows');\n }\n\n this.meanX = trainingSet.mean('column');\n this.stdDevX = trainingSet.standardDeviation('column', { mean: this.meanX, unbiased: true });\n this.meanY = trainingValues.mean('column');\n this.stdDevY = trainingValues.standardDeviation('column', { mean: this.meanY, unbiased: true });\n\n if (this.scale) {\n trainingSet = trainingSet.clone().subRowVector(this.meanX).divRowVector(this.stdDevX);\n trainingValues = trainingValues.clone().subRowVector(this.meanY).divRowVector(this.stdDevY);\n }\n\n if (this.latentVectors === undefined) {\n this.latentVectors = Math.min(trainingSet.rows - 1, trainingSet.columns);\n }\n\n var rx = trainingSet.rows;\n var cx = trainingSet.columns;\n var ry = trainingValues.rows;\n var cy = trainingValues.columns;\n\n var ssqXcal = trainingSet.clone().mul(trainingSet).sum(); // for the r²\n var sumOfSquaresY = trainingValues.clone().mul(trainingValues).sum();\n\n var tolerance = this.tolerance;\n var n = this.latentVectors;\n var T = Matrix.zeros(rx, n);\n var P = Matrix.zeros(cx, n);\n var U = Matrix.zeros(ry, n);\n var Q = Matrix.zeros(cy, n);\n var B = Matrix.zeros(n, n);\n var W = P.clone();\n var k = 0;\n\n while (Utils.norm(trainingValues) > tolerance && k < n) {\n var transposeX = trainingSet.transpose();\n var transposeY = trainingValues.transpose();\n\n var tIndex = maxSumColIndex(trainingSet.clone().mul(trainingSet));\n var uIndex = maxSumColIndex(trainingValues.clone().mul(trainingValues));\n\n var t1 = trainingSet.getColumnVector(tIndex);\n var u = trainingValues.getColumnVector(uIndex);\n var t = Matrix.zeros(rx, 1);\n\n while (Utils.norm(t1.clone().sub(t)) > tolerance) {\n var w = transposeX.mmul(u);\n w.div(Utils.norm(w));\n t = t1;\n t1 = trainingSet.mmul(w);\n var q = transposeY.mmul(t1);\n q.div(Utils.norm(q));\n u = trainingValues.mmul(q);\n }\n\n t = t1;\n var num = transposeX.mmul(t);\n var den = t.transpose().mmul(t).get(0, 0);\n var p = num.div(den);\n var pnorm = Utils.norm(p);\n p.div(pnorm);\n t.mul(pnorm);\n w.mul(pnorm);\n\n num = u.transpose().mmul(t);\n den = t.transpose().mmul(t).get(0, 0);\n var b = num.div(den).get(0, 0);\n trainingSet.sub(t.mmul(p.transpose()));\n trainingValues.sub(t.clone().mul(b).mmul(q.transpose()));\n\n T.setColumn(k, t);\n P.setColumn(k, p);\n U.setColumn(k, u);\n Q.setColumn(k, q);\n W.setColumn(k, w);\n\n B.set(k, k, b);\n k++;\n }\n\n k--;\n T = T.subMatrix(0, T.rows - 1, 0, k);\n P = P.subMatrix(0, P.rows - 1, 0, k);\n U = U.subMatrix(0, U.rows - 1, 0, k);\n Q = Q.subMatrix(0, Q.rows - 1, 0, k);\n W = W.subMatrix(0, W.rows - 1, 0, k);\n B = B.subMatrix(0, k, 0, k);\n\n // TODO: review of R2Y\n // this.R2Y = t.transpose().mmul(t).mul(q[k][0]*q[k][0]).divS(ssqYcal)[0][0];\n //\n this.ssqYcal = sumOfSquaresY;\n this.E = trainingSet;\n this.F = trainingValues;\n this.T = T;\n this.P = P;\n this.U = U;\n this.Q = Q;\n this.W = W;\n this.B = B;\n this.PBQ = P.mmul(B).mmul(Q.transpose());\n this.R2X = t.transpose().mmul(t).mmul(p.transpose().mmul(p)).div(ssqXcal).get(0, 0);\n }\n\n /**\n * Predicts the behavior of the given dataset.\n * @param {Matrix|Array} dataset - data to be predicted.\n * @return {Matrix} - predictions of each element of the dataset.\n */\n predict(dataset) {\n var X = Matrix.checkMatrix(dataset);\n if (this.scale) {\n X = X.subRowVector(this.meanX).divRowVector(this.stdDevX);\n }\n var Y = X.mmul(this.PBQ);\n Y = Y.mulRowVector(this.stdDevY).addRowVector(this.meanY);\n return Y;\n }\n\n /**\n * Returns the explained variance on training of the PLS model\n * @return {number}\n */\n getExplainedVariance() {\n return this.R2X;\n }\n\n /**\n * Export the current model to JSON.\n * @return {object} - Current model.\n */\n toJSON() {\n return {\n name: 'PLS',\n R2X: this.R2X,\n meanX: this.meanX,\n stdDevX: this.stdDevX,\n meanY: this.meanY,\n stdDevY: this.stdDevY,\n PBQ: this.PBQ,\n tolerance: this.tolerance,\n scale: this.scale,\n };\n }\n\n /**\n * Load a PLS model from a JSON Object\n * @param {object} model\n * @return {PLS} - PLS object from the given model\n */\n static load(model) {\n if (model.name !== 'PLS') {\n throw new RangeError(`Invalid model: ${model.name}`);\n }\n return new PLS(true, model);\n }\n}\n\n/**\n * @private\n * Function that returns the index where the sum of each\n * column vector is maximum.\n * @param {Matrix} data\n * @return {number} index of the maximum\n */\nfunction maxSumColIndex(data) {\n return Matrix.rowVector(data.sum('column')).maxIndex()[0];\n}\n","import { Matrix, SingularValueDecomposition, inverse } from 'ml-matrix';\n\nimport { initializeMatrices } from './utils';\n\n/**\n * @class KOPLS\n */\nexport class KOPLS {\n /**\n * Constructor for Kernel-based Orthogonal Projections to Latent Structures (K-OPLS)\n * @param {object} options\n * @param {number} [options.predictiveComponents] - Number of predictive components to use.\n * @param {number} [options.orthogonalComponents] - Number of Y-Orthogonal components.\n * @param {Kernel} [options.kernel] - Kernel object to apply, see [ml-kernel](https://github.com/mljs/kernel).\n * @param {object} model - for load purposes.\n */\n constructor(options, model) {\n if (options === true) {\n this.trainingSet = new Matrix(model.trainingSet);\n this.YLoadingMat = new Matrix(model.YLoadingMat);\n this.SigmaPow = new Matrix(model.SigmaPow);\n this.YScoreMat = new Matrix(model.YScoreMat);\n this.predScoreMat = initializeMatrices(model.predScoreMat, false);\n this.YOrthLoadingVec = initializeMatrices(model.YOrthLoadingVec, false);\n this.YOrthEigen = model.YOrthEigen;\n this.YOrthScoreMat = initializeMatrices(model.YOrthScoreMat, false);\n this.toNorm = initializeMatrices(model.toNorm, false);\n this.TURegressionCoeff = initializeMatrices(model.TURegressionCoeff, false);\n this.kernelX = initializeMatrices(model.kernelX, true);\n this.kernel = model.kernel;\n this.orthogonalComp = model.orthogonalComp;\n this.predictiveComp = model.predictiveComp;\n } else {\n if (options.predictiveComponents === undefined) {\n throw new RangeError('no predictive components found!');\n }\n if (options.orthogonalComponents === undefined) {\n throw new RangeError('no orthogonal components found!');\n }\n if (options.kernel === undefined) {\n throw new RangeError('no kernel found!');\n }\n\n this.orthogonalComp = options.orthogonalComponents;\n this.predictiveComp = options.predictiveComponents;\n this.kernel = options.kernel;\n }\n }\n\n /**\n * Train the K-OPLS model with the given training set and labels.\n * @param {Matrix|Array} trainingSet\n * @param {Matrix|Array} trainingValues\n */\n train(trainingSet, trainingValues) {\n trainingSet = Matrix.checkMatrix(trainingSet);\n trainingValues = Matrix.checkMatrix(trainingValues);\n\n // to save and compute kernel with the prediction dataset.\n this.trainingSet = trainingSet.clone();\n\n var kernelX = this.kernel.compute(trainingSet);\n\n var Identity = Matrix.eye(kernelX.rows, kernelX.rows, 1);\n var temp = kernelX;\n kernelX = new Array(this.orthogonalComp + 1);\n for (let i = 0; i < this.orthogonalComp + 1; i++) {\n kernelX[i] = new Array(this.orthogonalComp + 1);\n }\n kernelX[0][0] = temp;\n\n var result = new SingularValueDecomposition(trainingValues.transpose().mmul(kernelX[0][0]).mmul(trainingValues), {\n computeLeftSingularVectors: true,\n computeRightSingularVectors: false\n });\n var YLoadingMat = result.leftSingularVectors;\n var Sigma = result.diagonalMatrix;\n\n YLoadingMat = YLoadingMat.subMatrix(0, YLoadingMat.rows - 1, 0, this.predictiveComp - 1);\n Sigma = Sigma.subMatrix(0, this.predictiveComp - 1, 0, this.predictiveComp - 1);\n\n var YScoreMat = trainingValues.mmul(YLoadingMat);\n\n var predScoreMat = new Array(this.orthogonalComp + 1);\n var TURegressionCoeff = new Array(this.orthogonalComp + 1);\n var YOrthScoreMat = new Array(this.orthogonalComp);\n var YOrthLoadingVec = new Array(this.orthogonalComp);\n var YOrthEigen = new Array(this.orthogonalComp);\n var YOrthScoreNorm = new Array(this.orthogonalComp);\n\n var SigmaPow = Matrix.pow(Sigma, -0.5);\n // to avoid errors, check infinity\n SigmaPow.apply(function (i, j) {\n if (this.get(i, j) === Infinity) {\n this.set(i, j, 0);\n }\n });\n\n for (var i = 0; i < this.orthogonalComp; ++i) {\n predScoreMat[i] = kernelX[0][i].transpose().mmul(YScoreMat).mmul(SigmaPow);\n\n var TpiPrime = predScoreMat[i].transpose();\n TURegressionCoeff[i] = inverse(TpiPrime.mmul(predScoreMat[i])).mmul(TpiPrime).mmul(YScoreMat);\n\n result = new SingularValueDecomposition(TpiPrime.mmul(Matrix.sub(kernelX[i][i], predScoreMat[i].mmul(TpiPrime))).mmul(predScoreMat[i]), {\n computeLeftSingularVectors: true,\n computeRightSingularVectors: false\n });\n var CoTemp = result.leftSingularVectors;\n var SoTemp = result.diagonalMatrix;\n\n YOrthLoadingVec[i] = CoTemp.subMatrix(0, CoTemp.rows - 1, 0, 0);\n YOrthEigen[i] = SoTemp.get(0, 0);\n\n YOrthScoreMat[i] = Matrix.sub(kernelX[i][i], predScoreMat[i].mmul(TpiPrime)).mmul(predScoreMat[i]).mmul(YOrthLoadingVec[i]).mul(Math.pow(YOrthEigen[i], -0.5));\n\n var toiPrime = YOrthScoreMat[i].transpose();\n YOrthScoreNorm[i] = Matrix.sqrt(toiPrime.mmul(YOrthScoreMat[i]));\n\n YOrthScoreMat[i] = YOrthScoreMat[i].divRowVector(YOrthScoreNorm[i]);\n\n var ITo = Matrix.sub(Identity, YOrthScoreMat[i].mmul(YOrthScoreMat[i].transpose()));\n\n kernelX[0][i + 1] = kernelX[0][i].mmul(ITo);\n kernelX[i + 1][i + 1] = ITo.mmul(kernelX[i][i]).mmul(ITo);\n }\n\n var lastScoreMat = predScoreMat[this.orthogonalComp] = kernelX[0][this.orthogonalComp].transpose().mmul(YScoreMat).mmul(SigmaPow);\n\n var lastTpPrime = lastScoreMat.transpose();\n TURegressionCoeff[this.orthogonalComp] = inverse(lastTpPrime.mmul(lastScoreMat)).mmul(lastTpPrime).mmul(YScoreMat);\n\n this.YLoadingMat = YLoadingMat;\n this.SigmaPow = SigmaPow;\n this.YScoreMat = YScoreMat;\n this.predScoreMat = predScoreMat;\n this.YOrthLoadingVec = YOrthLoadingVec;\n this.YOrthEigen = YOrthEigen;\n this.YOrthScoreMat = YOrthScoreMat;\n this.toNorm = YOrthScoreNorm;\n this.TURegressionCoeff = TURegressionCoeff;\n this.kernelX = kernelX;\n }\n\n /**\n * Predicts the output given the matrix to predict.\n * @param {Matrix|Array} toPredict\n * @return {{y: Matrix, predScoreMat: Array, predYOrthVectors: Array}} predictions\n */\n predict(toPredict) {\n var KTestTrain = this.kernel.compute(toPredict, this.trainingSet);\n\n var temp = KTestTrain;\n KTestTrain = new Array(this.orthogonalComp + 1);\n for (let i = 0; i < this.orthogonalComp + 1; i++) {\n KTestTrain[i] = new Array(this.orthogonalComp + 1);\n }\n KTestTrain[0][0] = temp;\n\n var YOrthScoreVector = new Array(this.orthogonalComp);\n var predScoreMat = new Array(this.orthogonalComp);\n\n var i;\n for (i = 0; i < this.orthogonalComp; ++i) {\n predScoreMat[i] = KTestTrain[i][0].mmul(this.YScoreMat).mmul(this.SigmaPow);\n\n YOrthScoreVector[i] = Matrix.sub(KTestTrain[i][i], predScoreMat[i].mmul(this.predScoreMat[i].transpose())).mmul(this.predScoreMat[i]).mmul(this.YOrthLoadingVec[i]).mul(Math.pow(this.YOrthEigen[i], -0.5));\n\n YOrthScoreVector[i] = YOrthScoreVector[i].divRowVector(this.toNorm[i]);\n\n var scoreMatPrime = this.YOrthScoreMat[i].transpose();\n KTestTrain[i + 1][0] = Matrix.sub(KTestTrain[i][0], YOrthScoreVector[i].mmul(scoreMatPrime).mmul(this.kernelX[0][i].transpose()));\n\n var p1 = Matrix.sub(KTestTrain[i][0], KTestTrain[i][i].mmul(this.YOrthScoreMat[i]).mmul(scoreMatPrime));\n var p2 = YOrthScoreVector[i].mmul(scoreMatPrime).mmul(this.kernelX[i][i]);\n var p3 = p2.mmul(this.YOrthScoreMat[i]).mmul(scoreMatPrime);\n\n KTestTrain[i + 1][i + 1] = p1.sub(p2).add(p3);\n }\n\n predScoreMat[i] = KTestTrain[i][0].mmul(this.YScoreMat).mmul(this.SigmaPow);\n var prediction = predScoreMat[i].mmul(this.TURegressionCoeff[i]).mmul(this.YLoadingMat.transpose());\n\n return {\n prediction: prediction,\n predScoreMat: predScoreMat,\n predYOrthVectors: YOrthScoreVector\n };\n }\n\n /**\n * Export the current model to JSON.\n * @return {object} - Current model.\n */\n toJSON() {\n return {\n name: 'K-OPLS',\n YLoadingMat: this.YLoadingMat,\n SigmaPow: this.SigmaPow,\n YScoreMat: this.YScoreMat,\n predScoreMat: this.predScoreMat,\n YOrthLoadingVec: this.YOrthLoadingVec,\n YOrthEigen: this.YOrthEigen,\n YOrthScoreMat: this.YOrthScoreMat,\n toNorm: this.toNorm,\n TURegressionCoeff: this.TURegressionCoeff,\n kernelX: this.kernelX,\n trainingSet: this.trainingSet,\n orthogonalComp: this.orthogonalComp,\n predictiveComp: this.predictiveComp\n };\n }\n\n /**\n * Load a K-OPLS with the given model.\n * @param {object} model\n * @param {Kernel} kernel - kernel used on the model, see [ml-kernel](https://github.com/mljs/kernel).\n * @return {KOPLS}\n */\n static load(model, kernel) {\n if (model.name !== 'K-OPLS') {\n throw new RangeError(`Invalid model: ${model.name}`);\n }\n\n if (!kernel) {\n throw new RangeError('You must provide a kernel for the model!');\n }\n\n model.kernel = kernel;\n return new KOPLS(true, model);\n }\n}\n","/**\n * Constructs a confusion matrix\n * @class ConfusionMatrix\n * @example\n * const CM = new ConfusionMatrix([[13, 2], [10, 5]], ['cat', 'dog'])\n * @param {Array>} matrix - The confusion matrix, a 2D Array. Rows represent the actual label and columns\n * the predicted label.\n * @param {Array} labels - Labels of the confusion matrix, a 1D Array\n */\nclass ConfusionMatrix {\n constructor(matrix, labels) {\n if (matrix.length !== matrix[0].length) {\n throw new Error('Confusion matrix must be square');\n }\n if (labels.length !== matrix.length) {\n throw new Error('Confusion matrix and labels should have the same length');\n }\n this.labels = labels;\n this.matrix = matrix;\n }\n\n\n /**\n * Construct confusion matrix from the predicted and actual labels (classes). Be sure to provide the arguments in\n * the correct order!\n * @param {Array} actual - The predicted labels of the classification\n * @param {Array} predicted - The actual labels of the classification. Has to be of same length as\n * predicted.\n * @param {object} [options] - Additional options\n * @param {Array} [options.labels] - The list of labels that should be used. If not provided the distinct set\n * of labels present in predicted and actual is used. Labels are compared using the strict equality operator\n * '==='\n * @return {ConfusionMatrix} - Confusion matrix\n */\n static fromLabels(actual, predicted, options = {}) {\n if (predicted.length !== actual.length) {\n throw new Error('predicted and actual must have the same length');\n }\n let distinctLabels;\n if (options.labels) {\n distinctLabels = new Set(options.labels);\n } else {\n distinctLabels = new Set([...actual, ...predicted]);\n }\n distinctLabels = Array.from(distinctLabels);\n if (options.sort) {\n distinctLabels.sort(options.sort);\n }\n\n // Create confusion matrix and fill with 0's\n const matrix = Array.from({length: distinctLabels.length});\n for (let i = 0; i < matrix.length; i++) {\n matrix[i] = new Array(matrix.length);\n matrix[i].fill(0);\n }\n\n for (let i = 0; i < predicted.length; i++) {\n const actualIdx = distinctLabels.indexOf(actual[i]);\n const predictedIdx = distinctLabels.indexOf(predicted[i]);\n if (actualIdx >= 0 && predictedIdx >= 0) {\n matrix[actualIdx][predictedIdx]++;\n }\n }\n\n return new ConfusionMatrix(matrix, distinctLabels);\n }\n\n /**\n * Get the confusion matrix\n * @return {Array >}\n */\n getMatrix() {\n return this.matrix;\n }\n\n getLabels() {\n return this.labels;\n }\n\n /**\n * Get the total number of samples\n * @return {number}\n */\n getTotalCount() {\n let predicted = 0;\n for (var i = 0; i < this.matrix.length; i++) {\n for (var j = 0; j < this.matrix.length; j++) {\n predicted += this.matrix[i][j];\n }\n }\n return predicted;\n }\n\n /**\n * Get the total number of true predictions\n * @return {number}\n */\n getTrueCount() {\n var count = 0;\n for (var i = 0; i < this.matrix.length; i++) {\n count += this.matrix[i][i];\n }\n return count;\n }\n\n /**\n * Get the total number of false predictions.\n * @return {number}\n */\n getFalseCount() {\n return this.getTotalCount() - this.getTrueCount();\n }\n\n /**\n * Get the number of true positive predictions.\n * @param {any} label - The label that should be considered \"positive\"\n * @return {number}\n */\n getTruePositiveCount(label) {\n const index = this.getIndex(label);\n return this.matrix[index][index];\n }\n\n /**\n * Get the number of true negative predictions\n * @param {any} label - The label that should be considered \"positive\"\n * @return {number}\n */\n getTrueNegativeCount(label) {\n const index = this.getIndex(label);\n var count = 0;\n for (var i = 0; i < this.matrix.length; i++) {\n for (var j = 0; j < this.matrix.length; j++) {\n if (i !== index && j !== index) {\n count += this.matrix[i][j];\n }\n }\n }\n return count;\n }\n\n /**\n * Get the number of false positive predictions.\n * @param {any} label - The label that should be considered \"positive\"\n * @return {number}\n */\n getFalsePositiveCount(label) {\n const index = this.getIndex(label);\n var count = 0;\n for (var i = 0; i < this.matrix.length; i++) {\n if (i !== index) {\n count += this.matrix[i][index];\n }\n }\n return count;\n }\n\n /**\n * Get the number of false negative predictions.\n * @param {any} label - The label that should be considered \"positive\"\n * @return {number}\n */\n getFalseNegativeCount(label) {\n const index = this.getIndex(label);\n var count = 0;\n for (var i = 0; i < this.matrix.length; i++) {\n if (i !== index) {\n count += this.matrix[index][i];\n }\n }\n return count;\n }\n\n /**\n * Get the number of real positive samples.\n * @param {any} label - The label that should be considered \"positive\"\n * @return {number}\n */\n getPositiveCount(label) {\n return this.getTruePositiveCount(label) + this.getFalseNegativeCount(label);\n }\n\n /**\n * Get the number of real negative samples.\n * @param {any} label - The label that should be considered \"positive\"\n * @return {number}\n */\n getNegativeCount(label) {\n return this.getTrueNegativeCount(label) + this.getFalsePositiveCount(label);\n }\n\n /**\n * Get the index in the confusion matrix that corresponds to the given label\n * @param {any} label - The label to search for\n * @throws if the label is not found\n * @return {number}\n */\n getIndex(label) {\n const index = this.labels.indexOf(label);\n if (index === -1) throw new Error('The label does not exist');\n return index;\n }\n\n /**\n * Get the true positive rate a.k.a. sensitivity. Computes the ratio between the number of true positive predictions and the total number of positive samples.\n * {@link https://en.wikipedia.org/wiki/Sensitivity_and_specificity}\n * @param {any} label - The label that should be considered \"positive\"\n * @return {number} - The true positive rate [0-1]\n */\n getTruePositiveRate(label) {\n return this.getTruePositiveCount(label) / this.getPositiveCount(label);\n }\n\n /**\n * Get the true negative rate a.k.a. specificity. Computes the ration between the number of true negative predictions and the total number of negative samples.\n * {@link https://en.wikipedia.org/wiki/Sensitivity_and_specificity}\n * @param {any} label - The label that should be considered \"positive\"\n * @return {number}\n */\n getTrueNegativeRate(label) {\n return this.getTrueNegativeCount(label) / this.getNegativeCount(label);\n }\n\n /**\n * Get the positive predictive value a.k.a. precision. Computes TP / (TP + FP)\n * {@link https://en.wikipedia.org/wiki/Positive_and_negative_predictive_values}\n * @param {any} label - The label that should be considered \"positive\"\n * @return {number}\n */\n getPositivePredictiveValue(label) {\n const TP = this.getTruePositiveCount(label);\n return TP / (TP + this.getFalsePositiveCount(label));\n }\n\n /**\n * Negative predictive value\n * {@link https://en.wikipedia.org/wiki/Positive_and_negative_predictive_values}\n * @param {any} label - The label that should be considered \"positive\"\n * @return {number}\n */\n getNegativePredictiveValue(label) {\n const TN = this.getTrueNegativeCount(label);\n return TN / (TN + this.getFalseNegativeCount(label));\n }\n\n /**\n * False negative rate a.k.a. miss rate.\n * {@link https://en.wikipedia.org/wiki/Type_I_and_type_II_errors#False_positive_and_false_negative_rates}\n * @param {any} label - The label that should be considered \"positive\"\n * @return {number}\n */\n getFalseNegativeRate(label) {\n return 1 - this.getTruePositiveRate(label);\n }\n\n /**\n * False positive rate a.k.a. fall-out rate.\n * {@link https://en.wikipedia.org/wiki/Type_I_and_type_II_errors#False_positive_and_false_negative_rates}\n * @param {any} label - The label that should be considered \"positive\"\n * @return {number}\n */\n getFalsePositiveRate(label) {\n return 1 - this.getTrueNegativeRate(label);\n }\n\n /**\n * False discovery rate (FDR)\n * {@link https://en.wikipedia.org/wiki/False_discovery_rate}\n * @param {any} label - The label that should be considered \"positive\"\n * @return {number}\n */\n getFalseDiscoveryRate(label) {\n const FP = this.getFalsePositiveCount(label);\n return FP / (FP + this.getTruePositiveCount(label));\n }\n\n /**\n * False omission rate (FOR)\n * @param {any} label - The label that should be considered \"positive\"\n * @return {number}\n */\n getFalseOmissionRate(label) {\n const FN = this.getFalseNegativeCount(label);\n return FN / (FN + this.getTruePositiveCount(label));\n }\n\n /**\n * F1 score\n * {@link https://en.wikipedia.org/wiki/F1_score}\n * @param {any} label - The label that should be considered \"positive\"\n * @return {number}\n */\n getF1Score(label) {\n const TP = this.getTruePositiveCount(label);\n return 2 * TP / (2 * TP + this.getFalsePositiveCount(label) + this.getFalseNegativeCount(label));\n }\n\n /**\n * Matthews correlation coefficient (MCC)\n * {@link https://en.wikipedia.org/wiki/Matthews_correlation_coefficient}\n * @param {any} label - The label that should be considered \"positive\"\n * @return {number}\n */\n getMatthewsCorrelationCoefficient(label) {\n const TP = this.getTruePositiveCount(label);\n const TN = this.getTrueNegativeCount(label);\n const FP = this.getFalsePositiveCount(label);\n const FN = this.getFalseNegativeCount(label);\n return (TP * TN - FP * FN) / Math.sqrt((TP + FP) * (TP + FN) * (TN + FP) * (TN + FN));\n }\n\n /**\n * Informedness\n * {@link https://en.wikipedia.org/wiki/Youden%27s_J_statistic}\n * @param {any} label - The label that should be considered \"positive\"\n * @return {number}\n */\n getInformedness(label) {\n return this.getTruePositiveRate(label) + this.getTrueNegativeRate(label) - 1;\n }\n\n /**\n * Markedness\n * @param {any} label - The label that should be considered \"positive\"\n * @return {number}\n */\n getMarkedness(label) {\n return this.getPositivePredictiveValue(label) + this.getNegativePredictiveValue(label) - 1;\n }\n\n /**\n * Get the confusion table.\n * @param {any} label - The label that should be considered \"positive\"\n * @return {Array >} - The 2x2 confusion table. [[TP, FN], [FP, TN]]\n */\n getConfusionTable(label) {\n return [\n [\n this.getTruePositiveCount(label),\n this.getFalseNegativeCount(label)\n ],\n [\n this.getFalsePositiveCount(label),\n this.getTrueNegativeCount(label)\n ]\n ];\n }\n\n /**\n * Get total accuracy.\n * @return {number} - The ratio between the number of true predictions and total number of classifications ([0-1])\n */\n getAccuracy() {\n let correct = 0;\n let incorrect = 0;\n for (var i = 0; i < this.matrix.length; i++) {\n for (var j = 0; j < this.matrix.length; j++) {\n if (i === j) correct += this.matrix[i][j];\n else incorrect += this.matrix[i][j];\n }\n }\n return correct / (correct + incorrect);\n }\n\n\n /**\n * Returns the element in the confusion matrix that corresponds to the given actual and predicted labels.\n * @param {any} actual - The true label\n * @param {any} predicted - The predicted label\n * @return {number} - The element in the confusion matrix\n */\n getCount(actual, predicted) {\n const actualIndex = this.getIndex(actual);\n const predictedIndex = this.getIndex(predicted);\n return this.matrix[actualIndex][predictedIndex];\n }\n\n /**\n * Compute the general prediction accuracy\n * @deprecated Use getAccuracy\n * @return {number} - The prediction accuracy ([0-1]\n */\n get accuracy() {\n return this.getAccuracy();\n }\n\n /**\n * Compute the number of predicted observations\n * @deprecated Use getTotalCount\n * @return {number}\n */\n get total() {\n return this.getTotalCount();\n }\n}\n\nmodule.exports = ConfusionMatrix;\n","'use strict';\nconst defaultOptions = {\n mode: 'index'\n};\n\nmodule.exports = function *(M, N, options) {\n options = Object.assign({}, defaultOptions, options);\n var a = new Array(N);\n var c = new Array(M);\n var b = new Array(N);\n var p = new Array(N + 2);\n var x, y, z;\n\n // init a and b\n for (var i = 0; i < N; i++) {\n a[i] = i;\n if (i < N - M) b[i] = 0;\n else b[i] = 1;\n }\n\n // init c\n for (i = 0; i < M; i++) {\n c[i] = N - M + i;\n }\n\n // init p\n for (i = 0; i < p.length; i++) {\n if (i === 0) p[i] = N + 1;\n else if (i <= N - M) p[i] = 0;\n else if (i <= N) p[i] = i - N + M;\n else p[i] = -2;\n }\n\n function twiddle() {\n var i, j, k;\n j = 1;\n while (p[j] <= 0) {\n j++;\n }\n if (p[j - 1] === 0) {\n for (i = j - 1; i !== 1; i--) {\n p[i] = -1;\n }\n p[j] = 0;\n x = z = 0;\n p[1] = 1;\n y = j - 1;\n } else {\n if (j > 1) {\n p[j - 1] = 0;\n }\n do {\n j++;\n }\n while (p[j] > 0);\n k = j - 1;\n i = j;\n while (p[i] === 0) {\n p[i++] = -1;\n }\n if (p[i] === -1) {\n p[i] = p[k];\n z = p[k] - 1;\n x = i - 1;\n y = k - 1;\n p[k] = -1;\n } else {\n if (i === p[0]) {\n return 0;\n } else {\n p[j] = p[i];\n z = p[i] - 1;\n p[i] = 0;\n x = j - 1;\n y = i - 1;\n }\n }\n }\n return 1;\n }\n\n if (options.mode === 'index') {\n yield c.slice();\n while (twiddle()) {\n c[z] = a[x];\n yield c.slice();\n }\n } else if (options.mode === 'mask') {\n yield b.slice();\n while (twiddle()) {\n b[x] = 1;\n b[y] = 0;\n yield b.slice();\n }\n } else {\n throw new Error('Invalid mode');\n }\n};\n","'use strict';\n\nconst ConfusionMatrix = require('ml-confusion-matrix');\n\nconst CV = {};\nconst combinations = require('ml-combinations');\n\n/**\n * Performs a leave-one-out cross-validation (LOO-CV) of the given samples. In LOO-CV, 1 observation is used as the\n * validation set while the rest is used as the training set. This is repeated once for each observation. LOO-CV is a\n * special case of LPO-CV. @see leavePout\n * @param {function} Classifier - The classifier's constructor to use for the cross validation. Expect ml-classifier\n * api.\n * @param {Array} features - The features for all samples of the data-set\n * @param {Array} labels - The classification class of all samples of the data-set\n * @param {object} classifierOptions - The classifier options with which the classifier should be instantiated.\n * @return {ConfusionMatrix} - The cross-validation confusion matrix\n */\nCV.leaveOneOut = function (Classifier, features, labels, classifierOptions) {\n if (typeof labels === 'function') {\n var callback = labels;\n labels = features;\n features = Classifier;\n return CV.leavePOut(features, labels, 1, callback);\n }\n return CV.leavePOut(Classifier, features, labels, classifierOptions, 1);\n};\n\n\n/**\n * Performs a leave-p-out cross-validation (LPO-CV) of the given samples. In LPO-CV, p observations are used as the\n * validation set while the rest is used as the training set. This is repeated as many times as there are possible\n * ways to combine p observations from the set (unordered without replacement). Be aware that for relatively small\n * data-set size this can require a very large number of training and testing to do!\n * @param {function} Classifier - The classifier's constructor to use for the cross validation. Expect ml-classifier\n * api.\n * @param {Array} features - The features for all samples of the data-set\n * @param {Array} labels - The classification class of all samples of the data-set\n * @param {object} classifierOptions - The classifier options with which the classifier should be instantiated.\n * @param {number} p - The size of the validation sub-samples' set\n * @return {ConfusionMatrix} - The cross-validation confusion matrix\n */\nCV.leavePOut = function (Classifier, features, labels, classifierOptions, p) {\n if (typeof classifierOptions === 'function') {\n var callback = classifierOptions;\n p = labels;\n labels = features;\n features = Classifier;\n }\n check(features, labels);\n const distinct = getDistinct(labels);\n const confusionMatrix = initMatrix(distinct.length, distinct.length);\n\n var N = features.length;\n var gen = combinations(p, N);\n var allIdx = new Array(N);\n for (let i = 0; i < N; i++) {\n allIdx[i] = i;\n }\n for (const testIdx of gen) {\n var trainIdx = allIdx.slice();\n\n for (let i = testIdx.length - 1; i >= 0; i--) {\n trainIdx.splice(testIdx[i], 1);\n }\n\n if (callback) {\n validateWithCallback(features, labels, testIdx, trainIdx, confusionMatrix, distinct, callback);\n } else {\n validate(Classifier, features, labels, classifierOptions, testIdx, trainIdx, confusionMatrix, distinct);\n }\n\n }\n\n return new ConfusionMatrix(confusionMatrix, distinct);\n};\n\n/**\n * Performs k-fold cross-validation (KF-CV). KF-CV separates the data-set into k random equally sized partitions, and\n * uses each as a validation set, with all other partitions used in the training set. Observations left over from if k\n * does not divide the number of observations are left out of the cross-validation process.\n * @param {function} Classifier - The classifier's to use for the cross validation. Expect ml-classifier api.\n * @param {Array} features - The features for all samples of the data-set\n * @param {Array} labels - The classification class of all samples of the data-set\n * @param {object} classifierOptions - The classifier options with which the classifier should be instantiated.\n * @param {number} k - The number of partitions to create\n * @return {ConfusionMatrix} - The cross-validation confusion matrix\n */\nCV.kFold = function (Classifier, features, labels, classifierOptions, k) {\n if (typeof classifierOptions === 'function') {\n var callback = classifierOptions;\n k = labels;\n labels = features;\n features = Classifier;\n }\n check(features, labels);\n const distinct = getDistinct(labels);\n const confusionMatrix = initMatrix(distinct.length, distinct.length);\n var N = features.length;\n var allIdx = new Array(N);\n for (var i = 0; i < N; i++) {\n allIdx[i] = i;\n }\n\n var l = Math.floor(N / k);\n // create random k-folds\n var current = [];\n var folds = [];\n while (allIdx.length) {\n var randi = Math.floor(Math.random() * allIdx.length);\n current.push(allIdx[randi]);\n allIdx.splice(randi, 1);\n if (current.length === l) {\n folds.push(current);\n current = [];\n }\n }\n if (current.length) folds.push(current);\n folds = folds.slice(0, k);\n\n\n for (i = 0; i < folds.length; i++) {\n var testIdx = folds[i];\n var trainIdx = [];\n for (var j = 0; j < folds.length; j++) {\n if (j !== i) trainIdx = trainIdx.concat(folds[j]);\n }\n\n if (callback) {\n validateWithCallback(features, labels, testIdx, trainIdx, confusionMatrix, distinct, callback);\n } else {\n validate(Classifier, features, labels, classifierOptions, testIdx, trainIdx, confusionMatrix, distinct);\n }\n }\n\n return new ConfusionMatrix(confusionMatrix, distinct);\n};\n\nfunction check(features, labels) {\n if (features.length !== labels.length) {\n throw new Error('features and labels should have the same length');\n }\n}\n\nfunction initMatrix(rows, columns) {\n return new Array(rows).fill(0).map(() => new Array(columns).fill(0));\n}\n\nfunction getDistinct(arr) {\n var s = new Set();\n for (let i = 0; i < arr.length; i++) {\n s.add(arr[i]);\n }\n return Array.from(s);\n}\n\nfunction validate(Classifier, features, labels, classifierOptions, testIdx, trainIdx, confusionMatrix, distinct) {\n const {testFeatures, trainFeatures, testLabels, trainLabels} = getTrainTest(features, labels, testIdx, trainIdx);\n\n var classifier;\n if (Classifier.prototype.train) {\n classifier = new Classifier(classifierOptions);\n classifier.train(trainFeatures, trainLabels);\n } else {\n classifier = new Classifier(trainFeatures, trainLabels, classifierOptions);\n }\n\n var predictedLabels = classifier.predict(testFeatures);\n updateConfusionMatrix(confusionMatrix, testLabels, predictedLabels, distinct);\n}\n\nfunction validateWithCallback(features, labels, testIdx, trainIdx, confusionMatrix, distinct, callback) {\n const {testFeatures, trainFeatures, testLabels, trainLabels} = getTrainTest(features, labels, testIdx, trainIdx);\n const predictedLabels = callback(trainFeatures, trainLabels, testFeatures);\n updateConfusionMatrix(confusionMatrix, testLabels, predictedLabels, distinct);\n}\n\nfunction updateConfusionMatrix(confusionMatrix, testLabels, predictedLabels, distinct) {\n\n for (var i = 0; i < predictedLabels.length; i++) {\n const actualIdx = distinct.indexOf(testLabels[i]);\n const predictedIdx = distinct.indexOf(predictedLabels[i]);\n if (actualIdx < 0 || predictedIdx < 0) {\n // eslint-disable-next-line no-console\n console.warn(`ignore unknown predicted label ${predictedLabels[i]}`);\n }\n confusionMatrix[actualIdx][predictedIdx]++;\n }\n}\n\n\nfunction getTrainTest(features, labels, testIdx, trainIdx) {\n return {\n testFeatures: testIdx.map(function (index) {\n return features[index];\n }),\n trainFeatures: trainIdx.map(function (index) {\n return features[index];\n }),\n testLabels: testIdx.map(function (index) {\n return labels[index];\n }),\n trainLabels: trainIdx.map(function (index) {\n return labels[index];\n })\n };\n}\n\nmodule.exports = CV;\n","'use strict';\n\nvar mlMatrix = require('ml-matrix');\n\nfunction logistic(val) {\n return 1 / (1 + Math.exp(-val));\n}\n\nfunction expELU(val, param) {\n return val < 0 ? param * (Math.exp(val) - 1) : val;\n}\n\nfunction softExponential(val, param) {\n if (param < 0) {\n return -Math.log(1 - param * (val + param)) / param;\n }\n if (param > 0) {\n return ((Math.exp(param * val) - 1) / param) + param;\n }\n return val;\n}\n\nfunction softExponentialPrime(val, param) {\n if (param < 0) {\n return 1 / (1 - param * (param + val));\n } else {\n return Math.exp(param * val);\n }\n}\n\nconst ACTIVATION_FUNCTIONS = {\n tanh: {\n activation: Math.tanh,\n derivate: (val) => 1 - (val * val)\n },\n identity: {\n activation: (val) => val,\n derivate: () => 1\n },\n logistic: {\n activation: logistic,\n derivate: (val) => logistic(val) * (1 - logistic(val))\n },\n arctan: {\n activation: Math.atan,\n derivate: (val) => 1 / (val * val + 1)\n },\n softsign: {\n activation: (val) => val / (1 + Math.abs(val)),\n derivate: (val) => 1 / ((1 + Math.abs(val)) * (1 + Math.abs(val)))\n },\n relu: {\n activation: (val) => (val < 0 ? 0 : val),\n derivate: (val) => (val < 0 ? 0 : 1)\n },\n softplus: {\n activation: (val) => Math.log(1 + Math.exp(val)),\n derivate: (val) => 1 / (1 + Math.exp(-val))\n },\n bent: {\n activation: (val) => ((Math.sqrt(val * val + 1) - 1) / 2) + val,\n derivate: (val) => (val / (2 * Math.sqrt(val * val + 1))) + 1\n },\n sinusoid: {\n activation: Math.sin,\n derivate: Math.cos\n },\n sinc: {\n activation: (val) => (val === 0 ? 1 : Math.sin(val) / val),\n derivate: (val) => (val === 0 ? 0 : (Math.cos(val) / val) - (Math.sin(val) / (val * val)))\n },\n gaussian: {\n activation: (val) => Math.exp(-(val * val)),\n derivate: (val) => -2 * val * Math.exp(-(val * val))\n },\n 'parametric-relu': {\n activation: (val, param) => (val < 0 ? param * val : val),\n derivate: (val, param) => (val < 0 ? param : 1)\n },\n 'exponential-elu': {\n activation: expELU,\n derivate: (val, param) => (val < 0 ? expELU(val, param) + param : 1)\n },\n 'soft-exponential': {\n activation: softExponential,\n derivate: softExponentialPrime\n }\n};\n\nclass Layer {\n /**\n * @private\n * Create a new layer with the given options\n * @param {object} options\n * @param {number} [options.inputSize] - Number of conections that enter the neurons.\n * @param {number} [options.outputSize] - Number of conections that leave the neurons.\n * @param {number} [options.regularization] - Regularization parameter.\n * @param {number} [options.epsilon] - Learning rate parameter.\n * @param {string} [options.activation] - Activation function parameter from the FeedForwardNeuralNetwork class.\n * @param {number} [options.activationParam] - Activation parameter if needed.\n */\n constructor(options) {\n this.inputSize = options.inputSize;\n this.outputSize = options.outputSize;\n this.regularization = options.regularization;\n this.epsilon = options.epsilon;\n this.activation = options.activation;\n this.activationParam = options.activationParam;\n\n var selectedFunction = ACTIVATION_FUNCTIONS[options.activation];\n var params = selectedFunction.activation.length;\n\n var actFunction = params > 1 ? (val) => selectedFunction.activation(val, options.activationParam) : selectedFunction.activation;\n var derFunction = params > 1 ? (val) => selectedFunction.derivate(val, options.activationParam) : selectedFunction.derivate;\n\n this.activationFunction = function (i, j) {\n this.set(i, j, actFunction(this.get(i, j)));\n };\n this.derivate = function (i, j) {\n this.set(i, j, derFunction(this.get(i, j)));\n };\n\n if (options.model) {\n // load model\n this.W = mlMatrix.Matrix.checkMatrix(options.W);\n this.b = mlMatrix.Matrix.checkMatrix(options.b);\n } else {\n // default constructor\n this.W = mlMatrix.Matrix.rand(this.inputSize, this.outputSize);\n this.b = mlMatrix.Matrix.zeros(1, this.outputSize);\n\n this.W.apply(function (i, j) {\n this.set(i, j, this.get(i, j) / Math.sqrt(options.inputSize));\n });\n }\n }\n\n /**\n * @private\n * propagate the given input through the current layer.\n * @param {Matrix} X - input.\n * @return {Matrix} output at the current layer.\n */\n forward(X) {\n var z = X.mmul(this.W).addRowVector(this.b);\n z.apply(this.activationFunction);\n this.a = z.clone();\n return z;\n }\n\n /**\n * @private\n * apply backpropagation algorithm at the current layer\n * @param {Matrix} delta - delta values estimated at the following layer.\n * @param {Matrix} a - 'a' values from the following layer.\n * @return {Matrix} the new delta values for the next layer.\n */\n backpropagation(delta, a) {\n this.dW = a.transpose().mmul(delta);\n this.db = mlMatrix.Matrix.rowVector(delta.sum('column'));\n\n var aCopy = a.clone();\n return delta.mmul(this.W.transpose()).mul(aCopy.apply(this.derivate));\n }\n\n /**\n * @private\n * Function that updates the weights at the current layer with the derivatives.\n */\n update() {\n this.dW.add(this.W.clone().mul(this.regularization));\n this.W.add(this.dW.mul(-this.epsilon));\n this.b.add(this.db.mul(-this.epsilon));\n }\n\n /**\n * @private\n * Export the current layer to JSON.\n * @return {object} model\n */\n toJSON() {\n return {\n model: 'Layer',\n inputSize: this.inputSize,\n outputSize: this.outputSize,\n regularization: this.regularization,\n epsilon: this.epsilon,\n activation: this.activation,\n W: this.W,\n b: this.b\n };\n }\n\n /**\n * @private\n * Creates a new Layer with the given model.\n * @param {object} model\n * @return {Layer}\n */\n static load(model) {\n if (model.model !== 'Layer') {\n throw new RangeError('the current model is not a Layer model');\n }\n return new Layer(model);\n }\n}\n\nclass OutputLayer extends Layer {\n constructor(options) {\n super(options);\n\n this.activationFunction = function (i, j) {\n this.set(i, j, Math.exp(this.get(i, j)));\n };\n }\n\n static load(model) {\n if (model.model !== 'Layer') {\n throw new RangeError('the current model is not a Layer model');\n }\n\n return new OutputLayer(model);\n }\n}\n\nclass FeedForwardNeuralNetworks {\n /**\n * Create a new Feedforward neural network model.\n * @class FeedForwardNeuralNetworks\n * @param {object} [options]\n * @param {Array} [options.hiddenLayers=[10]] - Array that contains the sizes of the hidden layers.\n * @param {number} [options.iterations=50] - Number of iterations at the training step.\n * @param {number} [options.learningRate=0.01] - Learning rate of the neural net (also known as epsilon).\n * @param {number} [options.regularization=0.01] - Regularization parameter af the neural net.\n * @param {string} [options.activation='tanh'] - activation function to be used. (options: 'tanh'(default),\n * 'identity', 'logistic', 'arctan', 'softsign', 'relu', 'softplus', 'bent', 'sinusoid', 'sinc', 'gaussian').\n * (single-parametric options: 'parametric-relu', 'exponential-relu', 'soft-exponential').\n * @param {number} [options.activationParam=1] - if the selected activation function needs a parameter.\n */\n constructor(options) {\n options = options || {};\n if (options.model) {\n // load network\n this.hiddenLayers = options.hiddenLayers;\n this.iterations = options.iterations;\n this.learningRate = options.learningRate;\n this.regularization = options.regularization;\n this.dicts = options.dicts;\n this.activation = options.activation;\n this.activationParam = options.activationParam;\n this.model = new Array(options.layers.length);\n\n for (var i = 0; i < this.model.length - 1; ++i) {\n this.model[i] = Layer.load(options.layers[i]);\n }\n this.model[this.model.length - 1] = OutputLayer.load(options.layers[this.model.length - 1]);\n } else {\n // default constructor\n this.hiddenLayers = options.hiddenLayers || [10];\n this.iterations = options.iterations || 50;\n\n this.learningRate = options.learningRate || 0.01;\n this.regularization = options.regularization || 0.01;\n\n this.activation = options.activation || 'tanh';\n this.activationParam = options.activationParam || 1;\n if (!(this.activation in Object.keys(ACTIVATION_FUNCTIONS))) {\n this.activation = 'tanh';\n }\n }\n }\n\n /**\n * @private\n * Function that build and initialize the neural net.\n * @param {number} inputSize - total of features to fit.\n * @param {number} outputSize - total of labels of the prediction set.\n */\n buildNetwork(inputSize, outputSize) {\n var size = 2 + (this.hiddenLayers.length - 1);\n this.model = new Array(size);\n\n // input layer\n this.model[0] = new Layer({\n inputSize: inputSize,\n outputSize: this.hiddenLayers[0],\n activation: this.activation,\n activationParam: this.activationParam,\n regularization: this.regularization,\n epsilon: this.learningRate\n });\n\n // hidden layers\n for (var i = 1; i < this.hiddenLayers.length; ++i) {\n this.model[i] = new Layer({\n inputSize: this.hiddenLayers[i - 1],\n outputSize: this.hiddenLayers[i],\n activation: this.activation,\n activationParam: this.activationParam,\n regularization: this.regularization,\n epsilon: this.learningRate\n });\n }\n\n // output layer\n this.model[size - 1] = new OutputLayer({\n inputSize: this.hiddenLayers[this.hiddenLayers.length - 1],\n outputSize: outputSize,\n activation: this.activation,\n activationParam: this.activationParam,\n regularization: this.regularization,\n epsilon: this.learningRate\n });\n }\n\n /**\n * Train the neural net with the given features and labels.\n * @param {Matrix|Array} features\n * @param {Matrix|Array} labels\n */\n train(features, labels) {\n features = mlMatrix.Matrix.checkMatrix(features);\n this.dicts = dictOutputs(labels);\n\n var inputSize = features.columns;\n var outputSize = Object.keys(this.dicts.inputs).length;\n\n if (!this.model) {\n this.buildNetwork(inputSize, outputSize);\n }\n\n for (var i = 0; i < this.iterations; ++i) {\n var probabilities = this.propagate(features);\n this.backpropagation(features, labels, probabilities);\n }\n }\n\n /**\n * @private\n * Propagate the input(training set) and retrives the probabilities of each class.\n * @param {Matrix} X\n * @return {Matrix} probabilities of each class.\n */\n propagate(X) {\n var input = X;\n for (var i = 0; i < this.model.length; ++i) {\n input = this.model[i].forward(input);\n }\n\n // get probabilities\n return input.divColumnVector(input.sum('row'));\n }\n\n /**\n * @private\n * Function that applies the backpropagation algorithm on each layer of the network\n * in order to fit the features and labels.\n * @param {Matrix} features\n * @param {Array} labels\n * @param {Matrix} probabilities - probabilities of each class of the feature set.\n */\n backpropagation(features, labels, probabilities) {\n for (var i = 0; i < probabilities.rows; ++i) {\n probabilities.set(i, this.dicts.inputs[labels[i]], probabilities.get(i, this.dicts.inputs[labels[i]]) - 1);\n }\n\n // remember, the last delta doesn't matter\n var delta = probabilities;\n for (i = this.model.length - 1; i >= 0; --i) {\n var a = i > 0 ? this.model[i - 1].a : features;\n delta = this.model[i].backpropagation(delta, a);\n }\n\n for (i = 0; i < this.model.length; ++i) {\n this.model[i].update();\n }\n }\n\n /**\n * Predict the output given the feature set.\n * @param {Array|Matrix} features\n * @return {Array}\n */\n predict(features) {\n features = mlMatrix.Matrix.checkMatrix(features);\n var outputs = new Array(features.rows);\n var probabilities = this.propagate(features);\n for (var i = 0; i < features.rows; ++i) {\n outputs[i] = this.dicts.outputs[probabilities.maxRowIndex(i)[1]];\n }\n\n return outputs;\n }\n\n /**\n * Export the current model to JSON.\n * @return {object} model\n */\n toJSON() {\n var model = {\n model: 'FNN',\n hiddenLayers: this.hiddenLayers,\n iterations: this.iterations,\n learningRate: this.learningRate,\n regularization: this.regularization,\n activation: this.activation,\n activationParam: this.activationParam,\n dicts: this.dicts,\n layers: new Array(this.model.length)\n };\n\n for (var i = 0; i < this.model.length; ++i) {\n model.layers[i] = this.model[i].toJSON();\n }\n\n return model;\n }\n\n /**\n * Load a Feedforward Neural Network with the current model.\n * @param {object} model\n * @return {FeedForwardNeuralNetworks}\n */\n static load(model) {\n if (model.model !== 'FNN') {\n throw new RangeError('the current model is not a feed forward network');\n }\n\n return new FeedForwardNeuralNetworks(model);\n }\n}\n\n/**\n * @private\n * Method that given an array of labels(predictions), returns two dictionaries, one to transform from labels to\n * numbers and other in the reverse way\n * @param {Array} array\n * @return {object}\n */\nfunction dictOutputs(array) {\n var inputs = {};\n var outputs = {};\n var index = 0;\n for (var i = 0; i < array.length; i += 1) {\n if (inputs[array[i]] === undefined) {\n inputs[array[i]] = index;\n outputs[index] = array[i];\n index++;\n }\n }\n\n return {\n inputs: inputs,\n outputs: outputs\n };\n}\n\nmodule.exports = FeedForwardNeuralNetworks;\n","function NodeSquare(x, y, weights, som) {\n this.x = x;\n this.y = y;\n this.weights = weights;\n this.som = som;\n this.neighbors = {};\n}\n\nNodeSquare.prototype.adjustWeights = function adjustWeights(target, learningRate, influence) {\n for (var i = 0, ii = this.weights.length; i < ii; i++) {\n this.weights[i] += learningRate * influence * (target[i] - this.weights[i]);\n }\n};\n\nNodeSquare.prototype.getDistance = function getDistance(otherNode) {\n return Math.max(Math.abs(this.x - otherNode.x), Math.abs(this.y - otherNode.y));\n};\n\nNodeSquare.prototype.getDistanceTorus = function getDistanceTorus(otherNode) {\n var distX = Math.abs(this.x - otherNode.x),\n distY = Math.abs(this.y - otherNode.y);\n return Math.max(Math.min(distX, this.som.gridDim.x - distX), Math.min(distY, this.som.gridDim.y - distY));\n};\n\nNodeSquare.prototype.getNeighbors = function getNeighbors(xy) {\n if (!this.neighbors[xy]) {\n this.neighbors[xy] = new Array(2);\n\n // left or bottom neighbor\n var v;\n if (this[xy] > 0) {\n v = this[xy] - 1;\n } else if (this.som.torus) {\n v = this.som.gridDim[xy] - 1\n }\n if (typeof v !== 'undefined') {\n var x, y;\n if (xy === 'x') {\n x = v;\n y = this.y;\n } else {\n x = this.x;\n y = v;\n }\n this.neighbors[xy][0] = this.som.nodes[x][y];\n }\n\n // top or right neighbor\n var w;\n if (this[xy] < (this.som.gridDim[xy] - 1)) {\n w = this[xy] + 1;\n } else if (this.som.torus) {\n w = 0;\n }\n if (typeof w !== 'undefined') {\n if (xy === 'x') {\n x = w;\n y = this.y;\n } else {\n x = this.x;\n y = w;\n }\n this.neighbors[xy][1] = this.som.nodes[x][y];\n }\n }\n return this.neighbors[xy];\n};\n\nNodeSquare.prototype.getPos = function getPos(xy, element) {\n var neighbors = this.getNeighbors(xy),\n distance = this.som.distance,\n bestNeighbor,\n direction;\n if(neighbors[0]) {\n if (neighbors[1]) {\n var dist1 = distance(element, neighbors[0].weights),\n dist2 = distance(element, neighbors[1].weights);\n if(dist1 < dist2) {\n bestNeighbor = neighbors[0];\n direction = -1;\n } else {\n bestNeighbor = neighbors[1];\n direction = 1;\n }\n } else {\n bestNeighbor = neighbors[0];\n direction = -1;\n }\n } else {\n bestNeighbor = neighbors[1];\n direction = 1;\n }\n var simA = 1 - distance(element, this.weights),\n simB = 1 - distance(element, bestNeighbor.weights);\n var factor = ((simA - simB) / (2 - simA - simB));\n return 0.5 + 0.5 * factor * direction;\n};\n\nNodeSquare.prototype.getPosition = function getPosition(element) {\n return [\n this.getPos('x', element),\n this.getPos('y', element)\n ];\n};\n\nmodule.exports = NodeSquare;","var NodeSquare = require('./node-square');\n\nfunction NodeHexagonal(x, y, weights, som) {\n\n NodeSquare.call(this, x, y, weights, som);\n\n this.hX = x - Math.floor(y / 2);\n this.z = 0 - this.hX - y;\n\n}\n\nNodeHexagonal.prototype = new NodeSquare;\nNodeHexagonal.prototype.constructor = NodeHexagonal;\n\nNodeHexagonal.prototype.getDistance = function getDistanceHexagonal(otherNode) {\n return Math.max(Math.abs(this.hX - otherNode.hX), Math.abs(this.y - otherNode.y), Math.abs(this.z - otherNode.z));\n};\n\nNodeHexagonal.prototype.getDistanceTorus = function getDistanceTorus(otherNode) {\n var distX = Math.abs(this.hX - otherNode.hX),\n distY = Math.abs(this.y - otherNode.y),\n distZ = Math.abs(this.z - otherNode.z);\n return Math.max(Math.min(distX, this.som.gridDim.x - distX), Math.min(distY, this.som.gridDim.y - distY), Math.min(distZ, this.som.gridDim.z - distZ));\n};\n\nNodeHexagonal.prototype.getPosition = function getPosition() {\n throw new Error('Unimplemented : cannot get position of the points for hexagonal grid');\n};\n\nmodule.exports = NodeHexagonal;","'use strict';\n\nvar NodeSquare = require('./node-square'),\n NodeHexagonal = require('./node-hexagonal');\n\nvar defaultOptions = {\n fields: 3,\n randomizer: Math.random,\n distance: squareEuclidean,\n iterations: 10,\n learningRate: 0.1,\n gridType: 'rect',\n torus: true,\n method: 'random'\n};\n\nfunction SOM(x, y, options, reload) {\n\n this.x = x;\n this.y = y;\n\n options = options || {};\n this.options = {};\n for (var i in defaultOptions) {\n if (options.hasOwnProperty(i)) {\n this.options[i] = options[i];\n } else {\n this.options[i] = defaultOptions[i];\n }\n }\n\n if (typeof this.options.fields === 'number') {\n this.numWeights = this.options.fields;\n } else if (Array.isArray(this.options.fields)) {\n this.numWeights = this.options.fields.length;\n var converters = getConverters(this.options.fields);\n this.extractor = converters.extractor;\n this.creator = converters.creator;\n } else {\n throw new Error('Invalid fields definition');\n }\n\n if (this.options.gridType === 'rect') {\n this.nodeType = NodeSquare;\n this.gridDim = {\n x: x,\n y: y\n };\n } else {\n this.nodeType = NodeHexagonal;\n var hx = this.x - Math.floor(this.y / 2);\n this.gridDim = {\n x: hx,\n y: this.y,\n z: -(0 - hx - this.y)\n };\n }\n\n this.torus = this.options.torus;\n this.distanceMethod = this.torus ? 'getDistanceTorus' : 'getDistance';\n\n this.distance = this.options.distance;\n\n this.maxDistance = getMaxDistance(this.distance, this.numWeights);\n\n if (reload === true) { // For model loading\n this.done = true;\n return;\n }\n if (!(x > 0 && y > 0)) {\n throw new Error('x and y must be positive');\n }\n\n this.times = {\n findBMU: 0,\n adjust: 0\n };\n\n this.randomizer = this.options.randomizer;\n\n this.iterationCount = 0;\n this.iterations = this.options.iterations;\n\n this.startLearningRate = this.learningRate = this.options.learningRate;\n\n this.mapRadius = Math.floor(Math.max(x, y) / 2);\n\n this.algorithmMethod = this.options.method;\n\n this._initNodes();\n\n this.done = false;\n}\n\nSOM.load = function loadModel(model, distance) {\n if (model.name === 'SOM') {\n var x = model.data.length,\n y = model.data[0].length;\n if (distance) {\n model.options.distance = distance;\n } else if (model.options.distance) {\n model.options.distance = eval('(' + model.options.distance + ')');\n }\n var som = new SOM(x, y, model.options, true);\n som.nodes = new Array(x);\n for (var i = 0; i < x; i++) {\n som.nodes[i] = new Array(y);\n for (var j = 0; j < y; j++) {\n som.nodes[i][j] = new som.nodeType(i, j, model.data[i][j], som);\n }\n }\n return som;\n } else {\n throw new Error('expecting a SOM model');\n }\n};\n\nSOM.prototype.export = function exportModel(includeDistance) {\n if (!this.done) {\n throw new Error('model is not ready yet');\n }\n var model = {\n name: 'SOM'\n };\n model.options = {\n fields: this.options.fields,\n gridType: this.options.gridType,\n torus: this.options.torus\n };\n model.data = new Array(this.x);\n for (var i = 0; i < this.x; i++) {\n model.data[i] = new Array(this.y);\n for (var j = 0; j < this.y; j++) {\n model.data[i][j] = this.nodes[i][j].weights;\n }\n }\n if (includeDistance) {\n model.options.distance = this.distance.toString();\n }\n return model;\n};\n\nSOM.prototype._initNodes = function initNodes() {\n var now = Date.now(),\n i, j, k;\n this.nodes = new Array(this.x);\n for (i = 0; i < this.x; i++) {\n this.nodes[i] = new Array(this.y);\n for (j = 0; j < this.y; j++) {\n var weights = new Array(this.numWeights);\n for (k = 0; k < this.numWeights; k++) {\n weights[k] = this.randomizer();\n }\n this.nodes[i][j] = new this.nodeType(i, j, weights, this);\n }\n }\n this.times.initNodes = Date.now() - now;\n};\n\nSOM.prototype.setTraining = function setTraining(trainingSet) {\n if (this.trainingSet) {\n throw new Error('training set has already been set');\n }\n var now = Date.now();\n var convertedSet = trainingSet;\n var i, l = trainingSet.length;\n if (this.extractor) {\n convertedSet = new Array(l);\n for (i = 0; i < l; i++) {\n convertedSet[i] = this.extractor(trainingSet[i]);\n }\n }\n this.numIterations = this.iterations * l;\n\n if (this.algorithmMethod === 'random') {\n this.timeConstant = this.numIterations / Math.log(this.mapRadius);\n } else {\n this.timeConstant = l / Math.log(this.mapRadius);\n }\n this.trainingSet = convertedSet;\n this.times.setTraining = Date.now() - now;\n};\n\nSOM.prototype.trainOne = function trainOne() {\n if (this.done) {\n\n return false;\n\n } else if (this.numIterations-- > 0) {\n\n var neighbourhoodRadius,\n trainingValue,\n trainingSetFactor;\n\n if (this.algorithmMethod === 'random') { // Pick a random value of the training set at each step\n neighbourhoodRadius = this.mapRadius * Math.exp(-this.iterationCount / this.timeConstant);\n trainingValue = getRandomValue(this.trainingSet, this.randomizer);\n this._adjust(trainingValue, neighbourhoodRadius);\n this.learningRate = this.startLearningRate * Math.exp(-this.iterationCount / this.numIterations);\n } else { // Get next input vector\n trainingSetFactor = -Math.floor(this.iterationCount / this.trainingSet.length);\n neighbourhoodRadius = this.mapRadius * Math.exp(trainingSetFactor / this.timeConstant);\n trainingValue = this.trainingSet[this.iterationCount % this.trainingSet.length];\n this._adjust(trainingValue, neighbourhoodRadius);\n if (((this.iterationCount + 1) % this.trainingSet.length) === 0) {\n this.learningRate = this.startLearningRate * Math.exp(trainingSetFactor / Math.floor(this.numIterations / this.trainingSet.length));\n }\n }\n\n this.iterationCount++;\n\n return true;\n\n } else {\n\n this.done = true;\n return false;\n\n }\n};\n\nSOM.prototype._adjust = function adjust(trainingValue, neighbourhoodRadius) {\n var now = Date.now(),\n x, y, dist, influence;\n\n var bmu = this._findBestMatchingUnit(trainingValue);\n\n var now2 = Date.now();\n this.times.findBMU += now2 - now;\n\n var radiusLimit = Math.floor(neighbourhoodRadius);\n var xMin = bmu.x - radiusLimit,\n xMax = bmu.x + radiusLimit,\n yMin = bmu.y - radiusLimit,\n yMax = bmu.y + radiusLimit;\n\n for (x = xMin; x <= xMax; x++) {\n var theX = x;\n if (x < 0) {\n theX += this.x;\n } else if (x >= this.x) {\n theX -= this.x;\n }\n for (y = yMin; y <= yMax; y++) {\n var theY = y;\n if (y < 0) {\n theY += this.y;\n } else if (y >= this.y) {\n theY -= this.y;\n }\n\n dist = bmu[this.distanceMethod](this.nodes[theX][theY]);\n\n if (dist < neighbourhoodRadius) {\n influence = Math.exp(-dist / (2 * neighbourhoodRadius));\n this.nodes[theX][theY].adjustWeights(trainingValue, this.learningRate, influence);\n }\n\n }\n }\n\n this.times.adjust += (Date.now() - now2);\n\n};\n\nSOM.prototype.train = function train(trainingSet) {\n if (!this.done) {\n this.setTraining(trainingSet);\n while (this.trainOne()) {\n }\n }\n};\n\nSOM.prototype.getConvertedNodes = function getConvertedNodes() {\n var result = new Array(this.x);\n for (var i = 0; i < this.x; i++) {\n result[i] = new Array(this.y);\n for (var j = 0; j < this.y; j++) {\n var node = this.nodes[i][j];\n result[i][j] = this.creator ? this.creator(node.weights) : node.weights;\n }\n }\n return result;\n};\n\nSOM.prototype._findBestMatchingUnit = function findBestMatchingUnit(candidate) {\n\n var bmu,\n lowest = Infinity,\n dist;\n\n for (var i = 0; i < this.x; i++) {\n for (var j = 0; j < this.y; j++) {\n dist = this.distance(this.nodes[i][j].weights, candidate);\n if (dist < lowest) {\n lowest = dist;\n bmu = this.nodes[i][j];\n }\n }\n }\n\n return bmu;\n\n};\n\nSOM.prototype.predict = function predict(data, computePosition) {\n if (typeof data === 'boolean') {\n computePosition = data;\n data = null;\n }\n if (!data) {\n data = this.trainingSet;\n }\n if (Array.isArray(data) && (Array.isArray(data[0]) || (typeof data[0] === 'object'))) { // predict a dataset\n var self = this;\n return data.map(function (element) {\n return self._predict(element, computePosition);\n });\n } else { // predict a single element\n return this._predict(data, computePosition);\n }\n};\n\nSOM.prototype._predict = function _predict(element, computePosition) {\n if (!Array.isArray(element)) {\n element = this.extractor(element);\n }\n var bmu = this._findBestMatchingUnit(element);\n var result = [bmu.x, bmu.y];\n if (computePosition) {\n result[2] = bmu.getPosition(element);\n }\n return result;\n};\n\n// As seen in http://www.scholarpedia.org/article/Kohonen_network\nSOM.prototype.getQuantizationError = function getQuantizationError() {\n var fit = this.getFit(),\n l = fit.length,\n sum = 0;\n for (var i = 0; i < l; i++) {\n sum += fit[i];\n }\n return sum / l;\n};\n\nSOM.prototype.getFit = function getFit(dataset) {\n if (!dataset) {\n dataset = this.trainingSet;\n }\n var l = dataset.length,\n bmu,\n result = new Array(l);\n for (var i = 0; i < l; i++) {\n bmu = this._findBestMatchingUnit(dataset[i]);\n result[i] = Math.sqrt(this.distance(dataset[i], bmu.weights));\n }\n return result;\n};\n\nfunction getConverters(fields) {\n var l = fields.length,\n normalizers = new Array(l),\n denormalizers = new Array(l);\n for (var i = 0; i < l; i++) {\n normalizers[i] = getNormalizer(fields[i].range);\n denormalizers[i] = getDenormalizer(fields[i].range);\n }\n return {\n extractor: function extractor(value) {\n var result = new Array(l);\n for (var i = 0; i < l; i++) {\n result[i] = normalizers[i](value[fields[i].name]);\n }\n return result;\n },\n creator: function creator(value) {\n var result = {};\n for (var i = 0; i < l; i++) {\n result[fields[i].name] = denormalizers[i](value[i]);\n }\n return result;\n }\n };\n}\n\nfunction getNormalizer(minMax) {\n return function normalizer(value) {\n return (value - minMax[0]) / (minMax[1] - minMax[0]);\n };\n}\n\nfunction getDenormalizer(minMax) {\n return function denormalizer(value) {\n return (minMax[0] + value * (minMax[1] - minMax[0]));\n };\n}\n\nfunction squareEuclidean(a, b) {\n var d = 0;\n for (var i = 0, ii = a.length; i < ii; i++) {\n d += (a[i] - b[i]) * (a[i] - b[i]);\n }\n return d;\n}\n\nfunction getRandomValue(arr, randomizer) {\n return arr[Math.floor(randomizer() * arr.length)];\n}\n\nfunction getMaxDistance(distance, numWeights) {\n var zero = new Array(numWeights),\n one = new Array(numWeights);\n for (var i = 0; i < numWeights; i++) {\n zero[i] = 0;\n one[i] = 1;\n }\n return distance(zero, one);\n}\n\nmodule.exports = SOM;","export default function maybeToPrecision(value, digits) {\n if (value < 0) {\n value = 0 - value;\n if (typeof digits === 'number') {\n return `- ${value.toPrecision(digits)}`;\n } else {\n return `- ${value.toString()}`;\n }\n } else {\n if (typeof digits === 'number') {\n return value.toPrecision(digits);\n } else {\n return value.toString();\n }\n }\n}\n","export default function checkArraySize(x, y) {\n if (!Array.isArray(x) || !Array.isArray(y)) {\n throw new TypeError('x and y must be arrays');\n }\n if (x.length !== y.length) {\n throw new RangeError('x and y arrays must have the same length');\n }\n}\n","export { default as maybeToPrecision } from './maybeToPrecision';\nexport { default as checkArrayLength } from './checkArrayLength';\n\nexport default class BaseRegression {\n constructor() {\n if (new.target === BaseRegression) {\n throw new Error('BaseRegression must be subclassed');\n }\n }\n\n predict(x) {\n if (typeof x === 'number') {\n return this._predict(x);\n } else if (Array.isArray(x)) {\n const y = [];\n for (let i = 0; i < x.length; i++) {\n y.push(this._predict(x[i]));\n }\n return y;\n } else {\n throw new TypeError('x must be a number or array');\n }\n }\n\n _predict() {\n throw new Error('_predict must be implemented');\n }\n\n train() {\n // Do nothing for this package\n }\n\n toString() {\n return '';\n }\n\n toLaTeX() {\n return '';\n }\n\n /**\n * Return the correlation coefficient of determination (r) and chi-square.\n * @param {Array} x\n * @param {Array} y\n * @return {object}\n */\n score(x, y) {\n if (!Array.isArray(x) || !Array.isArray(y) || x.length !== y.length) {\n throw new Error('x and y must be arrays of the same length');\n }\n\n const n = x.length;\n const y2 = new Array(n);\n for (let i = 0; i < n; i++) {\n y2[i] = this._predict(x[i]);\n }\n\n let xSum = 0;\n let ySum = 0;\n let chi2 = 0;\n let rmsd = 0;\n let xSquared = 0;\n let ySquared = 0;\n let xY = 0;\n for (let i = 0; i < n; i++) {\n xSum += y2[i];\n ySum += y[i];\n xSquared += y2[i] * y2[i];\n ySquared += y[i] * y[i];\n xY += y2[i] * y[i];\n if (y[i] !== 0) {\n chi2 += ((y[i] - y2[i]) * (y[i] - y2[i])) / y[i];\n }\n rmsd += (y[i] - y2[i]) * (y[i] - y2[i]);\n }\n\n const r =\n (n * xY - xSum * ySum) /\n Math.sqrt((n * xSquared - xSum * xSum) * (n * ySquared - ySum * ySum));\n\n return {\n r: r,\n r2: r * r,\n chi2: chi2,\n rmsd: Math.sqrt(rmsd / n)\n };\n }\n}\n","import BaseRegression, {\n checkArrayLength,\n maybeToPrecision\n} from 'ml-regression-base';\nimport { Matrix, MatrixTransposeView, solve } from 'ml-matrix';\n\nexport default class PolynomialRegression extends BaseRegression {\n constructor(x, y, degree) {\n super();\n if (x === true) {\n this.degree = y.degree;\n this.powers = y.powers;\n this.coefficients = y.coefficients;\n } else {\n checkArrayLength(x, y);\n regress(this, x, y, degree);\n }\n }\n\n _predict(x) {\n let y = 0;\n for (let k = 0; k < this.powers.length; k++) {\n y += this.coefficients[k] * Math.pow(x, this.powers[k]);\n }\n return y;\n }\n\n toJSON() {\n return {\n name: 'polynomialRegression',\n degree: this.degree,\n powers: this.powers,\n coefficients: this.coefficients\n };\n }\n\n toString(precision) {\n return this._toFormula(precision, false);\n }\n\n toLaTeX(precision) {\n return this._toFormula(precision, true);\n }\n\n _toFormula(precision, isLaTeX) {\n let sup = '^';\n let closeSup = '';\n let times = ' * ';\n if (isLaTeX) {\n sup = '^{';\n closeSup = '}';\n times = '';\n }\n\n let fn = '';\n let str = '';\n for (let k = 0; k < this.coefficients.length; k++) {\n str = '';\n if (this.coefficients[k] !== 0) {\n if (this.powers[k] === 0) {\n str = maybeToPrecision(this.coefficients[k], precision);\n } else {\n if (this.powers[k] === 1) {\n str =\n `${maybeToPrecision(this.coefficients[k], precision) + times}x`;\n } else {\n str =\n `${maybeToPrecision(this.coefficients[k], precision) +\n times\n }x${\n sup\n }${this.powers[k]\n }${closeSup}`;\n }\n }\n\n if (this.coefficients[k] > 0 && k !== this.coefficients.length - 1) {\n str = ` + ${str}`;\n } else if (k !== this.coefficients.length - 1) {\n str = ` ${str}`;\n }\n }\n fn = str + fn;\n }\n if (fn.charAt(0) === '+') {\n fn = fn.slice(1);\n }\n\n return `f(x) = ${fn}`;\n }\n\n static load(json) {\n if (json.name !== 'polynomialRegression') {\n throw new TypeError('not a polynomial regression model');\n }\n return new PolynomialRegression(true, json);\n }\n}\n\nfunction regress(pr, x, y, degree) {\n const n = x.length;\n let powers;\n if (Array.isArray(degree)) {\n powers = degree;\n degree = powers.length;\n } else {\n degree++;\n powers = new Array(degree);\n for (let k = 0; k < degree; k++) {\n powers[k] = k;\n }\n }\n const F = new Matrix(n, degree);\n const Y = new Matrix([y]);\n for (let k = 0; k < degree; k++) {\n for (let i = 0; i < n; i++) {\n if (powers[k] === 0) {\n F.set(i, k, 1);\n } else {\n F.set(i, k, Math.pow(x[i], powers[k]));\n }\n }\n }\n\n const FT = new MatrixTransposeView(F);\n const A = FT.mmul(F);\n const B = FT.mmul(new MatrixTransposeView(Y));\n\n pr.degree = degree - 1;\n pr.powers = powers;\n pr.coefficients = solve(A, B).to1DArray();\n}\n","import BaseRegression, {\n checkArrayLength,\n maybeToPrecision\n} from 'ml-regression-base';\n\nexport default class SimpleLinearRegression extends BaseRegression {\n constructor(x, y) {\n super();\n if (x === true) {\n this.slope = y.slope;\n this.intercept = y.intercept;\n this.coefficients = [y.intercept, y.slope];\n } else {\n checkArrayLength(x, y);\n regress(this, x, y);\n }\n }\n\n toJSON() {\n return {\n name: 'simpleLinearRegression',\n slope: this.slope,\n intercept: this.intercept\n };\n }\n\n _predict(x) {\n return this.slope * x + this.intercept;\n }\n\n computeX(y) {\n return (y - this.intercept) / this.slope;\n }\n\n toString(precision) {\n let result = 'f(x) = ';\n if (this.slope !== 0) {\n const xFactor = maybeToPrecision(this.slope, precision);\n result += `${xFactor === '1' ? '' : `${xFactor} * `}x`;\n if (this.intercept !== 0) {\n const absIntercept = Math.abs(this.intercept);\n const operator = absIntercept === this.intercept ? '+' : '-';\n result += ` ${operator} ${maybeToPrecision(absIntercept, precision)}`;\n }\n } else {\n result += maybeToPrecision(this.intercept, precision);\n }\n return result;\n }\n\n toLaTeX(precision) {\n return this.toString(precision);\n }\n\n static load(json) {\n if (json.name !== 'simpleLinearRegression') {\n throw new TypeError('not a SLR model');\n }\n return new SimpleLinearRegression(true, json);\n }\n}\n\nfunction regress(slr, x, y) {\n const n = x.length;\n let xSum = 0;\n let ySum = 0;\n\n let xSquared = 0;\n let xY = 0;\n\n for (let i = 0; i < n; i++) {\n xSum += x[i];\n ySum += y[i];\n xSquared += x[i] * x[i];\n xY += x[i] * y[i];\n }\n\n const numerator = n * xY - xSum * ySum;\n slr.slope = numerator / (n * xSquared - xSum * xSum);\n slr.intercept = (1 / n) * ySum - slr.slope * (1 / n) * xSum;\n slr.coefficients = [slr.intercept, slr.slope];\n}\n","import BaseRegression, {\n checkArrayLength,\n maybeToPrecision\n} from 'ml-regression-base';\nimport SimpleLinearRegression from 'ml-regression-simple-linear';\n\nexport default class ExponentialRegression extends BaseRegression {\n constructor(x, y) {\n super();\n if (x === true) {\n this.A = y.A;\n this.B = y.B;\n } else {\n checkArrayLength(x, y);\n regress(this, x, y);\n }\n }\n\n _predict(input) {\n return this.B * Math.exp(input * this.A);\n }\n\n toJSON() {\n return {\n name: 'exponentialRegression',\n A: this.A,\n B: this.B\n };\n }\n\n toString(precision) {\n return (\n `f(x) = ${\n maybeToPrecision(this.B, precision)\n } * e^(${\n maybeToPrecision(this.A, precision)\n } * x)`\n );\n }\n\n toLaTeX(precision) {\n if (this.A >= 0) {\n return (\n `f(x) = ${\n maybeToPrecision(this.B, precision)\n }e^{${\n maybeToPrecision(this.A, precision)\n }x}`\n );\n } else {\n return (\n `f(x) = \\\\frac{${\n maybeToPrecision(this.B, precision)\n }}{e^{${\n maybeToPrecision(-this.A, precision)\n }x}}`\n );\n }\n }\n\n static load(json) {\n if (json.name !== 'exponentialRegression') {\n throw new TypeError('not a exponential regression model');\n }\n return new ExponentialRegression(true, json);\n }\n}\n\nfunction regress(er, x, y) {\n const n = x.length;\n const yl = new Array(n);\n for (let i = 0; i < n; i++) {\n yl[i] = Math.log(y[i]);\n }\n\n const linear = new SimpleLinearRegression(x, yl);\n er.A = linear.slope;\n er.B = Math.exp(linear.intercept);\n}\n","import BaseRegression, {\n checkArrayLength,\n maybeToPrecision\n} from 'ml-regression-base';\nimport SimpleLinearRegression from 'ml-regression-simple-linear';\n\nexport default class PowerRegression extends BaseRegression {\n constructor(x, y) {\n super();\n if (x === true) {\n // reloading model\n this.A = y.A;\n this.B = y.B;\n } else {\n checkArrayLength(x, y);\n regress(this, x, y);\n }\n }\n\n _predict(newInputs) {\n return this.A * Math.pow(newInputs, this.B);\n }\n\n toJSON() {\n return {\n name: 'powerRegression',\n A: this.A,\n B: this.B\n };\n }\n\n toString(precision) {\n return `f(x) = ${maybeToPrecision(\n this.A,\n precision\n )} * x^${maybeToPrecision(this.B, precision)}`;\n }\n\n toLaTeX(precision) {\n let latex = '';\n if (this.B >= 0) {\n latex = `f(x) = ${maybeToPrecision(\n this.A,\n precision\n )}x^{${maybeToPrecision(this.B, precision)}}`;\n } else {\n latex = `f(x) = \\\\frac{${maybeToPrecision(\n this.A,\n precision\n )}}{x^{${maybeToPrecision(-this.B, precision)}}}`;\n }\n latex = latex.replace(/e([+-]?[0-9]+)/g, 'e^{$1}');\n return latex;\n }\n\n static load(json) {\n if (json.name !== 'powerRegression') {\n throw new TypeError('not a power regression model');\n }\n return new PowerRegression(true, json);\n }\n}\n\nfunction regress(pr, x, y) {\n const n = x.length;\n const xl = new Array(n);\n const yl = new Array(n);\n for (let i = 0; i < n; i++) {\n xl[i] = Math.log(x[i]);\n yl[i] = Math.log(y[i]);\n }\n\n const linear = new SimpleLinearRegression(xl, yl);\n pr.A = Math.exp(linear.intercept);\n pr.B = linear.slope;\n}\n","import Matrix, { SVD, pseudoInverse } from 'ml-matrix';\n\nexport default class MultivariateLinearRegression {\n constructor(x, y, options = {}) {\n const { intercept = true, statistics = true } = options;\n this.statistics = statistics;\n if (x === true) {\n this.weights = y.weights;\n this.inputs = y.inputs;\n this.outputs = y.outputs;\n this.intercept = y.intercept;\n } else {\n x = new Matrix(x);\n y = new Matrix(y);\n if (intercept) {\n x.addColumn(new Array(x.rows).fill(1));\n }\n let xt = x.transpose();\n const xx = xt\n .mmul(x);\n const xy = xt\n .mmul(y);\n const invxx = new SVD(xx)\n .inverse();\n const beta = xy\n .transpose()\n .mmul(invxx)\n .transpose();\n this.weights = beta.to2DArray();\n this.inputs = x.columns;\n this.outputs = y.columns;\n if (intercept) this.inputs--;\n this.intercept = intercept;\n if (statistics) {\n /*\n * Let's add some basic statistics about the beta's to be able to interpret them.\n * source: http://dept.stat.lsa.umich.edu/~kshedden/Courses/Stat401/Notes/401-multreg.pdf\n * validated against Excel Regression AddIn\n * test: \"datamining statistics test\"\n */\n const fittedValues = x.mmul(beta);\n const residuals = y.clone().addM(fittedValues.neg());\n const variance =\n residuals\n .to2DArray()\n .map((ri) => Math.pow(ri[0], 2))\n .reduce((a, b) => a + b) /\n (y.rows - x.columns);\n this.stdError = Math.sqrt(variance);\n this.stdErrorMatrix = pseudoInverse(xx).mul(variance);\n this.stdErrors = this.stdErrorMatrix\n .diagonal()\n .map((d) => Math.sqrt(d));\n this.tStats = this.weights.map((d, i) =>\n (this.stdErrors[i] === 0 ? 0 : d[0] / this.stdErrors[i])\n );\n }\n }\n }\n\n predict(x) {\n if (Array.isArray(x)) {\n if (typeof x[0] === 'number') {\n return this._predict(x);\n } else if (Array.isArray(x[0])) {\n const y = new Array(x.length);\n for (let i = 0; i < x.length; i++) {\n y[i] = this._predict(x[i]);\n }\n return y;\n }\n } else if (Matrix.isMatrix(x)) {\n const y = new Matrix(x.rows, this.outputs);\n for (let i = 0; i < x.rows; i++) {\n y.setRow(i, this._predict(x.getRow(i)));\n }\n return y;\n }\n throw new TypeError('x must be a matrix or array of numbers');\n }\n\n _predict(x) {\n const result = new Array(this.outputs);\n if (this.intercept) {\n for (let i = 0; i < this.outputs; i++) {\n result[i] = this.weights[this.inputs][i];\n }\n } else {\n result.fill(0);\n }\n for (let i = 0; i < this.inputs; i++) {\n for (let j = 0; j < this.outputs; j++) {\n result[j] += this.weights[i][j] * x[i];\n }\n }\n return result;\n }\n\n score() {\n throw new Error('score method is not implemented yet');\n }\n\n toJSON() {\n return {\n name: 'multivariateLinearRegression',\n weights: this.weights,\n inputs: this.inputs,\n outputs: this.outputs,\n intercept: this.intercept,\n summary: this.statistics\n ? {\n regressionStatistics: {\n standardError: this.stdError,\n observations: this.outputs\n },\n variables: this.weights.map((d, i) => {\n return {\n label:\n i === this.weights.length - 1\n ? 'Intercept'\n : `X Variable ${i + 1}`,\n coefficients: d,\n standardError: this.stdErrors[i],\n tStat: this.tStats[i]\n };\n })\n }\n : undefined\n };\n }\n\n static load(model) {\n if (model.name !== 'multivariateLinearRegression') {\n throw new Error('not a MLR model');\n }\n return new MultivariateLinearRegression(true, model);\n }\n}\n","'use strict';\n\nconst { squaredEuclidean } = require('ml-distance-euclidean');\n\nconst defaultOptions = {\n sigma: 1\n};\n\nclass GaussianKernel {\n constructor(options) {\n options = Object.assign({}, defaultOptions, options);\n this.sigma = options.sigma;\n this.divisor = 2 * options.sigma * options.sigma;\n }\n compute(x, y) {\n const distance = squaredEuclidean(x, y);\n return Math.exp(-distance / this.divisor);\n }\n}\n\nmodule.exports = GaussianKernel;\n","'use strict';\n\nconst defaultOptions = {\n degree: 1,\n constant: 1,\n scale: 1\n};\n\nclass PolynomialKernel {\n constructor(options) {\n options = Object.assign({}, defaultOptions, options);\n\n this.degree = options.degree;\n this.constant = options.constant;\n this.scale = options.scale;\n }\n\n compute(x, y) {\n var sum = 0;\n for (var i = 0; i < x.length; i++) {\n sum += x[i] * y[i];\n }\n return Math.pow(this.scale * sum + this.constant, this.degree);\n }\n}\n\nmodule.exports = PolynomialKernel;\n","'use strict';\n\nconst defaultOptions = {\n alpha: 0.01,\n constant: -Math.E\n};\n\nclass SigmoidKernel {\n constructor(options) {\n options = Object.assign({}, defaultOptions, options);\n this.alpha = options.alpha;\n this.constant = options.constant;\n }\n\n compute(x, y) {\n var sum = 0;\n for (var i = 0; i < x.length; i++) {\n sum += x[i] * y[i];\n }\n return Math.tanh(this.alpha * sum + this.constant);\n }\n}\n\nmodule.exports = SigmoidKernel;\n","'use strict';\n\nconst defaultOptions = {\n sigma: 1,\n degree: 1\n};\n\nclass ANOVAKernel {\n constructor(options) {\n options = Object.assign({}, defaultOptions, options);\n this.sigma = options.sigma;\n this.degree = options.degree;\n }\n\n compute(x, y) {\n var sum = 0;\n var len = Math.min(x.length, y.length);\n for (var i = 1; i <= len; ++i) {\n sum += Math.pow(\n Math.exp(\n -this.sigma *\n Math.pow(Math.pow(x[i - 1], i) - Math.pow(y[i - 1], i), 2)\n ),\n this.degree\n );\n }\n return sum;\n }\n}\n\nmodule.exports = ANOVAKernel;\n","'use strict';\n\nconst { squaredEuclidean } = require('ml-distance-euclidean');\n\nconst defaultOptions = {\n sigma: 1\n};\n\nclass CauchyKernel {\n constructor(options) {\n options = Object.assign({}, defaultOptions, options);\n this.sigma = options.sigma;\n }\n\n compute(x, y) {\n return 1 / (1 + squaredEuclidean(x, y) / (this.sigma * this.sigma));\n }\n}\n\nmodule.exports = CauchyKernel;\n","'use strict';\n\nconst { euclidean } = require('ml-distance-euclidean');\n\nconst defaultOptions = {\n sigma: 1\n};\n\nclass ExponentialKernel {\n constructor(options) {\n options = Object.assign({}, defaultOptions, options);\n this.sigma = options.sigma;\n this.divisor = 2 * options.sigma * options.sigma;\n }\n\n compute(x, y) {\n const distance = euclidean(x, y);\n return Math.exp(-distance / this.divisor);\n }\n}\n\nmodule.exports = ExponentialKernel;\n","'use strict';\n\nclass HistogramIntersectionKernel {\n compute(x, y) {\n var min = Math.min(x.length, y.length);\n var sum = 0;\n for (var i = 0; i < min; ++i) {\n sum += Math.min(x[i], y[i]);\n }\n\n return sum;\n }\n}\n\nmodule.exports = HistogramIntersectionKernel;\n","'use strict';\n\nconst { euclidean } = require('ml-distance-euclidean');\n\nconst defaultOptions = {\n sigma: 1\n};\n\nclass LaplacianKernel {\n constructor(options) {\n options = Object.assign({}, defaultOptions, options);\n this.sigma = options.sigma;\n }\n\n compute(x, y) {\n const distance = euclidean(x, y);\n return Math.exp(-distance / this.sigma);\n }\n}\n\nmodule.exports = LaplacianKernel;\n","'use strict';\n\nconst { squaredEuclidean } = require('ml-distance-euclidean');\n\nconst defaultOptions = {\n constant: 1\n};\n\nclass MultiquadraticKernel {\n constructor(options) {\n options = Object.assign({}, defaultOptions, options);\n this.constant = options.constant;\n }\n\n compute(x, y) {\n return Math.sqrt(squaredEuclidean(x, y) + this.constant * this.constant);\n }\n}\n\nmodule.exports = MultiquadraticKernel;\n","'use strict';\n\nconst { squaredEuclidean } = require('ml-distance-euclidean');\n\nconst defaultOptions = {\n constant: 1\n};\n\nclass RationalQuadraticKernel {\n constructor(options) {\n options = Object.assign({}, defaultOptions, options);\n this.constant = options.constant;\n }\n\n compute(x, y) {\n const distance = squaredEuclidean(x, y);\n return 1 - distance / (distance + this.constant);\n }\n}\n\nmodule.exports = RationalQuadraticKernel;\n","'use strict';\n\nconst { Matrix, MatrixTransposeView } = require('ml-matrix');\nconst GaussianKernel = require('ml-kernel-gaussian');\nconst PolynomialKernel = require('ml-kernel-polynomial');\nconst SigmoidKernel = require('ml-kernel-sigmoid');\n\nconst ANOVAKernel = require('./kernels/anova-kernel');\nconst CauchyKernel = require('./kernels/cauchy-kernel');\nconst ExponentialKernel = require('./kernels/exponential-kernel');\nconst HistogramKernel = require('./kernels/histogram-intersection-kernel');\nconst LaplacianKernel = require('./kernels/laplacian-kernel');\nconst MultiquadraticKernel = require('./kernels/multiquadratic-kernel');\nconst RationalKernel = require('./kernels/rational-quadratic-kernel');\n\nconst kernelType = {\n gaussian: GaussianKernel,\n rbf: GaussianKernel,\n polynomial: PolynomialKernel,\n poly: PolynomialKernel,\n anova: ANOVAKernel,\n cauchy: CauchyKernel,\n exponential: ExponentialKernel,\n histogram: HistogramKernel,\n min: HistogramKernel,\n laplacian: LaplacianKernel,\n multiquadratic: MultiquadraticKernel,\n rational: RationalKernel,\n sigmoid: SigmoidKernel,\n mlp: SigmoidKernel\n};\n\nclass Kernel {\n constructor(type, options) {\n this.kernelType = type;\n if (type === 'linear') return;\n\n if (typeof type === 'string') {\n type = type.toLowerCase();\n\n var KernelConstructor = kernelType[type];\n if (KernelConstructor) {\n this.kernelFunction = new KernelConstructor(options);\n } else {\n throw new Error(`unsupported kernel type: ${type}`);\n }\n } else if (typeof type === 'object' && typeof type.compute === 'function') {\n this.kernelFunction = type;\n } else {\n throw new TypeError(\n 'first argument must be a valid kernel type or instance'\n );\n }\n }\n\n compute(inputs, landmarks) {\n inputs = Matrix.checkMatrix(inputs);\n if (landmarks === undefined) {\n landmarks = inputs;\n } else {\n landmarks = Matrix.checkMatrix(landmarks);\n }\n if (this.kernelType === 'linear') {\n return inputs.mmul(new MatrixTransposeView(landmarks));\n }\n\n const kernelMatrix = new Matrix(inputs.rows, landmarks.rows);\n if (inputs === landmarks) {\n // fast path, matrix is symmetric\n for (let i = 0; i < inputs.rows; i++) {\n for (let j = i; j < inputs.rows; j++) {\n const value = this.kernelFunction.compute(\n inputs.getRow(i),\n inputs.getRow(j)\n );\n kernelMatrix.set(i, j, value);\n kernelMatrix.set(j, i, value);\n }\n }\n } else {\n for (let i = 0; i < inputs.rows; i++) {\n for (let j = 0; j < landmarks.rows; j++) {\n kernelMatrix.set(\n i,\n j,\n this.kernelFunction.compute(inputs.getRow(i), landmarks.getRow(j))\n );\n }\n }\n }\n return kernelMatrix;\n }\n}\n\nmodule.exports = Kernel;\n","import BaseRegression, {\n checkArrayLength,\n maybeToPrecision\n} from 'ml-regression-base';\nimport median from 'ml-array-median';\n\nexport default class TheilSenRegression extends BaseRegression {\n /**\n * Theil–Sen estimator\n * https://en.wikipedia.org/wiki/Theil%E2%80%93Sen_estimator\n * @param {Array|boolean} x\n * @param {Array|object} y\n * @constructor\n */\n constructor(x, y) {\n super();\n if (x === true) {\n // loads the model\n this.slope = y.slope;\n this.intercept = y.intercept;\n this.coefficients = y.coefficients;\n } else {\n // creates the model\n checkArrayLength(x, y);\n theilSen(this, x, y);\n }\n }\n\n toJSON() {\n return {\n name: 'TheilSenRegression',\n slope: this.slope,\n intercept: this.intercept\n };\n }\n\n _predict(input) {\n return this.slope * input + this.intercept;\n }\n\n computeX(input) {\n return (input - this.intercept) / this.slope;\n }\n\n toString(precision) {\n var result = 'f(x) = ';\n if (this.slope) {\n var xFactor = maybeToPrecision(this.slope, precision);\n result += `${Math.abs(xFactor - 1) < 1e-5 ? '' : `${xFactor} * `}x`;\n if (this.intercept) {\n var absIntercept = Math.abs(this.intercept);\n var operator = absIntercept === this.intercept ? '+' : '-';\n result +=\n ` ${operator} ${maybeToPrecision(absIntercept, precision)}`;\n }\n } else {\n result += maybeToPrecision(this.intercept, precision);\n }\n return result;\n }\n\n toLaTeX(precision) {\n return this.toString(precision);\n }\n\n static load(json) {\n if (json.name !== 'TheilSenRegression') {\n throw new TypeError('not a Theil-Sen model');\n }\n return new TheilSenRegression(true, json);\n }\n}\n\nfunction theilSen(regression, x, y) {\n let len = x.length;\n let slopes = new Array(len * len);\n let count = 0;\n for (let i = 0; i < len; ++i) {\n for (let j = i + 1; j < len; ++j) {\n if (x[i] !== x[j]) {\n slopes[count++] = (y[j] - y[i]) / (x[j] - x[i]);\n }\n }\n }\n slopes.length = count;\n let medianSlope = median(slopes);\n\n let cuts = new Array(len);\n for (let i = 0; i < len; ++i) {\n cuts[i] = y[i] - medianSlope * x[i];\n }\n\n regression.slope = medianSlope;\n regression.intercept = median(cuts);\n regression.coefficients = [regression.intercept, regression.slope];\n}\n","import BaseRegression, {\n checkArrayLength,\n maybeToPrecision\n} from 'ml-regression-base';\nimport { solve } from 'ml-matrix';\n\n/**\n * @class RobustPolynomialRegression\n * @param {Array} x\n * @param {Array} y\n * @param {number} degree - polynomial degree\n */\nexport default class RobustPolynomialRegression extends BaseRegression {\n constructor(x, y, degree) {\n super();\n if (x === true) {\n this.degree = y.degree;\n this.powers = y.powers;\n this.coefficients = y.coefficients;\n } else {\n checkArrayLength(x, y);\n robustPolynomial(this, x, y, degree);\n }\n }\n\n toJSON() {\n return {\n name: 'robustPolynomialRegression',\n degree: this.degree,\n powers: this.powers,\n coefficients: this.coefficients\n };\n }\n\n _predict(x) {\n return predict(x, this.powers, this.coefficients);\n }\n\n /**\n * Display the formula\n * @param {number} precision - precision for the numbers\n * @return {string}\n */\n toString(precision) {\n return this._toFormula(precision, false);\n }\n\n /**\n * Display the formula in LaTeX format\n * @param {number} precision - precision for the numbers\n * @return {string}\n */\n toLaTeX(precision) {\n return this._toFormula(precision, true);\n }\n\n _toFormula(precision, isLaTeX) {\n let sup = '^';\n let closeSup = '';\n let times = ' * ';\n if (isLaTeX) {\n sup = '^{';\n closeSup = '}';\n times = '';\n }\n\n let fn = '';\n let str = '';\n for (let k = 0; k < this.coefficients.length; k++) {\n str = '';\n if (this.coefficients[k] !== 0) {\n if (this.powers[k] === 0) {\n str = maybeToPrecision(this.coefficients[k], precision);\n } else {\n if (this.powers[k] === 1) {\n str = `${maybeToPrecision(this.coefficients[k], precision) +\n times}x`;\n } else {\n str = `${maybeToPrecision(this.coefficients[k], precision) +\n times}x${sup}${this.powers[k]}${closeSup}`;\n }\n }\n\n if (this.coefficients[k] > 0 && k !== this.coefficients.length - 1) {\n str = ` + ${str}`;\n } else if (k !== this.coefficients.length - 1) {\n str = ` ${str}`;\n }\n }\n fn = str + fn;\n }\n if (fn.charAt(0) === '+') {\n fn = fn.slice(1);\n }\n\n return `f(x) = ${fn}`;\n }\n\n static load(json) {\n if (json.name !== 'robustPolynomialRegression') {\n throw new TypeError('not a RobustPolynomialRegression model');\n }\n return new RobustPolynomialRegression(true, json);\n }\n}\n\nfunction robustPolynomial(regression, x, y, degree) {\n let powers = Array(degree)\n .fill(0)\n .map((_, index) => index);\n\n const tuples = getRandomTuples(x, y, degree);\n\n var min;\n for (var i = 0; i < tuples.length; i++) {\n var tuple = tuples[i];\n var coefficients = calcCoefficients(tuple, powers);\n\n var residuals = x.slice();\n for (var j = 0; j < x.length; j++) {\n residuals[j] = y[j] - predict(x[j], powers, coefficients);\n residuals[j] = {\n residual: residuals[j] * residuals[j],\n coefficients\n };\n }\n\n var median = residualsMedian(residuals);\n if (!min || median.residual < min.residual) {\n min = median;\n }\n }\n\n regression.degree = degree;\n regression.powers = powers;\n regression.coefficients = min.coefficients;\n}\n\n/**\n * @ignore\n * @param {Array} x\n * @param {Array} y\n * @param {number} degree\n * @return {Array<{x:number,y:number}>}\n */\nfunction getRandomTuples(x, y, degree) {\n var len = Math.floor(x.length / degree);\n var tuples = new Array(len);\n\n for (var i = 0; i < x.length; i++) {\n var pos = Math.floor(Math.random() * len);\n\n var counter = 0;\n while (counter < x.length) {\n if (!tuples[pos]) {\n tuples[pos] = [\n {\n x: x[i],\n y: y[i]\n }\n ];\n break;\n } else if (tuples[pos].length < degree) {\n tuples[pos].push({\n x: x[i],\n y: y[i]\n });\n break;\n } else {\n counter++;\n pos = (pos + 1) % len;\n }\n }\n\n if (counter === x.length) {\n return tuples;\n }\n }\n return tuples;\n}\n\n/**\n * @ignore\n * @param {{x:number,y:number}} tuple\n * @param {Array} powers\n * @return {Array}\n */\nfunction calcCoefficients(tuple, powers) {\n var X = tuple.slice();\n var Y = tuple.slice();\n for (var i = 0; i < X.length; i++) {\n Y[i] = [tuple[i].y];\n X[i] = new Array(powers.length);\n for (var j = 0; j < powers.length; j++) {\n X[i][j] = Math.pow(tuple[i].x, powers[j]);\n }\n }\n\n return solve(X, Y).to1DArray();\n}\n\nfunction predict(x, powers, coefficients) {\n let y = 0;\n for (let k = 0; k < powers.length; k++) {\n y += coefficients[k] * Math.pow(x, powers[k]);\n }\n return y;\n}\n\nfunction residualsMedian(residuals) {\n residuals.sort((a, b) => a.residual - b.residual);\n\n var l = residuals.length;\n var half = Math.floor(l / 2);\n return l % 2 === 0 ? residuals[half - 1] : residuals[half];\n}\n","/**\n * Calculate current error\n * @ignore\n * @param {{x:Array, y:Array}} data - Array of points to fit in the format [x1, x2, ... ], [y1, y2, ... ]\n * @param {Array} parameters - Array of current parameter values\n * @param {function} parameterizedFunction - The parameters and returns a function with the independent variable as a parameter\n * @return {number}\n */\nexport default function errorCalculation(\n data,\n parameters,\n parameterizedFunction\n) {\n var error = 0;\n const func = parameterizedFunction(parameters);\n\n for (var i = 0; i < data.x.length; i++) {\n error += Math.abs(data.y[i] - func(data.x[i]));\n }\n\n return error;\n}\n","import { inverse, Matrix } from 'ml-matrix';\n\n/**\n * Difference of the matrix function over the parameters\n * @ignore\n * @param {{x:Array, y:Array}} data - Array of points to fit in the format [x1, x2, ... ], [y1, y2, ... ]\n * @param {Array} evaluatedData - Array of previous evaluated function values\n * @param {Array} params - Array of previous parameter values\n * @param {number} gradientDifference - Adjustment for decrease the damping parameter\n * @param {function} paramFunction - The parameters and returns a function with the independent variable as a parameter\n * @return {Matrix}\n */\nfunction gradientFunction(\n data,\n evaluatedData,\n params,\n gradientDifference,\n paramFunction\n) {\n const n = params.length;\n const m = data.x.length;\n\n var ans = new Array(n);\n\n for (var param = 0; param < n; param++) {\n ans[param] = new Array(m);\n var auxParams = params.concat();\n auxParams[param] += gradientDifference;\n var funcParam = paramFunction(auxParams);\n\n for (var point = 0; point < m; point++) {\n ans[param][point] = evaluatedData[point] - funcParam(data.x[point]);\n }\n }\n return new Matrix(ans);\n}\n\n/**\n * Matrix function over the samples\n * @ignore\n * @param {{x:Array, y:Array}} data - Array of points to fit in the format [x1, x2, ... ], [y1, y2, ... ]\n * @param {Array} evaluatedData - Array of previous evaluated function values\n * @return {Matrix}\n */\nfunction matrixFunction(data, evaluatedData) {\n const m = data.x.length;\n\n var ans = new Array(m);\n\n for (var point = 0; point < m; point++) {\n ans[point] = [data.y[point] - evaluatedData[point]];\n }\n\n return new Matrix(ans);\n}\n\n/**\n * Iteration for Levenberg-Marquardt\n * @ignore\n * @param {{x:Array, y:Array}} data - Array of points to fit in the format [x1, x2, ... ], [y1, y2, ... ]\n * @param {Array} params - Array of previous parameter values\n * @param {number} damping - Levenberg-Marquardt parameter\n * @param {number} gradientDifference - Adjustment for decrease the damping parameter\n * @param {function} parameterizedFunction - The parameters and returns a function with the independent variable as a parameter\n * @return {Array}\n */\nexport default function step(\n data,\n params,\n damping,\n gradientDifference,\n parameterizedFunction\n) {\n var value = damping * gradientDifference * gradientDifference;\n var identity = Matrix.eye(params.length, params.length, value);\n\n const func = parameterizedFunction(params);\n var evaluatedData = data.x.map((e) => func(e));\n\n var gradientFunc = gradientFunction(\n data,\n evaluatedData,\n params,\n gradientDifference,\n parameterizedFunction\n );\n var matrixFunc = matrixFunction(data, evaluatedData);\n var inverseMatrix = inverse(\n identity.add(gradientFunc.mmul(gradientFunc.transpose()))\n );\n\n params = new Matrix([params]);\n params = params.sub(\n inverseMatrix\n .mmul(gradientFunc)\n .mmul(matrixFunc)\n .mul(gradientDifference)\n .transpose()\n );\n\n return params.to1DArray();\n}\n","import errorCalculation from './errorCalculation';\nimport step from './step';\n\n/**\n * Curve fitting algorithm\n * @param {{x:Array, y:Array}} data - Array of points to fit in the format [x1, x2, ... ], [y1, y2, ... ]\n * @param {function} parameterizedFunction - The parameters and returns a function with the independent variable as a parameter\n * @param {object} [options] - Options object\n * @param {number} [options.damping] - Levenberg-Marquardt parameter\n * @param {number} [options.gradientDifference = 10e-2] - Adjustment for decrease the damping parameter\n * @param {Array} [options.minValues] - Minimum allowed values for parameters\n * @param {Array} [options.maxValues] - Maximum allowed values for parameters\n * @param {Array} [options.initialValues] - Array of initial parameter values\n * @param {number} [options.maxIterations = 100] - Maximum of allowed iterations\n * @param {number} [options.errorTolerance = 10e-3] - Minimum uncertainty allowed for each point\n * @return {{parameterValues: Array, parameterError: number, iterations: number}}\n */\nexport default function levenbergMarquardt(\n data,\n parameterizedFunction,\n options = {}\n) {\n let {\n maxIterations = 100,\n gradientDifference = 10e-2,\n damping = 0,\n errorTolerance = 10e-3,\n minValues,\n maxValues,\n initialValues\n } = options;\n\n if (damping <= 0) {\n throw new Error('The damping option must be a positive number');\n } else if (!data.x || !data.y) {\n throw new Error('The data parameter must have x and y elements');\n } else if (\n !Array.isArray(data.x) ||\n data.x.length < 2 ||\n !Array.isArray(data.y) ||\n data.y.length < 2\n ) {\n throw new Error(\n 'The data parameter elements must be an array with more than 2 points'\n );\n } else if (data.x.length !== data.y.length) {\n throw new Error('The data parameter elements must have the same size');\n }\n\n var parameters =\n initialValues || new Array(parameterizedFunction.length).fill(1);\n let parLen = parameters.length;\n maxValues = maxValues || new Array(parLen).fill(Number.MAX_SAFE_INTEGER);\n minValues = minValues || new Array(parLen).fill(Number.MIN_SAFE_INTEGER);\n\n if (maxValues.length !== minValues.length) {\n throw new Error('minValues and maxValues must be the same size');\n }\n\n if (!Array.isArray(parameters)) {\n throw new Error('initialValues must be an array');\n }\n\n var error = errorCalculation(data, parameters, parameterizedFunction);\n\n var converged = error <= errorTolerance;\n\n for (\n var iteration = 0;\n iteration < maxIterations && !converged;\n iteration++\n ) {\n parameters = step(\n data,\n parameters,\n damping,\n gradientDifference,\n parameterizedFunction\n );\n\n for (let k = 0; k < parLen; k++) {\n parameters[k] = Math.min(\n Math.max(minValues[k], parameters[k]),\n maxValues[k]\n );\n }\n\n error = errorCalculation(data, parameters, parameterizedFunction);\n if (isNaN(error)) break;\n converged = error <= errorTolerance;\n }\n\n return {\n parameterValues: parameters,\n parameterError: error,\n iterations: iteration\n };\n}\n","/**\n * Returns a new array based on extraction of specific indices of an array\n * @private\n * @param {Array} vector\n * @param {Array} indices\n */\nexport default function selection(vector, indices) {\n let u = []; //new Float64Array(indices.length);\n for (let i = 0; i < indices.length; i++) {\n u[i] = vector[indices[i]];\n }\n return u;\n}\n","/**\n *\n * @private\n * @param {Array of arrays} collection\n */\nexport default function sortCollectionSet(collection) {\n let objectCollection = collection\n .map((value, index) => {\n let key = BigInt(0);\n value.forEach((item) => (key |= BigInt(1) << BigInt(item)));\n return { value, index, key };\n })\n .sort((a, b) => {\n if (a.key - b.key < 0) return -1;\n return 1;\n });\n\n let sorted = [];\n let indices = [];\n\n let key;\n for (let set of objectCollection) {\n if (set.key !== key) {\n key = set.key;\n indices.push([]);\n sorted.push(set.value);\n }\n indices[indices.length - 1].push(set.index);\n }\n\n let result = {\n values: sorted,\n indices: indices,\n };\n return result;\n}\n","import {\n Matrix,\n LuDecomposition,\n solve,\n CholeskyDecomposition,\n} from 'ml-matrix';\n\nimport sortCollectionSet from './util/sortCollectionSet';\n\n/**\n * (Combinatorial Subspace Least Squares) - subfunction for the FC-NNLS\n * @private\n * @param {Matrix} XtX\n * @param {Matrix} XtY\n * @param {Array} Pset\n * @param {Numbers} l\n * @param {Numbers} p\n */\nexport default function cssls(XtX, XtY, Pset, l, p) {\n // Solves the set of equation XtX*K = XtY for the variables in Pset\n // if XtX (or XtX(vars,vars)) is singular, performs the svd and find pseudoinverse, otherwise (even if ill-conditioned) finds inverse with LU decomposition and solves the set of equation\n // it is consistent with matlab results for ill-conditioned matrices (at least consistent with test 'ill-conditionned square X rank 2, Y 3x1' in cssls.test)\n\n let K = Matrix.zeros(l, p);\n if (Pset === null) {\n let choXtX = new CholeskyDecomposition(XtX);\n if (choXtX.isPositiveDefinite() === true) {\n K = choXtX.solve(XtY);\n } else {\n let luXtX = new LuDecomposition(XtX);\n if (luXtX.isSingular() === false) {\n K = luXtX.solve(Matrix.eye(l)).mmul(XtY);\n } else {\n K = solve(XtX, XtY, { useSVD: true });\n }\n }\n } else {\n let sortedPset = sortCollectionSet(Pset).values;\n let sortedEset = sortCollectionSet(Pset).indices;\n if (\n sortedPset.length === 1 &&\n sortedPset[0].length === 0 &&\n sortedEset[0].length === p\n ) {\n return K;\n } else if (\n sortedPset.length === 1 &&\n sortedPset[0].length === l &&\n sortedEset[0].length === p\n ) {\n let choXtX = new CholeskyDecomposition(XtX);\n if (choXtX.isPositiveDefinite() === true) {\n K = choXtX.solve(XtY);\n } else {\n let luXtX = new LuDecomposition(XtX);\n if (luXtX.isSingular() === false) {\n K = luXtX.solve(Matrix.eye(l)).mmul(XtY);\n } else {\n K = solve(XtX, XtY, { useSVD: true });\n }\n }\n } else {\n for (let k = 0; k < sortedPset.length; k++) {\n let cols2Solve = sortedEset[k];\n let vars = sortedPset[k];\n let L;\n let choXtX = new CholeskyDecomposition(XtX.selection(vars, vars));\n if (choXtX.isPositiveDefinite() === true) {\n L = choXtX.solve(XtY.selection(vars, cols2Solve));\n } else {\n let luXtX = new LuDecomposition(XtX.selection(vars, vars));\n if (luXtX.isSingular() === false) {\n L = luXtX\n .solve(Matrix.eye(vars.length))\n .mmul(XtY.selection(vars, cols2Solve));\n } else {\n L = solve(\n XtX.selection(vars, vars),\n XtY.selection(vars, cols2Solve),\n { useSVD: true },\n );\n }\n }\n for (let i = 0; i < L.rows; i++) {\n for (let j = 0; j < L.columns; j++) {\n K.set(vars[i], cols2Solve[j], L.get(i, j));\n }\n }\n }\n }\n }\n return K;\n}\n","import { Matrix } from 'ml-matrix';\n\nimport cssls from './cssls';\n\nexport default function initialisation(X, Y) {\n let n = X.rows;\n let l = X.columns;\n let p = Y.columns;\n let iter = 0;\n\n if (Y.rows !== n) throw new Error('ERROR: matrix size not compatible');\n\n let W = Matrix.zeros(l, p);\n\n // precomputes part of pseudoinverse\n let XtX = X.transpose().mmul(X);\n let XtY = X.transpose().mmul(Y);\n\n let K = cssls(XtX, XtY, null, l, p); // K is lxp\n let Pset = [];\n for (let j = 0; j < p; j++) {\n Pset[j] = [];\n for (let i = 0; i < l; i++) {\n if (K.get(i, j) > 0) {\n Pset[j].push(i);\n } else {\n K.set(i, j, 0);\n } //This is our initial solution, it's the solution found by overwriting the unconstrained least square solution\n }\n }\n let Fset = [];\n for (let j = 0; j < p; j++) {\n if (Pset[j].length !== l) {\n Fset.push(j);\n }\n }\n\n let D = K.clone();\n\n return { n, l, p, iter, W, XtX, XtY, K, Pset, Fset, D };\n}\n","/**\n * Computes the set difference A\\B\n * @private\n * @param {A} set A as an array\n * @param {B} set B as an array\n */\nexport default function setDifference(A, B) {\n let C = [];\n for (let i of A) {\n if (!B.includes(i)) C.push(i);\n }\n return C;\n}\n","import setDifference from './util/setDifference';\n\n// Makes sure the solution has converged\nexport default function optimality(\n iter,\n maxIter,\n XtX,\n XtY,\n Fset,\n Pset,\n W,\n K,\n l,\n p,\n D,\n) {\n if (iter === maxIter) {\n throw new Error('Maximum number of iterations exceeded');\n }\n\n // Check solution for optimality\n let V = XtY.subMatrixColumn(Fset).subtract(XtX.mmul(K.subMatrixColumn(Fset)));\n for (let j = 0; j < Fset.length; j++) {\n W.setColumn(Fset[j], V.subMatrixColumn([j]));\n }\n let Jset = [];\n let fullSet = [];\n for (let i = 0; i < l; i++) {\n fullSet.push(i);\n }\n for (let j = 0; j < Fset.length; j++) {\n let notPset = setDifference(fullSet, Pset[Fset[j]]);\n if (notPset.length === 0) {\n Jset.push(Fset[j]);\n } else if (W.selection(notPset, [Fset[j]]).max() <= 0) {\n Jset.push(Fset[j]);\n }\n }\n Fset = setDifference(Fset, Jset);\n\n // For non-optimal solutions, add the appropriate variables to Pset\n if (Fset.length !== 0) {\n for (let j = 0; j < Fset.length; j++) {\n for (let i = 0; i < l; i++) {\n if (Pset[Fset[j]].includes(i)) W.set(i, Fset[j], -Infinity);\n }\n Pset[Fset[j]].push(W.subMatrixColumn(Fset).maxColumnIndex(j)[0]);\n }\n for (let j = 0; j < Fset.length; j++) {\n D.setColumn(Fset[j], K.getColumn(Fset[j]));\n }\n }\n for (let j = 0; j < p; j++) {\n Pset[j].sort((a, b) => a - b);\n }\n return { Pset, Fset, W };\n}\n","import { Matrix } from 'ml-matrix';\n\nimport selection from './util/selection';\nimport cssls from './cssls';\nimport initialisation from './initialisation';\nimport optimality from './optimality';\n\n/**\n * Fast Combinatorial Non-negative Least Squares with multiple Right Hand Side\n * @param {Matrix|number[][]} X\n * @param {Matrix|number[][]} Y\n * @param {object} [options={}]\n * @param {number} [options.maxIterations] if empty maxIterations is set at 3 times the number of columns of X\n * @returns {Matrix} K\n */\nexport default function fcnnls(X, Y, options = {}) {\n X = Matrix.checkMatrix(X);\n Y = Matrix.checkMatrix(Y);\n let { l, p, iter, W, XtX, XtY, K, Pset, Fset, D } = initialisation(X, Y);\n const { maxIterations = X.columns * 3 } = options;\n\n // Active set algorithm for NNLS main loop\n while (Fset.length > 0) {\n // Solves for the passive variables (uses subroutine below)\n let L = cssls(\n XtX,\n XtY.subMatrixColumn(Fset),\n selection(Pset, Fset),\n l,\n Fset.length,\n );\n for (let i = 0; i < l; i++) {\n for (let j = 0; j < Fset.length; j++) {\n K.set(i, Fset[j], L.get(i, j));\n }\n }\n\n // Finds any infeasible solutions\n let infeasIndex = [];\n for (let j = 0; j < Fset.length; j++) {\n for (let i = 0; i < l; i++) {\n if (L.get(i, j) < 0) {\n infeasIndex.push(j);\n break;\n }\n }\n }\n let Hset = selection(Fset, infeasIndex);\n\n // Makes infeasible solutions feasible (standard NNLS inner loop)\n if (Hset.length > 0) {\n let m = Hset.length;\n let alpha = Matrix.ones(l, m);\n\n while (m > 0 && iter < maxIterations) {\n iter++;\n\n alpha.mul(Infinity);\n\n // Finds indices of negative variables in passive set\n let hRowColIdx = [[], []]; // Indexes work in pairs, each pair reprensents a single element, first array is row index, second array is column index\n let negRowColIdx = [[], []]; // Same as before\n for (let j = 0; j < m; j++) {\n for (let i = 0; i < Pset[Hset[j]].length; i++) {\n if (K.get(Pset[Hset[j]][i], Hset[j]) < 0) {\n hRowColIdx[0].push(Pset[Hset[j]][i]); // i\n hRowColIdx[1].push(j);\n negRowColIdx[0].push(Pset[Hset[j]][i]); // i\n negRowColIdx[1].push(Hset[j]);\n } // Compared to matlab, here we keep the row/column indexing (we are not taking the linear indexing)\n }\n }\n\n for (let k = 0; k < hRowColIdx[0].length; k++) {\n // could be hRowColIdx[1].length as well\n alpha.set(\n hRowColIdx[0][k],\n hRowColIdx[1][k],\n D.get(negRowColIdx[0][k], negRowColIdx[1][k]) /\n (D.get(negRowColIdx[0][k], negRowColIdx[1][k]) -\n K.get(negRowColIdx[0][k], negRowColIdx[1][k])),\n );\n }\n\n let alphaMin = [];\n let minIdx = [];\n for (let j = 0; j < m; j++) {\n alphaMin[j] = alpha.minColumn(j);\n minIdx[j] = alpha.minColumnIndex(j)[0];\n }\n\n alphaMin = Matrix.rowVector(alphaMin);\n for (let i = 0; i < l; i++) {\n alpha.setSubMatrix(alphaMin, i, 0);\n }\n\n let E = new Matrix(l, m);\n E = D.subMatrixColumn(Hset).subtract(\n alpha\n .subMatrix(0, l - 1, 0, m - 1)\n .mul(D.subMatrixColumn(Hset).subtract(K.subMatrixColumn(Hset))),\n );\n for (let j = 0; j < m; j++) {\n D.setColumn(Hset[j], E.subMatrixColumn([j]));\n }\n\n let idx2zero = [minIdx, Hset];\n for (let k = 0; k < m; k++) {\n D.set(idx2zero[0][k], idx2zero[1][k], 0);\n }\n\n for (let j = 0; j < m; j++) {\n Pset[Hset[j]].splice(\n Pset[Hset[j]].findIndex((item) => item === minIdx[j]),\n 1,\n );\n }\n\n L = cssls(XtX, XtY.subMatrixColumn(Hset), selection(Pset, Hset), l, m);\n for (let j = 0; j < m; j++) {\n K.setColumn(Hset[j], L.subMatrixColumn([j]));\n }\n\n Hset = [];\n for (let j = 0; j < K.columns; j++) {\n for (let i = 0; i < l; i++) {\n if (K.get(i, j) < 0) {\n Hset.push(j);\n\n break;\n }\n }\n }\n m = Hset.length;\n }\n }\n\n let newParam = optimality(\n iter,\n maxIterations,\n XtX,\n XtY,\n Fset,\n Pset,\n W,\n K,\n l,\n p,\n D,\n );\n Pset = newParam.Pset;\n Fset = newParam.Fset;\n W = newParam.W;\n }\n\n return K;\n}\n","import { Matrix } from 'ml-matrix';\n\nimport fcnnls from './fcnnls';\n\n/**\n * Fast Combinatorial Non-negative Least Squares with single Right Hand Side\n * @param {Matrix|number[][]} X\n * @param {number[]} y\n * @param {object} [options={}]\n * @param {boolean} [maxIterations] if true or empty maxIterations is set at 3 times the number of columns of X\n * @returns {Array} k\n */\nexport default function fcnnlsVector(X, y, options = {}) {\n if (Array.isArray(y) === false) {\n throw new TypeError('y must be a 1D Array');\n }\n let Y = Matrix.columnVector(y);\n let K = fcnnls(X, Y, options);\n let k = K.to1DArray();\n return k;\n}\n","module.exports = function(haystack, needle, comparator, low, high) {\n var mid, cmp;\n\n if(low === undefined)\n low = 0;\n\n else {\n low = low|0;\n if(low < 0 || low >= haystack.length)\n throw new RangeError(\"invalid lower bound\");\n }\n\n if(high === undefined)\n high = haystack.length - 1;\n\n else {\n high = high|0;\n if(high < low || high >= haystack.length)\n throw new RangeError(\"invalid upper bound\");\n }\n\n while(low <= high) {\n // The naive `low + high >>> 1` could fail for array lengths > 2**31\n // because `>>>` converts its operands to int32. `low + (high - low >>> 1)`\n // works for array lengths <= 2**32-1 which is also Javascript's max array\n // length.\n mid = low + ((high - low) >>> 1);\n cmp = +comparator(haystack[mid], needle, mid, haystack);\n\n // Too low.\n if(cmp < 0.0)\n low = mid + 1;\n\n // Too high.\n else if(cmp > 0.0)\n high = mid - 1;\n\n // Key found.\n else\n return mid;\n }\n\n // Key not found.\n return ~low;\n}\n","'use strict';\n\nfunction assertNumber(number) {\n\tif (typeof number !== 'number' || Number.isNaN(number)) {\n\t\tthrow new TypeError('Expected a number');\n\t}\n}\n\nexports.ascending = (left, right) => {\n\tassertNumber(left);\n\tassertNumber(right);\n\treturn left - right;\n};\n\nexports.descending = (left, right) => {\n\tassertNumber(left);\n\tassertNumber(right);\n\treturn right - left;\n};\n","import binarySearch from 'binary-search';\nimport { ascending } from 'num-sort';\n\nexport const largestPrime = 0x7fffffff;\n\nconst primeNumbers = [\n // chunk #0\n largestPrime, // 2^31-1\n\n // chunk #1\n 5,\n 11,\n 23,\n 47,\n 97,\n 197,\n 397,\n 797,\n 1597,\n 3203,\n 6421,\n 12853,\n 25717,\n 51437,\n 102877,\n 205759,\n 411527,\n 823117,\n 1646237,\n 3292489,\n 6584983,\n 13169977,\n 26339969,\n 52679969,\n 105359939,\n 210719881,\n 421439783,\n 842879579,\n 1685759167,\n\n // chunk #2\n 433,\n 877,\n 1759,\n 3527,\n 7057,\n 14143,\n 28289,\n 56591,\n 113189,\n 226379,\n 452759,\n 905551,\n 1811107,\n 3622219,\n 7244441,\n 14488931,\n 28977863,\n 57955739,\n 115911563,\n 231823147,\n 463646329,\n 927292699,\n 1854585413,\n\n // chunk #3\n 953,\n 1907,\n 3821,\n 7643,\n 15287,\n 30577,\n 61169,\n 122347,\n 244703,\n 489407,\n 978821,\n 1957651,\n 3915341,\n 7830701,\n 15661423,\n 31322867,\n 62645741,\n 125291483,\n 250582987,\n 501165979,\n 1002331963,\n 2004663929,\n\n // chunk #4\n 1039,\n 2081,\n 4177,\n 8363,\n 16729,\n 33461,\n 66923,\n 133853,\n 267713,\n 535481,\n 1070981,\n 2141977,\n 4283963,\n 8567929,\n 17135863,\n 34271747,\n 68543509,\n 137087021,\n 274174111,\n 548348231,\n 1096696463,\n\n // chunk #5\n 31,\n 67,\n 137,\n 277,\n 557,\n 1117,\n 2237,\n 4481,\n 8963,\n 17929,\n 35863,\n 71741,\n 143483,\n 286973,\n 573953,\n 1147921,\n 2295859,\n 4591721,\n 9183457,\n 18366923,\n 36733847,\n 73467739,\n 146935499,\n 293871013,\n 587742049,\n 1175484103,\n\n // chunk #6\n 599,\n 1201,\n 2411,\n 4831,\n 9677,\n 19373,\n 38747,\n 77509,\n 155027,\n 310081,\n 620171,\n 1240361,\n 2480729,\n 4961459,\n 9922933,\n 19845871,\n 39691759,\n 79383533,\n 158767069,\n 317534141,\n 635068283,\n 1270136683,\n\n // chunk #7\n 311,\n 631,\n 1277,\n 2557,\n 5119,\n 10243,\n 20507,\n 41017,\n 82037,\n 164089,\n 328213,\n 656429,\n 1312867,\n 2625761,\n 5251529,\n 10503061,\n 21006137,\n 42012281,\n 84024581,\n 168049163,\n 336098327,\n 672196673,\n 1344393353,\n\n // chunk #8\n 3,\n 7,\n 17,\n 37,\n 79,\n 163,\n 331,\n 673,\n 1361,\n 2729,\n 5471,\n 10949,\n 21911,\n 43853,\n 87719,\n 175447,\n 350899,\n 701819,\n 1403641,\n 2807303,\n 5614657,\n 11229331,\n 22458671,\n 44917381,\n 89834777,\n 179669557,\n 359339171,\n 718678369,\n 1437356741,\n\n // chunk #9\n 43,\n 89,\n 179,\n 359,\n 719,\n 1439,\n 2879,\n 5779,\n 11579,\n 23159,\n 46327,\n 92657,\n 185323,\n 370661,\n 741337,\n 1482707,\n 2965421,\n 5930887,\n 11861791,\n 23723597,\n 47447201,\n 94894427,\n 189788857,\n 379577741,\n 759155483,\n 1518310967,\n\n // chunk #10\n 379,\n 761,\n 1523,\n 3049,\n 6101,\n 12203,\n 24407,\n 48817,\n 97649,\n 195311,\n 390647,\n 781301,\n 1562611,\n 3125257,\n 6250537,\n 12501169,\n 25002389,\n 50004791,\n 100009607,\n 200019221,\n 400038451,\n 800076929,\n 1600153859,\n\n // chunk #11\n 13,\n 29,\n 59,\n 127,\n 257,\n 521,\n 1049,\n 2099,\n 4201,\n 8419,\n 16843,\n 33703,\n 67409,\n 134837,\n 269683,\n 539389,\n 1078787,\n 2157587,\n 4315183,\n 8630387,\n 17260781,\n 34521589,\n 69043189,\n 138086407,\n 276172823,\n 552345671,\n 1104691373,\n\n // chunk #12\n 19,\n 41,\n 83,\n 167,\n 337,\n 677,\n 1361,\n 2729,\n 5471,\n 10949,\n 21911,\n 43853,\n 87719,\n 175447,\n 350899,\n 701819,\n 1403641,\n 2807303,\n 5614657,\n 11229331,\n 22458671,\n 44917381,\n 89834777,\n 179669557,\n 359339171,\n 718678369,\n 1437356741,\n\n // chunk #13\n 53,\n 107,\n 223,\n 449,\n 907,\n 1823,\n 3659,\n 7321,\n 14653,\n 29311,\n 58631,\n 117269,\n 234539,\n 469099,\n 938207,\n 1876417,\n 3752839,\n 7505681,\n 15011389,\n 30022781,\n 60045577,\n 120091177,\n 240182359,\n 480364727,\n 960729461,\n 1921458943\n];\n\nprimeNumbers.sort(ascending);\n\nexport function nextPrime(value) {\n let index = binarySearch(primeNumbers, value, ascending);\n if (index < 0) {\n index = ~index;\n }\n return primeNumbers[index];\n}\n","import { largestPrime, nextPrime } from './primeFinder';\n\nconst FREE = 0;\nconst FULL = 1;\nconst REMOVED = 2;\n\nconst defaultInitialCapacity = 150;\nconst defaultMinLoadFactor = 1 / 6;\nconst defaultMaxLoadFactor = 2 / 3;\n\nexport default class HashTable {\n constructor(options = {}) {\n if (options instanceof HashTable) {\n this.table = options.table.slice();\n this.values = options.values.slice();\n this.state = options.state.slice();\n this.minLoadFactor = options.minLoadFactor;\n this.maxLoadFactor = options.maxLoadFactor;\n this.distinct = options.distinct;\n this.freeEntries = options.freeEntries;\n this.lowWaterMark = options.lowWaterMark;\n this.highWaterMark = options.maxLoadFactor;\n return;\n }\n\n const initialCapacity =\n options.initialCapacity === undefined\n ? defaultInitialCapacity\n : options.initialCapacity;\n if (initialCapacity < 0) {\n throw new RangeError(\n `initial capacity must not be less than zero: ${initialCapacity}`\n );\n }\n\n const minLoadFactor =\n options.minLoadFactor === undefined\n ? defaultMinLoadFactor\n : options.minLoadFactor;\n const maxLoadFactor =\n options.maxLoadFactor === undefined\n ? defaultMaxLoadFactor\n : options.maxLoadFactor;\n if (minLoadFactor < 0 || minLoadFactor >= 1) {\n throw new RangeError(`invalid minLoadFactor: ${minLoadFactor}`);\n }\n if (maxLoadFactor <= 0 || maxLoadFactor >= 1) {\n throw new RangeError(`invalid maxLoadFactor: ${maxLoadFactor}`);\n }\n if (minLoadFactor >= maxLoadFactor) {\n throw new RangeError(\n `minLoadFactor (${minLoadFactor}) must be smaller than maxLoadFactor (${maxLoadFactor})`\n );\n }\n\n let capacity = initialCapacity;\n // User wants to put at least capacity elements. We need to choose the size based on the maxLoadFactor to\n // avoid the need to rehash before this capacity is reached.\n // actualCapacity * maxLoadFactor >= capacity\n capacity = (capacity / maxLoadFactor) | 0;\n capacity = nextPrime(capacity);\n if (capacity === 0) capacity = 1;\n\n this.table = newArray(capacity);\n this.values = newArray(capacity);\n this.state = newArray(capacity);\n\n this.minLoadFactor = minLoadFactor;\n if (capacity === largestPrime) {\n this.maxLoadFactor = 1;\n } else {\n this.maxLoadFactor = maxLoadFactor;\n }\n\n this.distinct = 0;\n this.freeEntries = capacity;\n\n this.lowWaterMark = 0;\n this.highWaterMark = chooseHighWaterMark(capacity, this.maxLoadFactor);\n }\n\n clone() {\n return new HashTable(this);\n }\n\n get size() {\n return this.distinct;\n }\n\n get(key) {\n const i = this.indexOfKey(key);\n if (i < 0) return 0;\n return this.values[i];\n }\n\n set(key, value) {\n let i = this.indexOfInsertion(key);\n if (i < 0) {\n i = -i - 1;\n this.values[i] = value;\n return false;\n }\n\n if (this.distinct > this.highWaterMark) {\n const newCapacity = chooseGrowCapacity(\n this.distinct + 1,\n this.minLoadFactor,\n this.maxLoadFactor\n );\n this.rehash(newCapacity);\n return this.set(key, value);\n }\n\n this.table[i] = key;\n this.values[i] = value;\n if (this.state[i] === FREE) this.freeEntries--;\n this.state[i] = FULL;\n this.distinct++;\n\n if (this.freeEntries < 1) {\n const newCapacity = chooseGrowCapacity(\n this.distinct + 1,\n this.minLoadFactor,\n this.maxLoadFactor\n );\n this.rehash(newCapacity);\n }\n\n return true;\n }\n\n remove(key, noRehash) {\n const i = this.indexOfKey(key);\n if (i < 0) return false;\n\n this.state[i] = REMOVED;\n this.distinct--;\n\n if (!noRehash) this.maybeShrinkCapacity();\n\n return true;\n }\n\n delete(key, noRehash) {\n const i = this.indexOfKey(key);\n if (i < 0) return false;\n\n this.state[i] = FREE;\n this.distinct--;\n\n if (!noRehash) this.maybeShrinkCapacity();\n\n return true;\n }\n\n maybeShrinkCapacity() {\n if (this.distinct < this.lowWaterMark) {\n const newCapacity = chooseShrinkCapacity(\n this.distinct,\n this.minLoadFactor,\n this.maxLoadFactor\n );\n this.rehash(newCapacity);\n }\n }\n\n containsKey(key) {\n return this.indexOfKey(key) >= 0;\n }\n\n indexOfKey(key) {\n const table = this.table;\n const state = this.state;\n const length = this.table.length;\n\n const hash = key & 0x7fffffff;\n let i = hash % length;\n let decrement = hash % (length - 2);\n if (decrement === 0) decrement = 1;\n\n while (state[i] !== FREE && (state[i] === REMOVED || table[i] !== key)) {\n i -= decrement;\n if (i < 0) i += length;\n }\n\n if (state[i] === FREE) return -1;\n return i;\n }\n\n containsValue(value) {\n return this.indexOfValue(value) >= 0;\n }\n\n indexOfValue(value) {\n const values = this.values;\n const state = this.state;\n\n for (var i = 0; i < state.length; i++) {\n if (state[i] === FULL && values[i] === value) {\n return i;\n }\n }\n\n return -1;\n }\n\n indexOfInsertion(key) {\n const table = this.table;\n const state = this.state;\n const length = table.length;\n\n const hash = key & 0x7fffffff;\n let i = hash % length;\n let decrement = hash % (length - 2);\n if (decrement === 0) decrement = 1;\n\n while (state[i] === FULL && table[i] !== key) {\n i -= decrement;\n if (i < 0) i += length;\n }\n\n if (state[i] === REMOVED) {\n const j = i;\n while (state[i] !== FREE && (state[i] === REMOVED || table[i] !== key)) {\n i -= decrement;\n if (i < 0) i += length;\n }\n if (state[i] === FREE) i = j;\n }\n\n if (state[i] === FULL) {\n return -i - 1;\n }\n\n return i;\n }\n\n ensureCapacity(minCapacity) {\n if (this.table.length < minCapacity) {\n const newCapacity = nextPrime(minCapacity);\n this.rehash(newCapacity);\n }\n }\n\n rehash(newCapacity) {\n const oldCapacity = this.table.length;\n\n if (newCapacity <= this.distinct) throw new Error('Unexpected');\n\n const oldTable = this.table;\n const oldValues = this.values;\n const oldState = this.state;\n\n const newTable = newArray(newCapacity);\n const newValues = newArray(newCapacity);\n const newState = newArray(newCapacity);\n\n this.lowWaterMark = chooseLowWaterMark(newCapacity, this.minLoadFactor);\n this.highWaterMark = chooseHighWaterMark(newCapacity, this.maxLoadFactor);\n\n this.table = newTable;\n this.values = newValues;\n this.state = newState;\n this.freeEntries = newCapacity - this.distinct;\n\n for (var i = 0; i < oldCapacity; i++) {\n if (oldState[i] === FULL) {\n var element = oldTable[i];\n var index = this.indexOfInsertion(element);\n newTable[index] = element;\n newValues[index] = oldValues[i];\n newState[index] = FULL;\n }\n }\n }\n\n forEachKey(callback) {\n for (var i = 0; i < this.state.length; i++) {\n if (this.state[i] === FULL) {\n if (!callback(this.table[i])) return false;\n }\n }\n return true;\n }\n\n forEachValue(callback) {\n for (var i = 0; i < this.state.length; i++) {\n if (this.state[i] === FULL) {\n if (!callback(this.values[i])) return false;\n }\n }\n return true;\n }\n\n forEachPair(callback) {\n for (var i = 0; i < this.state.length; i++) {\n if (this.state[i] === FULL) {\n if (!callback(this.table[i], this.values[i])) return false;\n }\n }\n return true;\n }\n}\n\nfunction chooseLowWaterMark(capacity, minLoad) {\n return (capacity * minLoad) | 0;\n}\n\nfunction chooseHighWaterMark(capacity, maxLoad) {\n return Math.min(capacity - 2, (capacity * maxLoad) | 0);\n}\n\nfunction chooseGrowCapacity(size, minLoad, maxLoad) {\n return nextPrime(\n Math.max(size + 1, ((4 * size) / (3 * minLoad + maxLoad)) | 0)\n );\n}\n\nfunction chooseShrinkCapacity(size, minLoad, maxLoad) {\n return nextPrime(\n Math.max(size + 1, ((4 * size) / (minLoad + 3 * maxLoad)) | 0)\n );\n}\n\nfunction newArray(size) {\n return Array(size).fill(0);\n}\n","import HashTable from 'ml-hash-table';\n\nexport class SparseMatrix {\n constructor(rows, columns, options = {}) {\n if (rows instanceof SparseMatrix) {\n // clone\n const other = rows;\n this._init(\n other.rows,\n other.columns,\n other.elements.clone(),\n other.threshold\n );\n return;\n }\n\n if (Array.isArray(rows)) {\n const matrix = rows;\n rows = matrix.length;\n options = columns || {};\n columns = matrix[0].length;\n this._init(rows, columns, new HashTable(options), options.threshold);\n for (var i = 0; i < rows; i++) {\n for (var j = 0; j < columns; j++) {\n var value = matrix[i][j];\n if (this.threshold && Math.abs(value) < this.threshold) value = 0;\n if (value !== 0) {\n this.elements.set(i * columns + j, matrix[i][j]);\n }\n }\n }\n } else {\n this._init(rows, columns, new HashTable(options), options.threshold);\n }\n }\n\n _init(rows, columns, elements, threshold) {\n this.rows = rows;\n this.columns = columns;\n this.elements = elements;\n this.threshold = threshold || 0;\n }\n\n static eye(rows = 1, columns = rows) {\n const min = Math.min(rows, columns);\n const matrix = new SparseMatrix(rows, columns, { initialCapacity: min });\n for (var i = 0; i < min; i++) {\n matrix.set(i, i, 1);\n }\n return matrix;\n }\n\n clone() {\n return new SparseMatrix(this);\n }\n\n to2DArray() {\n const copy = new Array(this.rows);\n for (var i = 0; i < this.rows; i++) {\n copy[i] = new Array(this.columns);\n for (var j = 0; j < this.columns; j++) {\n copy[i][j] = this.get(i, j);\n }\n }\n return copy;\n }\n\n isSquare() {\n return this.rows === this.columns;\n }\n\n isSymmetric() {\n if (!this.isSquare()) return false;\n\n var symmetric = true;\n this.forEachNonZero((i, j, v) => {\n if (this.get(j, i) !== v) {\n symmetric = false;\n return false;\n }\n return v;\n });\n return symmetric;\n }\n\n /**\n * Search for the wither band in the main diagonals\n * @return {number}\n */\n bandWidth() {\n let min = this.columns;\n let max = -1;\n this.forEachNonZero((i, j, v) => {\n let diff = i - j;\n min = Math.min(min, diff);\n max = Math.max(max, diff);\n return v;\n });\n return max - min;\n }\n\n /**\n * Test if a matrix is consider banded using a threshold\n * @param {number} width\n * @return {boolean}\n */\n isBanded(width) {\n let bandWidth = this.bandWidth();\n return bandWidth <= width;\n }\n\n get cardinality() {\n return this.elements.size;\n }\n\n get size() {\n return this.rows * this.columns;\n }\n\n get(row, column) {\n return this.elements.get(row * this.columns + column);\n }\n\n set(row, column, value) {\n if (this.threshold && Math.abs(value) < this.threshold) value = 0;\n if (value === 0) {\n this.elements.remove(row * this.columns + column);\n } else {\n this.elements.set(row * this.columns + column, value);\n }\n return this;\n }\n\n mmul(other) {\n if (this.columns !== other.rows) {\n // eslint-disable-next-line no-console\n console.warn(\n 'Number of columns of left matrix are not equal to number of rows of right matrix.'\n );\n }\n\n const m = this.rows;\n const p = other.columns;\n\n const result = new SparseMatrix(m, p);\n this.forEachNonZero((i, j, v1) => {\n other.forEachNonZero((k, l, v2) => {\n if (j === k) {\n result.set(i, l, result.get(i, l) + v1 * v2);\n }\n return v2;\n });\n return v1;\n });\n return result;\n }\n\n kroneckerProduct(other) {\n const m = this.rows;\n const n = this.columns;\n const p = other.rows;\n const q = other.columns;\n\n const result = new SparseMatrix(m * p, n * q, {\n initialCapacity: this.cardinality * other.cardinality\n });\n this.forEachNonZero((i, j, v1) => {\n other.forEachNonZero((k, l, v2) => {\n result.set(p * i + k, q * j + l, v1 * v2);\n return v2;\n });\n return v1;\n });\n return result;\n }\n\n forEachNonZero(callback) {\n this.elements.forEachPair((key, value) => {\n const i = (key / this.columns) | 0;\n const j = key % this.columns;\n let r = callback(i, j, value);\n if (r === false) return false; // stop iteration\n if (this.threshold && Math.abs(r) < this.threshold) r = 0;\n if (r !== value) {\n if (r === 0) {\n this.elements.remove(key, true);\n } else {\n this.elements.set(key, r);\n }\n }\n return true;\n });\n this.elements.maybeShrinkCapacity();\n return this;\n }\n\n getNonZeros() {\n const cardinality = this.cardinality;\n const rows = new Array(cardinality);\n const columns = new Array(cardinality);\n const values = new Array(cardinality);\n var idx = 0;\n this.forEachNonZero((i, j, value) => {\n rows[idx] = i;\n columns[idx] = j;\n values[idx] = value;\n idx++;\n return value;\n });\n return { rows, columns, values };\n }\n\n setThreshold(newThreshold) {\n if (newThreshold !== 0 && newThreshold !== this.threshold) {\n this.threshold = newThreshold;\n this.forEachNonZero((i, j, v) => v);\n }\n return this;\n }\n\n /**\n * @return {SparseMatrix} - New transposed sparse matrix\n */\n transpose() {\n let trans = new SparseMatrix(this.columns, this.rows, {\n initialCapacity: this.cardinality\n });\n this.forEachNonZero((i, j, value) => {\n trans.set(j, i, value);\n return value;\n });\n return trans;\n }\n}\n\nSparseMatrix.prototype.klass = 'Matrix';\n\nSparseMatrix.identity = SparseMatrix.eye;\nSparseMatrix.prototype.tensorProduct = SparseMatrix.prototype.kroneckerProduct;\n\n/*\n Add dynamically instance and static methods for mathematical operations\n */\n\nvar inplaceOperator = `\n(function %name%(value) {\n if (typeof value === 'number') return this.%name%S(value);\n return this.%name%M(value);\n})\n`;\n\nvar inplaceOperatorScalar = `\n(function %name%S(value) {\n this.forEachNonZero((i, j, v) => v %op% value);\n return this;\n})\n`;\n\nvar inplaceOperatorMatrix = `\n(function %name%M(matrix) {\n matrix.forEachNonZero((i, j, v) => {\n this.set(i, j, this.get(i, j) %op% v);\n return v;\n });\n return this;\n})\n`;\n\nvar staticOperator = `\n(function %name%(matrix, value) {\n var newMatrix = new SparseMatrix(matrix);\n return newMatrix.%name%(value);\n})\n`;\n\nvar inplaceMethod = `\n(function %name%() {\n this.forEachNonZero((i, j, v) => %method%(v));\n return this;\n})\n`;\n\nvar staticMethod = `\n(function %name%(matrix) {\n var newMatrix = new SparseMatrix(matrix);\n return newMatrix.%name%();\n})\n`;\n\nconst operators = [\n // Arithmetic operators\n ['+', 'add'],\n ['-', 'sub', 'subtract'],\n ['*', 'mul', 'multiply'],\n ['/', 'div', 'divide'],\n ['%', 'mod', 'modulus'],\n // Bitwise operators\n ['&', 'and'],\n ['|', 'or'],\n ['^', 'xor'],\n ['<<', 'leftShift'],\n ['>>', 'signPropagatingRightShift'],\n ['>>>', 'rightShift', 'zeroFillRightShift']\n];\n\nfor (const operator of operators) {\n for (let i = 1; i < operator.length; i++) {\n SparseMatrix.prototype[operator[i]] = eval(\n fillTemplateFunction(inplaceOperator, {\n name: operator[i],\n op: operator[0]\n })\n );\n SparseMatrix.prototype[`${operator[i]}S`] = eval(\n fillTemplateFunction(inplaceOperatorScalar, {\n name: `${operator[i]}S`,\n op: operator[0]\n })\n );\n SparseMatrix.prototype[`${operator[i]}M`] = eval(\n fillTemplateFunction(inplaceOperatorMatrix, {\n name: `${operator[i]}M`,\n op: operator[0]\n })\n );\n\n SparseMatrix[operator[i]] = eval(\n fillTemplateFunction(staticOperator, { name: operator[i] })\n );\n }\n}\n\nvar methods = [['~', 'not']];\n\n[\n 'abs',\n 'acos',\n 'acosh',\n 'asin',\n 'asinh',\n 'atan',\n 'atanh',\n 'cbrt',\n 'ceil',\n 'clz32',\n 'cos',\n 'cosh',\n 'exp',\n 'expm1',\n 'floor',\n 'fround',\n 'log',\n 'log1p',\n 'log10',\n 'log2',\n 'round',\n 'sign',\n 'sin',\n 'sinh',\n 'sqrt',\n 'tan',\n 'tanh',\n 'trunc'\n].forEach(function (mathMethod) {\n methods.push([`Math.${mathMethod}`, mathMethod]);\n});\n\nfor (const method of methods) {\n for (let i = 1; i < method.length; i++) {\n SparseMatrix.prototype[method[i]] = eval(\n fillTemplateFunction(inplaceMethod, {\n name: method[i],\n method: method[0]\n })\n );\n SparseMatrix[method[i]] = eval(\n fillTemplateFunction(staticMethod, { name: method[i] })\n );\n }\n}\n\nfunction fillTemplateFunction(template, values) {\n for (const i in values) {\n template = template.replace(new RegExp(`%${i}%`, 'g'), values[i]);\n }\n return template;\n}\n","export default function additiveSymmetric(a, b) {\n var i = 0;\n var ii = a.length;\n var d = 0;\n for (; i < ii; i++) {\n d += ((a[i] - b[i]) * (a[i] - b[i]) * (a[i] + b[i])) / (a[i] * b[i]);\n }\n return 2 * d;\n}\n","export default function avg(a, b) {\n var ii = a.length;\n var max = 0;\n var ans = 0;\n var aux = 0;\n for (var i = 0; i < ii; i++) {\n aux = Math.abs(a[i] - b[i]);\n ans += aux;\n if (max < aux) {\n max = aux;\n }\n }\n return (max + ans) / 2;\n}\n","export default function bhattacharyya(a, b) {\n var ii = a.length;\n var ans = 0;\n for (var i = 0; i < ii; i++) {\n ans += Math.sqrt(a[i] * b[i]);\n }\n return -Math.log(ans);\n}\n","export default function canberra(a, b) {\n var ii = a.length;\n var ans = 0;\n for (var i = 0; i < ii; i++) {\n ans += Math.abs(a[i] - b[i]) / (a[i] + b[i]);\n }\n return ans;\n}\n","export default function chebyshev(a, b) {\n var ii = a.length;\n var max = 0;\n var aux = 0;\n for (var i = 0; i < ii; i++) {\n aux = Math.abs(a[i] - b[i]);\n if (max < aux) {\n max = aux;\n }\n }\n return max;\n}\n","export default function clark(a, b) {\n var i = 0;\n var ii = a.length;\n var d = 0;\n for (; i < ii; i++) {\n d += Math.sqrt(\n ((a[i] - b[i]) * (a[i] - b[i])) / ((a[i] + b[i]) * (a[i] + b[i]))\n );\n }\n return 2 * d;\n}\n","export default function czekanowskiSimilarity(a, b) {\n var up = 0;\n var down = 0;\n for (var i = 0; i < a.length; i++) {\n up += Math.min(a[i], b[i]);\n down += a[i] + b[i];\n }\n return (2 * up) / down;\n}\n","import czekanowskiSimilarity from '../similarities/czekanowski';\n\nexport default function czekanowskiDistance(a, b) {\n return 1 - czekanowskiSimilarity(a, b);\n}\n","export default function dice(a, b) {\n var ii = a.length;\n var p = 0;\n var q1 = 0;\n var q2 = 0;\n for (var i = 0; i < ii; i++) {\n p += a[i] * a[i];\n q1 += b[i] * b[i];\n q2 += (a[i] - b[i]) * (a[i] - b[i]);\n }\n return q2 / (p + q1);\n}\n","export default function divergence(a, b) {\n var i = 0;\n var ii = a.length;\n var d = 0;\n for (; i < ii; i++) {\n d += ((a[i] - b[i]) * (a[i] - b[i])) / ((a[i] + b[i]) * (a[i] + b[i]));\n }\n return 2 * d;\n}\n","export default function fidelity(a, b) {\n var ii = a.length;\n var ans = 0;\n for (var i = 0; i < ii; i++) {\n ans += Math.sqrt(a[i] * b[i]);\n }\n return ans;\n}\n","export default function gower(a, b) {\n var ii = a.length;\n var ans = 0;\n for (var i = 0; i < ii; i++) {\n ans += Math.abs(a[i] - b[i]);\n }\n return ans / ii;\n}\n","export default function harmonicMean(a, b) {\n var ii = a.length;\n var ans = 0;\n for (var i = 0; i < ii; i++) {\n ans += (a[i] * b[i]) / (a[i] + b[i]);\n }\n return 2 * ans;\n}\n","export default function hellinger(a, b) {\n var ii = a.length;\n var ans = 0;\n for (var i = 0; i < ii; i++) {\n ans += Math.sqrt(a[i] * b[i]);\n }\n return 2 * Math.sqrt(1 - ans);\n}\n","export default function innerProduct(a, b) {\n var ii = a.length;\n var ans = 0;\n for (var i = 0; i < ii; i++) {\n ans += a[i] * b[i];\n }\n return ans;\n}\n","export default function intersection(a, b) {\n var ii = a.length;\n var ans = 0;\n for (var i = 0; i < ii; i++) {\n ans += Math.min(a[i], b[i]);\n }\n return 1 - ans;\n}\n","export default function jaccard(a, b) {\n var ii = a.length;\n var p1 = 0;\n var p2 = 0;\n var q1 = 0;\n var q2 = 0;\n for (var i = 0; i < ii; i++) {\n p1 += a[i] * b[i];\n p2 += a[i] * a[i];\n q1 += b[i] * b[i];\n q2 += (a[i] - b[i]) * (a[i] - b[i]);\n }\n return q2 / (p2 + q1 - p1);\n}\n","export default function jeffreys(a, b) {\n var ii = a.length;\n var ans = 0;\n for (var i = 0; i < ii; i++) {\n ans += (a[i] - b[i]) * Math.log(a[i] / b[i]);\n }\n return ans;\n}\n","export default function jensenDifference(a, b) {\n var ii = a.length;\n var ans = 0;\n for (var i = 0; i < ii; i++) {\n ans +=\n (a[i] * Math.log(a[i]) + b[i] * Math.log(b[i])) / 2 -\n ((a[i] + b[i]) / 2) * Math.log((a[i] + b[i]) / 2);\n }\n return ans;\n}\n","export default function jensenShannon(a, b) {\n var ii = a.length;\n var p = 0;\n var q = 0;\n for (var i = 0; i < ii; i++) {\n p += a[i] * Math.log((2 * a[i]) / (a[i] + b[i]));\n q += b[i] * Math.log((2 * b[i]) / (a[i] + b[i]));\n }\n return (p + q) / 2;\n}\n","export default function kdivergence(a, b) {\n var ii = a.length;\n var ans = 0;\n for (var i = 0; i < ii; i++) {\n ans += a[i] * Math.log((2 * a[i]) / (a[i] + b[i]));\n }\n return ans;\n}\n","export default function kulczynski(a, b) {\n var ii = a.length;\n var up = 0;\n var down = 0;\n for (var i = 0; i < ii; i++) {\n up += Math.abs(a[i] - b[i]);\n down += Math.min(a[i], b[i]);\n }\n return up / down;\n}\n","export default function kullbackLeibler(a, b) {\n var ii = a.length;\n var ans = 0;\n for (var i = 0; i < ii; i++) {\n ans += a[i] * Math.log(a[i] / b[i]);\n }\n return ans;\n}\n","export default function kumarHassebrook(a, b) {\n var ii = a.length;\n var p = 0;\n var p2 = 0;\n var q2 = 0;\n for (var i = 0; i < ii; i++) {\n p += a[i] * b[i];\n p2 += a[i] * a[i];\n q2 += b[i] * b[i];\n }\n return p / (p2 + q2 - p);\n}\n","export default function kumarJohnson(a, b) {\n var ii = a.length;\n var ans = 0;\n for (var i = 0; i < ii; i++) {\n ans +=\n Math.pow(a[i] * a[i] - b[i] * b[i], 2) / (2 * Math.pow(a[i] * b[i], 1.5));\n }\n return ans;\n}\n","export default function lorentzian(a, b) {\n var ii = a.length;\n var ans = 0;\n for (var i = 0; i < ii; i++) {\n ans += Math.log(Math.abs(a[i] - b[i]) + 1);\n }\n return ans;\n}\n","export default function manhattan(a, b) {\n var i = 0;\n var ii = a.length;\n var d = 0;\n for (; i < ii; i++) {\n d += Math.abs(a[i] - b[i]);\n }\n return d;\n}\n","export default function matusita(a, b) {\n var ii = a.length;\n var ans = 0;\n for (var i = 0; i < ii; i++) {\n ans += Math.sqrt(a[i] * b[i]);\n }\n return Math.sqrt(2 - 2 * ans);\n}\n","export default function minkowski(a, b, p) {\n var i = 0;\n var ii = a.length;\n var d = 0;\n for (; i < ii; i++) {\n d += Math.pow(Math.abs(a[i] - b[i]), p);\n }\n return Math.pow(d, 1 / p);\n}\n","export default function motyka(a, b) {\n var ii = a.length;\n var up = 0;\n var down = 0;\n for (var i = 0; i < ii; i++) {\n up += Math.min(a[i], b[i]);\n down += a[i] + b[i];\n }\n return 1 - up / down;\n}\n","export default function neyman(a, b) {\n var i = 0;\n var ii = a.length;\n var d = 0;\n for (; i < ii; i++) {\n d += ((a[i] - b[i]) * (a[i] - b[i])) / a[i];\n }\n return d;\n}\n","export default function pearson(a, b) {\n var i = 0;\n var ii = a.length;\n var d = 0;\n for (; i < ii; i++) {\n d += ((a[i] - b[i]) * (a[i] - b[i])) / b[i];\n }\n return d;\n}\n","export default function probabilisticSymmetric(a, b) {\n var i = 0;\n var ii = a.length;\n var d = 0;\n for (; i < ii; i++) {\n d += ((a[i] - b[i]) * (a[i] - b[i])) / (a[i] + b[i]);\n }\n return 2 * d;\n}\n","export default function ruzicka(a, b) {\n var ii = a.length;\n var up = 0;\n var down = 0;\n for (var i = 0; i < ii; i++) {\n up += Math.min(a[i], b[i]);\n down += Math.max(a[i], b[i]);\n }\n return up / down;\n}\n","export default function soergel(a, b) {\n var ii = a.length;\n var up = 0;\n var down = 0;\n for (var i = 0; i < ii; i++) {\n up += Math.abs(a[i] - b[i]);\n down += Math.max(a[i], b[i]);\n }\n return up / down;\n}\n","export default function sorensen(a, b) {\n var ii = a.length;\n var up = 0;\n var down = 0;\n for (var i = 0; i < ii; i++) {\n up += Math.abs(a[i] - b[i]);\n down += a[i] + b[i];\n }\n return up / down;\n}\n","export default function squared(a, b) {\n var i = 0;\n var ii = a.length;\n var d = 0;\n for (; i < ii; i++) {\n d += ((a[i] - b[i]) * (a[i] - b[i])) / (a[i] + b[i]);\n }\n return d;\n}\n","export default function squaredChord(a, b) {\n var ii = a.length;\n var ans = 0;\n for (var i = 0; i < ii; i++) {\n ans +=\n (Math.sqrt(a[i]) - Math.sqrt(b[i])) * (Math.sqrt(a[i]) - Math.sqrt(b[i]));\n }\n return ans;\n}\n","export default function taneja(a, b) {\n var ii = a.length;\n var ans = 0;\n for (var i = 0; i < ii; i++) {\n ans +=\n ((a[i] + b[i]) / 2) *\n Math.log((a[i] + b[i]) / (2 * Math.sqrt(a[i] * b[i])));\n }\n return ans;\n}\n","export default function tanimoto(a, b, bitvector) {\n if (bitvector) {\n var inter = 0;\n var union = 0;\n for (var j = 0; j < a.length; j++) {\n inter += a[j] && b[j];\n union += a[j] || b[j];\n }\n if (union === 0) {\n return 1;\n }\n return inter / union;\n } else {\n var ii = a.length;\n var p = 0;\n var q = 0;\n var m = 0;\n for (var i = 0; i < ii; i++) {\n p += a[i];\n q += b[i];\n m += Math.min(a[i], b[i]);\n }\n return 1 - (p + q - 2 * m) / (p + q - m);\n }\n}\n","import tanimotoS from '../similarities/tanimoto';\n\nexport default function tanimoto(a, b, bitvector) {\n if (bitvector) {\n return 1 - tanimotoS(a, b, bitvector);\n } else {\n var ii = a.length;\n var p = 0;\n var q = 0;\n var m = 0;\n for (var i = 0; i < ii; i++) {\n p += a[i];\n q += b[i];\n m += Math.min(a[i], b[i]);\n }\n return (p + q - 2 * m) / (p + q - m);\n }\n}\n","export default function topsoe(a, b) {\n var ii = a.length;\n var ans = 0;\n for (var i = 0; i < ii; i++) {\n ans +=\n a[i] * Math.log((2 * a[i]) / (a[i] + b[i])) +\n b[i] * Math.log((2 * b[i]) / (a[i] + b[i]));\n }\n return ans;\n}\n","export default function waveHedges(a, b) {\n var ii = a.length;\n var ans = 0;\n for (var i = 0; i < ii; i++) {\n ans += 1 - Math.min(a[i], b[i]) / Math.max(a[i], b[i]);\n }\n return ans;\n}\n","import binarySearch from 'binary-search';\nimport { ascending } from 'num-sort';\n\n/**\n * Function that creates the tree\n * @param {Array>} spectrum\n * @param {object} [options]\n * @return {Tree|null}\n * left and right have the same structure than the parent,\n * or are null if they are leaves\n */\nexport function createTree(spectrum, options = {}) {\n var X = spectrum[0];\n const {\n minWindow = 0.16,\n threshold = 0.01,\n from = X[0],\n to = X[X.length - 1]\n } = options;\n\n return mainCreateTree(\n spectrum[0],\n spectrum[1],\n from,\n to,\n minWindow,\n threshold\n );\n}\n\nfunction mainCreateTree(X, Y, from, to, minWindow, threshold) {\n if (to - from < minWindow) {\n return null;\n }\n\n // search first point\n var start = binarySearch(X, from, ascending);\n if (start < 0) {\n start = ~start;\n }\n\n // stop at last point\n var sum = 0;\n var center = 0;\n for (var i = start; i < X.length; i++) {\n if (X[i] >= to) {\n break;\n }\n sum += Y[i];\n center += X[i] * Y[i];\n }\n\n if (sum < threshold) {\n return null;\n }\n\n center /= sum;\n if (center - from < 1e-6 || to - center < 1e-6) {\n return null;\n }\n if (center - from < minWindow / 4) {\n return mainCreateTree(X, Y, center, to, minWindow, threshold);\n } else {\n if (to - center < minWindow / 4) {\n return mainCreateTree(X, Y, from, center, minWindow, threshold);\n } else {\n return new Tree(\n sum,\n center,\n mainCreateTree(X, Y, from, center, minWindow, threshold),\n mainCreateTree(X, Y, center, to, minWindow, threshold)\n );\n }\n }\n}\n\nclass Tree {\n constructor(sum, center, left, right) {\n this.sum = sum;\n this.center = center;\n this.left = left;\n this.right = right;\n }\n}\n","import { createTree } from './createTree';\n\n/**\n * Similarity between two nodes\n * @param {Tree|Array>} a - tree A node\n * @param {Tree|Array>} b - tree B node\n * @param {object} [options]\n * @return {number} similarity measure between tree nodes\n */\nexport function getSimilarity(a, b, options = {}) {\n const { alpha = 0.1, beta = 0.33, gamma = 0.001 } = options;\n\n if (a === null || b === null) {\n return 0;\n }\n if (Array.isArray(a)) {\n a = createTree(a);\n }\n if (Array.isArray(b)) {\n b = createTree(b);\n }\n\n var C =\n (alpha * Math.min(a.sum, b.sum)) / Math.max(a.sum, b.sum) +\n (1 - alpha) * Math.exp(-gamma * Math.abs(a.center - b.center));\n\n return (\n beta * C +\n ((1 - beta) *\n (getSimilarity(a.left, b.left, options) +\n getSimilarity(a.right, b.right, options))) /\n 2\n );\n}\n","import { getSimilarity } from './getSimilarity';\n\nexport { createTree } from './createTree';\n\nexport function treeSimilarity(A, B, options = {}) {\n return getSimilarity(A, B, options);\n}\n\nexport function getFunction(options = {}) {\n return (A, B) => getSimilarity(A, B, options);\n}\n","export default function cosine(a, b) {\n var ii = a.length;\n var p = 0;\n var p2 = 0;\n var q2 = 0;\n for (var i = 0; i < ii; i++) {\n p += a[i] * b[i];\n p2 += a[i] * a[i];\n q2 += b[i] * b[i];\n }\n return p / (Math.sqrt(p2) * Math.sqrt(q2));\n}\n","import diceD from '../distances/dice';\n\nexport default function dice(a, b) {\n return 1 - diceD(a, b);\n}\n","import intersectionD from '../distances/intersection';\n\nexport default function intersection(a, b) {\n return 1 - intersectionD(a, b);\n}\n","import jaccardD from '../distances/jaccard';\n\nexport default function jaccard(a, b) {\n return 1 - jaccardD(a, b);\n}\n","import kulczynskiD from '../distances/kulczynski';\n\nexport default function kulczynski(a, b) {\n return 1 / kulczynskiD(a, b);\n}\n","import motykaD from '../distances/motyka';\n\nexport default function motyka(a, b) {\n return 1 - motykaD(a, b);\n}\n","import mean from 'ml-array-mean';\n\nimport cosine from './cosine';\n\nexport default function pearson(a, b) {\n var avgA = mean(a);\n var avgB = mean(b);\n\n var newA = new Array(a.length);\n var newB = new Array(b.length);\n for (var i = 0; i < newA.length; i++) {\n newA[i] = a[i] - avgA;\n newB[i] = b[i] - avgB;\n }\n\n return cosine(newA, newB);\n}\n","import squaredChordD from '../distances/squaredChord';\n\nexport default function squaredChord(a, b) {\n return 1 - squaredChordD(a, b);\n}\n","'use strict';\n\n// Accuracy\nexports.acc = pred => {\n const l = pred.cutoffs.length;\n const result = new Array(l);\n for (var i = 0; i < l; i++) {\n result[i] = (pred.tn[i] + pred.tp[i]) / (l - 1);\n }\n return result;\n};\n\n// Error rate\nexports.err = pred => {\n const l = pred.cutoffs.length;\n const result = new Array(l);\n for (var i = 0; i < l; i++) {\n result[i] = (pred.fn[i] + pred.fp[i] / (l - 1));\n }\n return result;\n};\n\n// False positive rate\nexports.fpr = pred => {\n const l = pred.cutoffs.length;\n const result = new Array(l);\n for (var i = 0; i < l; i++) {\n result[i] = pred.fp[i] / pred.nNeg;\n }\n return result;\n};\n\n// True positive rate\nexports.tpr = pred => {\n const l = pred.cutoffs.length;\n const result = new Array(l);\n for (var i = 0; i < l; i++) {\n result[i] = pred.tp[i] / pred.nPos;\n }\n return result;\n};\n\n// False negative rate\nexports.fnr = pred => {\n const l = pred.cutoffs.length;\n const result = new Array(l);\n for (var i = 0; i < l; i++) {\n result[i] = pred.fn[i] / pred.nPos;\n }\n return result;\n};\n\n// True negative rate\nexports.tnr = pred => {\n const l = pred.cutoffs.length;\n const result = new Array(l);\n for (var i = 0; i < l; i++) {\n result[i] = pred.tn[i] / pred.nNeg;\n }\n return result;\n};\n\n// Positive predictive value\nexports.ppv = pred => {\n const l = pred.cutoffs.length;\n const result = new Array(l);\n for (var i = 0; i < l; i++) {\n result[i] = (pred.fp[i] + pred.tp[i] !== 0) ? (pred.tp[i] / (pred.fp[i] + pred.tp[i])) : 0;\n }\n return result;\n};\n\n// Negative predictive value\nexports.npv = pred => {\n const l = pred.cutoffs.length;\n const result = new Array(l);\n for (var i = 0; i < l; i++) {\n result[i] = (pred.fn[i] + pred.tn[i] !== 0) ? (pred.tn[i] / (pred.fn[i] + pred.tn[i])) : 0;\n }\n return result;\n};\n\n// Prediction conditioned fallout\nexports.pcfall = pred => {\n const l = pred.cutoffs.length;\n const result = new Array(l);\n for (var i = 0; i < l; i++) {\n result[i] = (pred.fp[i] + pred.tp[i] !== 0) ? 1 - (pred.tp[i] / (pred.fp[i] + pred.tp[i])) : 1;\n }\n return result;\n};\n\n// Prediction conditioned miss\nexports.pcmiss = pred => {\n const l = pred.cutoffs.length;\n const result = new Array(l);\n for (var i = 0; i < l; i++) {\n result[i] = (pred.fn[i] + pred.tn[i] !== 0) ? 1 - (pred.tn[i] / (pred.fn[i] + pred.tn[i])) : 1;\n }\n return result;\n};\n\n// Lift value\nexports.lift = pred => {\n const l = pred.cutoffs.length;\n const result = new Array(l);\n for (var i = 0; i < l; i++) {\n result[i] = (pred.nPosPred[i] !== 0) ? ((pred.tp[i] / pred.nPos) / (pred.nPosPred[i] / pred.nSamples)) : 0;\n }\n return result;\n};\n\n// Rate of positive predictions\nexports.rpp = pred => {\n const l = pred.cutoffs.length;\n const result = new Array(l);\n for (var i = 0; i < l; i++) {\n result[i] = pred.nPosPred[i] / pred.nSamples;\n }\n return result;\n};\n\n// Rate of negative predictions\nexports.rnp = pred => {\n const l = pred.cutoffs.length;\n const result = new Array(l);\n for (var i = 0; i < l; i++) {\n result[i] = pred.nNegPred[i] / pred.nSamples;\n }\n return result;\n};\n\n// Threshold\nexports.threshold = pred => {\n const clone = pred.cutoffs.slice();\n clone[0] = clone[1]; // Remove the infinite value\n return clone;\n};\n","'use strict';\n\nconst measures = require('./measures');\n\nclass Performance {\n /**\n *\n * @param prediction - The prediction matrix\n * @param target - The target matrix (values: truthy for same class, falsy for different class)\n * @param options\n *\n * @option all True if the entire matrix must be used. False to ignore the diagonal and lower part (default is false, for similarity/distance matrices)\n * @option max True if the max value corresponds to a perfect match (like in similarity matrices), false if it is the min value (default is false, like in distance matrices. All values will be multiplied by -1)\n */\n constructor(prediction, target, options) {\n options = options || {};\n if (prediction.length !== target.length || prediction[0].length !== target[0].length) {\n throw new Error('dimensions of prediction and target do not match');\n }\n const rows = prediction.length;\n const columns = prediction[0].length;\n const isDistance = !options.max;\n\n const predP = [];\n\n if (options.all) {\n for (var i = 0; i < rows; i++) {\n for (var j = 0; j < columns; j++) {\n predP.push({\n pred: prediction[i][j],\n targ: target[i][j]\n });\n }\n }\n } else {\n if (rows < 3 || rows !== columns) {\n throw new Error('When \"all\" option is false, the prediction matrix must be square and have at least 3 columns');\n }\n for (var i = 0; i < rows - 1; i++) {\n for (var j = i + 1; j < columns; j++) {\n predP.push({\n pred: prediction[i][j],\n targ: target[i][j]\n });\n }\n }\n }\n\n if (isDistance) {\n predP.sort((a, b) => a.pred - b.pred);\n } else {\n predP.sort((a, b) => b.pred - a.pred);\n }\n \n const cutoffs = this.cutoffs = [isDistance ? Number.MIN_VALUE : Number.MAX_VALUE];\n const fp = this.fp = [0];\n const tp = this.tp = [0];\n\n var nPos = 0;\n var nNeg = 0;\n\n var currentPred = predP[0].pred;\n var nTp = 0;\n var nFp = 0;\n for (var i = 0; i < predP.length; i++) {\n if (predP[i].pred !== currentPred) {\n cutoffs.push(currentPred);\n fp.push(nFp);\n tp.push(nTp);\n currentPred = predP[i].pred;\n }\n if (predP[i].targ) {\n nPos++;\n nTp++;\n } else {\n nNeg++;\n nFp++;\n }\n }\n cutoffs.push(currentPred);\n fp.push(nFp);\n tp.push(nTp);\n\n const l = cutoffs.length;\n const fn = this.fn = new Array(l);\n const tn = this.tn = new Array(l);\n const nPosPred = this.nPosPred = new Array(l);\n const nNegPred = this.nNegPred = new Array(l);\n\n for (var i = 0; i < l; i++) {\n fn[i] = nPos - tp[i];\n tn[i] = nNeg - fp[i];\n\n nPosPred[i] = tp[i] + fp[i];\n nNegPred[i] = tn[i] + fn[i];\n }\n\n this.nPos = nPos;\n this.nNeg = nNeg;\n this.nSamples = nPos + nNeg;\n }\n\n /**\n * Computes a measure from the prediction object.\n *\n * Many measures are available and can be combined :\n * To create a ROC curve, you need fpr and tpr\n * To create a DET curve, you need fnr and fpr\n * To create a Lift chart, you need rpp and lift\n *\n * Possible measures are : threshold (Threshold), acc (Accuracy), err (Error rate),\n * fpr (False positive rate), tpr (True positive rate), fnr (False negative rate), tnr (True negative rate), ppv (Positive predictive value),\n * npv (Negative predictive value), pcfall (Prediction-conditioned fallout), pcmiss (Prediction-conditioned miss), lift (Lift value), rpp (Rate of positive predictions), rnp (Rate of negative predictions)\n *\n * @param measure - The short name of the measure\n *\n * @return [number]\n */\n getMeasure(measure) {\n if (typeof measure !== 'string') {\n throw new Error('No measure specified');\n }\n if (!measures[measure]) {\n throw new Error(`The specified measure (${measure}) does not exist`);\n }\n return measures[measure](this);\n }\n\n /**\n * Returns the area under the ROC curve\n */\n getAURC() {\n const l = this.cutoffs.length;\n const x = new Array(l);\n const y = new Array(l);\n for (var i = 0; i < l; i++) {\n x[i] = this.fp[i] / this.nNeg;\n y[i] = this.tp[i] / this.nPos;\n }\n var auc = 0;\n for (i = 1; i < l; i++) {\n auc += 0.5 * (x[i] - x[i - 1]) * (y[i] + y[i - 1]);\n }\n return auc;\n }\n\n /**\n * Returns the area under the DET curve\n */\n getAUDC() {\n const l = this.cutoffs.length;\n const x = new Array(l);\n const y = new Array(l);\n for (var i = 0; i < l; i++) {\n x[i] = this.fn[i] / this.nPos;\n y[i] = this.fp[i] / this.nNeg;\n }\n var auc = 0;\n for (i = 1; i < l; i++) {\n auc += 0.5 * (x[i] + x[i - 1]) * (y[i] - y[i - 1]);\n }\n return auc;\n }\n\n getDistribution(options) {\n options = options || {};\n var cutLength = this.cutoffs.length;\n var cutLow = options.xMin || Math.floor(this.cutoffs[cutLength - 1] * 100) / 100;\n var cutHigh = options.xMax || Math.ceil(this.cutoffs[1] * 100) / 100;\n var interval = options.interval || Math.floor(((cutHigh - cutLow) / 20 * 10000000) - 1) / 10000000; // Trick to avoid the precision problem of float numbers\n\n var xLabels = [];\n var interValues = [];\n var intraValues = [];\n var interCumPercent = [];\n var intraCumPercent = [];\n\n var nTP = this.tp[cutLength - 1], currentTP = 0;\n var nFP = this.fp[cutLength - 1], currentFP = 0;\n\n for (var i = cutLow, j = (cutLength - 1); i <= cutHigh; i += interval) {\n while (this.cutoffs[j] < i)\n j--;\n\n xLabels.push(i);\n\n var thisTP = nTP - currentTP - this.tp[j];\n var thisFP = nFP - currentFP - this.fp[j];\n\n currentTP += thisTP;\n currentFP += thisFP;\n\n interValues.push(thisFP);\n intraValues.push(thisTP);\n\n interCumPercent.push(100 - (nFP - this.fp[j]) / nFP * 100);\n intraCumPercent.push(100 - (nTP - this.tp[j]) / nTP * 100);\n }\n\n return {\n xLabels: xLabels,\n interValues: interValues,\n intraValues: intraValues,\n interCumPercent: interCumPercent,\n intraCumPercent: intraCumPercent\n };\n }\n}\n\nPerformance.names = {\n acc: 'Accuracy',\n err: 'Error rate',\n fpr: 'False positive rate',\n tpr: 'True positive rate',\n fnr: 'False negative rate',\n tnr: 'True negative rate',\n ppv: 'Positive predictive value',\n npv: 'Negative predictive value',\n pcfall: 'Prediction-conditioned fallout',\n pcmiss: 'Prediction-conditioned miss',\n lift: 'Lift value',\n rpp: 'Rate of positive predictions',\n rnp: 'Rate of negative predictions',\n threshold: 'Threshold'\n};\n\nmodule.exports = Performance;\n","'use strict';\n\nvar defaultOptions = {\n size: 1,\n value: 0\n};\n\n/**\n * Case when the entry is an array\n * @param data\n * @param options\n * @returns {Array}\n */\nfunction arrayCase(data, options) {\n var len = data.length;\n if (typeof options.size === 'number') {\n options.size = [options.size, options.size];\n }\n\n var cond = len + options.size[0] + options.size[1];\n\n var output;\n if (options.output) {\n if (options.output.length !== cond) {\n throw new RangeError('Wrong output size');\n }\n output = options.output;\n } else {\n output = new Array(cond);\n }\n\n var i;\n if (options.value === 'circular') {\n for (i = 0; i < cond; i++) {\n if (i < options.size[0]) {\n output[i] = data[(len - (options.size[0] % len) + i) % len];\n } else if (i < options.size[0] + len) {\n output[i] = data[i - options.size[0]];\n } else {\n output[i] = data[(i - options.size[0]) % len];\n }\n }\n } else if (options.value === 'replicate') {\n for (i = 0; i < cond; i++) {\n if (i < options.size[0]) output[i] = data[0];\n else if (i < options.size[0] + len) output[i] = data[i - options.size[0]];\n else output[i] = data[len - 1];\n }\n } else if (options.value === 'symmetric') {\n if (options.size[0] > len || options.size[1] > len) {\n throw new RangeError(\n 'expanded value should not be bigger than the data length'\n );\n }\n for (i = 0; i < cond; i++) {\n if (i < options.size[0]) output[i] = data[options.size[0] - 1 - i];\n else if (i < options.size[0] + len) output[i] = data[i - options.size[0]];\n else output[i] = data[2 * len + options.size[0] - i - 1];\n }\n } else {\n for (i = 0; i < cond; i++) {\n if (i < options.size[0]) output[i] = options.value;\n else if (i < options.size[0] + len) output[i] = data[i - options.size[0]];\n else output[i] = options.value;\n }\n }\n\n return output;\n}\n\n/**\n * Case when the entry is a matrix\n * @param data\n * @param options\n * @returns {Array}\n */\nfunction matrixCase(data, options) {\n // var row = data.length;\n // var col = data[0].length;\n if (options.size[0] === undefined) {\n options.size = [options.size, options.size, options.size, options.size];\n }\n throw new Error('matrix not supported yet, sorry');\n}\n\n/**\n * Pads and array\n * @param {Array } data\n * @param {object} options\n */\nfunction padArray(data, options) {\n options = Object.assign({}, defaultOptions, options);\n if (Array.isArray(data)) {\n if (Array.isArray(data[0])) return matrixCase(data, options);\n else return arrayCase(data, options);\n } else {\n throw new TypeError('data should be an array');\n }\n}\n\nmodule.exports = padArray;\n","'use strict';\n\nconst { Matrix, MatrixTransposeView, inverse } = require('ml-matrix');\nconst padArray = require('ml-pad-array');\n\nconst defaultOptions = {\n windowSize: 5,\n derivative: 1,\n polynomial: 2,\n pad: 'none',\n padValue: 'replicate'\n};\n\n/**\n * Savitzky-Golay filter\n * @param {Array } data\n * @param {number} h\n * @param {Object} options\n * @returns {Array}\n */\nfunction SavitzkyGolay(data, h, options) {\n options = Object.assign({}, defaultOptions, options);\n if (\n options.windowSize % 2 === 0 ||\n options.windowSize < 5 ||\n !Number.isInteger(options.windowSize)\n ) {\n throw new RangeError(\n 'Invalid window size (should be odd and at least 5 integer number)'\n );\n }\n if (options.derivative < 0 || !Number.isInteger(options.derivative)) {\n throw new RangeError('Derivative should be a positive integer');\n }\n if (options.polynomial < 1 || !Number.isInteger(options.polynomial)) {\n throw new RangeError('Polynomial should be a positive integer');\n }\n\n var C, norm;\n var step = Math.floor(options.windowSize / 2);\n\n if (options.pad === 'pre') {\n data = padArray(data, { size: step, value: options.padValue });\n }\n\n var ans = new Array(data.length - 2 * step);\n\n if (\n options.windowSize === 5 &&\n options.polynomial === 2 &&\n (options.derivative === 1 || options.derivative === 2)\n ) {\n if (options.derivative === 1) {\n C = [-2, -1, 0, 1, 2];\n norm = 10;\n } else {\n C = [2, -1, -2, -1, 2];\n norm = 7;\n }\n } else {\n var J = Matrix.ones(options.windowSize, options.polynomial + 1);\n var inic = -(options.windowSize - 1) / 2;\n for (var i = 0; i < J.rows; i++) {\n for (var j = 0; j < J.columns; j++) {\n if (inic + 1 !== 0 || j !== 0) J.set(i, j, Math.pow(inic + i, j));\n }\n }\n var Jtranspose = new MatrixTransposeView(J);\n var Jinv = inverse(Jtranspose.mmul(J));\n C = Jinv.mmul(Jtranspose);\n C = C.getRow(options.derivative);\n norm = 1;\n }\n var det = norm * Math.pow(h, options.derivative);\n for (var k = step; k < data.length - step; k++) {\n var d = 0;\n for (var l = 0; l < C.length; l++) d += (C[l] * data[l + k - step]) / det;\n ans[k - step] = d;\n }\n\n if (options.pad === 'post') {\n ans = padArray(ans, { size: step, value: options.padValue });\n }\n\n return ans;\n}\n\nmodule.exports = SavitzkyGolay;\n","// auxiliary file to create the 256 look at table elements\n\nvar ans = new Array(256);\nfor (var i = 0; i < 256; i++) {\n var num = i;\n var c = 0;\n while (num) {\n num = num & (num - 1);\n c++;\n }\n ans[i] = c;\n}\n\nmodule.exports = ans;","'use strict';\n\nvar eightBits = require('./creator');\n\n/**\n * Count the number of true values in an array\n * @param {Array} arr\n * @return {number}\n */\nfunction count(arr) {\n var c = 0;\n for (var i = 0; i < arr.length; i++) {\n c += eightBits[arr[i] & 0xff] + eightBits[(arr[i] >> 8) & 0xff] + eightBits[(arr[i] >> 16) & 0xff] + eightBits[(arr[i] >> 24) & 0xff];\n }\n return c;\n}\n\n/**\n * Logical AND operation\n * @param {Array} arr1\n * @param {Array} arr2\n * @return {Array}\n */\nfunction and(arr1, arr2) {\n var ans = new Array(arr1.length);\n for (var i = 0; i < arr1.length; i++)\n ans[i] = arr1[i] & arr2[i];\n return ans;\n}\n\n/**\n * Logical OR operation\n * @param {Array} arr1\n * @param {Array} arr2\n * @return {Array}\n */\nfunction or(arr1, arr2) {\n var ans = new Array(arr1.length);\n for (var i = 0; i < arr1.length; i++)\n ans[i] = arr1[i] | arr2[i];\n return ans;\n}\n\n/**\n * Logical XOR operation\n * @param {Array} arr1\n * @param {Array} arr2\n * @return {Array}\n */\nfunction xor(arr1, arr2) {\n var ans = new Array(arr1.length);\n for (var i = 0; i < arr1.length; i++)\n ans[i] = arr1[i] ^ arr2[i];\n return ans;\n}\n\n/**\n * Logical NOT operation\n * @param {Array} arr\n * @return {Array}\n */\nfunction not(arr) {\n var ans = new Array(arr.length);\n for (var i = 0; i < ans.length; i++)\n ans[i] = ~arr[i];\n return ans;\n}\n\n/**\n * Gets the n value of array arr\n * @param {Array} arr\n * @param {number} n\n * @return {boolean}\n */\nfunction getBit(arr, n) {\n var index = n >> 5; // Same as Math.floor(n/32)\n var mask = 1 << (31 - n % 32);\n return Boolean(arr[index] & mask);\n}\n\n/**\n * Sets the n value of array arr to the value val\n * @param {Array} arr\n * @param {number} n\n * @param {boolean} val\n * @return {Array}\n */\nfunction setBit(arr, n, val) {\n var index = n >> 5; // Same as Math.floor(n/32)\n var mask = 1 << (31 - n % 32);\n if (val)\n arr[index] = mask | arr[index];\n else\n arr[index] = ~mask & arr[index];\n return arr;\n}\n\n/**\n * Translates an array of numbers to a string of bits\n * @param {Array} arr\n * @returns {string}\n */\nfunction toBinaryString(arr) {\n var str = '';\n for (var i = 0; i < arr.length; i++) {\n var obj = (arr[i] >>> 0).toString(2);\n str += '00000000000000000000000000000000'.substr(obj.length) + obj;\n }\n return str;\n}\n\n/**\n * Creates an array of numbers based on a string of bits\n * @param {string} str\n * @returns {Array}\n */\nfunction parseBinaryString(str) {\n var len = str.length / 32;\n var ans = new Array(len);\n for (var i = 0; i < len; i++) {\n ans[i] = parseInt(str.substr(i*32, 32), 2) | 0;\n }\n return ans;\n}\n\n/**\n * Translates an array of numbers to a hex string\n * @param {Array} arr\n * @returns {string}\n */\nfunction toHexString(arr) {\n var str = '';\n for (var i = 0; i < arr.length; i++) {\n var obj = (arr[i] >>> 0).toString(16);\n str += '00000000'.substr(obj.length) + obj;\n }\n return str;\n}\n\n/**\n * Creates an array of numbers based on a hex string\n * @param {string} str\n * @returns {Array}\n */\nfunction parseHexString(str) {\n var len = str.length / 8;\n var ans = new Array(len);\n for (var i = 0; i < len; i++) {\n ans[i] = parseInt(str.substr(i*8, 8), 16) | 0;\n }\n return ans;\n}\n\n/**\n * Creates a human readable string of the array\n * @param {Array} arr\n * @returns {string}\n */\nfunction toDebug(arr) {\n var binary = toBinaryString(arr);\n var str = '';\n for (var i = 0; i < arr.length; i++) {\n str += '0000'.substr((i * 32).toString(16).length) + (i * 32).toString(16) + ':';\n for (var j = 0; j < 32; j += 4) {\n str += ' ' + binary.substr(i * 32 + j, 4);\n }\n if (i < arr.length - 1) str += '\\n';\n }\n return str\n}\n\nmodule.exports = {\n count: count,\n and: and,\n or: or,\n xor: xor,\n not: not,\n getBit: getBit,\n setBit: setBit,\n toBinaryString: toBinaryString,\n parseBinaryString: parseBinaryString,\n toHexString: toHexString,\n parseHexString: parseHexString,\n toDebug: toDebug\n};\n","import isArray from 'is-any-array';\n\n/**\n * Computes the mode of the given values\n * @param {Array} input\n * @return {number}\n */\n\nfunction mode(input) {\n if (!isArray(input)) {\n throw new TypeError('input must be an array');\n }\n\n if (input.length === 0) {\n throw new TypeError('input must not be empty');\n }\n\n var maxValue = 0;\n var maxCount = 0;\n var count = 0;\n var counts = {};\n\n for (var i = 0; i < input.length; ++i) {\n var element = input[i];\n count = counts[element];\n\n if (count) {\n counts[element]++;\n count++;\n } else {\n counts[element] = count = 1;\n }\n\n if (count > maxCount) {\n maxCount = count;\n maxValue = input[i];\n }\n }\n\n return maxValue;\n}\n\nexport default mode;\n","/**\n * Computes the norm of the given values\n * @param {Array} input\n * @param {object} [options={}]\n * @param {string} [algorithm='absolute']\n * @return {number}\n */\nfunction norm(input) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var _options$algorithm = options.algorithm,\n algorithm = _options$algorithm === void 0 ? 'absolute' : _options$algorithm;\n\n if (!Array.isArray(input)) {\n throw new Error('input must be an array');\n }\n\n if (input.length === 0) {\n throw new Error('input must not be empty');\n }\n\n switch (algorithm.toLowerCase()) {\n case 'absolute':\n var sum = absoluteSum(input);\n if (sum === 0) return input.slice(0);\n return input.map(function (element) {\n return element / sum;\n });\n\n default:\n throw new Error(\"norm: unknown algorithm: \".concat(algorithm));\n }\n}\n\nfunction absoluteSum(input) {\n var sum = 0;\n\n for (var i = 0; i < input.length; i++) {\n sum += Math.abs(input[i]);\n }\n\n return sum;\n}\n\nexport default norm;\n","import isArray from 'is-any-array';\n\nfunction _typeof(obj) {\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function (obj) {\n return typeof obj;\n };\n } else {\n _typeof = function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\n/**\n * Fill an array with sequential numbers\n * @param {Array} [input] - optional destination array (if not provided a new array will be created)\n * @param {object} [options={}]\n * @param {number} [options.from=0] - first value in the array\n * @param {number} [options.to=10] - last value in the array\n * @param {number} [options.size=input.length] - size of the array (if not provided calculated from step)\n * @param {number} [options.step] - if not provided calculated from size\n * @return {Array}\n */\n\nfunction sequentialFill() {\n var input = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n if (_typeof(input) === 'object' && !isArray(input)) {\n options = input;\n input = [];\n }\n\n if (!isArray(input)) {\n throw new TypeError('input must be an array');\n }\n\n var _options = options,\n _options$from = _options.from,\n from = _options$from === void 0 ? 0 : _options$from,\n _options$to = _options.to,\n to = _options$to === void 0 ? 10 : _options$to,\n _options$size = _options.size,\n size = _options$size === void 0 ? input.length : _options$size,\n step = _options.step;\n\n if (size && step) {\n throw new Error('step is defined by the array size');\n }\n\n if (!size) {\n if (step) {\n size = Math.floor((to - from) / step) + 1;\n } else {\n size = to - from + 1;\n }\n }\n\n if (!step && size) {\n step = (to - from) / (size - 1);\n }\n\n if (Array.isArray(input)) {\n input.length = 0; // only works with normal array\n\n for (var i = 0; i < size; i++) {\n input.push(from);\n from += step;\n }\n } else {\n if (input.length !== size) {\n throw new Error('sequentialFill typed array must have the correct length');\n }\n\n for (var _i = 0; _i < size; _i++) {\n input[_i] = from;\n from += step;\n }\n }\n\n return input;\n}\n\nexport default sequentialFill;\n","import arrayMean from 'ml-array-mean';\nimport isArray from 'is-any-array';\n\n/**\n * Computes the variance of the given values\n * @param {Array} values\n * @param {object} [options]\n * @param {boolean} [options.unbiased = true] - if true, divide by (n-1); if false, divide by n.\n * @param {number} [options.mean = arrayMean] - precalculated mean, if any.\n * @return {number}\n */\n\nfunction variance(values) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n if (!isArray(values)) {\n throw new TypeError('input must be an array');\n }\n\n var _options$unbiased = options.unbiased,\n unbiased = _options$unbiased === void 0 ? true : _options$unbiased,\n _options$mean = options.mean,\n mean = _options$mean === void 0 ? arrayMean(values) : _options$mean;\n var sqrError = 0;\n\n for (var i = 0; i < values.length; i++) {\n var x = values[i] - mean;\n sqrError += x * x;\n }\n\n if (unbiased) {\n return sqrError / (values.length - 1);\n } else {\n return sqrError / values.length;\n }\n}\n\nexport default variance;\n","import variance from 'ml-array-variance';\n\n/**\n * Computes the standard deviation of the given values\n * @param {Array} values\n * @param {object} [options]\n * @param {boolean} [options.unbiased = true] - if true, divide by (n-1); if false, divide by n.\n * @param {number} [options.mean = arrayMean] - precalculated mean, if any.\n * @return {number}\n */\n\nfunction standardDeviation(values) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n return Math.sqrt(variance(values, options));\n}\n\nexport default standardDeviation;\n","/**\n * Merge abscissa values if the ordinate value is in a list of centroids\n * @param {object} originalPoints\n * @param {Array} originalPoints.x\n * @param {Array} originalPoints.y\n * @param {Array} centroids\n * @param {object} [options]\n * @param {number} [options.window = 0.01] - has to be a positive number\n * @return {{x: Array, y: Array}}\n */\nexport default function mergeByCentroids(\n originalPoints,\n centroids,\n options = {}\n) {\n const { window = 0.01 } = options;\n\n var mergedPoints = {\n x: centroids.slice(),\n y: new Array(centroids.length).fill(0)\n };\n\n var originalIndex = 0;\n var mergedIndex = 0;\n while (\n originalIndex < originalPoints.x.length &&\n mergedIndex < centroids.length\n ) {\n var diff = originalPoints.x[originalIndex] - centroids[mergedIndex];\n if (Math.abs(diff) < window) {\n mergedPoints.y[mergedIndex] += originalPoints.y[originalIndex++];\n } else if (diff < 0) {\n originalIndex++;\n } else {\n mergedIndex++;\n }\n }\n\n return mergedPoints;\n}\n","import binarySearch from 'binary-search';\nimport { ascending, descending } from 'num-sort';\n\n/**\n *\n * @param {object} points\n * @param {Array} originalPoints.x\n * @param {Array} originalPoints.y\n * @param {*} options\n * @return {{x: Array, y: Array}}\n */\nexport default function closestX(points, options) {\n const { x, y } = points;\n const { target = x[0], reverse = false } = options;\n\n let index;\n if (reverse) {\n index = binarySearch(x, target, descending);\n } else {\n index = binarySearch(x, target, ascending);\n }\n\n if (index >= 0) {\n return {\n x: x[index],\n y: y[index]\n };\n } else {\n index = ~index;\n if (\n (index !== 0 && Math.abs(x[index] - target) > 0.5) ||\n index === x.length\n ) {\n return {\n x: x[index - 1],\n y: y[index - 1]\n };\n } else {\n return {\n x: x[index],\n y: y[index]\n };\n }\n }\n}\n","/**\n * Merge abscissas values on similar ordinates and weight the group of abscissas\n * @param {object} points\n * @param {Array} points.x - sorted abscissas values\n * @param {Array} points.y - ordinates values\n * @param {object} [options]\n * @param {number} [options.groupWidth = 0.001] - window for abscissas to merge\n * @return {{x: Array, y: Array}}\n */\nexport default function maxMerge(points, options = {}) {\n const { x, y } = points;\n const { groupWidth = 0.001 } = options;\n\n var merged = { x: [], y: [] };\n var maxAbscissa = { x: [], y: [] };\n var size = 0;\n var index = 0;\n\n while (index < x.length) {\n if (size === 0 || x[index] - merged.x[size - 1] > groupWidth) {\n maxAbscissa.x.push(x[index]);\n maxAbscissa.y.push(y[index]);\n merged.x.push(x[index]);\n merged.y.push(y[index]);\n index++;\n size++;\n } else {\n if (y[index] > maxAbscissa.y[size - 1]) {\n maxAbscissa.x[size - 1] = x[index];\n maxAbscissa.y[size - 1] = y[index];\n }\n merged.x[size - 1] = x[index];\n merged.y[size - 1] += y[index];\n index++;\n }\n }\n\n merged.x = maxAbscissa.x.slice();\n\n return merged;\n}\n","import binarySearch from 'binary-search';\nimport { ascending, descending } from 'num-sort';\n\n/**\n * @param {object} points\n * @param {Array} points.x - sorted abscissas values\n * @param {Array} points.y - ordinates values\n * @param {object} [options]\n * @param {object} [options.from = {index: 0}]\n * @param {object} [options.to = {index: x.length-1}]\n * @param {boolean} [options.reverse = false]\n * @return {{index: number, value: number}}\n */\nexport default function maxY(points, options = {}) {\n const { x, y } = points;\n let {\n from = { index: 0 },\n to = { index: x.length },\n reverse = false\n } = options;\n\n if (from.value !== undefined && from.index === undefined) {\n from.index = calculateIndex(from.value, x, reverse);\n }\n\n if (to.value !== undefined && to.index === undefined) {\n to.index = calculateIndex(to.value, x, reverse);\n }\n\n var currentMax = Number.MIN_VALUE;\n var currentIndex;\n for (var i = from.index; i < to.index; i++) {\n if (currentMax < y[i]) {\n currentMax = y[i];\n currentIndex = i;\n }\n }\n\n return {\n index: currentIndex,\n value: currentMax\n };\n}\n\n/**\n * @param {number} value\n * @param {Array} x\n * @param {boolean} reverse\n * @return {number} index of the value in the array\n */\nfunction calculateIndex(value, x, reverse) {\n let index;\n if (reverse) {\n index = binarySearch(x, value, descending);\n } else {\n index = binarySearch(x, value, ascending);\n }\n\n if (index < 0) {\n throw new Error(`the value ${value} doesn't belongs to the abscissa value`);\n }\n\n return index;\n}\n","export default function sortX(points, options = {}) {\n const { x, y } = points;\n const { reverse = false } = options;\n\n var sortFunc;\n if (!reverse) {\n sortFunc = (a, b) => a.x - b.x;\n } else {\n sortFunc = (a, b) => b.x - a.x;\n }\n\n var grouped = x\n .map((val, index) => ({\n x: val,\n y: y[index]\n }))\n .sort(sortFunc);\n\n var response = { x: x.slice(), y: y.slice() };\n for (var i = 0; i < x.length; i++) {\n response.x[i] = grouped[i].x;\n response.y[i] = grouped[i].y;\n }\n\n return response;\n}\n","\n/**\n * In place modification of the 2 arrays to make X unique and sum the Y if X has the same value\n * @param {object} [points={}] : Object of points contains property x (an array) and y (an array)\n * @return points\n */\n\nexport default function uniqueX(points = {}) {\n const { x, y } = points;\n if (x.length < 2) return;\n if (x.length !== y.length) {\n throw new Error('The X and Y arrays mush have the same length');\n }\n\n let current = x[0];\n let counter = 0;\n\n for (let i = 1; i < x.length; i++) {\n if (current !== x[i]) {\n counter++;\n current = x[i];\n x[counter] = x[i];\n if (i !== counter) {\n y[counter] = 0;\n }\n }\n if (i !== counter) {\n y[counter] += y[i];\n }\n }\n\n x.length = counter + 1;\n y.length = counter + 1;\n}\n","/**\n * Merge abscissas values on similar ordinates and weight the group of abscissas\n * @param {object} points\n * @param {Array} points.x - sorted abscissas values\n * @param {Array} points.y - ordinates values\n * @param {object} [options]\n * @param {number} [options.groupWidth = 0.001] - window for abscissas to merge\n * @return {{x: Array, y: Array}}\n */\nexport default function weightedMerge(points, options = {}) {\n const { x, y } = points;\n const { groupWidth = 0.001 } = options;\n\n var merged = { x: [], y: [] };\n var weightedAbscissa = { x: [], y: [] };\n var size = 0;\n var index = 0;\n\n while (index < x.length) {\n if (size === 0 || x[index] - merged.x[size - 1] > groupWidth) {\n weightedAbscissa.x.push(x[index] * y[index]);\n weightedAbscissa.y.push(y[index]);\n merged.x.push(x[index]);\n merged.y.push(y[index]);\n index++;\n size++;\n } else {\n weightedAbscissa.x[size - 1] += x[index] * y[index];\n weightedAbscissa.y[size - 1] += y[index];\n merged.x[size - 1] = x[index];\n merged.y[size - 1] += y[index];\n index++;\n }\n }\n\n for (var i = 0; i < merged.x.length; i++) {\n merged.x[i] = weightedAbscissa.x[i] / weightedAbscissa.y[i];\n }\n\n return merged;\n}\n","/**\n * Function that calculates the integral of the line between two\n * x-coordinates, given the slope and intercept of the line.\n * @param {number} x0\n * @param {number} x1\n * @param {number} slope\n * @param {number} intercept\n * @return {number} integral value.\n */\nexport default function integral(x0, x1, slope, intercept) {\n return (\n 0.5 * slope * x1 * x1 +\n intercept * x1 -\n (0.5 * slope * x0 * x0 + intercept * x0)\n );\n}\n","import integral from './integral';\n\n/**\n * function that retrieves the getEquallySpacedData with the variant \"smooth\"\n *\n * @param {Array} x\n * @param {Array} y\n * @param {number} from - Initial point\n * @param {number} to - Final point\n * @param {number} numberOfPoints\n * @return {Array} - Array of y's equally spaced with the variant \"smooth\"\n */\nexport default function equallySpacedSmooth(x, y, from, to, numberOfPoints) {\n var xLength = x.length;\n\n var step = (to - from) / (numberOfPoints - 1);\n var halfStep = step / 2;\n\n var output = new Array(numberOfPoints);\n\n var initialOriginalStep = x[1] - x[0];\n var lastOriginalStep = x[xLength - 1] - x[xLength - 2];\n\n // Init main variables\n var min = from - halfStep;\n var max = from + halfStep;\n\n var previousX = Number.MIN_VALUE;\n var previousY = 0;\n var nextX = x[0] - initialOriginalStep;\n var nextY = 0;\n\n var currentValue = 0;\n var slope = 0;\n var intercept = 0;\n var sumAtMin = 0;\n var sumAtMax = 0;\n\n var i = 0; // index of input\n var j = 0; // index of output\n\n function getSlope(x0, y0, x1, y1) {\n return (y1 - y0) / (x1 - x0);\n }\n\n main: while (true) {\n if (previousX <= min && min <= nextX) {\n add = integral(0, min - previousX, slope, previousY);\n sumAtMin = currentValue + add;\n }\n\n while (nextX - max >= 0) {\n // no overlap with original point, just consume current value\n var add = integral(0, max - previousX, slope, previousY);\n sumAtMax = currentValue + add;\n\n output[j++] = (sumAtMax - sumAtMin) / step;\n\n if (j === numberOfPoints) {\n break main;\n }\n\n min = max;\n max += step;\n sumAtMin = sumAtMax;\n }\n\n currentValue += integral(previousX, nextX, slope, intercept);\n\n previousX = nextX;\n previousY = nextY;\n\n if (i < xLength) {\n nextX = x[i];\n nextY = y[i];\n i++;\n } else if (i === xLength) {\n nextX += lastOriginalStep;\n nextY = 0;\n }\n\n slope = getSlope(previousX, previousY, nextX, nextY);\n intercept = -slope * previousX + previousY;\n }\n\n return output;\n}\n","/**\n * function that retrieves the getEquallySpacedData with the variant \"slot\"\n *\n * @param {Array} x\n * @param {Array} y\n * @param {number} from - Initial point\n * @param {number} to - Final point\n * @param {number} numberOfPoints\n * @return {Array} - Array of y's equally spaced with the variant \"slot\"\n */\nexport default function equallySpacedSlot(x, y, from, to, numberOfPoints) {\n var xLength = x.length;\n\n var step = (to - from) / (numberOfPoints - 1);\n var halfStep = step / 2;\n var lastStep = x[x.length - 1] - x[x.length - 2];\n\n var start = from - halfStep;\n var output = new Array(numberOfPoints);\n\n // Init main variables\n var min = start;\n var max = start + step;\n\n var previousX = -Number.MAX_VALUE;\n var previousY = 0;\n var nextX = x[0];\n var nextY = y[0];\n var frontOutsideSpectra = 0;\n var backOutsideSpectra = true;\n\n var currentValue = 0;\n\n // for slot algorithm\n var currentPoints = 0;\n\n var i = 1; // index of input\n var j = 0; // index of output\n\n main: while (true) {\n if (previousX >= nextX) throw new Error('x must be an increasing serie');\n while (previousX - max > 0) {\n // no overlap with original point, just consume current value\n if (backOutsideSpectra) {\n currentPoints++;\n backOutsideSpectra = false;\n }\n\n output[j] = currentPoints <= 0 ? 0 : currentValue / currentPoints;\n j++;\n\n if (j === numberOfPoints) {\n break main;\n }\n\n min = max;\n max += step;\n currentValue = 0;\n currentPoints = 0;\n }\n\n if (previousX > min) {\n currentValue += previousY;\n currentPoints++;\n }\n\n if (previousX === -Number.MAX_VALUE || frontOutsideSpectra > 1) {\n currentPoints--;\n }\n\n previousX = nextX;\n previousY = nextY;\n\n if (i < xLength) {\n nextX = x[i];\n nextY = y[i];\n i++;\n } else {\n nextX += lastStep;\n nextY = 0;\n frontOutsideSpectra++;\n }\n }\n\n return output;\n}\n","export default function getZones(from, to, numberOfPoints, exclusions = []) {\n if (from > to) {\n [from, to] = [to, from];\n }\n\n // in exclusions from and to have to be defined\n exclusions = exclusions.filter(\n (exclusion) => exclusion.from !== undefined && exclusion.to !== undefined\n );\n\n exclusions = JSON.parse(JSON.stringify(exclusions));\n // we ensure that from before to\n exclusions.forEach((exclusion) => {\n if (exclusion.from > exclusion.to) {\n [exclusion.to, exclusion.from] = [exclusion.from, exclusion.to];\n }\n });\n\n exclusions.sort((a, b) => a.from - b.from);\n\n // we will rework the exclusions in order to remove overlap and outside range (from / to)\n exclusions.forEach((exclusion) => {\n if (exclusion.from < from) exclusion.from = from;\n if (exclusion.to > to) exclusion.to = to;\n });\n for (let i = 0; i < exclusions.length - 1; i++) {\n if (exclusions[i].to > exclusions[i + 1].from) {\n exclusions[i].to = exclusions[i + 1].from;\n }\n }\n exclusions = exclusions.filter((exclusion) => exclusion.from < exclusion.to);\n\n if (!exclusions || exclusions.length === 0) {\n return [{ from, to, numberOfPoints }];\n }\n\n // need to deal with overlapping exclusions and out of bound exclusions\n\n let toRemove = exclusions.reduce(\n (previous, exclusion) => (previous += exclusion.to - exclusion.from),\n 0\n );\n let total = to - from;\n let unitsPerPoint = (total - toRemove) / numberOfPoints;\n let zones = [];\n let currentFrom = from;\n let totalPoints = 0;\n for (let exclusion of exclusions) {\n let currentNbPoints = Math.round(\n (exclusion.from - currentFrom) / unitsPerPoint\n );\n totalPoints += currentNbPoints;\n if (currentNbPoints > 0) {\n zones.push({\n from: currentFrom,\n to: exclusion.from,\n numberOfPoints: currentNbPoints\n });\n }\n\n currentFrom = exclusion.to;\n }\n if (numberOfPoints - totalPoints > 0) {\n zones.push({\n from: currentFrom,\n to: to,\n numberOfPoints: numberOfPoints - totalPoints\n });\n }\n\n return zones;\n}\n","import sequentialFill from 'ml-array-sequential-fill';\n\nimport equallySpacedSmooth from './equallySpacedSmooth';\nimport equallySpacedSlot from './equallySpacedSlot';\nimport getZones from './getZones';\n\n/**\n * Function that returns a Number array of equally spaced numberOfPoints\n * containing a representation of intensities of the spectra arguments x\n * and y.\n *\n * The options parameter contains an object in the following form:\n * from: starting point\n * to: last point\n * numberOfPoints: number of points between from and to\n * variant: \"slot\" or \"smooth\" - smooth is the default option\n *\n * The slot variant consist that each point in the new array is calculated\n * averaging the existing points between the slot that belongs to the current\n * value. The smooth variant is the same but takes the integral of the range\n * of the slot and divide by the step size between two points in the new array.\n *\n * @param {object} [arrayXY={}] - object containing 2 properties x and y (both an array)\n * @param {object} [options={}]\n * @param {number} [options.from=x[0]]\n * @param {number} [options.to=x[x.length-1]]\n * @param {string} [options.variant='smooth']\n * @param {number} [options.numberOfPoints=100]\n * @param {Array} [options.exclusions=[]] array of from / to that should be skipped for the generation of the points\n * @return {object} new object with x / y array with the equally spaced data.\n */\n\nexport default function equallySpaced(arrayXY = {}, options = {}) {\n let { x, y } = arrayXY;\n let xLength = x.length;\n let reverse = false;\n if (x.length > 1 && x[0] > x[1]) {\n x = x.slice().reverse();\n y = y.slice().reverse();\n reverse = true;\n }\n\n let {\n from = x[0],\n to = x[xLength - 1],\n variant = 'smooth',\n numberOfPoints = 100,\n exclusions = []\n } = options;\n\n if (xLength !== y.length) {\n throw new RangeError(\"the x and y vector doesn't have the same size.\");\n }\n\n if (typeof from !== 'number' || isNaN(from)) {\n throw new RangeError(\"'from' option must be a number\");\n }\n\n if (typeof to !== 'number' || isNaN(to)) {\n throw new RangeError(\"'to' option must be a number\");\n }\n\n if (typeof numberOfPoints !== 'number' || isNaN(numberOfPoints)) {\n throw new RangeError(\"'numberOfPoints' option must be a number\");\n }\n\n let zones = getZones(from, to, numberOfPoints, exclusions);\n\n let xResult = [];\n let yResult = [];\n for (let zone of zones) {\n let zoneResult = processZone(\n x,\n y,\n zone.from,\n zone.to,\n zone.numberOfPoints,\n variant,\n reverse\n );\n xResult.push(...zoneResult.x);\n yResult.push(...zoneResult.y);\n }\n\n if (reverse) {\n if (from < to) {\n return { x: xResult.reverse(), y: yResult.reverse() };\n } else {\n return { x: xResult, y: yResult };\n }\n } else {\n if (from < to) {\n return { x: xResult, y: yResult };\n } else {\n return { x: xResult.reverse(), y: yResult.reverse() };\n }\n }\n}\n\nfunction processZone(x, y, from, to, numberOfPoints, variant) {\n if (numberOfPoints < 1) {\n throw new RangeError('the number of points must be at least 1');\n }\n\n var output =\n variant === 'slot'\n ? equallySpacedSlot(x, y, from, to, numberOfPoints)\n : equallySpacedSmooth(x, y, from, to, numberOfPoints);\n\n return {\n x: sequentialFill({\n from,\n to,\n size: numberOfPoints\n }),\n y: output\n };\n}\n","export default function getZones(from, to, exclusions = []) {\n if (from > to) {\n [from, to] = [to, from];\n }\n\n // in exclusions from and to have to be defined\n exclusions = exclusions.filter(\n (exclusion) => exclusion.from !== undefined && exclusion.to !== undefined\n );\n\n exclusions = JSON.parse(JSON.stringify(exclusions));\n // we ensure that from before to\n exclusions.forEach((exclusion) => {\n if (exclusion.from > exclusion.to) {\n [exclusion.to, exclusion.from] = [exclusion.from, exclusion.to];\n }\n });\n\n exclusions.sort((a, b) => a.from - b.from);\n\n // we will rework the exclusions in order to remove overlap and outside range (from / to)\n exclusions.forEach((exclusion) => {\n if (exclusion.from < from) exclusion.from = from;\n if (exclusion.to > to) exclusion.to = to;\n });\n for (let i = 0; i < exclusions.length - 1; i++) {\n if (exclusions[i].to > exclusions[i + 1].from) {\n exclusions[i].to = exclusions[i + 1].from;\n }\n }\n exclusions = exclusions.filter((exclusion) => exclusion.from < exclusion.to);\n\n if (!exclusions || exclusions.length === 0) {\n return [{ from, to }];\n }\n\n let zones = [];\n let currentFrom = from;\n for (let exclusion of exclusions) {\n if (currentFrom < exclusion.from) {\n zones.push({\n from: currentFrom,\n to: exclusion.from\n });\n }\n\n currentFrom = exclusion.to;\n }\n if (currentFrom < to) {\n zones.push({\n from: currentFrom,\n to: to\n });\n }\n\n return zones;\n}\n","import getZones from './getZones';\n\n/**\n * Filter an array x/y based on various criteria\n * x points are expected to be sorted\n *\n * @param {object} points\n * @param {object} [options={}]\n * @param {array} [options.from]\n * @param {array} [options.to]\n * @param {array} [options.exclusions=[]]\n * @return {{x: Array, y: Array}}\n */\n\nexport default function filterX(points, options = {}) {\n const { x, y } = points;\n const { from = x[0], to = x[x.length - 1], exclusions = [] } = options;\n\n let zones = getZones(from, to, exclusions);\n\n\n let currentZoneIndex = 0;\n let newX = [];\n let newY = [];\n let position = 0;\n while (position < x.length) {\n if (\n x[position] <= zones[currentZoneIndex].to &&\n x[position] >= zones[currentZoneIndex].from\n ) {\n newX.push(x[position]);\n newY.push(y[position]);\n } else {\n if (x[position] > zones[currentZoneIndex].to) {\n currentZoneIndex++;\n if (!zones[currentZoneIndex]) break;\n }\n }\n position++;\n }\n\n return {\n x: newX,\n y: newY\n };\n}\n","import { DecisionTreeClassifier, DecisionTreeRegression } from 'ml-cart';\nimport {\n RandomForestClassifier,\n RandomForestRegression\n} from 'ml-random-forest';\n\n// Try to keep this list in the same structure as the README.\n\n// Unsupervised learning\nexport { PCA } from 'ml-pca';\nimport * as HClust from 'ml-hclust';\nexport { HClust };\nexport { default as KMeans } from 'ml-kmeans';\n\n// Supervised learning\nimport * as NaiveBayes from 'ml-naivebayes';\nexport { NaiveBayes };\nexport { default as KNN } from 'ml-knn';\nexport { PLS, KOPLS } from 'ml-pls';\nexport { default as CrossValidation } from 'ml-cross-validation';\nexport { default as ConfusionMatrix } from 'ml-confusion-matrix';\nexport { DecisionTreeClassifier };\nexport { RandomForestClassifier };\n\n// Artificial neural networks\nexport { default as FNN } from 'ml-fnn';\nexport { default as SOM } from 'ml-som';\n\n// Regression\nexport {\n SimpleLinearRegression,\n PolynomialRegression,\n MultivariateLinearRegression,\n PowerRegression,\n ExponentialRegression,\n TheilSenRegression,\n RobustPolynomialRegression\n} from 'ml-regression';\nexport { DecisionTreeRegression };\nexport { RandomForestRegression };\n\n// Optimization\nexport { default as levenbergMarquardt } from 'ml-levenberg-marquardt';\nimport * as FCNNLS from 'ml-fcnnls';\nexport { FCNNLS };\n\n// Math\nimport * as MatrixLib from 'ml-matrix';\nconst {\n Matrix,\n SVD,\n EVD,\n CholeskyDecomposition,\n LuDecomposition,\n QrDecomposition\n} = MatrixLib;\nexport {\n MatrixLib,\n Matrix,\n SVD,\n EVD,\n CholeskyDecomposition,\n LuDecomposition,\n QrDecomposition\n};\n\nexport { SparseMatrix } from 'ml-sparse-matrix';\nexport { default as Kernel } from 'ml-kernel';\nimport { distance, similarity } from 'ml-distance';\nexport { distance as Distance, similarity as Similarity };\nexport { default as distanceMatrix } from 'ml-distance-matrix';\nexport { default as XSadd } from 'ml-xsadd';\n\n// Statistics\nexport { default as Performance } from 'ml-performance';\n\n// Data preprocessing\nexport { default as savitzkyGolay } from 'ml-savitzky-golay';\n\n// Utility\nexport { default as BitArray } from 'ml-bit-array';\nexport { default as HashTable } from 'ml-hash-table';\nexport { default as padArray } from 'ml-pad-array';\nexport { default as binarySearch } from 'binary-search';\nimport * as numSort from 'num-sort';\nexport { numSort };\nexport { default as Random } from 'ml-random';\n\nimport min from 'ml-array-min';\nimport max from 'ml-array-max';\nimport median from 'ml-array-median';\nimport mean from 'ml-array-mean';\nimport mode from 'ml-array-mode';\nimport normed from 'ml-array-normed';\nimport rescale from 'ml-array-rescale';\nimport sequentialFill from 'ml-array-sequential-fill';\nimport standardDeviation from 'ml-array-standard-deviation';\nimport variance from 'ml-array-variance';\nexport const Array = {\n min,\n max,\n median,\n mean,\n mode,\n normed,\n rescale,\n sequentialFill,\n standardDeviation,\n variance\n};\n\nimport centroidsMerge from 'ml-array-xy-centroids-merge';\nimport closestX from 'ml-arrayxy-closestx';\nimport maxMerge from 'ml-array-xy-max-merge';\nimport maxY from 'ml-array-xy-max-y';\nimport sortX from 'ml-array-xy-sort-x';\nimport uniqueX from 'ml-arrayxy-uniquex';\nimport weightedMerge from 'ml-array-xy-weighted-merge';\nimport equallySpaced from 'ml-array-xy-equally-spaced';\nimport filterX from 'ml-array-xy-filter-x';\nexport const ArrayXY = {\n centroidsMerge,\n closestX,\n maxMerge,\n maxY,\n sortX,\n uniqueX,\n weightedMerge,\n equallySpaced,\n filterX\n};\n"],"names":["toString","Object","prototype","isAnyArray","object","call","endsWith","max","input","isArray","TypeError","length","i","min","rescale","output","options","arguments","undefined","Array","currentMin","currentMax","RangeError","_options$min","minValue","autoMinMax","_options$max","maxValue","factor","checkRowIndex","matrix","index","outer","rows","checkColumnIndex","columns","checkRowVector","vector","to1DArray","checkColumnVector","checkIndices","rowIndices","columnIndices","row","checkRowIndices","column","checkColumnIndices","some","r","from","c","checkRange","startRow","endRow","startColumn","endColumn","checkNumber","newArray","value","array","push","name","sumByRow","sum","j","get","sumByColumn","sumAll","v","productByRow","productByColumn","productAll","varianceByRow","unbiased","mean","cols","variance","sum1","sum2","x","varianceByColumn","varianceAll","size","centerByRow","set","centerByColumn","centerAll","getScaleByRow","scale","Math","pow","sqrt","scaleByRow","getScaleByColumn","scaleByColumn","getScaleAll","divider","scaleAll","inspectMatrix","indent","repeat","indentData","this","constructor","inspectData","maxRows","maxColumns","maxNumSize","maxI","maxJ","result","line","formatNumber","join","num","numStr","String","padEnd","precise","toPrecision","exponential","toExponential","eIndex","indexOf","e","substring","installMathOperations","AbstractMatrix","Matrix","add","addS","addM","checkMatrix","sub","subS","subM","subtract","subtractS","subtractM","mul","mulS","mulM","multiply","multiplyS","multiplyM","div","divS","divM","divide","divideS","divideM","mod","modS","modM","modulus","modulusS","modulusM","and","andS","andM","or","orS","orM","xor","xorS","xorM","leftShift","leftShiftS","leftShiftM","signPropagatingRightShift","signPropagatingRightShiftS","signPropagatingRightShiftM","rightShift","rightShiftS","rightShiftM","zeroFillRightShift","zeroFillRightShiftS","zeroFillRightShiftM","not","abs","acos","acosh","asin","asinh","atan","atanh","cbrt","ceil","clz32","cos","cosh","exp","expm1","floor","fround","log","log1p","log10","log2","round","sign","sin","sinh","tan","tanh","trunc","arg0","powS","powM","newRows","newColumns","newData","newMatrix","fill","random","Number","isInteger","interval","zeros","data","l","matrix1","matrix2","isMatrix","klass","apply","callback","to2DArray","copy","toJSON","isRowVector","isColumnVector","isVector","isSquare","isSymmetric","isEchelonForm","previousColumn","checked","isReducedEchelonForm","k","echelonForm","clone","h","iMax","swapRows","tmp","reducedEchelonForm","m","n","maxRow","p","pivot","Error","setSubMatrix","neg","getRow","getRowVector","rowVector","setRow","row1","row2","temp","getColumn","getColumnVector","columnVector","setColumn","swapColumns","column1","column2","addRowVector","subRowVector","mulRowVector","divRowVector","addColumnVector","subColumnVector","mulColumnVector","divColumnVector","mulRow","mulColumn","maxIndex","idx","minIndex","maxRowIndex","minRow","minRowIndex","maxColumn","maxColumnIndex","minColumn","minColumnIndex","diag","norm","type","cumulativeSum","dot","vector2","vector1","mmul","other","Bcolj","Float64Array","s","strassen2x2","a11","b11","a12","b12","a21","b21","a22","b22","m1","m2","m3","m4","m5","c00","c01","c10","c11","strassen3x3","a00","a01","a02","a10","a20","b00","b01","b02","b10","b20","m6","m7","m8","m9","m12","m13","m14","m15","m16","m17","m18","c02","c12","c20","c21","c22","mmulStrassen","y","r1","c1","r2","c2","embed","mat","resultat","console","warn","blockMult","a","b","halfRows","parseInt","halfCols","subMatrix","scaleRows","isFinite","scaleColumns","flipRows","middle","first","last","flipColumns","kroneckerProduct","q","transpose","sortRows","compareFunction","compareNumbers","sort","sortColumns","subMatrixRow","indices","subMatrixColumn","selection","rowIndex","columnIndex","trace","by","product","standardDeviation","center","Symbol","for","rand","randomInt","randInt","diagonal","identity","eye","negate","tensorProduct","nRows","nColumns","arrayData","removeRow","splice","addRow","removeColumn","newRow","addColumn","BaseView","MatrixColumnView","MatrixColumnSelectionView","MatrixFlipColumnView","MatrixFlipRowView","MatrixRowView","MatrixRowSelectionView","MatrixSelectionView","MatrixSubView","MatrixTransposeView","WrapperMatrix1D","_calculateIndex","WrapperMatrix2D","wrap","LuDecomposition","t","LUcolj","kmax","lu","pivotVector","pivotSign","LU","isSingular","col","solve","count","X","determinant","hypotenuse","QrDecomposition","qr","rdiag","nrm","QR","Rdiag","isFullRank","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","tol","ii","useSVD","leftHandSide","rightHandSide","d","subMatrix0","subMatrix1","subMatrix2","xrange","exception","range","dependenciesOneRow","error","thresholdValue","returnArray","linearDependencies","thresholdError","results","Abis","pseudoInverse","svdSolution","SVD","leftSingularVectors","covariance","xMatrix","yMatrix","yIsSame","cov","correlation","sdx","sdy","corr","EigenvalueDecomposition","assumeSymmetric","tred2","tql2","H","ort","orthes","hqr2","hh","dl1","c3","el1","s2","tst1","high","low","nn","w","ra","sa","vr","vi","notlast","cdivres","exshift","z","iter","cdiv","xr","xi","yr","yi","CholeskyDecomposition","dimension","positiveDefinite","L","isPositiveDefinite","B","nipals","scaleScores","maxIterations","terminationCriteria","u","tOld","diff","counter","xResidual","residual","yResidual","betas","toDiscreteDistribution","numberOfClasses","counts","giniImpurity","probabilities","getNumberOfClasses","filter","val","arr","giniGain","splitted","splitsImpurity","splits","currentSplit","squaredError","meanArray","currentElement","regressionError","matrixSplitter","lesserX","greaterX","lesserY","greaterY","zip","ret","gainFunctions","gini","Utils","regression","splitFunctions","TreeNode","kind","gainFunction","splitFunction","minNumSamples","maxDepth","bestSplit","XTranspose","bestGain","Infinity","check","currentFeature","splitValues","featureSplit","currentSplitVal","split","gain","maxGain","splitValue","lesser","greater","calculatePrediction","distribution","train","currentDepth","parentGain","splitColumn","splittedMatrix","left","right","classify","setNodeParameters","node","defaultOptions","DecisionTreeClassifier","model","root","Tree","assign","trainingSet","trainingLabels","predict","toPredict","predictions","DecisionTreeRegression","trainingValues","SMALLEST_UNSAFE_INTEGER","LARGEST_SAFE_INTEGER","UINT32_MAX","UINT32_SIZE","INT32_SIZE","INT32_MAX","UINT21_SIZE","UINT21_MAX","checkFloat","examplesBaggingWithReplacement","trainingValue","seed","engine","Random","autoSeed","Xr","featureBagging","replacement","toRet","usedIndex","Set","has","RandomForestBase","maxFeatures","nEstimators","treeOptions","isClassifier","indexes","useSampleBagging","Estimator","DTClassifier","DTRegression","estimators","map","est","load","res","values","predictionValues","RandomForestClassifier","baseModel","mode","super","pop","_ref","module","exports","window","median","quickSelectMedian","slice","selectionMethods","arrayMean","arrayMedian","selectionMethod","RandomForestRegression","PCA","dataset","means","stdevs","S","R","excludedFeatures","isCovarianceMatrix","method","nCompNIPALS","ignoreZeroVariance","_computeFromCovarianceMatrix","_adjust","covarianceMatrix","_computeWithNIPALS","svd","singularValues","eigenvalues","singularValue","nComponents","invert","getExplainedVariance","getCumulativeVariance","explained","getEigenvectors","getEigenvalues","getStandardDeviations","getLoadings","evd","EVD","eigenvectorMatrix","realEigenvalues","reverse","dc","NIPALS","squaredEuclidean","euclidean","distanceMatrix","distanceFn","getMatrix","Heap","defaultCmp","heapify","heappop","heappush","heappushpop","heapreplace","insort","nlargest","nsmallest","updateItem","_siftdown","_siftup","lo","hi","cmp","mid","concat","item","lastelt","returnitem","_i","_j","_ref1","_results","_results1","_len","pos","elem","los","startpos","newitem","parent","parentpos","childpos","endpos","rightpos","nodes","replace","pushpop","peek","contains","clear","empty","heap","toArray","insert","top","front","require$$0","Cluster","children","height","isLeaf","cut","list","ans","group","groups","forEach","child","traverse","cb","visit","cluster","singleLink","dKI","dKJ","completeLink","averageLink","dIJ","nj","weightedAverageLink","centroidLink","medianLink","wardLink","nk","wardLink2","ai","aj","agnes","distanceFunction","isDistanceMatrix","updateFunc","getDistanceMatrix","numLeaves","toLowerCase","clusters","distance","getSmallestDistance","cluster1","cluster2","newCluster","newClusters","newDistanceMatrix","previous","newIndex","getPreviousIndex","prevI","prevICluster","smallest","smallestI","smallestJ","prev1","prev2","nearestVector","listVectors","similarityFunction","vectorIndex","maxSim","sim","minDist","MAX_VALUE","dist","calculateDistanceMatrix","updateClusterID","centers","clusterID","updateCenters","prevCenters","K","nDim","centersLen","dim","id","hasConverged","oldCenters","tolerance","LOOP","FLOAT_MUL","sh1","sh2","sh3","multiply_uint32","nlo","XSadd","Date","now","state","Uint32Array","init","getFloat","bind","getUint32","nextState","periodCertification","PROB_TOLERANCE","randomChoice","valuesArr","cumSum","getArray","randomIndex","seedOrRandom","xsadd","XSAdd","randomGenerator","choice","randomSample","mostDistant","maxDist","minDistCent","kmeanspp","nSamples","localTrials","firstCenterIdx","closestDistSquared","cumSumClosestDistSquared","candidateIdx","distanceToCandidates","euclideanDistances","bestCandidate","bestPot","bestDistSquared","newDistSquared","newPot","A","distanceSymbol","KMeansResult","centroids","converged","iterations","nearest","centroid","computeInformation","enrichedCentroids","withIterations","initialization","step","newCenters","kmeansGenerator","stepResult","stepNumber","kmeans","separateClasses","features","classes","totalPerClasses","separatedClasses","currentIndex","GaussianNB","reload","calculateProbabilities","C1","PI","std","logPriorProbability","currentStd","getCurrentClass","modelName","currentCase","maxProbability","predictedClass","currentProbability","calculateLogProbability","C2","MultinomialNB","conditionalProbability","priorProbability","separateClass","classValues","divisor","matrixLog","Node","obj","KDTree","points","metric","dimensions","buildTree","restoreParent","toJSONImpl","point","maxNodes","maxDistance","bestNodes","BinaryHeap","nearestSearch","ownDistance","linearPoint","bestChild","linearDistance","otherChild","saveNode","content","src","dest","depth","scoreFunction","element","bubbleUp","end","sinkDown","parentN","elemScore","child2N","child1N","swap","child1","child1Score","child2","KNN","labels","kdTree","isEuclidean","euclideanDistance","getSinglePrediction","knn","nearestPoints","pointsPerClass","maxPoints","lastElement","currentClass","currentPoints","pow2array","initializeMatrices","PLS","meanX","stdDevX","meanY","stdDevY","PBQ","R2X","scaleMethod","latentVectors","rx","cx","ry","cy","ssqXcal","sumOfSquaresY","T","P","Q","W","transposeX","transposeY","tIndex","maxSumColIndex","uIndex","t1","den","pnorm","ssqYcal","E","F","KOPLS","YLoadingMat","SigmaPow","YScoreMat","predScoreMat","YOrthLoadingVec","YOrthEigen","YOrthScoreMat","toNorm","TURegressionCoeff","kernelX","kernel","orthogonalComp","predictiveComp","predictiveComponents","orthogonalComponents","compute","Identity","Sigma","diagonalMatrix","YOrthScoreNorm","TpiPrime","CoTemp","SoTemp","toiPrime","ITo","lastScoreMat","lastTpPrime","KTestTrain","YOrthScoreVector","scoreMatPrime","p1","p2","p3","prediction","predYOrthVectors","ConfusionMatrix","actual","predicted","distinctLabels","actualIdx","predictedIdx","getLabels","getTotalCount","getTrueCount","getFalseCount","getTruePositiveCount","label","getIndex","getTrueNegativeCount","getFalsePositiveCount","getFalseNegativeCount","getPositiveCount","getNegativeCount","getTruePositiveRate","getTrueNegativeRate","getPositivePredictiveValue","TP","getNegativePredictiveValue","TN","getFalseNegativeRate","getFalsePositiveRate","getFalseDiscoveryRate","FP","getFalseOmissionRate","FN","getF1Score","getMatthewsCorrelationCoefficient","getInformedness","getMarkedness","getConfusionTable","getAccuracy","correct","incorrect","getCount","actualIndex","predictedIndex","M","N","twiddle","CV","initMatrix","getDistinct","validate","Classifier","classifierOptions","testIdx","trainIdx","confusionMatrix","distinct","testFeatures","trainFeatures","testLabels","trainLabels","getTrainTest","classifier","updateConfusionMatrix","validateWithCallback","predictedLabels","leaveOneOut","leavePOut","gen","combinations","allIdx","kFold","current","folds","randi","logistic","expELU","param","softExponential","softExponentialPrime","ACTIVATION_FUNCTIONS","activation","derivate","arctan","softsign","relu","softplus","bent","sinusoid","sinc","gaussian","Layer","inputSize","outputSize","regularization","epsilon","activationParam","selectedFunction","params","actFunction","derFunction","activationFunction","mlMatrix","forward","backpropagation","delta","dW","db","aCopy","update","OutputLayer","FeedForwardNeuralNetworks","hiddenLayers","learningRate","dicts","layers","keys","buildNetwork","dictOutputs","inputs","propagate","outputs","NodeSquare","weights","som","neighbors","adjustWeights","target","influence","getDistance","otherNode","getDistanceTorus","distX","distY","gridDim","getNeighbors","xy","torus","getPos","bestNeighbor","direction","simA","simB","getPosition","NodeHexagonal","hX","distZ","fields","randomizer","squareEuclidean","gridType","SOM","hasOwnProperty","numWeights","converters","getConverters","extractor","creator","nodeType","hx","distanceMethod","getMaxDistance","times","findBMU","adjust","iterationCount","startLearningRate","mapRadius","algorithmMethod","_initNodes","done","normalizers","denormalizers","getNormalizer","getDenormalizer","minMax","getRandomValue","zero","one","loadModel","eval","export","includeDistance","initNodes","setTraining","convertedSet","numIterations","timeConstant","trainOne","neighbourhoodRadius","trainingSetFactor","bmu","_findBestMatchingUnit","now2","radiusLimit","xMin","xMax","yMin","yMax","theX","theY","getConvertedNodes","candidate","lowest","computePosition","self","_predict","getQuantizationError","fit","getFit","maybeToPrecision","digits","checkArraySize","BaseRegression","toLaTeX","score","y2","xSum","ySum","chi2","rmsd","xSquared","ySquared","xY","PolynomialRegression","degree","powers","coefficients","checkArrayLength","regress","precision","_toFormula","isLaTeX","sup","closeSup","fn","str","charAt","json","pr","FT","SimpleLinearRegression","slope","intercept","computeX","xFactor","absIntercept","operator","slr","numerator","ExponentialRegression","er","yl","linear","PowerRegression","newInputs","latex","xl","MultivariateLinearRegression","statistics","xt","xx","invxx","beta","fittedValues","ri","reduce","stdError","stdErrorMatrix","stdErrors","tStats","summary","regressionStatistics","standardError","observations","variables","tStat","sigma","GaussianKernel","constant","PolynomialKernel","SigmoidKernel","ANOVAKernel","len","CauchyKernel","ExponentialKernel","HistogramIntersectionKernel","LaplacianKernel","MultiquadraticKernel","RationalQuadraticKernel","kernelType","rbf","polynomial","poly","anova","cauchy","histogram","HistogramKernel","laplacian","multiquadratic","rational","RationalKernel","sigmoid","mlp","Kernel","KernelConstructor","kernelFunction","landmarks","kernelMatrix","TheilSenRegression","theilSen","slopes","medianSlope","cuts","RobustPolynomialRegression","robustPolynomial","_","tuples","getRandomTuples","calcCoefficients","residuals","residualsMedian","tuple","half","errorCalculation","parameters","parameterizedFunction","func","gradientFunction","evaluatedData","gradientDifference","paramFunction","auxParams","funcParam","matrixFunction","damping","gradientFunc","matrixFunc","inverseMatrix","levenbergMarquardt","errorTolerance","minValues","maxValues","initialValues","parLen","MAX_SAFE_INTEGER","MIN_SAFE_INTEGER","iteration","parameterValues","parameterError","sortCollectionSet","collection","key","objectCollection","BigInt","sorted","cssls","XtX","XtY","Pset","choXtX","luXtX","sortedPset","sortedEset","cols2Solve","vars","initialisation","Fset","D","setDifference","C","includes","optimality","maxIter","Jset","fullSet","notPset","fcnnls","infeasIndex","Hset","ones","hRowColIdx","negRowColIdx","alphaMin","minIdx","idx2zero","findIndex","newParam","fcnnlsVector","haystack","needle","comparator","assertNumber","number","largestPrime","primeNumbers","nextPrime","binarySearch","ascending","FREE","FULL","REMOVED","defaultInitialCapacity","defaultMinLoadFactor","defaultMaxLoadFactor","HashTable","table","minLoadFactor","maxLoadFactor","freeEntries","lowWaterMark","highWaterMark","initialCapacity","capacity","chooseHighWaterMark","indexOfKey","indexOfInsertion","newCapacity","chooseGrowCapacity","rehash","remove","noRehash","maybeShrinkCapacity","delete","chooseShrinkCapacity","containsKey","hash","decrement","containsValue","indexOfValue","ensureCapacity","minCapacity","oldCapacity","oldTable","oldValues","oldState","newTable","newValues","newState","chooseLowWaterMark","forEachKey","forEachValue","forEachPair","minLoad","maxLoad","SparseMatrix","_init","elements","symmetric","forEachNonZero","bandWidth","isBanded","width","v1","v2","cardinality","getNonZeros","setThreshold","newThreshold","trans","inplaceOperator","inplaceOperatorScalar","inplaceOperatorMatrix","staticOperator","inplaceMethod","staticMethod","operators","fillTemplateFunction","op","methods","mathMethod","template","RegExp","additiveSymmetric","avg","bhattacharyya","canberra","chebyshev","clark","czekanowskiSimilarity","up","down","czekanowskiDistance","dice","q1","q2","divergence","fidelity","gower","harmonicMean","hellinger","innerProduct","intersection","jaccard","jeffreys","jensenDifference","jensenShannon","kdivergence","kulczynski","kullbackLeibler","kumarHassebrook","kumarJohnson","lorentzian","manhattan","matusita","minkowski","motyka","neyman","pearson","probabilisticSymmetric","ruzicka","soergel","sorensen","squared","squaredChord","taneja","tanimoto","bitvector","inter","union","tanimotoS","topsoe","waveHedges","createTree","spectrum","minWindow","to","mainCreateTree","start","getSimilarity","gamma","treeSimilarity","getFunction","cosine","diceD","intersectionD","jaccardD","kulczynskiD","motykaD","avgA","avgB","newA","newB","squaredChordD","pred","cutoffs","tn","tp","fp","nNeg","nPos","nPosPred","nNegPred","Performance","isDistance","predP","all","targ","currentPred","nTp","nFp","getMeasure","measure","measures","getAURC","auc","getAUDC","getDistribution","cutLength","cutLow","cutHigh","xLabels","interValues","intraValues","interCumPercent","intraCumPercent","nTP","currentTP","nFP","currentFP","thisTP","thisFP","names","acc","err","fpr","tpr","fnr","tnr","ppv","npv","pcfall","pcmiss","lift","rpp","rnp","arrayCase","cond","matrixCase","padArray","windowSize","derivative","pad","padValue","SavitzkyGolay","J","inic","Jtranspose","det","eightBits","arr1","arr2","getBit","mask","setBit","toBinaryString","substr","parseBinaryString","toHexString","parseHexString","toDebug","binary","maxCount","_options$algorithm","algorithm","absoluteSum","_typeof","iterator","sequentialFill","_options","_options$from","_options$to","_options$size","_options$unbiased","_options$mean","sqrError","mergeByCentroids","originalPoints","mergedPoints","originalIndex","mergedIndex","closestX","descending","maxMerge","groupWidth","merged","maxAbscissa","maxY","calculateIndex","sortX","sortFunc","grouped","response","uniqueX","weightedMerge","weightedAbscissa","integral","x0","x1","equallySpacedSmooth","numberOfPoints","xLength","halfStep","initialOriginalStep","lastOriginalStep","previousX","previousY","nextX","nextY","currentValue","sumAtMin","sumAtMax","main","equallySpacedSlot","lastStep","frontOutsideSpectra","backOutsideSpectra","getZones","exclusions","exclusion","JSON","parse","stringify","toRemove","unitsPerPoint","zones","currentFrom","totalPoints","currentNbPoints","equallySpaced","arrayXY","variant","xResult","yResult","zone","zoneResult","processZone","filterX","currentZoneIndex","newX","newY","position","MatrixLib","normed","ArrayXY","centroidsMerge"],"mappings":"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QAAQkV,SACV,IAAIjV,UAAU,+BAGd+6C,OAAOrgC,EADPpT,OAAOwI,aAAamF,GACP3U,GACXsB,8FClBK,SAAS+5C,EAAUC,EAAQC,EAAYx6B,EAAKD,OACvDgO,EAAKD,UAEE3uB,IAAR6gB,EACDA,EAAM,WAGNA,GAAU,GACD,GAAKA,GAAOs6B,EAAS17C,OAC5B,MAAM,IAAIW,WAAW,+BAGbJ,IAAT4gB,EACDA,EAAOu6B,EAAS17C,OAAS,WAGzBmhB,GAAY,GACFC,GAAOD,GAAQu6B,EAAS17C,OAChC,MAAM,IAAIW,WAAW,4BAGnBygB,GAAOD,OAMX+N,GAAO0sB,EAAWF,EADlBvsB,EAAM/N,GAAQD,EAAOC,IAAS,IACGu6B,EAAQxsB,EAAKusB,IAGrC,EACPt6B,EAAO+N,EAAM,MAGV,CAAA,KAAGD,EAAM,GAKZ,OAAOC,EAJPhO,EAAOgO,EAAM,SAQT/N,GCzCV,SAASy6B,aAAaC,MACC,iBAAXA,GAAuBlvC,OAAO+P,MAAMm/B,SACxC,IAAI/7C,UAAU,qBAItB,cAAoB,CAACknB,EAAMC,KAC1B20B,aAAa50B,GACb40B,aAAa30B,GACND,EAAOC,cAGM,CAACD,EAAMC,KAC3B20B,aAAa50B,GACb40B,aAAa30B,GACNA,EAAQD,kKCdT,MAAM80B,aAAe,WAEtBC,aAAe,CAEnBD,aAGA,EACA,GACA,GACA,GACA,GACA,IACA,IACA,IACA,KACA,KACA,KACA,MACA,MACA,MACA,OACA,OACA,OACA,OACA,QACA,QACA,QACA,SACA,SACA,SACA,UACA,UACA,UACA,UACA,WAGA,IACA,IACA,KACA,KACA,KACA,MACA,MACA,MACA,OACA,OACA,OACA,OACA,QACA,QACA,QACA,SACA,SACA,SACA,UACA,UACA,UACA,UACA,WAGA,IACA,KACA,KACA,KACA,MACA,MACA,MACA,OACA,OACA,OACA,OACA,QACA,QACA,QACA,SACA,SACA,SACA,UACA,UACA,UACA,WACA,WAGA,KACA,KACA,KACA,KACA,MACA,MACA,MACA,OACA,OACA,OACA,QACA,QACA,QACA,QACA,SACA,SACA,SACA,UACA,UACA,UACA,WAGA,GACA,GACA,IACA,IACA,IACA,KACA,KACA,KACA,KACA,MACA,MACA,MACA,OACA,OACA,OACA,QACA,QACA,QACA,QACA,SACA,SACA,SACA,UACA,UACA,UACA,WAGA,IACA,KACA,KACA,KACA,KACA,MACA,MACA,MACA,OACA,OACA,OACA,QACA,QACA,QACA,QACA,SACA,SACA,SACA,UACA,UACA,UACA,WAGA,IACA,IACA,KACA,KACA,KACA,MACA,MACA,MACA,MACA,OACA,OACA,OACA,QACA,QACA,QACA,SACA,SACA,SACA,SACA,UACA,UACA,UACA,WAGA,EACA,EACA,GACA,GACA,GACA,IACA,IACA,IACA,KACA,KACA,KACA,MACA,MACA,MACA,MACA,OACA,OACA,OACA,QACA,QACA,QACA,SACA,SACA,SACA,SACA,UACA,UACA,UACA,WAGA,GACA,GACA,IACA,IACA,IACA,KACA,KACA,KACA,MACA,MACA,MACA,MACA,OACA,OACA,OACA,QACA,QACA,QACA,SACA,SACA,SACA,SACA,UACA,UACA,UACA,WAGA,IACA,IACA,KACA,KACA,KACA,MACA,MACA,MACA,MACA,OACA,OACA,OACA,QACA,QACA,QACA,SACA,SACA,SACA,UACA,UACA,UACA,UACA,WAGA,GACA,GACA,GACA,IACA,IACA,IACA,KACA,KACA,KACA,KACA,MACA,MACA,MACA,OACA,OACA,OACA,QACA,QACA,QACA,QACA,SACA,SACA,SACA,UACA,UACA,UACA,WAGA,GACA,GACA,GACA,IACA,IACA,IACA,KACA,KACA,KACA,MACA,MACA,MACA,MACA,OACA,OACA,OACA,QACA,QACA,QACA,SACA,SACA,SACA,SACA,UACA,UACA,UACA,WAGA,GACA,IACA,IACA,IACA,IACA,KACA,KACA,KACA,MACA,MACA,MACA,OACA,OACA,OACA,OACA,QACA,QACA,QACA,SACA,SACA,SACA,UACA,UACA,UACA,UACA,YAKK,SAASE,UAAUl5C,OACpB3B,EAAQ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"} \ No newline at end of file diff --git a/package.json b/package.json index 9fbba60..a6876e8 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ml", - "version": "4.0.0", + "version": "5.0.0", "description": "Machine learning tools", "main": "src/index.js", "scripts": {