Comparing version 4.0.0 to 4.0.1
@@ -1,11 +0,6 @@ | ||
import { Options } from './types'; | ||
export declare const z: (options: Options) => number; | ||
export declare const mu: (options: Options) => number; | ||
export declare const tau: (options: Options) => number; | ||
export declare const sigma: (options: Options) => number; | ||
export declare const epsilon: (options: Options) => number; | ||
export declare const beta: (options: Options) => number; | ||
export declare const betaSq: (options: Options) => number; | ||
export declare const limitSigma: (options: Options) => boolean; | ||
declare const _default: (options: Options) => { | ||
import { Options } from './types.js'; | ||
declare const builder: (options: Options) => { | ||
SIGMA: number; | ||
MU: number; | ||
EPSILON: number; | ||
@@ -19,2 +14,3 @@ TWOBETASQ: number; | ||
}; | ||
export default _default; | ||
export { builder as default }; |
@@ -1,33 +0,22 @@ | ||
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { | ||
value: true | ||
}); | ||
exports.z = exports.tau = exports.sigma = exports.mu = exports.limitSigma = exports.epsilon = exports.default = exports.betaSq = exports.beta = void 0; | ||
const z = options => options?.z ?? 3; | ||
exports.z = z; | ||
const mu = options => options?.mu ?? 25; | ||
exports.mu = mu; | ||
const tau = options => options?.tau ?? mu(options) / 300; | ||
exports.tau = tau; | ||
const sigma = options => options?.sigma ?? mu(options) / z(options); | ||
exports.sigma = sigma; | ||
const epsilon = options => options?.epsilon ?? 0.0001; | ||
exports.epsilon = epsilon; | ||
const beta = options => options?.beta ?? sigma(options) / 2; | ||
exports.beta = beta; | ||
const betaSq = options => beta(options) ** 2; | ||
exports.betaSq = betaSq; | ||
const limitSigma = options => options?.limitSigma ?? options?.preventSigmaIncrease ?? false; | ||
exports.limitSigma = limitSigma; | ||
var _default = options => ({ | ||
EPSILON: epsilon(options), | ||
TWOBETASQ: 2 * betaSq(options), | ||
BETA: beta(options), | ||
BETASQ: betaSq(options), | ||
Z: z(options), | ||
TAU: tau(options), | ||
LIMIT_SIGMA: limitSigma(options) | ||
}); | ||
exports.default = _default; | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ6Iiwib3B0aW9ucyIsImV4cG9ydHMiLCJtdSIsInRhdSIsInNpZ21hIiwiZXBzaWxvbiIsImJldGEiLCJiZXRhU3EiLCJsaW1pdFNpZ21hIiwicHJldmVudFNpZ21hSW5jcmVhc2UiLCJfZGVmYXVsdCIsIkVQU0lMT04iLCJUV09CRVRBU1EiLCJCRVRBIiwiQkVUQVNRIiwiWiIsIlRBVSIsIkxJTUlUX1NJR01BIiwiZGVmYXVsdCJdLCJzb3VyY2VzIjpbIi4uL3NyYy9jb25zdGFudHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT3B0aW9ucyB9IGZyb20gJy4vdHlwZXMnXG5cbmV4cG9ydCBjb25zdCB6ID0gKG9wdGlvbnM6IE9wdGlvbnMpID0+IG9wdGlvbnM/LnogPz8gM1xuZXhwb3J0IGNvbnN0IG11ID0gKG9wdGlvbnM6IE9wdGlvbnMpID0+IG9wdGlvbnM/Lm11ID8/IDI1XG5leHBvcnQgY29uc3QgdGF1ID0gKG9wdGlvbnM6IE9wdGlvbnMpID0+IG9wdGlvbnM/LnRhdSA/PyBtdShvcHRpb25zKSAvIDMwMFxuZXhwb3J0IGNvbnN0IHNpZ21hID0gKG9wdGlvbnM6IE9wdGlvbnMpID0+IG9wdGlvbnM/LnNpZ21hID8/IG11KG9wdGlvbnMpIC8geihvcHRpb25zKVxuXG5leHBvcnQgY29uc3QgZXBzaWxvbiA9IChvcHRpb25zOiBPcHRpb25zKSA9PiBvcHRpb25zPy5lcHNpbG9uID8/IDAuMDAwMVxuZXhwb3J0IGNvbnN0IGJldGEgPSAob3B0aW9uczogT3B0aW9ucykgPT4gb3B0aW9ucz8uYmV0YSA/PyBzaWdtYShvcHRpb25zKSAvIDJcbmV4cG9ydCBjb25zdCBiZXRhU3EgPSAob3B0aW9uczogT3B0aW9ucykgPT4gYmV0YShvcHRpb25zKSAqKiAyXG5leHBvcnQgY29uc3QgbGltaXRTaWdtYSA9IChvcHRpb25zOiBPcHRpb25zKSA9PiBvcHRpb25zPy5saW1pdFNpZ21hID8/IG9wdGlvbnM/LnByZXZlbnRTaWdtYUluY3JlYXNlID8/IGZhbHNlXG5cbmV4cG9ydCBkZWZhdWx0IChvcHRpb25zOiBPcHRpb25zKSA9PiAoe1xuICBFUFNJTE9OOiBlcHNpbG9uKG9wdGlvbnMpLFxuICBUV09CRVRBU1E6IDIgKiBiZXRhU3Eob3B0aW9ucyksXG4gIEJFVEE6IGJldGEob3B0aW9ucyksXG4gIEJFVEFTUTogYmV0YVNxKG9wdGlvbnMpLFxuICBaOiB6KG9wdGlvbnMpLFxuICBUQVU6IHRhdShvcHRpb25zKSxcbiAgTElNSVRfU0lHTUE6IGxpbWl0U2lnbWEob3B0aW9ucyksXG59KVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFFTyxNQUFNQSxDQUFDLEdBQUlDLE9BQWdCLElBQUtBLE9BQU8sRUFBRUQsQ0FBQyxJQUFJLENBQUM7QUFBQUUsT0FBQSxDQUFBRixDQUFBLEdBQUFBLENBQUE7QUFDL0MsTUFBTUcsRUFBRSxHQUFJRixPQUFnQixJQUFLQSxPQUFPLEVBQUVFLEVBQUUsSUFBSSxFQUFFO0FBQUFELE9BQUEsQ0FBQUMsRUFBQSxHQUFBQSxFQUFBO0FBQ2xELE1BQU1DLEdBQUcsR0FBSUgsT0FBZ0IsSUFBS0EsT0FBTyxFQUFFRyxHQUFHLElBQUlELEVBQUUsQ0FBQ0YsT0FBTyxDQUFDLEdBQUcsR0FBRztBQUFBQyxPQUFBLENBQUFFLEdBQUEsR0FBQUEsR0FBQTtBQUNuRSxNQUFNQyxLQUFLLEdBQUlKLE9BQWdCLElBQUtBLE9BQU8sRUFBRUksS0FBSyxJQUFJRixFQUFFLENBQUNGLE9BQU8sQ0FBQyxHQUFHRCxDQUFDLENBQUNDLE9BQU8sQ0FBQztBQUFBQyxPQUFBLENBQUFHLEtBQUEsR0FBQUEsS0FBQTtBQUU5RSxNQUFNQyxPQUFPLEdBQUlMLE9BQWdCLElBQUtBLE9BQU8sRUFBRUssT0FBTyxJQUFJLE1BQU07QUFBQUosT0FBQSxDQUFBSSxPQUFBLEdBQUFBLE9BQUE7QUFDaEUsTUFBTUMsSUFBSSxHQUFJTixPQUFnQixJQUFLQSxPQUFPLEVBQUVNLElBQUksSUFBSUYsS0FBSyxDQUFDSixPQUFPLENBQUMsR0FBRyxDQUFDO0FBQUFDLE9BQUEsQ0FBQUssSUFBQSxHQUFBQSxJQUFBO0FBQ3RFLE1BQU1DLE1BQU0sR0FBSVAsT0FBZ0IsSUFBS00sSUFBSSxDQUFDTixPQUFPLENBQUMsSUFBSSxDQUFDO0FBQUFDLE9BQUEsQ0FBQU0sTUFBQSxHQUFBQSxNQUFBO0FBQ3ZELE1BQU1DLFVBQVUsR0FBSVIsT0FBZ0IsSUFBS0EsT0FBTyxFQUFFUSxVQUFVLElBQUlSLE9BQU8sRUFBRVMsb0JBQW9CLElBQUksS0FBSztBQUFBUixPQUFBLENBQUFPLFVBQUEsR0FBQUEsVUFBQTtBQUFBLElBQUFFLFFBQUEsR0FFN0ZWLE9BQWdCLEtBQU07RUFDcENXLE9BQU8sRUFBRU4sT0FBTyxDQUFDTCxPQUFPLENBQUM7RUFDekJZLFNBQVMsRUFBRSxDQUFDLEdBQUdMLE1BQU0sQ0FBQ1AsT0FBTyxDQUFDO0VBQzlCYSxJQUFJLEVBQUVQLElBQUksQ0FBQ04sT0FBTyxDQUFDO0VBQ25CYyxNQUFNLEVBQUVQLE1BQU0sQ0FBQ1AsT0FBTyxDQUFDO0VBQ3ZCZSxDQUFDLEVBQUVoQixDQUFDLENBQUNDLE9BQU8sQ0FBQztFQUNiZ0IsR0FBRyxFQUFFYixHQUFHLENBQUNILE9BQU8sQ0FBQztFQUNqQmlCLFdBQVcsRUFBRVQsVUFBVSxDQUFDUixPQUFPO0FBQ2pDLENBQUMsQ0FBQztBQUFBQyxPQUFBLENBQUFpQixPQUFBLEdBQUFSLFFBQUEiLCJpZ25vcmVMaXN0IjpbXX0= | ||
// src/constants.ts | ||
var builder = (options) => { | ||
const { z = 3, mu = 25, preventSigmaIncrease = false, epsilon = 1e-4 } = options; | ||
const { tau = mu / 300, sigma = mu / z, beta = sigma / 2, limitSigma = preventSigmaIncrease } = options; | ||
const betaSq = beta ** 2; | ||
return { | ||
SIGMA: sigma, | ||
MU: mu, | ||
EPSILON: epsilon, | ||
TWOBETASQ: 2 * betaSq, | ||
BETA: beta, | ||
BETASQ: betaSq, | ||
Z: z, | ||
TAU: tau, | ||
LIMIT_SIGMA: limitSigma | ||
}; | ||
}; | ||
var constants_default = builder; | ||
export { | ||
constants_default as default | ||
}; | ||
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL2NvbnN0YW50cy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0IHsgT3B0aW9ucyB9IGZyb20gJy4vdHlwZXMnXG5cbmNvbnN0IGJ1aWxkZXIgPSAob3B0aW9uczogT3B0aW9ucykgPT4ge1xuICAvLyBpJ2QgbG92ZSB0byBrbm93IG9mIGEgYmV0dGVyIHdheSB0byBkbyB0aGlzXG4gIGNvbnN0IHsgeiA9IDMsIG11ID0gMjUsIHByZXZlbnRTaWdtYUluY3JlYXNlID0gZmFsc2UsIGVwc2lsb24gPSAwLjAwMDEgfSA9IG9wdGlvbnNcbiAgY29uc3QgeyB0YXUgPSBtdSAvIDMwMCwgc2lnbWEgPSBtdSAvIHosIGJldGEgPSBzaWdtYSAvIDIsIGxpbWl0U2lnbWEgPSBwcmV2ZW50U2lnbWFJbmNyZWFzZSB9ID0gb3B0aW9uc1xuICBjb25zdCBiZXRhU3EgPSBiZXRhICoqIDJcblxuICByZXR1cm4ge1xuICAgIFNJR01BOiBzaWdtYSxcbiAgICBNVTogbXUsXG4gICAgRVBTSUxPTjogZXBzaWxvbixcbiAgICBUV09CRVRBU1E6IDIgKiBiZXRhU3EsXG4gICAgQkVUQTogYmV0YSxcbiAgICBCRVRBU1E6IGJldGFTcSxcbiAgICBaOiB6LFxuICAgIFRBVTogdGF1LFxuICAgIExJTUlUX1NJR01BOiBsaW1pdFNpZ21hLFxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJ1aWxkZXJcbiJdLAogICJtYXBwaW5ncyI6ICI7QUFFQSxJQUFNLFVBQVUsQ0FBQyxZQUFxQjtBQUVwQyxRQUFNLEVBQUUsSUFBSSxHQUFHLEtBQUssSUFBSSx1QkFBdUIsT0FBTyxVQUFVLEtBQU8sSUFBSTtBQUMzRSxRQUFNLEVBQUUsTUFBTSxLQUFLLEtBQUssUUFBUSxLQUFLLEdBQUcsT0FBTyxRQUFRLEdBQUcsYUFBYSxxQkFBcUIsSUFBSTtBQUNoRyxRQUFNLFNBQVMsUUFBUTtBQUV2QixTQUFPO0FBQUEsSUFDTCxPQUFPO0FBQUEsSUFDUCxJQUFJO0FBQUEsSUFDSixTQUFTO0FBQUEsSUFDVCxXQUFXLElBQUk7QUFBQSxJQUNmLE1BQU07QUFBQSxJQUNOLFFBQVE7QUFBQSxJQUNSLEdBQUc7QUFBQSxJQUNILEtBQUs7QUFBQSxJQUNMLGFBQWE7QUFBQSxFQUNmO0FBQ0Y7QUFFQSxJQUFPLG9CQUFROyIsCiAgIm5hbWVzIjogW10KfQo= |
@@ -1,5 +0,6 @@ | ||
export { default as rating } from './rating'; | ||
export { default as rate } from './rate'; | ||
export { default as ordinal } from './ordinal'; | ||
export { default as predictWin } from './predict-win'; | ||
export { default as predictDraw } from './predict-draw'; | ||
export { default as rating } from './rating.js'; | ||
export { default as rate } from './rate.js'; | ||
export { default as ordinal } from './ordinal.js'; | ||
export { default as predictWin } from './predict-win.js'; | ||
export { default as predictDraw } from './predict-draw.js'; | ||
import './types.js'; |
@@ -1,42 +0,217 @@ | ||
"use strict"; | ||
var __defProp = Object.defineProperty; | ||
var __defProps = Object.defineProperties; | ||
var __getOwnPropDescs = Object.getOwnPropertyDescriptors; | ||
var __getOwnPropSymbols = Object.getOwnPropertySymbols; | ||
var __hasOwnProp = Object.prototype.hasOwnProperty; | ||
var __propIsEnum = Object.prototype.propertyIsEnumerable; | ||
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value; | ||
var __spreadValues = (a, b) => { | ||
for (var prop in b || (b = {})) | ||
if (__hasOwnProp.call(b, prop)) | ||
__defNormalProp(a, prop, b[prop]); | ||
if (__getOwnPropSymbols) | ||
for (var prop of __getOwnPropSymbols(b)) { | ||
if (__propIsEnum.call(b, prop)) | ||
__defNormalProp(a, prop, b[prop]); | ||
} | ||
return a; | ||
}; | ||
var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b)); | ||
Object.defineProperty(exports, "__esModule", { | ||
value: true | ||
}); | ||
Object.defineProperty(exports, "ordinal", { | ||
enumerable: true, | ||
get: function () { | ||
return _ordinal.default; | ||
// src/constants.ts | ||
var builder = (options) => { | ||
const { z = 3, mu = 25, preventSigmaIncrease = false, epsilon = 1e-4 } = options; | ||
const { tau = mu / 300, sigma = mu / z, beta = sigma / 2, limitSigma = preventSigmaIncrease } = options; | ||
const betaSq = beta ** 2; | ||
return { | ||
SIGMA: sigma, | ||
MU: mu, | ||
EPSILON: epsilon, | ||
TWOBETASQ: 2 * betaSq, | ||
BETA: beta, | ||
BETASQ: betaSq, | ||
Z: z, | ||
TAU: tau, | ||
LIMIT_SIGMA: limitSigma | ||
}; | ||
}; | ||
var constants_default = builder; | ||
// src/rating.ts | ||
var rating = (init, options = {}) => { | ||
const { MU: mu, SIGMA: sigma } = constants_default(__spreadValues(__spreadValues({}, options), init)); | ||
return { mu, sigma }; | ||
}; | ||
var rating_default = rating; | ||
// src/rate.ts | ||
import { sortBy, identity, range } from "ramda"; | ||
import unwind from "sort-unwind"; | ||
// src/util.ts | ||
import { zip } from "ramda"; | ||
var sum = (a, b) => a + b; | ||
var rankings = (teams, rank = []) => { | ||
const teamScores = teams.map((_, i) => rank[i] || i); | ||
const outRank = new Array(teams.length); | ||
let s = 0; | ||
for (let j = 0; j < teamScores.length; j += 1) { | ||
if (j > 0 && teamScores[j - 1] < teamScores[j]) { | ||
s = j; | ||
} | ||
outRank[j] = s; | ||
} | ||
return outRank; | ||
}; | ||
var teamRating = (options) => (game) => { | ||
const rank = rankings(game, options.rank); | ||
return game.map((team, i) => [ | ||
// mu[i] | ||
team.map(({ mu }) => mu).reduce(sum, 0), | ||
// sigma^2[i] | ||
team.map(({ sigma }) => sigma * sigma).reduce(sum, 0), | ||
// (original team data) | ||
team, | ||
// rank[i] | ||
rank[i] | ||
]); | ||
}; | ||
var utilC = (options) => { | ||
const { BETASQ } = constants_default(options); | ||
return (teamRatings) => Math.sqrt(teamRatings.map(([_teamMu, teamSigmaSq, _team, _rank]) => teamSigmaSq + BETASQ).reduce(sum, 0)); | ||
}; | ||
var utilSumQ = (teamRatings, c) => teamRatings.map( | ||
([_qMu, _qSigmaSq, _qTeam, qRank]) => teamRatings.filter(([_iMu, _iSigmaSq, _iTeam, iRank]) => iRank >= qRank).map(([iMu, _iSigmaSq, _iTeam, _iRank]) => Math.exp(iMu / c)).reduce(sum, 0) | ||
); | ||
var utilA = (teamRatings) => teamRatings.map( | ||
([_iMu, _iSigmaSq, _iTeam, iRank]) => teamRatings.filter(([_qMu, _qSigmaSq, _qTeam, qRank]) => iRank === qRank).length | ||
); | ||
var gamma = (options) => { | ||
var _a; | ||
return (_a = options.gamma) != null ? _a : ( | ||
// default to iSigma / c | ||
(c, _k, _mu, sigmaSq, _team, _qRank) => Math.sqrt(sigmaSq) / c | ||
); | ||
}; | ||
var util_default = (options) => ({ | ||
utilC: utilC(options), | ||
teamRating: teamRating(options), | ||
gamma: gamma(options) | ||
}); | ||
Object.defineProperty(exports, "predictDraw", { | ||
enumerable: true, | ||
get: function () { | ||
return _predictDraw.default; | ||
// src/models/plackett-luce.ts | ||
var model = (game, options = {}) => { | ||
const { EPSILON } = constants_default(options); | ||
const { utilC: utilC2, teamRating: teamRating2, gamma: gamma2 } = util_default(options); | ||
const teamRatings = teamRating2(game); | ||
const c = utilC2(teamRatings); | ||
const sumQ = utilSumQ(teamRatings, c); | ||
const a = utilA(teamRatings); | ||
return teamRatings.map((iTeamRating, i) => { | ||
const [iMu, iSigmaSq, iTeam, iRank] = iTeamRating; | ||
const iMuOverCe = Math.exp(iMu / c); | ||
const [omegaSum, deltaSum] = teamRatings.filter(([_qMu, _qSigmaSq, _qTeam, qRank]) => qRank <= iRank).reduce( | ||
([omega, delta], [_], q) => { | ||
const quotient = iMuOverCe / sumQ[q]; | ||
return [omega + (i === q ? 1 - quotient : -quotient) / a[q], delta + quotient * (1 - quotient) / a[q]]; | ||
}, | ||
[0, 0] | ||
); | ||
const iGamma = gamma2(c, teamRatings.length, ...iTeamRating); | ||
const iOmega = omegaSum * (iSigmaSq / c); | ||
const iDelta = iGamma * deltaSum * (iSigmaSq / c ** 2); | ||
return iTeam.map(({ mu, sigma }) => ({ | ||
mu: mu + sigma ** 2 / iSigmaSq * iOmega, | ||
sigma: sigma * Math.sqrt(Math.max(1 - sigma ** 2 / iSigmaSq * iDelta, EPSILON)) | ||
})); | ||
}); | ||
}; | ||
var plackett_luce_default = model; | ||
// src/statistics.ts | ||
import gaussian from "gaussian"; | ||
var normal = gaussian(0, 1); | ||
var phiMajor = (x) => normal.cdf(x); | ||
var phiMajorInverse = (x) => normal.ppf(x); | ||
// src/rate.ts | ||
var rate = (teams, options = {}) => { | ||
var _a, _b, _c; | ||
const { LIMIT_SIGMA, TAU } = constants_default(options); | ||
const { model: model2 = plackett_luce_default } = options; | ||
let processedTeams = teams; | ||
if (options.tau) { | ||
const tauSquared = TAU * TAU; | ||
processedTeams = teams.map( | ||
(team) => team.map((p) => __spreadProps(__spreadValues({}, p), { | ||
sigma: Math.sqrt(p.sigma * p.sigma + tauSquared) | ||
})) | ||
); | ||
} | ||
}); | ||
Object.defineProperty(exports, "predictWin", { | ||
enumerable: true, | ||
get: function () { | ||
return _predictWin.default; | ||
const rank = (_c = (_b = options.rank) != null ? _b : (_a = options.score) == null ? void 0 : _a.map((points) => -points)) != null ? _c : range(1, teams.length + 1); | ||
const [orderedTeams, tenet] = unwind(rank, processedTeams); | ||
const newRatings = model2(orderedTeams, __spreadProps(__spreadValues({}, options), { | ||
rank: sortBy(identity, rank) | ||
})); | ||
let [reorderedTeams] = unwind(tenet, newRatings); | ||
if (TAU && LIMIT_SIGMA) { | ||
reorderedTeams = reorderedTeams.map( | ||
(team, i) => team.map((p, j) => __spreadProps(__spreadValues({}, p), { | ||
sigma: Math.min(p.sigma, teams[i][j].sigma) | ||
})) | ||
); | ||
} | ||
}); | ||
Object.defineProperty(exports, "rate", { | ||
enumerable: true, | ||
get: function () { | ||
return _rate.default; | ||
} | ||
}); | ||
Object.defineProperty(exports, "rating", { | ||
enumerable: true, | ||
get: function () { | ||
return _rating.default; | ||
} | ||
}); | ||
var _rating = _interopRequireDefault(require("./rating")); | ||
var _rate = _interopRequireDefault(require("./rate")); | ||
var _ordinal = _interopRequireDefault(require("./ordinal")); | ||
var _predictWin = _interopRequireDefault(require("./predict-win")); | ||
var _predictDraw = _interopRequireDefault(require("./predict-draw")); | ||
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmF0aW5nIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfcmF0ZSIsIl9vcmRpbmFsIiwiX3ByZWRpY3RXaW4iLCJfcHJlZGljdERyYXciLCJlIiwiX19lc01vZHVsZSIsImRlZmF1bHQiXSwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHsgZGVmYXVsdCBhcyByYXRpbmcgfSBmcm9tICcuL3JhdGluZydcbmV4cG9ydCB7IGRlZmF1bHQgYXMgcmF0ZSB9IGZyb20gJy4vcmF0ZSdcbmV4cG9ydCB7IGRlZmF1bHQgYXMgb3JkaW5hbCB9IGZyb20gJy4vb3JkaW5hbCdcbmV4cG9ydCB7IGRlZmF1bHQgYXMgcHJlZGljdFdpbiB9IGZyb20gJy4vcHJlZGljdC13aW4nXG5leHBvcnQgeyBkZWZhdWx0IGFzIHByZWRpY3REcmF3IH0gZnJvbSAnLi9wcmVkaWN0LWRyYXcnXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsSUFBQUEsT0FBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsS0FBQSxHQUFBRixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUUsUUFBQSxHQUFBSCxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUcsV0FBQSxHQUFBSixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUksWUFBQSxHQUFBTCxzQkFBQSxDQUFBQyxPQUFBO0FBQXVELFNBQUFELHVCQUFBTSxDQUFBLFdBQUFBLENBQUEsSUFBQUEsQ0FBQSxDQUFBQyxVQUFBLEdBQUFELENBQUEsS0FBQUUsT0FBQSxFQUFBRixDQUFBIiwiaWdub3JlTGlzdCI6W119 | ||
return reorderedTeams; | ||
}; | ||
var rate_default = rate; | ||
// src/ordinal.ts | ||
var ordinal = (rating2, options = {}) => { | ||
const { sigma, mu } = rating2; | ||
const { Z } = constants_default(options); | ||
return mu - Z * sigma; | ||
}; | ||
var ordinal_default = ordinal; | ||
// src/predict-win.ts | ||
var predictWin = (teams, options = {}) => { | ||
const { teamRating: teamRating2 } = util_default(options); | ||
const { BETASQ } = constants_default(options); | ||
const teamRatings = teamRating2(teams); | ||
const n = teams.length; | ||
const denom = n * (n - 1) / 2; | ||
return teamRatings.map( | ||
([muA, sigmaSqA], i) => teamRatings.filter((_, q) => i !== q).map(([muB, sigmaSqB]) => phiMajor((muA - muB) / Math.sqrt(n * BETASQ + sigmaSqA + sigmaSqB))).reduce(sum, 0) / denom | ||
); | ||
}; | ||
var predict_win_default = predictWin; | ||
// src/predict-draw.ts | ||
import { flatten } from "ramda"; | ||
var predictWin2 = (teams, options = {}) => { | ||
const { teamRating: teamRating2 } = util_default(options); | ||
const { BETASQ, BETA } = constants_default(options); | ||
const n = teams.length; | ||
if (n === 0) return void 0; | ||
if (n === 1) return 1; | ||
const denom = n * (n - 1) / (n > 2 ? 1 : 2); | ||
const teamRatings = teamRating2(teams); | ||
const drawMargin = Math.sqrt(flatten(teams).length) * BETA * phiMajorInverse((1 + 1 / n) / 2); | ||
return Math.abs( | ||
teamRatings.map( | ||
([muA, sigmaSqA], i) => teamRatings.filter((_, q) => i !== q).map(([muB, sigmaSqB]) => { | ||
const sigmaBar = Math.sqrt(n * BETASQ + sigmaSqA + sigmaSqB); | ||
return phiMajor((drawMargin - muA + muB) / sigmaBar) - phiMajor((muA - muB - drawMargin) / sigmaBar); | ||
}) | ||
).flat().reduce(sum, 0) | ||
) / denom; | ||
}; | ||
var predict_draw_default = predictWin2; | ||
export { | ||
ordinal_default as ordinal, | ||
predict_draw_default as predictDraw, | ||
predict_win_default as predictWin, | ||
rate_default as rate, | ||
rating_default as rating | ||
}; | ||
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL2NvbnN0YW50cy50cyIsICIuLi9zcmMvcmF0aW5nLnRzIiwgIi4uL3NyYy9yYXRlLnRzIiwgIi4uL3NyYy91dGlsLnRzIiwgIi4uL3NyYy9tb2RlbHMvcGxhY2tldHQtbHVjZS50cyIsICIuLi9zcmMvc3RhdGlzdGljcy50cyIsICIuLi9zcmMvb3JkaW5hbC50cyIsICIuLi9zcmMvcHJlZGljdC13aW4udHMiLCAiLi4vc3JjL3ByZWRpY3QtZHJhdy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0IHsgT3B0aW9ucyB9IGZyb20gJy4vdHlwZXMnXG5cbmNvbnN0IGJ1aWxkZXIgPSAob3B0aW9uczogT3B0aW9ucykgPT4ge1xuICAvLyBpJ2QgbG92ZSB0byBrbm93IG9mIGEgYmV0dGVyIHdheSB0byBkbyB0aGlzXG4gIGNvbnN0IHsgeiA9IDMsIG11ID0gMjUsIHByZXZlbnRTaWdtYUluY3JlYXNlID0gZmFsc2UsIGVwc2lsb24gPSAwLjAwMDEgfSA9IG9wdGlvbnNcbiAgY29uc3QgeyB0YXUgPSBtdSAvIDMwMCwgc2lnbWEgPSBtdSAvIHosIGJldGEgPSBzaWdtYSAvIDIsIGxpbWl0U2lnbWEgPSBwcmV2ZW50U2lnbWFJbmNyZWFzZSB9ID0gb3B0aW9uc1xuICBjb25zdCBiZXRhU3EgPSBiZXRhICoqIDJcblxuICByZXR1cm4ge1xuICAgIFNJR01BOiBzaWdtYSxcbiAgICBNVTogbXUsXG4gICAgRVBTSUxPTjogZXBzaWxvbixcbiAgICBUV09CRVRBU1E6IDIgKiBiZXRhU3EsXG4gICAgQkVUQTogYmV0YSxcbiAgICBCRVRBU1E6IGJldGFTcSxcbiAgICBaOiB6LFxuICAgIFRBVTogdGF1LFxuICAgIExJTUlUX1NJR01BOiBsaW1pdFNpZ21hLFxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJ1aWxkZXJcbiIsICJpbXBvcnQgY29uc3RhbnRzIGZyb20gJy4vY29uc3RhbnRzJ1xuaW1wb3J0IHsgT3B0aW9ucywgUmF0aW5nIH0gZnJvbSAnLi90eXBlcydcblxuY29uc3QgcmF0aW5nID0gKGluaXQ/OiB7IG11PzogbnVtYmVyOyBzaWdtYT86IG51bWJlciB9LCBvcHRpb25zOiBPcHRpb25zID0ge30pOiBSYXRpbmcgPT4ge1xuICBjb25zdCB7IE1VOiBtdSwgU0lHTUE6IHNpZ21hIH0gPSBjb25zdGFudHMoeyAuLi5vcHRpb25zLCAuLi5pbml0IH0pXG4gIHJldHVybiB7IG11LCBzaWdtYSB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IHJhdGluZ1xuIiwgImltcG9ydCB7IHNvcnRCeSwgaWRlbnRpdHksIHJhbmdlIH0gZnJvbSAncmFtZGEnXG5pbXBvcnQgdW53aW5kIGZyb20gJ3NvcnQtdW53aW5kJ1xuXG5pbXBvcnQgeyBSYXRpbmcsIE9wdGlvbnMsIFRlYW0gfSBmcm9tICcuL3R5cGVzJ1xuaW1wb3J0IGNvbnN0YW50cyBmcm9tICcuL2NvbnN0YW50cydcbmltcG9ydCB7IHBsYWNrZXR0THVjZSB9IGZyb20gJy4vbW9kZWxzJ1xuXG5jb25zdCByYXRlID0gKHRlYW1zOiBUZWFtW10sIG9wdGlvbnM6IE9wdGlvbnMgPSB7fSk6IFRlYW1bXSA9PiB7XG4gIGNvbnN0IHsgTElNSVRfU0lHTUEsIFRBVSB9ID0gY29uc3RhbnRzKG9wdGlvbnMpXG4gIGNvbnN0IHsgbW9kZWwgPSBwbGFja2V0dEx1Y2UgfSA9IG9wdGlvbnNcbiAgbGV0IHByb2Nlc3NlZFRlYW1zID0gdGVhbXNcblxuICAvLyBpZiB0YXUgaXMgcHJvdmlkZWQsIHVzZSBhZGRpdGl2ZSBkeW5hbWljcyBmYWN0b3IgdG8gcHJldmVudCBzaWdtYSBmcm9tIGRyb3BwaW5nIHRvbyBsb3cuXG4gIC8vIHVzaW5nIHRoaXMgd2lsbCBlbnN1cmUgdGhlIHJhdGluZyB3aWxsIHN0YXkgbW9yZSBwbGlhYmxlIGFmdGVyIG1hbnkgZ2FtZXNcbiAgaWYgKG9wdGlvbnMudGF1KSB7XG4gICAgY29uc3QgdGF1U3F1YXJlZCA9IFRBVSAqIFRBVVxuICAgIHByb2Nlc3NlZFRlYW1zID0gdGVhbXMubWFwKCh0ZWFtKSA9PlxuICAgICAgdGVhbS5tYXAoKHApID0+ICh7XG4gICAgICAgIC4uLnAsXG4gICAgICAgIHNpZ21hOiBNYXRoLnNxcnQocC5zaWdtYSAqIHAuc2lnbWEgKyB0YXVTcXVhcmVkKSxcbiAgICAgIH0pKVxuICAgIClcbiAgfVxuXG4gIC8vIGlmIHJhbmsgcHJvdmlkZWQsIHVzZSBpdCwgb3RoZXJ3aXNlIHRyYW5zaXRpb24gc2NvcmVzIGFuZCB1c2UgdGhhdFxuICBjb25zdCByYW5rID0gb3B0aW9ucy5yYW5rID8/IG9wdGlvbnMuc2NvcmU/Lm1hcCgocG9pbnRzKSA9PiAtcG9pbnRzKSA/PyByYW5nZSgxLCB0ZWFtcy5sZW5ndGggKyAxKVxuXG4gIGNvbnN0IFtvcmRlcmVkVGVhbXMsIHRlbmV0XSA9IHVud2luZChyYW5rLCBwcm9jZXNzZWRUZWFtcylcbiAgY29uc3QgbmV3UmF0aW5ncyA9IG1vZGVsKG9yZGVyZWRUZWFtcywge1xuICAgIC4uLm9wdGlvbnMsXG4gICAgcmFuazogc29ydEJ5KGlkZW50aXR5LCByYW5rKSxcbiAgfSlcbiAgbGV0IFtyZW9yZGVyZWRUZWFtc10gPSB1bndpbmQodGVuZXQsIG5ld1JhdGluZ3MpXG5cbiAgLy8gbGltaXRTaWdtYSBwcmV2ZW50cyBzaWdtYSBmcm9tIGV2ZXIgZ29pbmcgdXAgd2hpY2ggY2FuIGhhcHBlbiB3aGVuIHVzaW5nIGEgdGF1IHZhbHVlLlxuICAvLyB0aGlzIGhlbHBzIHByZXZlbnQgb3JkaW5hbCBmcm9tIGV2ZXIgZHJvcHBpbmcgYWZ0ZXIgd2lubmluZyBhIGdhbWUgd2hpY2ggY2FuIGZlZWwgdW5mYWlyXG4gIGlmIChUQVUgJiYgTElNSVRfU0lHTUEpIHtcbiAgICByZW9yZGVyZWRUZWFtcyA9IHJlb3JkZXJlZFRlYW1zLm1hcCgodGVhbTogUmF0aW5nW10sIGk6IG51bWJlcikgPT5cbiAgICAgIHRlYW0ubWFwKChwLCBqKSA9PiAoe1xuICAgICAgICAuLi5wLFxuICAgICAgICBzaWdtYTogTWF0aC5taW4ocC5zaWdtYSwgdGVhbXNbaV1bal0uc2lnbWEpLFxuICAgICAgfSkpXG4gICAgKVxuICB9XG5cbiAgcmV0dXJuIHJlb3JkZXJlZFRlYW1zXG59XG5cbmV4cG9ydCBkZWZhdWx0IHJhdGVcbiIsICJpbXBvcnQgeyB6aXAgfSBmcm9tICdyYW1kYSdcbmltcG9ydCBjb25zdGFudHMgZnJvbSAnLi9jb25zdGFudHMnXG5pbXBvcnQgeyBSYXRpbmcsIE9wdGlvbnMsIEdhbW1hLCBUZWFtLCBSYW5rIH0gZnJvbSAnLi90eXBlcydcblxuZXhwb3J0IHR5cGUgVGVhbU11ID0gbnVtYmVyXG5cbmV4cG9ydCB0eXBlIFRlYW1TaWdtYVNxID0gbnVtYmVyXG5cbmV4cG9ydCB0eXBlIFRlYW1SYXRpbmcgPSBbVGVhbU11LCBUZWFtU2lnbWFTcSwgVGVhbSwgUmFua11cblxuZXhwb3J0IGNvbnN0IHN1bSA9IChhOiBudW1iZXIsIGI6IG51bWJlcikgPT4gYSArIGJcblxuZXhwb3J0IGNvbnN0IHNjb3JlID0gKHE6IG51bWJlciwgaTogbnVtYmVyKSA9PiB7XG4gIGlmIChxIDwgaSkge1xuICAgIHJldHVybiAwLjBcbiAgfVxuICBpZiAocSA+IGkpIHtcbiAgICByZXR1cm4gMS4wXG4gIH1cbiAgLy8gcSA9PT0gaVxuICByZXR1cm4gMC41XG59XG5cbmV4cG9ydCBjb25zdCByYW5raW5ncyA9ICh0ZWFtczogVGVhbVtdLCByYW5rOiBudW1iZXJbXSA9IFtdKSA9PiB7XG4gIGNvbnN0IHRlYW1TY29yZXMgPSB0ZWFtcy5tYXAoKF8sIGkpID0+IHJhbmtbaV0gfHwgaSlcbiAgY29uc3Qgb3V0UmFuayA9IG5ldyBBcnJheSh0ZWFtcy5sZW5ndGgpXG5cbiAgbGV0IHMgPSAwXG4gIGZvciAobGV0IGogPSAwOyBqIDwgdGVhbVNjb3Jlcy5sZW5ndGg7IGogKz0gMSkge1xuICAgIGlmIChqID4gMCAmJiB0ZWFtU2NvcmVzW2ogLSAxXSA8IHRlYW1TY29yZXNbal0pIHtcbiAgICAgIHMgPSBqXG4gICAgfVxuICAgIG91dFJhbmtbal0gPSBzXG4gIH1cbiAgcmV0dXJuIG91dFJhbmtcbn1cblxuLy8gdGhpcyBpcyBiYXNpY2FsbHkgc2hhcmVkIGNvZGUsIHByZWNvbXB1dGVkIGZvciBldmVyeSBtb2RlbFxuY29uc3QgdGVhbVJhdGluZyA9XG4gIChvcHRpb25zOiBPcHRpb25zKSA9PlxuICAoZ2FtZTogVGVhbVtdKTogVGVhbVJhdGluZ1tdID0+IHtcbiAgICBjb25zdCByYW5rID0gcmFua2luZ3MoZ2FtZSwgb3B0aW9ucy5yYW5rKVxuICAgIHJldHVybiBnYW1lLm1hcCgodGVhbSwgaSkgPT4gW1xuICAgICAgLy8gbXVbaV1cbiAgICAgIHRlYW0ubWFwKCh7IG11IH0pID0+IG11KS5yZWR1Y2Uoc3VtLCAwKSxcbiAgICAgIC8vIHNpZ21hXjJbaV1cbiAgICAgIHRlYW0ubWFwKCh7IHNpZ21hIH0pID0+IHNpZ21hICogc2lnbWEpLnJlZHVjZShzdW0sIDApLFxuICAgICAgLy8gKG9yaWdpbmFsIHRlYW0gZGF0YSlcbiAgICAgIHRlYW0sXG4gICAgICAvLyByYW5rW2ldXG4gICAgICByYW5rW2ldLFxuICAgIF0pXG4gIH1cblxuZXhwb3J0IGNvbnN0IGxhZGRlclBhaXJzID0gPFQ+KHJhbmtzOiBUW10pOiBUW11bXSA9PiB7XG4gIGNvbnN0IHNpemUgPSByYW5rcy5sZW5ndGhcbiAgY29uc3QgbGVmdCA9IFt1bmRlZmluZWQsIC4uLnJhbmtzLnNsaWNlKDAsIHNpemUgLSAxKV1cbiAgY29uc3QgcmlnaHQgPSBbLi4ucmFua3Muc2xpY2UoMSksIHVuZGVmaW5lZF1cbiAgcmV0dXJuIHppcChsZWZ0LCByaWdodCkubWFwKChbbCwgcl0pID0+IHtcbiAgICBpZiAobCAhPT0gdW5kZWZpbmVkICYmIHIgIT09IHVuZGVmaW5lZCkgcmV0dXJuIFtsLCByXVxuICAgIGlmIChsICE9PSB1bmRlZmluZWQgJiYgciA9PT0gdW5kZWZpbmVkKSByZXR1cm4gW2xdXG4gICAgaWYgKGwgPT09IHVuZGVmaW5lZCAmJiByICE9PSB1bmRlZmluZWQpIHJldHVybiBbcl1cbiAgICByZXR1cm4gW10gLy8gdGhpcyBzaG91bGQgcmVhbGx5IG9ubHkgaGFwcGVuIHdoZW4gc2l6ZSA9PT0gMVxuICB9KVxufVxuXG5jb25zdCB1dGlsQyA9IChvcHRpb25zOiBPcHRpb25zKSA9PiB7XG4gIGNvbnN0IHsgQkVUQVNRIH0gPSBjb25zdGFudHMob3B0aW9ucylcbiAgcmV0dXJuICh0ZWFtUmF0aW5nczogVGVhbVJhdGluZ1tdKSA9PlxuICAgIE1hdGguc3FydCh0ZWFtUmF0aW5ncy5tYXAoKFtfdGVhbU11LCB0ZWFtU2lnbWFTcSwgX3RlYW0sIF9yYW5rXSkgPT4gdGVhbVNpZ21hU3EgKyBCRVRBU1EpLnJlZHVjZShzdW0sIDApKVxufVxuXG5leHBvcnQgY29uc3QgdXRpbFN1bVEgPSAodGVhbVJhdGluZ3M6IFRlYW1SYXRpbmdbXSwgYzogbnVtYmVyKSA9PlxuICB0ZWFtUmF0aW5ncy5tYXAoKFtfcU11LCBfcVNpZ21hU3EsIF9xVGVhbSwgcVJhbmtdKSA9PlxuICAgIHRlYW1SYXRpbmdzXG4gICAgICAuZmlsdGVyKChbX2lNdSwgX2lTaWdtYVNxLCBfaVRlYW0sIGlSYW5rXSkgPT4gaVJhbmsgPj0gcVJhbmspXG4gICAgICAubWFwKChbaU11LCBfaVNpZ21hU3EsIF9pVGVhbSwgX2lSYW5rXSkgPT4gTWF0aC5leHAoaU11IC8gYykpXG4gICAgICAucmVkdWNlKHN1bSwgMClcbiAgKVxuXG5leHBvcnQgY29uc3QgdXRpbEEgPSAodGVhbVJhdGluZ3M6IFRlYW1SYXRpbmdbXSkgPT5cbiAgdGVhbVJhdGluZ3MubWFwKFxuICAgIChbX2lNdSwgX2lTaWdtYVNxLCBfaVRlYW0sIGlSYW5rXSkgPT5cbiAgICAgIHRlYW1SYXRpbmdzLmZpbHRlcigoW19xTXUsIF9xU2lnbWFTcSwgX3FUZWFtLCBxUmFua10pID0+IGlSYW5rID09PSBxUmFuaykubGVuZ3RoXG4gIClcblxuZXhwb3J0IGNvbnN0IGdhbW1hID0gKG9wdGlvbnM6IE9wdGlvbnMpOiBHYW1tYSA9PlxuICBvcHRpb25zLmdhbW1hID8/XG4gIC8vIGRlZmF1bHQgdG8gaVNpZ21hIC8gY1xuICAoKGM6IG51bWJlciwgX2s6IG51bWJlciwgX211OiBudW1iZXIsIHNpZ21hU3E6IG51bWJlciwgX3RlYW06IFJhdGluZ1tdLCBfcVJhbms6IG51bWJlcikgPT4gTWF0aC5zcXJ0KHNpZ21hU3EpIC8gYylcblxuZXhwb3J0IGRlZmF1bHQgKG9wdGlvbnM6IE9wdGlvbnMpID0+ICh7XG4gIHV0aWxDOiB1dGlsQyhvcHRpb25zKSxcbiAgdGVhbVJhdGluZzogdGVhbVJhdGluZyhvcHRpb25zKSxcbiAgZ2FtbWE6IGdhbW1hKG9wdGlvbnMpLFxufSlcbiIsICJpbXBvcnQgdXRpbCwgeyB1dGlsU3VtUSwgdXRpbEEgfSBmcm9tICcuLi91dGlsJ1xuaW1wb3J0IGNvbnN0YW50cyBmcm9tICcuLi9jb25zdGFudHMnXG5pbXBvcnQgeyBSYXRpbmcsIE9wdGlvbnMsIE1vZGVsIH0gZnJvbSAnLi4vdHlwZXMnXG5cbmNvbnN0IG1vZGVsOiBNb2RlbCA9IChnYW1lOiBSYXRpbmdbXVtdLCBvcHRpb25zOiBPcHRpb25zID0ge30pID0+IHtcbiAgY29uc3QgeyBFUFNJTE9OIH0gPSBjb25zdGFudHMob3B0aW9ucylcbiAgY29uc3QgeyB1dGlsQywgdGVhbVJhdGluZywgZ2FtbWEgfSA9IHV0aWwob3B0aW9ucylcbiAgY29uc3QgdGVhbVJhdGluZ3MgPSB0ZWFtUmF0aW5nKGdhbWUpXG4gIGNvbnN0IGMgPSB1dGlsQyh0ZWFtUmF0aW5ncylcbiAgY29uc3Qgc3VtUSA9IHV0aWxTdW1RKHRlYW1SYXRpbmdzLCBjKVxuICBjb25zdCBhID0gdXRpbEEodGVhbVJhdGluZ3MpXG5cbiAgcmV0dXJuIHRlYW1SYXRpbmdzLm1hcCgoaVRlYW1SYXRpbmcsIGkpID0+IHtcbiAgICBjb25zdCBbaU11LCBpU2lnbWFTcSwgaVRlYW0sIGlSYW5rXSA9IGlUZWFtUmF0aW5nXG4gICAgY29uc3QgaU11T3ZlckNlID0gTWF0aC5leHAoaU11IC8gYykgLy8gdG1wMVxuICAgIGNvbnN0IFtvbWVnYVN1bSwgZGVsdGFTdW1dID0gdGVhbVJhdGluZ3NcbiAgICAgIC5maWx0ZXIoKFtfcU11LCBfcVNpZ21hU3EsIF9xVGVhbSwgcVJhbmtdKSA9PiBxUmFuayA8PSBpUmFuaylcbiAgICAgIC5yZWR1Y2UoXG4gICAgICAgIChbb21lZ2EsIGRlbHRhXSwgW19dLCBxKSA9PiB7XG4gICAgICAgICAgY29uc3QgcXVvdGllbnQgPSBpTXVPdmVyQ2UgLyBzdW1RW3FdXG4gICAgICAgICAgcmV0dXJuIFtvbWVnYSArIChpID09PSBxID8gMSAtIHF1b3RpZW50IDogLXF1b3RpZW50KSAvIGFbcV0sIGRlbHRhICsgKHF1b3RpZW50ICogKDEgLSBxdW90aWVudCkpIC8gYVtxXV1cbiAgICAgICAgfSxcbiAgICAgICAgWzAsIDBdXG4gICAgICApXG5cbiAgICBjb25zdCBpR2FtbWEgPSBnYW1tYShjLCB0ZWFtUmF0aW5ncy5sZW5ndGgsIC4uLmlUZWFtUmF0aW5nKVxuICAgIGNvbnN0IGlPbWVnYSA9IG9tZWdhU3VtICogKGlTaWdtYVNxIC8gYylcbiAgICBjb25zdCBpRGVsdGEgPSBpR2FtbWEgKiBkZWx0YVN1bSAqIChpU2lnbWFTcSAvIGMgKiogMilcblxuICAgIHJldHVybiBpVGVhbS5tYXAoKHsgbXUsIHNpZ21hIH0pID0+ICh7XG4gICAgICBtdTogbXUgKyAoc2lnbWEgKiogMiAvIGlTaWdtYVNxKSAqIGlPbWVnYSxcbiAgICAgIHNpZ21hOiBzaWdtYSAqIE1hdGguc3FydChNYXRoLm1heCgxIC0gKHNpZ21hICoqIDIgLyBpU2lnbWFTcSkgKiBpRGVsdGEsIEVQU0lMT04pKSxcbiAgICB9KSlcbiAgfSlcbn1cblxuZXhwb3J0IGRlZmF1bHQgbW9kZWxcbiIsICJpbXBvcnQgZ2F1c3NpYW4gZnJvbSAnZ2F1c3NpYW4nXG5cbi8vIHVzZSBhIHN0YW5kYXJkIG5vcm1hbCBkaXN0cmlidXRpb24gLSBtZWFuIG9mIHplcm8sIHN0ZGRldi92YXJpYW5jZSBvZiBvbmVcbmNvbnN0IG5vcm1hbCA9IGdhdXNzaWFuKDAsIDEpXG5cbmV4cG9ydCBjb25zdCBwaGlNYWpvciA9ICh4OiBudW1iZXIpID0+IG5vcm1hbC5jZGYoeClcblxuZXhwb3J0IGNvbnN0IHBoaU1ham9ySW52ZXJzZSA9ICh4OiBudW1iZXIpID0+IG5vcm1hbC5wcGYoeClcblxuZXhwb3J0IGNvbnN0IHBoaU1pbm9yID0gKHg6IG51bWJlcikgPT4gbm9ybWFsLnBkZih4KVxuXG5leHBvcnQgY29uc3QgdiA9ICh4OiBudW1iZXIsIHQ6IG51bWJlcikgPT4ge1xuICBjb25zdCB4dCA9IHggLSB0XG4gIGNvbnN0IGRlbm9tID0gcGhpTWFqb3IoeHQpXG4gIHJldHVybiBkZW5vbSA8IE51bWJlci5FUFNJTE9OID8gLXh0IDogcGhpTWlub3IoeHQpIC8gZGVub21cbn1cblxuZXhwb3J0IGNvbnN0IHcgPSAoeDogbnVtYmVyLCB0OiBudW1iZXIpID0+IHtcbiAgY29uc3QgeHQgPSB4IC0gdFxuICBjb25zdCBkZW5vbSA9IHBoaU1ham9yKHh0KVxuICBpZiAoZGVub20gPCBOdW1iZXIuRVBTSUxPTikge1xuICAgIHJldHVybiB4IDwgMCA/IDEgOiAwXG4gIH1cbiAgcmV0dXJuIHYoeCwgdCkgKiAodih4LCB0KSArIHh0KVxufVxuXG5leHBvcnQgY29uc3QgdnQgPSAoeDogbnVtYmVyLCB0OiBudW1iZXIpID0+IHtcbiAgY29uc3QgeHggPSBNYXRoLmFicyh4KVxuICBjb25zdCBiID0gcGhpTWFqb3IodCAtIHh4KSAtIHBoaU1ham9yKC10IC0geHgpXG4gIGlmIChiIDwgMWUtNSkge1xuICAgIGlmICh4IDwgMCkgcmV0dXJuIC14IC0gdFxuICAgIHJldHVybiAteCArIHRcbiAgfVxuICBjb25zdCBhID0gcGhpTWlub3IoLXQgLSB4eCkgLSBwaGlNaW5vcih0IC0geHgpXG4gIHJldHVybiAoeCA8IDAgPyAtYSA6IGEpIC8gYlxufVxuXG5leHBvcnQgY29uc3Qgd3QgPSAoeDogbnVtYmVyLCB0OiBudW1iZXIpID0+IHtcbiAgY29uc3QgeHggPSBNYXRoLmFicyh4KVxuICBjb25zdCBiID0gcGhpTWFqb3IodCAtIHh4KSAtIHBoaU1ham9yKC10IC0geHgpXG4gIHJldHVybiBiIDwgTnVtYmVyLkVQU0lMT05cbiAgICA/IDEuMFxuICAgIDogKCh0IC0geHgpICogcGhpTWlub3IodCAtIHh4KSArICh0ICsgeHgpICogcGhpTWlub3IoLXQgLSB4eCkpIC8gYiArIHZ0KHgsIHQpICogdnQoeCwgdClcbn1cbiIsICJpbXBvcnQgY29uc3RhbnRzIGZyb20gJy4vY29uc3RhbnRzJ1xuaW1wb3J0IHsgUmF0aW5nLCBPcHRpb25zIH0gZnJvbSAnLi90eXBlcydcblxuY29uc3Qgb3JkaW5hbCA9IChyYXRpbmc6IFJhdGluZywgb3B0aW9uczogT3B0aW9ucyA9IHt9KTogbnVtYmVyID0+IHtcbiAgY29uc3QgeyBzaWdtYSwgbXUgfSA9IHJhdGluZ1xuICBjb25zdCB7IFogfSA9IGNvbnN0YW50cyhvcHRpb25zKVxuICByZXR1cm4gbXUgLSBaICogc2lnbWFcbn1cblxuZXhwb3J0IGRlZmF1bHQgb3JkaW5hbFxuIiwgImltcG9ydCBjb25zdGFudHMgZnJvbSAnLi9jb25zdGFudHMnXG5pbXBvcnQgdXRpbCwgeyBzdW0gfSBmcm9tICcuL3V0aWwnXG5pbXBvcnQgeyBwaGlNYWpvciB9IGZyb20gJy4vc3RhdGlzdGljcydcbmltcG9ydCB7IE9wdGlvbnMsIFRlYW0gfSBmcm9tICcuL3R5cGVzJ1xuXG5jb25zdCBwcmVkaWN0V2luID0gKHRlYW1zOiBUZWFtW10sIG9wdGlvbnM6IE9wdGlvbnMgPSB7fSkgPT4ge1xuICBjb25zdCB7IHRlYW1SYXRpbmcgfSA9IHV0aWwob3B0aW9ucylcbiAgY29uc3QgeyBCRVRBU1EgfSA9IGNvbnN0YW50cyhvcHRpb25zKVxuXG4gIGNvbnN0IHRlYW1SYXRpbmdzID0gdGVhbVJhdGluZyh0ZWFtcylcbiAgY29uc3QgbiA9IHRlYW1zLmxlbmd0aFxuICBjb25zdCBkZW5vbSA9IChuICogKG4gLSAxKSkgLyAyXG5cbiAgcmV0dXJuIHRlYW1SYXRpbmdzLm1hcChcbiAgICAoW211QSwgc2lnbWFTcUFdLCBpKSA9PlxuICAgICAgdGVhbVJhdGluZ3NcbiAgICAgICAgLmZpbHRlcigoXywgcSkgPT4gaSAhPT0gcSlcbiAgICAgICAgLm1hcCgoW211Qiwgc2lnbWFTcUJdKSA9PiBwaGlNYWpvcigobXVBIC0gbXVCKSAvIE1hdGguc3FydChuICogQkVUQVNRICsgc2lnbWFTcUEgKyBzaWdtYVNxQikpKVxuICAgICAgICAucmVkdWNlKHN1bSwgMCkgLyBkZW5vbVxuICApXG59XG5cbmV4cG9ydCBkZWZhdWx0IHByZWRpY3RXaW5cbiIsICJpbXBvcnQgeyBmbGF0dGVuIH0gZnJvbSAncmFtZGEnXG5pbXBvcnQgY29uc3RhbnRzIGZyb20gJy4vY29uc3RhbnRzJ1xuaW1wb3J0IHV0aWwsIHsgc3VtIH0gZnJvbSAnLi91dGlsJ1xuaW1wb3J0IHsgcGhpTWFqb3IsIHBoaU1ham9ySW52ZXJzZSB9IGZyb20gJy4vc3RhdGlzdGljcydcbmltcG9ydCB7IE9wdGlvbnMsIFRlYW0gfSBmcm9tICcuL3R5cGVzJ1xuXG5jb25zdCBwcmVkaWN0V2luID0gKHRlYW1zOiBUZWFtW10sIG9wdGlvbnM6IE9wdGlvbnMgPSB7fSkgPT4ge1xuICBjb25zdCB7IHRlYW1SYXRpbmcgfSA9IHV0aWwob3B0aW9ucylcbiAgY29uc3QgeyBCRVRBU1EsIEJFVEEgfSA9IGNvbnN0YW50cyhvcHRpb25zKVxuXG4gIGNvbnN0IG4gPSB0ZWFtcy5sZW5ndGhcbiAgaWYgKG4gPT09IDApIHJldHVybiB1bmRlZmluZWRcbiAgaWYgKG4gPT09IDEpIHJldHVybiAxXG5cbiAgY29uc3QgZGVub20gPSAobiAqIChuIC0gMSkpIC8gKG4gPiAyID8gMSA6IDIpXG4gIGNvbnN0IHRlYW1SYXRpbmdzID0gdGVhbVJhdGluZyh0ZWFtcylcbiAgY29uc3QgZHJhd01hcmdpbiA9IE1hdGguc3FydChmbGF0dGVuKHRlYW1zKS5sZW5ndGgpICogQkVUQSAqIHBoaU1ham9ySW52ZXJzZSgoMSArIDEgLyBuKSAvIDIpXG5cbiAgcmV0dXJuIChcbiAgICBNYXRoLmFicyhcbiAgICAgIHRlYW1SYXRpbmdzXG4gICAgICAgIC5tYXAoKFttdUEsIHNpZ21hU3FBXSwgaSkgPT5cbiAgICAgICAgICB0ZWFtUmF0aW5nc1xuICAgICAgICAgICAgLmZpbHRlcigoXywgcSkgPT4gaSAhPT0gcSlcbiAgICAgICAgICAgIC5tYXAoKFttdUIsIHNpZ21hU3FCXSkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBzaWdtYUJhciA9IE1hdGguc3FydChuICogQkVUQVNRICsgc2lnbWFTcUEgKyBzaWdtYVNxQilcbiAgICAgICAgICAgICAgcmV0dXJuIHBoaU1ham9yKChkcmF3TWFyZ2luIC0gbXVBICsgbXVCKSAvIHNpZ21hQmFyKSAtIHBoaU1ham9yKChtdUEgLSBtdUIgLSBkcmF3TWFyZ2luKSAvIHNpZ21hQmFyKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgICAuZmxhdCgpXG4gICAgICAgIC5yZWR1Y2Uoc3VtLCAwKVxuICAgICkgLyBkZW5vbVxuICApXG59XG5cbmV4cG9ydCBkZWZhdWx0IHByZWRpY3RXaW5cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVBLElBQU0sVUFBVSxDQUFDLFlBQXFCO0FBRXBDLFFBQU0sRUFBRSxJQUFJLEdBQUcsS0FBSyxJQUFJLHVCQUF1QixPQUFPLFVBQVUsS0FBTyxJQUFJO0FBQzNFLFFBQU0sRUFBRSxNQUFNLEtBQUssS0FBSyxRQUFRLEtBQUssR0FBRyxPQUFPLFFBQVEsR0FBRyxhQUFhLHFCQUFxQixJQUFJO0FBQ2hHLFFBQU0sU0FBUyxRQUFRO0FBRXZCLFNBQU87QUFBQSxJQUNMLE9BQU87QUFBQSxJQUNQLElBQUk7QUFBQSxJQUNKLFNBQVM7QUFBQSxJQUNULFdBQVcsSUFBSTtBQUFBLElBQ2YsTUFBTTtBQUFBLElBQ04sUUFBUTtBQUFBLElBQ1IsR0FBRztBQUFBLElBQ0gsS0FBSztBQUFBLElBQ0wsYUFBYTtB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LE1BQUksTUFBTSxFQUFHLFFBQU87QUFDcEIsTUFBSSxNQUFNLEVBQUcsUUFBTztBQUVwQixRQUFNLFFBQVMsS0FBSyxJQUFJLE1BQU8sSUFBSSxJQUFJLElBQUk7QUFDM0MsUUFBTSxjQUFjQSxZQUFXLEtBQUs7QUFDcEMsUUFBTSxhQUFhLEtBQUssS0FBSyxRQUFRLEtBQUssRUFBRSxNQUFNLElBQUksT0FBTyxpQkFBaUIsSUFBSSxJQUFJLEtBQUssQ0FBQztBQUU1RixTQUNFLEtBQUs7QUFBQSxJQUNILFlBQ0c7QUFBQSxNQUFJLENBQUMsQ0FBQyxLQUFLLFFBQVEsR0FBRyxNQUNyQixZQUNHLE9BQU8sQ0FBQyxHQUFHLE1BQU0sTUFBTSxDQUFDLEVBQ3hCLElBQUksQ0FBQyxDQUFDLEtBQUssUUFBUSxNQUFNO0FBQ3hCLGNBQU0sV0FBVyxLQUFLLEtBQUssSUFBSSxTQUFTLFdBQVcsUUFBUTtBQUMzRCxlQUFPLFVBQVUsYUFBYSxNQUFNLE9BQU8sUUFBUSxJQUFJLFVBQVUsTUFBTSxNQUFNLGNBQWMsUUFBUTtBQUFBLE1BQ3JHLENBQUM7QUFBQSxJQUNMLEVBQ0MsS0FBSyxFQUNMLE9BQU8sS0FBSyxDQUFDO0FBQUEsRUFDbEIsSUFBSTtBQUVSO0FBRUEsSUFBTyx1QkFBUUQ7IiwKICAibmFtZXMiOiBbInV0aWxDIiwgInRlYW1SYXRpbmciLCAiZ2FtbWEiLCAibW9kZWwiLCAicmF0aW5nIiwgInRlYW1SYXRpbmciLCAicHJlZGljdFdpbiIsICJ0ZWFtUmF0aW5nIl0KfQo= |
@@ -1,3 +0,5 @@ | ||
import { Model } from '../types'; | ||
import { Model } from '../types.js'; | ||
declare const model: Model; | ||
export default model; | ||
export { model as default }; |
@@ -1,35 +0,97 @@ | ||
"use strict"; | ||
// src/util.ts | ||
import { zip } from "ramda"; | ||
Object.defineProperty(exports, "__esModule", { | ||
value: true | ||
// src/constants.ts | ||
var builder = (options) => { | ||
const { z = 3, mu = 25, preventSigmaIncrease = false, epsilon = 1e-4 } = options; | ||
const { tau = mu / 300, sigma = mu / z, beta = sigma / 2, limitSigma = preventSigmaIncrease } = options; | ||
const betaSq = beta ** 2; | ||
return { | ||
SIGMA: sigma, | ||
MU: mu, | ||
EPSILON: epsilon, | ||
TWOBETASQ: 2 * betaSq, | ||
BETA: beta, | ||
BETASQ: betaSq, | ||
Z: z, | ||
TAU: tau, | ||
LIMIT_SIGMA: limitSigma | ||
}; | ||
}; | ||
var constants_default = builder; | ||
// src/util.ts | ||
var sum = (a, b) => a + b; | ||
var score = (q, i) => { | ||
if (q < i) { | ||
return 0; | ||
} | ||
if (q > i) { | ||
return 1; | ||
} | ||
return 0.5; | ||
}; | ||
var rankings = (teams, rank = []) => { | ||
const teamScores = teams.map((_, i) => rank[i] || i); | ||
const outRank = new Array(teams.length); | ||
let s = 0; | ||
for (let j = 0; j < teamScores.length; j += 1) { | ||
if (j > 0 && teamScores[j - 1] < teamScores[j]) { | ||
s = j; | ||
} | ||
outRank[j] = s; | ||
} | ||
return outRank; | ||
}; | ||
var teamRating = (options) => (game) => { | ||
const rank = rankings(game, options.rank); | ||
return game.map((team, i) => [ | ||
// mu[i] | ||
team.map(({ mu }) => mu).reduce(sum, 0), | ||
// sigma^2[i] | ||
team.map(({ sigma }) => sigma * sigma).reduce(sum, 0), | ||
// (original team data) | ||
team, | ||
// rank[i] | ||
rank[i] | ||
]); | ||
}; | ||
var utilC = (options) => { | ||
const { BETASQ } = constants_default(options); | ||
return (teamRatings) => Math.sqrt(teamRatings.map(([_teamMu, teamSigmaSq, _team, _rank]) => teamSigmaSq + BETASQ).reduce(sum, 0)); | ||
}; | ||
var gamma = (options) => { | ||
var _a; | ||
return (_a = options.gamma) != null ? _a : ( | ||
// default to iSigma / c | ||
(c, _k, _mu, sigmaSq, _team, _qRank) => Math.sqrt(sigmaSq) / c | ||
); | ||
}; | ||
var util_default = (options) => ({ | ||
utilC: utilC(options), | ||
teamRating: teamRating(options), | ||
gamma: gamma(options) | ||
}); | ||
exports.default = void 0; | ||
var _util = _interopRequireWildcard(require("../util")); | ||
var _constants = _interopRequireDefault(require("../constants")); | ||
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } | ||
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); } | ||
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; } | ||
const model = (game, options = {}) => { | ||
const { | ||
TWOBETASQ, | ||
EPSILON | ||
} = (0, _constants.default)(options); | ||
const { | ||
teamRating, | ||
gamma | ||
} = (0, _util.default)(options); | ||
const teamRatings = teamRating(game); | ||
// src/models/bradley-terry-full.ts | ||
var model = (game, options = {}) => { | ||
const { TWOBETASQ, EPSILON } = constants_default(options); | ||
const { teamRating: teamRating2, gamma: gamma2 } = util_default(options); | ||
const teamRatings = teamRating2(game); | ||
return teamRatings.map((iTeamRating, i) => { | ||
const [iMu, iSigmaSq, iTeam, iRank] = iTeamRating; | ||
const [iOmega, iDelta] = teamRatings.filter((_, q) => q !== i).reduce(([omega, delta], [qMu, qSigmaSq, _qTeam, qRank]) => { | ||
const ciq = Math.sqrt(iSigmaSq + qSigmaSq + TWOBETASQ); | ||
const piq = 1 / (1 + Math.exp((qMu - iMu) / ciq)); | ||
const sigSqToCiq = iSigmaSq / ciq; | ||
const iGamma = gamma(ciq, teamRatings.length, ...iTeamRating); | ||
return [omega + sigSqToCiq * ((0, _util.score)(qRank, iRank) - piq), delta + iGamma * sigSqToCiq / ciq * piq * (1 - piq)]; | ||
}, [0, 0]); | ||
return iTeam.map(({ | ||
mu, | ||
sigma | ||
}) => { | ||
const [iOmega, iDelta] = teamRatings.filter((_, q) => q !== i).reduce( | ||
([omega, delta], [qMu, qSigmaSq, _qTeam, qRank]) => { | ||
const ciq = Math.sqrt(iSigmaSq + qSigmaSq + TWOBETASQ); | ||
const piq = 1 / (1 + Math.exp((qMu - iMu) / ciq)); | ||
const sigSqToCiq = iSigmaSq / ciq; | ||
const iGamma = gamma2(ciq, teamRatings.length, ...iTeamRating); | ||
return [ | ||
omega + sigSqToCiq * (score(qRank, iRank) - piq), | ||
delta + iGamma * sigSqToCiq / ciq * piq * (1 - piq) | ||
]; | ||
}, | ||
[0, 0] | ||
); | ||
return iTeam.map(({ mu, sigma }) => { | ||
const sigmaSq = sigma * sigma; | ||
@@ -43,3 +105,6 @@ return { | ||
}; | ||
var _default = exports.default = model; | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfdXRpbCIsIl9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkIiwicmVxdWlyZSIsIl9jb25zdGFudHMiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiZSIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwiX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlIiwiV2Vha01hcCIsInIiLCJ0IiwiaGFzIiwiZ2V0IiwibiIsIl9fcHJvdG9fXyIsImEiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsInUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJpIiwic2V0IiwibW9kZWwiLCJnYW1lIiwib3B0aW9ucyIsIlRXT0JFVEFTUSIsIkVQU0lMT04iLCJjb25zdGFudHMiLCJ0ZWFtUmF0aW5nIiwiZ2FtbWEiLCJ1dGlsIiwidGVhbVJhdGluZ3MiLCJtYXAiLCJpVGVhbVJhdGluZyIsImlNdSIsImlTaWdtYVNxIiwiaVRlYW0iLCJpUmFuayIsImlPbWVnYSIsImlEZWx0YSIsImZpbHRlciIsIl8iLCJxIiwicmVkdWNlIiwib21lZ2EiLCJkZWx0YSIsInFNdSIsInFTaWdtYVNxIiwiX3FUZWFtIiwicVJhbmsiLCJjaXEiLCJNYXRoIiwic3FydCIsInBpcSIsImV4cCIsInNpZ1NxVG9DaXEiLCJpR2FtbWEiLCJsZW5ndGgiLCJzY29yZSIsIm11Iiwic2lnbWEiLCJzaWdtYVNxIiwibWF4IiwiX2RlZmF1bHQiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL21vZGVscy9icmFkbGV5LXRlcnJ5LWZ1bGwudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHV0aWwsIHsgc2NvcmUgfSBmcm9tICcuLi91dGlsJ1xuaW1wb3J0IGNvbnN0YW50cyBmcm9tICcuLi9jb25zdGFudHMnXG5pbXBvcnQgeyBSYXRpbmcsIE9wdGlvbnMsIE1vZGVsIH0gZnJvbSAnLi4vdHlwZXMnXG5cbmNvbnN0IG1vZGVsOiBNb2RlbCA9IChnYW1lOiBSYXRpbmdbXVtdLCBvcHRpb25zOiBPcHRpb25zID0ge30pID0+IHtcbiAgY29uc3QgeyBUV09CRVRBU1EsIEVQU0lMT04gfSA9IGNvbnN0YW50cyhvcHRpb25zKVxuICBjb25zdCB7IHRlYW1SYXRpbmcsIGdhbW1hIH0gPSB1dGlsKG9wdGlvbnMpXG4gIGNvbnN0IHRlYW1SYXRpbmdzID0gdGVhbVJhdGluZyhnYW1lKVxuXG4gIHJldHVybiB0ZWFtUmF0aW5ncy5tYXAoKGlUZWFtUmF0aW5nLCBpKSA9PiB7XG4gICAgY29uc3QgW2lNdSwgaVNpZ21hU3EsIGlUZWFtLCBpUmFua10gPSBpVGVhbVJhdGluZ1xuICAgIGNvbnN0IFtpT21lZ2EsIGlEZWx0YV0gPSB0ZWFtUmF0aW5nc1xuICAgICAgLmZpbHRlcigoXywgcSkgPT4gcSAhPT0gaSlcbiAgICAgIC5yZWR1Y2UoXG4gICAgICAgIChbb21lZ2EsIGRlbHRhXSwgW3FNdSwgcVNpZ21hU3EsIF9xVGVhbSwgcVJhbmtdKSA9PiB7XG4gICAgICAgICAgY29uc3QgY2lxID0gTWF0aC5zcXJ0KGlTaWdtYVNxICsgcVNpZ21hU3EgKyBUV09CRVRBU1EpXG4gICAgICAgICAgY29uc3QgcGlxID0gMSAvICgxICsgTWF0aC5leHAoKHFNdSAtIGlNdSkgLyBjaXEpKVxuICAgICAgICAgIGNvbnN0IHNpZ1NxVG9DaXEgPSBpU2lnbWFTcSAvIGNpcVxuICAgICAgICAgIGNvbnN0IGlHYW1tYSA9IGdhbW1hKGNpcSwgdGVhbVJhdGluZ3MubGVuZ3RoLCAuLi5pVGVhbVJhdGluZylcblxuICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBvbWVnYSArIHNpZ1NxVG9DaXEgKiAoc2NvcmUocVJhbmssIGlSYW5rKSAtIHBpcSksXG4gICAgICAgICAgICBkZWx0YSArICgoaUdhbW1hICogc2lnU3FUb0NpcSkgLyBjaXEpICogcGlxICogKDEgLSBwaXEpLFxuICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAgWzAsIDBdXG4gICAgICApXG5cbiAgICByZXR1cm4gaVRlYW0ubWFwKCh7IG11LCBzaWdtYSB9KSA9PiB7XG4gICAgICBjb25zdCBzaWdtYVNxID0gc2lnbWEgKiBzaWdtYVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbXU6IG11ICsgKHNpZ21hU3EgLyBpU2lnbWFTcSkgKiBpT21lZ2EsXG4gICAgICAgIHNpZ21hOiBzaWdtYSAqIE1hdGguc3FydChNYXRoLm1heCgxIC0gKHNpZ21hU3EgLyBpU2lnbWFTcSkgKiBpRGVsdGEsIEVQU0lMT04pKSxcbiAgICAgIH1cbiAgICB9KVxuICB9KVxufVxuXG5leHBvcnQgZGVmYXVsdCBtb2RlbFxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxJQUFBQSxLQUFBLEdBQUFDLHVCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxVQUFBLEdBQUFDLHNCQUFBLENBQUFGLE9BQUE7QUFBb0MsU0FBQUUsdUJBQUFDLENBQUEsV0FBQUEsQ0FBQSxJQUFBQSxDQUFBLENBQUFDLFVBQUEsR0FBQUQsQ0FBQSxLQUFBRSxPQUFBLEVBQUFGLENBQUE7QUFBQSxTQUFBRyx5QkFBQUgsQ0FBQSw2QkFBQUksT0FBQSxtQkFBQUMsQ0FBQSxPQUFBRCxPQUFBLElBQUFFLENBQUEsT0FBQUYsT0FBQSxZQUFBRCx3QkFBQSxZQUFBQSxDQUFBSCxDQUFBLFdBQUFBLENBQUEsR0FBQU0sQ0FBQSxHQUFBRCxDQUFBLEtBQUFMLENBQUE7QUFBQSxTQUFBSix3QkFBQUksQ0FBQSxFQUFBSyxDQUFBLFNBQUFBLENBQUEsSUFBQUwsQ0FBQSxJQUFBQSxDQUFBLENBQUFDLFVBQUEsU0FBQUQsQ0FBQSxlQUFBQSxDQUFBLHVCQUFBQSxDQUFBLHlCQUFBQSxDQUFBLFdBQUFFLE9BQUEsRUFBQUYsQ0FBQSxRQUFBTSxDQUFBLEdBQUFILHdCQUFBLENBQUFFLENBQUEsT0FBQUMsQ0FBQSxJQUFBQSxDQUFBLENBQUFDLEdBQUEsQ0FBQVAsQ0FBQSxVQUFBTSxDQUFBLENBQUFFLEdBQUEsQ0FBQVIsQ0FBQSxPQUFBUyxDQUFBLEtBQUFDLFNBQUEsVUFBQUMsQ0FBQSxHQUFBQyxNQUFBLENBQUFDLGNBQUEsSUFBQUQsTUFBQSxDQUFBRSx3QkFBQSxXQUFBQyxDQUFBLElBQUFmLENBQUEsb0JBQUFlLENBQUEsT0FBQUMsY0FBQSxDQUFBQyxJQUFBLENBQUFqQixDQUFBLEVBQUFlLENBQUEsU0FBQUcsQ0FBQSxHQUFBUCxDQUFBLEdBQUFDLE1BQUEsQ0FBQUUsd0JBQUEsQ0FBQWQsQ0FBQSxFQUFBZSxDQUFBLFVBQUFHLENBQUEsS0FBQUEsQ0FBQSxDQUFBVixHQUFBLElBQUFVLENBQUEsQ0FBQUMsR0FBQSxJQUFBUCxNQUFBLENBQUFDLGNBQUEsQ0FBQUosQ0FBQSxFQUFBTSxDQUFBLEVBQUFHLENBQUEsSUFBQVQsQ0FBQSxDQUFBTSxDQUFBLElBQUFmLENBQUEsQ0FBQWUsQ0FBQSxZQUFBTixDQUFBLENBQUFQLE9BQUEsR0FBQUYsQ0FBQSxFQUFBTSxDQUFBLElBQUFBLENBQUEsQ0FBQWEsR0FBQSxDQUFBbkIsQ0FBQSxFQUFBUyxDQUFBLEdBQUFBLENBQUE7QUFHcEMsTUFBTVcsS0FBWSxHQUFHQSxDQUFDQyxJQUFnQixFQUFFQyxPQUFnQixHQUFHLENBQUMsQ0FBQyxLQUFLO0VBQ2hFLE1BQU07SUFBRUMsU0FBUztJQUFFQztFQUFRLENBQUMsR0FBRyxJQUFBQyxrQkFBUyxFQUFDSCxPQUFPLENBQUM7RUFDakQsTUFBTTtJQUFFSSxVQUFVO0lBQUVDO0VBQU0sQ0FBQyxHQUFHLElBQUFDLGFBQUksRUFBQ04sT0FBTyxDQUFDO0VBQzNDLE1BQU1PLFdBQVcsR0FBR0gsVUFBVSxDQUFDTCxJQUFJLENBQUM7RUFFcEMsT0FBT1EsV0FBVyxDQUFDQyxHQUFHLENBQUMsQ0FBQ0MsV0FBVyxFQUFFYixDQUFDLEtBQUs7SUFDekMsTUFBTSxDQUFDYyxHQUFHLEVBQUVDLFFBQVEsRUFBRUMsS0FBSyxFQUFFQyxLQUFLLENBQUMsR0FBR0osV0FBVztJQUNqRCxNQUFNLENBQUNLLE1BQU0sRUFBRUMsTUFBTSxDQUFDLEdBQUdSLFdBQVcsQ0FDakNTLE1BQU0sQ0FBQyxDQUFDQyxDQUFDLEVBQUVDLENBQUMsS0FBS0EsQ0FBQyxLQUFLdEIsQ0FBQyxDQUFDLENBQ3pCdUIsTUFBTSxDQUNMLENBQUMsQ0FBQ0MsS0FBSyxFQUFFQyxLQUFLLENBQUMsRUFBRSxDQUFDQyxHQUFHLEVBQUVDLFFBQVEsRUFBRUMsTUFBTSxFQUFFQyxLQUFLLENBQUMsS0FBSztNQUNsRCxNQUFNQyxHQUFHLEdBQUdDLElBQUksQ0FBQ0MsSUFBSSxDQUFDakIsUUFBUSxHQUFHWSxRQUFRLEdBQUd0QixTQUFTLENBQUM7TUFDdEQsTUFBTTRCLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHRixJQUFJLENBQUNHLEdBQUcsQ0FBQyxDQUFDUixHQUFHLEdBQUdaLEdBQUcsSUFBSWdCLEdBQUcsQ0FBQyxDQUFDO01BQ2pELE1BQU1LLFVBQVUsR0FBR3BCLFFBQVEsR0FBR2UsR0FBRztNQUNqQyxNQUFNTSxNQUFNLEdBQUczQixLQUFLLENBQUNxQixHQUFHLEVBQUVuQixXQUFXLENBQUMwQixNQUFNLEVBQUUsR0FBR3hCLFdBQVcsQ0FBQztNQUU3RCxPQUFPLENBQ0xXLEtBQUssR0FBR1csVUFBVSxJQUFJLElBQUFHLFdBQUssRUFBQ1QsS0FBSyxFQUFFWixLQUFLLENBQUMsR0FBR2dCLEdBQUcsQ0FBQyxFQUNoRFIsS0FBSyxHQUFLVyxNQUFNLEdBQUdELFVBQVUsR0FBSUwsR0FBRyxHQUFJRyxHQUFHLElBQUksQ0FBQyxHQUFHQSxHQUFHLENBQUMsQ0FDeEQ7SUFDSCxDQUFDLEVBQ0QsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUNQLENBQUM7SUFFSCxPQUFPakIsS0FBSyxDQUFDSixHQUFHLENBQUMsQ0FBQztNQUFFMkIsRUFBRTtNQUFFQztJQUFNLENBQUMsS0FBSztNQUNsQyxNQUFNQyxPQUFPLEdBQUdELEtBQUssR0FBR0EsS0FBSztNQUM3QixPQUFPO1FBQ0xELEVBQUUsRUFBRUEsRUFBRSxHQUFJRSxPQUFPLEdBQUcxQixRQUFRLEdBQUlHLE1BQU07UUFDdENzQixLQUFLLEVBQUVBLEtBQUssR0FBR1QsSUFBSSxDQUFDQyxJQUFJLENBQUNELElBQUksQ0FBQ1csR0FBRyxDQUFDLENBQUMsR0FBSUQsT0FBTyxHQUFHMUIsUUFBUSxHQUFJSSxNQUFNLEVBQUViLE9BQU8sQ0FBQztNQUMvRSxDQUFDO0lBQ0gsQ0FBQyxDQUFDO0VBQ0osQ0FBQyxDQUFDO0FBQ0osQ0FBQztBQUFBLElBQUFxQyxRQUFBLEdBQUFDLE9BQUEsQ0FBQTVELE9BQUEsR0FFY2tCLEtBQUsiLCJpZ25vcmVMaXN0IjpbXX0= | ||
var bradley_terry_full_default = model; | ||
export { | ||
bradley_terry_full_default as default | ||
}; | ||
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL3V0aWwudHMiLCAiLi4vLi4vc3JjL2NvbnN0YW50cy50cyIsICIuLi8uLi9zcmMvbW9kZWxzL2JyYWRsZXktdGVycnktZnVsbC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0IHsgemlwIH0gZnJvbSAncmFtZGEnXG5pbXBvcnQgY29uc3RhbnRzIGZyb20gJy4vY29uc3RhbnRzJ1xuaW1wb3J0IHsgUmF0aW5nLCBPcHRpb25zLCBHYW1tYSwgVGVhbSwgUmFuayB9IGZyb20gJy4vdHlwZXMnXG5cbmV4cG9ydCB0eXBlIFRlYW1NdSA9IG51bWJlclxuXG5leHBvcnQgdHlwZSBUZWFtU2lnbWFTcSA9IG51bWJlclxuXG5leHBvcnQgdHlwZSBUZWFtUmF0aW5nID0gW1RlYW1NdSwgVGVhbVNpZ21hU3EsIFRlYW0sIFJhbmtdXG5cbmV4cG9ydCBjb25zdCBzdW0gPSAoYTogbnVtYmVyLCBiOiBudW1iZXIpID0+IGEgKyBiXG5cbmV4cG9ydCBjb25zdCBzY29yZSA9IChxOiBudW1iZXIsIGk6IG51bWJlcikgPT4ge1xuICBpZiAocSA8IGkpIHtcbiAgICByZXR1cm4gMC4wXG4gIH1cbiAgaWYgKHEgPiBpKSB7XG4gICAgcmV0dXJuIDEuMFxuICB9XG4gIC8vIHEgPT09IGlcbiAgcmV0dXJuIDAuNVxufVxuXG5leHBvcnQgY29uc3QgcmFua2luZ3MgPSAodGVhbXM6IFRlYW1bXSwgcmFuazogbnVtYmVyW10gPSBbXSkgPT4ge1xuICBjb25zdCB0ZWFtU2NvcmVzID0gdGVhbXMubWFwKChfLCBpKSA9PiByYW5rW2ldIHx8IGkpXG4gIGNvbnN0IG91dFJhbmsgPSBuZXcgQXJyYXkodGVhbXMubGVuZ3RoKVxuXG4gIGxldCBzID0gMFxuICBmb3IgKGxldCBqID0gMDsgaiA8IHRlYW1TY29yZXMubGVuZ3RoOyBqICs9IDEpIHtcbiAgICBpZiAoaiA+IDAgJiYgdGVhbVNjb3Jlc1tqIC0gMV0gPCB0ZWFtU2NvcmVzW2pdKSB7XG4gICAgICBzID0galxuICAgIH1cbiAgICBvdXRSYW5rW2pdID0gc1xuICB9XG4gIHJldHVybiBvdXRSYW5rXG59XG5cbi8vIHRoaXMgaXMgYmFzaWNhbGx5IHNoYXJlZCBjb2RlLCBwcmVjb21wdXRlZCBmb3IgZXZlcnkgbW9kZWxcbmNvbnN0IHRlYW1SYXRpbmcgPVxuICAob3B0aW9uczogT3B0aW9ucykgPT5cbiAgKGdhbWU6IFRlYW1bXSk6IFRlYW1SYXRpbmdbXSA9PiB7XG4gICAgY29uc3QgcmFuayA9IHJhbmtpbmdzKGdhbWUsIG9wdGlvbnMucmFuaylcbiAgICByZXR1cm4gZ2FtZS5tYXAoKHRlYW0sIGkpID0+IFtcbiAgICAgIC8vIG11W2ldXG4gICAgICB0ZWFtLm1hcCgoeyBtdSB9KSA9PiBtdSkucmVkdWNlKHN1bSwgMCksXG4gICAgICAvLyBzaWdtYV4yW2ldXG4gICAgICB0ZWFtLm1hcCgoeyBzaWdtYSB9KSA9PiBzaWdtYSAqIHNpZ21hKS5yZWR1Y2Uoc3VtLCAwKSxcbiAgICAgIC8vIChvcmlnaW5hbCB0ZWFtIGRhdGEpXG4gICAgICB0ZWFtLFxuICAgICAgLy8gcmFua1tpXVxuICAgICAgcmFua1tpXSxcbiAgICBdKVxuICB9XG5cbmV4cG9ydCBjb25zdCBsYWRkZXJQYWlycyA9IDxUPihyYW5rczogVFtdKTogVFtdW10gPT4ge1xuICBjb25zdCBzaXplID0gcmFua3MubGVuZ3RoXG4gIGNvbnN0IGxlZnQgPSBbdW5kZWZpbmVkLCAuLi5yYW5rcy5zbGljZSgwLCBzaXplIC0gMSldXG4gIGNvbnN0IHJpZ2h0ID0gWy4uLnJhbmtzLnNsaWNlKDEpLCB1bmRlZmluZWRdXG4gIHJldHVybiB6aXAobGVmdCwgcmlnaHQpLm1hcCgoW2wsIHJdKSA9PiB7XG4gICAgaWYgKGwgIT09IHVuZGVmaW5lZCAmJiByICE9PSB1bmRlZmluZWQpIHJldHVybiBbbCwgcl1cbiAgICBpZiAobCAhPT0gdW5kZWZpbmVkICYmIHIgPT09IHVuZGVmaW5lZCkgcmV0dXJuIFtsXVxuICAgIGlmIChsID09PSB1bmRlZmluZWQgJiYgciAhPT0gdW5kZWZpbmVkKSByZXR1cm4gW3JdXG4gICAgcmV0dXJuIFtdIC8vIHRoaXMgc2hvdWxkIHJlYWxseSBvbmx5IGhhcHBlbiB3aGVuIHNpemUgPT09IDFcbiAgfSlcbn1cblxuY29uc3QgdXRpbEMgPSAob3B0aW9uczogT3B0aW9ucykgPT4ge1xuICBjb25zdCB7IEJFVEFTUSB9ID0gY29uc3RhbnRzKG9wdGlvbnMpXG4gIHJldHVybiAodGVhbVJhdGluZ3M6IFRlYW1SYXRpbmdbXSkgPT5cbiAgICBNYXRoLnNxcnQodGVhbVJhdGluZ3MubWFwKChbX3RlYW1NdSwgdGVhbVNpZ21hU3EsIF90ZWFtLCBfcmFua10pID0+IHRlYW1TaWdtYVNxICsgQkVUQVNRKS5yZWR1Y2Uoc3VtLCAwKSlcbn1cblxuZXhwb3J0IGNvbnN0IHV0aWxTdW1RID0gKHRlYW1SYXRpbmdzOiBUZWFtUmF0aW5nW10sIGM6IG51bWJlcikgPT5cbiAgdGVhbVJhdGluZ3MubWFwKChbX3FNdSwgX3FTaWdtYVNxLCBfcVRlYW0sIHFSYW5rXSkgPT5cbiAgICB0ZWFtUmF0aW5nc1xuICAgICAgLmZpbHRlcigoW19pTXUsIF9pU2lnbWFTcSwgX2lUZWFtLCBpUmFua10pID0+IGlSYW5rID49IHFSYW5rKVxuICAgICAgLm1hcCgoW2lNdSwgX2lTaWdtYVNxLCBfaVRlYW0sIF9pUmFua10pID0+IE1hdGguZXhwKGlNdSAvIGMpKVxuICAgICAgLnJlZHVjZShzdW0sIDApXG4gIClcblxuZXhwb3J0IGNvbnN0IHV0aWxBID0gKHRlYW1SYXRpbmdzOiBUZWFtUmF0aW5nW10pID0+XG4gIHRlYW1SYXRpbmdzLm1hcChcbiAgICAoW19pTXUsIF9pU2lnbWFTcSwgX2lUZWFtLCBpUmFua10pID0+XG4gICAgICB0ZWFtUmF0aW5ncy5maWx0ZXIoKFtfcU11LCBfcVNpZ21hU3EsIF9xVGVhbSwgcVJhbmtdKSA9PiBpUmFuayA9PT0gcVJhbmspLmxlbmd0aFxuICApXG5cbmV4cG9ydCBjb25zdCBnYW1tYSA9IChvcHRpb25zOiBPcHRpb25zKTogR2FtbWEgPT5cbiAgb3B0aW9ucy5nYW1tYSA/P1xuICAvLyBkZWZhdWx0IHRvIGlTaWdtYSAvIGNcbiAgKChjOiBudW1iZXIsIF9rOiBudW1iZXIsIF9tdTogbnVtYmVyLCBzaWdtYVNxOiBudW1iZXIsIF90ZWFtOiBSYXRpbmdbXSwgX3FSYW5rOiBudW1iZXIpID0+IE1hdGguc3FydChzaWdtYVNxKSAvIGMpXG5cbmV4cG9ydCBkZWZhdWx0IChvcHRpb25zOiBPcHRpb25zKSA9PiAoe1xuICB1dGlsQzogdXRpbEMob3B0aW9ucyksXG4gIHRlYW1SYXRpbmc6IHRlYW1SYXRpbmcob3B0aW9ucyksXG4gIGdhbW1hOiBnYW1tYShvcHRpb25zKSxcbn0pXG4iLCAiaW1wb3J0IHsgT3B0aW9ucyB9IGZyb20gJy4vdHlwZXMnXG5cbmNvbnN0IGJ1aWxkZXIgPSAob3B0aW9uczogT3B0aW9ucykgPT4ge1xuICAvLyBpJ2QgbG92ZSB0byBrbm93IG9mIGEgYmV0dGVyIHdheSB0byBkbyB0aGlzXG4gIGNvbnN0IHsgeiA9IDMsIG11ID0gMjUsIHByZXZlbnRTaWdtYUluY3JlYXNlID0gZmFsc2UsIGVwc2lsb24gPSAwLjAwMDEgfSA9IG9wdGlvbnNcbiAgY29uc3QgeyB0YXUgPSBtdSAvIDMwMCwgc2lnbWEgPSBtdSAvIHosIGJldGEgPSBzaWdtYSAvIDIsIGxpbWl0U2lnbWEgPSBwcmV2ZW50U2lnbWFJbmNyZWFzZSB9ID0gb3B0aW9uc1xuICBjb25zdCBiZXRhU3EgPSBiZXRhICoqIDJcblxuICByZXR1cm4ge1xuICAgIFNJR01BOiBzaWdtYSxcbiAgICBNVTogbXUsXG4gICAgRVBTSUxPTjogZXBzaWxvbixcbiAgICBUV09CRVRBU1E6IDIgKiBiZXRhU3EsXG4gICAgQkVUQTogYmV0YSxcbiAgICBCRVRBU1E6IGJldGFTcSxcbiAgICBaOiB6LFxuICAgIFRBVTogdGF1LFxuICAgIExJTUlUX1NJR01BOiBsaW1pdFNpZ21hLFxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJ1aWxkZXJcbiIsICJpbXBvcnQgdXRpbCwgeyBzY29yZSB9IGZyb20gJy4uL3V0aWwnXG5pbXBvcnQgY29uc3RhbnRzIGZyb20gJy4uL2NvbnN0YW50cydcbmltcG9ydCB7IFJhdGluZywgT3B0aW9ucywgTW9kZWwgfSBmcm9tICcuLi90eXBlcydcblxuY29uc3QgbW9kZWw6IE1vZGVsID0gKGdhbWU6IFJhdGluZ1tdW10sIG9wdGlvbnM6IE9wdGlvbnMgPSB7fSkgPT4ge1xuICBjb25zdCB7IFRXT0JFVEFTUSwgRVBTSUxPTiB9ID0gY29uc3RhbnRzKG9wdGlvbnMpXG4gIGNvbnN0IHsgdGVhbVJhdGluZywgZ2FtbWEgfSA9IHV0aWwob3B0aW9ucylcbiAgY29uc3QgdGVhbVJhdGluZ3MgPSB0ZWFtUmF0aW5nKGdhbWUpXG5cbiAgcmV0dXJuIHRlYW1SYXRpbmdzLm1hcCgoaVRlYW1SYXRpbmcsIGkpID0+IHtcbiAgICBjb25zdCBbaU11LCBpU2lnbWFTcSwgaVRlYW0sIGlSYW5rXSA9IGlUZWFtUmF0aW5nXG4gICAgY29uc3QgW2lPbWVnYSwgaURlbHRhXSA9IHRlYW1SYXRpbmdzXG4gICAgICAuZmlsdGVyKChfLCBxKSA9PiBxICE9PSBpKVxuICAgICAgLnJlZHVjZShcbiAgICAgICAgKFtvbWVnYSwgZGVsdGFdLCBbcU11LCBxU2lnbWFTcSwgX3FUZWFtLCBxUmFua10pID0+IHtcbiAgICAgICAgICBjb25zdCBjaXEgPSBNYXRoLnNxcnQoaVNpZ21hU3EgKyBxU2lnbWFTcSArIFRXT0JFVEFTUSlcbiAgICAgICAgICBjb25zdCBwaXEgPSAxIC8gKDEgKyBNYXRoLmV4cCgocU11IC0gaU11KSAvIGNpcSkpXG4gICAgICAgICAgY29uc3Qgc2lnU3FUb0NpcSA9IGlTaWdtYVNxIC8gY2lxXG4gICAgICAgICAgY29uc3QgaUdhbW1hID0gZ2FtbWEoY2lxLCB0ZWFtUmF0aW5ncy5sZW5ndGgsIC4uLmlUZWFtUmF0aW5nKVxuXG4gICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIG9tZWdhICsgc2lnU3FUb0NpcSAqIChzY29yZShxUmFuaywgaVJhbmspIC0gcGlxKSxcbiAgICAgICAgICAgIGRlbHRhICsgKChpR2FtbWEgKiBzaWdTcVRvQ2lxKSAvIGNpcSkgKiBwaXEgKiAoMSAtIHBpcSksXG4gICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICBbMCwgMF1cbiAgICAgIClcblxuICAgIHJldHVybiBpVGVhbS5tYXAoKHsgbXUsIHNpZ21hIH0pID0+IHtcbiAgICAgIGNvbnN0IHNpZ21hU3EgPSBzaWdtYSAqIHNpZ21hXG4gICAgICByZXR1cm4ge1xuICAgICAgICBtdTogbXUgKyAoc2lnbWFTcSAvIGlTaWdtYVNxKSAqIGlPbWVnYSxcbiAgICAgICAgc2lnbWE6IHNpZ21hICogTWF0aC5zcXJ0KE1hdGgubWF4KDEgLSAoc2lnbWFTcSAvIGlTaWdtYVNxKSAqIGlEZWx0YSwgRVBTSUxPTikpLFxuICAgICAgfVxuICAgIH0pXG4gIH0pXG59XG5cbmV4cG9ydCBkZWZhdWx0IG1vZGVsXG4iXSwKICAibWFwcGluZ3MiOiAiO0FBQUEsU0FBUyxXQUFXOzs7QUNFcEIsSUFBTSxVQUFVLENBQUMsWUFBcUI7QUFFcEMsUUFBTSxFQUFFLElBQUksR0FBRyxLQUFLLElBQUksdUJBQXVCLE9BQU8sVUFBVSxLQUFPLElBQUk7QUFDM0UsUUFBTSxFQUFFLE1BQU0sS0FBSyxLQUFLLFFBQVEsS0FBSyxHQUFHLE9BQU8sUUFBUSxHQUFHLGFBQWEscUJBQXFCLElBQUk7QUFDaEcsUUFBTSxTQUFTLFFBQVE7QUFFdkIsU0FBTztBQUFBLElBQ0wsT0FBTztBQUFBLElBQ1AsSUFBSTtBQUFBLElBQ0osU0FBUztBQUFBLElBQ1QsV0FBVyxJQUFJO0FBQUEsSUFDZixNQUFNO0FBQUEsSUFDTixRQUFRO0FBQUEsSUFDUixHQUFHO0FBQUEsSUFDSCxLQUFLO0FBQUEsSUFDTCxhQUFhO0FBQUEsRUFDZjtBQUNGO0FBRUEsSUFBTyxvQkFBUTs7O0FEWFIsSUFBTSxNQUFNLENBQUMsR0FBVyxNQUFjLElBQUk7QUFFMUMsSUFBTSxRQUFRLENBQUMsR0FBVyxNQUFjO0FBQzdDLE1BQUksSUFBSSxHQUFHO0FBQ1QsV0FBTztBQUFBLEVBQ1Q7QUFDQSxNQUFJLElBQUksR0FBRztBQUNULFdBQU87QUFBQSxFQUNUO0FBRUEsU0FBTztBQUNUO0FBRU8sSUFBTSxXQUFXLENBQUMsT0FBZSxPQUFpQixDQUFDLE1BQU07QUFDOUQsUUFBTSxhQUFhLE1BQU0sSUFBSSxDQUFDLEdBQUcsTUFBTSxLQUFLLENBQUMsS0FBSyxDQUFDO0FBQ25ELFFBQU0sVUFBVSxJQUFJLE1BQU0sTUFBTSxNQUFNO0FBRXRDLE1BQUksSUFBSTtBQUNSLFdBQVMsSUFBSSxHQUFHLElBQUksV0FBVyxRQUFRLEtBQUssR0FBRztBQUM3QyxRQUFJLElBQUksS0FBSyxXQUFXLElBQUksQ0FBQyxJQUFJLFdBQVcsQ0FBQyxHQUFHO0FBQzlDLFVBQUk7QUFBQSxJQUNOO0FBQ0EsWUFBUSxDQUFDLElBQUk7QUFBQSxFQUNmO0FBQ0EsU0FBTztBQUNUO0FBR0EsSUFBTSxhQUNKLENBQUMsWUFDRCxDQUFDLFNBQStCO0FBQzlCLFFBQU0sT0FBTyxTQUFTLE1BQU0sUUFBUSxJQUFJO0FBQ3hDLFNBQU8sS0FBSyxJQUFJLENBQUMsTUFBTSxNQUFNO0FBQUE7QUFBQSxJQUUzQixLQUFLLElBQUksQ0FBQyxFQUFFLEdBQUcsTUFBTSxFQUFFLEVBQUUsT0FBTyxLQUFLLENBQUM7QUFBQTtBQUFBLElBRXRDLEtBQUssSUFBSSxDQUFDLEVBQUUsTUFBTSxNQUFNLFFBQVEsS0FBSyxFQUFFLE9BQU8sS0FBSyxDQUFDO0FBQUE7QUFBQSxJQUVwRDtBQUFBO0FBQUEsSUFFQSxLQUFLLENBQUM7QUFBQSxFQUNSLENBQUM7QUFDSDtBQWNGLElBQU0sUUFBUSxDQUFDLFlBQXFCO0FBQ2xDLFFBQU0sRUFBRSxPQUFPLElBQUksa0JBQVUsT0FBTztBQUNwQyxTQUFPLENBQUMsZ0JBQ04sS0FBSyxLQUFLLFlBQVksSUFBSSxDQUFDLENBQUMsU0FBUyxhQUFhLE9BQU8sS0FBSyxNQUFNLGNBQWMsTUFBTSxFQUFFLE9BQU8sS0FBSyxDQUFDLENBQUM7QUFDNUc7QUFnQk8sSUFBTSxRQUFRLENBQUMsWUFBeUI7QUF0Ri9DO0FBdUZFLHVCQUFRLFVBQVI7QUFBQTtBQUFBLElBRUMsQ0FBQyxHQUFXLElBQVksS0FBYSxTQUFpQixPQUFpQixXQUFtQixLQUFLLEtBQUssT0FBTyxJQUFJO0FBQUE7QUFBQTtBQUVsSCxJQUFPLGVBQVEsQ0FBQyxhQUFzQjtBQUFBLEVBQ3BDLE9BQU8sTUFBTSxPQUFPO0FBQUEsRUFDcEIsWUFBWSxXQUFXLE9BQU87QUFBQSxFQUM5QixPQUFPLE1BQU0sT0FBTztBQUN0Qjs7O0FFM0ZBLElBQU0sUUFBZSxDQUFDLE1BQWtCLFVBQW1CLENBQUMsTUFBTTtBQUNoRSxRQUFNLEVBQUUsV0FBVyxRQUFRLElBQUksa0JBQVUsT0FBTztBQUNoRCxRQUFNLEVBQUUsWUFBQUEsYUFBWSxPQUFBQyxPQUFNLElBQUksYUFBSyxPQUFPO0FBQzFDLFFBQU0sY0FBY0QsWUFBVyxJQUFJO0FBRW5DLFNBQU8sWUFBWSxJQUFJLENBQUMsYUFBYSxNQUFNO0FBQ3pDLFVBQU0sQ0FBQyxLQUFLLFVBQVUsT0FBTyxLQUFLLElBQUk7QUFDdEMsVUFBTSxDQUFDLFFBQVEsTUFBTSxJQUFJLFlBQ3RCLE9BQU8sQ0FBQyxHQUFHLE1BQU0sTUFBTSxDQUFDLEVBQ3hCO0FBQUEsTUFDQyxDQUFDLENBQUMsT0FBTyxLQUFLLEdBQUcsQ0FBQyxLQUFLLFVBQVUsUUFBUSxLQUFLLE1BQU07QUFDbEQsY0FBTSxNQUFNLEtBQUssS0FBSyxXQUFXLFdBQVcsU0FBUztBQUNyRCxjQUFNLE1BQU0sS0FBSyxJQUFJLEtBQUssS0FBSyxNQUFNLE9BQU8sR0FBRztBQUMvQyxjQUFNLGFBQWEsV0FBVztBQUM5QixjQUFNLFNBQVNDLE9BQU0sS0FBSyxZQUFZLFFBQVEsR0FBRyxXQUFXO0FBRTVELGVBQU87QUFBQSxVQUNMLFFBQVEsY0FBYyxNQUFNLE9BQU8sS0FBSyxJQUFJO0FBQUEsVUFDNUMsUUFBVSxTQUFTLGFBQWMsTUFBTyxPQUFPLElBQUk7QUFBQSxRQUNyRDtBQUFBLE1BQ0Y7QUFBQSxNQUNBLENBQUMsR0FBRyxDQUFDO0FBQUEsSUFDUDtBQUVGLFdBQU8sTUFBTSxJQUFJLENBQUMsRUFBRSxJQUFJLE1BQU0sTUFBTTtBQUNsQyxZQUFNLFVBQVUsUUFBUTtBQUN4QixhQUFPO0FBQUEsUUFDTCxJQUFJLEtBQU0sVUFBVSxXQUFZO0FBQUEsUUFDaEMsT0FBTyxRQUFRLEtBQUssS0FBSyxLQUFLLElBQUksSUFBSyxVQUFVLFdBQVksUUFBUSxPQUFPLENBQUM7QUFBQSxNQUMvRTtBQUFBLElBQ0YsQ0FBQztBQUFBLEVBQ0gsQ0FBQztBQUNIO0FBRUEsSUFBTyw2QkFBUTsiLAogICJuYW1lcyI6IFsidGVhbVJhdGluZyIsICJnYW1tYSJdCn0K |
@@ -1,3 +0,5 @@ | ||
import { Model } from '../types'; | ||
import { Model } from '../types.js'; | ||
declare const model: Model; | ||
export default model; | ||
export { model as default }; |
@@ -1,37 +0,112 @@ | ||
"use strict"; | ||
// src/models/bradley-terry-part.ts | ||
import { zip as zip2 } from "ramda"; | ||
Object.defineProperty(exports, "__esModule", { | ||
value: true | ||
// src/util.ts | ||
import { zip } from "ramda"; | ||
// src/constants.ts | ||
var builder = (options) => { | ||
const { z = 3, mu = 25, preventSigmaIncrease = false, epsilon = 1e-4 } = options; | ||
const { tau = mu / 300, sigma = mu / z, beta = sigma / 2, limitSigma = preventSigmaIncrease } = options; | ||
const betaSq = beta ** 2; | ||
return { | ||
SIGMA: sigma, | ||
MU: mu, | ||
EPSILON: epsilon, | ||
TWOBETASQ: 2 * betaSq, | ||
BETA: beta, | ||
BETASQ: betaSq, | ||
Z: z, | ||
TAU: tau, | ||
LIMIT_SIGMA: limitSigma | ||
}; | ||
}; | ||
var constants_default = builder; | ||
// src/util.ts | ||
var sum = (a, b) => a + b; | ||
var score = (q, i) => { | ||
if (q < i) { | ||
return 0; | ||
} | ||
if (q > i) { | ||
return 1; | ||
} | ||
return 0.5; | ||
}; | ||
var rankings = (teams, rank = []) => { | ||
const teamScores = teams.map((_, i) => rank[i] || i); | ||
const outRank = new Array(teams.length); | ||
let s = 0; | ||
for (let j = 0; j < teamScores.length; j += 1) { | ||
if (j > 0 && teamScores[j - 1] < teamScores[j]) { | ||
s = j; | ||
} | ||
outRank[j] = s; | ||
} | ||
return outRank; | ||
}; | ||
var teamRating = (options) => (game) => { | ||
const rank = rankings(game, options.rank); | ||
return game.map((team, i) => [ | ||
// mu[i] | ||
team.map(({ mu }) => mu).reduce(sum, 0), | ||
// sigma^2[i] | ||
team.map(({ sigma }) => sigma * sigma).reduce(sum, 0), | ||
// (original team data) | ||
team, | ||
// rank[i] | ||
rank[i] | ||
]); | ||
}; | ||
var ladderPairs = (ranks) => { | ||
const size = ranks.length; | ||
const left = [void 0, ...ranks.slice(0, size - 1)]; | ||
const right = [...ranks.slice(1), void 0]; | ||
return zip(left, right).map(([l, r]) => { | ||
if (l !== void 0 && r !== void 0) return [l, r]; | ||
if (l !== void 0 && r === void 0) return [l]; | ||
if (l === void 0 && r !== void 0) return [r]; | ||
return []; | ||
}); | ||
}; | ||
var utilC = (options) => { | ||
const { BETASQ } = constants_default(options); | ||
return (teamRatings) => Math.sqrt(teamRatings.map(([_teamMu, teamSigmaSq, _team, _rank]) => teamSigmaSq + BETASQ).reduce(sum, 0)); | ||
}; | ||
var gamma = (options) => { | ||
var _a; | ||
return (_a = options.gamma) != null ? _a : ( | ||
// default to iSigma / c | ||
(c, _k, _mu, sigmaSq, _team, _qRank) => Math.sqrt(sigmaSq) / c | ||
); | ||
}; | ||
var util_default = (options) => ({ | ||
utilC: utilC(options), | ||
teamRating: teamRating(options), | ||
gamma: gamma(options) | ||
}); | ||
exports.default = void 0; | ||
var _ramda = require("ramda"); | ||
var _util = _interopRequireWildcard(require("../util")); | ||
var _constants = _interopRequireDefault(require("../constants")); | ||
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } | ||
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); } | ||
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; } | ||
const model = (game, options = {}) => { | ||
const { | ||
TWOBETASQ, | ||
EPSILON | ||
} = (0, _constants.default)(options); | ||
const { | ||
teamRating, | ||
gamma | ||
} = (0, _util.default)(options); | ||
const teamRatings = teamRating(game); | ||
const adjacentTeams = (0, _util.ladderPairs)(teamRatings); | ||
return (0, _ramda.zip)(teamRatings, adjacentTeams).map(([iTeamRating, iAdjacents]) => { | ||
// src/models/bradley-terry-part.ts | ||
var model = (game, options = {}) => { | ||
const { TWOBETASQ, EPSILON } = constants_default(options); | ||
const { teamRating: teamRating2, gamma: gamma2 } = util_default(options); | ||
const teamRatings = teamRating2(game); | ||
const adjacentTeams = ladderPairs(teamRatings); | ||
return zip2(teamRatings, adjacentTeams).map(([iTeamRating, iAdjacents]) => { | ||
const [iMu, iSigmaSq, iTeam, iRank] = iTeamRating; | ||
const [iOmega, iDelta] = iAdjacents.reduce(([omega, delta], [qMu, qSigmaSq, _qTeam, qRank]) => { | ||
const ciq = Math.sqrt(iSigmaSq + qSigmaSq + TWOBETASQ); | ||
const piq = 1 / (1 + Math.exp((qMu - iMu) / ciq)); | ||
const sigSqToCiq = iSigmaSq / ciq; | ||
const iGamma = gamma(ciq, teamRatings.length, ...iTeamRating); | ||
return [omega + sigSqToCiq * ((0, _util.score)(qRank, iRank) - piq), delta + iGamma * sigSqToCiq / ciq * piq * (1 - piq)]; | ||
}, [0, 0]); | ||
return iTeam.map(({ | ||
mu, | ||
sigma | ||
}) => { | ||
const [iOmega, iDelta] = iAdjacents.reduce( | ||
([omega, delta], [qMu, qSigmaSq, _qTeam, qRank]) => { | ||
const ciq = Math.sqrt(iSigmaSq + qSigmaSq + TWOBETASQ); | ||
const piq = 1 / (1 + Math.exp((qMu - iMu) / ciq)); | ||
const sigSqToCiq = iSigmaSq / ciq; | ||
const iGamma = gamma2(ciq, teamRatings.length, ...iTeamRating); | ||
return [ | ||
omega + sigSqToCiq * (score(qRank, iRank) - piq), | ||
delta + iGamma * sigSqToCiq / ciq * piq * (1 - piq) | ||
]; | ||
}, | ||
[0, 0] | ||
); | ||
return iTeam.map(({ mu, sigma }) => { | ||
const sigmaSq = sigma * sigma; | ||
@@ -45,3 +120,6 @@ return { | ||
}; | ||
var _default = exports.default = model; | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmFtZGEiLCJyZXF1aXJlIiwiX3V0aWwiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsIl9jb25zdGFudHMiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiZSIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwiX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlIiwiV2Vha01hcCIsInIiLCJ0IiwiaGFzIiwiZ2V0IiwibiIsIl9fcHJvdG9fXyIsImEiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsInUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJpIiwic2V0IiwibW9kZWwiLCJnYW1lIiwib3B0aW9ucyIsIlRXT0JFVEFTUSIsIkVQU0lMT04iLCJjb25zdGFudHMiLCJ0ZWFtUmF0aW5nIiwiZ2FtbWEiLCJ1dGlsIiwidGVhbVJhdGluZ3MiLCJhZGphY2VudFRlYW1zIiwibGFkZGVyUGFpcnMiLCJ6aXAiLCJtYXAiLCJpVGVhbVJhdGluZyIsImlBZGphY2VudHMiLCJpTXUiLCJpU2lnbWFTcSIsImlUZWFtIiwiaVJhbmsiLCJpT21lZ2EiLCJpRGVsdGEiLCJyZWR1Y2UiLCJvbWVnYSIsImRlbHRhIiwicU11IiwicVNpZ21hU3EiLCJfcVRlYW0iLCJxUmFuayIsImNpcSIsIk1hdGgiLCJzcXJ0IiwicGlxIiwiZXhwIiwic2lnU3FUb0NpcSIsImlHYW1tYSIsImxlbmd0aCIsInNjb3JlIiwibXUiLCJzaWdtYSIsInNpZ21hU3EiLCJtYXgiLCJfZGVmYXVsdCIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvbW9kZWxzL2JyYWRsZXktdGVycnktcGFydC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB6aXAgfSBmcm9tICdyYW1kYSdcbmltcG9ydCB1dGlsLCB7IHNjb3JlLCBsYWRkZXJQYWlycyB9IGZyb20gJy4uL3V0aWwnXG5pbXBvcnQgY29uc3RhbnRzIGZyb20gJy4uL2NvbnN0YW50cydcbmltcG9ydCB7IE1vZGVsLCBSYXRpbmcgfSBmcm9tICcuLi90eXBlcydcblxuY29uc3QgbW9kZWw6IE1vZGVsID0gKGdhbWU6IFJhdGluZ1tdW10sIG9wdGlvbnMgPSB7fSkgPT4ge1xuICBjb25zdCB7IFRXT0JFVEFTUSwgRVBTSUxPTiB9ID0gY29uc3RhbnRzKG9wdGlvbnMpXG4gIGNvbnN0IHsgdGVhbVJhdGluZywgZ2FtbWEgfSA9IHV0aWwob3B0aW9ucylcblxuICBjb25zdCB0ZWFtUmF0aW5ncyA9IHRlYW1SYXRpbmcoZ2FtZSlcbiAgY29uc3QgYWRqYWNlbnRUZWFtcyA9IGxhZGRlclBhaXJzKHRlYW1SYXRpbmdzKVxuXG4gIHJldHVybiB6aXAodGVhbVJhdGluZ3MsIGFkamFjZW50VGVhbXMpLm1hcCgoW2lUZWFtUmF0aW5nLCBpQWRqYWNlbnRzXSkgPT4ge1xuICAgIGNvbnN0IFtpTXUsIGlTaWdtYVNxLCBpVGVhbSwgaVJhbmtdID0gaVRlYW1SYXRpbmdcbiAgICBjb25zdCBbaU9tZWdhLCBpRGVsdGFdID0gaUFkamFjZW50cy5yZWR1Y2UoXG4gICAgICAoW29tZWdhLCBkZWx0YV0sIFtxTXUsIHFTaWdtYVNxLCBfcVRlYW0sIHFSYW5rXSkgPT4ge1xuICAgICAgICBjb25zdCBjaXEgPSBNYXRoLnNxcnQoaVNpZ21hU3EgKyBxU2lnbWFTcSArIFRXT0JFVEFTUSlcbiAgICAgICAgY29uc3QgcGlxID0gMSAvICgxICsgTWF0aC5leHAoKHFNdSAtIGlNdSkgLyBjaXEpKVxuICAgICAgICBjb25zdCBzaWdTcVRvQ2lxID0gaVNpZ21hU3EgLyBjaXFcbiAgICAgICAgY29uc3QgaUdhbW1hID0gZ2FtbWEoY2lxLCB0ZWFtUmF0aW5ncy5sZW5ndGgsIC4uLmlUZWFtUmF0aW5nKVxuXG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgb21lZ2EgKyBzaWdTcVRvQ2lxICogKHNjb3JlKHFSYW5rLCBpUmFuaykgLSBwaXEpLFxuICAgICAgICAgIGRlbHRhICsgKChpR2FtbWEgKiBzaWdTcVRvQ2lxKSAvIGNpcSkgKiBwaXEgKiAoMSAtIHBpcSksXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICBbMCwgMF1cbiAgICApXG5cbiAgICByZXR1cm4gaVRlYW0ubWFwKCh7IG11LCBzaWdtYSB9KSA9PiB7XG4gICAgICBjb25zdCBzaWdtYVNxID0gc2lnbWEgKiBzaWdtYVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbXU6IG11ICsgKHNpZ21hU3EgLyBpU2lnbWFTcSkgKiBpT21lZ2EsXG4gICAgICAgIHNpZ21hOiBzaWdtYSAqIE1hdGguc3FydChNYXRoLm1heCgxIC0gKHNpZ21hU3EgLyBpU2lnbWFTcSkgKiBpRGVsdGEsIEVQU0lMT04pKSxcbiAgICAgIH1cbiAgICB9KVxuICB9KVxufVxuXG5leHBvcnQgZGVmYXVsdCBtb2RlbFxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxJQUFBQSxNQUFBLEdBQUFDLE9BQUE7QUFDQSxJQUFBQyxLQUFBLEdBQUFDLHVCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBRyxVQUFBLEdBQUFDLHNCQUFBLENBQUFKLE9BQUE7QUFBb0MsU0FBQUksdUJBQUFDLENBQUEsV0FBQUEsQ0FBQSxJQUFBQSxDQUFBLENBQUFDLFVBQUEsR0FBQUQsQ0FBQSxLQUFBRSxPQUFBLEVBQUFGLENBQUE7QUFBQSxTQUFBRyx5QkFBQUgsQ0FBQSw2QkFBQUksT0FBQSxtQkFBQUMsQ0FBQSxPQUFBRCxPQUFBLElBQUFFLENBQUEsT0FBQUYsT0FBQSxZQUFBRCx3QkFBQSxZQUFBQSxDQUFBSCxDQUFBLFdBQUFBLENBQUEsR0FBQU0sQ0FBQSxHQUFBRCxDQUFBLEtBQUFMLENBQUE7QUFBQSxTQUFBSCx3QkFBQUcsQ0FBQSxFQUFBSyxDQUFBLFNBQUFBLENBQUEsSUFBQUwsQ0FBQSxJQUFBQSxDQUFBLENBQUFDLFVBQUEsU0FBQUQsQ0FBQSxlQUFBQSxDQUFBLHVCQUFBQSxDQUFBLHlCQUFBQSxDQUFBLFdBQUFFLE9BQUEsRUFBQUYsQ0FBQSxRQUFBTSxDQUFBLEdBQUFILHdCQUFBLENBQUFF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 | ||
var bradley_terry_part_default = model; | ||
export { | ||
bradley_terry_part_default as default | ||
}; | ||
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL21vZGVscy9icmFkbGV5LXRlcnJ5LXBhcnQudHMiLCAiLi4vLi4vc3JjL3V0aWwudHMiLCAiLi4vLi4vc3JjL2NvbnN0YW50cy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0IHsgemlwIH0gZnJvbSAncmFtZGEnXG5pbXBvcnQgdXRpbCwgeyBzY29yZSwgbGFkZGVyUGFpcnMgfSBmcm9tICcuLi91dGlsJ1xuaW1wb3J0IGNvbnN0YW50cyBmcm9tICcuLi9jb25zdGFudHMnXG5pbXBvcnQgeyBNb2RlbCwgUmF0aW5nIH0gZnJvbSAnLi4vdHlwZXMnXG5cbmNvbnN0IG1vZGVsOiBNb2RlbCA9IChnYW1lOiBSYXRpbmdbXVtdLCBvcHRpb25zID0ge30pID0+IHtcbiAgY29uc3QgeyBUV09CRVRBU1EsIEVQU0lMT04gfSA9IGNvbnN0YW50cyhvcHRpb25zKVxuICBjb25zdCB7IHRlYW1SYXRpbmcsIGdhbW1hIH0gPSB1dGlsKG9wdGlvbnMpXG5cbiAgY29uc3QgdGVhbVJhdGluZ3MgPSB0ZWFtUmF0aW5nKGdhbWUpXG4gIGNvbnN0IGFkamFjZW50VGVhbXMgPSBsYWRkZXJQYWlycyh0ZWFtUmF0aW5ncylcblxuICByZXR1cm4gemlwKHRlYW1SYXRpbmdzLCBhZGphY2VudFRlYW1zKS5tYXAoKFtpVGVhbVJhdGluZywgaUFkamFjZW50c10pID0+IHtcbiAgICBjb25zdCBbaU11LCBpU2lnbWFTcSwgaVRlYW0sIGlSYW5rXSA9IGlUZWFtUmF0aW5nXG4gICAgY29uc3QgW2lPbWVnYSwgaURlbHRhXSA9IGlBZGphY2VudHMucmVkdWNlKFxuICAgICAgKFtvbWVnYSwgZGVsdGFdLCBbcU11LCBxU2lnbWFTcSwgX3FUZWFtLCBxUmFua10pID0+IHtcbiAgICAgICAgY29uc3QgY2lxID0gTWF0aC5zcXJ0KGlTaWdtYVNxICsgcVNpZ21hU3EgKyBUV09CRVRBU1EpXG4gICAgICAgIGNvbnN0IHBpcSA9IDEgLyAoMSArIE1hdGguZXhwKChxTXUgLSBpTXUpIC8gY2lxKSlcbiAgICAgICAgY29uc3Qgc2lnU3FUb0NpcSA9IGlTaWdtYVNxIC8gY2lxXG4gICAgICAgIGNvbnN0IGlHYW1tYSA9IGdhbW1hKGNpcSwgdGVhbVJhdGluZ3MubGVuZ3RoLCAuLi5pVGVhbVJhdGluZylcblxuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgIG9tZWdhICsgc2lnU3FUb0NpcSAqIChzY29yZShxUmFuaywgaVJhbmspIC0gcGlxKSxcbiAgICAgICAgICBkZWx0YSArICgoaUdhbW1hICogc2lnU3FUb0NpcSkgLyBjaXEpICogcGlxICogKDEgLSBwaXEpLFxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgWzAsIDBdXG4gICAgKVxuXG4gICAgcmV0dXJuIGlUZWFtLm1hcCgoeyBtdSwgc2lnbWEgfSkgPT4ge1xuICAgICAgY29uc3Qgc2lnbWFTcSA9IHNpZ21hICogc2lnbWFcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG11OiBtdSArIChzaWdtYVNxIC8gaVNpZ21hU3EpICogaU9tZWdhLFxuICAgICAgICBzaWdtYTogc2lnbWEgKiBNYXRoLnNxcnQoTWF0aC5tYXgoMSAtIChzaWdtYVNxIC8gaVNpZ21hU3EpICogaURlbHRhLCBFUFNJTE9OKSksXG4gICAgICB9XG4gICAgfSlcbiAgfSlcbn1cblxuZXhwb3J0IGRlZmF1bHQgbW9kZWxcbiIsICJpbXBvcnQgeyB6aXAgfSBmcm9tICdyYW1kYSdcbmltcG9ydCBjb25zdGFudHMgZnJvbSAnLi9jb25zdGFudHMnXG5pbXBvcnQgeyBSYXRpbmcsIE9wdGlvbnMsIEdhbW1hLCBUZWFtLCBSYW5rIH0gZnJvbSAnLi90eXBlcydcblxuZXhwb3J0IHR5cGUgVGVhbU11ID0gbnVtYmVyXG5cbmV4cG9ydCB0eXBlIFRlYW1TaWdtYVNxID0gbnVtYmVyXG5cbmV4cG9ydCB0eXBlIFRlYW1SYXRpbmcgPSBbVGVhbU11LCBUZWFtU2lnbWFTcSwgVGVhbSwgUmFua11cblxuZXhwb3J0IGNvbnN0IHN1bSA9IChhOiBudW1iZXIsIGI6IG51bWJlcikgPT4gYSArIGJcblxuZXhwb3J0IGNvbnN0IHNjb3JlID0gKHE6IG51bWJlciwgaTogbnVtYmVyKSA9PiB7XG4gIGlmIChxIDwgaSkge1xuICAgIHJldHVybiAwLjBcbiAgfVxuICBpZiAocSA+IGkpIHtcbiAgICByZXR1cm4gMS4wXG4gIH1cbiAgLy8gcSA9PT0gaVxuICByZXR1cm4gMC41XG59XG5cbmV4cG9ydCBjb25zdCByYW5raW5ncyA9ICh0ZWFtczogVGVhbVtdLCByYW5rOiBudW1iZXJbXSA9IFtdKSA9PiB7XG4gIGNvbnN0IHRlYW1TY29yZXMgPSB0ZWFtcy5tYXAoKF8sIGkpID0+IHJhbmtbaV0gfHwgaSlcbiAgY29uc3Qgb3V0UmFuayA9IG5ldyBBcnJheSh0ZWFtcy5sZW5ndGgpXG5cbiAgbGV0IHMgPSAwXG4gIGZvciAobGV0IGogPSAwOyBqIDwgdGVhbVNjb3Jlcy5sZW5ndGg7IGogKz0gMSkge1xuICAgIGlmIChqID4gMCAmJiB0ZWFtU2NvcmVzW2ogLSAxXSA8IHRlYW1TY29yZXNbal0pIHtcbiAgICAgIHMgPSBqXG4gICAgfVxuICAgIG91dFJhbmtbal0gPSBzXG4gIH1cbiAgcmV0dXJuIG91dFJhbmtcbn1cblxuLy8gdGhpcyBpcyBiYXNpY2FsbHkgc2hhcmVkIGNvZGUsIHByZWNvbXB1dGVkIGZvciBldmVyeSBtb2RlbFxuY29uc3QgdGVhbVJhdGluZyA9XG4gIChvcHRpb25zOiBPcHRpb25zKSA9PlxuICAoZ2FtZTogVGVhbVtdKTogVGVhbVJhdGluZ1tdID0+IHtcbiAgICBjb25zdCByYW5rID0gcmFua2luZ3MoZ2FtZSwgb3B0aW9ucy5yYW5rKVxuICAgIHJldHVybiBnYW1lLm1hcCgodGVhbSwgaSkgPT4gW1xuICAgICAgLy8gbXVbaV1cbiAgICAgIHRlYW0ubWFwKCh7IG11IH0pID0+IG11KS5yZWR1Y2Uoc3VtLCAwKSxcbiAgICAgIC8vIHNpZ21hXjJbaV1cbiAgICAgIHRlYW0ubWFwKCh7IHNpZ21hIH0pID0+IHNpZ21hICogc2lnbWEpLnJlZHVjZShzdW0sIDApLFxuICAgICAgLy8gKG9yaWdpbmFsIHRlYW0gZGF0YSlcbiAgICAgIHRlYW0sXG4gICAgICAvLyByYW5rW2ldXG4gICAgICByYW5rW2ldLFxuICAgIF0pXG4gIH1cblxuZXhwb3J0IGNvbnN0IGxhZGRlclBhaXJzID0gPFQ+KHJhbmtzOiBUW10pOiBUW11bXSA9PiB7XG4gIGNvbnN0IHNpemUgPSByYW5rcy5sZW5ndGhcbiAgY29uc3QgbGVmdCA9IFt1bmRlZmluZWQsIC4uLnJhbmtzLnNsaWNlKDAsIHNpemUgLSAxKV1cbiAgY29uc3QgcmlnaHQgPSBbLi4ucmFua3Muc2xpY2UoMSksIHVuZGVmaW5lZF1cbiAgcmV0dXJuIHppcChsZWZ0LCByaWdodCkubWFwKChbbCwgcl0pID0+IHtcbiAgICBpZiAobCAhPT0gdW5kZWZpbmVkICYmIHIgIT09IHVuZGVmaW5lZCkgcmV0dXJuIFtsLCByXVxuICAgIGlmIChsICE9PSB1bmRlZmluZWQgJiYgciA9PT0gdW5kZWZpbmVkKSByZXR1cm4gW2xdXG4gICAgaWYgKGwgPT09IHVuZGVmaW5lZCAmJiByICE9PSB1bmRlZmluZWQpIHJldHVybiBbcl1cbiAgICByZXR1cm4gW10gLy8gdGhpcyBzaG91bGQgcmVhbGx5IG9ubHkgaGFwcGVuIHdoZW4gc2l6ZSA9PT0gMVxuICB9KVxufVxuXG5jb25zdCB1dGlsQyA9IChvcHRpb25zOiBPcHRpb25zKSA9PiB7XG4gIGNvbnN0IHsgQkVUQVNRIH0gPSBjb25zdGFudHMob3B0aW9ucylcbiAgcmV0dXJuICh0ZWFtUmF0aW5nczogVGVhbVJhdGluZ1tdKSA9PlxuICAgIE1hdGguc3FydCh0ZWFtUmF0aW5ncy5tYXAoKFtfdGVhbU11LCB0ZWFtU2lnbWFTcSwgX3RlYW0sIF9yYW5rXSkgPT4gdGVhbVNpZ21hU3EgKyBCRVRBU1EpLnJlZHVjZShzdW0sIDApKVxufVxuXG5leHBvcnQgY29uc3QgdXRpbFN1bVEgPSAodGVhbVJhdGluZ3M6IFRlYW1SYXRpbmdbXSwgYzogbnVtYmVyKSA9PlxuICB0ZWFtUmF0aW5ncy5tYXAoKFtfcU11LCBfcVNpZ21hU3EsIF9xVGVhbSwgcVJhbmtdKSA9PlxuICAgIHRlYW1SYXRpbmdzXG4gICAgICAuZmlsdGVyKChbX2lNdSwgX2lTaWdtYVNxLCBfaVRlYW0sIGlSYW5rXSkgPT4gaVJhbmsgPj0gcVJhbmspXG4gICAgICAubWFwKChbaU11LCBfaVNpZ21hU3EsIF9pVGVhbSwgX2lSYW5rXSkgPT4gTWF0aC5leHAoaU11IC8gYykpXG4gICAgICAucmVkdWNlKHN1bSwgMClcbiAgKVxuXG5leHBvcnQgY29uc3QgdXRpbEEgPSAodGVhbVJhdGluZ3M6IFRlYW1SYXRpbmdbXSkgPT5cbiAgdGVhbVJhdGluZ3MubWFwKFxuICAgIChbX2lNdSwgX2lTaWdtYVNxLCBfaVRlYW0sIGlSYW5rXSkgPT5cbiAgICAgIHRlYW1SYXRpbmdzLmZpbHRlcigoW19xTXUsIF9xU2lnbWFTcSwgX3FUZWFtLCBxUmFua10pID0+IGlSYW5rID09PSBxUmFuaykubGVuZ3RoXG4gIClcblxuZXhwb3J0IGNvbnN0IGdhbW1hID0gKG9wdGlvbnM6IE9wdGlvbnMpOiBHYW1tYSA9PlxuICBvcHRpb25zLmdhbW1hID8/XG4gIC8vIGRlZmF1bHQgdG8gaVNpZ21hIC8gY1xuICAoKGM6IG51bWJlciwgX2s6IG51bWJlciwgX211OiBudW1iZXIsIHNpZ21hU3E6IG51bWJlciwgX3RlYW06IFJhdGluZ1tdLCBfcVJhbms6IG51bWJlcikgPT4gTWF0aC5zcXJ0KHNpZ21hU3EpIC8gYylcblxuZXhwb3J0IGRlZmF1bHQgKG9wdGlvbnM6IE9wdGlvbnMpID0+ICh7XG4gIHV0aWxDOiB1dGlsQyhvcHRpb25zKSxcbiAgdGVhbVJhdGluZzogdGVhbVJhdGluZyhvcHRpb25zKSxcbiAgZ2FtbWE6IGdhbW1hKG9wdGlvbnMpLFxufSlcbiIsICJpbXBvcnQgeyBPcHRpb25zIH0gZnJvbSAnLi90eXBlcydcblxuY29uc3QgYnVpbGRlciA9IChvcHRpb25zOiBPcHRpb25zKSA9PiB7XG4gIC8vIGknZCBsb3ZlIHRvIGtub3cgb2YgYSBiZXR0ZXIgd2F5IHRvIGRvIHRoaXNcbiAgY29uc3QgeyB6ID0gMywgbXUgPSAyNSwgcHJldmVudFNpZ21hSW5jcmVhc2UgPSBmYWxzZSwgZXBzaWxvbiA9IDAuMDAwMSB9ID0gb3B0aW9uc1xuICBjb25zdCB7IHRhdSA9IG11IC8gMzAwLCBzaWdtYSA9IG11IC8geiwgYmV0YSA9IHNpZ21hIC8gMiwgbGltaXRTaWdtYSA9IHByZXZlbnRTaWdtYUluY3JlYXNlIH0gPSBvcHRpb25zXG4gIGNvbnN0IGJldGFTcSA9IGJldGEgKiogMlxuXG4gIHJldHVybiB7XG4gICAgU0lHTUE6IHNpZ21hLFxuICAgIE1VOiBtdSxcbiAgICBFUFNJTE9OOiBlcHNpbG9uLFxuICAgIFRXT0JFVEFTUTogMiAqIGJldGFTcSxcbiAgICBCRVRBOiBiZXRhLFxuICAgIEJFVEFTUTogYmV0YVNxLFxuICAgIFo6IHosXG4gICAgVEFVOiB0YXUsXG4gICAgTElNSVRfU0lHTUE6IGxpbWl0U2lnbWEsXG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgYnVpbGRlclxuIl0sCiAgIm1hcHBpbmdzIjogIjtBQUFBLFNBQVMsT0FBQUEsWUFBVzs7O0FDQXBCLFNBQVMsV0FBVzs7O0FDRXBCLElBQU0sVUFBVSxDQUFDLFlBQXFCO0FBRXBDLFFBQU0sRUFBRSxJQUFJLEdBQUcsS0FBSyxJQUFJLHVCQUF1QixPQUFPLFVBQVUsS0FBTyxJQUFJO0FBQzNFLFFBQU0sRUFBRSxNQUFNLEtBQUssS0FBSyxRQUFRLEtBQUssR0FBRyxPQUFPLFFBQVEsR0FBRyxhQUFhLHFCQUFxQixJQUFJO0FBQ2hHLFFBQU0sU0FBUyxRQUFRO0FBRXZCLFNBQU87QUFBQSxJQUNMLE9BQU87QUFBQSxJQUNQLElBQUk7QUFBQSxJQUNKLFNBQVM7QUFBQSxJQUNULFdBQVcsSUFBSTtBQUFBLElBQ2YsTUFBTTtBQUFBLElBQ04sUUFBUTtBQUFBLElBQ1IsR0FBRztBQUFBLElBQ0gsS0FBSztBQUFBLElBQ0wsYUFBYTtBQUFBLEVBQ2Y7QUFD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 |
@@ -1,5 +0,6 @@ | ||
export { default as plackettLuce } from './plackett-luce'; | ||
export { default as bradleyTerryFull } from './bradley-terry-full'; | ||
export { default as bradleyTerryPart } from './bradley-terry-part'; | ||
export { default as thurstoneMostellerFull } from './thurstone-mosteller-full'; | ||
export { default as thurstoneMostellerPart } from './thurstone-mosteller-part'; | ||
export { default as plackettLuce } from './plackett-luce.js'; | ||
export { default as bradleyTerryFull } from './bradley-terry-full.js'; | ||
export { default as bradleyTerryPart } from './bradley-terry-part.js'; | ||
export { default as thurstoneMostellerFull } from './thurstone-mosteller-full.js'; | ||
export { default as thurstoneMostellerPart } from './thurstone-mosteller-part.js'; | ||
import '../types.js'; |
@@ -1,42 +0,304 @@ | ||
"use strict"; | ||
// src/util.ts | ||
import { zip } from "ramda"; | ||
Object.defineProperty(exports, "__esModule", { | ||
value: true | ||
}); | ||
Object.defineProperty(exports, "bradleyTerryFull", { | ||
enumerable: true, | ||
get: function () { | ||
return _bradleyTerryFull.default; | ||
// src/constants.ts | ||
var builder = (options) => { | ||
const { z = 3, mu = 25, preventSigmaIncrease = false, epsilon = 1e-4 } = options; | ||
const { tau = mu / 300, sigma = mu / z, beta = sigma / 2, limitSigma = preventSigmaIncrease } = options; | ||
const betaSq = beta ** 2; | ||
return { | ||
SIGMA: sigma, | ||
MU: mu, | ||
EPSILON: epsilon, | ||
TWOBETASQ: 2 * betaSq, | ||
BETA: beta, | ||
BETASQ: betaSq, | ||
Z: z, | ||
TAU: tau, | ||
LIMIT_SIGMA: limitSigma | ||
}; | ||
}; | ||
var constants_default = builder; | ||
// src/util.ts | ||
var sum = (a, b) => a + b; | ||
var score = (q, i) => { | ||
if (q < i) { | ||
return 0; | ||
} | ||
}); | ||
Object.defineProperty(exports, "bradleyTerryPart", { | ||
enumerable: true, | ||
get: function () { | ||
return _bradleyTerryPart.default; | ||
if (q > i) { | ||
return 1; | ||
} | ||
}); | ||
Object.defineProperty(exports, "plackettLuce", { | ||
enumerable: true, | ||
get: function () { | ||
return _plackettLuce.default; | ||
return 0.5; | ||
}; | ||
var rankings = (teams, rank = []) => { | ||
const teamScores = teams.map((_, i) => rank[i] || i); | ||
const outRank = new Array(teams.length); | ||
let s = 0; | ||
for (let j = 0; j < teamScores.length; j += 1) { | ||
if (j > 0 && teamScores[j - 1] < teamScores[j]) { | ||
s = j; | ||
} | ||
outRank[j] = s; | ||
} | ||
return outRank; | ||
}; | ||
var teamRating = (options) => (game) => { | ||
const rank = rankings(game, options.rank); | ||
return game.map((team, i) => [ | ||
// mu[i] | ||
team.map(({ mu }) => mu).reduce(sum, 0), | ||
// sigma^2[i] | ||
team.map(({ sigma }) => sigma * sigma).reduce(sum, 0), | ||
// (original team data) | ||
team, | ||
// rank[i] | ||
rank[i] | ||
]); | ||
}; | ||
var ladderPairs = (ranks) => { | ||
const size = ranks.length; | ||
const left = [void 0, ...ranks.slice(0, size - 1)]; | ||
const right = [...ranks.slice(1), void 0]; | ||
return zip(left, right).map(([l, r]) => { | ||
if (l !== void 0 && r !== void 0) return [l, r]; | ||
if (l !== void 0 && r === void 0) return [l]; | ||
if (l === void 0 && r !== void 0) return [r]; | ||
return []; | ||
}); | ||
}; | ||
var utilC = (options) => { | ||
const { BETASQ } = constants_default(options); | ||
return (teamRatings) => Math.sqrt(teamRatings.map(([_teamMu, teamSigmaSq, _team, _rank]) => teamSigmaSq + BETASQ).reduce(sum, 0)); | ||
}; | ||
var utilSumQ = (teamRatings, c) => teamRatings.map( | ||
([_qMu, _qSigmaSq, _qTeam, qRank]) => teamRatings.filter(([_iMu, _iSigmaSq, _iTeam, iRank]) => iRank >= qRank).map(([iMu, _iSigmaSq, _iTeam, _iRank]) => Math.exp(iMu / c)).reduce(sum, 0) | ||
); | ||
var utilA = (teamRatings) => teamRatings.map( | ||
([_iMu, _iSigmaSq, _iTeam, iRank]) => teamRatings.filter(([_qMu, _qSigmaSq, _qTeam, qRank]) => iRank === qRank).length | ||
); | ||
var gamma = (options) => { | ||
var _a; | ||
return (_a = options.gamma) != null ? _a : ( | ||
// default to iSigma / c | ||
(c, _k, _mu, sigmaSq, _team, _qRank) => Math.sqrt(sigmaSq) / c | ||
); | ||
}; | ||
var util_default = (options) => ({ | ||
utilC: utilC(options), | ||
teamRating: teamRating(options), | ||
gamma: gamma(options) | ||
}); | ||
Object.defineProperty(exports, "thurstoneMostellerFull", { | ||
enumerable: true, | ||
get: function () { | ||
return _thurstoneMostellerFull.default; | ||
// src/models/plackett-luce.ts | ||
var model = (game, options = {}) => { | ||
const { EPSILON } = constants_default(options); | ||
const { utilC: utilC2, teamRating: teamRating2, gamma: gamma2 } = util_default(options); | ||
const teamRatings = teamRating2(game); | ||
const c = utilC2(teamRatings); | ||
const sumQ = utilSumQ(teamRatings, c); | ||
const a = utilA(teamRatings); | ||
return teamRatings.map((iTeamRating, i) => { | ||
const [iMu, iSigmaSq, iTeam, iRank] = iTeamRating; | ||
const iMuOverCe = Math.exp(iMu / c); | ||
const [omegaSum, deltaSum] = teamRatings.filter(([_qMu, _qSigmaSq, _qTeam, qRank]) => qRank <= iRank).reduce( | ||
([omega, delta], [_], q) => { | ||
const quotient = iMuOverCe / sumQ[q]; | ||
return [omega + (i === q ? 1 - quotient : -quotient) / a[q], delta + quotient * (1 - quotient) / a[q]]; | ||
}, | ||
[0, 0] | ||
); | ||
const iGamma = gamma2(c, teamRatings.length, ...iTeamRating); | ||
const iOmega = omegaSum * (iSigmaSq / c); | ||
const iDelta = iGamma * deltaSum * (iSigmaSq / c ** 2); | ||
return iTeam.map(({ mu, sigma }) => ({ | ||
mu: mu + sigma ** 2 / iSigmaSq * iOmega, | ||
sigma: sigma * Math.sqrt(Math.max(1 - sigma ** 2 / iSigmaSq * iDelta, EPSILON)) | ||
})); | ||
}); | ||
}; | ||
var plackett_luce_default = model; | ||
// src/models/bradley-terry-full.ts | ||
var model2 = (game, options = {}) => { | ||
const { TWOBETASQ, EPSILON } = constants_default(options); | ||
const { teamRating: teamRating2, gamma: gamma2 } = util_default(options); | ||
const teamRatings = teamRating2(game); | ||
return teamRatings.map((iTeamRating, i) => { | ||
const [iMu, iSigmaSq, iTeam, iRank] = iTeamRating; | ||
const [iOmega, iDelta] = teamRatings.filter((_, q) => q !== i).reduce( | ||
([omega, delta], [qMu, qSigmaSq, _qTeam, qRank]) => { | ||
const ciq = Math.sqrt(iSigmaSq + qSigmaSq + TWOBETASQ); | ||
const piq = 1 / (1 + Math.exp((qMu - iMu) / ciq)); | ||
const sigSqToCiq = iSigmaSq / ciq; | ||
const iGamma = gamma2(ciq, teamRatings.length, ...iTeamRating); | ||
return [ | ||
omega + sigSqToCiq * (score(qRank, iRank) - piq), | ||
delta + iGamma * sigSqToCiq / ciq * piq * (1 - piq) | ||
]; | ||
}, | ||
[0, 0] | ||
); | ||
return iTeam.map(({ mu, sigma }) => { | ||
const sigmaSq = sigma * sigma; | ||
return { | ||
mu: mu + sigmaSq / iSigmaSq * iOmega, | ||
sigma: sigma * Math.sqrt(Math.max(1 - sigmaSq / iSigmaSq * iDelta, EPSILON)) | ||
}; | ||
}); | ||
}); | ||
}; | ||
var bradley_terry_full_default = model2; | ||
// src/models/bradley-terry-part.ts | ||
import { zip as zip2 } from "ramda"; | ||
var model3 = (game, options = {}) => { | ||
const { TWOBETASQ, EPSILON } = constants_default(options); | ||
const { teamRating: teamRating2, gamma: gamma2 } = util_default(options); | ||
const teamRatings = teamRating2(game); | ||
const adjacentTeams = ladderPairs(teamRatings); | ||
return zip2(teamRatings, adjacentTeams).map(([iTeamRating, iAdjacents]) => { | ||
const [iMu, iSigmaSq, iTeam, iRank] = iTeamRating; | ||
const [iOmega, iDelta] = iAdjacents.reduce( | ||
([omega, delta], [qMu, qSigmaSq, _qTeam, qRank]) => { | ||
const ciq = Math.sqrt(iSigmaSq + qSigmaSq + TWOBETASQ); | ||
const piq = 1 / (1 + Math.exp((qMu - iMu) / ciq)); | ||
const sigSqToCiq = iSigmaSq / ciq; | ||
const iGamma = gamma2(ciq, teamRatings.length, ...iTeamRating); | ||
return [ | ||
omega + sigSqToCiq * (score(qRank, iRank) - piq), | ||
delta + iGamma * sigSqToCiq / ciq * piq * (1 - piq) | ||
]; | ||
}, | ||
[0, 0] | ||
); | ||
return iTeam.map(({ mu, sigma }) => { | ||
const sigmaSq = sigma * sigma; | ||
return { | ||
mu: mu + sigmaSq / iSigmaSq * iOmega, | ||
sigma: sigma * Math.sqrt(Math.max(1 - sigmaSq / iSigmaSq * iDelta, EPSILON)) | ||
}; | ||
}); | ||
}); | ||
}; | ||
var bradley_terry_part_default = model3; | ||
// src/statistics.ts | ||
import gaussian from "gaussian"; | ||
var normal = gaussian(0, 1); | ||
var phiMajor = (x) => normal.cdf(x); | ||
var phiMinor = (x) => normal.pdf(x); | ||
var v = (x, t) => { | ||
const xt = x - t; | ||
const denom = phiMajor(xt); | ||
return denom < Number.EPSILON ? -xt : phiMinor(xt) / denom; | ||
}; | ||
var w = (x, t) => { | ||
const xt = x - t; | ||
const denom = phiMajor(xt); | ||
if (denom < Number.EPSILON) { | ||
return x < 0 ? 1 : 0; | ||
} | ||
}); | ||
Object.defineProperty(exports, "thurstoneMostellerPart", { | ||
enumerable: true, | ||
get: function () { | ||
return _thurstoneMostellerPart.default; | ||
return v(x, t) * (v(x, t) + xt); | ||
}; | ||
var vt = (x, t) => { | ||
const xx = Math.abs(x); | ||
const b = phiMajor(t - xx) - phiMajor(-t - xx); | ||
if (b < 1e-5) { | ||
if (x < 0) return -x - t; | ||
return -x + t; | ||
} | ||
}); | ||
var _plackettLuce = _interopRequireDefault(require("./plackett-luce")); | ||
var _bradleyTerryFull = _interopRequireDefault(require("./bradley-terry-full")); | ||
var _bradleyTerryPart = _interopRequireDefault(require("./bradley-terry-part")); | ||
var _thurstoneMostellerFull = _interopRequireDefault(require("./thurstone-mosteller-full")); | ||
var _thurstoneMostellerPart = _interopRequireDefault(require("./thurstone-mosteller-part")); | ||
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcGxhY2tldHRMdWNlIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfYnJhZGxleVRlcnJ5RnVsbCIsIl9icmFkbGV5VGVycnlQYXJ0IiwiX3RodXJzdG9uZU1vc3RlbGxlckZ1bGwiLCJfdGh1cnN0b25lTW9zdGVsbGVyUGFydCIsImUiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tb2RlbHMvaW5kZXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHsgZGVmYXVsdCBhcyBwbGFja2V0dEx1Y2UgfSBmcm9tICcuL3BsYWNrZXR0LWx1Y2UnXG5leHBvcnQgeyBkZWZhdWx0IGFzIGJyYWRsZXlUZXJyeUZ1bGwgfSBmcm9tICcuL2JyYWRsZXktdGVycnktZnVsbCdcbmV4cG9ydCB7IGRlZmF1bHQgYXMgYnJhZGxleVRlcnJ5UGFydCB9IGZyb20gJy4vYnJhZGxleS10ZXJyeS1wYXJ0J1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB0aHVyc3RvbmVNb3N0ZWxsZXJGdWxsIH0gZnJvbSAnLi90aHVyc3RvbmUtbW9zdGVsbGVyLWZ1bGwnXG5leHBvcnQgeyBkZWZhdWx0IGFzIHRodXJzdG9uZU1vc3RlbGxlclBhcnQgfSBmcm9tICcuL3RodXJzdG9uZS1tb3N0ZWxsZXItcGFydCdcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxJQUFBQSxhQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxpQkFBQSxHQUFBRixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUUsaUJBQUEsR0FBQUgsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFHLHVCQUFBLEdBQUFKLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBSSx1QkFBQSxHQUFBTCxzQkFBQSxDQUFBQyxPQUFBO0FBQThFLFNBQUFELHVCQUFBTSxDQUFBLFdBQUFBLENBQUEsSUFBQUEsQ0FBQSxDQUFBQyxVQUFBLEdBQUFELENBQUEsS0FBQUUsT0FBQSxFQUFBRixDQUFBIiwiaWdub3JlTGlzdCI6W119 | ||
const a = phiMinor(-t - xx) - phiMinor(t - xx); | ||
return (x < 0 ? -a : a) / b; | ||
}; | ||
var wt = (x, t) => { | ||
const xx = Math.abs(x); | ||
const b = phiMajor(t - xx) - phiMajor(-t - xx); | ||
return b < Number.EPSILON ? 1 : ((t - xx) * phiMinor(t - xx) + (t + xx) * phiMinor(-t - xx)) / b + vt(x, t) * vt(x, t); | ||
}; | ||
// src/models/thurstone-mosteller-full.ts | ||
var model4 = (game, options = {}) => { | ||
const { TWOBETASQ, EPSILON } = constants_default(options); | ||
const { teamRating: teamRating2, gamma: gamma2 } = util_default(options); | ||
const teamRatings = teamRating2(game); | ||
return teamRatings.map((iTeamRating, i) => { | ||
const [iMu, iSigmaSq, iTeam, iRank] = iTeamRating; | ||
const [iOmega, iDelta] = teamRatings.filter((_, q) => i !== q).reduce( | ||
([omega, delta], [qMu, qSigmaSq, _qTeam, qRank]) => { | ||
const ciq = Math.sqrt(iSigmaSq + qSigmaSq + TWOBETASQ); | ||
const deltaMu = (iMu - qMu) / ciq; | ||
const sigSqToCiq = iSigmaSq / ciq; | ||
const iGamma = gamma2(ciq, teamRatings.length, ...iTeamRating); | ||
if (qRank === iRank) { | ||
return [ | ||
omega + sigSqToCiq * vt(deltaMu, EPSILON / ciq), | ||
delta + iGamma * sigSqToCiq / ciq * wt(deltaMu, EPSILON / ciq) | ||
]; | ||
} | ||
const sign = qRank > iRank ? 1 : -1; | ||
return [ | ||
omega + sign * sigSqToCiq * v(sign * deltaMu, EPSILON / ciq), | ||
delta + iGamma * sigSqToCiq / ciq * w(sign * deltaMu, EPSILON / ciq) | ||
]; | ||
}, | ||
[0, 0] | ||
); | ||
return iTeam.map(({ mu, sigma }) => { | ||
const sigmaSq = sigma * sigma; | ||
return { | ||
mu: mu + sigmaSq / iSigmaSq * iOmega, | ||
sigma: sigma * Math.sqrt(Math.max(1 - sigmaSq / iSigmaSq * iDelta, EPSILON)) | ||
}; | ||
}); | ||
}); | ||
}; | ||
var thurstone_mosteller_full_default = model4; | ||
// src/models/thurstone-mosteller-part.ts | ||
import { zip as zip3 } from "ramda"; | ||
var model5 = (game, options = {}) => { | ||
const { TWOBETASQ, EPSILON } = constants_default(options); | ||
const { teamRating: teamRating2, gamma: gamma2 } = util_default(options); | ||
const teamRatings = teamRating2(game); | ||
const adjacentTeams = ladderPairs(teamRatings); | ||
return zip3(teamRatings, adjacentTeams).map(([iTeamRating, iAdjacents]) => { | ||
const [iMu, iSigmaSq, iTeam, iRank] = iTeamRating; | ||
const [iOmega, iDelta] = iAdjacents.reduce( | ||
([omega, delta], [qMu, qSigmaSq, _qTeam, qRank]) => { | ||
const ciq = 2 * Math.sqrt(iSigmaSq + qSigmaSq + TWOBETASQ); | ||
const deltaMu = (iMu - qMu) / ciq; | ||
const sigSqToCiq = iSigmaSq / ciq; | ||
const iGamma = gamma2(ciq, teamRatings.length, ...iTeamRating); | ||
if (qRank === iRank) { | ||
return [ | ||
omega + sigSqToCiq * vt(deltaMu, EPSILON / ciq), | ||
delta + iGamma * sigSqToCiq / ciq * wt(deltaMu, EPSILON / ciq) | ||
]; | ||
} | ||
const sign = qRank > iRank ? 1 : -1; | ||
return [ | ||
omega + sign * sigSqToCiq * v(sign * deltaMu, EPSILON / ciq), | ||
delta + iGamma * sigSqToCiq / ciq * w(sign * deltaMu, EPSILON / ciq) | ||
]; | ||
}, | ||
[0, 0] | ||
); | ||
return iTeam.map(({ mu, sigma }) => { | ||
const sigmaSq = sigma * sigma; | ||
return { | ||
mu: mu + sigmaSq / iSigmaSq * iOmega, | ||
sigma: sigma * Math.sqrt(Math.max(1 - sigmaSq / iSigmaSq * iDelta, EPSILON)) | ||
}; | ||
}); | ||
}); | ||
}; | ||
var thurstone_mosteller_part_default = model5; | ||
export { | ||
bradley_terry_full_default as bradleyTerryFull, | ||
bradley_terry_part_default as bradleyTerryPart, | ||
plackett_luce_default as plackettLuce, | ||
thurstone_mosteller_full_default as thurstoneMostellerFull, | ||
thurstone_mosteller_part_default as thurstoneMostellerPart | ||
}; | ||
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL3V0aWwudHMiLCAiLi4vLi4vc3JjL2NvbnN0YW50cy50cyIsICIuLi8uLi9zcmMvbW9kZWxzL3BsYWNrZXR0LWx1Y2UudHMiLCAiLi4vLi4vc3JjL21vZGVscy9icmFkbGV5LXRlcnJ5LWZ1bGwudHMiLCAiLi4vLi4vc3JjL21vZGVscy9icmFkbGV5LXRlcnJ5LXBhcnQudHMiLCAiLi4vLi4vc3JjL3N0YXRpc3RpY3MudHMiLCAiLi4vLi4vc3JjL21vZGVscy90aHVyc3RvbmUtbW9zdGVsbGVyLWZ1bGwudHMiLCAiLi4vLi4vc3JjL21vZGVscy90aHVyc3RvbmUtbW9zdGVsbGVyLXBhcnQudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7IHppcCB9IGZyb20gJ3JhbWRhJ1xuaW1wb3J0IGNvbnN0YW50cyBmcm9tICcuL2NvbnN0YW50cydcbmltcG9ydCB7IFJhdGluZywgT3B0aW9ucywgR2FtbWEsIFRlYW0sIFJhbmsgfSBmcm9tICcuL3R5cGVzJ1xuXG5leHBvcnQgdHlwZSBUZWFtTXUgPSBudW1iZXJcblxuZXhwb3J0IHR5cGUgVGVhbVNpZ21hU3EgPSBudW1iZXJcblxuZXhwb3J0IHR5cGUgVGVhbVJhdGluZyA9IFtUZWFtTXUsIFRlYW1TaWdtYVNxLCBUZWFtLCBSYW5rXVxuXG5leHBvcnQgY29uc3Qgc3VtID0gKGE6IG51bWJlciwgYjogbnVtYmVyKSA9PiBhICsgYlxuXG5leHBvcnQgY29uc3Qgc2NvcmUgPSAocTogbnVtYmVyLCBpOiBudW1iZXIpID0+IHtcbiAgaWYgKHEgPCBpKSB7XG4gICAgcmV0dXJuIDAuMFxuICB9XG4gIGlmIChxID4gaSkge1xuICAgIHJldHVybiAxLjBcbiAgfVxuICAvLyBxID09PSBpXG4gIHJldHVybiAwLjVcbn1cblxuZXhwb3J0IGNvbnN0IHJhbmtpbmdzID0gKHRlYW1zOiBUZWFtW10sIHJhbms6IG51bWJlcltdID0gW10pID0+IHtcbiAgY29uc3QgdGVhbVNjb3JlcyA9IHRlYW1zLm1hcCgoXywgaSkgPT4gcmFua1tpXSB8fCBpKVxuICBjb25zdCBvdXRSYW5rID0gbmV3IEFycmF5KHRlYW1zLmxlbmd0aClcblxuICBsZXQgcyA9IDBcbiAgZm9yIChsZXQgaiA9IDA7IGogPCB0ZWFtU2NvcmVzLmxlbmd0aDsgaiArPSAxKSB7XG4gICAgaWYgKGogPiAwICYmIHRlYW1TY29yZXNbaiAtIDFdIDwgdGVhbVNjb3Jlc1tqXSkge1xuICAgICAgcyA9IGpcbiAgICB9XG4gICAgb3V0UmFua1tqXSA9IHNcbiAgfVxuICByZXR1cm4gb3V0UmFua1xufVxuXG4vLyB0aGlzIGlzIGJhc2ljYWxseSBzaGFyZWQgY29kZSwgcHJlY29tcHV0ZWQgZm9yIGV2ZXJ5IG1vZGVsXG5jb25zdCB0ZWFtUmF0aW5nID1cbiAgKG9wdGlvbnM6IE9wdGlvbnMpID0+XG4gIChnYW1lOiBUZWFtW10pOiBUZWFtUmF0aW5nW10gPT4ge1xuICAgIGNvbnN0IHJhbmsgPSByYW5raW5ncyhnYW1lLCBvcHRpb25zLnJhbmspXG4gICAgcmV0dXJuIGdhbWUubWFwKCh0ZWFtLCBpKSA9PiBbXG4gICAgICAvLyBtdVtpXVxuICAgICAgdGVhbS5tYXAoKHsgbXUgfSkgPT4gbXUpLnJlZHVjZShzdW0sIDApLFxuICAgICAgLy8gc2lnbWFeMltpXVxuICAgICAgdGVhbS5tYXAoKHsgc2lnbWEgfSkgPT4gc2lnbWEgKiBzaWdtYSkucmVkdWNlKHN1bSwgMCksXG4gICAgICAvLyAob3JpZ2luYWwgdGVhbSBkYXRhKVxuICAgICAgdGVhbSxcbiAgICAgIC8vIHJhbmtbaV1cbiAgICAgIHJhbmtbaV0sXG4gICAgXSlcbiAgfVxuXG5leHBvcnQgY29uc3QgbGFkZGVyUGFpcnMgPSA8VD4ocmFua3M6IFRbXSk6IFRbXVtdID0+IHtcbiAgY29uc3Qgc2l6ZSA9IHJhbmtzLmxlbmd0aFxuICBjb25zdCBsZWZ0ID0gW3VuZGVmaW5lZCwgLi4ucmFua3Muc2xpY2UoMCwgc2l6ZSAtIDEpXVxuICBjb25zdCByaWdodCA9IFsuLi5yYW5rcy5zbGljZSgxKSwgdW5kZWZpbmVkXVxuICByZXR1cm4gemlwKGxlZnQsIHJpZ2h0KS5tYXAoKFtsLCByXSkgPT4ge1xuICAgIGlmIChsICE9PSB1bmRlZmluZWQgJiYgciAhPT0gdW5kZWZpbmVkKSByZXR1cm4gW2wsIHJdXG4gICAgaWYgKGwgIT09IHVuZGVmaW5lZCAmJiByID09PSB1bmRlZmluZWQpIHJldHVybiBbbF1cbiAgICBpZiAobCA9PT0gdW5kZWZpbmVkICYmIHIgIT09IHVuZGVmaW5lZCkgcmV0dXJuIFtyXVxuICAgIHJldHVybiBbXSAvLyB0aGlzIHNob3VsZCByZWFsbHkgb25seSBoYXBwZW4gd2hlbiBzaXplID09PSAxXG4gIH0pXG59XG5cbmNvbnN0IHV0aWxDID0gKG9wdGlvbnM6IE9wdGlvbnMpID0+IHtcbiAgY29uc3QgeyBCRVRBU1EgfSA9IGNvbnN0YW50cyhvcHRpb25zKVxuICByZXR1cm4gKHRlYW1SYXRpbmdzOiBUZWFtUmF0aW5nW10pID0+XG4gICAgTWF0aC5zcXJ0KHRlYW1SYXRpbmdzLm1hcCgoW190ZWFtTXUsIHRlYW1TaWdtYVNxLCBfdGVhbSwgX3JhbmtdKSA9PiB0ZWFtU2lnbWFTcSArIEJFVEFTUSkucmVkdWNlKHN1bSwgMCkpXG59XG5cbmV4cG9ydCBjb25zdCB1dGlsU3VtUSA9ICh0ZWFtUmF0aW5nczogVGVhbVJhdGluZ1tdLCBjOiBudW1iZXIpID0+XG4gIHRlYW1SYXRpbmdzLm1hcCgoW19xTXUsIF9xU2lnbWFTcSwgX3FUZWFtLCBxUmFua10pID0+XG4gICAgdGVhbVJhdGluZ3NcbiAgICAgIC5maWx0ZXIoKFtfaU11LCBfaVNpZ21hU3EsIF9pVGVhbSwgaVJhbmtdKSA9PiBpUmFuayA+PSBxUmFuaylcbiAgICAgIC5tYXAoKFtpTXUsIF9pU2lnbWFTcSwgX2lUZWFtLCBfaVJhbmtdKSA9PiBNYXRoLmV4cChpTXUgLyBjKSlcbiAgICAgIC5yZWR1Y2Uoc3VtLCAwKVxuICApXG5cbmV4cG9ydCBjb25zdCB1dGlsQSA9ICh0ZWFtUmF0aW5nczogVGVhbVJhdGluZ1tdKSA9PlxuICB0ZWFtUmF0aW5ncy5tYXAoXG4gICAgKFtfaU11LCBfaVNpZ21hU3EsIF9pVGVhbSwgaVJhbmtdKSA9PlxuICAgICAgdGVhbVJhdGluZ3MuZmlsdGVyKChbX3FNdSwgX3FTaWdtYVNxLCBfcVRlYW0sIHFSYW5rXSkgPT4gaVJhbmsgPT09IHFSYW5rKS5sZW5ndGhcbiAgKVxuXG5leHBvcnQgY29uc3QgZ2FtbWEgPSAob3B0aW9uczogT3B0aW9ucyk6IEdhbW1hID0+XG4gIG9wdGlvbnMuZ2FtbWEgPz9cbiAgLy8gZGVmYXVsdCB0byBpU2lnbWEgLyBjXG4gICgoYzogbnVtYmVyLCBfazogbnVtYmVyLCBfbXU6IG51bWJlciwgc2lnbWFTcTogbnVtYmVyLCBfdGVhbTogUmF0aW5nW10sIF9xUmFuazogbnVtYmVyKSA9PiBNYXRoLnNxcnQoc2lnbWFTcSkgLyBjKVxuXG5leHBvcnQgZGVmYXVsdCAob3B0aW9uczogT3B0aW9ucykgPT4gKHtcbiAgdXRpbEM6IHV0aWxDKG9wdGlvbnMpLFxuICB0ZWFtUmF0aW5nOiB0ZWFtUmF0aW5nKG9wdGlvbnMpLFxuICBnYW1tYTogZ2FtbWEob3B0aW9ucyksXG59KVxuIiwgImltcG9ydCB7IE9wdGlvbnMgfSBmcm9tICcuL3R5cGVzJ1xuXG5jb25zdCBidWlsZGVyID0gKG9wdGlvbnM6IE9wdGlvbnMpID0+IHtcbiAgLy8gaSdkIGxvdmUgdG8ga25vdyBvZiBhIGJldHRlciB3YXkgdG8gZG8gdGhpc1xuICBjb25zdCB7IHogPSAzLCBtdSA9IDI1LCBwcmV2ZW50U2lnbWFJbmNyZWFzZSA9IGZhbHNlLCBlcHNpbG9uID0gMC4wMDAxIH0gPSBvcHRpb25zXG4gIGNvbnN0IHsgdGF1ID0gbXUgLyAzMDAsIHNpZ21hID0gbXUgLyB6LCBiZXRhID0gc2lnbWEgLyAyLCBsaW1pdFNpZ21hID0gcHJldmVudFNpZ21hSW5jcmVhc2UgfSA9IG9wdGlvbnNcbiAgY29uc3QgYmV0YVNxID0gYmV0YSAqKiAyXG5cbiAgcmV0dXJuIHtcbiAgICBTSUdNQTogc2lnbWEsXG4gICAgTVU6IG11LFxuICAgIEVQU0lMT046IGVwc2lsb24sXG4gICAgVFdPQkVUQVNROiAyICogYmV0YVNxLFxuICAgIEJFVEE6IGJldGEsXG4gICAgQkVUQVNROiBiZXRhU3EsXG4gICAgWjogeixcbiAgICBUQVU6IHRhdSxcbiAgICBMSU1JVF9TSUdNQTogbGltaXRTaWdtYSxcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBidWlsZGVyXG4iLCAiaW1wb3J0IHV0aWwsIHsgdXRpbFN1bVEsIHV0aWxBIH0gZnJvbSAnLi4vdXRpbCdcbmltcG9ydCBjb25zdGFudHMgZnJvbSAnLi4vY29uc3RhbnRzJ1xuaW1wb3J0IHsgUmF0aW5nLCBPcHRpb25zLCBNb2RlbCB9IGZyb20gJy4uL3R5cGVzJ1xuXG5jb25zdCBtb2RlbDogTW9kZWwgPSAoZ2FtZTogUmF0aW5nW11bXSwgb3B0aW9uczogT3B0aW9ucyA9IHt9KSA9PiB7XG4gIGNvbnN0IHsgRVBTSUxPTiB9ID0gY29uc3RhbnRzKG9wdGlvbnMpXG4gIGNvbnN0IHsgdXRpbEMsIHRlYW1SYXRpbmcsIGdhbW1hIH0gPSB1dGlsKG9wdGlvbnMpXG4gIGNvbnN0IHRlYW1SYXRpbmdzID0gdGVhbVJhdGluZyhnYW1lKVxuICBjb25zdCBjID0gdXRpbEModGVhbVJhdGluZ3MpXG4gIGNvbnN0IHN1bVEgPSB1dGlsU3VtUSh0ZWFtUmF0aW5ncywgYylcbiAgY29uc3QgYSA9IHV0aWxBKHRlYW1SYXRpbmdzKVxuXG4gIHJldHVybiB0ZWFtUmF0aW5ncy5tYXAoKGlUZWFtUmF0aW5nLCBpKSA9PiB7XG4gICAgY29uc3QgW2lNdSwgaVNpZ21hU3EsIGlUZWFtLCBpUmFua10gPSBpVGVhbVJhdGluZ1xuICAgIGNvbnN0IGlNdU92ZXJDZSA9IE1hdGguZXhwKGlNdSAvIGMpIC8vIHRtcDFcbiAgICBjb25zdCBbb21lZ2FTdW0sIGRlbHRhU3VtXSA9IHRlYW1SYXRpbmdzXG4gICAgICAuZmlsdGVyKChbX3FNdSwgX3FTaWdtYVNxLCBfcVRlYW0sIHFSYW5rXSkgPT4gcVJhbmsgPD0gaVJhbmspXG4gICAgICAucmVkdWNlKFxuICAgICAgICAoW29tZWdhLCBkZWx0YV0sIFtfXSwgcSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHF1b3RpZW50ID0gaU11T3ZlckNlIC8gc3VtUVtxXVxuICAgICAgICAgIHJldHVybiBbb21lZ2EgKyAoaSA9PT0gcSA/IDEgLSBxdW90aWVudCA6IC1xdW90aWVudCkgLyBhW3FdLCBkZWx0YSArIChxdW90aWVudCAqICgxIC0gcXVvdGllbnQpKSAvIGFbcV1dXG4gICAgICAgIH0sXG4gICAgICAgIFswLCAwXVxuICAgICAgKVxuXG4gICAgY29uc3QgaUdhbW1hID0gZ2FtbWEoYywgdGVhbVJhdGluZ3MubGVuZ3RoLCAuLi5pVGVhbVJhdGluZylcbiAgICBjb25zdCBpT21lZ2EgPSBvbWVnYVN1bSAqIChpU2lnbWFTcSAvIGMpXG4gICAgY29uc3QgaURlbHRhID0gaUdhbW1hICogZGVsdGFTdW0gKiAoaVNpZ21hU3EgLyBjICoqIDIpXG5cbiAgICByZXR1cm4gaVRlYW0ubWFwKCh7IG11LCBzaWdtYSB9KSA9PiAoe1xuICAgICAgbXU6IG11ICsgKHNpZ21hICoqIDIgLyBpU2lnbWFTcSkgKiBpT21lZ2EsXG4gICAgICBzaWdtYTogc2lnbWEgKiBNYXRoLnNxcnQoTWF0aC5tYXgoMSAtIChzaWdtYSAqKiAyIC8gaVNpZ21hU3EpICogaURlbHRhLCBFUFNJTE9OKSksXG4gICAgfSkpXG4gIH0pXG59XG5cbmV4cG9ydCBkZWZhdWx0IG1vZGVsXG4iLCAiaW1wb3J0IHV0aWwsIHsgc2NvcmUgfSBmcm9tICcuLi91dGlsJ1xuaW1wb3J0IGNvbnN0YW50cyBmcm9tICcuLi9jb25zdGFudHMnXG5pbXBvcnQgeyBSYXRpbmcsIE9wdGlvbnMsIE1vZGVsIH0gZnJvbSAnLi4vdHlwZXMnXG5cbmNvbnN0IG1vZGVsOiBNb2RlbCA9IChnYW1lOiBSYXRpbmdbXVtdLCBvcHRpb25zOiBPcHRpb25zID0ge30pID0+IHtcbiAgY29uc3QgeyBUV09CRVRBU1EsIEVQU0lMT04gfSA9IGNvbnN0YW50cyhvcHRpb25zKVxuICBjb25zdCB7IHRlYW1SYXRpbmcsIGdhbW1hIH0gPSB1dGlsKG9wdGlvbnMpXG4gIGNvbnN0IHRlYW1SYXRpbmdzID0gdGVhbVJhdGluZyhnYW1lKVxuXG4gIHJldHVybiB0ZWFtUmF0aW5ncy5tYXAoKGlUZWFtUmF0aW5nLCBpKSA9PiB7XG4gICAgY29uc3QgW2lNdSwgaVNpZ21hU3EsIGlUZWFtLCBpUmFua10gPSBpVGVhbVJhdGluZ1xuICAgIGNvbnN0IFtpT21lZ2EsIGlEZWx0YV0gPSB0ZWFtUmF0aW5nc1xuICAgICAgLmZpbHRlcigoXywgcSkgPT4gcSAhPT0gaSlcbiAgICAgIC5yZWR1Y2UoXG4gICAgICAgIChbb21lZ2EsIGRlbHRhXSwgW3FNdSwgcVNpZ21hU3EsIF9xVGVhbSwgcVJhbmtdKSA9PiB7XG4gICAgICAgICAgY29uc3QgY2lxID0gTWF0aC5zcXJ0KGlTaWdtYVNxICsgcVNpZ21hU3EgKyBUV09CRVRBU1EpXG4gICAgICAgICAgY29uc3QgcGlxID0gMSAvICgxICsgTWF0aC5leHAoKHFNdSAtIGlNdSkgLyBjaXEpKVxuICAgICAgICAgIGNvbnN0IHNpZ1NxVG9DaXEgPSBpU2lnbWFTcSAvIGNpcVxuICAgICAgICAgIGNvbnN0IGlHYW1tYSA9IGdhbW1hKGNpcSwgdGVhbVJhdGluZ3MubGVuZ3RoLCAuLi5pVGVhbVJhdGluZylcblxuICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBvbWVnYSArIHNpZ1NxVG9DaXEgKiAoc2NvcmUocVJhbmssIGlSYW5rKSAtIHBpcSksXG4gICAgICAgICAgICBkZWx0YSArICgoaUdhbW1hICogc2lnU3FUb0NpcSkgLyBjaXEpICogcGlxICogKDEgLSBwaXEpLFxuICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAgWzAsIDBdXG4gICAgICApXG5cbiAgICByZXR1cm4gaVRlYW0ubWFwKCh7IG11LCBzaWdtYSB9KSA9PiB7XG4gICAgICBjb25zdCBzaWdtYVNxID0gc2lnbWEgKiBzaWdtYVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbXU6IG11ICsgKHNpZ21hU3EgLyBpU2lnbWFTcSkgKiBpT21lZ2EsXG4gICAgICAgIHNpZ21hOiBzaWdtYSAqIE1hdGguc3FydChNYXRoLm1heCgxIC0gKHNpZ21hU3EgLyBpU2lnbWFTcSkgKiBpRGVsdGEsIEVQU0lMT04pKSxcbiAgICAgIH1cbiAgICB9KVxuICB9KVxufVxuXG5leHBvcnQgZGVmYXVsdCBtb2RlbFxuIiwgImltcG9ydCB7IHppcCB9IGZyb20gJ3JhbWRhJ1xuaW1wb3J0IHV0aWwsIHsgc2NvcmUsIGxhZGRlclBhaXJzIH0gZnJvbSAnLi4vdXRpbCdcbmltcG9ydCBjb25zdGFudHMgZnJvbSAnLi4vY29uc3RhbnRzJ1xuaW1wb3J0IHsgTW9kZWwsIFJhdGluZyB9IGZyb20gJy4uL3R5cGVzJ1xuXG5jb25zdCBtb2RlbDogTW9kZWwgPSAoZ2FtZTogUmF0aW5nW11bXSwgb3B0aW9ucyA9IHt9KSA9PiB7XG4gIGNvbnN0IHsgVFdPQkVUQVNRLCBFUFNJTE9OIH0gPSBjb25zdGFudHMob3B0aW9ucylcbiAgY29uc3QgeyB0ZWFtUmF0aW5nLCBnYW1tYSB9ID0gdXRpbChvcHRpb25zKVxuXG4gIGNvbnN0IHRlYW1SYXRpbmdzID0gdGVhbVJhdGluZyhnYW1lKVxuICBjb25zdCBhZGphY2VudFRlYW1zID0gbGFkZGVyUGFpcnModGVhbVJhdGluZ3MpXG5cbiAgcmV0dXJuIHppcCh0ZWFtUmF0aW5ncywgYWRqYWNlbnRUZWFtcykubWFwKChbaVRlYW1SYXRpbmcsIGlBZGphY2VudHNdKSA9PiB7XG4gICAgY29uc3QgW2lNdSwgaVNpZ21hU3EsIGlUZWFtLCBpUmFua10gPSBpVGVhbVJhdGluZ1xuICAgIGNvbnN0IFtpT21lZ2EsIGlEZWx0YV0gPSBpQWRqYWNlbnRzLnJlZHVjZShcbiAgICAgIChbb21lZ2EsIGRlbHRhXSwgW3FNdSwgcVNpZ21hU3EsIF9xVGVhbSwgcVJhbmtdKSA9PiB7XG4gICAgICAgIGNvbnN0IGNpcSA9IE1hdGguc3FydChpU2lnbWFTcSArIHFTaWdtYVNxICsgVFdPQkVUQVNRKVxuICAgICAgICBjb25zdCBwaXEgPSAxIC8gKDEgKyBNYXRoLmV4cCgocU11IC0gaU11KSAvIGNpcSkpXG4gICAgICAgIGNvbnN0IHNpZ1NxVG9DaXEgPSBpU2lnbWFTcSAvIGNpcVxuICAgICAgICBjb25zdCBpR2FtbWEgPSBnYW1tYShjaXEsIHRlYW1SYXRpbmdzLmxlbmd0aCwgLi4uaVRlYW1SYXRpbmcpXG5cbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICBvbWVnYSArIHNpZ1NxVG9DaXEgKiAoc2NvcmUocVJhbmssIGlSYW5rKSAtIHBpcSksXG4gICAgICAgICAgZGVsdGEgKyAoKGlHYW1tYSAqIHNpZ1NxVG9DaXEpIC8gY2lxKSAqIHBpcSAqICgxIC0gcGlxKSxcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIFswLCAwXVxuICAgIClcblxuICAgIHJldHVybiBpVGVhbS5tYXAoKHsgbXUsIHNpZ21hIH0pID0+IHtcbiAgICAgIGNvbnN0IHNpZ21hU3EgPSBzaWdtYSAqIHNpZ21hXG4gICAgICByZXR1cm4ge1xuICAgICAgICBtdTogbXUgKyAoc2lnbWFTcSAvIGlTaWdtYVNxKSAqIGlPbWVnYSxcbiAgICAgICAgc2lnbWE6IHNpZ21hICogTWF0aC5zcXJ0KE1hdGgubWF4KDEgLSAoc2lnbWFTcSAvIGlTaWdtYVNxKSAqIGlEZWx0YSwgRVBTSUxPTikpLFxuICAgICAgfVxuICAgIH0pXG4gIH0pXG59XG5cbmV4cG9ydCBkZWZhdWx0IG1vZGVsXG4iLCAiaW1wb3J0IGdhdXNzaWFuIGZyb20gJ2dhdXNzaWFuJ1xuXG4vLyB1c2UgYSBzdGFuZGFyZCBub3JtYWwgZGlzdHJpYnV0aW9uIC0gbWVhbiBvZiB6ZXJvLCBzdGRkZXYvdmFyaWFuY2Ugb2Ygb25lXG5jb25zdCBub3JtYWwgPSBnYXVzc2lhbigwLCAxKVxuXG5leHBvcnQgY29uc3QgcGhpTWFqb3IgPSAoeDogbnVtYmVyKSA9PiBub3JtYWwuY2RmKHgpXG5cbmV4cG9ydCBjb25zdCBwaGlNYWpvckludmVyc2UgPSAoeDogbnVtYmVyKSA9PiBub3JtYWwucHBmKHgpXG5cbmV4cG9ydCBjb25zdCBwaGlNaW5vciA9ICh4OiBudW1iZXIpID0+IG5vcm1hbC5wZGYoeClcblxuZXhwb3J0IGNvbnN0IHYgPSAoeDogbnVtYmVyLCB0OiBudW1iZXIpID0+IHtcbiAgY29uc3QgeHQgPSB4IC0gdFxuICBjb25zdCBkZW5vbSA9IHBoaU1ham9yKHh0KVxuICByZXR1cm4gZGVub20gPCBOdW1iZXIuRVBTSUxPTiA/IC14dCA6IHBoaU1pbm9yKHh0KSAvIGRlbm9tXG59XG5cbmV4cG9ydCBjb25zdCB3ID0gKHg6IG51bWJlciwgdDogbnVtYmVyKSA9PiB7XG4gIGNvbnN0IHh0ID0geCAtIHRcbiAgY29uc3QgZGVub20gPSBwaGlNYWpvcih4dClcbiAgaWYgKGRlbm9tIDwgTnVtYmVyLkVQU0lMT04pIHtcbiAgICByZXR1cm4geCA8IDAgPyAxIDogMFxuICB9XG4gIHJldHVybiB2KHgsIHQpICogKHYoeCwgdCkgKyB4dClcbn1cblxuZXhwb3J0IGNvbnN0IHZ0ID0gKHg6IG51bWJlciwgdDogbnVtYmVyKSA9PiB7XG4gIGNvbnN0IHh4ID0gTWF0aC5hYnMoeClcbiAgY29uc3QgYiA9IHBoaU1ham9yKHQgLSB4eCkgLSBwaGlNYWpvcigtdCAtIHh4KVxuICBpZiAoYiA8IDFlLTUpIHtcbiAgICBpZiAoeCA8IDApIHJldHVybiAteCAtIHRcbiAgICByZXR1cm4gLXggKyB0XG4gIH1cbiAgY29uc3QgYSA9IHBoaU1pbm9yKC10IC0geHgpIC0gcGhpTWlub3IodCAtIHh4KVxuICByZXR1cm4gKHggPCAwID8gLWEgOiBhKSAvIGJcbn1cblxuZXhwb3J0IGNvbnN0IHd0ID0gKHg6IG51bWJlciwgdDogbnVtYmVyKSA9PiB7XG4gIGNvbnN0IHh4ID0gTWF0aC5hYnMoeClcbiAgY29uc3QgYiA9IHBoaU1ham9yKHQgLSB4eCkgLSBwaGlNYWpvcigtdCAtIHh4KVxuICByZXR1cm4gYiA8IE51bWJlci5FUFNJTE9OXG4gICAgPyAxLjBcbiAgICA6ICgodCAtIHh4KSAqIHBoaU1pbm9yKHQgLSB4eCkgKyAodCArIHh4KSAqIHBoaU1pbm9yKC10IC0geHgpKSAvIGIgKyB2dCh4LCB0KSAqIHZ0KHgsIHQpXG59XG4iLCAiaW1wb3J0IHV0aWwgZnJvbSAnLi4vdXRpbCdcbmltcG9ydCBjb25zdGFudHMgZnJvbSAnLi4vY29uc3RhbnRzJ1xuaW1wb3J0IHsgdywgdiwgdnQsIHd0IH0gZnJvbSAnLi4vc3RhdGlzdGljcydcbmltcG9ydCB7IFJhdGluZywgT3B0aW9ucywgTW9kZWwgfSBmcm9tICcuLi90eXBlcydcblxuY29uc3QgbW9kZWw6IE1vZGVsID0gKGdhbWU6IFJhdGluZ1tdW10sIG9wdGlvbnM6IE9wdGlvbnMgPSB7fSkgPT4ge1xuICBjb25zdCB7IFRXT0JFVEFTUSwgRVBTSUxPTiB9ID0gY29uc3RhbnRzKG9wdGlvbnMpXG4gIGNvbnN0IHsgdGVhbVJhdGluZywgZ2FtbWEgfSA9IHV0aWwob3B0aW9ucylcbiAgY29uc3QgdGVhbVJhdGluZ3MgPSB0ZWFtUmF0aW5nKGdhbWUpXG5cbiAgcmV0dXJuIHRlYW1SYXRpbmdzLm1hcCgoaVRlYW1SYXRpbmcsIGkpID0+IHtcbiAgICBjb25zdCBbaU11LCBpU2lnbWFTcSwgaVRlYW0sIGlSYW5rXSA9IGlUZWFtUmF0aW5nXG4gICAgY29uc3QgW2lPbWVnYSwgaURlbHRhXSA9IHRlYW1SYXRpbmdzXG4gICAgICAuZmlsdGVyKChfLCBxKSA9PiBpICE9PSBxKVxuICAgICAgLnJlZHVjZShcbiAgICAgICAgKFtvbWVnYSwgZGVsdGFdLCBbcU11LCBxU2lnbWFTcSwgX3FUZWFtLCBxUmFua10pID0+IHtcbiAgICAgICAgICBjb25zdCBjaXEgPSBNYXRoLnNxcnQoaVNpZ21hU3EgKyBxU2lnbWFTcSArIFRXT0JFVEFTUSlcbiAgICAgICAgICBjb25zdCBkZWx0YU11ID0gKGlNdSAtIHFNdSkgLyBjaXFcbiAgICAgICAgICBjb25zdCBzaWdTcVRvQ2lxID0gaVNpZ21hU3EgLyBjaXFcbiAgICAgICAgICBjb25zdCBpR2FtbWEgPSBnYW1tYShjaXEsIHRlYW1SYXRpbmdzLmxlbmd0aCwgLi4uaVRlYW1SYXRpbmcpXG5cbiAgICAgICAgICBpZiAocVJhbmsgPT09IGlSYW5rKSB7XG4gICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICBvbWVnYSArIHNpZ1NxVG9DaXEgKiB2dChkZWx0YU11LCBFUFNJTE9OIC8gY2lxKSxcbiAgICAgICAgICAgICAgZGVsdGEgKyAoKGlHYW1tYSAqIHNpZ1NxVG9DaXEpIC8gY2lxKSAqIHd0KGRlbHRhTXUsIEVQU0lMT04gLyBjaXEpLFxuICAgICAgICAgICAgXVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IHNpZ24gPSBxUmFuayA+IGlSYW5rID8gMSA6IC0xXG4gICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIG9tZWdhICsgc2lnbiAqIHNpZ1NxVG9DaXEgKiB2KHNpZ24gKiBkZWx0YU11LCBFUFNJTE9OIC8gY2lxKSxcbiAgICAgICAgICAgIGRlbHRhICsgKChpR2FtbWEgKiBzaWdTcVRvQ2lxKSAvIGNpcSkgKiB3KHNpZ24gKiBkZWx0YU11LCBFUFNJTE9OIC8gY2lxKSxcbiAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIFswLCAwXVxuICAgICAgKVxuXG4gICAgcmV0dXJuIGlUZWFtLm1hcCgoeyBtdSwgc2lnbWEgfSkgPT4ge1xuICAgICAgY29uc3Qgc2lnbWFTcSA9IHNpZ21hICogc2lnbWFcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG11OiBtdSArIChzaWdtYVNxIC8gaVNpZ21hU3EpICogaU9tZWdhLFxuICAgICAgICBzaWdtYTogc2lnbWEgKiBNYXRoLnNxcnQoTWF0aC5tYXgoMSAtIChzaWdtYVNxIC8gaVNpZ21hU3EpICogaURlbHRhLCBFUFNJTE9OKSksXG4gICAgICB9XG4gICAgfSlcbiAgfSlcbn1cblxuZXhwb3J0IGRlZmF1bHQgbW9kZWxcbiIsICJpbXBvcnQgeyB6aXAgfSBmcm9tICdyYW1kYSdcbmltcG9ydCB1dGlsLCB7IGxhZGRlclBhaXJzIH0gZnJvbSAnLi4vdXRpbCdcbmltcG9ydCB7IHcsIHYsIHZ0LCB3dCB9IGZyb20gJy4uL3N0YXRpc3RpY3MnXG5pbXBvcnQgY29uc3RhbnRzIGZyb20gJy4uL2NvbnN0YW50cydcbmltcG9ydCB7IFJhdGluZywgT3B0aW9ucywgTW9kZWwgfSBmcm9tICcuLi90eXBlcydcblxuY29uc3QgbW9kZWw6IE1vZGVsID0gKGdhbWU6IFJhdGluZ1tdW10sIG9wdGlvbnM6IE9wdGlvbnMgPSB7fSkgPT4ge1xuICBjb25zdCB7IFRXT0JFVEFTUSwgRVBTSUxPTiB9ID0gY29uc3RhbnRzKG9wdGlvbnMpXG4gIGNvbnN0IHsgdGVhbVJhdGluZywgZ2FtbWEgfSA9IHV0aWwob3B0aW9ucylcbiAgY29uc3QgdGVhbVJhdGluZ3MgPSB0ZWFtUmF0aW5nKGdhbWUpXG4gIGNvbnN0IGFkamFjZW50VGVhbXMgPSBsYWRkZXJQYWlycyh0ZWFtUmF0aW5ncylcblxuICByZXR1cm4gemlwKHRlYW1SYXRpbmdzLCBhZGphY2VudFRlYW1zKS5tYXAoKFtpVGVhbVJhdGluZywgaUFkamFjZW50c10pID0+IHtcbiAgICBjb25zdCBbaU11LCBpU2lnbWFTcSwgaVRlYW0sIGlSYW5rXSA9IGlUZWFtUmF0aW5nXG4gICAgY29uc3QgW2lPbWVnYSwgaURlbHRhXSA9IGlBZGphY2VudHMucmVkdWNlKFxuICAgICAgKFtvbWVnYSwgZGVsdGFdLCBbcU11LCBxU2lnbWFTcSwgX3FUZWFtLCBxUmFua10pID0+IHtcbiAgICAgICAgY29uc3QgY2lxID0gMiAqIE1hdGguc3FydChpU2lnbWFTcSArIHFTaWdtYVNxICsgVFdPQkVUQVNRKVxuICAgICAgICBjb25zdCBkZWx0YU11ID0gKGlNdSAtIHFNdSkgLyBjaXFcbiAgICAgICAgY29uc3Qgc2lnU3FUb0NpcSA9IGlTaWdtYVNxIC8gY2lxXG4gICAgICAgIGNvbnN0IGlHYW1tYSA9IGdhbW1hKGNpcSwgdGVhbVJhdGluZ3MubGVuZ3RoLCAuLi5pVGVhbVJhdGluZylcblxuICAgICAgICBpZiAocVJhbmsgPT09IGlSYW5rKSB7XG4gICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIG9tZWdhICsgc2lnU3FUb0NpcSAqIHZ0KGRlbHRhTXUsIEVQU0lMT04gLyBjaXEpLFxuICAgICAgICAgICAgZGVsdGEgKyAoKGlHYW1tYSAqIHNpZ1NxVG9DaXEpIC8gY2lxKSAqIHd0KGRlbHRhTXUsIEVQU0lMT04gLyBjaXEpLFxuICAgICAgICAgIF1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHNpZ24gPSBxUmFuayA+IGlSYW5rID8gMSA6IC0xXG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgb21lZ2EgKyBzaWduICogc2lnU3FUb0NpcSAqIHYoc2lnbiAqIGRlbHRhTXUsIEVQU0lMT04gLyBjaXEpLFxuICAgICAgICAgIGRlbHRhICsgKChpR2FtbWEgKiBzaWdTcVRvQ2lxKSAvIGNpcSkgKiB3KHNpZ24gKiBkZWx0YU11LCBFUFNJTE9OIC8gY2lxKSxcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIFswLCAwXVxuICAgIClcblxuICAgIHJldHVybiBpVGVhbS5tYXAoKHsgbXUsIHNpZ21hIH0pID0+IHtcbiAgICAgIGNvbnN0IHNpZ21hU3EgPSBzaWdtYSAqIHNpZ21hXG4gICAgICByZXR1cm4ge1xuICAgICAgICBtdTogbXUgKyAoc2lnbWFTcSAvIGlTaWdtYVNxKSAqIGlPbWVnYSxcbiAgICAgICAgc2lnbWE6IHNpZ21hICogTWF0aC5zcXJ0KE1hdGgubWF4KDEgLSAoc2lnbWFTcSAvIGlTaWdtYVNxKSAqIGlEZWx0YSwgRVBTSUxPTikpLFxuICAgICAgfVxuICAgIH0pXG4gIH0pXG59XG5cbmV4cG9ydCBkZWZhdWx0IG1vZGVsXG4iXSwKICAibWFwcGluZ3MiOiAiO0FBQUEsU0FBUyxXQUFXOzs7QUNFcEIsSUFBTSxVQUFVLENBQUMsWUFBcUI7QUFFcEMsUUFBTSxFQUFF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LFFBQVEsUUFBUSxJQUFJO0FBQ2pDLGVBQU87QUFBQSxVQUNMLFFBQVEsT0FBTyxhQUFhLEVBQUUsT0FBTyxTQUFTLFVBQVUsR0FBRztBQUFBLFVBQzNELFFBQVUsU0FBUyxhQUFjLE1BQU8sRUFBRSxPQUFPLFNBQVMsVUFBVSxHQUFHO0FBQUEsUUFDekU7QUFBQSxNQUNGO0FBQUEsTUFDQSxDQUFDLEdBQUcsQ0FBQztBQUFBLElBQ1A7QUFFQSxXQUFPLE1BQU0sSUFBSSxDQUFDLEVBQUUsSUFBSSxNQUFNLE1BQU07QUFDbEMsWUFBTSxVQUFVLFFBQVE7QUFDeEIsYUFBTztBQUFBLFFBQ0wsSUFBSSxLQUFNLFVBQVUsV0FBWTtBQUFBLFFBQ2hDLE9BQU8sUUFBUSxLQUFLLEtBQUssS0FBSyxJQUFJLElBQUssVUFBVSxXQUFZLFFBQVEsT0FBTyxDQUFDO0FBQUEsTUFDL0U7QUFBQSxJQUNGLENBQUM7QUFBQSxFQUNILENBQUM7QUFDSDtBQUVBLElBQU8sbUNBQVFGOyIsCiAgIm5hbWVzIjogWyJ1dGlsQyIsICJ0ZWFtUmF0aW5nIiwgImdhbW1hIiwgIm1vZGVsIiwgInRlYW1SYXRpbmciLCAiZ2FtbWEiLCAiemlwIiwgIm1vZGVsIiwgInRlYW1SYXRpbmciLCAiZ2FtbWEiLCAiemlwIiwgIm1vZGVsIiwgInRlYW1SYXRpbmciLCAiZ2FtbWEiLCAiemlwIiwgIm1vZGVsIiwgInRlYW1SYXRpbmciLCAiZ2FtbWEiLCAiemlwIl0KfQo= |
@@ -1,3 +0,5 @@ | ||
import { Model } from '../types'; | ||
import { Model } from '../types.js'; | ||
declare const model: Model; | ||
export default model; | ||
export { model as default }; |
@@ -1,39 +0,95 @@ | ||
"use strict"; | ||
// src/util.ts | ||
import { zip } from "ramda"; | ||
Object.defineProperty(exports, "__esModule", { | ||
value: true | ||
// src/constants.ts | ||
var builder = (options) => { | ||
const { z = 3, mu = 25, preventSigmaIncrease = false, epsilon = 1e-4 } = options; | ||
const { tau = mu / 300, sigma = mu / z, beta = sigma / 2, limitSigma = preventSigmaIncrease } = options; | ||
const betaSq = beta ** 2; | ||
return { | ||
SIGMA: sigma, | ||
MU: mu, | ||
EPSILON: epsilon, | ||
TWOBETASQ: 2 * betaSq, | ||
BETA: beta, | ||
BETASQ: betaSq, | ||
Z: z, | ||
TAU: tau, | ||
LIMIT_SIGMA: limitSigma | ||
}; | ||
}; | ||
var constants_default = builder; | ||
// src/util.ts | ||
var sum = (a, b) => a + b; | ||
var rankings = (teams, rank = []) => { | ||
const teamScores = teams.map((_, i) => rank[i] || i); | ||
const outRank = new Array(teams.length); | ||
let s = 0; | ||
for (let j = 0; j < teamScores.length; j += 1) { | ||
if (j > 0 && teamScores[j - 1] < teamScores[j]) { | ||
s = j; | ||
} | ||
outRank[j] = s; | ||
} | ||
return outRank; | ||
}; | ||
var teamRating = (options) => (game) => { | ||
const rank = rankings(game, options.rank); | ||
return game.map((team, i) => [ | ||
// mu[i] | ||
team.map(({ mu }) => mu).reduce(sum, 0), | ||
// sigma^2[i] | ||
team.map(({ sigma }) => sigma * sigma).reduce(sum, 0), | ||
// (original team data) | ||
team, | ||
// rank[i] | ||
rank[i] | ||
]); | ||
}; | ||
var utilC = (options) => { | ||
const { BETASQ } = constants_default(options); | ||
return (teamRatings) => Math.sqrt(teamRatings.map(([_teamMu, teamSigmaSq, _team, _rank]) => teamSigmaSq + BETASQ).reduce(sum, 0)); | ||
}; | ||
var utilSumQ = (teamRatings, c) => teamRatings.map( | ||
([_qMu, _qSigmaSq, _qTeam, qRank]) => teamRatings.filter(([_iMu, _iSigmaSq, _iTeam, iRank]) => iRank >= qRank).map(([iMu, _iSigmaSq, _iTeam, _iRank]) => Math.exp(iMu / c)).reduce(sum, 0) | ||
); | ||
var utilA = (teamRatings) => teamRatings.map( | ||
([_iMu, _iSigmaSq, _iTeam, iRank]) => teamRatings.filter(([_qMu, _qSigmaSq, _qTeam, qRank]) => iRank === qRank).length | ||
); | ||
var gamma = (options) => { | ||
var _a; | ||
return (_a = options.gamma) != null ? _a : ( | ||
// default to iSigma / c | ||
(c, _k, _mu, sigmaSq, _team, _qRank) => Math.sqrt(sigmaSq) / c | ||
); | ||
}; | ||
var util_default = (options) => ({ | ||
utilC: utilC(options), | ||
teamRating: teamRating(options), | ||
gamma: gamma(options) | ||
}); | ||
exports.default = void 0; | ||
var _util = _interopRequireWildcard(require("../util")); | ||
var _constants = _interopRequireDefault(require("../constants")); | ||
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } | ||
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); } | ||
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; } | ||
const model = (game, options = {}) => { | ||
const { | ||
EPSILON | ||
} = (0, _constants.default)(options); | ||
const { | ||
utilC, | ||
teamRating, | ||
gamma | ||
} = (0, _util.default)(options); | ||
const teamRatings = teamRating(game); | ||
const c = utilC(teamRatings); | ||
const sumQ = (0, _util.utilSumQ)(teamRatings, c); | ||
const a = (0, _util.utilA)(teamRatings); | ||
// src/models/plackett-luce.ts | ||
var model = (game, options = {}) => { | ||
const { EPSILON } = constants_default(options); | ||
const { utilC: utilC2, teamRating: teamRating2, gamma: gamma2 } = util_default(options); | ||
const teamRatings = teamRating2(game); | ||
const c = utilC2(teamRatings); | ||
const sumQ = utilSumQ(teamRatings, c); | ||
const a = utilA(teamRatings); | ||
return teamRatings.map((iTeamRating, i) => { | ||
const [iMu, iSigmaSq, iTeam, iRank] = iTeamRating; | ||
const iMuOverCe = Math.exp(iMu / c); // tmp1 | ||
const [omegaSum, deltaSum] = teamRatings.filter(([_qMu, _qSigmaSq, _qTeam, qRank]) => qRank <= iRank).reduce(([omega, delta], [_], q) => { | ||
const quotient = iMuOverCe / sumQ[q]; | ||
return [omega + (i === q ? 1 - quotient : -quotient) / a[q], delta + quotient * (1 - quotient) / a[q]]; | ||
}, [0, 0]); | ||
const iGamma = gamma(c, teamRatings.length, ...iTeamRating); | ||
const iMuOverCe = Math.exp(iMu / c); | ||
const [omegaSum, deltaSum] = teamRatings.filter(([_qMu, _qSigmaSq, _qTeam, qRank]) => qRank <= iRank).reduce( | ||
([omega, delta], [_], q) => { | ||
const quotient = iMuOverCe / sumQ[q]; | ||
return [omega + (i === q ? 1 - quotient : -quotient) / a[q], delta + quotient * (1 - quotient) / a[q]]; | ||
}, | ||
[0, 0] | ||
); | ||
const iGamma = gamma2(c, teamRatings.length, ...iTeamRating); | ||
const iOmega = omegaSum * (iSigmaSq / c); | ||
const iDelta = iGamma * deltaSum * (iSigmaSq / c ** 2); | ||
return iTeam.map(({ | ||
mu, | ||
sigma | ||
}) => ({ | ||
return iTeam.map(({ mu, sigma }) => ({ | ||
mu: mu + sigma ** 2 / iSigmaSq * iOmega, | ||
@@ -44,3 +100,6 @@ sigma: sigma * Math.sqrt(Math.max(1 - sigma ** 2 / iSigmaSq * iDelta, EPSILON)) | ||
}; | ||
var _default = exports.default = model; | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfdXRpbCIsIl9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkIiwicmVxdWlyZSIsIl9jb25zdGFudHMiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiZSIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwiX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlIiwiV2Vha01hcCIsInIiLCJ0IiwiaGFzIiwiZ2V0IiwibiIsIl9fcHJvdG9fXyIsImEiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsInUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJpIiwic2V0IiwibW9kZWwiLCJnYW1lIiwib3B0aW9ucyIsIkVQU0lMT04iLCJjb25zdGFudHMiLCJ1dGlsQyIsInRlYW1SYXRpbmciLCJnYW1tYSIsInV0aWwiLCJ0ZWFtUmF0aW5ncyIsImMiLCJzdW1RIiwidXRpbFN1bVEiLCJ1dGlsQSIsIm1hcCIsImlUZWFtUmF0aW5nIiwiaU11IiwiaVNpZ21hU3EiLCJpVGVhbSIsImlSYW5rIiwiaU11T3ZlckNlIiwiTWF0aCIsImV4cCIsIm9tZWdhU3VtIiwiZGVsdGFTdW0iLCJmaWx0ZXIiLCJfcU11IiwiX3FTaWdtYVNxIiwiX3FUZWFtIiwicVJhbmsiLCJyZWR1Y2UiLCJvbWVnYSIsImRlbHRhIiwiXyIsInEiLCJxdW90aWVudCIsImlHYW1tYSIsImxlbmd0aCIsImlPbWVnYSIsImlEZWx0YSIsIm11Iiwic2lnbWEiLCJzcXJ0IiwibWF4IiwiX2RlZmF1bHQiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL21vZGVscy9wbGFja2V0dC1sdWNlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB1dGlsLCB7IHV0aWxTdW1RLCB1dGlsQSB9IGZyb20gJy4uL3V0aWwnXG5pbXBvcnQgY29uc3RhbnRzIGZyb20gJy4uL2NvbnN0YW50cydcbmltcG9ydCB7IFJhdGluZywgT3B0aW9ucywgTW9kZWwgfSBmcm9tICcuLi90eXBlcydcblxuY29uc3QgbW9kZWw6IE1vZGVsID0gKGdhbWU6IFJhdGluZ1tdW10sIG9wdGlvbnM6IE9wdGlvbnMgPSB7fSkgPT4ge1xuICBjb25zdCB7IEVQU0lMT04gfSA9IGNvbnN0YW50cyhvcHRpb25zKVxuICBjb25zdCB7IHV0aWxDLCB0ZWFtUmF0aW5nLCBnYW1tYSB9ID0gdXRpbChvcHRpb25zKVxuICBjb25zdCB0ZWFtUmF0aW5ncyA9IHRlYW1SYXRpbmcoZ2FtZSlcbiAgY29uc3QgYyA9IHV0aWxDKHRlYW1SYXRpbmdzKVxuICBjb25zdCBzdW1RID0gdXRpbFN1bVEodGVhbVJhdGluZ3MsIGMpXG4gIGNvbnN0IGEgPSB1dGlsQSh0ZWFtUmF0aW5ncylcblxuICByZXR1cm4gdGVhbVJhdGluZ3MubWFwKChpVGVhbVJhdGluZywgaSkgPT4ge1xuICAgIGNvbnN0IFtpTXUsIGlTaWdtYVNxLCBpVGVhbSwgaVJhbmtdID0gaVRlYW1SYXRpbmdcbiAgICBjb25zdCBpTXVPdmVyQ2UgPSBNYXRoLmV4cChpTXUgLyBjKSAvLyB0bXAxXG4gICAgY29uc3QgW29tZWdhU3VtLCBkZWx0YVN1bV0gPSB0ZWFtUmF0aW5nc1xuICAgICAgLmZpbHRlcigoW19xTXUsIF9xU2lnbWFTcSwgX3FUZWFtLCBxUmFua10pID0+IHFSYW5rIDw9IGlSYW5rKVxuICAgICAgLnJlZHVjZShcbiAgICAgICAgKFtvbWVnYSwgZGVsdGFdLCBbX10sIHEpID0+IHtcbiAgICAgICAgICBjb25zdCBxdW90aWVudCA9IGlNdU92ZXJDZSAvIHN1bVFbcV1cbiAgICAgICAgICByZXR1cm4gW29tZWdhICsgKGkgPT09IHEgPyAxIC0gcXVvdGllbnQgOiAtcXVvdGllbnQpIC8gYVtxXSwgZGVsdGEgKyAocXVvdGllbnQgKiAoMSAtIHF1b3RpZW50KSkgLyBhW3FdXVxuICAgICAgICB9LFxuICAgICAgICBbMCwgMF1cbiAgICAgIClcblxuICAgIGNvbnN0IGlHYW1tYSA9IGdhbW1hKGMsIHRlYW1SYXRpbmdzLmxlbmd0aCwgLi4uaVRlYW1SYXRpbmcpXG4gICAgY29uc3QgaU9tZWdhID0gb21lZ2FTdW0gKiAoaVNpZ21hU3EgLyBjKVxuICAgIGNvbnN0IGlEZWx0YSA9IGlHYW1tYSAqIGRlbHRhU3VtICogKGlTaWdtYVNxIC8gYyAqKiAyKVxuXG4gICAgcmV0dXJuIGlUZWFtLm1hcCgoeyBtdSwgc2lnbWEgfSkgPT4gKHtcbiAgICAgIG11OiBtdSArIChzaWdtYSAqKiAyIC8gaVNpZ21hU3EpICogaU9tZWdhLFxuICAgICAgc2lnbWE6IHNpZ21hICogTWF0aC5zcXJ0KE1hdGgubWF4KDEgLSAoc2lnbWEgKiogMiAvIGlTaWdtYVNxKSAqIGlEZWx0YSwgRVBTSUxPTikpLFxuICAgIH0pKVxuICB9KVxufVxuXG5leHBvcnQgZGVmYXVsdCBtb2RlbFxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxJQUFBQSxLQUFBLEdBQUFDLHVCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxVQUFBLEdBQUFDLHNCQUFBLENBQUFGLE9BQUE7QUFBb0MsU0FBQUUsdUJBQUFDLENBQUEsV0FBQUEsQ0FBQSxJQUFBQSxDQUFBLENBQUFDLFVBQUEsR0FBQUQsQ0FBQSxLQUFBRSxPQUFBLEVBQUFGLENBQUE7QUFBQSxTQUFBRyx5QkFBQUgsQ0FBQSw2QkFBQUksT0FBQSxtQkFBQUMsQ0FBQSxPQUFBRCxPQUFBLElBQUFFLENBQUEsT0FBQUYsT0FBQSxZQUFBRCx3QkFBQSxZQUFBQSxDQUFBSCxDQUFBLFdBQUFBLENBQUEsR0FBQU0sQ0FBQSxHQUFBRCxDQUFBLEtBQUFMLENBQUE7QUFBQSxTQUFBSix3QkFBQUksQ0FBQSxFQUFBSyxDQUFBLFNBQUFBLENBQUEsSUFBQUwsQ0FBQSxJQUFBQSxDQUFBLENBQUFDLFVBQUEsU0FBQUQsQ0FBQSxlQUFBQSxDQUFBLHVCQUFBQSxDQUFBLHlCQUFBQSxDQUFBLFdBQUFFLE9BQUEsRUFBQUYsQ0FBQSxRQUFBTSxDQUFBLEdBQUFILHdCQUFBLENBQUFFLENBQUEsT0FBQUMsQ0FBQSxJQUFBQSxDQUFBLENBQUFDLEdBQUEsQ0FB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 | ||
var plackett_luce_default = model; | ||
export { | ||
plackett_luce_default as default | ||
}; | ||
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL3V0aWwudHMiLCAiLi4vLi4vc3JjL2NvbnN0YW50cy50cyIsICIuLi8uLi9zcmMvbW9kZWxzL3BsYWNrZXR0LWx1Y2UudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7IHppcCB9IGZyb20gJ3JhbWRhJ1xuaW1wb3J0IGNvbnN0YW50cyBmcm9tICcuL2NvbnN0YW50cydcbmltcG9ydCB7IFJhdGluZywgT3B0aW9ucywgR2FtbWEsIFRlYW0sIFJhbmsgfSBmcm9tICcuL3R5cGVzJ1xuXG5leHBvcnQgdHlwZSBUZWFtTXUgPSBudW1iZXJcblxuZXhwb3J0IHR5cGUgVGVhbVNpZ21hU3EgPSBudW1iZXJcblxuZXhwb3J0IHR5cGUgVGVhbVJhdGluZyA9IFtUZWFtTXUsIFRlYW1TaWdtYVNxLCBUZWFtLCBSYW5rXVxuXG5leHBvcnQgY29uc3Qgc3VtID0gKGE6IG51bWJlciwgYjogbnVtYmVyKSA9PiBhICsgYlxuXG5leHBvcnQgY29uc3Qgc2NvcmUgPSAocTogbnVtYmVyLCBpOiBudW1iZXIpID0+IHtcbiAgaWYgKHEgPCBpKSB7XG4gICAgcmV0dXJuIDAuMFxuICB9XG4gIGlmIChxID4gaSkge1xuICAgIHJldHVybiAxLjBcbiAgfVxuICAvLyBxID09PSBpXG4gIHJldHVybiAwLjVcbn1cblxuZXhwb3J0IGNvbnN0IHJhbmtpbmdzID0gKHRlYW1zOiBUZWFtW10sIHJhbms6IG51bWJlcltdID0gW10pID0+IHtcbiAgY29uc3QgdGVhbVNjb3JlcyA9IHRlYW1zLm1hcCgoXywgaSkgPT4gcmFua1tpXSB8fCBpKVxuICBjb25zdCBvdXRSYW5rID0gbmV3IEFycmF5KHRlYW1zLmxlbmd0aClcblxuICBsZXQgcyA9IDBcbiAgZm9yIChsZXQgaiA9IDA7IGogPCB0ZWFtU2NvcmVzLmxlbmd0aDsgaiArPSAxKSB7XG4gICAgaWYgKGogPiAwICYmIHRlYW1TY29yZXNbaiAtIDFdIDwgdGVhbVNjb3Jlc1tqXSkge1xuICAgICAgcyA9IGpcbiAgICB9XG4gICAgb3V0UmFua1tqXSA9IHNcbiAgfVxuICByZXR1cm4gb3V0UmFua1xufVxuXG4vLyB0aGlzIGlzIGJhc2ljYWxseSBzaGFyZWQgY29kZSwgcHJlY29tcHV0ZWQgZm9yIGV2ZXJ5IG1vZGVsXG5jb25zdCB0ZWFtUmF0aW5nID1cbiAgKG9wdGlvbnM6IE9wdGlvbnMpID0+XG4gIChnYW1lOiBUZWFtW10pOiBUZWFtUmF0aW5nW10gPT4ge1xuICAgIGNvbnN0IHJhbmsgPSByYW5raW5ncyhnYW1lLCBvcHRpb25zLnJhbmspXG4gICAgcmV0dXJuIGdhbWUubWFwKCh0ZWFtLCBpKSA9PiBbXG4gICAgICAvLyBtdVtpXVxuICAgICAgdGVhbS5tYXAoKHsgbXUgfSkgPT4gbXUpLnJlZHVjZShzdW0sIDApLFxuICAgICAgLy8gc2lnbWFeMltpXVxuICAgICAgdGVhbS5tYXAoKHsgc2lnbWEgfSkgPT4gc2lnbWEgKiBzaWdtYSkucmVkdWNlKHN1bSwgMCksXG4gICAgICAvLyAob3JpZ2luYWwgdGVhbSBkYXRhKVxuICAgICAgdGVhbSxcbiAgICAgIC8vIHJhbmtbaV1cbiAgICAgIHJhbmtbaV0sXG4gICAgXSlcbiAgfVxuXG5leHBvcnQgY29uc3QgbGFkZGVyUGFpcnMgPSA8VD4ocmFua3M6IFRbXSk6IFRbXVtdID0+IHtcbiAgY29uc3Qgc2l6ZSA9IHJhbmtzLmxlbmd0aFxuICBjb25zdCBsZWZ0ID0gW3VuZGVmaW5lZCwgLi4ucmFua3Muc2xpY2UoMCwgc2l6ZSAtIDEpXVxuICBjb25zdCByaWdodCA9IFsuLi5yYW5rcy5zbGljZSgxKSwgdW5kZWZpbmVkXVxuICByZXR1cm4gemlwKGxlZnQsIHJpZ2h0KS5tYXAoKFtsLCByXSkgPT4ge1xuICAgIGlmIChsICE9PSB1bmRlZmluZWQgJiYgciAhPT0gdW5kZWZpbmVkKSByZXR1cm4gW2wsIHJdXG4gICAgaWYgKGwgIT09IHVuZGVmaW5lZCAmJiByID09PSB1bmRlZmluZWQpIHJldHVybiBbbF1cbiAgICBpZiAobCA9PT0gdW5kZWZpbmVkICYmIHIgIT09IHVuZGVmaW5lZCkgcmV0dXJuIFtyXVxuICAgIHJldHVybiBbXSAvLyB0aGlzIHNob3VsZCByZWFsbHkgb25seSBoYXBwZW4gd2hlbiBzaXplID09PSAxXG4gIH0pXG59XG5cbmNvbnN0IHV0aWxDID0gKG9wdGlvbnM6IE9wdGlvbnMpID0+IHtcbiAgY29uc3QgeyBCRVRBU1EgfSA9IGNvbnN0YW50cyhvcHRpb25zKVxuICByZXR1cm4gKHRlYW1SYXRpbmdzOiBUZWFtUmF0aW5nW10pID0+XG4gICAgTWF0aC5zcXJ0KHRlYW1SYXRpbmdzLm1hcCgoW190ZWFtTXUsIHRlYW1TaWdtYVNxLCBfdGVhbSwgX3JhbmtdKSA9PiB0ZWFtU2lnbWFTcSArIEJFVEFTUSkucmVkdWNlKHN1bSwgMCkpXG59XG5cbmV4cG9ydCBjb25zdCB1dGlsU3VtUSA9ICh0ZWFtUmF0aW5nczogVGVhbVJhdGluZ1tdLCBjOiBudW1iZXIpID0+XG4gIHRlYW1SYXRpbmdzLm1hcCgoW19xTXUsIF9xU2lnbWFTcSwgX3FUZWFtLCBxUmFua10pID0+XG4gICAgdGVhbVJhdGluZ3NcbiAgICAgIC5maWx0ZXIoKFtfaU11LCBfaVNpZ21hU3EsIF9pVGVhbSwgaVJhbmtdKSA9PiBpUmFuayA+PSBxUmFuaylcbiAgICAgIC5tYXAoKFtpTXUsIF9pU2lnbWFTcSwgX2lUZWFtLCBfaVJhbmtdKSA9PiBNYXRoLmV4cChpTXUgLyBjKSlcbiAgICAgIC5yZWR1Y2Uoc3VtLCAwKVxuICApXG5cbmV4cG9ydCBjb25zdCB1dGlsQSA9ICh0ZWFtUmF0aW5nczogVGVhbVJhdGluZ1tdKSA9PlxuICB0ZWFtUmF0aW5ncy5tYXAoXG4gICAgKFtfaU11LCBfaVNpZ21hU3EsIF9pVGVhbSwgaVJhbmtdKSA9PlxuICAgICAgdGVhbVJhdGluZ3MuZmlsdGVyKChbX3FNdSwgX3FTaWdtYVNxLCBfcVRlYW0sIHFSYW5rXSkgPT4gaVJhbmsgPT09IHFSYW5rKS5sZW5ndGhcbiAgKVxuXG5leHBvcnQgY29uc3QgZ2FtbWEgPSAob3B0aW9uczogT3B0aW9ucyk6IEdhbW1hID0+XG4gIG9wdGlvbnMuZ2FtbWEgPz9cbiAgLy8gZGVmYXVsdCB0byBpU2lnbWEgLyBjXG4gICgoYzogbnVtYmVyLCBfazogbnVtYmVyLCBfbXU6IG51bWJlciwgc2lnbWFTcTogbnVtYmVyLCBfdGVhbTogUmF0aW5nW10sIF9xUmFuazogbnVtYmVyKSA9PiBNYXRoLnNxcnQoc2lnbWFTcSkgLyBjKVxuXG5leHBvcnQgZGVmYXVsdCAob3B0aW9uczogT3B0aW9ucykgPT4gKHtcbiAgdXRpbEM6IHV0aWxDKG9wdGlvbnMpLFxuICB0ZWFtUmF0aW5nOiB0ZWFtUmF0aW5nKG9wdGlvbnMpLFxuICBnYW1tYTogZ2FtbWEob3B0aW9ucyksXG59KVxuIiwgImltcG9ydCB7IE9wdGlvbnMgfSBmcm9tICcuL3R5cGVzJ1xuXG5jb25zdCBidWlsZGVyID0gKG9wdGlvbnM6IE9wdGlvbnMpID0+IHtcbiAgLy8gaSdkIGxvdmUgdG8ga25vdyBvZiBhIGJldHRlciB3YXkgdG8gZG8gdGhpc1xuICBjb25zdCB7IHogPSAzLCBtdSA9IDI1LCBwcmV2ZW50U2lnbWFJbmNyZWFzZSA9IGZhbHNlLCBlcHNpbG9uID0gMC4wMDAxIH0gPSBvcHRpb25zXG4gIGNvbnN0IHsgdGF1ID0gbXUgLyAzMDAsIHNpZ21hID0gbXUgLyB6LCBiZXRhID0gc2lnbWEgLyAyLCBsaW1pdFNpZ21hID0gcHJldmVudFNpZ21hSW5jcmVhc2UgfSA9IG9wdGlvbnNcbiAgY29uc3QgYmV0YVNxID0gYmV0YSAqKiAyXG5cbiAgcmV0dXJuIHtcbiAgICBTSUdNQTogc2lnbWEsXG4gICAgTVU6IG11LFxuICAgIEVQU0lMT046IGVwc2lsb24sXG4gICAgVFdPQkVUQVNROiAyICogYmV0YVNxLFxuICAgIEJFVEE6IGJldGEsXG4gICAgQkVUQVNROiBiZXRhU3EsXG4gICAgWjogeixcbiAgICBUQVU6IHRhdSxcbiAgICBMSU1JVF9TSUdNQTogbGltaXRTaWdtYSxcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBidWlsZGVyXG4iLCAiaW1wb3J0IHV0aWwsIHsgdXRpbFN1bVEsIHV0aWxBIH0gZnJvbSAnLi4vdXRpbCdcbmltcG9ydCBjb25zdGFudHMgZnJvbSAnLi4vY29uc3RhbnRzJ1xuaW1wb3J0IHsgUmF0aW5nLCBPcHRpb25zLCBNb2RlbCB9IGZyb20gJy4uL3R5cGVzJ1xuXG5jb25zdCBtb2RlbDogTW9kZWwgPSAoZ2FtZTogUmF0aW5nW11bXSwgb3B0aW9uczogT3B0aW9ucyA9IHt9KSA9PiB7XG4gIGNvbnN0IHsgRVBTSUxPTiB9ID0gY29uc3RhbnRzKG9wdGlvbnMpXG4gIGNvbnN0IHsgdXRpbEMsIHRlYW1SYXRpbmcsIGdhbW1hIH0gPSB1dGlsKG9wdGlvbnMpXG4gIGNvbnN0IHRlYW1SYXRpbmdzID0gdGVhbVJhdGluZyhnYW1lKVxuICBjb25zdCBjID0gdXRpbEModGVhbVJhdGluZ3MpXG4gIGNvbnN0IHN1bVEgPSB1dGlsU3VtUSh0ZWFtUmF0aW5ncywgYylcbiAgY29uc3QgYSA9IHV0aWxBKHRlYW1SYXRpbmdzKVxuXG4gIHJldHVybiB0ZWFtUmF0aW5ncy5tYXAoKGlUZWFtUmF0aW5nLCBpKSA9PiB7XG4gICAgY29uc3QgW2lNdSwgaVNpZ21hU3EsIGlUZWFtLCBpUmFua10gPSBpVGVhbVJhdGluZ1xuICAgIGNvbnN0IGlNdU92ZXJDZSA9IE1hdGguZXhwKGlNdSAvIGMpIC8vIHRtcDFcbiAgICBjb25zdCBbb21lZ2FTdW0sIGRlbHRhU3VtXSA9IHRlYW1SYXRpbmdzXG4gICAgICAuZmlsdGVyKChbX3FNdSwgX3FTaWdtYVNxLCBfcVRlYW0sIHFSYW5rXSkgPT4gcVJhbmsgPD0gaVJhbmspXG4gICAgICAucmVkdWNlKFxuICAgICAgICAoW29tZWdhLCBkZWx0YV0sIFtfXSwgcSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHF1b3RpZW50ID0gaU11T3ZlckNlIC8gc3VtUVtxXVxuICAgICAgICAgIHJldHVybiBbb21lZ2EgKyAoaSA9PT0gcSA/IDEgLSBxdW90aWVudCA6IC1xdW90aWVudCkgLyBhW3FdLCBkZWx0YSArIChxdW90aWVudCAqICgxIC0gcXVvdGllbnQpKSAvIGFbcV1dXG4gICAgICAgIH0sXG4gICAgICAgIFswLCAwXVxuICAgICAgKVxuXG4gICAgY29uc3QgaUdhbW1hID0gZ2FtbWEoYywgdGVhbVJhdGluZ3MubGVuZ3RoLCAuLi5pVGVhbVJhdGluZylcbiAgICBjb25zdCBpT21lZ2EgPSBvbWVnYVN1bSAqIChpU2lnbWFTcSAvIGMpXG4gICAgY29uc3QgaURlbHRhID0gaUdhbW1hICogZGVsdGFTdW0gKiAoaVNpZ21hU3EgLyBjICoqIDIpXG5cbiAgICByZXR1cm4gaVRlYW0ubWFwKCh7IG11LCBzaWdtYSB9KSA9PiAoe1xuICAgICAgbXU6IG11ICsgKHNpZ21hICoqIDIgLyBpU2lnbWFTcSkgKiBpT21lZ2EsXG4gICAgICBzaWdtYTogc2lnbWEgKiBNYXRoLnNxcnQoTWF0aC5tYXgoMSAtIChzaWdtYSAqKiAyIC8gaVNpZ21hU3EpICogaURlbHRhLCBFUFNJTE9OKSksXG4gICAgfSkpXG4gIH0pXG59XG5cbmV4cG9ydCBkZWZhdWx0IG1vZGVsXG4iXSwKICAibWFwcGluZ3MiOiAiO0FBQUEsU0FBUyxXQUFXOzs7QUNFcEIsSUFBTSxVQUFVLENBQUMsWUFBcUI7QUFFcEMsUUFBTSxFQUFFLElBQUksR0FBRyxLQUFLLElBQUksdUJBQXVCLE9BQU8sVUFBVSxLQUFPLElBQUk7QUFDM0UsUUFBTSxFQUFFLE1BQU0sS0FBSyxLQUFLLFFBQVEsS0FBSyxHQUFHLE9BQU8sUUFBUSxHQUFHLGFBQWEscUJBQXFCLElBQUk7QUFDaEcsUUFBTSxTQUFTLFFBQVE7QUFFdkIsU0FBTztBQUFBLElBQ0wsT0FBTztBQUFBLElBQ1AsSUFBSTtBQUFBLElBQ0osU0FBUztBQUFBLElBQ1QsV0FBVyxJQUFJO0FBQUEsSUFDZixNQUFNO0FBQUEsSUFDTixRQUFRO0FBQUEsSUFDUixHQUFHO0FBQUEsSUFDSCxLQUFLO0FBQUEsSUFDTCxhQUFhO0FBQUEsRUFDZjtBQUNGO0FBRUEsSUFBTyxvQkFBUTs7O0FEWFIsSUFB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 |
@@ -1,3 +0,5 @@ | ||
import { Model } from '../types'; | ||
import { Model } from '../types.js'; | ||
declare const model: Model; | ||
export default model; | ||
export { model as default }; |
@@ -1,38 +0,129 @@ | ||
"use strict"; | ||
// src/util.ts | ||
import { zip } from "ramda"; | ||
Object.defineProperty(exports, "__esModule", { | ||
value: true | ||
// src/constants.ts | ||
var builder = (options) => { | ||
const { z = 3, mu = 25, preventSigmaIncrease = false, epsilon = 1e-4 } = options; | ||
const { tau = mu / 300, sigma = mu / z, beta = sigma / 2, limitSigma = preventSigmaIncrease } = options; | ||
const betaSq = beta ** 2; | ||
return { | ||
SIGMA: sigma, | ||
MU: mu, | ||
EPSILON: epsilon, | ||
TWOBETASQ: 2 * betaSq, | ||
BETA: beta, | ||
BETASQ: betaSq, | ||
Z: z, | ||
TAU: tau, | ||
LIMIT_SIGMA: limitSigma | ||
}; | ||
}; | ||
var constants_default = builder; | ||
// src/util.ts | ||
var sum = (a, b) => a + b; | ||
var rankings = (teams, rank = []) => { | ||
const teamScores = teams.map((_, i) => rank[i] || i); | ||
const outRank = new Array(teams.length); | ||
let s = 0; | ||
for (let j = 0; j < teamScores.length; j += 1) { | ||
if (j > 0 && teamScores[j - 1] < teamScores[j]) { | ||
s = j; | ||
} | ||
outRank[j] = s; | ||
} | ||
return outRank; | ||
}; | ||
var teamRating = (options) => (game) => { | ||
const rank = rankings(game, options.rank); | ||
return game.map((team, i) => [ | ||
// mu[i] | ||
team.map(({ mu }) => mu).reduce(sum, 0), | ||
// sigma^2[i] | ||
team.map(({ sigma }) => sigma * sigma).reduce(sum, 0), | ||
// (original team data) | ||
team, | ||
// rank[i] | ||
rank[i] | ||
]); | ||
}; | ||
var utilC = (options) => { | ||
const { BETASQ } = constants_default(options); | ||
return (teamRatings) => Math.sqrt(teamRatings.map(([_teamMu, teamSigmaSq, _team, _rank]) => teamSigmaSq + BETASQ).reduce(sum, 0)); | ||
}; | ||
var gamma = (options) => { | ||
var _a; | ||
return (_a = options.gamma) != null ? _a : ( | ||
// default to iSigma / c | ||
(c, _k, _mu, sigmaSq, _team, _qRank) => Math.sqrt(sigmaSq) / c | ||
); | ||
}; | ||
var util_default = (options) => ({ | ||
utilC: utilC(options), | ||
teamRating: teamRating(options), | ||
gamma: gamma(options) | ||
}); | ||
exports.default = void 0; | ||
var _util = _interopRequireDefault(require("../util")); | ||
var _constants = _interopRequireDefault(require("../constants")); | ||
var _statistics = require("../statistics"); | ||
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } | ||
const model = (game, options = {}) => { | ||
const { | ||
TWOBETASQ, | ||
EPSILON | ||
} = (0, _constants.default)(options); | ||
const { | ||
teamRating, | ||
gamma | ||
} = (0, _util.default)(options); | ||
const teamRatings = teamRating(game); | ||
// src/statistics.ts | ||
import gaussian from "gaussian"; | ||
var normal = gaussian(0, 1); | ||
var phiMajor = (x) => normal.cdf(x); | ||
var phiMinor = (x) => normal.pdf(x); | ||
var v = (x, t) => { | ||
const xt = x - t; | ||
const denom = phiMajor(xt); | ||
return denom < Number.EPSILON ? -xt : phiMinor(xt) / denom; | ||
}; | ||
var w = (x, t) => { | ||
const xt = x - t; | ||
const denom = phiMajor(xt); | ||
if (denom < Number.EPSILON) { | ||
return x < 0 ? 1 : 0; | ||
} | ||
return v(x, t) * (v(x, t) + xt); | ||
}; | ||
var vt = (x, t) => { | ||
const xx = Math.abs(x); | ||
const b = phiMajor(t - xx) - phiMajor(-t - xx); | ||
if (b < 1e-5) { | ||
if (x < 0) return -x - t; | ||
return -x + t; | ||
} | ||
const a = phiMinor(-t - xx) - phiMinor(t - xx); | ||
return (x < 0 ? -a : a) / b; | ||
}; | ||
var wt = (x, t) => { | ||
const xx = Math.abs(x); | ||
const b = phiMajor(t - xx) - phiMajor(-t - xx); | ||
return b < Number.EPSILON ? 1 : ((t - xx) * phiMinor(t - xx) + (t + xx) * phiMinor(-t - xx)) / b + vt(x, t) * vt(x, t); | ||
}; | ||
// src/models/thurstone-mosteller-full.ts | ||
var model = (game, options = {}) => { | ||
const { TWOBETASQ, EPSILON } = constants_default(options); | ||
const { teamRating: teamRating2, gamma: gamma2 } = util_default(options); | ||
const teamRatings = teamRating2(game); | ||
return teamRatings.map((iTeamRating, i) => { | ||
const [iMu, iSigmaSq, iTeam, iRank] = iTeamRating; | ||
const [iOmega, iDelta] = teamRatings.filter((_, q) => i !== q).reduce(([omega, delta], [qMu, qSigmaSq, _qTeam, qRank]) => { | ||
const ciq = Math.sqrt(iSigmaSq + qSigmaSq + TWOBETASQ); | ||
const deltaMu = (iMu - qMu) / ciq; | ||
const sigSqToCiq = iSigmaSq / ciq; | ||
const iGamma = gamma(ciq, teamRatings.length, ...iTeamRating); | ||
if (qRank === iRank) { | ||
return [omega + sigSqToCiq * (0, _statistics.vt)(deltaMu, EPSILON / ciq), delta + iGamma * sigSqToCiq / ciq * (0, _statistics.wt)(deltaMu, EPSILON / ciq)]; | ||
} | ||
const sign = qRank > iRank ? 1 : -1; | ||
return [omega + sign * sigSqToCiq * (0, _statistics.v)(sign * deltaMu, EPSILON / ciq), delta + iGamma * sigSqToCiq / ciq * (0, _statistics.w)(sign * deltaMu, EPSILON / ciq)]; | ||
}, [0, 0]); | ||
return iTeam.map(({ | ||
mu, | ||
sigma | ||
}) => { | ||
const [iOmega, iDelta] = teamRatings.filter((_, q) => i !== q).reduce( | ||
([omega, delta], [qMu, qSigmaSq, _qTeam, qRank]) => { | ||
const ciq = Math.sqrt(iSigmaSq + qSigmaSq + TWOBETASQ); | ||
const deltaMu = (iMu - qMu) / ciq; | ||
const sigSqToCiq = iSigmaSq / ciq; | ||
const iGamma = gamma2(ciq, teamRatings.length, ...iTeamRating); | ||
if (qRank === iRank) { | ||
return [ | ||
omega + sigSqToCiq * vt(deltaMu, EPSILON / ciq), | ||
delta + iGamma * sigSqToCiq / ciq * wt(deltaMu, EPSILON / ciq) | ||
]; | ||
} | ||
const sign = qRank > iRank ? 1 : -1; | ||
return [ | ||
omega + sign * sigSqToCiq * v(sign * deltaMu, EPSILON / ciq), | ||
delta + iGamma * sigSqToCiq / ciq * w(sign * deltaMu, EPSILON / ciq) | ||
]; | ||
}, | ||
[0, 0] | ||
); | ||
return iTeam.map(({ mu, sigma }) => { | ||
const sigmaSq = sigma * sigma; | ||
@@ -46,3 +137,6 @@ return { | ||
}; | ||
var _default = exports.default = model; | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfdXRpbCIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX2NvbnN0YW50cyIsIl9zdGF0aXN0aWNzIiwiZSIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwibW9kZWwiLCJnYW1lIiwib3B0aW9ucyIsIlRXT0JFVEFTUSIsIkVQU0lMT04iLCJjb25zdGFudHMiLCJ0ZWFtUmF0aW5nIiwiZ2FtbWEiLCJ1dGlsIiwidGVhbVJhdGluZ3MiLCJtYXAiLCJpVGVhbVJhdGluZyIsImkiLCJpTXUiLCJpU2lnbWFTcSIsImlUZWFtIiwiaVJhbmsiLCJpT21lZ2EiLCJpRGVsdGEiLCJmaWx0ZXIiLCJfIiwicSIsInJlZHVjZSIsIm9tZWdhIiwiZGVsdGEiLCJxTXUiLCJxU2lnbWFTcSIsIl9xVGVhbSIsInFSYW5rIiwiY2lxIiwiTWF0aCIsInNxcnQiLCJkZWx0YU11Iiwic2lnU3FUb0NpcSIsImlHYW1tYSIsImxlbmd0aCIsInZ0Iiwid3QiLCJzaWduIiwidiIsInciLCJtdSIsInNpZ21hIiwic2lnbWFTcSIsIm1heCIsIl9kZWZhdWx0IiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tb2RlbHMvdGh1cnN0b25lLW1vc3RlbGxlci1mdWxsLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB1dGlsIGZyb20gJy4uL3V0aWwnXG5pbXBvcnQgY29uc3RhbnRzIGZyb20gJy4uL2NvbnN0YW50cydcbmltcG9ydCB7IHcsIHYsIHZ0LCB3dCB9IGZyb20gJy4uL3N0YXRpc3RpY3MnXG5pbXBvcnQgeyBSYXRpbmcsIE9wdGlvbnMsIE1vZGVsIH0gZnJvbSAnLi4vdHlwZXMnXG5cbmNvbnN0IG1vZGVsOiBNb2RlbCA9IChnYW1lOiBSYXRpbmdbXVtdLCBvcHRpb25zOiBPcHRpb25zID0ge30pID0+IHtcbiAgY29uc3QgeyBUV09CRVRBU1EsIEVQU0lMT04gfSA9IGNvbnN0YW50cyhvcHRpb25zKVxuICBjb25zdCB7IHRlYW1SYXRpbmcsIGdhbW1hIH0gPSB1dGlsKG9wdGlvbnMpXG4gIGNvbnN0IHRlYW1SYXRpbmdzID0gdGVhbVJhdGluZyhnYW1lKVxuXG4gIHJldHVybiB0ZWFtUmF0aW5ncy5tYXAoKGlUZWFtUmF0aW5nLCBpKSA9PiB7XG4gICAgY29uc3QgW2lNdSwgaVNpZ21hU3EsIGlUZWFtLCBpUmFua10gPSBpVGVhbVJhdGluZ1xuICAgIGNvbnN0IFtpT21lZ2EsIGlEZWx0YV0gPSB0ZWFtUmF0aW5nc1xuICAgICAgLmZpbHRlcigoXywgcSkgPT4gaSAhPT0gcSlcbiAgICAgIC5yZWR1Y2UoXG4gICAgICAgIChbb21lZ2EsIGRlbHRhXSwgW3FNdSwgcVNpZ21hU3EsIF9xVGVhbSwgcVJhbmtdKSA9PiB7XG4gICAgICAgICAgY29uc3QgY2lxID0gTWF0aC5zcXJ0KGlTaWdtYVNxICsgcVNpZ21hU3EgKyBUV09CRVRBU1EpXG4gICAgICAgICAgY29uc3QgZGVsdGFNdSA9IChpTXUgLSBxTXUpIC8gY2lxXG4gICAgICAgICAgY29uc3Qgc2lnU3FUb0NpcSA9IGlTaWdtYVNxIC8gY2lxXG4gICAgICAgICAgY29uc3QgaUdhbW1hID0gZ2FtbWEoY2lxLCB0ZWFtUmF0aW5ncy5sZW5ndGgsIC4uLmlUZWFtUmF0aW5nKVxuXG4gICAgICAgICAgaWYgKHFSYW5rID09PSBpUmFuaykge1xuICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgb21lZ2EgKyBzaWdTcVRvQ2lxICogdnQoZGVsdGFNdSwgRVBTSUxPTiAvIGNpcSksXG4gICAgICAgICAgICAgIGRlbHRhICsgKChpR2FtbWEgKiBzaWdTcVRvQ2lxKSAvIGNpcSkgKiB3dChkZWx0YU11LCBFUFNJTE9OIC8gY2lxKSxcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBzaWduID0gcVJhbmsgPiBpUmFuayA/IDEgOiAtMVxuICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBvbWVnYSArIHNpZ24gKiBzaWdTcVRvQ2lxICogdihzaWduICogZGVsdGFNdSwgRVBTSUxPTiAvIGNpcSksXG4gICAgICAgICAgICBkZWx0YSArICgoaUdhbW1hICogc2lnU3FUb0NpcSkgLyBjaXEpICogdyhzaWduICogZGVsdGFNdSwgRVBTSUxPTiAvIGNpcSksXG4gICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICBbMCwgMF1cbiAgICAgIClcblxuICAgIHJldHVybiBpVGVhbS5tYXAoKHsgbXUsIHNpZ21hIH0pID0+IHtcbiAgICAgIGNvbnN0IHNpZ21hU3EgPSBzaWdtYSAqIHNpZ21hXG4gICAgICByZXR1cm4ge1xuICAgICAgICBtdTogbXUgKyAoc2lnbWFTcSAvIGlTaWdtYVNxKSAqIGlPbWVnYSxcbiAgICAgICAgc2lnbWE6IHNpZ21hICogTWF0aC5zcXJ0KE1hdGgubWF4KDEgLSAoc2lnbWFTcSAvIGlTaWdtYVNxKSAqIGlEZWx0YSwgRVBTSUxPTikpLFxuICAgICAgfVxuICAgIH0pXG4gIH0pXG59XG5cbmV4cG9ydCBkZWZhdWx0IG1vZGVsXG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLElBQUFBLEtBQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLFVBQUEsR0FBQUYsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFFLFdBQUEsR0FBQUYsT0FBQTtBQUE0QyxTQUFBRCx1QkFBQUksQ0FBQSxXQUFBQSxDQUFBLElBQUFBLENBQUEsQ0FBQUMsVUFBQSxHQUFBRCxDQUFBLEtBQUFFLE9BQUEsRUFBQUYsQ0FBQTtBQUc1QyxNQUFNRyxLQUFZLEdBQUdBLENBQUNDLElBQWdCLEVBQUVDLE9BQWdCLEdBQUcsQ0FBQyxDQUFDLEtBQUs7RUFDaEUsTUFBTTtJQUFFQyxTQUFTO0lBQUVDO0VBQVEsQ0FBQyxHQUFHLElBQUFDLGtCQUFTLEVBQUNILE9BQU8sQ0FBQztFQUNqRCxNQUFNO0lBQUVJLFVBQVU7SUFBRUM7RUFBTSxDQUFDLEdBQUcsSUFBQUMsYUFBSSxFQUFDTixPQUFPLENBQUM7RUFDM0MsTUFBTU8sV0FBVyxHQUFHSCxVQUFV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 | ||
var thurstone_mosteller_full_default = model; | ||
export { | ||
thurstone_mosteller_full_default as default | ||
}; | ||
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL3V0aWwudHMiLCAiLi4vLi4vc3JjL2NvbnN0YW50cy50cyIsICIuLi8uLi9zcmMvc3RhdGlzdGljcy50cyIsICIuLi8uLi9zcmMvbW9kZWxzL3RodXJzdG9uZS1tb3N0ZWxsZXItZnVsbC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0IHsgemlwIH0gZnJvbSAncmFtZGEnXG5pbXBvcnQgY29uc3RhbnRzIGZyb20gJy4vY29uc3RhbnRzJ1xuaW1wb3J0IHsgUmF0aW5nLCBPcHRpb25zLCBHYW1tYSwgVGVhbSwgUmFuayB9IGZyb20gJy4vdHlwZXMnXG5cbmV4cG9ydCB0eXBlIFRlYW1NdSA9IG51bWJlclxuXG5leHBvcnQgdHlwZSBUZWFtU2lnbWFTcSA9IG51bWJlclxuXG5leHBvcnQgdHlwZSBUZWFtUmF0aW5nID0gW1RlYW1NdSwgVGVhbVNpZ21hU3EsIFRlYW0sIFJhbmtdXG5cbmV4cG9ydCBjb25zdCBzdW0gPSAoYTogbnVtYmVyLCBiOiBudW1iZXIpID0+IGEgKyBiXG5cbmV4cG9ydCBjb25zdCBzY29yZSA9IChxOiBudW1iZXIsIGk6IG51bWJlcikgPT4ge1xuICBpZiAocSA8IGkpIHtcbiAgICByZXR1cm4gMC4wXG4gIH1cbiAgaWYgKHEgPiBpKSB7XG4gICAgcmV0dXJuIDEuMFxuICB9XG4gIC8vIHEgPT09IGlcbiAgcmV0dXJuIDAuNVxufVxuXG5leHBvcnQgY29uc3QgcmFua2luZ3MgPSAodGVhbXM6IFRlYW1bXSwgcmFuazogbnVtYmVyW10gPSBbXSkgPT4ge1xuICBjb25zdCB0ZWFtU2NvcmVzID0gdGVhbXMubWFwKChfLCBpKSA9PiByYW5rW2ldIHx8IGkpXG4gIGNvbnN0IG91dFJhbmsgPSBuZXcgQXJyYXkodGVhbXMubGVuZ3RoKVxuXG4gIGxldCBzID0gMFxuICBmb3IgKGxldCBqID0gMDsgaiA8IHRlYW1TY29yZXMubGVuZ3RoOyBqICs9IDEpIHtcbiAgICBpZiAoaiA+IDAgJiYgdGVhbVNjb3Jlc1tqIC0gMV0gPCB0ZWFtU2NvcmVzW2pdKSB7XG4gICAgICBzID0galxuICAgIH1cbiAgICBvdXRSYW5rW2pdID0gc1xuICB9XG4gIHJldHVybiBvdXRSYW5rXG59XG5cbi8vIHRoaXMgaXMgYmFzaWNhbGx5IHNoYXJlZCBjb2RlLCBwcmVjb21wdXRlZCBmb3IgZXZlcnkgbW9kZWxcbmNvbnN0IHRlYW1SYXRpbmcgPVxuICAob3B0aW9uczogT3B0aW9ucykgPT5cbiAgKGdhbWU6IFRlYW1bXSk6IFRlYW1SYXRpbmdbXSA9PiB7XG4gICAgY29uc3QgcmFuayA9IHJhbmtpbmdzKGdhbWUsIG9wdGlvbnMucmFuaylcbiAgICByZXR1cm4gZ2FtZS5tYXAoKHRlYW0sIGkpID0+IFtcbiAgICAgIC8vIG11W2ldXG4gICAgICB0ZWFtLm1hcCgoeyBtdSB9KSA9PiBtdSkucmVkdWNlKHN1bSwgMCksXG4gICAgICAvLyBzaWdtYV4yW2ldXG4gICAgICB0ZWFtLm1hcCgoeyBzaWdtYSB9KSA9PiBzaWdtYSAqIHNpZ21hKS5yZWR1Y2Uoc3VtLCAwKSxcbiAgICAgIC8vIChvcmlnaW5hbCB0ZWFtIGRhdGEpXG4gICAgICB0ZWFtLFxuICAgICAgLy8gcmFua1tpXVxuICAgICAgcmFua1tpXSxcbiAgICBdKVxuICB9XG5cbmV4cG9ydCBjb25zdCBsYWRkZXJQYWlycyA9IDxUPihyYW5rczogVFtdKTogVFtdW10gPT4ge1xuICBjb25zdCBzaXplID0gcmFua3MubGVuZ3RoXG4gIGNvbnN0IGxlZnQgPSBbdW5kZWZpbmVkLCAuLi5yYW5rcy5zbGljZSgwLCBzaXplIC0gMSldXG4gIGNvbnN0IHJpZ2h0ID0gWy4uLnJhbmtzLnNsaWNlKDEpLCB1bmRlZmluZWRdXG4gIHJldHVybiB6aXAobGVmdCwgcmlnaHQpLm1hcCgoW2wsIHJdKSA9PiB7XG4gICAgaWYgKGwgIT09IHVuZGVmaW5lZCAmJiByICE9PSB1bmRlZmluZWQpIHJldHVybiBbbCwgcl1cbiAgICBpZiAobCAhPT0gdW5kZWZpbmVkICYmIHIgPT09IHVuZGVmaW5lZCkgcmV0dXJuIFtsXVxuICAgIGlmIChsID09PSB1bmRlZmluZWQgJiYgciAhPT0gdW5kZWZpbmVkKSByZXR1cm4gW3JdXG4gICAgcmV0dXJuIFtdIC8vIHRoaXMgc2hvdWxkIHJlYWxseSBvbmx5IGhhcHBlbiB3aGVuIHNpemUgPT09IDFcbiAgfSlcbn1cblxuY29uc3QgdXRpbEMgPSAob3B0aW9uczogT3B0aW9ucykgPT4ge1xuICBjb25zdCB7IEJFVEFTUSB9ID0gY29uc3RhbnRzKG9wdGlvbnMpXG4gIHJldHVybiAodGVhbVJhdGluZ3M6IFRlYW1SYXRpbmdbXSkgPT5cbiAgICBNYXRoLnNxcnQodGVhbVJhdGluZ3MubWFwKChbX3RlYW1NdSwgdGVhbVNpZ21hU3EsIF90ZWFtLCBfcmFua10pID0+IHRlYW1TaWdtYVNxICsgQkVUQVNRKS5yZWR1Y2Uoc3VtLCAwKSlcbn1cblxuZXhwb3J0IGNvbnN0IHV0aWxTdW1RID0gKHRlYW1SYXRpbmdzOiBUZWFtUmF0aW5nW10sIGM6IG51bWJlcikgPT5cbiAgdGVhbVJhdGluZ3MubWFwKChbX3FNdSwgX3FTaWdtYVNxLCBfcVRlYW0sIHFSYW5rXSkgPT5cbiAgICB0ZWFtUmF0aW5nc1xuICAgICAgLmZpbHRlcigoW19pTXUsIF9pU2lnbWFTcSwgX2lUZWFtLCBpUmFua10pID0+IGlSYW5rID49IHFSYW5rKVxuICAgICAgLm1hcCgoW2lNdSwgX2lTaWdtYVNxLCBfaVRlYW0sIF9pUmFua10pID0+IE1hdGguZXhwKGlNdSAvIGMpKVxuICAgICAgLnJlZHVjZShzdW0sIDApXG4gIClcblxuZXhwb3J0IGNvbnN0IHV0aWxBID0gKHRlYW1SYXRpbmdzOiBUZWFtUmF0aW5nW10pID0+XG4gIHRlYW1SYXRpbmdzLm1hcChcbiAgICAoW19pTXUsIF9pU2lnbWFTcSwgX2lUZWFtLCBpUmFua10pID0+XG4gICAgICB0ZWFtUmF0aW5ncy5maWx0ZXIoKFtfcU11LCBfcVNpZ21hU3EsIF9xVGVhbSwgcVJhbmtdKSA9PiBpUmFuayA9PT0gcVJhbmspLmxlbmd0aFxuICApXG5cbmV4cG9ydCBjb25zdCBnYW1tYSA9IChvcHRpb25zOiBPcHRpb25zKTogR2FtbWEgPT5cbiAgb3B0aW9ucy5nYW1tYSA/P1xuICAvLyBkZWZhdWx0IHRvIGlTaWdtYSAvIGNcbiAgKChjOiBudW1iZXIsIF9rOiBudW1iZXIsIF9tdTogbnVtYmVyLCBzaWdtYVNxOiBudW1iZXIsIF90ZWFtOiBSYXRpbmdbXSwgX3FSYW5rOiBudW1iZXIpID0+IE1hdGguc3FydChzaWdtYVNxKSAvIGMpXG5cbmV4cG9ydCBkZWZhdWx0IChvcHRpb25zOiBPcHRpb25zKSA9PiAoe1xuICB1dGlsQzogdXRpbEMob3B0aW9ucyksXG4gIHRlYW1SYXRpbmc6IHRlYW1SYXRpbmcob3B0aW9ucyksXG4gIGdhbW1hOiBnYW1tYShvcHRpb25zKSxcbn0pXG4iLCAiaW1wb3J0IHsgT3B0aW9ucyB9IGZyb20gJy4vdHlwZXMnXG5cbmNvbnN0IGJ1aWxkZXIgPSAob3B0aW9uczogT3B0aW9ucykgPT4ge1xuICAvLyBpJ2QgbG92ZSB0byBrbm93IG9mIGEgYmV0dGVyIHdheSB0byBkbyB0aGlzXG4gIGNvbnN0IHsgeiA9IDMsIG11ID0gMjUsIHByZXZlbnRTaWdtYUluY3JlYXNlID0gZmFsc2UsIGVwc2lsb24gPSAwLjAwMDEgfSA9IG9wdGlvbnNcbiAgY29uc3QgeyB0YXUgPSBtdSAvIDMwMCwgc2lnbWEgPSBtdSAvIHosIGJldGEgPSBzaWdtYSAvIDIsIGxpbWl0U2lnbWEgPSBwcmV2ZW50U2lnbWFJbmNyZWFzZSB9ID0gb3B0aW9uc1xuICBjb25zdCBiZXRhU3EgPSBiZXRhICoqIDJcblxuICByZXR1cm4ge1xuICAgIFNJR01BOiBzaWdtYSxcbiAgICBNVTogbXUsXG4gICAgRVBTSUxPTjogZXBzaWxvbixcbiAgICBUV09CRVRBU1E6IDIgKiBiZXRhU3EsXG4gICAgQkVUQTogYmV0YSxcbiAgICBCRVRBU1E6IGJldGFTcSxcbiAgICBaOiB6LFxuICAgIFRBVTogdGF1LFxuICAgIExJTUlUX1NJR01BOiBsaW1pdFNpZ21hLFxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJ1aWxkZXJcbiIsICJpbXBvcnQgZ2F1c3NpYW4gZnJvbSAnZ2F1c3NpYW4nXG5cbi8vIHVzZSBhIHN0YW5kYXJkIG5vcm1hbCBkaXN0cmlidXRpb24gLSBtZWFuIG9mIHplcm8sIHN0ZGRldi92YXJpYW5jZSBvZiBvbmVcbmNvbnN0IG5vcm1hbCA9IGdhdXNzaWFuKDAsIDEpXG5cbmV4cG9ydCBjb25zdCBwaGlNYWpvciA9ICh4OiBudW1iZXIpID0+IG5vcm1hbC5jZGYoeClcblxuZXhwb3J0IGNvbnN0IHBoaU1ham9ySW52ZXJzZSA9ICh4OiBudW1iZXIpID0+IG5vcm1hbC5wcGYoeClcblxuZXhwb3J0IGNvbnN0IHBoaU1pbm9yID0gKHg6IG51bWJlcikgPT4gbm9ybWFsLnBkZih4KVxuXG5leHBvcnQgY29uc3QgdiA9ICh4OiBudW1iZXIsIHQ6IG51bWJlcikgPT4ge1xuICBjb25zdCB4dCA9IHggLSB0XG4gIGNvbnN0IGRlbm9tID0gcGhpTWFqb3IoeHQpXG4gIHJldHVybiBkZW5vbSA8IE51bWJlci5FUFNJTE9OID8gLXh0IDogcGhpTWlub3IoeHQpIC8gZGVub21cbn1cblxuZXhwb3J0IGNvbnN0IHcgPSAoeDogbnVtYmVyLCB0OiBudW1iZXIpID0+IHtcbiAgY29uc3QgeHQgPSB4IC0gdFxuICBjb25zdCBkZW5vbSA9IHBoaU1ham9yKHh0KVxuICBpZiAoZGVub20gPCBOdW1iZXIuRVBTSUxPTikge1xuICAgIHJldHVybiB4IDwgMCA/IDEgOiAwXG4gIH1cbiAgcmV0dXJuIHYoeCwgdCkgKiAodih4LCB0KSArIHh0KVxufVxuXG5leHBvcnQgY29uc3QgdnQgPSAoeDogbnVtYmVyLCB0OiBudW1iZXIpID0+IHtcbiAgY29uc3QgeHggPSBNYXRoLmFicyh4KVxuICBjb25zdCBiID0gcGhpTWFqb3IodCAtIHh4KSAtIHBoaU1ham9yKC10IC0geHgpXG4gIGlmIChiIDwgMWUtNSkge1xuICAgIGlmICh4IDwgMCkgcmV0dXJuIC14IC0gdFxuICAgIHJldHVybiAteCArIHRcbiAgfVxuICBjb25zdCBhID0gcGhpTWlub3IoLXQgLSB4eCkgLSBwaGlNaW5vcih0IC0geHgpXG4gIHJldHVybiAoeCA8IDAgPyAtYSA6IGEpIC8gYlxufVxuXG5leHBvcnQgY29uc3Qgd3QgPSAoeDogbnVtYmVyLCB0OiBudW1iZXIpID0+IHtcbiAgY29uc3QgeHggPSBNYXRoLmFicyh4KVxuICBjb25zdCBiID0gcGhpTWFqb3IodCAtIHh4KSAtIHBoaU1ham9yKC10IC0geHgpXG4gIHJldHVybiBiIDwgTnVtYmVyLkVQU0lMT05cbiAgICA/IDEuMFxuICAgIDogKCh0IC0geHgpICogcGhpTWlub3IodCAtIHh4KSArICh0ICsgeHgpICogcGhpTWlub3IoLXQgLSB4eCkpIC8gYiArIHZ0KHgsIHQpICogdnQoeCwgdClcbn1cbiIsICJpbXBvcnQgdXRpbCBmcm9tICcuLi91dGlsJ1xuaW1wb3J0IGNvbnN0YW50cyBmcm9tICcuLi9jb25zdGFudHMnXG5pbXBvcnQgeyB3LCB2LCB2dCwgd3QgfSBmcm9tICcuLi9zdGF0aXN0aWNzJ1xuaW1wb3J0IHsgUmF0aW5nLCBPcHRpb25zLCBNb2RlbCB9IGZyb20gJy4uL3R5cGVzJ1xuXG5jb25zdCBtb2RlbDogTW9kZWwgPSAoZ2FtZTogUmF0aW5nW11bXSwgb3B0aW9uczogT3B0aW9ucyA9IHt9KSA9PiB7XG4gIGNvbnN0IHsgVFdPQkVUQVNRLCBFUFNJTE9OIH0gPSBjb25zdGFudHMob3B0aW9ucylcbiAgY29uc3QgeyB0ZWFtUmF0aW5nLCBnYW1tYSB9ID0gdXRpbChvcHRpb25zKVxuICBjb25zdCB0ZWFtUmF0aW5ncyA9IHRlYW1SYXRpbmcoZ2FtZSlcblxuICByZXR1cm4gdGVhbVJhdGluZ3MubWFwKChpVGVhbVJhdGluZywgaSkgPT4ge1xuICAgIGNvbnN0IFtpTXUsIGlTaWdtYVNxLCBpVGVhbSwgaVJhbmtdID0gaVRlYW1SYXRpbmdcbiAgICBjb25zdCBbaU9tZWdhLCBpRGVsdGFdID0gdGVhbVJhdGluZ3NcbiAgICAgIC5maWx0ZXIoKF8sIHEpID0+IGkgIT09IHEpXG4gICAgICAucmVkdWNlKFxuICAgICAgICAoW29tZWdhLCBkZWx0YV0sIFtxTXUsIHFTaWdtYVNxLCBfcVRlYW0sIHFSYW5rXSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGNpcSA9IE1hdGguc3FydChpU2lnbWFTcSArIHFTaWdtYVNxICsgVFdPQkVUQVNRKVxuICAgICAgICAgIGNvbnN0IGRlbHRhTXUgPSAoaU11IC0gcU11KSAvIGNpcVxuICAgICAgICAgIGNvbnN0IHNpZ1NxVG9DaXEgPSBpU2lnbWFTcSAvIGNpcVxuICAgICAgICAgIGNvbnN0IGlHYW1tYSA9IGdhbW1hKGNpcSwgdGVhbVJhdGluZ3MubGVuZ3RoLCAuLi5pVGVhbVJhdGluZylcblxuICAgICAgICAgIGlmIChxUmFuayA9PT0gaVJhbmspIHtcbiAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgIG9tZWdhICsgc2lnU3FUb0NpcSAqIHZ0KGRlbHRhTXUsIEVQU0lMT04gLyBjaXEpLFxuICAgICAgICAgICAgICBkZWx0YSArICgoaUdhbW1hICogc2lnU3FUb0NpcSkgLyBjaXEpICogd3QoZGVsdGFNdSwgRVBTSUxPTiAvIGNpcSksXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3Qgc2lnbiA9IHFSYW5rID4gaVJhbmsgPyAxIDogLTFcbiAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgb21lZ2EgKyBzaWduICogc2lnU3FUb0NpcSAqIHYoc2lnbiAqIGRlbHRhTXUsIEVQU0lMT04gLyBjaXEpLFxuICAgICAgICAgICAgZGVsdGEgKyAoKGlHYW1tYSAqIHNpZ1NxVG9DaXEpIC8gY2lxKSAqIHcoc2lnbiAqIGRlbHRhTXUsIEVQU0lMT04gLyBjaXEpLFxuICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAgWzAsIDBdXG4gICAgICApXG5cbiAgICByZXR1cm4gaVRlYW0ubWFwKCh7IG11LCBzaWdtYSB9KSA9PiB7XG4gICAgICBjb25zdCBzaWdtYVNxID0gc2lnbWEgKiBzaWdtYVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbXU6IG11ICsgKHNpZ21hU3EgLyBpU2lnbWFTcSkgKiBpT21lZ2EsXG4gICAgICAgIHNpZ21hOiBzaWdtYSAqIE1hdGguc3FydChNYXRoLm1heCgxIC0gKHNpZ21hU3EgLyBpU2lnbWFTcSkgKiBpRGVsdGEsIEVQU0lMT04pKSxcbiAgICAgIH1cbiAgICB9KVxuICB9KVxufVxuXG5leHBvcnQgZGVmYXVsdCBtb2RlbFxuIl0sCiAgIm1hcHBpbmdzIjogIjtBQUFBLFNBQVMsV0FBVzs7O0FDRXBCLElBQU0sVUFBVSxDQUFDLFlBQXFCO0FBRXBDLFFBQU0sRUFBRSxJQUFJLEdBQUcsS0FBSyxJQUFJLHVCQUF1QixPQUFPLFVBQVUsS0FBTyxJQUFJO0FBQzNFLFFBQU0sRUFBRSxNQUFNLEtBQUssS0FBSyxRQUFRLEtBQUssR0FBRyxPQUFPLFFBQVEsR0FBRyxhQUFhLHFCQUFxQixJQUFJO0FBQ2hHLFFBQU0sU0FBUyxRQUFRO0FBRXZCLFNBQU87QUFBQSxJQUNMLE9BQU87QUFBQSxJQUNQLElBQUk7QUFBQSxJQUNKLFNBQVM7QUFBQSxJQUNULFdBQVcsSUFBSTtBQUFBLElBQ2YsTUFBTTtBQUFBLElBQ04sUUFBUTtBQUFBLElBQ1IsR0FBRztBQUFBLElBQ0gsS0FBSztBQUFBLElBQ0wsYUFBYTtBQUFBLEVBQ2Y7QUFDRjtBQUVBLElBQU8sb0JBQVE7OztBRFhSLElBQU0sTUFBTSxDQUFDLEdBQVcsTUFBYyxJQUFJO0FBYTFDLElBQU0sV0FBVyxDQUFDLE9BQWUsT0FBaUIsQ0FBQyxNQUFNO0FBQzlELFFBQU0sYUFBYSxNQUFNLElBQUksQ0FBQyxHQUFHLE1BQU0sS0FBSyxDQUFDLEtBQUssQ0FBQztBQUNuRCxRQUFNLFVBQVUsSUFBSSxNQUFNLE1BQU0sTUFBTTtBQUV0QyxNQUFJLElBQUk7QUFDUixXQUFTLElBQUksR0FBRyxJQUFJLFdBQVcsUUFBUSxLQUFLLEdBQUc7QUFDN0MsUUFBSSxJQUFJLEtBQUssV0FBVyxJQUFJLENBQUMsSUFBSSxXQUFXLENBQUMsR0FBRztBQUM5QyxVQUFJO0FBQUEsSUFDTjtBQUNBLFlBQVEsQ0FBQyxJQUFJO0FBQUEsRUFDZjtBQUNBLFNBQU87QUFDVDtBQUdBLElBQU0sYUFDSixDQUFDLFlBQ0QsQ0FBQyxTQUErQjtBQUM5QixRQUFNLE9BQU8sU0FBUyxNQUFNLFFBQVEsSUFBSTtBQUN4QyxTQUFPLEtBQUssSUFBSSxDQUFDLE1BQU0sTUFBTTtBQUFBO0FBQUEsSUFFM0IsS0FBSyxJQUFJLENBQUMsRUFBRSxHQUFHLE1BQU0sRUFBRSxFQUFFLE9BQU8sS0FBSyxDQUFDO0FBQUE7QUFBQSxJQUV0QyxLQUFLLElBQUksQ0FBQyxFQUFFLE1BQU0sTUFBTSxRQUFRLEtBQUssRUFBRSxPQUFPLEtBQUssQ0FBQztBQUFBO0FBQUEsSUFFcEQ7QUFBQTtBQUFBLElBRUEsS0FBSyxDQUFDO0FBQUEsRUFDUixDQUFDO0FBQ0g7QUFjRixJQUFNLFFBQVEsQ0FBQyxZQUFxQjtBQUNsQyxRQUFNLEVBQUUsT0FBTyxJQUFJLGtCQUFVLE9BQU87QUFDcEMsU0FBTyxDQUFDLGdCQUNOLEtBQUssS0FBSyxZQUFZLElBQUksQ0FBQyxDQUFDLFNBQVMsYUFBYSxPQUFPLEtBQUssTUFBTSxjQUFjLE1BQU0sRUFBRSxPQUFPLEtBQUssQ0FBQyxDQUFDO0FBQzVHO0FBZ0JPLElBQU0sUUFBUSxDQUFDLFlBQXlCO0FBdEYvQztBQXVGRSx1QkFBUSxVQUFSO0FBQUE7QUFBQSxJQUVDLENBQUMsR0FBVyxJQUFZLEtBQWEsU0FBaUIsT0FBaUIsV0FBbUIsS0FBSyxLQUFLLE9BQU8sSUFBSTtBQUFBO0FBQUE7QUFFbEgsSUFBTyxlQUFRLENBQUMsYUFBc0I7QUFBQSxFQUNwQyxPQUFPLE1BQU0sT0FBTztBQUFBLEVBQ3BCLFlBQVksV0FBVyxPQUFPO0FBQUEsRUFDOUIsT0FBTyxNQUFNLE9BQU87QUFDdEI7OztBRS9GQSxPQUFPLGNBQWM7QUFHckIsSUFBTSxTQUFTLFNBQVMsR0FBRyxDQUFDO0FBRXJCLElBQU0sV0FBVyxDQUFDLE1BQWMsT0FBTyxJQUFJLENBQUM7QUFJNUMsSUFBTSxXQUFXLENBQUMsTUFBYyxPQUFPLElBQUksQ0FBQztBQUU1QyxJQUFNLElBQUksQ0FBQyxHQUFXLE1BQWM7QUFDekMsUUFBTSxLQUFLLElBQUk7QUFDZixRQUFNLFFBQVEsU0FBUyxFQUFFO0FBQ3pCLFNBQU8sUUFBUSxPQUFPLFVBQVUsQ0FBQyxLQUFLLFNBQVMsRUFBRSxJQUFJO0FBQ3ZEO0FBRU8sSUFBTSxJQUFJLENBQUMsR0FBVyxNQUFjO0FBQ3pDLFFBQU0sS0FBSyxJQUFJO0FBQ2YsUUFBTSxRQUFRLFNBQVMsRUFBRTtBQUN6QixNQUFJLFFBQVEsT0FBTyxTQUFTO0FBQzFCLFdBQU8sSUFBSSxJQUFJLElBQUk7QUFBQSxFQUNyQjtBQUNBLFNBQU8sRUFBRSxHQUFHLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxJQUFJO0FBQzlCO0FBRU8sSUFBTSxLQUFLLENBQUMsR0FBVyxNQUFjO0FBQzFDLFFBQU0sS0FBSyxLQUFLLElBQUksQ0FBQztBQUNyQixRQUFNLElBQUksU0FBUyxJQUFJLEVBQUUsSUFBSSxTQUFTLENBQUMsSUFBSSxFQUFFO0FBQzdDLE1BQUksSUFBSSxNQUFNO0FBQ1osUUFBSSxJQUFJLEVBQUcsUUFBTyxDQUFDLElBQUk7QUFDdkIsV0FBTyxDQUFDLElBQUk7QUFBQSxFQUNkO0FBQ0EsUUFBTSxJQUFJLFNBQVMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxTQUFTLElBQUksRUFBRTtBQUM3QyxVQUFRLElBQUksSUFBSSxDQUFDLElBQUksS0FBSztBQUM1QjtBQUVPLElBQU0sS0FBSyxDQUFDLEdBQVcsTUFBYztBQUMxQyxRQUFNLEtBQUssS0FBSyxJQUFJLENBQUM7QUFDckIsUUFBTSxJQUFJLFNBQVMsSUFBSSxFQUFFLElBQUksU0FBUyxDQUFDLElBQUksRUFBRTtBQUM3QyxTQUFPLElBQUksT0FBTyxVQUNkLE1BQ0UsSUFBSSxNQUFNLFNBQVMsSUFBSSxFQUFFLEtBQUssSUFBSSxNQUFNLFNBQVMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxJQUFJLEdBQUcsR0FBRyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDM0Y7OztBQ3RDQSxJQUFNLFFBQWUsQ0FBQyxNQUFrQixVQUFtQixDQUFDLE1BQU07QUFDaEUsUUFBTSxFQUFFLFdBQVcsUUFBUSxJQUFJLGtCQUFVLE9BQU87QUFDaEQsUUFBTSxFQUFFLFlBQUFBLGFBQVksT0FBQUMsT0FBTSxJQUFJLGFBQUssT0FBTztBQUMxQyxRQUFNLGNBQWNELFlBQVcsSUFBSTtBQUVuQyxTQUFPLFlBQVksSUFBSSxDQUFDLGFBQWEsTUFBTTtBQUN6QyxVQUFNLENBQUMsS0FBSyxVQUFVLE9BQU8sS0FBSyxJQUFJO0FBQ3RDLFVBQU0sQ0FBQyxRQUFRLE1BQU0sSUFBSSxZQUN0QixPQUFPLENBQUMsR0FBRyxNQUFNLE1BQU0sQ0FBQyxFQUN4QjtBQUFBLE1BQ0MsQ0FBQyxDQUFDLE9BQU8sS0FBSyxHQUFHLENBQUMsS0FBSyxVQUFVLFFBQVEsS0FBSyxNQUFNO0FBQ2xELGNBQU0sTUFBTSxLQUFLLEtBQUssV0FBVyxXQUFXLFNBQVM7QUFDckQsY0FBTSxXQUFXLE1BQU0sT0FBTztBQUM5QixjQUFNLGFBQWEsV0FBVztBQUM5QixjQUFNLFNBQVNDLE9BQU0sS0FBSyxZQUFZLFFBQVEsR0FBRyxXQUFXO0FBRTVELFlBQUksVUFBVSxPQUFPO0FBQ25CLGlCQUFPO0FBQUEsWUFDTCxRQUFRLGFBQWEsR0FBRyxTQUFTLFVBQVUsR0FBRztBQUFBLFlBQzlDLFFBQVUsU0FBUyxhQUFjLE1BQU8sR0FBRyxTQUFTLFVBQVUsR0FBRztBQUFBLFVBQ25FO0FBQUEsUUFDRjtBQUVBLGNBQU0sT0FBTyxRQUFRLFFBQVEsSUFBSTtBQUNqQyxlQUFPO0FBQUEsVUFDTCxRQUFRLE9BQU8sYUFBYSxFQUFFLE9BQU8sU0FBUyxVQUFVLEdBQUc7QUFBQSxVQUMzRCxRQUFVLFNBQVMsYUFBYyxNQUFPLEVBQUUsT0FBTyxTQUFTLFVBQVUsR0FBRztBQUFBLFFBQ3pFO0FBQUEsTUFDRjtBQUFBLE1BQ0EsQ0FBQyxHQUFHLENBQUM7QUFBQSxJQUNQO0FBRUYsV0FBTyxNQUFNLElBQUksQ0FBQyxFQUFFLElBQUksTUFBTSxNQUFNO0FBQ2xDLFlBQU0sVUFBVSxRQUFRO0FBQ3hCLGFBQU87QUFBQSxRQUNMLElBQUksS0FBTSxVQUFVLFdBQVk7QUFBQSxRQUNoQyxPQUFPLFFBQVEsS0FBSyxLQUFLLEtBQUssSUFBSSxJQUFLLFVBQVUsV0FBWSxRQUFRLE9BQU8sQ0FBQztBQUFBLE1BQy9FO0FBQUEsSUFDRixDQUFDO0FBQUEsRUFDSCxDQUFDO0FBQ0g7QUFFQSxJQUFPLG1DQUFROyIsCiAgIm5hbWVzIjogWyJ0ZWFtUmF0aW5nIiwgImdhbW1hIl0KfQo= |
@@ -1,3 +0,5 @@ | ||
import { Model } from '../types'; | ||
import { Model } from '../types.js'; | ||
declare const model: Model; | ||
export default model; | ||
export { model as default }; |
@@ -1,42 +0,144 @@ | ||
"use strict"; | ||
// src/models/thurstone-mosteller-part.ts | ||
import { zip as zip2 } from "ramda"; | ||
Object.defineProperty(exports, "__esModule", { | ||
value: true | ||
// src/util.ts | ||
import { zip } from "ramda"; | ||
// src/constants.ts | ||
var builder = (options) => { | ||
const { z = 3, mu = 25, preventSigmaIncrease = false, epsilon = 1e-4 } = options; | ||
const { tau = mu / 300, sigma = mu / z, beta = sigma / 2, limitSigma = preventSigmaIncrease } = options; | ||
const betaSq = beta ** 2; | ||
return { | ||
SIGMA: sigma, | ||
MU: mu, | ||
EPSILON: epsilon, | ||
TWOBETASQ: 2 * betaSq, | ||
BETA: beta, | ||
BETASQ: betaSq, | ||
Z: z, | ||
TAU: tau, | ||
LIMIT_SIGMA: limitSigma | ||
}; | ||
}; | ||
var constants_default = builder; | ||
// src/util.ts | ||
var sum = (a, b) => a + b; | ||
var rankings = (teams, rank = []) => { | ||
const teamScores = teams.map((_, i) => rank[i] || i); | ||
const outRank = new Array(teams.length); | ||
let s = 0; | ||
for (let j = 0; j < teamScores.length; j += 1) { | ||
if (j > 0 && teamScores[j - 1] < teamScores[j]) { | ||
s = j; | ||
} | ||
outRank[j] = s; | ||
} | ||
return outRank; | ||
}; | ||
var teamRating = (options) => (game) => { | ||
const rank = rankings(game, options.rank); | ||
return game.map((team, i) => [ | ||
// mu[i] | ||
team.map(({ mu }) => mu).reduce(sum, 0), | ||
// sigma^2[i] | ||
team.map(({ sigma }) => sigma * sigma).reduce(sum, 0), | ||
// (original team data) | ||
team, | ||
// rank[i] | ||
rank[i] | ||
]); | ||
}; | ||
var ladderPairs = (ranks) => { | ||
const size = ranks.length; | ||
const left = [void 0, ...ranks.slice(0, size - 1)]; | ||
const right = [...ranks.slice(1), void 0]; | ||
return zip(left, right).map(([l, r]) => { | ||
if (l !== void 0 && r !== void 0) return [l, r]; | ||
if (l !== void 0 && r === void 0) return [l]; | ||
if (l === void 0 && r !== void 0) return [r]; | ||
return []; | ||
}); | ||
}; | ||
var utilC = (options) => { | ||
const { BETASQ } = constants_default(options); | ||
return (teamRatings) => Math.sqrt(teamRatings.map(([_teamMu, teamSigmaSq, _team, _rank]) => teamSigmaSq + BETASQ).reduce(sum, 0)); | ||
}; | ||
var gamma = (options) => { | ||
var _a; | ||
return (_a = options.gamma) != null ? _a : ( | ||
// default to iSigma / c | ||
(c, _k, _mu, sigmaSq, _team, _qRank) => Math.sqrt(sigmaSq) / c | ||
); | ||
}; | ||
var util_default = (options) => ({ | ||
utilC: utilC(options), | ||
teamRating: teamRating(options), | ||
gamma: gamma(options) | ||
}); | ||
exports.default = void 0; | ||
var _ramda = require("ramda"); | ||
var _util = _interopRequireWildcard(require("../util")); | ||
var _statistics = require("../statistics"); | ||
var _constants = _interopRequireDefault(require("../constants")); | ||
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } | ||
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); } | ||
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; } | ||
const model = (game, options = {}) => { | ||
const { | ||
TWOBETASQ, | ||
EPSILON | ||
} = (0, _constants.default)(options); | ||
const { | ||
teamRating, | ||
gamma | ||
} = (0, _util.default)(options); | ||
const teamRatings = teamRating(game); | ||
const adjacentTeams = (0, _util.ladderPairs)(teamRatings); | ||
return (0, _ramda.zip)(teamRatings, adjacentTeams).map(([iTeamRating, iAdjacents]) => { | ||
// src/statistics.ts | ||
import gaussian from "gaussian"; | ||
var normal = gaussian(0, 1); | ||
var phiMajor = (x) => normal.cdf(x); | ||
var phiMinor = (x) => normal.pdf(x); | ||
var v = (x, t) => { | ||
const xt = x - t; | ||
const denom = phiMajor(xt); | ||
return denom < Number.EPSILON ? -xt : phiMinor(xt) / denom; | ||
}; | ||
var w = (x, t) => { | ||
const xt = x - t; | ||
const denom = phiMajor(xt); | ||
if (denom < Number.EPSILON) { | ||
return x < 0 ? 1 : 0; | ||
} | ||
return v(x, t) * (v(x, t) + xt); | ||
}; | ||
var vt = (x, t) => { | ||
const xx = Math.abs(x); | ||
const b = phiMajor(t - xx) - phiMajor(-t - xx); | ||
if (b < 1e-5) { | ||
if (x < 0) return -x - t; | ||
return -x + t; | ||
} | ||
const a = phiMinor(-t - xx) - phiMinor(t - xx); | ||
return (x < 0 ? -a : a) / b; | ||
}; | ||
var wt = (x, t) => { | ||
const xx = Math.abs(x); | ||
const b = phiMajor(t - xx) - phiMajor(-t - xx); | ||
return b < Number.EPSILON ? 1 : ((t - xx) * phiMinor(t - xx) + (t + xx) * phiMinor(-t - xx)) / b + vt(x, t) * vt(x, t); | ||
}; | ||
// src/models/thurstone-mosteller-part.ts | ||
var model = (game, options = {}) => { | ||
const { TWOBETASQ, EPSILON } = constants_default(options); | ||
const { teamRating: teamRating2, gamma: gamma2 } = util_default(options); | ||
const teamRatings = teamRating2(game); | ||
const adjacentTeams = ladderPairs(teamRatings); | ||
return zip2(teamRatings, adjacentTeams).map(([iTeamRating, iAdjacents]) => { | ||
const [iMu, iSigmaSq, iTeam, iRank] = iTeamRating; | ||
const [iOmega, iDelta] = iAdjacents.reduce(([omega, delta], [qMu, qSigmaSq, _qTeam, qRank]) => { | ||
const ciq = 2 * Math.sqrt(iSigmaSq + qSigmaSq + TWOBETASQ); | ||
const deltaMu = (iMu - qMu) / ciq; | ||
const sigSqToCiq = iSigmaSq / ciq; | ||
const iGamma = gamma(ciq, teamRatings.length, ...iTeamRating); | ||
if (qRank === iRank) { | ||
return [omega + sigSqToCiq * (0, _statistics.vt)(deltaMu, EPSILON / ciq), delta + iGamma * sigSqToCiq / ciq * (0, _statistics.wt)(deltaMu, EPSILON / ciq)]; | ||
} | ||
const sign = qRank > iRank ? 1 : -1; | ||
return [omega + sign * sigSqToCiq * (0, _statistics.v)(sign * deltaMu, EPSILON / ciq), delta + iGamma * sigSqToCiq / ciq * (0, _statistics.w)(sign * deltaMu, EPSILON / ciq)]; | ||
}, [0, 0]); | ||
return iTeam.map(({ | ||
mu, | ||
sigma | ||
}) => { | ||
const [iOmega, iDelta] = iAdjacents.reduce( | ||
([omega, delta], [qMu, qSigmaSq, _qTeam, qRank]) => { | ||
const ciq = 2 * Math.sqrt(iSigmaSq + qSigmaSq + TWOBETASQ); | ||
const deltaMu = (iMu - qMu) / ciq; | ||
const sigSqToCiq = iSigmaSq / ciq; | ||
const iGamma = gamma2(ciq, teamRatings.length, ...iTeamRating); | ||
if (qRank === iRank) { | ||
return [ | ||
omega + sigSqToCiq * vt(deltaMu, EPSILON / ciq), | ||
delta + iGamma * sigSqToCiq / ciq * wt(deltaMu, EPSILON / ciq) | ||
]; | ||
} | ||
const sign = qRank > iRank ? 1 : -1; | ||
return [ | ||
omega + sign * sigSqToCiq * v(sign * deltaMu, EPSILON / ciq), | ||
delta + iGamma * sigSqToCiq / ciq * w(sign * deltaMu, EPSILON / ciq) | ||
]; | ||
}, | ||
[0, 0] | ||
); | ||
return iTeam.map(({ mu, sigma }) => { | ||
const sigmaSq = sigma * sigma; | ||
@@ -50,3 +152,6 @@ return { | ||
}; | ||
var _default = exports.default = model; | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmFtZGEiLCJyZXF1aXJlIiwiX3V0aWwiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsIl9zdGF0aXN0aWNzIiwiX2NvbnN0YW50cyIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJlIiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUiLCJXZWFrTWFwIiwiciIsInQiLCJoYXMiLCJnZXQiLCJuIiwiX19wcm90b19fIiwiYSIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwidSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImkiLCJzZXQiLCJtb2RlbCIsImdhbWUiLCJvcHRpb25zIiwiVFdPQkVUQVNRIiwiRVBTSUxPTiIsImNvbnN0YW50cyIsInRlYW1SYXRpbmciLCJnYW1tYSIsInV0aWwiLCJ0ZWFtUmF0aW5ncyIsImFkamFjZW50VGVhbXMiLCJsYWRkZXJQYWlycyIsInppcCIsIm1hcCIsImlUZWFtUmF0aW5nIiwiaUFkamFjZW50cyIsImlNdSIsImlTaWdtYVNxIiwiaVRlYW0iLCJpUmFuayIsImlPbWVnYSIsImlEZWx0YSIsInJlZHVjZSIsIm9tZWdhIiwiZGVsdGEiLCJxTXUiLCJxU2lnbWFTcSIsIl9xVGVhbSIsInFSYW5rIiwiY2lxIiwiTWF0aCIsInNxcnQiLCJkZWx0YU11Iiwic2lnU3FUb0NpcSIsImlHYW1tYSIsImxlbmd0aCIsInZ0Iiwid3QiLCJzaWduIiwidiIsInciLCJtdSIsInNpZ21hIiwic2lnbWFTcSIsIm1heCIsIl9kZWZhdWx0IiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tb2RlbHMvdGh1cnN0b25lLW1vc3RlbGxlci1wYXJ0LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHppcCB9IGZyb20gJ3JhbWRhJ1xuaW1wb3J0IHV0aWwsIHsgbGFkZGVyUGFpcnMgfSBmcm9tICcuLi91dGlsJ1xuaW1wb3J0IHsgdywgdiwgdnQsIHd0IH0gZnJvbSAnLi4vc3RhdGlzdGljcydcbmltcG9ydCBjb25zdGFudHMgZnJvbSAnLi4vY29uc3RhbnRzJ1xuaW1wb3J0IHsgUmF0aW5nLCBPcHRpb25zLCBNb2RlbCB9IGZyb20gJy4uL3R5cGVzJ1xuXG5jb25zdCBtb2RlbDogTW9kZWwgPSAoZ2FtZTogUmF0aW5nW11bXSwgb3B0aW9uczogT3B0aW9ucyA9IHt9KSA9PiB7XG4gIGNvbnN0IHsgVFdPQkVUQVNRLCBFUFNJTE9OIH0gPSBjb25zdGFudHMob3B0aW9ucylcbiAgY29uc3QgeyB0ZWFtUmF0aW5nLCBnYW1tYSB9ID0gdXRpbChvcHRpb25zKVxuICBjb25zdCB0ZWFtUmF0aW5ncyA9IHRlYW1SYXRpbmcoZ2FtZSlcbiAgY29uc3QgYWRqYWNlbnRUZWFtcyA9IGxhZGRlclBhaXJzKHRlYW1SYXRpbmdzKVxuXG4gIHJldHVybiB6aXAodGVhbVJhdGluZ3MsIGFkamFjZW50VGVhbXMpLm1hcCgoW2lUZWFtUmF0aW5nLCBpQWRqYWNlbnRzXSkgPT4ge1xuICAgIGNvbnN0IFtpTXUsIGlTaWdtYVNxLCBpVGVhbSwgaVJhbmtdID0gaVRlYW1SYXRpbmdcbiAgICBjb25zdCBbaU9tZWdhLCBpRGVsdGFdID0gaUFkamFjZW50cy5yZWR1Y2UoXG4gICAgICAoW29tZWdhLCBkZWx0YV0sIFtxTXUsIHFTaWdtYVNxLCBfcVRlYW0sIHFSYW5rXSkgPT4ge1xuICAgICAgICBjb25zdCBjaXEgPSAyICogTWF0aC5zcXJ0KGlTaWdtYVNxICsgcVNpZ21hU3EgKyBUV09CRVRBU1EpXG4gICAgICAgIGNvbnN0IGRlbHRhTXUgPSAoaU11IC0gcU11KSAvIGNpcVxuICAgICAgICBjb25zdCBzaWdTcVRvQ2lxID0gaVNpZ21hU3EgLyBjaXFcbiAgICAgICAgY29uc3QgaUdhbW1hID0gZ2FtbWEoY2lxLCB0ZWFtUmF0aW5ncy5sZW5ndGgsIC4uLmlUZWFtUmF0aW5nKVxuXG4gICAgICAgIGlmIChxUmFuayA9PT0gaVJhbmspIHtcbiAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgb21lZ2EgKyBzaWdTcVRvQ2lxICogdnQoZGVsdGFNdSwgRVBTSUxPTiAvIGNpcSksXG4gICAgICAgICAgICBkZWx0YSArICgoaUdhbW1hICogc2lnU3FUb0NpcSkgLyBjaXEpICogd3QoZGVsdGFNdSwgRVBTSUxPTiAvIGNpcSksXG4gICAgICAgICAgXVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc2lnbiA9IHFSYW5rID4gaVJhbmsgPyAxIDogLTFcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICBvbWVnYSArIHNpZ24gKiBzaWdTcVRvQ2lxICogdihzaWduICogZGVsdGFNdSwgRVBTSUxPTiAvIGNpcSksXG4gICAgICAgICAgZGVsdGEgKyAoKGlHYW1tYSAqIHNpZ1NxVG9DaXEpIC8gY2lxKSAqIHcoc2lnbiAqIGRlbHRhTXUsIEVQU0lMT04gLyBjaXEpLFxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgWzAsIDBdXG4gICAgKVxuXG4gICAgcmV0dXJuIGlUZWFtLm1hcCgoeyBtdSwgc2lnbWEgfSkgPT4ge1xuICAgICAgY29uc3Qgc2lnbWFTcSA9IHNpZ21hICogc2lnbWFcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG11OiBtdSArIChzaWdtYVNxIC8gaVNpZ21hU3EpICogaU9tZWdhLFxuICAgICAgICBzaWdtYTogc2lnbWEgKiBNYXRoLnNxcnQoTWF0aC5tYXgoMSAtIChzaWdtYVNxIC8gaVNpZ21hU3EpICogaURlbHRhLCBFUFNJTE9OKSksXG4gICAgICB9XG4gICAgfSlcbiAgfSlcbn1cblxuZXhwb3J0IGRlZmF1bHQgbW9kZWxcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsSUFBQUEsTUFBQSxHQUFBQyxPQUFBO0FBQ0EsSUFBQUMsS0FBQSxHQUFBQyx1QkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQUcsV0FBQSxHQUFBSCxPQUFBO0FBQ0EsSUFBQUksVUFBQSxHQUFBQyxzQkFBQSxDQUFBTCxPQUFBO0FBQW9DLFNBQUFLLHVCQUFB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QixLQUFLLENBQUNzQixHQUFHLEVBQUVwQixXQUFXLENBQUMwQixNQUFNLEVBQUUsR0FBR3JCLFdBQVcsQ0FBQztNQUU3RCxJQUFJYyxLQUFLLEtBQUtULEtBQUssRUFBRTtRQUNuQixPQUFPLENBQ0xJLEtBQUssR0FBR1UsVUFBVSxHQUFHLElBQUFHLGNBQUUsRUFBQ0osT0FBTyxFQUFFNUIsT0FBTyxHQUFHeUIsR0FBRyxDQUFDLEVBQy9DTCxLQUFLLEdBQUtVLE1BQU0sR0FBR0QsVUFBVSxHQUFJSixHQUFHLEdBQUksSUFBQVEsY0FBRSxFQUFDTCxPQUFPLEVBQUU1QixPQUFPLEdBQUd5QixHQUFHLENBQUMsQ0FDbkU7TUFDSDtNQUVBLE1BQU1TLElBQUksR0FBR1YsS0FBSyxHQUFHVCxLQUFLLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztNQUNuQyxPQUFPLENBQ0xJLEtBQUssR0FBR2UsSUFBSSxHQUFHTCxVQUFVLEdBQUcsSUFBQU0sYUFBQyxFQUFDRCxJQUFJLEdBQUdOLE9BQU8sRUFBRTVCLE9BQU8sR0FBR3lCLEdBQUcsQ0FBQyxFQUM1REwsS0FBSyxHQUFLVSxNQUFNLEdBQUdELFVBQVUsR0FBSUosR0FBRyxHQUFJLElBQUFXLGFBQUMsRUFBQ0YsSUFBSSxHQUFHTixPQUFPLEVBQUU1QixPQUFPLEdBQUd5QixHQUFHLENBQUMsQ0FDekU7SUFDSCxDQUFDLEVBQ0QsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUNQLENBQUM7SUFFRCxPQUFPWCxLQUFLLENBQUNMLEdBQUcsQ0FBQyxDQUFDO01BQUU0QixFQUFFO01BQUVDO0lBQU0sQ0FBQyxLQUFLO01BQ2xDLE1BQU1DLE9BQU8sR0FBR0QsS0FBSyxHQUFHQSxLQUFLO01BQzdCLE9BQU87UUFDTEQsRUFBRSxFQUFFQSxFQUFFLEdBQUlFLE9BQU8sR0FBRzFCLFFBQVEsR0FBSUcsTUFBTTtRQUN0Q3NCLEtBQUssRUFBRUEsS0FBSyxHQUFHWixJQUFJLENBQUNDLElBQUksQ0FBQ0QsSUFBSSxDQUFDYyxHQUFHLENBQUMsQ0FBQyxHQUFJRCxPQUFPLEdBQUcxQixRQUFRLEdBQUlJLE1BQU0sRUFBRWpCLE9BQU8sQ0FBQztNQUMvRSxDQUFDO0lBQ0gsQ0FBQyxDQUFDO0VBQ0osQ0FBQyxDQUFDO0FBQ0osQ0FBQztBQUFBLElBQUF5QyxRQUFBLEdBQUFDLE9BQUEsQ0FBQWhFLE9BQUEsR0FFY2tCLEtBQUsiLCJpZ25vcmVMaXN0IjpbXX0= | ||
var thurstone_mosteller_part_default = model; | ||
export { | ||
thurstone_mosteller_part_default as default | ||
}; | ||
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL21vZGVscy90aHVyc3RvbmUtbW9zdGVsbGVyLXBhcnQudHMiLCAiLi4vLi4vc3JjL3V0aWwudHMiLCAiLi4vLi4vc3JjL2NvbnN0YW50cy50cyIsICIuLi8uLi9zcmMvc3RhdGlzdGljcy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0IHsgemlwIH0gZnJvbSAncmFtZGEnXG5pbXBvcnQgdXRpbCwgeyBsYWRkZXJQYWlycyB9IGZyb20gJy4uL3V0aWwnXG5pbXBvcnQgeyB3LCB2LCB2dCwgd3QgfSBmcm9tICcuLi9zdGF0aXN0aWNzJ1xuaW1wb3J0IGNvbnN0YW50cyBmcm9tICcuLi9jb25zdGFudHMnXG5pbXBvcnQgeyBSYXRpbmcsIE9wdGlvbnMsIE1vZGVsIH0gZnJvbSAnLi4vdHlwZXMnXG5cbmNvbnN0IG1vZGVsOiBNb2RlbCA9IChnYW1lOiBSYXRpbmdbXVtdLCBvcHRpb25zOiBPcHRpb25zID0ge30pID0+IHtcbiAgY29uc3QgeyBUV09CRVRBU1EsIEVQU0lMT04gfSA9IGNvbnN0YW50cyhvcHRpb25zKVxuICBjb25zdCB7IHRlYW1SYXRpbmcsIGdhbW1hIH0gPSB1dGlsKG9wdGlvbnMpXG4gIGNvbnN0IHRlYW1SYXRpbmdzID0gdGVhbVJhdGluZyhnYW1lKVxuICBjb25zdCBhZGphY2VudFRlYW1zID0gbGFkZGVyUGFpcnModGVhbVJhdGluZ3MpXG5cbiAgcmV0dXJuIHppcCh0ZWFtUmF0aW5ncywgYWRqYWNlbnRUZWFtcykubWFwKChbaVRlYW1SYXRpbmcsIGlBZGphY2VudHNdKSA9PiB7XG4gICAgY29uc3QgW2lNdSwgaVNpZ21hU3EsIGlUZWFtLCBpUmFua10gPSBpVGVhbVJhdGluZ1xuICAgIGNvbnN0IFtpT21lZ2EsIGlEZWx0YV0gPSBpQWRqYWNlbnRzLnJlZHVjZShcbiAgICAgIChbb21lZ2EsIGRlbHRhXSwgW3FNdSwgcVNpZ21hU3EsIF9xVGVhbSwgcVJhbmtdKSA9PiB7XG4gICAgICAgIGNvbnN0IGNpcSA9IDIgKiBNYXRoLnNxcnQoaVNpZ21hU3EgKyBxU2lnbWFTcSArIFRXT0JFVEFTUSlcbiAgICAgICAgY29uc3QgZGVsdGFNdSA9IChpTXUgLSBxTXUpIC8gY2lxXG4gICAgICAgIGNvbnN0IHNpZ1NxVG9DaXEgPSBpU2lnbWFTcSAvIGNpcVxuICAgICAgICBjb25zdCBpR2FtbWEgPSBnYW1tYShjaXEsIHRlYW1SYXRpbmdzLmxlbmd0aCwgLi4uaVRlYW1SYXRpbmcpXG5cbiAgICAgICAgaWYgKHFSYW5rID09PSBpUmFuaykge1xuICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBvbWVnYSArIHNpZ1NxVG9DaXEgKiB2dChkZWx0YU11LCBFUFNJTE9OIC8gY2lxKSxcbiAgICAgICAgICAgIGRlbHRhICsgKChpR2FtbWEgKiBzaWdTcVRvQ2lxKSAvIGNpcSkgKiB3dChkZWx0YU11LCBFUFNJTE9OIC8gY2lxKSxcbiAgICAgICAgICBdXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzaWduID0gcVJhbmsgPiBpUmFuayA/IDEgOiAtMVxuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgIG9tZWdhICsgc2lnbiAqIHNpZ1NxVG9DaXEgKiB2KHNpZ24gKiBkZWx0YU11LCBFUFNJTE9OIC8gY2lxKSxcbiAgICAgICAgICBkZWx0YSArICgoaUdhbW1hICogc2lnU3FUb0NpcSkgLyBjaXEpICogdyhzaWduICogZGVsdGFNdSwgRVBTSUxPTiAvIGNpcSksXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICBbMCwgMF1cbiAgICApXG5cbiAgICByZXR1cm4gaVRlYW0ubWFwKCh7IG11LCBzaWdtYSB9KSA9PiB7XG4gICAgICBjb25zdCBzaWdtYVNxID0gc2lnbWEgKiBzaWdtYVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbXU6IG11ICsgKHNpZ21hU3EgLyBpU2lnbWFTcSkgKiBpT21lZ2EsXG4gICAgICAgIHNpZ21hOiBzaWdtYSAqIE1hdGguc3FydChNYXRoLm1heCgxIC0gKHNpZ21hU3EgLyBpU2lnbWFTcSkgKiBpRGVsdGEsIEVQU0lMT04pKSxcbiAgICAgIH1cbiAgICB9KVxuICB9KVxufVxuXG5leHBvcnQgZGVmYXVsdCBtb2RlbFxuIiwgImltcG9ydCB7IHppcCB9IGZyb20gJ3JhbWRhJ1xuaW1wb3J0IGNvbnN0YW50cyBmcm9tICcuL2NvbnN0YW50cydcbmltcG9ydCB7IFJhdGluZywgT3B0aW9ucywgR2FtbWEsIFRlYW0sIFJhbmsgfSBmcm9tICcuL3R5cGVzJ1xuXG5leHBvcnQgdHlwZSBUZWFtTXUgPSBudW1iZXJcblxuZXhwb3J0IHR5cGUgVGVhbVNpZ21hU3EgPSBudW1iZXJcblxuZXhwb3J0IHR5cGUgVGVhbVJhdGluZyA9IFtUZWFtTXUsIFRlYW1TaWdtYVNxLCBUZWFtLCBSYW5rXVxuXG5leHBvcnQgY29uc3Qgc3VtID0gKGE6IG51bWJlciwgYjogbnVtYmVyKSA9PiBhICsgYlxuXG5leHBvcnQgY29uc3Qgc2NvcmUgPSAocTogbnVtYmVyLCBpOiBudW1iZXIpID0+IHtcbiAgaWYgKHEgPCBpKSB7XG4gICAgcmV0dXJuIDAuMFxuICB9XG4gIGlmIChxID4gaSkge1xuICAgIHJldHVybiAxLjBcbiAgfVxuICAvLyBxID09PSBpXG4gIHJldHVybiAwLjVcbn1cblxuZXhwb3J0IGNvbnN0IHJhbmtpbmdzID0gKHRlYW1zOiBUZWFtW10sIHJhbms6IG51bWJlcltdID0gW10pID0+IHtcbiAgY29uc3QgdGVhbVNjb3JlcyA9IHRlYW1zLm1hcCgoXywgaSkgPT4gcmFua1tpXSB8fCBpKVxuICBjb25zdCBvdXRSYW5rID0gbmV3IEFycmF5KHRlYW1zLmxlbmd0aClcblxuICBsZXQgcyA9IDBcbiAgZm9yIChsZXQgaiA9IDA7IGogPCB0ZWFtU2NvcmVzLmxlbmd0aDsgaiArPSAxKSB7XG4gICAgaWYgKGogPiAwICYmIHRlYW1TY29yZXNbaiAtIDFdIDwgdGVhbVNjb3Jlc1tqXSkge1xuICAgICAgcyA9IGpcbiAgICB9XG4gICAgb3V0UmFua1tqXSA9IHNcbiAgfVxuICByZXR1cm4gb3V0UmFua1xufVxuXG4vLyB0aGlzIGlzIGJhc2ljYWxseSBzaGFyZWQgY29kZSwgcHJlY29tcHV0ZWQgZm9yIGV2ZXJ5IG1vZGVsXG5jb25zdCB0ZWFtUmF0aW5nID1cbiAgKG9wdGlvbnM6IE9wdGlvbnMpID0+XG4gIChnYW1lOiBUZWFtW10pOiBUZWFtUmF0aW5nW10gPT4ge1xuICAgIGNvbnN0IHJhbmsgPSByYW5raW5ncyhnYW1lLCBvcHRpb25zLnJhbmspXG4gICAgcmV0dXJuIGdhbWUubWFwKCh0ZWFtLCBpKSA9PiBbXG4gICAgICAvLyBtdVtpXVxuICAgICAgdGVhbS5tYXAoKHsgbXUgfSkgPT4gbXUpLnJlZHVjZShzdW0sIDApLFxuICAgICAgLy8gc2lnbWFeMltpXVxuICAgICAgdGVhbS5tYXAoKHsgc2lnbWEgfSkgPT4gc2lnbWEgKiBzaWdtYSkucmVkdWNlKHN1bSwgMCksXG4gICAgICAvLyAob3JpZ2luYWwgdGVhbSBkYXRhKVxuICAgICAgdGVhbSxcbiAgICAgIC8vIHJhbmtbaV1cbiAgICAgIHJhbmtbaV0sXG4gICAgXSlcbiAgfVxuXG5leHBvcnQgY29uc3QgbGFkZGVyUGFpcnMgPSA8VD4ocmFua3M6IFRbXSk6IFRbXVtdID0+IHtcbiAgY29uc3Qgc2l6ZSA9IHJhbmtzLmxlbmd0aFxuICBjb25zdCBsZWZ0ID0gW3VuZGVmaW5lZCwgLi4ucmFua3Muc2xpY2UoMCwgc2l6ZSAtIDEpXVxuICBjb25zdCByaWdodCA9IFsuLi5yYW5rcy5zbGljZSgxKSwgdW5kZWZpbmVkXVxuICByZXR1cm4gemlwKGxlZnQsIHJpZ2h0KS5tYXAoKFtsLCByXSkgPT4ge1xuICAgIGlmIChsICE9PSB1bmRlZmluZWQgJiYgciAhPT0gdW5kZWZpbmVkKSByZXR1cm4gW2wsIHJdXG4gICAgaWYgKGwgIT09IHVuZGVmaW5lZCAmJiByID09PSB1bmRlZmluZWQpIHJldHVybiBbbF1cbiAgICBpZiAobCA9PT0gdW5kZWZpbmVkICYmIHIgIT09IHVuZGVmaW5lZCkgcmV0dXJuIFtyXVxuICAgIHJldHVybiBbXSAvLyB0aGlzIHNob3VsZCByZWFsbHkgb25seSBoYXBwZW4gd2hlbiBzaXplID09PSAxXG4gIH0pXG59XG5cbmNvbnN0IHV0aWxDID0gKG9wdGlvbnM6IE9wdGlvbnMpID0+IHtcbiAgY29uc3QgeyBCRVRBU1EgfSA9IGNvbnN0YW50cyhvcHRpb25zKVxuICByZXR1cm4gKHRlYW1SYXRpbmdzOiBUZWFtUmF0aW5nW10pID0+XG4gICAgTWF0aC5zcXJ0KHRlYW1SYXRpbmdzLm1hcCgoW190ZWFtTXUsIHRlYW1TaWdtYVNxLCBfdGVhbSwgX3JhbmtdKSA9PiB0ZWFtU2lnbWFTcSArIEJFVEFTUSkucmVkdWNlKHN1bSwgMCkpXG59XG5cbmV4cG9ydCBjb25zdCB1dGlsU3VtUSA9ICh0ZWFtUmF0aW5nczogVGVhbVJhdGluZ1tdLCBjOiBudW1iZXIpID0+XG4gIHRlYW1SYXRpbmdzLm1hcCgoW19xTXUsIF9xU2lnbWFTcSwgX3FUZWFtLCBxUmFua10pID0+XG4gICAgdGVhbVJhdGluZ3NcbiAgICAgIC5maWx0ZXIoKFtfaU11LCBfaVNpZ21hU3EsIF9pVGVhbSwgaVJhbmtdKSA9PiBpUmFuayA+PSBxUmFuaylcbiAgICAgIC5tYXAoKFtpTXUsIF9pU2lnbWFTcSwgX2lUZWFtLCBfaVJhbmtdKSA9PiBNYXRoLmV4cChpTXUgLyBjKSlcbiAgICAgIC5yZWR1Y2Uoc3VtLCAwKVxuICApXG5cbmV4cG9ydCBjb25zdCB1dGlsQSA9ICh0ZWFtUmF0aW5nczogVGVhbVJhdGluZ1tdKSA9PlxuICB0ZWFtUmF0aW5ncy5tYXAoXG4gICAgKFtfaU11LCBfaVNpZ21hU3EsIF9pVGVhbSwgaVJhbmtdKSA9PlxuICAgICAgdGVhbVJhdGluZ3MuZmlsdGVyKChbX3FNdSwgX3FTaWdtYVNxLCBfcVRlYW0sIHFSYW5rXSkgPT4gaVJhbmsgPT09IHFSYW5rKS5sZW5ndGhcbiAgKVxuXG5leHBvcnQgY29uc3QgZ2FtbWEgPSAob3B0aW9uczogT3B0aW9ucyk6IEdhbW1hID0+XG4gIG9wdGlvbnMuZ2FtbWEgPz9cbiAgLy8gZGVmYXVsdCB0byBpU2lnbWEgLyBjXG4gICgoYzogbnVtYmVyLCBfazogbnVtYmVyLCBfbXU6IG51bWJlciwgc2lnbWFTcTogbnVtYmVyLCBfdGVhbTogUmF0aW5nW10sIF9xUmFuazogbnVtYmVyKSA9PiBNYXRoLnNxcnQoc2lnbWFTcSkgLyBjKVxuXG5leHBvcnQgZGVmYXVsdCAob3B0aW9uczogT3B0aW9ucykgPT4gKHtcbiAgdXRpbEM6IHV0aWxDKG9wdGlvbnMpLFxuICB0ZWFtUmF0aW5nOiB0ZWFtUmF0aW5nKG9wdGlvbnMpLFxuICBnYW1tYTogZ2FtbWEob3B0aW9ucyksXG59KVxuIiwgImltcG9ydCB7IE9wdGlvbnMgfSBmcm9tICcuL3R5cGVzJ1xuXG5jb25zdCBidWlsZGVyID0gKG9wdGlvbnM6IE9wdGlvbnMpID0+IHtcbiAgLy8gaSdkIGxvdmUgdG8ga25vdyBvZiBhIGJldHRlciB3YXkgdG8gZG8gdGhpc1xuICBjb25zdCB7IHogPSAzLCBtdSA9IDI1LCBwcmV2ZW50U2lnbWFJbmNyZWFzZSA9IGZhbHNlLCBlcHNpbG9uID0gMC4wMDAxIH0gPSBvcHRpb25zXG4gIGNvbnN0IHsgdGF1ID0gbXUgLyAzMDAsIHNpZ21hID0gbXUgLyB6LCBiZXRhID0gc2lnbWEgLyAyLCBsaW1pdFNpZ21hID0gcHJldmVudFNpZ21hSW5jcmVhc2UgfSA9IG9wdGlvbnNcbiAgY29uc3QgYmV0YVNxID0gYmV0YSAqKiAyXG5cbiAgcmV0dXJuIHtcbiAgICBTSUdNQTogc2lnbWEsXG4gICAgTVU6IG11LFxuICAgIEVQU0lMT046IGVwc2lsb24sXG4gICAgVFdPQkVUQVNROiAyICogYmV0YVNxLFxuICAgIEJFVEE6IGJldGEsXG4gICAgQkVUQVNROiBiZXRhU3EsXG4gICAgWjogeixcbiAgICBUQVU6IHRhdSxcbiAgICBMSU1JVF9TSUdNQTogbGltaXRTaWdtYSxcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBidWlsZGVyXG4iLCAiaW1wb3J0IGdhdXNzaWFuIGZyb20gJ2dhdXNzaWFuJ1xuXG4vLyB1c2UgYSBzdGFuZGFyZCBub3JtYWwgZGlzdHJpYnV0aW9uIC0gbWVhbiBvZiB6ZXJvLCBzdGRkZXYvdmFyaWFuY2Ugb2Ygb25lXG5jb25zdCBub3JtYWwgPSBnYXVzc2lhbigwLCAxKVxuXG5leHBvcnQgY29uc3QgcGhpTWFqb3IgPSAoeDogbnVtYmVyKSA9PiBub3JtYWwuY2RmKHgpXG5cbmV4cG9ydCBjb25zdCBwaGlNYWpvckludmVyc2UgPSAoeDogbnVtYmVyKSA9PiBub3JtYWwucHBmKHgpXG5cbmV4cG9ydCBjb25zdCBwaGlNaW5vciA9ICh4OiBudW1iZXIpID0+IG5vcm1hbC5wZGYoeClcblxuZXhwb3J0IGNvbnN0IHYgPSAoeDogbnVtYmVyLCB0OiBudW1iZXIpID0+IHtcbiAgY29uc3QgeHQgPSB4IC0gdFxuICBjb25zdCBkZW5vbSA9IHBoaU1ham9yKHh0KVxuICByZXR1cm4gZGVub20gPCBOdW1iZXIuRVBTSUxPTiA/IC14dCA6IHBoaU1pbm9yKHh0KSAvIGRlbm9tXG59XG5cbmV4cG9ydCBjb25zdCB3ID0gKHg6IG51bWJlciwgdDogbnVtYmVyKSA9PiB7XG4gIGNvbnN0IHh0ID0geCAtIHRcbiAgY29uc3QgZGVub20gPSBwaGlNYWpvcih4dClcbiAgaWYgKGRlbm9tIDwgTnVtYmVyLkVQU0lMT04pIHtcbiAgICByZXR1cm4geCA8IDAgPyAxIDogMFxuICB9XG4gIHJldHVybiB2KHgsIHQpICogKHYoeCwgdCkgKyB4dClcbn1cblxuZXhwb3J0IGNvbnN0IHZ0ID0gKHg6IG51bWJlciwgdDogbnVtYmVyKSA9PiB7XG4gIGNvbnN0IHh4ID0gTWF0aC5hYnMoeClcbiAgY29uc3QgYiA9IHBoaU1ham9yKHQgLSB4eCkgLSBwaGlNYWpvcigtdCAtIHh4KVxuICBpZiAoYiA8IDFlLTUpIHtcbiAgICBpZiAoeCA8IDApIHJldHVybiAteCAtIHRcbiAgICByZXR1cm4gLXggKyB0XG4gIH1cbiAgY29uc3QgYSA9IHBoaU1pbm9yKC10IC0geHgpIC0gcGhpTWlub3IodCAtIHh4KVxuICByZXR1cm4gKHggPCAwID8gLWEgOiBhKSAvIGJcbn1cblxuZXhwb3J0IGNvbnN0IHd0ID0gKHg6IG51bWJlciwgdDogbnVtYmVyKSA9PiB7XG4gIGNvbnN0IHh4ID0gTWF0aC5hYnMoeClcbiAgY29uc3QgYiA9IHBoaU1ham9yKHQgLSB4eCkgLSBwaGlNYWpvcigtdCAtIHh4KVxuICByZXR1cm4gYiA8IE51bWJlci5FUFNJTE9OXG4gICAgPyAxLjBcbiAgICA6ICgodCAtIHh4KSAqIHBoaU1pbm9yKHQgLSB4eCkgKyAodCArIHh4KSAqIHBoaU1pbm9yKC10IC0geHgpKSAvIGIgKyB2dCh4LCB0KSAqIHZ0KHgsIHQpXG59XG4iXSwKICAibWFwcGluZ3MiOiAiO0FBQUEsU0FBUyxPQUFBQSxZQUFXOzs7QUNBcEIsU0FBUyxXQUFXOzs7QUNFcEIsSUFBTSxVQUFVLENBQUMsWUFBcUI7QUFFcEMsUUFBTSxFQUFFLElBQUksR0FBRyxLQUFLLElBQUksdUJBQXVCLE9BQU8sVUFBVSxLQUFPLElBQUk7QUFDM0UsUUFBTSxFQUFFLE1BQU0sS0FBSyxLQUFLLFFBQVEsS0FBSyxHQUFHLE9BQU8sUUFBUSxHQUFHLGFBQWEscUJBQXFCLElBQUk7QUFDaEcsUUFBTSxTQUFTLFFBQVE7QUFFdkIsU0FBTztBQUFBLElBQ0wsT0FBTztBQUFBLElBQ1AsSUFBSTtBQUFBLElBQ0osU0FBUztBQUFBLElBQ1QsV0FBVyxJQUFJO0FBQUEsSUFDZixNQUFNO0FBQUEsSUFDTixRQUFRO0FBQUEsSUFDUixHQUFHO0FBQUEsSUFDSCxLQUFLO0FBQUEsSUFDTCxhQUFhO0FBQUEsRUFDZjtBQUNGO0FBRUEsSUFBTyxvQkFBUTs7O0FEWFIsSUFBTSxNQUFNLENBQUMsR0FBVyxNQUFjLElBQUk7QUFhMUMsSUFBTSxXQUFXLENBQUMsT0FBZSxPQUFpQixDQUFDLE1BQU07QUFDOUQsUUFBTSxhQUFhLE1BQU0sSUFBSSxDQUFDLEdBQUcsTUFBTSxLQUFLLENBQUMsS0FBSyxDQUFDO0FBQ25ELFFBQU0sVUFBVSxJQUFJLE1BQU0sTUFBTSxNQUFNO0FBRXRD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 |
@@ -1,3 +0,5 @@ | ||
import { Rating, Options } from './types'; | ||
import { Rating, Options } from './types.js'; | ||
declare const ordinal: (rating: Rating, options?: Options) => number; | ||
export default ordinal; | ||
export { ordinal as default }; |
@@ -1,20 +0,30 @@ | ||
"use strict"; | ||
// src/constants.ts | ||
var builder = (options) => { | ||
const { z = 3, mu = 25, preventSigmaIncrease = false, epsilon = 1e-4 } = options; | ||
const { tau = mu / 300, sigma = mu / z, beta = sigma / 2, limitSigma = preventSigmaIncrease } = options; | ||
const betaSq = beta ** 2; | ||
return { | ||
SIGMA: sigma, | ||
MU: mu, | ||
EPSILON: epsilon, | ||
TWOBETASQ: 2 * betaSq, | ||
BETA: beta, | ||
BETASQ: betaSq, | ||
Z: z, | ||
TAU: tau, | ||
LIMIT_SIGMA: limitSigma | ||
}; | ||
}; | ||
var constants_default = builder; | ||
Object.defineProperty(exports, "__esModule", { | ||
value: true | ||
}); | ||
exports.default = void 0; | ||
var _constants = _interopRequireDefault(require("./constants")); | ||
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } | ||
const ordinal = (rating, options = {}) => { | ||
const { | ||
sigma, | ||
mu | ||
} = rating; | ||
const { | ||
Z | ||
} = (0, _constants.default)(options); | ||
// src/ordinal.ts | ||
var ordinal = (rating, options = {}) => { | ||
const { sigma, mu } = rating; | ||
const { Z } = constants_default(options); | ||
return mu - Z * sigma; | ||
}; | ||
var _default = exports.default = ordinal; | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfY29uc3RhbnRzIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJlIiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJvcmRpbmFsIiwicmF0aW5nIiwib3B0aW9ucyIsInNpZ21hIiwibXUiLCJaIiwiY29uc3RhbnRzIiwiX2RlZmF1bHQiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vc3JjL29yZGluYWwudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGNvbnN0YW50cyBmcm9tICcuL2NvbnN0YW50cydcbmltcG9ydCB7IFJhdGluZywgT3B0aW9ucyB9IGZyb20gJy4vdHlwZXMnXG5cbmNvbnN0IG9yZGluYWwgPSAocmF0aW5nOiBSYXRpbmcsIG9wdGlvbnM6IE9wdGlvbnMgPSB7fSk6IG51bWJlciA9PiB7XG4gIGNvbnN0IHsgc2lnbWEsIG11IH0gPSByYXRpbmdcbiAgY29uc3QgeyBaIH0gPSBjb25zdGFudHMob3B0aW9ucylcbiAgcmV0dXJuIG11IC0gWiAqIHNpZ21hXG59XG5cbmV4cG9ydCBkZWZhdWx0IG9yZGluYWxcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsSUFBQUEsVUFBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQW1DLFNBQUFELHVCQUFBRSxDQUFBLFdBQUFBLENBQUEsSUFBQUEsQ0FBQSxDQUFBQyxVQUFBLEdBQUFELENBQUEsS0FBQUUsT0FBQSxFQUFBRixDQUFBO0FBR25DLE1BQU1HLE9BQU8sR0FBR0EsQ0FBQ0MsTUFBYyxFQUFFQyxPQUFnQixHQUFHLENBQUMsQ0FBQyxLQUFhO0VBQ2pFLE1BQU07SUFBRUMsS0FBSztJQUFFQztFQUFHLENBQUMsR0FBR0gsTUFBTTtFQUM1QixNQUFNO0lBQUVJO0VBQUUsQ0FBQyxHQUFHLElBQUFDLGtCQUFTLEVBQUNKLE9BQU8sQ0FBQztFQUNoQyxPQUFPRSxFQUFFLEdBQUdDLENBQUMsR0FBR0YsS0FBSztBQUN2QixDQUFDO0FBQUEsSUFBQUksUUFBQSxHQUFBQyxPQUFBLENBQUFULE9BQUEsR0FFY0MsT0FBTyIsImlnbm9yZUxpc3QiOltdfQ== | ||
var ordinal_default = ordinal; | ||
export { | ||
ordinal_default as default | ||
}; | ||
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL2NvbnN0YW50cy50cyIsICIuLi9zcmMvb3JkaW5hbC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0IHsgT3B0aW9ucyB9IGZyb20gJy4vdHlwZXMnXG5cbmNvbnN0IGJ1aWxkZXIgPSAob3B0aW9uczogT3B0aW9ucykgPT4ge1xuICAvLyBpJ2QgbG92ZSB0byBrbm93IG9mIGEgYmV0dGVyIHdheSB0byBkbyB0aGlzXG4gIGNvbnN0IHsgeiA9IDMsIG11ID0gMjUsIHByZXZlbnRTaWdtYUluY3JlYXNlID0gZmFsc2UsIGVwc2lsb24gPSAwLjAwMDEgfSA9IG9wdGlvbnNcbiAgY29uc3QgeyB0YXUgPSBtdSAvIDMwMCwgc2lnbWEgPSBtdSAvIHosIGJldGEgPSBzaWdtYSAvIDIsIGxpbWl0U2lnbWEgPSBwcmV2ZW50U2lnbWFJbmNyZWFzZSB9ID0gb3B0aW9uc1xuICBjb25zdCBiZXRhU3EgPSBiZXRhICoqIDJcblxuICByZXR1cm4ge1xuICAgIFNJR01BOiBzaWdtYSxcbiAgICBNVTogbXUsXG4gICAgRVBTSUxPTjogZXBzaWxvbixcbiAgICBUV09CRVRBU1E6IDIgKiBiZXRhU3EsXG4gICAgQkVUQTogYmV0YSxcbiAgICBCRVRBU1E6IGJldGFTcSxcbiAgICBaOiB6LFxuICAgIFRBVTogdGF1LFxuICAgIExJTUlUX1NJR01BOiBsaW1pdFNpZ21hLFxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJ1aWxkZXJcbiIsICJpbXBvcnQgY29uc3RhbnRzIGZyb20gJy4vY29uc3RhbnRzJ1xuaW1wb3J0IHsgUmF0aW5nLCBPcHRpb25zIH0gZnJvbSAnLi90eXBlcydcblxuY29uc3Qgb3JkaW5hbCA9IChyYXRpbmc6IFJhdGluZywgb3B0aW9uczogT3B0aW9ucyA9IHt9KTogbnVtYmVyID0+IHtcbiAgY29uc3QgeyBzaWdtYSwgbXUgfSA9IHJhdGluZ1xuICBjb25zdCB7IFogfSA9IGNvbnN0YW50cyhvcHRpb25zKVxuICByZXR1cm4gbXUgLSBaICogc2lnbWFcbn1cblxuZXhwb3J0IGRlZmF1bHQgb3JkaW5hbFxuIl0sCiAgIm1hcHBpbmdzIjogIjtBQUVBLElBQU0sVUFBVSxDQUFDLFlBQXFCO0FBRXBDLFFBQU0sRUFBRSxJQUFJLEdBQUcsS0FBSyxJQUFJLHVCQUF1QixPQUFPLFVBQVUsS0FBTyxJQUFJO0FBQzNFLFFBQU0sRUFBRSxNQUFNLEtBQUssS0FBSyxRQUFRLEtBQUssR0FBRyxPQUFPLFFBQVEsR0FBRyxhQUFhLHFCQUFxQixJQUFJO0FBQ2hHLFFBQU0sU0FBUyxRQUFRO0FBRXZCLFNBQU87QUFBQSxJQUNMLE9BQU87QUFBQSxJQUNQLElBQUk7QUFBQSxJQUNKLFNBQVM7QUFBQSxJQUNULFdBQVcsSUFBSTtBQUFBLElBQ2YsTUFBTTtBQUFBLElBQ04sUUFBUTtBQUFBLElBQ1IsR0FBRztBQUFBLElBQ0gsS0FBSztBQUFBLElBQ0wsYUFBYTtBQUFBLEVBQ2Y7QUFDRjtBQUVBLElBQU8sb0JBQVE7OztBQ2xCZixJQUFNLFVBQVUsQ0FBQyxRQUFnQixVQUFtQixDQUFDLE1BQWM7QUFDakUsUUFBTSxFQUFFLE9BQU8sR0FBRyxJQUFJO0FBQ3RCLFFBQU0sRUFBRSxFQUFFLElBQUksa0JBQVUsT0FBTztBQUMvQixTQUFPLEtBQUssSUFBSTtBQUNsQjtBQUVBLElBQU8sa0JBQVE7IiwKICAibmFtZXMiOiBbXQp9Cg== |
@@ -1,3 +0,5 @@ | ||
import { Options, Team } from './types'; | ||
import { Team, Options } from './types.js'; | ||
declare const predictWin: (teams: Team[], options?: Options) => number | undefined; | ||
export default predictWin; | ||
export { predictWin as default }; |
@@ -1,34 +0,97 @@ | ||
"use strict"; | ||
// src/predict-draw.ts | ||
import { flatten } from "ramda"; | ||
Object.defineProperty(exports, "__esModule", { | ||
value: true | ||
// src/constants.ts | ||
var builder = (options) => { | ||
const { z = 3, mu = 25, preventSigmaIncrease = false, epsilon = 1e-4 } = options; | ||
const { tau = mu / 300, sigma = mu / z, beta = sigma / 2, limitSigma = preventSigmaIncrease } = options; | ||
const betaSq = beta ** 2; | ||
return { | ||
SIGMA: sigma, | ||
MU: mu, | ||
EPSILON: epsilon, | ||
TWOBETASQ: 2 * betaSq, | ||
BETA: beta, | ||
BETASQ: betaSq, | ||
Z: z, | ||
TAU: tau, | ||
LIMIT_SIGMA: limitSigma | ||
}; | ||
}; | ||
var constants_default = builder; | ||
// src/util.ts | ||
import { zip } from "ramda"; | ||
var sum = (a, b) => a + b; | ||
var rankings = (teams, rank = []) => { | ||
const teamScores = teams.map((_, i) => rank[i] || i); | ||
const outRank = new Array(teams.length); | ||
let s = 0; | ||
for (let j = 0; j < teamScores.length; j += 1) { | ||
if (j > 0 && teamScores[j - 1] < teamScores[j]) { | ||
s = j; | ||
} | ||
outRank[j] = s; | ||
} | ||
return outRank; | ||
}; | ||
var teamRating = (options) => (game) => { | ||
const rank = rankings(game, options.rank); | ||
return game.map((team, i) => [ | ||
// mu[i] | ||
team.map(({ mu }) => mu).reduce(sum, 0), | ||
// sigma^2[i] | ||
team.map(({ sigma }) => sigma * sigma).reduce(sum, 0), | ||
// (original team data) | ||
team, | ||
// rank[i] | ||
rank[i] | ||
]); | ||
}; | ||
var utilC = (options) => { | ||
const { BETASQ } = constants_default(options); | ||
return (teamRatings) => Math.sqrt(teamRatings.map(([_teamMu, teamSigmaSq, _team, _rank]) => teamSigmaSq + BETASQ).reduce(sum, 0)); | ||
}; | ||
var gamma = (options) => { | ||
var _a; | ||
return (_a = options.gamma) != null ? _a : ( | ||
// default to iSigma / c | ||
(c, _k, _mu, sigmaSq, _team, _qRank) => Math.sqrt(sigmaSq) / c | ||
); | ||
}; | ||
var util_default = (options) => ({ | ||
utilC: utilC(options), | ||
teamRating: teamRating(options), | ||
gamma: gamma(options) | ||
}); | ||
exports.default = void 0; | ||
var _ramda = require("ramda"); | ||
var _constants = _interopRequireDefault(require("./constants")); | ||
var _util = _interopRequireWildcard(require("./util")); | ||
var _statistics = require("./statistics"); | ||
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); } | ||
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; } | ||
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } | ||
const predictWin = (teams, options = {}) => { | ||
const { | ||
teamRating | ||
} = (0, _util.default)(options); | ||
const { | ||
BETASQ, | ||
BETA | ||
} = (0, _constants.default)(options); | ||
// src/statistics.ts | ||
import gaussian from "gaussian"; | ||
var normal = gaussian(0, 1); | ||
var phiMajor = (x) => normal.cdf(x); | ||
var phiMajorInverse = (x) => normal.ppf(x); | ||
// src/predict-draw.ts | ||
var predictWin = (teams, options = {}) => { | ||
const { teamRating: teamRating2 } = util_default(options); | ||
const { BETASQ, BETA } = constants_default(options); | ||
const n = teams.length; | ||
if (n === 0) return undefined; | ||
if (n === 0) return void 0; | ||
if (n === 1) return 1; | ||
const denom = n * (n - 1) / (n > 2 ? 1 : 2); | ||
const teamRatings = teamRating(teams); | ||
const drawMargin = Math.sqrt((0, _ramda.flatten)(teams).length) * BETA * (0, _statistics.phiMajorInverse)((1 + 1 / n) / 2); | ||
return Math.abs(teamRatings.map(([muA, sigmaSqA], i) => teamRatings.filter((_, q) => i !== q).map(([muB, sigmaSqB]) => { | ||
const sigmaBar = Math.sqrt(n * BETASQ + sigmaSqA + sigmaSqB); | ||
return (0, _statistics.phiMajor)((drawMargin - muA + muB) / sigmaBar) - (0, _statistics.phiMajor)((muA - muB - drawMargin) / sigmaBar); | ||
})).flat().reduce(_util.sum, 0)) / denom; | ||
const teamRatings = teamRating2(teams); | ||
const drawMargin = Math.sqrt(flatten(teams).length) * BETA * phiMajorInverse((1 + 1 / n) / 2); | ||
return Math.abs( | ||
teamRatings.map( | ||
([muA, sigmaSqA], i) => teamRatings.filter((_, q) => i !== q).map(([muB, sigmaSqB]) => { | ||
const sigmaBar = Math.sqrt(n * BETASQ + sigmaSqA + sigmaSqB); | ||
return phiMajor((drawMargin - muA + muB) / sigmaBar) - phiMajor((muA - muB - drawMargin) / sigmaBar); | ||
}) | ||
).flat().reduce(sum, 0) | ||
) / denom; | ||
}; | ||
var _default = exports.default = predictWin; | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmFtZGEiLCJyZXF1aXJlIiwiX2NvbnN0YW50cyIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfdXRpbCIsIl9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkIiwiX3N0YXRpc3RpY3MiLCJfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUiLCJlIiwiV2Vha01hcCIsInIiLCJ0IiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJoYXMiLCJnZXQiLCJuIiwiX19wcm90b19fIiwiYSIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwidSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImkiLCJzZXQiLCJwcmVkaWN0V2luIiwidGVhbXMiLCJvcHRpb25zIiwidGVhbVJhdGluZyIsInV0aWwiLCJCRVRBU1EiLCJCRVRBIiwiY29uc3RhbnRzIiwibGVuZ3RoIiwidW5kZWZpbmVkIiwiZGVub20iLCJ0ZWFtUmF0aW5ncyIsImRyYXdNYXJnaW4iLCJNYXRoIiwic3FydCIsImZsYXR0ZW4iLCJwaGlNYWpvckludmVyc2UiLCJhYnMiLCJtYXAiLCJtdUEiLCJzaWdtYVNxQSIsImZpbHRlciIsIl8iLCJxIiwibXVCIiwic2lnbWFTcUIiLCJzaWdtYUJhciIsInBoaU1ham9yIiwiZmxhdCIsInJlZHVjZSIsInN1bSIsIl9kZWZhdWx0IiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uL3NyYy9wcmVkaWN0LWRyYXcudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZmxhdHRlbiB9IGZyb20gJ3JhbWRhJ1xuaW1wb3J0IGNvbnN0YW50cyBmcm9tICcuL2NvbnN0YW50cydcbmltcG9ydCB1dGlsLCB7IHN1bSB9IGZyb20gJy4vdXRpbCdcbmltcG9ydCB7IHBoaU1ham9yLCBwaGlNYWpvckludmVyc2UgfSBmcm9tICcuL3N0YXRpc3RpY3MnXG5pbXBvcnQgeyBPcHRpb25zLCBUZWFtIH0gZnJvbSAnLi90eXBlcydcblxuY29uc3QgcHJlZGljdFdpbiA9ICh0ZWFtczogVGVhbVtdLCBvcHRpb25zOiBPcHRpb25zID0ge30pID0+IHtcbiAgY29uc3QgeyB0ZWFtUmF0aW5nIH0gPSB1dGlsKG9wdGlvbnMpXG4gIGNvbnN0IHsgQkVUQVNRLCBCRVRBIH0gPSBjb25zdGFudHMob3B0aW9ucylcblxuICBjb25zdCBuID0gdGVhbXMubGVuZ3RoXG4gIGlmIChuID09PSAwKSByZXR1cm4gdW5kZWZpbmVkXG4gIGlmIChuID09PSAxKSByZXR1cm4gMVxuXG4gIGNvbnN0IGRlbm9tID0gKG4gKiAobiAtIDEpKSAvIChuID4gMiA/IDEgOiAyKVxuICBjb25zdCB0ZWFtUmF0aW5ncyA9IHRlYW1SYXRpbmcodGVhbXMpXG4gIGNvbnN0IGRyYXdNYXJnaW4gPSBNYXRoLnNxcnQoZmxhdHRlbih0ZWFtcykubGVuZ3RoKSAqIEJFVEEgKiBwaGlNYWpvckludmVyc2UoKDEgKyAxIC8gbikgLyAyKVxuXG4gIHJldHVybiAoXG4gICAgTWF0aC5hYnMoXG4gICAgICB0ZWFtUmF0aW5nc1xuICAgICAgICAubWFwKChbbXVBLCBzaWdtYVNxQV0sIGkpID0+XG4gICAgICAgICAgdGVhbVJhdGluZ3NcbiAgICAgICAgICAgIC5maWx0ZXIoKF8sIHEpID0+IGkgIT09IHEpXG4gICAgICAgICAgICAubWFwKChbbXVCLCBzaWdtYVNxQl0pID0+IHtcbiAgICAgICAgICAgICAgY29uc3Qgc2lnbWFCYXIgPSBNYXRoLnNxcnQobiAqIEJFVEFTUSArIHNpZ21hU3FBICsgc2lnbWFTcUIpXG4gICAgICAgICAgICAgIHJldHVybiBwaGlNYWpvcigoZHJhd01hcmdpbiAtIG11QSArIG11QikgLyBzaWdtYUJhcikgLSBwaGlNYWpvcigobXVBIC0gbXVCIC0gZHJhd01hcmdpbikgLyBzaWdtYUJhcilcbiAgICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICAgLmZsYXQoKVxuICAgICAgICAucmVkdWNlKHN1bSwgMClcbiAgICApIC8gZGVub21cbiAgKVxufVxuXG5leHBvcnQg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 | ||
var predict_draw_default = predictWin; | ||
export { | ||
predict_draw_default as default | ||
}; | ||
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL3ByZWRpY3QtZHJhdy50cyIsICIuLi9zcmMvY29uc3RhbnRzLnRzIiwgIi4uL3NyYy91dGlsLnRzIiwgIi4uL3NyYy9zdGF0aXN0aWNzLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJpbXBvcnQgeyBmbGF0dGVuIH0gZnJvbSAncmFtZGEnXG5pbXBvcnQgY29uc3RhbnRzIGZyb20gJy4vY29uc3RhbnRzJ1xuaW1wb3J0IHV0aWwsIHsgc3VtIH0gZnJvbSAnLi91dGlsJ1xuaW1wb3J0IHsgcGhpTWFqb3IsIHBoaU1ham9ySW52ZXJzZSB9IGZyb20gJy4vc3RhdGlzdGljcydcbmltcG9ydCB7IE9wdGlvbnMsIFRlYW0gfSBmcm9tICcuL3R5cGVzJ1xuXG5jb25zdCBwcmVkaWN0V2luID0gKHRlYW1zOiBUZWFtW10sIG9wdGlvbnM6IE9wdGlvbnMgPSB7fSkgPT4ge1xuICBjb25zdCB7IHRlYW1SYXRpbmcgfSA9IHV0aWwob3B0aW9ucylcbiAgY29uc3QgeyBCRVRBU1EsIEJFVEEgfSA9IGNvbnN0YW50cyhvcHRpb25zKVxuXG4gIGNvbnN0IG4gPSB0ZWFtcy5sZW5ndGhcbiAgaWYgKG4gPT09IDApIHJldHVybiB1bmRlZmluZWRcbiAgaWYgKG4gPT09IDEpIHJldHVybiAxXG5cbiAgY29uc3QgZGVub20gPSAobiAqIChuIC0gMSkpIC8gKG4gPiAyID8gMSA6IDIpXG4gIGNvbnN0IHRlYW1SYXRpbmdzID0gdGVhbVJhdGluZyh0ZWFtcylcbiAgY29uc3QgZHJhd01hcmdpbiA9IE1hdGguc3FydChmbGF0dGVuKHRlYW1zKS5sZW5ndGgpICogQkVUQSAqIHBoaU1ham9ySW52ZXJzZSgoMSArIDEgLyBuKSAvIDIpXG5cbiAgcmV0dXJuIChcbiAgICBNYXRoLmFicyhcbiAgICAgIHRlYW1SYXRpbmdzXG4gICAgICAgIC5tYXAoKFttdUEsIHNpZ21hU3FBXSwgaSkgPT5cbiAgICAgICAgICB0ZWFtUmF0aW5nc1xuICAgICAgICAgICAgLmZpbHRlcigoXywgcSkgPT4gaSAhPT0gcSlcbiAgICAgICAgICAgIC5tYXAoKFttdUIsIHNpZ21hU3FCXSkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBzaWdtYUJhciA9IE1hdGguc3FydChuICogQkVUQVNRICsgc2lnbWFTcUEgKyBzaWdtYVNxQilcbiAgICAgICAgICAgICAgcmV0dXJuIHBoaU1ham9yKChkcmF3TWFyZ2luIC0gbXVBICsgbXVCKSAvIHNpZ21hQmFyKSAtIHBoaU1ham9yKChtdUEgLSBtdUIgLSBkcmF3TWFyZ2luKSAvIHNpZ21hQmFyKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgICAuZmxhdCgpXG4gICAgICAgIC5yZWR1Y2Uoc3VtLCAwKVxuICAgICkgLyBkZW5vbVxuICApXG59XG5cbmV4cG9ydCBkZWZhdWx0IHByZWRpY3RXaW5cbiIsICJpbXBvcnQgeyBPcHRpb25zIH0gZnJvbSAnLi90eXBlcydcblxuY29uc3QgYnVpbGRlciA9IChvcHRpb25zOiBPcHRpb25zKSA9PiB7XG4gIC8vIGknZCBsb3ZlIHRvIGtub3cgb2YgYSBiZXR0ZXIgd2F5IHRvIGRvIHRoaXNcbiAgY29uc3QgeyB6ID0gMywgbXUgPSAyNSwgcHJldmVudFNpZ21hSW5jcmVhc2UgPSBmYWxzZSwgZXBzaWxvbiA9IDAuMDAwMSB9ID0gb3B0aW9uc1xuICBjb25zdCB7IHRhdSA9IG11IC8gMzAwLCBzaWdtYSA9IG11IC8geiwgYmV0YSA9IHNpZ21hIC8gMiwgbGltaXRTaWdtYSA9IHByZXZlbnRTaWdtYUluY3JlYXNlIH0gPSBvcHRpb25zXG4gIGNvbnN0IGJldGFTcSA9IGJldGEgKiogMlxuXG4gIHJldHVybiB7XG4gICAgU0lHTUE6IHNpZ21hLFxuICAgIE1VOiBtdSxcbiAgICBFUFNJTE9OOiBlcHNpbG9uLFxuICAgIFRXT0JFVEFTUTogMiAqIGJldGFTcSxcbiAgICBCRVRBOiBiZXRhLFxuICAgIEJFVEFTUTogYmV0YVNxLFxuICAgIFo6IHosXG4gICAgVEFVOiB0YXUsXG4gICAgTElNSVRfU0lHTUE6IGxpbWl0U2lnbWEsXG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgYnVpbGRlclxuIiwgImltcG9ydCB7IHppcCB9IGZyb20gJ3JhbWRhJ1xuaW1wb3J0IGNvbnN0YW50cyBmcm9tICcuL2NvbnN0YW50cydcbmltcG9ydCB7IFJhdGluZywgT3B0aW9ucywgR2FtbWEsIFRlYW0sIFJhbmsgfSBmcm9tICcuL3R5cGVzJ1xuXG5leHBvcnQgdHlwZSBUZWFtTXUgPSBudW1iZXJcblxuZXhwb3J0IHR5cGUgVGVhbVNpZ21hU3EgPSBudW1iZXJcblxuZXhwb3J0IHR5cGUgVGVhbVJhdGluZyA9IFtUZWFtTXUsIFRlYW1TaWdtYVNxLCBUZWFtLCBSYW5rXVxuXG5leHBvcnQgY29uc3Qgc3VtID0gKGE6IG51bWJlciwgYjogbnVtYmVyKSA9PiBhICsgYlxuXG5leHBvcnQgY29uc3Qgc2NvcmUgPSAocTogbnVtYmVyLCBpOiBudW1iZXIpID0+IHtcbiAgaWYgKHEgPCBpKSB7XG4gICAgcmV0dXJuIDAuMFxuICB9XG4gIGlmIChxID4gaSkge1xuICAgIHJldHVybiAxLjBcbiAgfVxuICAvLyBxID09PSBpXG4gIHJldHVybiAwLjVcbn1cblxuZXhwb3J0IGNvbnN0IHJhbmtpbmdzID0gKHRlYW1zOiBUZWFtW10sIHJhbms6IG51bWJlcltdID0gW10pID0+IHtcbiAgY29uc3QgdGVhbVNjb3JlcyA9IHRlYW1zLm1hcCgoXywgaSkgPT4gcmFua1tpXSB8fCBpKVxuICBjb25zdCBvdXRSYW5rID0gbmV3IEFycmF5KHRlYW1zLmxlbmd0aClcblxuICBsZXQgcyA9IDBcbiAgZm9yIChsZXQgaiA9IDA7IGogPCB0ZWFtU2NvcmVzLmxlbmd0aDsgaiArPSAxKSB7XG4gICAgaWYgKGogPiAwICYmIHRlYW1TY29yZXNbaiAtIDFdIDwgdGVhbVNjb3Jlc1tqXSkge1xuICAgICAgcyA9IGpcbiAgICB9XG4gICAgb3V0UmFua1tqXSA9IHNcbiAgfVxuICByZXR1cm4gb3V0UmFua1xufVxuXG4vLyB0aGlzIGlzIGJhc2ljYWxseSBzaGFyZWQgY29kZSwgcHJlY29tcHV0ZWQgZm9yIGV2ZXJ5IG1vZGVsXG5jb25zdCB0ZWFtUmF0aW5nID1cbiAgKG9wdGlvbnM6IE9wdGlvbnMpID0+XG4gIChnYW1lOiBUZWFtW10pOiBUZWFtUmF0aW5nW10gPT4ge1xuICAgIGNvbnN0IHJhbmsgPSByYW5raW5ncyhnYW1lLCBvcHRpb25zLnJhbmspXG4gICAgcmV0dXJuIGdhbWUubWFwKCh0ZWFtLCBpKSA9PiBbXG4gICAgICAvLyBtdVtpXVxuICAgICAgdGVhbS5tYXAoKHsgbXUgfSkgPT4gbXUpLnJlZHVjZShzdW0sIDApLFxuICAgICAgLy8gc2lnbWFeMltpXVxuICAgICAgdGVhbS5tYXAoKHsgc2lnbWEgfSkgPT4gc2lnbWEgKiBzaWdtYSkucmVkdWNlKHN1bSwgMCksXG4gICAgICAvLyAob3JpZ2luYWwgdGVhbSBkYXRhKVxuICAgICAgdGVhbSxcbiAgICAgIC8vIHJhbmtbaV1cbiAgICAgIHJhbmtbaV0sXG4gICAgXSlcbiAgfVxuXG5leHBvcnQgY29uc3QgbGFkZGVyUGFpcnMgPSA8VD4ocmFua3M6IFRbXSk6IFRbXVtdID0+IHtcbiAgY29uc3Qgc2l6ZSA9IHJhbmtzLmxlbmd0aFxuICBjb25zdCBsZWZ0ID0gW3VuZGVmaW5lZCwgLi4ucmFua3Muc2xpY2UoMCwgc2l6ZSAtIDEpXVxuICBjb25zdCByaWdodCA9IFsuLi5yYW5rcy5zbGljZSgxKSwgdW5kZWZpbmVkXVxuICByZXR1cm4gemlwKGxlZnQsIHJpZ2h0KS5tYXAoKFtsLCByXSkgPT4ge1xuICAgIGlmIChsICE9PSB1bmRlZmluZWQgJiYgciAhPT0gdW5kZWZpbmVkKSByZXR1cm4gW2wsIHJdXG4gICAgaWYgKGwgIT09IHVuZGVmaW5lZCAmJiByID09PSB1bmRlZmluZWQpIHJldHVybiBbbF1cbiAgICBpZiAobCA9PT0gdW5kZWZpbmVkICYmIHIgIT09IHVuZGVmaW5lZCkgcmV0dXJuIFtyXVxuICAgIHJldHVybiBbXSAvLyB0aGlzIHNob3VsZCByZWFsbHkgb25seSBoYXBwZW4gd2hlbiBzaXplID09PSAxXG4gIH0pXG59XG5cbmNvbnN0IHV0aWxDID0gKG9wdGlvbnM6IE9wdGlvbnMpID0+IHtcbiAgY29uc3QgeyBCRVRBU1EgfSA9IGNvbnN0YW50cyhvcHRpb25zKVxuICByZXR1cm4gKHRlYW1SYXRpbmdzOiBUZWFtUmF0aW5nW10pID0+XG4gICAgTWF0aC5zcXJ0KHRlYW1SYXRpbmdzLm1hcCgoW190ZWFtTXUsIHRlYW1TaWdtYVNxLCBfdGVhbSwgX3JhbmtdKSA9PiB0ZWFtU2lnbWFTcSArIEJFVEFTUSkucmVkdWNlKHN1bSwgMCkpXG59XG5cbmV4cG9ydCBjb25zdCB1dGlsU3VtUSA9ICh0ZWFtUmF0aW5nczogVGVhbVJhdGluZ1tdLCBjOiBudW1iZXIpID0+XG4gIHRlYW1SYXRpbmdzLm1hcCgoW19xTXUsIF9xU2lnbWFTcSwgX3FUZWFtLCBxUmFua10pID0+XG4gICAgdGVhbVJhdGluZ3NcbiAgICAgIC5maWx0ZXIoKFtfaU11LCBfaVNpZ21hU3EsIF9pVGVhbSwgaVJhbmtdKSA9PiBpUmFuayA+PSBxUmFuaylcbiAgICAgIC5tYXAoKFtpTXUsIF9pU2lnbWFTcSwgX2lUZWFtLCBfaVJhbmtdKSA9PiBNYXRoLmV4cChpTXUgLyBjKSlcbiAgICAgIC5yZWR1Y2Uoc3VtLCAwKVxuICApXG5cbmV4cG9ydCBjb25zdCB1dGlsQSA9ICh0ZWFtUmF0aW5nczogVGVhbVJhdGluZ1tdKSA9PlxuICB0ZWFtUmF0aW5ncy5tYXAoXG4gICAgKFtfaU11LCBfaVNpZ21hU3EsIF9pVGVhbSwgaVJhbmtdKSA9PlxuICAgICAgdGVhbVJhdGluZ3MuZmlsdGVyKChbX3FNdSwgX3FTaWdtYVNxLCBfcVRlYW0sIHFSYW5rXSkgPT4gaVJhbmsgPT09IHFSYW5rKS5sZW5ndGhcbiAgKVxuXG5leHBvcnQgY29uc3QgZ2FtbWEgPSAob3B0aW9uczogT3B0aW9ucyk6IEdhbW1hID0+XG4gIG9wdGlvbnMuZ2FtbWEgPz9cbiAgLy8gZGVmYXVsdCB0byBpU2lnbWEgLyBjXG4gICgoYzogbnVtYmVyLCBfazogbnVtYmVyLCBfbXU6IG51bWJlciwgc2lnbWFTcTogbnVtYmVyLCBfdGVhbTogUmF0aW5nW10sIF9xUmFuazogbnVtYmVyKSA9PiBNYXRoLnNxcnQoc2lnbWFTcSkgLyBjKVxuXG5leHBvcnQgZGVmYXVsdCAob3B0aW9uczogT3B0aW9ucykgPT4gKHtcbiAgdXRpbEM6IHV0aWxDKG9wdGlvbnMpLFxuICB0ZWFtUmF0aW5nOiB0ZWFtUmF0aW5nKG9wdGlvbnMpLFxuICBnYW1tYTogZ2FtbWEob3B0aW9ucyksXG59KVxuIiwgImltcG9ydCBnYXVzc2lhbiBmcm9tICdnYXVzc2lhbidcblxuLy8gdXNlIGEgc3RhbmRhcmQgbm9ybWFsIGRpc3RyaWJ1dGlvbiAtIG1lYW4gb2YgemVybywgc3RkZGV2L3ZhcmlhbmNlIG9mIG9uZVxuY29uc3Qgbm9ybWFsID0gZ2F1c3NpYW4oMCwgMSlcblxuZXhwb3J0IGNvbnN0IHBoaU1ham9yID0gKHg6IG51bWJlcikgPT4gbm9ybWFsLmNkZih4KVxuXG5leHBvcnQgY29uc3QgcGhpTWFqb3JJbnZlcnNlID0gKHg6IG51bWJlcikgPT4gbm9ybWFsLnBwZih4KVxuXG5leHBvcnQgY29uc3QgcGhpTWlub3IgPSAoeDogbnVtYmVyKSA9PiBub3JtYWwucGRmKHgpXG5cbmV4cG9ydCBjb25zdCB2ID0gKHg6IG51bWJlciwgdDogbnVtYmVyKSA9PiB7XG4gIGNvbnN0IHh0ID0geCAtIHRcbiAgY29uc3QgZGVub20gPSBwaGlNYWpvcih4dClcbiAgcmV0dXJuIGRlbm9tIDwgTnVtYmVyLkVQU0lMT04gPyAteHQgOiBwaGlNaW5vcih4dCkgLyBkZW5vbVxufVxuXG5leHBvcnQgY29uc3QgdyA9ICh4OiBudW1iZXIsIHQ6IG51bWJlcikgPT4ge1xuICBjb25zdCB4dCA9IHggLSB0XG4gIGNvbnN0IGRlbm9tID0gcGhpTWFqb3IoeHQpXG4gIGlmIChkZW5vbSA8IE51bWJlci5FUFNJTE9OKSB7XG4gICAgcmV0dXJuIHggPCAwID8gMSA6IDBcbiAgfVxuICByZXR1cm4gdih4LCB0KSAqICh2KHgsIHQpICsgeHQpXG59XG5cbmV4cG9ydCBjb25zdCB2dCA9ICh4OiBudW1iZXIsIHQ6IG51bWJlcikgPT4ge1xuICBjb25zdCB4eCA9IE1hdGguYWJzKHgpXG4gIGNvbnN0IGIgPSBwaGlNYWpvcih0IC0geHgpIC0gcGhpTWFqb3IoLXQgLSB4eClcbiAgaWYgKGIgPCAxZS01KSB7XG4gICAgaWYgKHggPCAwKSByZXR1cm4gLXggLSB0XG4gICAgcmV0dXJuIC14ICsgdFxuICB9XG4gIGNvbnN0IGEgPSBwaGlNaW5vcigtdCAtIHh4KSAtIHBoaU1pbm9yKHQgLSB4eClcbiAgcmV0dXJuICh4IDwgMCA/IC1hIDogYSkgLyBiXG59XG5cbmV4cG9ydCBjb25zdCB3dCA9ICh4OiBudW1iZXIsIHQ6IG51bWJlcikgPT4ge1xuICBjb25zdCB4eCA9IE1hdGguYWJzKHgpXG4gIGNvbnN0IGIgPSBwaGlNYWpvcih0IC0geHgpIC0gcGhpTWFqb3IoLXQgLSB4eClcbiAgcmV0dXJuIGIgPCBOdW1iZXIuRVBTSUxPTlxuICAgID8gMS4wXG4gICAgOiAoKHQgLSB4eCkgKiBwaGlNaW5vcih0IC0geHgpICsgKHQgKyB4eCkgKiBwaGlNaW5vcigtdCAtIHh4KSkgLyBiICsgdnQoeCwgdCkgKiB2dCh4LCB0KVxufVxuIl0sCiAgIm1hcHBpbmdzIjogIjtBQUFBLFNBQVMsZUFBZTs7O0FDRXhCLElBQU0sVUFBVSxDQUFDLFlBQXFCO0FBRXBDLFFBQU0sRUFBRSxJQUFJLEdBQUcsS0FBSyxJQUFJLHVCQUF1QixPQUFPLFVBQVUsS0FBTyxJQUFJO0FBQzNFLFFBQU0sRUFBRSxNQUFNLEtBQUssS0FBSyxRQUFRLEtBQUssR0FBRyxPQUFPLFFBQVEsR0FBRyxhQUFhLHFCQUFxQixJQUFJO0FBQ2hHLFFBQU0sU0FBUyxRQUFRO0FBRXZCLFNBQU87QUFBQSxJQUNMLE9BQU87QUFBQSxJQUNQLElBQUk7QUFBQSxJQUNKLFNBQVM7QUFBQSxJQUNULFdBQVcsSUFBSTtBQUFBLElBQ2YsTUFBTTtBQUFBLElBQ04sUUFBUTtBQUFBLElBQ1IsR0FBRztBQUFBLElBQ0gsS0FBSztBQUFBLElBQ0wsYUFBYTtBQUFBLEVBQ2Y7QUFDRjtBQUVBLElBQU8sb0JBQVE7OztBQ3JCZixTQUFTLFdBQVc7QUFVYixJQUFNLE1BQU0sQ0FBQyxHQUFXLE1BQWMsSUFBSTtBQWExQyxJQUFNLFdBQVcsQ0FBQyxPQUFlLE9BQWlCLENBQUMsTUFBTTtBQUM5RCxRQUFNLGFBQWEsTUFBTSxJQUFJLENBQUMsR0FBRyxNQUFNLEtBQUssQ0FBQyxLQUFLLENBQUM7QUFDbkQsUUFBTSxVQUFVLElBQUksTUFBTSxNQUFNLE1BQU07QUFFdEMsTUFBSSxJQUFJO0FBQ1IsV0FBUyxJQUFJLEdBQUcsSUFBSSxXQUFXLFFBQVEsS0FBSyxHQUFHO0FBQzdDLFFBQUksSUFBSSxLQUFLLFdBQVcsSUFBSSxDQUFDLElBQUksV0FBVyxDQUFDLEdBQUc7QUFDOUMsVUFBSTtBQUFBLElBQ047QUFDQSxZQUFRLENBQUMsSUFBSTtBQUFBLEVBQ2Y7QUFDQSxTQUFPO0FBQ1Q7QUFHQSxJQUFNLGFBQ0osQ0FBQyxZQUNELENBQUMsU0FBK0I7QUFDOUIsUUFBTSxPQUFPLFNBQVMsTUFBTSxRQUFRLElBQUk7QUFDeEMsU0FBTyxLQUFLLElBQUksQ0FBQyxNQUFNLE1BQU07QUFBQTtBQUFBLElBRTNCLEtBQUssSUFBSSxDQUFDLEVBQUUsR0FBRyxNQUFNLEVBQUUsRUFBRSxPQUFPLEtBQUssQ0FBQztBQUFBO0FBQUEsSUFFdEMsS0FBSyxJQUFJLENBQUMsRUFBRSxNQUFNLE1BQU0sUUFBUSxLQUFLLEVBQUUsT0FBTyxLQUFLLENBQUM7QUFBQTtBQUFBLElBRXBEO0FBQUE7QUFBQSxJQUVBLEtBQUssQ0FBQztBQUFBLEVBQ1IsQ0FBQztBQUNIO0FBY0YsSUFBTSxRQUFRLENBQUMsWUFBcUI7QUFDbEMsUUFBTSxFQUFFLE9BQU8sSUFBSSxrQkFBVSxPQUFPO0FBQ3BDLFNBQU8sQ0FBQyxnQkFDTixLQUFLLEtBQUssWUFBWSxJQUFJLENBQUMsQ0FBQyxTQUFTLGFBQWEsT0FBTyxLQUFLLE1BQU0sY0FBYyxNQUFNLEVBQUUsT0FBTyxLQUFLLENBQUMsQ0FBQztBQUM1RztBQWdCTyxJQUFNLFFBQVEsQ0FBQyxZQUF5QjtBQXRGL0M7QUF1RkUsdUJBQVEsVUFBUjtBQUFBO0FBQUEsSUFFQyxDQUFDLEdBQVcsSUFBWSxLQUFhLFNBQWlCLE9BQWlCLFdBQW1CLEtBQUssS0FBSyxPQUFPLElBQUk7QUFBQTtBQUFBO0FBRWxILElBQU8sZUFBUSxDQUFDLGFBQXNCO0FBQUEsRUFDcEMsT0FBTyxNQUFNLE9BQU87QUFBQSxFQUNwQixZQUFZLFdBQVcsT0FBTztBQUFBLEVBQzlCLE9BQU8sTUFBTSxPQUFPO0FBQ3RCOzs7QUMvRkEsT0FBTyxjQUFjO0FBR3JCLElBQU0sU0FBUyxTQUFTLEdBQUcsQ0FBQztBQUVyQixJQUFNLFdBQVcsQ0FBQyxNQUFjLE9BQU8sSUFBSSxDQUFDO0FBRTVDLElBQU0sa0JBQWtCLENBQUMsTUFBYyxPQUFPLElBQUksQ0FBQzs7O0FIRDFELElBQU0sYUFBYSxDQUFDLE9BQWUsVUFBbUIsQ0FBQyxNQUFNO0FBQzNELFFBQU0sRUFBRSxZQUFBQSxZQUFXLElBQUksYUFBSyxPQUFPO0FBQ25DLFFBQU0sRUFBRSxRQUFRLEtBQUssSUFBSSxrQkFBVSxPQUFPO0FBRTFDLFFBQU0sSUFBSSxNQUFNO0FBQ2hCLE1BQUksTUFBTSxFQUFHLFFBQU87QUFDcEIsTUFBSSxNQUFNLEVBQUcsUUFBTztBQUVwQixRQUFNLFFBQVMsS0FBSyxJQUFJLE1BQU8sSUFBSSxJQUFJLElBQUk7QUFDM0MsUUFBTSxjQUFjQSxZQUFXLEtBQUs7QUFDcEMsUUFBTSxhQUFhLEtBQUssS0FBSyxRQUFRLEtBQUssRUFBRSxNQUFNLElBQUksT0FBTyxpQkFBaUIsSUFBSSxJQUFJLEtBQUssQ0FBQztBQUU1RixTQUNFLEtBQUs7QUFBQSxJQUNILFlBQ0c7QUFBQSxNQUFJLENBQUMsQ0FBQyxLQUFLLFFBQVEsR0FBRyxNQUNyQixZQUNHLE9BQU8sQ0FBQyxHQUFHLE1BQU0sTUFBTSxDQUFDLEVBQ3hCLElBQUksQ0FBQyxDQUFDLEtBQUssUUFBUSxNQUFNO0FBQ3hCLGNBQU0sV0FBVyxLQUFLLEtBQUssSUFBSSxTQUFTLFdBQVcsUUFBUTtBQUMzRCxlQUFPLFVBQVUsYUFBYSxNQUFNLE9BQU8sUUFBUSxJQUFJLFVBQVUsTUFBTSxNQUFNLGNBQWMsUUFBUTtBQUFBLE1BQ3JHLENBQUM7QUFBQSxJQUNMLEVBQ0MsS0FBSyxFQUNMLE9BQU8sS0FBSyxDQUFDO0FBQUEsRUFDbEIsSUFBSTtBQUVSO0FBRUEsSUFBTyx1QkFBUTsiLAogICJuYW1lcyI6IFsidGVhbVJhdGluZyJdCn0K |
@@ -1,3 +0,5 @@ | ||
import { Options, Team } from './types'; | ||
import { Team, Options } from './types.js'; | ||
declare const predictWin: (teams: Team[], options?: Options) => number[]; | ||
export default predictWin; | ||
export { predictWin as default }; |
@@ -1,26 +0,85 @@ | ||
"use strict"; | ||
// src/constants.ts | ||
var builder = (options) => { | ||
const { z = 3, mu = 25, preventSigmaIncrease = false, epsilon = 1e-4 } = options; | ||
const { tau = mu / 300, sigma = mu / z, beta = sigma / 2, limitSigma = preventSigmaIncrease } = options; | ||
const betaSq = beta ** 2; | ||
return { | ||
SIGMA: sigma, | ||
MU: mu, | ||
EPSILON: epsilon, | ||
TWOBETASQ: 2 * betaSq, | ||
BETA: beta, | ||
BETASQ: betaSq, | ||
Z: z, | ||
TAU: tau, | ||
LIMIT_SIGMA: limitSigma | ||
}; | ||
}; | ||
var constants_default = builder; | ||
Object.defineProperty(exports, "__esModule", { | ||
value: true | ||
// src/util.ts | ||
import { zip } from "ramda"; | ||
var sum = (a, b) => a + b; | ||
var rankings = (teams, rank = []) => { | ||
const teamScores = teams.map((_, i) => rank[i] || i); | ||
const outRank = new Array(teams.length); | ||
let s = 0; | ||
for (let j = 0; j < teamScores.length; j += 1) { | ||
if (j > 0 && teamScores[j - 1] < teamScores[j]) { | ||
s = j; | ||
} | ||
outRank[j] = s; | ||
} | ||
return outRank; | ||
}; | ||
var teamRating = (options) => (game) => { | ||
const rank = rankings(game, options.rank); | ||
return game.map((team, i) => [ | ||
// mu[i] | ||
team.map(({ mu }) => mu).reduce(sum, 0), | ||
// sigma^2[i] | ||
team.map(({ sigma }) => sigma * sigma).reduce(sum, 0), | ||
// (original team data) | ||
team, | ||
// rank[i] | ||
rank[i] | ||
]); | ||
}; | ||
var utilC = (options) => { | ||
const { BETASQ } = constants_default(options); | ||
return (teamRatings) => Math.sqrt(teamRatings.map(([_teamMu, teamSigmaSq, _team, _rank]) => teamSigmaSq + BETASQ).reduce(sum, 0)); | ||
}; | ||
var gamma = (options) => { | ||
var _a; | ||
return (_a = options.gamma) != null ? _a : ( | ||
// default to iSigma / c | ||
(c, _k, _mu, sigmaSq, _team, _qRank) => Math.sqrt(sigmaSq) / c | ||
); | ||
}; | ||
var util_default = (options) => ({ | ||
utilC: utilC(options), | ||
teamRating: teamRating(options), | ||
gamma: gamma(options) | ||
}); | ||
exports.default = void 0; | ||
var _constants = _interopRequireDefault(require("./constants")); | ||
var _util = _interopRequireWildcard(require("./util")); | ||
var _statistics = require("./statistics"); | ||
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); } | ||
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; } | ||
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } | ||
const predictWin = (teams, options = {}) => { | ||
const { | ||
teamRating | ||
} = (0, _util.default)(options); | ||
const { | ||
BETASQ | ||
} = (0, _constants.default)(options); | ||
const teamRatings = teamRating(teams); | ||
// src/statistics.ts | ||
import gaussian from "gaussian"; | ||
var normal = gaussian(0, 1); | ||
var phiMajor = (x) => normal.cdf(x); | ||
// src/predict-win.ts | ||
var predictWin = (teams, options = {}) => { | ||
const { teamRating: teamRating2 } = util_default(options); | ||
const { BETASQ } = constants_default(options); | ||
const teamRatings = teamRating2(teams); | ||
const n = teams.length; | ||
const denom = n * (n - 1) / 2; | ||
return teamRatings.map(([muA, sigmaSqA], i) => teamRatings.filter((_, q) => i !== q).map(([muB, sigmaSqB]) => (0, _statistics.phiMajor)((muA - muB) / Math.sqrt(n * BETASQ + sigmaSqA + sigmaSqB))).reduce(_util.sum, 0) / denom); | ||
return teamRatings.map( | ||
([muA, sigmaSqA], i) => teamRatings.filter((_, q) => i !== q).map(([muB, sigmaSqB]) => phiMajor((muA - muB) / Math.sqrt(n * BETASQ + sigmaSqA + sigmaSqB))).reduce(sum, 0) / denom | ||
); | ||
}; | ||
var _default = exports.default = predictWin; | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfY29uc3RhbnRzIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfdXRpbCIsIl9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkIiwiX3N0YXRpc3RpY3MiLCJfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUiLCJlIiwiV2Vha01hcCIsInIiLCJ0IiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJoYXMiLCJnZXQiLCJuIiwiX19wcm90b19fIiwiYSIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwidSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImkiLCJzZXQiLCJwcmVkaWN0V2luIiwidGVhbXMiLCJvcHRpb25zIiwidGVhbVJhdGluZyIsInV0aWwiLCJCRVRBU1EiLCJjb25zdGFudHMiLCJ0ZWFtUmF0aW5ncyIsImxlbmd0aCIsImRlbm9tIiwibWFwIiwibXVBIiwic2lnbWFTcUEiLCJmaWx0ZXIiLCJfIiwicSIsIm11QiIsInNpZ21hU3FCIiwicGhpTWFqb3IiLCJNYXRoIiwic3FydCIsInJlZHVjZSIsInN1bSIsIl9kZWZhdWx0IiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uL3NyYy9wcmVkaWN0LXdpbi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgY29uc3RhbnRzIGZyb20gJy4vY29uc3RhbnRzJ1xuaW1wb3J0IHV0aWwsIHsgc3VtIH0gZnJvbSAnLi91dGlsJ1xuaW1wb3J0IHsgcGhpTWFqb3IgfSBmcm9tICcuL3N0YXRpc3RpY3MnXG5pbXBvcnQgeyBPcHRpb25zLCBUZWFtIH0gZnJvbSAnLi90eXBlcydcblxuY29uc3QgcHJlZGljdFdpbiA9ICh0ZWFtczogVGVhbVtdLCBvcHRpb25zOiBPcHRpb25zID0ge30pID0+IHtcbiAgY29uc3QgeyB0ZWFtUmF0aW5nIH0gPSB1dGlsKG9wdGlvbnMpXG4gIGNvbnN0IHsgQkVUQVNRIH0gPSBjb25zdGFudHMob3B0aW9ucylcblxuICBjb25zdCB0ZWFtUmF0aW5ncyA9IHRlYW1SYXRpbmcodGVhbXMpXG4gIGNvbnN0IG4gPSB0ZWFtcy5sZW5ndGhcbiAgY29uc3QgZGVub20gPSAobiAqIChuIC0gMSkpIC8gMlxuXG4gIHJldHVybiB0ZWFtUmF0aW5ncy5tYXAoXG4gICAgKFttdUEsIHNpZ21hU3FBXSwgaSkgPT5cbiAgICAgIHRlYW1SYXRpbmdzXG4gICAgICAgIC5maWx0ZXIoKF8sIHEpID0+IGkgIT09IHEpXG4gICAgICAgIC5tYXAoKFttdUIsIHNpZ21hU3FCXSkgPT4gcGhpTWFqb3IoKG11QSAtIG11QikgLyBNYXRoLnNxcnQobiAqIEJFVEFTUSArIHNpZ21hU3FBICsgc2lnbWFTcUIpKSlcbiAgICAgICAgLnJlZHVjZShzdW0sIDApIC8gZGVub21cbiAgKVxufVxuXG5leHBvcnQgZGVmYXVsdCBwcmVkaWN0V2luXG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLElBQUFBLFVBQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLEtBQUEsR0FBQUMsdUJBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFHLFdBQUEsR0FBQUgsT0FBQTtBQUF1QyxTQUFBSSx5QkFBQUMsQ0FBQSw2QkFBQUMsT0FBQSxtQkFBQUMsQ0FBQSxPQUFBRCxPQUFBLElBQUFFLENBQUEsT0FBQUYsT0FBQSxZQUFBRix3QkFBQSxZQUFBQSxDQUFBQyxDQUFBLFdBQUFBLENBQUEsR0FBQUcsQ0FBQSxHQUFBRCxDQUFBLEtBQUFGLENBQUE7QUFBQSxTQUFBSCx3QkFBQUcsQ0FBQSxFQUFBRSxDQUFBLFNBQUFBLENBQUEsSUFBQUYsQ0FBQSxJQUFBQSxDQUFBLENBQUFJLFVBQUEsU0FBQUosQ0FBQSxlQUFBQSxDQUFBLHVCQUFBQSxDQUFBLHlCQUFBQSxDQUFBLFdBQUFLLE9BQUEsRUFBQUwsQ0FBQSxRQUFBRyxDQUFBLEdBQUFKLHdCQUFBLENBQUFHLENBQUEsT0FBQUMsQ0FBQSxJQUFBQSxDQUFBLENBQUFHLEdBQUEsQ0FBQU4sQ0FBQSxVQUFBRyxDQUFBLENBQUFJLEdBQUEsQ0FBQVAsQ0FBQSxPQUFBUSxDQUFBLEtBQUFDLFNBQUEsVUFBQUMsQ0FBQSxHQUFBQyxNQUFBLENBQUFDLGNBQUEsSUFBQUQsTUFBQSxDQUFBRSx3QkFBQSxXQUFBQyxDQUFBLElBQUFkLENBQUEsb0JBQUFjLENBQUEsT0FBQUMsY0FBQSxDQUFBQyxJQUFBLENBQUFoQixDQUFBLEVBQUFjLENBQUEsU0FBQUcsQ0FBQSxHQUFBUCxDQUFBLEdBQUFDLE1BQUEsQ0FBQUUsd0JBQUEsQ0FBQWIsQ0FBQSxFQUFBYyxDQUFBLFVBQUFHLENBQUEsS0FBQUEsQ0FBQSxDQUFBVixHQUFBLElBQUFVLENBQUEsQ0FBQUMsR0FBQSxJQUFBUCxNQUFBLENBQUFDLGNBQUEsQ0FBQUosQ0FBQSxFQUFBTSxDQUFBLEVBQUFHLENBQUEsSUFBQVQsQ0FBQSxDQUFBTSxDQUFBLElBQUFkLENBQUEsQ0FBQWMsQ0FBQSxZQUFBTixDQUFBLENBQUFILE9BQUEsR0FBQUwsQ0FBQSxFQUFBRyxDQUFBLElBQUFBLENBQUEsQ0FBQWUsR0FBQSxDQUFBbEIsQ0FBQSxFQUFBUSxDQUFBLEdBQUFBLENBQUE7QUFBQSxTQUFBZCx1QkFBQU0sQ0FBQSxXQUFBQSxDQUFBLElBQUFBLENBQUEsQ0FBQUksVUFBQSxHQUFBSixDQUFBLEtBQUFLLE9BQUEsRUFBQUwsQ0FBQTtBQUd2QyxNQUFNbUIsVUFBVSxHQUFHQSxDQUFDQyxLQUFhLEVBQUVDLE9BQWdCLEdBQUcsQ0FBQyxDQUFDLEtBQUs7RUFDM0QsTUFBTTtJQUFFQztFQUFXLENBQUMsR0FBRyxJQUFBQyxhQUFJLEVBQUNGLE9BQU8sQ0FBQztFQUNwQyxNQUFNO0lBQUVHO0VBQU8sQ0FBQyxHQUFHLElBQUFDLGtCQUFTLEVBQUNKLE9BQU8sQ0FBQztFQUVyQyxNQUFNSyxXQUFXLEdBQUdKLFVBQVUsQ0FBQ0YsS0FBSyxDQUFDO0VBQ3JDLE1BQU1aLENBQUMsR0FBR1ksS0FBSyxDQUFDTyxNQUFNO0VBQ3RCLE1BQU1DLEtBQUssR0FBSXBCLENBQUMsSUFBSUEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFJLENBQUM7RUFFL0IsT0FBT2tCLFdBQVcsQ0FBQ0csR0FBRyxDQUNwQixDQUFDLENBQUNDLEdBQUcsRUFBRUMsUUFBUSxDQUFDLEVBQUVkLENBQUMsS0FDakJTLFdBQVcsQ0FDUk0sTUFBTSxDQUFDLENBQUNDLENBQUMsRUFBRUMsQ0FBQyxLQUFLakIsQ0FBQyxLQUFLaUIsQ0FBQyxDQUFDLENBQ3pCTCxHQUFHLENBQUMsQ0FBQyxDQUFDTSxHQUFHLEVBQUVDLFFBQVEsQ0FBQyxLQUFLLElBQUFDLG9CQUFRLEVBQUMsQ0FBQ1AsR0FBRyxHQUFHSyxHQUFHLElBQUlHLElBQUksQ0FBQ0MsSUFBSSxDQUFDL0IsQ0FBQyxHQUFHZ0IsTUFBTSxHQUFHTyxRQUFRLEdBQUdLLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FDN0ZJLE1BQU0sQ0FBQ0MsU0FBRyxFQUFFLENBQUMsQ0FBQyxHQUFHYixLQUN4QixDQUFDO0FBQ0gsQ0FBQztBQUFBLElBQUFjLFFBQUEsR0FBQUMsT0FBQSxDQUFBdEMsT0FBQSxHQUVjYyxVQUFVIiwiaWdub3JlTGlzdCI6W119 | ||
var predict_win_default = predictWin; | ||
export { | ||
predict_win_default as default | ||
}; | ||
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL2NvbnN0YW50cy50cyIsICIuLi9zcmMvdXRpbC50cyIsICIuLi9zcmMvc3RhdGlzdGljcy50cyIsICIuLi9zcmMvcHJlZGljdC13aW4udHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7IE9wdGlvbnMgfSBmcm9tICcuL3R5cGVzJ1xuXG5jb25zdCBidWlsZGVyID0gKG9wdGlvbnM6IE9wdGlvbnMpID0+IHtcbiAgLy8gaSdkIGxvdmUgdG8ga25vdyBvZiBhIGJldHRlciB3YXkgdG8gZG8gdGhpc1xuICBjb25zdCB7IHogPSAzLCBtdSA9IDI1LCBwcmV2ZW50U2lnbWFJbmNyZWFzZSA9IGZhbHNlLCBlcHNpbG9uID0gMC4wMDAxIH0gPSBvcHRpb25zXG4gIGNvbnN0IHsgdGF1ID0gbXUgLyAzMDAsIHNpZ21hID0gbXUgLyB6LCBiZXRhID0gc2lnbWEgLyAyLCBsaW1pdFNpZ21hID0gcHJldmVudFNpZ21hSW5jcmVhc2UgfSA9IG9wdGlvbnNcbiAgY29uc3QgYmV0YVNxID0gYmV0YSAqKiAyXG5cbiAgcmV0dXJuIHtcbiAgICBTSUdNQTogc2lnbWEsXG4gICAgTVU6IG11LFxuICAgIEVQU0lMT046IGVwc2lsb24sXG4gICAgVFdPQkVUQVNROiAyICogYmV0YVNxLFxuICAgIEJFVEE6IGJldGEsXG4gICAgQkVUQVNROiBiZXRhU3EsXG4gICAgWjogeixcbiAgICBUQVU6IHRhdSxcbiAgICBMSU1JVF9TSUdNQTogbGltaXRTaWdtYSxcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBidWlsZGVyXG4iLCAiaW1wb3J0IHsgemlwIH0gZnJvbSAncmFtZGEnXG5pbXBvcnQgY29uc3RhbnRzIGZyb20gJy4vY29uc3RhbnRzJ1xuaW1wb3J0IHsgUmF0aW5nLCBPcHRpb25zLCBHYW1tYSwgVGVhbSwgUmFuayB9IGZyb20gJy4vdHlwZXMnXG5cbmV4cG9ydCB0eXBlIFRlYW1NdSA9IG51bWJlclxuXG5leHBvcnQgdHlwZSBUZWFtU2lnbWFTcSA9IG51bWJlclxuXG5leHBvcnQgdHlwZSBUZWFtUmF0aW5nID0gW1RlYW1NdSwgVGVhbVNpZ21hU3EsIFRlYW0sIFJhbmtdXG5cbmV4cG9ydCBjb25zdCBzdW0gPSAoYTogbnVtYmVyLCBiOiBudW1iZXIpID0+IGEgKyBiXG5cbmV4cG9ydCBjb25zdCBzY29yZSA9IChxOiBudW1iZXIsIGk6IG51bWJlcikgPT4ge1xuICBpZiAocSA8IGkpIHtcbiAgICByZXR1cm4gMC4wXG4gIH1cbiAgaWYgKHEgPiBpKSB7XG4gICAgcmV0dXJuIDEuMFxuICB9XG4gIC8vIHEgPT09IGlcbiAgcmV0dXJuIDAuNVxufVxuXG5leHBvcnQgY29uc3QgcmFua2luZ3MgPSAodGVhbXM6IFRlYW1bXSwgcmFuazogbnVtYmVyW10gPSBbXSkgPT4ge1xuICBjb25zdCB0ZWFtU2NvcmVzID0gdGVhbXMubWFwKChfLCBpKSA9PiByYW5rW2ldIHx8IGkpXG4gIGNvbnN0IG91dFJhbmsgPSBuZXcgQXJyYXkodGVhbXMubGVuZ3RoKVxuXG4gIGxldCBzID0gMFxuICBmb3IgKGxldCBqID0gMDsgaiA8IHRlYW1TY29yZXMubGVuZ3RoOyBqICs9IDEpIHtcbiAgICBpZiAoaiA+IDAgJiYgdGVhbVNjb3Jlc1tqIC0gMV0gPCB0ZWFtU2NvcmVzW2pdKSB7XG4gICAgICBzID0galxuICAgIH1cbiAgICBvdXRSYW5rW2pdID0gc1xuICB9XG4gIHJldHVybiBvdXRSYW5rXG59XG5cbi8vIHRoaXMgaXMgYmFzaWNhbGx5IHNoYXJlZCBjb2RlLCBwcmVjb21wdXRlZCBmb3IgZXZlcnkgbW9kZWxcbmNvbnN0IHRlYW1SYXRpbmcgPVxuICAob3B0aW9uczogT3B0aW9ucykgPT5cbiAgKGdhbWU6IFRlYW1bXSk6IFRlYW1SYXRpbmdbXSA9PiB7XG4gICAgY29uc3QgcmFuayA9IHJhbmtpbmdzKGdhbWUsIG9wdGlvbnMucmFuaylcbiAgICByZXR1cm4gZ2FtZS5tYXAoKHRlYW0sIGkpID0+IFtcbiAgICAgIC8vIG11W2ldXG4gICAgICB0ZWFtLm1hcCgoeyBtdSB9KSA9PiBtdSkucmVkdWNlKHN1bSwgMCksXG4gICAgICAvLyBzaWdtYV4yW2ldXG4gICAgICB0ZWFtLm1hcCgoeyBzaWdtYSB9KSA9PiBzaWdtYSAqIHNpZ21hKS5yZWR1Y2Uoc3VtLCAwKSxcbiAgICAgIC8vIChvcmlnaW5hbCB0ZWFtIGRhdGEpXG4gICAgICB0ZWFtLFxuICAgICAgLy8gcmFua1tpXVxuICAgICAgcmFua1tpXSxcbiAgICBdKVxuICB9XG5cbmV4cG9ydCBjb25zdCBsYWRkZXJQYWlycyA9IDxUPihyYW5rczogVFtdKTogVFtdW10gPT4ge1xuICBjb25zdCBzaXplID0gcmFua3MubGVuZ3RoXG4gIGNvbnN0IGxlZnQgPSBbdW5kZWZpbmVkLCAuLi5yYW5rcy5zbGljZSgwLCBzaXplIC0gMSldXG4gIGNvbnN0IHJpZ2h0ID0gWy4uLnJhbmtzLnNsaWNlKDEpLCB1bmRlZmluZWRdXG4gIHJldHVybiB6aXAobGVmdCwgcmlnaHQpLm1hcCgoW2wsIHJdKSA9PiB7XG4gICAgaWYgKGwgIT09IHVuZGVmaW5lZCAmJiByICE9PSB1bmRlZmluZWQpIHJldHVybiBbbCwgcl1cbiAgICBpZiAobCAhPT0gdW5kZWZpbmVkICYmIHIgPT09IHVuZGVmaW5lZCkgcmV0dXJuIFtsXVxuICAgIGlmIChsID09PSB1bmRlZmluZWQgJiYgciAhPT0gdW5kZWZpbmVkKSByZXR1cm4gW3JdXG4gICAgcmV0dXJuIFtdIC8vIHRoaXMgc2hvdWxkIHJlYWxseSBvbmx5IGhhcHBlbiB3aGVuIHNpemUgPT09IDFcbiAgfSlcbn1cblxuY29uc3QgdXRpbEMgPSAob3B0aW9uczogT3B0aW9ucykgPT4ge1xuICBjb25zdCB7IEJFVEFTUSB9ID0gY29uc3RhbnRzKG9wdGlvbnMpXG4gIHJldHVybiAodGVhbVJhdGluZ3M6IFRlYW1SYXRpbmdbXSkgPT5cbiAgICBNYXRoLnNxcnQodGVhbVJhdGluZ3MubWFwKChbX3RlYW1NdSwgdGVhbVNpZ21hU3EsIF90ZWFtLCBfcmFua10pID0+IHRlYW1TaWdtYVNxICsgQkVUQVNRKS5yZWR1Y2Uoc3VtLCAwKSlcbn1cblxuZXhwb3J0IGNvbnN0IHV0aWxTdW1RID0gKHRlYW1SYXRpbmdzOiBUZWFtUmF0aW5nW10sIGM6IG51bWJlcikgPT5cbiAgdGVhbVJhdGluZ3MubWFwKChbX3FNdSwgX3FTaWdtYVNxLCBfcVRlYW0sIHFSYW5rXSkgPT5cbiAgICB0ZWFtUmF0aW5nc1xuICAgICAgLmZpbHRlcigoW19pTXUsIF9pU2lnbWFTcSwgX2lUZWFtLCBpUmFua10pID0+IGlSYW5rID49IHFSYW5rKVxuICAgICAgLm1hcCgoW2lNdSwgX2lTaWdtYVNxLCBfaVRlYW0sIF9pUmFua10pID0+IE1hdGguZXhwKGlNdSAvIGMpKVxuICAgICAgLnJlZHVjZShzdW0sIDApXG4gIClcblxuZXhwb3J0IGNvbnN0IHV0aWxBID0gKHRlYW1SYXRpbmdzOiBUZWFtUmF0aW5nW10pID0+XG4gIHRlYW1SYXRpbmdzLm1hcChcbiAgICAoW19pTXUsIF9pU2lnbWFTcSwgX2lUZWFtLCBpUmFua10pID0+XG4gICAgICB0ZWFtUmF0aW5ncy5maWx0ZXIoKFtfcU11LCBfcVNpZ21hU3EsIF9xVGVhbSwgcVJhbmtdKSA9PiBpUmFuayA9PT0gcVJhbmspLmxlbmd0aFxuICApXG5cbmV4cG9ydCBjb25zdCBnYW1tYSA9IChvcHRpb25zOiBPcHRpb25zKTogR2FtbWEgPT5cbiAgb3B0aW9ucy5nYW1tYSA/P1xuICAvLyBkZWZhdWx0IHRvIGlTaWdtYSAvIGNcbiAgKChjOiBudW1iZXIsIF9rOiBudW1iZXIsIF9tdTogbnVtYmVyLCBzaWdtYVNxOiBudW1iZXIsIF90ZWFtOiBSYXRpbmdbXSwgX3FSYW5rOiBudW1iZXIpID0+IE1hdGguc3FydChzaWdtYVNxKSAvIGMpXG5cbmV4cG9ydCBkZWZhdWx0IChvcHRpb25zOiBPcHRpb25zKSA9PiAoe1xuICB1dGlsQzogdXRpbEMob3B0aW9ucyksXG4gIHRlYW1SYXRpbmc6IHRlYW1SYXRpbmcob3B0aW9ucyksXG4gIGdhbW1hOiBnYW1tYShvcHRpb25zKSxcbn0pXG4iLCAiaW1wb3J0IGdhdXNzaWFuIGZyb20gJ2dhdXNzaWFuJ1xuXG4vLyB1c2UgYSBzdGFuZGFyZCBub3JtYWwgZGlzdHJpYnV0aW9uIC0gbWVhbiBvZiB6ZXJvLCBzdGRkZXYvdmFyaWFuY2Ugb2Ygb25lXG5jb25zdCBub3JtYWwgPSBnYXVzc2lhbigwLCAxKVxuXG5leHBvcnQgY29uc3QgcGhpTWFqb3IgPSAoeDogbnVtYmVyKSA9PiBub3JtYWwuY2RmKHgpXG5cbmV4cG9ydCBjb25zdCBwaGlNYWpvckludmVyc2UgPSAoeDogbnVtYmVyKSA9PiBub3JtYWwucHBmKHgpXG5cbmV4cG9ydCBjb25zdCBwaGlNaW5vciA9ICh4OiBudW1iZXIpID0+IG5vcm1hbC5wZGYoeClcblxuZXhwb3J0IGNvbnN0IHYgPSAoeDogbnVtYmVyLCB0OiBudW1iZXIpID0+IHtcbiAgY29uc3QgeHQgPSB4IC0gdFxuICBjb25zdCBkZW5vbSA9IHBoaU1ham9yKHh0KVxuICByZXR1cm4gZGVub20gPCBOdW1iZXIuRVBTSUxPTiA/IC14dCA6IHBoaU1pbm9yKHh0KSAvIGRlbm9tXG59XG5cbmV4cG9ydCBjb25zdCB3ID0gKHg6IG51bWJlciwgdDogbnVtYmVyKSA9PiB7XG4gIGNvbnN0IHh0ID0geCAtIHRcbiAgY29uc3QgZGVub20gPSBwaGlNYWpvcih4dClcbiAgaWYgKGRlbm9tIDwgTnVtYmVyLkVQU0lMT04pIHtcbiAgICByZXR1cm4geCA8IDAgPyAxIDogMFxuICB9XG4gIHJldHVybiB2KHgsIHQpICogKHYoeCwgdCkgKyB4dClcbn1cblxuZXhwb3J0IGNvbnN0IHZ0ID0gKHg6IG51bWJlciwgdDogbnVtYmVyKSA9PiB7XG4gIGNvbnN0IHh4ID0gTWF0aC5hYnMoeClcbiAgY29uc3QgYiA9IHBoaU1ham9yKHQgLSB4eCkgLSBwaGlNYWpvcigtdCAtIHh4KVxuICBpZiAoYiA8IDFlLTUpIHtcbiAgICBpZiAoeCA8IDApIHJldHVybiAteCAtIHRcbiAgICByZXR1cm4gLXggKyB0XG4gIH1cbiAgY29uc3QgYSA9IHBoaU1pbm9yKC10IC0geHgpIC0gcGhpTWlub3IodCAtIHh4KVxuICByZXR1cm4gKHggPCAwID8gLWEgOiBhKSAvIGJcbn1cblxuZXhwb3J0IGNvbnN0IHd0ID0gKHg6IG51bWJlciwgdDogbnVtYmVyKSA9PiB7XG4gIGNvbnN0IHh4ID0gTWF0aC5hYnMoeClcbiAgY29uc3QgYiA9IHBoaU1ham9yKHQgLSB4eCkgLSBwaGlNYWpvcigtdCAtIHh4KVxuICByZXR1cm4gYiA8IE51bWJlci5FUFNJTE9OXG4gICAgPyAxLjBcbiAgICA6ICgodCAtIHh4KSAqIHBoaU1pbm9yKHQgLSB4eCkgKyAodCArIHh4KSAqIHBoaU1pbm9yKC10IC0geHgpKSAvIGIgKyB2dCh4LCB0KSAqIHZ0KHgsIHQpXG59XG4iLCAiaW1wb3J0IGNvbnN0YW50cyBmcm9tICcuL2NvbnN0YW50cydcbmltcG9ydCB1dGlsLCB7IHN1bSB9IGZyb20gJy4vdXRpbCdcbmltcG9ydCB7IHBoaU1ham9yIH0gZnJvbSAnLi9zdGF0aXN0aWNzJ1xuaW1wb3J0IHsgT3B0aW9ucywgVGVhbSB9IGZyb20gJy4vdHlwZXMnXG5cbmNvbnN0IHByZWRpY3RXaW4gPSAodGVhbXM6IFRlYW1bXSwgb3B0aW9uczogT3B0aW9ucyA9IHt9KSA9PiB7XG4gIGNvbnN0IHsgdGVhbVJhdGluZyB9ID0gdXRpbChvcHRpb25zKVxuICBjb25zdCB7IEJFVEFTUSB9ID0gY29uc3RhbnRzKG9wdGlvbnMpXG5cbiAgY29uc3QgdGVhbVJhdGluZ3MgPSB0ZWFtUmF0aW5nKHRlYW1zKVxuICBjb25zdCBuID0gdGVhbXMubGVuZ3RoXG4gIGNvbnN0IGRlbm9tID0gKG4gKiAobiAtIDEpKSAvIDJcblxuICByZXR1cm4gdGVhbVJhdGluZ3MubWFwKFxuICAgIChbbXVBLCBzaWdtYVNxQV0sIGkpID0+XG4gICAgICB0ZWFtUmF0aW5nc1xuICAgICAgICAuZmlsdGVyKChfLCBxKSA9PiBpICE9PSBxKVxuICAgICAgICAubWFwKChbbXVCLCBzaWdtYVNxQl0pID0+IHBoaU1ham9yKChtdUEgLSBtdUIpIC8gTWF0aC5zcXJ0KG4gKiBCRVRBU1EgKyBzaWdtYVNxQSArIHNpZ21hU3FCKSkpXG4gICAgICAgIC5yZWR1Y2Uoc3VtLCAwKSAvIGRlbm9tXG4gIClcbn1cblxuZXhwb3J0IGRlZmF1bHQgcHJlZGljdFdpblxuIl0sCiAgIm1hcHBpbmdzIjogIjtBQUVBLElBQU0sVUFBVSxDQUFDLFlBQXFCO0FBRXBDLFFBQU0sRUFBRSxJQUFJLEdBQUcsS0FBSyxJQUFJLHVCQUF1QixPQUFPLFVBQVUsS0FBTyxJQUFJO0FBQzNFLFFBQU0sRUFBRSxNQUFNLEtBQUssS0FBSyxRQUFRLEtBQUssR0FBRyxPQUFPLFFBQVEsR0FBRyxhQUFhLHFCQUFxQixJQUFJO0FBQ2hHLFFBQU0sU0FBUyxRQUFRO0FBRXZCLFNBQU87QUFBQSxJQUNMLE9BQU87QUFBQSxJQUNQLElBQUk7QUFBQSxJQUNKLFNBQVM7QUFBQSxJQUNULFdBQVcsSUFBSTtBQUFBLElBQ2YsTUFBTTtBQUFBLElBQ04sUUFBUTtBQUFBLElBQ1IsR0FBRztBQUFBLElBQ0gsS0FBSztBQUFBLElBQ0wsYUFBYTtBQUFBLEVBQ2Y7QUFDRjtBQUVBLElBQU8sb0JBQVE7OztBQ3JCZixTQUFTLFdBQVc7QUFVYixJQUFNLE1BQU0sQ0FBQyxHQUFXLE1BQWMsSUFBSTtBQWExQyxJQUFNLFdBQVcsQ0FBQyxPQUFlLE9BQWlCLENBQUMsTUFBTTtBQUM5RCxRQUFNLGFBQWEsTUFBTSxJQUFJLENBQUMsR0FBRyxNQUFNLEtBQUssQ0FBQyxLQUFLLENBQUM7QUFDbkQsUUFBTSxVQUFVLElBQUksTUFBTSxNQUFNLE1BQU07QUFFdEMsTUFBSSxJQUFJO0FBQ1IsV0FBUyxJQUFJLEdBQUcsSUFBSSxXQUFXLFFBQVEsS0FBSyxHQUFHO0FBQzdDLFFBQUksSUFBSSxLQUFLLFdBQVcsSUFBSSxDQUFDLElBQUksV0FBVyxDQUFDLEdBQUc7QUFDOUMsVUFBSTtBQUFBLElBQ047QUFDQSxZQUFRLENBQUMsSUFBSTtBQUFBLEVBQ2Y7QUFDQSxTQUFPO0FBQ1Q7QUFHQSxJQUFNLGFBQ0osQ0FBQyxZQUNELENBQUMsU0FBK0I7QUFDOUIsUUFBTSxPQUFPLFNBQVMsTUFBTSxRQUFRLElBQUk7QUFDeEMsU0FBTyxLQUFLLElBQUksQ0FBQyxNQUFNLE1BQU07QUFBQTtBQUFBLElBRTNCLEtBQUssSUFBSSxDQUFDLEVBQUUsR0FBRyxNQUFNLEVBQUUsRUFBRSxPQUFPLEtBQUssQ0FBQztBQUFBO0FBQUEsSUFFdEMsS0FBSyxJQUFJLENBQUMsRUFBRSxNQUFNLE1BQU0sUUFBUSxLQUFLLEVBQUUsT0FBTyxLQUFLLENBQUM7QUFBQTtBQUFBLElBRXBEO0FBQUE7QUFBQSxJQUVBLEtBQUssQ0FBQztBQUFBLEVBQ1IsQ0FBQztBQUNIO0FBY0YsSUFBTSxRQUFRLENBQUMsWUFBcUI7QUFDbEMsUUFBTSxFQUFFLE9BQU8sSUFBSSxrQkFBVSxPQUFPO0FBQ3BDLFNBQU8sQ0FBQyxnQkFDTixLQUFLLEtBQUssWUFBWSxJQUFJLENBQUMsQ0FBQyxTQUFTLGFBQWEsT0FBTyxLQUFLLE1BQU0sY0FBYyxNQUFNLEVBQUUsT0FBTyxLQUFLLENBQUMsQ0FBQztBQUM1RztBQWdCTyxJQUFNLFFBQVEsQ0FBQyxZQUF5QjtBQXRGL0M7QUF1RkUsdUJBQVEsVUFBUjtBQUFBO0FBQUEsSUFFQyxDQUFDLEdBQVcsSUFBWSxLQUFhLFNBQWlCLE9BQWlCLFdBQW1CLEtBQUssS0FBSyxPQUFPLElBQUk7QUFBQTtBQUFBO0FBRWxILElBQU8sZUFBUSxDQUFDLGFBQXNCO0FBQUEsRUFDcEMsT0FBTyxNQUFNLE9BQU87QUFBQSxFQUNwQixZQUFZLFdBQVcsT0FBTztBQUFBLEVBQzlCLE9BQU8sTUFBTSxPQUFPO0FBQ3RCOzs7QUMvRkEsT0FBTyxjQUFjO0FBR3JCLElBQU0sU0FBUyxTQUFTLEdBQUcsQ0FBQztBQUVyQixJQUFNLFdBQVcsQ0FBQyxNQUFjLE9BQU8sSUFBSSxDQUFDOzs7QUNBbkQsSUFBTSxhQUFhLENBQUMsT0FBZSxVQUFtQixDQUFDLE1BQU07QUFDM0QsUUFBTSxFQUFFLFlBQUFBLFlBQVcsSUFBSSxhQUFLLE9BQU87QUFDbkMsUUFBTSxFQUFFLE9BQU8sSUFBSSxrQkFBVSxPQUFPO0FBRXBDLFFBQU0sY0FBY0EsWUFBVyxLQUFLO0FBQ3BDLFFBQU0sSUFBSSxNQUFNO0FBQ2hCLFFBQU0sUUFBUyxLQUFLLElBQUksS0FBTTtBQUU5QixTQUFPLFlBQVk7QUFBQSxJQUNqQixDQUFDLENBQUMsS0FBSyxRQUFRLEdBQUcsTUFDaEIsWUFDRyxPQUFPLENBQUMsR0FBRyxNQUFNLE1BQU0sQ0FBQyxFQUN4QixJQUFJLENBQUMsQ0FBQyxLQUFLLFFBQVEsTUFBTSxVQUFVLE1BQU0sT0FBTyxLQUFLLEtBQUssSUFBSSxTQUFTLFdBQVcsUUFBUSxDQUFDLENBQUMsRUFDNUYsT0FBTyxLQUFLLENBQUMsSUFBSTtBQUFBLEVBQ3hCO0FBQ0Y7QUFFQSxJQUFPLHNCQUFROyIsCiAgIm5hbWVzIjogWyJ0ZWFtUmF0aW5nIl0KfQo= |
@@ -1,3 +0,5 @@ | ||
import { Options, Team } from './types'; | ||
import { Team, Options } from './types.js'; | ||
declare const rate: (teams: Team[], options?: Options) => Team[]; | ||
export default rate; | ||
export { rate as default }; |
189
dist/rate.js
@@ -1,52 +0,157 @@ | ||
"use strict"; | ||
var __defProp = Object.defineProperty; | ||
var __defProps = Object.defineProperties; | ||
var __getOwnPropDescs = Object.getOwnPropertyDescriptors; | ||
var __getOwnPropSymbols = Object.getOwnPropertySymbols; | ||
var __hasOwnProp = Object.prototype.hasOwnProperty; | ||
var __propIsEnum = Object.prototype.propertyIsEnumerable; | ||
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value; | ||
var __spreadValues = (a, b) => { | ||
for (var prop in b || (b = {})) | ||
if (__hasOwnProp.call(b, prop)) | ||
__defNormalProp(a, prop, b[prop]); | ||
if (__getOwnPropSymbols) | ||
for (var prop of __getOwnPropSymbols(b)) { | ||
if (__propIsEnum.call(b, prop)) | ||
__defNormalProp(a, prop, b[prop]); | ||
} | ||
return a; | ||
}; | ||
var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b)); | ||
Object.defineProperty(exports, "__esModule", { | ||
value: true | ||
// src/rate.ts | ||
import { sortBy, identity, range } from "ramda"; | ||
import unwind from "sort-unwind"; | ||
// src/constants.ts | ||
var builder = (options) => { | ||
const { z = 3, mu = 25, preventSigmaIncrease = false, epsilon = 1e-4 } = options; | ||
const { tau = mu / 300, sigma = mu / z, beta = sigma / 2, limitSigma = preventSigmaIncrease } = options; | ||
const betaSq = beta ** 2; | ||
return { | ||
SIGMA: sigma, | ||
MU: mu, | ||
EPSILON: epsilon, | ||
TWOBETASQ: 2 * betaSq, | ||
BETA: beta, | ||
BETASQ: betaSq, | ||
Z: z, | ||
TAU: tau, | ||
LIMIT_SIGMA: limitSigma | ||
}; | ||
}; | ||
var constants_default = builder; | ||
// src/util.ts | ||
import { zip } from "ramda"; | ||
var sum = (a, b) => a + b; | ||
var rankings = (teams, rank = []) => { | ||
const teamScores = teams.map((_, i) => rank[i] || i); | ||
const outRank = new Array(teams.length); | ||
let s = 0; | ||
for (let j = 0; j < teamScores.length; j += 1) { | ||
if (j > 0 && teamScores[j - 1] < teamScores[j]) { | ||
s = j; | ||
} | ||
outRank[j] = s; | ||
} | ||
return outRank; | ||
}; | ||
var teamRating = (options) => (game) => { | ||
const rank = rankings(game, options.rank); | ||
return game.map((team, i) => [ | ||
// mu[i] | ||
team.map(({ mu }) => mu).reduce(sum, 0), | ||
// sigma^2[i] | ||
team.map(({ sigma }) => sigma * sigma).reduce(sum, 0), | ||
// (original team data) | ||
team, | ||
// rank[i] | ||
rank[i] | ||
]); | ||
}; | ||
var utilC = (options) => { | ||
const { BETASQ } = constants_default(options); | ||
return (teamRatings) => Math.sqrt(teamRatings.map(([_teamMu, teamSigmaSq, _team, _rank]) => teamSigmaSq + BETASQ).reduce(sum, 0)); | ||
}; | ||
var utilSumQ = (teamRatings, c) => teamRatings.map( | ||
([_qMu, _qSigmaSq, _qTeam, qRank]) => teamRatings.filter(([_iMu, _iSigmaSq, _iTeam, iRank]) => iRank >= qRank).map(([iMu, _iSigmaSq, _iTeam, _iRank]) => Math.exp(iMu / c)).reduce(sum, 0) | ||
); | ||
var utilA = (teamRatings) => teamRatings.map( | ||
([_iMu, _iSigmaSq, _iTeam, iRank]) => teamRatings.filter(([_qMu, _qSigmaSq, _qTeam, qRank]) => iRank === qRank).length | ||
); | ||
var gamma = (options) => { | ||
var _a; | ||
return (_a = options.gamma) != null ? _a : ( | ||
// default to iSigma / c | ||
(c, _k, _mu, sigmaSq, _team, _qRank) => Math.sqrt(sigmaSq) / c | ||
); | ||
}; | ||
var util_default = (options) => ({ | ||
utilC: utilC(options), | ||
teamRating: teamRating(options), | ||
gamma: gamma(options) | ||
}); | ||
exports.default = void 0; | ||
var _ramda = require("ramda"); | ||
var _sortUnwind = _interopRequireDefault(require("sort-unwind")); | ||
var _constants = _interopRequireDefault(require("./constants")); | ||
var _models = require("./models"); | ||
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } | ||
const rate = (teams, options = {}) => { | ||
const { | ||
LIMIT_SIGMA, | ||
TAU | ||
} = (0, _constants.default)(options); | ||
const { | ||
model = _models.plackettLuce | ||
} = options; | ||
// src/models/plackett-luce.ts | ||
var model = (game, options = {}) => { | ||
const { EPSILON } = constants_default(options); | ||
const { utilC: utilC2, teamRating: teamRating2, gamma: gamma2 } = util_default(options); | ||
const teamRatings = teamRating2(game); | ||
const c = utilC2(teamRatings); | ||
const sumQ = utilSumQ(teamRatings, c); | ||
const a = utilA(teamRatings); | ||
return teamRatings.map((iTeamRating, i) => { | ||
const [iMu, iSigmaSq, iTeam, iRank] = iTeamRating; | ||
const iMuOverCe = Math.exp(iMu / c); | ||
const [omegaSum, deltaSum] = teamRatings.filter(([_qMu, _qSigmaSq, _qTeam, qRank]) => qRank <= iRank).reduce( | ||
([omega, delta], [_], q) => { | ||
const quotient = iMuOverCe / sumQ[q]; | ||
return [omega + (i === q ? 1 - quotient : -quotient) / a[q], delta + quotient * (1 - quotient) / a[q]]; | ||
}, | ||
[0, 0] | ||
); | ||
const iGamma = gamma2(c, teamRatings.length, ...iTeamRating); | ||
const iOmega = omegaSum * (iSigmaSq / c); | ||
const iDelta = iGamma * deltaSum * (iSigmaSq / c ** 2); | ||
return iTeam.map(({ mu, sigma }) => ({ | ||
mu: mu + sigma ** 2 / iSigmaSq * iOmega, | ||
sigma: sigma * Math.sqrt(Math.max(1 - sigma ** 2 / iSigmaSq * iDelta, EPSILON)) | ||
})); | ||
}); | ||
}; | ||
var plackett_luce_default = model; | ||
// src/rate.ts | ||
var rate = (teams, options = {}) => { | ||
var _a, _b, _c; | ||
const { LIMIT_SIGMA, TAU } = constants_default(options); | ||
const { model: model2 = plackett_luce_default } = options; | ||
let processedTeams = teams; | ||
// if tau is provided, use additive dynamics factor to prevent sigma from dropping too low. | ||
// using this will ensure the rating will stay more pliable after many games | ||
if (options.tau) { | ||
const tauSquared = TAU * TAU; | ||
processedTeams = teams.map(team => team.map(p => ({ | ||
...p, | ||
sigma: Math.sqrt(p.sigma * p.sigma + tauSquared) | ||
}))); | ||
processedTeams = teams.map( | ||
(team) => team.map((p) => __spreadProps(__spreadValues({}, p), { | ||
sigma: Math.sqrt(p.sigma * p.sigma + tauSquared) | ||
})) | ||
); | ||
} | ||
// if rank provided, use it, otherwise transition scores and use that | ||
const rank = options.rank ?? options.score?.map(points => -points) ?? (0, _ramda.range)(1, teams.length + 1); | ||
const [orderedTeams, tenet] = (0, _sortUnwind.default)(rank, processedTeams); | ||
const newRatings = model(orderedTeams, { | ||
...options, | ||
rank: (0, _ramda.sortBy)(_ramda.identity, rank) | ||
}); | ||
let [reorderedTeams] = (0, _sortUnwind.default)(tenet, newRatings); | ||
// limitSigma prevents sigma from ever going up which can happen when using a tau value. | ||
// this helps prevent ordinal from ever dropping after winning a game which can feel unfair | ||
const rank = (_c = (_b = options.rank) != null ? _b : (_a = options.score) == null ? void 0 : _a.map((points) => -points)) != null ? _c : range(1, teams.length + 1); | ||
const [orderedTeams, tenet] = unwind(rank, processedTeams); | ||
const newRatings = model2(orderedTeams, __spreadProps(__spreadValues({}, options), { | ||
rank: sortBy(identity, rank) | ||
})); | ||
let [reorderedTeams] = unwind(tenet, newRatings); | ||
if (TAU && LIMIT_SIGMA) { | ||
reorderedTeams = reorderedTeams.map((team, i) => team.map((p, j) => ({ | ||
...p, | ||
sigma: Math.min(p.sigma, teams[i][j].sigma) | ||
}))); | ||
reorderedTeams = reorderedTeams.map( | ||
(team, i) => team.map((p, j) => __spreadProps(__spreadValues({}, p), { | ||
sigma: Math.min(p.sigma, teams[i][j].sigma) | ||
})) | ||
); | ||
} | ||
return reorderedTeams; | ||
}; | ||
var _default = exports.default = rate; | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmFtZGEiLCJyZXF1aXJlIiwiX3NvcnRVbndpbmQiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiX2NvbnN0YW50cyIsIl9tb2RlbHMiLCJlIiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJyYXRlIiwidGVhbXMiLCJvcHRpb25zIiwiTElNSVRfU0lHTUEiLCJUQVUiLCJjb25zdGFudHMiLCJtb2RlbCIsInBsYWNrZXR0THVjZSIsInByb2Nlc3NlZFRlYW1zIiwidGF1IiwidGF1U3F1YXJlZCIsIm1hcCIsInRlYW0iLCJwIiwic2lnbWEiLCJNYXRoIiwic3FydCIsInJhbmsiLCJzY29yZSIsInBvaW50cyIsInJhbmdlIiwibGVuZ3RoIiwib3JkZXJlZFRlYW1zIiwidGVuZXQiLCJ1bndpbmQiLCJuZXdSYXRpbmdzIiwic29ydEJ5IiwiaWRlbnRpdHkiLCJyZW9yZGVyZWRUZWFtcyIsImkiLCJqIiwibWluIiwiX2RlZmF1bHQiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vc3JjL3JhdGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgc29ydEJ5LCBpZGVudGl0eSwgcmFuZ2UgfSBmcm9tICdyYW1kYSdcbmltcG9ydCB1bndpbmQgZnJvbSAnc29ydC11bndpbmQnXG5cbmltcG9ydCB7IFJhdGluZywgT3B0aW9ucywgVGVhbSB9IGZyb20gJy4vdHlwZXMnXG5pbXBvcnQgY29uc3RhbnRzIGZyb20gJy4vY29uc3RhbnRzJ1xuaW1wb3J0IHsgcGxhY2tldHRMdWNlIH0gZnJvbSAnLi9tb2RlbHMnXG5cbmNvbnN0IHJhdGUgPSAodGVhbXM6IFRlYW1bXSwgb3B0aW9uczogT3B0aW9ucyA9IHt9KTogVGVhbVtdID0+IHtcbiAgY29uc3QgeyBMSU1JVF9TSUdNQSwgVEFVIH0gPSBjb25zdGFudHMob3B0aW9ucylcbiAgY29uc3QgeyBtb2RlbCA9IHBsYWNrZXR0THVjZSB9ID0gb3B0aW9uc1xuICBsZXQgcHJvY2Vzc2VkVGVhbXMgPSB0ZWFtc1xuXG4gIC8vIGlmIHRhdSBpcyBwcm92aWRlZCwgdXNlIGFkZGl0aXZlIGR5bmFtaWNzIGZhY3RvciB0byBwcmV2ZW50IHNpZ21hIGZyb20gZHJvcHBpbmcgdG9vIGxvdy5cbiAgLy8gdXNpbmcgdGhpcyB3aWxsIGVuc3VyZSB0aGUgcmF0aW5nIHdpbGwgc3RheSBtb3JlIHBsaWFibGUgYWZ0ZXIgbWFueSBnYW1lc1xuICBpZiAob3B0aW9ucy50YXUpIHtcbiAgICBjb25zdCB0YXVTcXVhcmVkID0gVEFVICogVEFVXG4gICAgcHJvY2Vzc2VkVGVhbXMgPSB0ZWFtcy5tYXAoKHRlYW0pID0+XG4gICAgICB0ZWFtLm1hcCgocCkgPT4gKHtcbiAgICAgICAgLi4ucCxcbiAgICAgICAgc2lnbWE6IE1hdGguc3FydChwLnNpZ21hICogcC5zaWdtYSArIHRhdVNxdWFyZWQpLFxuICAgICAgfSkpXG4gICAgKVxuICB9XG5cbiAgLy8gaWYgcmFuayBwcm92aWRlZCwgdXNlIGl0LCBvdGhlcndpc2UgdHJhbnNpdGlvbiBzY29yZXMgYW5kIHVzZSB0aGF0XG4gIGNvbnN0IHJhbmsgPSBvcHRpb25zLnJhbmsgPz8gb3B0aW9ucy5zY29yZT8ubWFwKChwb2ludHMpID0+IC1wb2ludHMpID8/IHJhbmdlKDEsIHRlYW1zLmxlbmd0aCArIDEpXG5cbiAgY29uc3QgW29yZGVyZWRUZWFtcywgdGVuZXRdID0gdW53aW5kKHJhbmssIHByb2Nlc3NlZFRlYW1zKVxuICBjb25zdCBuZXdSYXRpbmdzID0gbW9kZWwob3JkZXJlZFRlYW1zLCB7XG4gICAgLi4ub3B0aW9ucyxcbiAgICByYW5rOiBzb3J0QnkoaWRlbnRpdHksIHJhbmspLFxuICB9KVxuICBsZXQgW3Jlb3JkZXJlZFRlYW1zXSA9IHVud2luZCh0ZW5ldCwgbmV3UmF0aW5ncylcblxuICAvLyBsaW1pdFNpZ21hIHByZXZlbnRzIHNpZ21hIGZyb20gZXZlciBnb2luZyB1cCB3aGljaCBjYW4gaGFwcGVuIHdoZW4gdXNpbmcgYSB0YXUgdmFsdWUuXG4gIC8vIHRoaXMgaGVscHMgcHJldmVudCBvcmRpbmFsIGZyb20gZXZlciBkcm9wcGluZyBhZnRlciB3aW5uaW5nIGEgZ2FtZSB3aGljaCBjYW4gZmVlbCB1bmZhaXJcbiAgaWYgKFRBVSAmJiBMSU1JVF9TSUdNQSkge1xuICAgIHJlb3JkZXJlZFRlYW1zID0gcmVvcmRlcmVkVGVhbXMubWFwKCh0ZWFtOiBSYXRpbmdbXSwgaTogbnVtYmVyKSA9PlxuICAgICAgdGVhbS5tYXAoKHAsIGopID0+ICh7XG4gICAgICAgIC4uLnAsXG4gICAgICAgIHNpZ21hOiBNYXRoLm1pbihwLnNpZ21hLCB0ZWFtc1tpXVtqXS5zaWdtYSksXG4gICAgICB9KSlcbiAgICApXG4gIH1cblxuICByZXR1cm4gcmVvcmRlcmVkVGVhbXNcbn1cblxuZXhwb3J0IGRlZmF1bHQgcmF0ZVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxJQUFBQSxNQUFBLEdBQUFDLE9BQUE7QUFDQSxJQUFBQyxXQUFBLEdBQUFDLHNCQUFBLENBQUFGLE9BQUE7QUFHQSxJQUFBRyxVQUFBLEdBQUFELHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBSSxPQUFBLEdBQUFKLE9BQUE7QUFBdUMsU0FBQUUsdUJBQUFHLENBQUEsV0FBQUEsQ0FBQSxJQUFBQSxDQUFBLENBQUFDLFVBQUEsR0FBQUQsQ0FBQSxLQUFBRSxPQUFBLEVBQUFGLENBQUE7QUFFdkMsTUFBTUcsSUFBSSxHQUFHQSxDQUFDQyxLQUFhLEVBQUVDLE9BQWdCLEdBQUcsQ0FBQyxDQUFDLEtBQWE7RUFDN0QsTUFBTTtJQUFFQyxXQUFXO0lBQUVDO0VBQUksQ0FBQyxHQUFHLElBQUFDLGtCQUFTLEVBQUNILE9BQU8sQ0FBQztFQUMvQyxNQUFNO0lBQUVJLEtBQUssR0FBR0M7RUFBYSxDQUFDLEdBQUdMLE9BQU87RUFDeEMsSUFBSU0sY0FBYyxHQUFHUCxLQUFLOztFQUUxQjtFQUNBO0VBQ0EsSUFBSUMsT0FBTyxDQUFDTyxHQUFHLEVBQUU7SUFDZixNQUFNQyxVQUFVLEdBQUdOLEdBQUcsR0FBR0EsR0FBRztJQUM1QkksY0FBYyxHQUFHUCxLQUFLLENBQUNVLEdBQUcsQ0FBRUMsSUFBSSxJQUM5QkEsSUFBSSxDQUFDRCxHQUFHLENBQUVFLENBQUMsS0FBTTtNQUNmLEdBQUdBLENBQUM7TUFDSkMsS0FBSyxFQUFFQyxJQUFJLENBQUNDLElBQUksQ0FBQ0gsQ0FBQyxDQUFDQyxLQUFLLEdBQUdELENBQUMsQ0FBQ0MsS0FBSyxHQUFHSixVQUFVO0lBQ2pELENBQUMsQ0FBQyxDQUNKLENBQUM7RUFDSDs7RUFFQTtFQUNBLE1BQU1PLElBQUksR0FBR2YsT0FBTyxDQUFDZSxJQUFJLElBQUlmLE9BQU8sQ0FBQ2dCLEtBQUssRUFBRVAsR0FBRyxDQUFFUSxNQUFNLElBQUssQ0FBQ0EsTUFBTSxDQUFDLElBQUksSUFBQUMsWUFBSyxFQUFDLENBQUMsRUFBRW5CLEtBQUssQ0FBQ29CLE1BQU0sR0FBRyxDQUFDLENBQUM7RUFFbEcsTUFBTSxDQUFDQyxZQUFZLEVBQUVDLEtBQUssQ0FBQyxHQUFHLElBQUFDLG1CQUFNLEVBQUNQLElBQUksRUFBRVQsY0FBYyxDQUFDO0VBQzFELE1BQU1pQixVQUFVLEdBQUduQixLQUFLLENBQUNnQixZQUFZLEVBQUU7SUFDckMsR0FBR3BCLE9BQU87SUFDVmUsSUFBSSxFQUFFLElBQUFTLGFBQU0sRUFBQ0MsZUFBUSxFQUFFVixJQUFJO0VBQzdCLENBQUMsQ0FBQztFQUNGLElBQUksQ0FBQ1csY0FBYyxDQUFDLEdBQUcsSUFBQUosbUJBQU0sRUFBQ0QsS0FBSyxFQUFFRSxVQUFVLENBQUM7O0VBRWhEO0VBQ0E7RUFDQSxJQUFJckIsR0FBRyxJQUFJRCxXQUFXLEVBQUU7SUFDdEJ5QixjQUFjLEdBQUdBLGNBQWMsQ0FBQ2pCLEdBQUcsQ0FBQyxDQUFDQyxJQUFjLEVBQUVpQixDQUFTLEtBQzVEakIsSUFBSSxDQUFDRCxHQUFHLENBQUMsQ0FBQ0UsQ0FBQyxFQUFFaUIsQ0FBQyxNQUFNO01BQ2xCLEdBQUdqQixDQUFDO01BQ0pDLEtBQUssRUFBRUMsSUFBSSxDQUFDZ0IsR0FBRyxDQUFDbEIsQ0FBQyxDQUFDQyxLQUFLLEVBQUViLEtBQUssQ0FBQzRCLENBQUMsQ0FBQyxDQUFDQyxDQUFDLENBQUMsQ0FBQ2hCLEtBQUs7SUFDNUMsQ0FBQyxDQUFDLENBQ0osQ0FBQztFQUNIO0VBRUEsT0FBT2MsY0FBYztBQUN2QixDQUFDO0FBQUEsSUFBQUksUUFBQSxHQUFBQyxPQUFBLENBQUFsQyxPQUFBLEdBRWNDLElBQUkiLCJpZ25vcmVMaXN0IjpbXX0= | ||
var rate_default = rate; | ||
export { | ||
rate_default as default | ||
}; | ||
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL3JhdGUudHMiLCAiLi4vc3JjL2NvbnN0YW50cy50cyIsICIuLi9zcmMvdXRpbC50cyIsICIuLi9zcmMvbW9kZWxzL3BsYWNrZXR0LWx1Y2UudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7IHNvcnRCeSwgaWRlbnRpdHksIHJhbmdlIH0gZnJvbSAncmFtZGEnXG5pbXBvcnQgdW53aW5kIGZyb20gJ3NvcnQtdW53aW5kJ1xuXG5pbXBvcnQgeyBSYXRpbmcsIE9wdGlvbnMsIFRlYW0gfSBmcm9tICcuL3R5cGVzJ1xuaW1wb3J0IGNvbnN0YW50cyBmcm9tICcuL2NvbnN0YW50cydcbmltcG9ydCB7IHBsYWNrZXR0THVjZSB9IGZyb20gJy4vbW9kZWxzJ1xuXG5jb25zdCByYXRlID0gKHRlYW1zOiBUZWFtW10sIG9wdGlvbnM6IE9wdGlvbnMgPSB7fSk6IFRlYW1bXSA9PiB7XG4gIGNvbnN0IHsgTElNSVRfU0lHTUEsIFRBVSB9ID0gY29uc3RhbnRzKG9wdGlvbnMpXG4gIGNvbnN0IHsgbW9kZWwgPSBwbGFja2V0dEx1Y2UgfSA9IG9wdGlvbnNcbiAgbGV0IHByb2Nlc3NlZFRlYW1zID0gdGVhbXNcblxuICAvLyBpZiB0YXUgaXMgcHJvdmlkZWQsIHVzZSBhZGRpdGl2ZSBkeW5hbWljcyBmYWN0b3IgdG8gcHJldmVudCBzaWdtYSBmcm9tIGRyb3BwaW5nIHRvbyBsb3cuXG4gIC8vIHVzaW5nIHRoaXMgd2lsbCBlbnN1cmUgdGhlIHJhdGluZyB3aWxsIHN0YXkgbW9yZSBwbGlhYmxlIGFmdGVyIG1hbnkgZ2FtZXNcbiAgaWYgKG9wdGlvbnMudGF1KSB7XG4gICAgY29uc3QgdGF1U3F1YXJlZCA9IFRBVSAqIFRBVVxuICAgIHByb2Nlc3NlZFRlYW1zID0gdGVhbXMubWFwKCh0ZWFtKSA9PlxuICAgICAgdGVhbS5tYXAoKHApID0+ICh7XG4gICAgICAgIC4uLnAsXG4gICAgICAgIHNpZ21hOiBNYXRoLnNxcnQocC5zaWdtYSAqIHAuc2lnbWEgKyB0YXVTcXVhcmVkKSxcbiAgICAgIH0pKVxuICAgIClcbiAgfVxuXG4gIC8vIGlmIHJhbmsgcHJvdmlkZWQsIHVzZSBpdCwgb3RoZXJ3aXNlIHRyYW5zaXRpb24gc2NvcmVzIGFuZCB1c2UgdGhhdFxuICBjb25zdCByYW5rID0gb3B0aW9ucy5yYW5rID8/IG9wdGlvbnMuc2NvcmU/Lm1hcCgocG9pbnRzKSA9PiAtcG9pbnRzKSA/PyByYW5nZSgxLCB0ZWFtcy5sZW5ndGggKyAxKVxuXG4gIGNvbnN0IFtvcmRlcmVkVGVhbXMsIHRlbmV0XSA9IHVud2luZChyYW5rLCBwcm9jZXNzZWRUZWFtcylcbiAgY29uc3QgbmV3UmF0aW5ncyA9IG1vZGVsKG9yZGVyZWRUZWFtcywge1xuICAgIC4uLm9wdGlvbnMsXG4gICAgcmFuazogc29ydEJ5KGlkZW50aXR5LCByYW5rKSxcbiAgfSlcbiAgbGV0IFtyZW9yZGVyZWRUZWFtc10gPSB1bndpbmQodGVuZXQsIG5ld1JhdGluZ3MpXG5cbiAgLy8gbGltaXRTaWdtYSBwcmV2ZW50cyBzaWdtYSBmcm9tIGV2ZXIgZ29pbmcgdXAgd2hpY2ggY2FuIGhhcHBlbiB3aGVuIHVzaW5nIGEgdGF1IHZhbHVlLlxuICAvLyB0aGlzIGhlbHBzIHByZXZlbnQgb3JkaW5hbCBmcm9tIGV2ZXIgZHJvcHBpbmcgYWZ0ZXIgd2lubmluZyBhIGdhbWUgd2hpY2ggY2FuIGZlZWwgdW5mYWlyXG4gIGlmIChUQVUgJiYgTElNSVRfU0lHTUEpIHtcbiAgICByZW9yZGVyZWRUZWFtcyA9IHJlb3JkZXJlZFRlYW1zLm1hcCgodGVhbTogUmF0aW5nW10sIGk6IG51bWJlcikgPT5cbiAgICAgIHRlYW0ubWFwKChwLCBqKSA9PiAoe1xuICAgICAgICAuLi5wLFxuICAgICAgICBzaWdtYTogTWF0aC5taW4ocC5zaWdtYSwgdGVhbXNbaV1bal0uc2lnbWEpLFxuICAgICAgfSkpXG4gICAgKVxuICB9XG5cbiAgcmV0dXJuIHJlb3JkZXJlZFRlYW1zXG59XG5cbmV4cG9ydCBkZWZhdWx0IHJhdGVcbiIsICJpbXBvcnQgeyBPcHRpb25zIH0gZnJvbSAnLi90eXBlcydcblxuY29uc3QgYnVpbGRlciA9IChvcHRpb25zOiBPcHRpb25zKSA9PiB7XG4gIC8vIGknZCBsb3ZlIHRvIGtub3cgb2YgYSBiZXR0ZXIgd2F5IHRvIGRvIHRoaXNcbiAgY29uc3QgeyB6ID0gMywgbXUgPSAyNSwgcHJldmVudFNpZ21hSW5jcmVhc2UgPSBmYWxzZSwgZXBzaWxvbiA9IDAuMDAwMSB9ID0gb3B0aW9uc1xuICBjb25zdCB7IHRhdSA9IG11IC8gMzAwLCBzaWdtYSA9IG11IC8geiwgYmV0YSA9IHNpZ21hIC8gMiwgbGltaXRTaWdtYSA9IHByZXZlbnRTaWdtYUluY3JlYXNlIH0gPSBvcHRpb25zXG4gIGNvbnN0IGJldGFTcSA9IGJldGEgKiogMlxuXG4gIHJldHVybiB7XG4gICAgU0lHTUE6IHNpZ21hLFxuICAgIE1VOiBtdSxcbiAgICBFUFNJTE9OOiBlcHNpbG9uLFxuICAgIFRXT0JFVEFTUTogMiAqIGJldGFTcSxcbiAgICBCRVRBOiBiZXRhLFxuICAgIEJFVEFTUTogYmV0YVNxLFxuICAgIFo6IHosXG4gICAgVEFVOiB0YXUsXG4gICAgTElNSVRfU0lHTUE6IGxpbWl0U2lnbWEsXG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgYnVpbGRlclxuIiwgImltcG9ydCB7IHppcCB9IGZyb20gJ3JhbWRhJ1xuaW1wb3J0IGNvbnN0YW50cyBmcm9tICcuL2NvbnN0YW50cydcbmltcG9ydCB7IFJhdGluZywgT3B0aW9ucywgR2FtbWEsIFRlYW0sIFJhbmsgfSBmcm9tICcuL3R5cGVzJ1xuXG5leHBvcnQgdHlwZSBUZWFtTXUgPSBudW1iZXJcblxuZXhwb3J0IHR5cGUgVGVhbVNpZ21hU3EgPSBudW1iZXJcblxuZXhwb3J0IHR5cGUgVGVhbVJhdGluZyA9IFtUZWFtTXUsIFRlYW1TaWdtYVNxLCBUZWFtLCBSYW5rXVxuXG5leHBvcnQgY29uc3Qgc3VtID0gKGE6IG51bWJlciwgYjogbnVtYmVyKSA9PiBhICsgYlxuXG5leHBvcnQgY29uc3Qgc2NvcmUgPSAocTogbnVtYmVyLCBpOiBudW1iZXIpID0+IHtcbiAgaWYgKHEgPCBpKSB7XG4gICAgcmV0dXJuIDAuMFxuICB9XG4gIGlmIChxID4gaSkge1xuICAgIHJldHVybiAxLjBcbiAgfVxuICAvLyBxID09PSBpXG4gIHJldHVybiAwLjVcbn1cblxuZXhwb3J0IGNvbnN0IHJhbmtpbmdzID0gKHRlYW1zOiBUZWFtW10sIHJhbms6IG51bWJlcltdID0gW10pID0+IHtcbiAgY29uc3QgdGVhbVNjb3JlcyA9IHRlYW1zLm1hcCgoXywgaSkgPT4gcmFua1tpXSB8fCBpKVxuICBjb25zdCBvdXRSYW5rID0gbmV3IEFycmF5KHRlYW1zLmxlbmd0aClcblxuICBsZXQgcyA9IDBcbiAgZm9yIChsZXQgaiA9IDA7IGogPCB0ZWFtU2NvcmVzLmxlbmd0aDsgaiArPSAxKSB7XG4gICAgaWYgKGogPiAwICYmIHRlYW1TY29yZXNbaiAtIDFdIDwgdGVhbVNjb3Jlc1tqXSkge1xuICAgICAgcyA9IGpcbiAgICB9XG4gICAgb3V0UmFua1tqXSA9IHNcbiAgfVxuICByZXR1cm4gb3V0UmFua1xufVxuXG4vLyB0aGlzIGlzIGJhc2ljYWxseSBzaGFyZWQgY29kZSwgcHJlY29tcHV0ZWQgZm9yIGV2ZXJ5IG1vZGVsXG5jb25zdCB0ZWFtUmF0aW5nID1cbiAgKG9wdGlvbnM6IE9wdGlvbnMpID0+XG4gIChnYW1lOiBUZWFtW10pOiBUZWFtUmF0aW5nW10gPT4ge1xuICAgIGNvbnN0IHJhbmsgPSByYW5raW5ncyhnYW1lLCBvcHRpb25zLnJhbmspXG4gICAgcmV0dXJuIGdhbWUubWFwKCh0ZWFtLCBpKSA9PiBbXG4gICAgICAvLyBtdVtpXVxuICAgICAgdGVhbS5tYXAoKHsgbXUgfSkgPT4gbXUpLnJlZHVjZShzdW0sIDApLFxuICAgICAgLy8gc2lnbWFeMltpXVxuICAgICAgdGVhbS5tYXAoKHsgc2lnbWEgfSkgPT4gc2lnbWEgKiBzaWdtYSkucmVkdWNlKHN1bSwgMCksXG4gICAgICAvLyAob3JpZ2luYWwgdGVhbSBkYXRhKVxuICAgICAgdGVhbSxcbiAgICAgIC8vIHJhbmtbaV1cbiAgICAgIHJhbmtbaV0sXG4gICAgXSlcbiAgfVxuXG5leHBvcnQgY29uc3QgbGFkZGVyUGFpcnMgPSA8VD4ocmFua3M6IFRbXSk6IFRbXVtdID0+IHtcbiAgY29uc3Qgc2l6ZSA9IHJhbmtzLmxlbmd0aFxuICBjb25zdCBsZWZ0ID0gW3VuZGVmaW5lZCwgLi4ucmFua3Muc2xpY2UoMCwgc2l6ZSAtIDEpXVxuICBjb25zdCByaWdodCA9IFsuLi5yYW5rcy5zbGljZSgxKSwgdW5kZWZpbmVkXVxuICByZXR1cm4gemlwKGxlZnQsIHJpZ2h0KS5tYXAoKFtsLCByXSkgPT4ge1xuICAgIGlmIChsICE9PSB1bmRlZmluZWQgJiYgciAhPT0gdW5kZWZpbmVkKSByZXR1cm4gW2wsIHJdXG4gICAgaWYgKGwgIT09IHVuZGVmaW5lZCAmJiByID09PSB1bmRlZmluZWQpIHJldHVybiBbbF1cbiAgICBpZiAobCA9PT0gdW5kZWZpbmVkICYmIHIgIT09IHVuZGVmaW5lZCkgcmV0dXJuIFtyXVxuICAgIHJldHVybiBbXSAvLyB0aGlzIHNob3VsZCByZWFsbHkgb25seSBoYXBwZW4gd2hlbiBzaXplID09PSAxXG4gIH0pXG59XG5cbmNvbnN0IHV0aWxDID0gKG9wdGlvbnM6IE9wdGlvbnMpID0+IHtcbiAgY29uc3QgeyBCRVRBU1EgfSA9IGNvbnN0YW50cyhvcHRpb25zKVxuICByZXR1cm4gKHRlYW1SYXRpbmdzOiBUZWFtUmF0aW5nW10pID0+XG4gICAgTWF0aC5zcXJ0KHRlYW1SYXRpbmdzLm1hcCgoW190ZWFtTXUsIHRlYW1TaWdtYVNxLCBfdGVhbSwgX3JhbmtdKSA9PiB0ZWFtU2lnbWFTcSArIEJFVEFTUSkucmVkdWNlKHN1bSwgMCkpXG59XG5cbmV4cG9ydCBjb25zdCB1dGlsU3VtUSA9ICh0ZWFtUmF0aW5nczogVGVhbVJhdGluZ1tdLCBjOiBudW1iZXIpID0+XG4gIHRlYW1SYXRpbmdzLm1hcCgoW19xTXUsIF9xU2lnbWFTcSwgX3FUZWFtLCBxUmFua10pID0+XG4gICAgdGVhbVJhdGluZ3NcbiAgICAgIC5maWx0ZXIoKFtfaU11LCBfaVNpZ21hU3EsIF9pVGVhbSwgaVJhbmtdKSA9PiBpUmFuayA+PSBxUmFuaylcbiAgICAgIC5tYXAoKFtpTXUsIF9pU2lnbWFTcSwgX2lUZWFtLCBfaVJhbmtdKSA9PiBNYXRoLmV4cChpTXUgLyBjKSlcbiAgICAgIC5yZWR1Y2Uoc3VtLCAwKVxuICApXG5cbmV4cG9ydCBjb25zdCB1dGlsQSA9ICh0ZWFtUmF0aW5nczogVGVhbVJhdGluZ1tdKSA9PlxuICB0ZWFtUmF0aW5ncy5tYXAoXG4gICAgKFtfaU11LCBfaVNpZ21hU3EsIF9pVGVhbSwgaVJhbmtdKSA9PlxuICAgICAgdGVhbVJhdGluZ3MuZmlsdGVyKChbX3FNdSwgX3FTaWdtYVNxLCBfcVRlYW0sIHFSYW5rXSkgPT4gaVJhbmsgPT09IHFSYW5rKS5sZW5ndGhcbiAgKVxuXG5leHBvcnQgY29uc3QgZ2FtbWEgPSAob3B0aW9uczogT3B0aW9ucyk6IEdhbW1hID0+XG4gIG9wdGlvbnMuZ2FtbWEgPz9cbiAgLy8gZGVmYXVsdCB0byBpU2lnbWEgLyBjXG4gICgoYzogbnVtYmVyLCBfazogbnVtYmVyLCBfbXU6IG51bWJlciwgc2lnbWFTcTogbnVtYmVyLCBfdGVhbTogUmF0aW5nW10sIF9xUmFuazogbnVtYmVyKSA9PiBNYXRoLnNxcnQoc2lnbWFTcSkgLyBjKVxuXG5leHBvcnQgZGVmYXVsdCAob3B0aW9uczogT3B0aW9ucykgPT4gKHtcbiAgdXRpbEM6IHV0aWxDKG9wdGlvbnMpLFxuICB0ZWFtUmF0aW5nOiB0ZWFtUmF0aW5nKG9wdGlvbnMpLFxuICBnYW1tYTogZ2FtbWEob3B0aW9ucyksXG59KVxuIiwgImltcG9ydCB1dGlsLCB7IHV0aWxTdW1RLCB1dGlsQSB9IGZyb20gJy4uL3V0aWwnXG5pbXBvcnQgY29uc3RhbnRzIGZyb20gJy4uL2NvbnN0YW50cydcbmltcG9ydCB7IFJhdGluZywgT3B0aW9ucywgTW9kZWwgfSBmcm9tICcuLi90eXBlcydcblxuY29uc3QgbW9kZWw6IE1vZGVsID0gKGdhbWU6IFJhdGluZ1tdW10sIG9wdGlvbnM6IE9wdGlvbnMgPSB7fSkgPT4ge1xuICBjb25zdCB7IEVQU0lMT04gfSA9IGNvbnN0YW50cyhvcHRpb25zKVxuICBjb25zdCB7IHV0aWxDLCB0ZWFtUmF0aW5nLCBnYW1tYSB9ID0gdXRpbChvcHRpb25zKVxuICBjb25zdCB0ZWFtUmF0aW5ncyA9IHRlYW1SYXRpbmcoZ2FtZSlcbiAgY29uc3QgYyA9IHV0aWxDKHRlYW1SYXRpbmdzKVxuICBjb25zdCBzdW1RID0gdXRpbFN1bVEodGVhbVJhdGluZ3MsIGMpXG4gIGNvbnN0IGEgPSB1dGlsQSh0ZWFtUmF0aW5ncylcblxuICByZXR1cm4gdGVhbVJhdGluZ3MubWFwKChpVGVhbVJhdGluZywgaSkgPT4ge1xuICAgIGNvbnN0IFtpTXUsIGlTaWdtYVNxLCBpVGVhbSwgaVJhbmtdID0gaVRlYW1SYXRpbmdcbiAgICBjb25zdCBpTXVPdmVyQ2UgPSBNYXRoLmV4cChpTXUgLyBjKSAvLyB0bXAxXG4gICAgY29uc3QgW29tZWdhU3VtLCBkZWx0YVN1bV0gPSB0ZWFtUmF0aW5nc1xuICAgICAgLmZpbHRlcigoW19xTXUsIF9xU2lnbWFTcSwgX3FUZWFtLCBxUmFua10pID0+IHFSYW5rIDw9IGlSYW5rKVxuICAgICAgLnJlZHVjZShcbiAgICAgICAgKFtvbWVnYSwgZGVsdGFdLCBbX10sIHEpID0+IHtcbiAgICAgICAgICBjb25zdCBxdW90aWVudCA9IGlNdU92ZXJDZSAvIHN1bVFbcV1cbiAgICAgICAgICByZXR1cm4gW29tZWdhICsgKGkgPT09IHEgPyAxIC0gcXVvdGllbnQgOiAtcXVvdGllbnQpIC8gYVtxXSwgZGVsdGEgKyAocXVvdGllbnQgKiAoMSAtIHF1b3RpZW50KSkgLyBhW3FdXVxuICAgICAgICB9LFxuICAgICAgICBbMCwgMF1cbiAgICAgIClcblxuICAgIGNvbnN0IGlHYW1tYSA9IGdhbW1hKGMsIHRlYW1SYXRpbmdzLmxlbmd0aCwgLi4uaVRlYW1SYXRpbmcpXG4gICAgY29uc3QgaU9tZWdhID0gb21lZ2FTdW0gKiAoaVNpZ21hU3EgLyBjKVxuICAgIGNvbnN0IGlEZWx0YSA9IGlHYW1tYSAqIGRlbHRhU3VtICogKGlTaWdtYVNxIC8gYyAqKiAyKVxuXG4gICAgcmV0dXJuIGlUZWFtLm1hcCgoeyBtdSwgc2lnbWEgfSkgPT4gKHtcbiAgICAgIG11OiBtdSArIChzaWdtYSAqKiAyIC8gaVNpZ21hU3EpICogaU9tZWdhLFxuICAgICAgc2lnbWE6IHNpZ21hICogTWF0aC5zcXJ0KE1hdGgubWF4KDEgLSAoc2lnbWEgKiogMiAvIGlTaWdtYVNxKSAqIGlEZWx0YSwgRVBTSUxPTikpLFxuICAgIH0pKVxuICB9KVxufVxuXG5leHBvcnQgZGVmYXVsdCBtb2RlbFxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsU0FBUyxRQUFRLFVBQVUsYUFBYTtBQUN4QyxPQUFPLFlBQVk7OztBQ0NuQixJQUFNLFVBQVUsQ0FBQyxZQUFxQjtBQUVwQyxRQUFNLEVBQUUsSUFBSSxHQUFHLEtBQUssSUFBSSx1QkFBdUIsT0FBTyxVQUFVLEtBQU8sSUFBSTtBQUMzRSxRQUFNLEVBQUUsTUFBTSxLQUFLLEtBQUssUUFBUSxLQUFLLEdBQUcsT0FBTyxRQUFRLEdBQUcsYUFBYSxxQkFBcUIsSUFBSTtBQUNoRyxRQUFNLFNBQVMsUUFBUTtBQUV2QixTQUFPO0FBQUEsSUFDTCxPQUFPO0FBQUEsSUFDUCxJQUFJO0FBQUEsSUFDSixTQUFTO0FBQUEsSUFDVCxXQUFXLElBQUk7QUFBQSxJQUNmLE1BQU07QUFBQSxJQUNOLFFBQVE7QUFBQSxJQUNSLEdBQUc7QUFBQSxJQUNILEtBQUs7QUFBQSxJQUNMLGFBQWE7QUFBQSxFQUNmO0FBQ0Y7QUFFQSxJQUFPLG9CQUFROzs7QUNyQmYsU0FBUyxXQUFXO0FBVWIsSUFBTSxNQUFNLENBQUMsR0FBVyxNQUFjLElBQUk7QUFhMUMsSUFBTSxXQUFXLENBQUMsT0FBZSxPQUFpQixDQUFD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QUFLLEVBQUUsUUFBUSxFQUFFLFFBQVEsVUFBVTtBQUFBLE1BQ2pELEVBQUU7QUFBQSxJQUNKO0FBQUEsRUFDRjtBQUdBLFFBQU0sUUFBTyxtQkFBUSxTQUFSLGFBQWdCLGFBQVEsVUFBUixtQkFBZSxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQWhELFlBQTJELE1BQU0sR0FBRyxNQUFNLFNBQVMsQ0FBQztBQUVqRyxRQUFNLENBQUMsY0FBYyxLQUFLLElBQUksT0FBTyxNQUFNLGNBQWM7QUFDekQsUUFBTSxhQUFhQSxPQUFNLGNBQWMsaUNBQ2xDLFVBRGtDO0FBQUEsSUFFckMsTUFBTSxPQUFPLFVBQVUsSUFBSTtBQUFBLEVBQzdCLEVBQUM7QUFDRCxNQUFJLENBQUMsY0FBYyxJQUFJLE9BQU8sT0FBTyxVQUFVO0FBSS9DLE1BQUksT0FBTyxhQUFhO0FBQ3RCLHFCQUFpQixlQUFlO0FBQUEsTUFBSSxDQUFDLE1BQWdCLE1BQ25ELEtBQUssSUFBSSxDQUFDLEdBQUcsTUFBTyxpQ0FDZixJQURlO0FBQUEsUUFFbEIsT0FBTyxLQUFLLElBQUksRUFBRSxPQUFPLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLO0FBQUEsTUFDNUMsRUFBRTtBQUFBLElBQ0o7QUFBQSxFQUNGO0FBRUEsU0FBTztBQUNUO0FBRUEsSUFBTyxlQUFROyIsCiAgIm5hbWVzIjogWyJ1dGlsQyIsICJ0ZWFtUmF0aW5nIiwgImdhbW1hIiwgIm1vZGVsIl0KfQo= |
@@ -1,2 +0,3 @@ | ||
import { Options, Rating } from './types'; | ||
import { Options, Rating } from './types.js'; | ||
declare const rating: (init?: { | ||
@@ -6,2 +7,3 @@ mu?: number; | ||
}, options?: Options) => Rating; | ||
export default rating; | ||
export { rating as default }; |
@@ -1,16 +0,46 @@ | ||
"use strict"; | ||
var __defProp = Object.defineProperty; | ||
var __getOwnPropSymbols = Object.getOwnPropertySymbols; | ||
var __hasOwnProp = Object.prototype.hasOwnProperty; | ||
var __propIsEnum = Object.prototype.propertyIsEnumerable; | ||
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value; | ||
var __spreadValues = (a, b) => { | ||
for (var prop in b || (b = {})) | ||
if (__hasOwnProp.call(b, prop)) | ||
__defNormalProp(a, prop, b[prop]); | ||
if (__getOwnPropSymbols) | ||
for (var prop of __getOwnPropSymbols(b)) { | ||
if (__propIsEnum.call(b, prop)) | ||
__defNormalProp(a, prop, b[prop]); | ||
} | ||
return a; | ||
}; | ||
Object.defineProperty(exports, "__esModule", { | ||
value: true | ||
}); | ||
exports.default = void 0; | ||
var _constants = require("./constants"); | ||
const rating = (init, options = {}) => ({ | ||
mu: init?.mu ?? (0, _constants.mu)(options), | ||
sigma: init?.sigma ?? (0, _constants.sigma)({ | ||
...options, | ||
mu: init?.mu | ||
}) | ||
}); | ||
var _default = exports.default = rating; | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfY29uc3RhbnRzIiwicmVxdWlyZSIsInJhdGluZyIsImluaXQiLCJvcHRpb25zIiwibXUiLCJkZWZhdWx0TXUiLCJzaWdtYSIsImRlZmF1bHRTaWdtYSIsIl9kZWZhdWx0IiwiZXhwb3J0cyIsImRlZmF1bHQiXSwic291cmNlcyI6WyIuLi9zcmMvcmF0aW5nLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IG11IGFzIGRlZmF1bHRNdSwgc2lnbWEgYXMgZGVmYXVsdFNpZ21hIH0gZnJvbSAnLi9jb25zdGFudHMnXG5pbXBvcnQgeyBPcHRpb25zLCBSYXRpbmcgfSBmcm9tICcuL3R5cGVzJ1xuXG5jb25zdCByYXRpbmcgPSAoaW5pdD86IHsgbXU/OiBudW1iZXI7IHNpZ21hPzogbnVtYmVyIH0sIG9wdGlvbnM6IE9wdGlvbnMgPSB7fSk6IFJhdGluZyA9PiAoe1xuICBtdTogaW5pdD8ubXUgPz8gZGVmYXVsdE11KG9wdGlvbnMpLFxuICBzaWdtYTogaW5pdD8uc2lnbWEgPz8gZGVmYXVsdFNpZ21hKHsgLi4ub3B0aW9ucywgbXU6IGluaXQ/Lm11IH0pLFxufSlcblxuZXhwb3J0IGRlZmF1bHQgcmF0aW5nXG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLElBQUFBLFVBQUEsR0FBQUMsT0FBQTtBQUdBLE1BQU1DLE1BQU0sR0FBR0EsQ0FBQ0MsSUFBc0MsRUFBRUMsT0FBZ0IsR0FBRyxDQUFDLENBQUMsTUFBYztFQUN6RkMsRUFBRSxFQUFFRixJQUFJLEVBQUVFLEVBQUUsSUFBSSxJQUFBQyxhQUFTLEVBQUNGLE9BQU8sQ0FBQztFQUNsQ0csS0FBSyxFQUFFSixJQUFJLEVBQUVJLEtBQUssSUFBSSxJQUFBQyxnQkFBWSxFQUFDO0lBQUUsR0FBR0osT0FBTztJQUFFQyxFQUFFLEVBQUVGLElBQUksRUFBRUU7RUFBRyxDQUFDO0FBQ2pFLENBQUMsQ0FBQztBQUFBLElBQUFJLFFBQUEsR0FBQUMsT0FBQSxDQUFBQyxPQUFBLEdBRWFULE1BQU0iLCJpZ25vcmVMaXN0IjpbXX0= | ||
// src/constants.ts | ||
var builder = (options) => { | ||
const { z = 3, mu = 25, preventSigmaIncrease = false, epsilon = 1e-4 } = options; | ||
const { tau = mu / 300, sigma = mu / z, beta = sigma / 2, limitSigma = preventSigmaIncrease } = options; | ||
const betaSq = beta ** 2; | ||
return { | ||
SIGMA: sigma, | ||
MU: mu, | ||
EPSILON: epsilon, | ||
TWOBETASQ: 2 * betaSq, | ||
BETA: beta, | ||
BETASQ: betaSq, | ||
Z: z, | ||
TAU: tau, | ||
LIMIT_SIGMA: limitSigma | ||
}; | ||
}; | ||
var constants_default = builder; | ||
// src/rating.ts | ||
var rating = (init, options = {}) => { | ||
const { MU: mu, SIGMA: sigma } = constants_default(__spreadValues(__spreadValues({}, options), init)); | ||
return { mu, sigma }; | ||
}; | ||
var rating_default = rating; | ||
export { | ||
rating_default as default | ||
}; | ||
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL2NvbnN0YW50cy50cyIsICIuLi9zcmMvcmF0aW5nLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJpbXBvcnQgeyBPcHRpb25zIH0gZnJvbSAnLi90eXBlcydcblxuY29uc3QgYnVpbGRlciA9IChvcHRpb25zOiBPcHRpb25zKSA9PiB7XG4gIC8vIGknZCBsb3ZlIHRvIGtub3cgb2YgYSBiZXR0ZXIgd2F5IHRvIGRvIHRoaXNcbiAgY29uc3QgeyB6ID0gMywgbXUgPSAyNSwgcHJldmVudFNpZ21hSW5jcmVhc2UgPSBmYWxzZSwgZXBzaWxvbiA9IDAuMDAwMSB9ID0gb3B0aW9uc1xuICBjb25zdCB7IHRhdSA9IG11IC8gMzAwLCBzaWdtYSA9IG11IC8geiwgYmV0YSA9IHNpZ21hIC8gMiwgbGltaXRTaWdtYSA9IHByZXZlbnRTaWdtYUluY3JlYXNlIH0gPSBvcHRpb25zXG4gIGNvbnN0IGJldGFTcSA9IGJldGEgKiogMlxuXG4gIHJldHVybiB7XG4gICAgU0lHTUE6IHNpZ21hLFxuICAgIE1VOiBtdSxcbiAgICBFUFNJTE9OOiBlcHNpbG9uLFxuICAgIFRXT0JFVEFTUTogMiAqIGJldGFTcSxcbiAgICBCRVRBOiBiZXRhLFxuICAgIEJFVEFTUTogYmV0YVNxLFxuICAgIFo6IHosXG4gICAgVEFVOiB0YXUsXG4gICAgTElNSVRfU0lHTUE6IGxpbWl0U2lnbWEsXG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgYnVpbGRlclxuIiwgImltcG9ydCBjb25zdGFudHMgZnJvbSAnLi9jb25zdGFudHMnXG5pbXBvcnQgeyBPcHRpb25zLCBSYXRpbmcgfSBmcm9tICcuL3R5cGVzJ1xuXG5jb25zdCByYXRpbmcgPSAoaW5pdD86IHsgbXU/OiBudW1iZXI7IHNpZ21hPzogbnVtYmVyIH0sIG9wdGlvbnM6IE9wdGlvbnMgPSB7fSk6IFJhdGluZyA9PiB7XG4gIGNvbnN0IHsgTVU6IG11LCBTSUdNQTogc2lnbWEgfSA9IGNvbnN0YW50cyh7IC4uLm9wdGlvbnMsIC4uLmluaXQgfSlcbiAgcmV0dXJuIHsgbXUsIHNpZ21hIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgcmF0aW5nXG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFQSxJQUFNLFVBQVUsQ0FBQyxZQUFxQjtBQUVwQyxRQUFNLEVBQUUsSUFBSSxHQUFHLEtBQUssSUFBSSx1QkFBdUIsT0FBTyxVQUFVLEtBQU8sSUFBSTtBQUMzRSxRQUFNLEVBQUUsTUFBTSxLQUFLLEtBQUssUUFBUSxLQUFLLEdBQUcsT0FBTyxRQUFRLEdBQUcsYUFBYSxxQkFBcUIsSUFBSTtBQUNoRyxRQUFNLFNBQVMsUUFBUTtBQUV2QixTQUFPO0FBQUEsSUFDTCxPQUFPO0FBQUEsSUFDUCxJQUFJO0FBQUEsSUFDSixTQUFTO0FBQUEsSUFDVCxXQUFXLElBQUk7QUFBQSxJQUNmLE1BQU07QUFBQSxJQUNOLFFBQVE7QUFBQSxJQUNSLEdBQUc7QUFBQSxJQUNILEtBQUs7QUFBQSxJQUNMLGFBQWE7QUFBQSxFQUNmO0FBQ0Y7QUFFQSxJQUFPLG9CQUFROzs7QUNsQmYsSUFBTSxTQUFTLENBQUMsTUFBd0MsVUFBbUIsQ0FBQyxNQUFjO0FBQ3hGLFFBQU0sRUFBRSxJQUFJLElBQUksT0FBTyxNQUFNLElBQUksa0JBQVUsa0NBQUssVUFBWSxLQUFNO0FBQ2xFLFNBQU8sRUFBRSxJQUFJLE1BQU07QUFDckI7QUFFQSxJQUFPLGlCQUFROyIsCiAgIm5hbWVzIjogW10KfQo= |
@@ -1,7 +0,9 @@ | ||
export declare const phiMajor: (x: number) => number; | ||
export declare const phiMajorInverse: (x: number) => number; | ||
export declare const phiMinor: (x: number) => number; | ||
export declare const v: (x: number, t: number) => number; | ||
export declare const w: (x: number, t: number) => number; | ||
export declare const vt: (x: number, t: number) => number; | ||
export declare const wt: (x: number, t: number) => number; | ||
declare const phiMajor: (x: number) => number; | ||
declare const phiMajorInverse: (x: number) => number; | ||
declare const phiMinor: (x: number) => number; | ||
declare const v: (x: number, t: number) => number; | ||
declare const w: (x: number, t: number) => number; | ||
declare const vt: (x: number, t: number) => number; | ||
declare const wt: (x: number, t: number) => number; | ||
export { phiMajor, phiMajorInverse, phiMinor, v, vt, w, wt }; |
@@ -1,18 +0,8 @@ | ||
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { | ||
value: true | ||
}); | ||
exports.wt = exports.w = exports.vt = exports.v = exports.phiMinor = exports.phiMajorInverse = exports.phiMajor = void 0; | ||
var _gaussian = _interopRequireDefault(require("gaussian")); | ||
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } | ||
// use a standard normal distribution - mean of zero, stddev/variance of one | ||
const normal = (0, _gaussian.default)(0, 1); | ||
const phiMajor = x => normal.cdf(x); | ||
exports.phiMajor = phiMajor; | ||
const phiMajorInverse = x => normal.ppf(x); | ||
exports.phiMajorInverse = phiMajorInverse; | ||
const phiMinor = x => normal.pdf(x); | ||
exports.phiMinor = phiMinor; | ||
const v = (x, t) => { | ||
// src/statistics.ts | ||
import gaussian from "gaussian"; | ||
var normal = gaussian(0, 1); | ||
var phiMajor = (x) => normal.cdf(x); | ||
var phiMajorInverse = (x) => normal.ppf(x); | ||
var phiMinor = (x) => normal.pdf(x); | ||
var v = (x, t) => { | ||
const xt = x - t; | ||
@@ -22,4 +12,3 @@ const denom = phiMajor(xt); | ||
}; | ||
exports.v = v; | ||
const w = (x, t) => { | ||
var w = (x, t) => { | ||
const xt = x - t; | ||
@@ -32,4 +21,3 @@ const denom = phiMajor(xt); | ||
}; | ||
exports.w = w; | ||
const vt = (x, t) => { | ||
var vt = (x, t) => { | ||
const xx = Math.abs(x); | ||
@@ -44,9 +32,16 @@ const b = phiMajor(t - xx) - phiMajor(-t - xx); | ||
}; | ||
exports.vt = vt; | ||
const wt = (x, t) => { | ||
var wt = (x, t) => { | ||
const xx = Math.abs(x); | ||
const b = phiMajor(t - xx) - phiMajor(-t - xx); | ||
return b < Number.EPSILON ? 1.0 : ((t - xx) * phiMinor(t - xx) + (t + xx) * phiMinor(-t - xx)) / b + vt(x, t) * vt(x, t); | ||
return b < Number.EPSILON ? 1 : ((t - xx) * phiMinor(t - xx) + (t + xx) * phiMinor(-t - xx)) / b + vt(x, t) * vt(x, t); | ||
}; | ||
exports.wt = wt; | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZ2F1c3NpYW4iLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsImUiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsIm5vcm1hbCIsImdhdXNzaWFuIiwicGhpTWFqb3IiLCJ4IiwiY2RmIiwiZXhwb3J0cyIsInBoaU1ham9ySW52ZXJzZSIsInBwZiIsInBoaU1pbm9yIiwicGRmIiwidiIsInQiLCJ4dCIsImRlbm9tIiwiTnVtYmVyIiwiRVBTSUxPTiIsInciLCJ2dCIsInh4IiwiTWF0aCIsImFicyIsImIiLCJhIiwid3QiXSwic291cmNlcyI6WyIuLi9zcmMvc3RhdGlzdGljcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZ2F1c3NpYW4gZnJvbSAnZ2F1c3NpYW4nXG5cbi8vIHVzZSBhIHN0YW5kYXJkIG5vcm1hbCBkaXN0cmlidXRpb24gLSBtZWFuIG9mIHplcm8sIHN0ZGRldi92YXJpYW5jZSBvZiBvbmVcbmNvbnN0IG5vcm1hbCA9IGdhdXNzaWFuKDAsIDEpXG5cbmV4cG9ydCBjb25zdCBwaGlNYWpvciA9ICh4OiBudW1iZXIpID0+IG5vcm1hbC5jZGYoeClcblxuZXhwb3J0IGNvbnN0IHBoaU1ham9ySW52ZXJzZSA9ICh4OiBudW1iZXIpID0+IG5vcm1hbC5wcGYoeClcblxuZXhwb3J0IGNvbnN0IHBoaU1pbm9yID0gKHg6IG51bWJlcikgPT4gbm9ybWFsLnBkZih4KVxuXG5leHBvcnQgY29uc3QgdiA9ICh4OiBudW1iZXIsIHQ6IG51bWJlcikgPT4ge1xuICBjb25zdCB4dCA9IHggLSB0XG4gIGNvbnN0IGRlbm9tID0gcGhpTWFqb3IoeHQpXG4gIHJldHVybiBkZW5vbSA8IE51bWJlci5FUFNJTE9OID8gLXh0IDogcGhpTWlub3IoeHQpIC8gZGVub21cbn1cblxuZXhwb3J0IGNvbnN0IHcgPSAoeDogbnVtYmVyLCB0OiBudW1iZXIpID0+IHtcbiAgY29uc3QgeHQgPSB4IC0gdFxuICBjb25zdCBkZW5vbSA9IHBoaU1ham9yKHh0KVxuICBpZiAoZGVub20gPCBOdW1iZXIuRVBTSUxPTikge1xuICAgIHJldHVybiB4IDwgMCA/IDEgOiAwXG4gIH1cbiAgcmV0dXJuIHYoeCwgdCkgKiAodih4LCB0KSArIHh0KVxufVxuXG5leHBvcnQgY29uc3QgdnQgPSAoeDogbnVtYmVyLCB0OiBudW1iZXIpID0+IHtcbiAgY29uc3QgeHggPSBNYXRoLmFicyh4KVxuICBjb25zdCBiID0gcGhpTWFqb3IodCAtIHh4KSAtIHBoaU1ham9yKC10IC0geHgpXG4gIGlmIChiIDwgMWUtNSkge1xuICAgIGlmICh4IDwgMCkgcmV0dXJuIC14IC0gdFxuICAgIHJldHVybiAteCArIHRcbiAgfVxuICBjb25zdCBhID0gcGhpTWlub3IoLXQgLSB4eCkgLSBwaGlNaW5vcih0IC0geHgpXG4gIHJldHVybiAoeCA8IDAgPyAtYSA6IGEpIC8gYlxufVxuXG5leHBvcnQgY29uc3Qgd3QgPSAoeDogbnVtYmVyLCB0OiBudW1iZXIpID0+IHtcbiAgY29uc3QgeHggPSBNYXRoLmFicyh4KVxuICBjb25zdCBiID0gcGhpTWFqb3IodCAtIHh4KSAtIHBoaU1ham9yKC10IC0geHgpXG4gIHJldHVybiBiIDwgTnVtYmVyLkVQU0lMT05cbiAgICA/IDEuMFxuICAgIDogKCh0IC0geHgpICogcGhpTWlub3IodCAtIHh4KSArICh0ICsgeHgpICogcGhpTWlub3IoLXQgLSB4eCkpIC8gYiArIHZ0KHgsIHQpICogdnQoeCwgdClcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsSUFBQUEsU0FBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQStCLFNBQUFELHVCQUFBRSxDQUFBLFdBQUFBLENBQUEsSUFBQUEsQ0FBQSxDQUFBQyxVQUFBLEdBQUFELENBQUEsS0FBQUUsT0FBQSxFQUFBRixDQUFBO0FBRS9CO0FBQ0EsTUFBTUcsTUFBTSxHQUFHLElBQUFDLGlCQUFRLEVBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUV0QixNQUFNQyxRQUFRLEdBQUlDLENBQVMsSUFBS0gsTUFBTSxDQUFDSSxHQUFHLENBQUNELENBQUMsQ0FBQztBQUFBRSxPQUFBLENBQUFILFFBQUEsR0FBQUEsUUFBQTtBQUU3QyxNQUFNSSxlQUFlLEdBQUlILENBQVMsSUFBS0gsTUFBTSxDQUFDTyxHQUFHLENBQUNKLENBQUMsQ0FBQztBQUFBRSxPQUFBLENBQUFDLGVBQUEsR0FBQUEsZUFBQTtBQUVwRCxNQUFNRSxRQUFRLEdBQUlMLENBQVMsSUFBS0gsTUFBTSxDQUFDUyxHQUFHLENBQUNOLENBQUMsQ0FBQztBQUFBRSxPQUFBLENBQUFHLFFBQUEsR0FBQUEsUUFBQTtBQUU3QyxNQUFNRSxDQUFDLEdBQUdBLENBQUNQLENBQVMsRUFBRVEsQ0FBUyxLQUFLO0VBQ3pDLE1BQU1DLEVBQUUsR0FBR1QsQ0FBQyxHQUFHUSxDQUFDO0VBQ2hCLE1BQU1FLEtBQUssR0FBR1gsUUFBUSxDQUFDVSxFQUFFLENBQUM7RUFDMUIsT0FBT0MsS0FBSyxHQUFHQyxNQUFNLENBQUNDLE9BQU8sR0FBRyxDQUFDSCxFQUFFLEdBQUdKLFFBQVEsQ0FBQ0ksRUFBRSxDQUFDLEdBQUdDLEtBQUs7QUFDNUQsQ0FBQztBQUFBUixPQUFBLENBQUFLLENBQUEsR0FBQUEsQ0FBQTtBQUVNLE1BQU1NLENBQUMsR0FBR0EsQ0FBQ2IsQ0FBUyxFQUFFUSxDQUFTLEtBQUs7RUFDekMsTUFBTUMsRUFBRSxHQUFHVCxDQUFDLEdBQUdRLENBQUM7RUFDaEIsTUFBTUUsS0FBSyxHQUFHWCxRQUFRLENBQUNVLEVBQUUsQ0FBQztFQUMxQixJQUFJQyxLQUFLLEdBQUdDLE1BQU0sQ0FBQ0MsT0FBTyxFQUFFO0lBQzFCLE9BQU9aLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUM7RUFDdEI7RUFDQSxPQUFPTyxDQUFDLENBQUNQLENBQUMsRUFBRVEsQ0FBQyxDQUFDLElBQUlELENBQUMsQ0FBQ1AsQ0FBQyxFQUFFUSxDQUFDLENBQUMsR0FBR0MsRUFBRSxDQUFDO0FBQ2pDLENBQUM7QUFBQVAsT0FBQSxDQUFBVyxDQUFBLEdBQUFBLENBQUE7QUFFTSxNQUFNQyxFQUFFLEdBQUdBLENBQUNkLENBQVMsRUFBRVEsQ0FBUyxLQUFLO0VBQzFDLE1BQU1PLEVBQUUsR0FBR0MsSUFBSSxDQUFDQyxHQUFHLENBQUNqQixDQUFDLENBQUM7RUFDdEIsTUFBTWtCLENBQUMsR0FBR25CLFFBQVEsQ0FBQ1MsQ0FBQyxHQUFHTyxFQUFFLENBQUMsR0FBR2hCLFFBQVEsQ0FBQyxDQUFDUyxDQUFDLEdBQUdPLEVBQUUsQ0FBQztFQUM5QyxJQUFJRyxDQUFDLEdBQUcsSUFBSSxFQUFFO0lBQ1osSUFBSWxCLENBQUMsR0FBRyxDQUFDLEVBQUUsT0FBTyxDQUFDQSxDQUFDLEdBQUdRLENBQUM7SUFDeEIsT0FBTyxDQUFDUixDQUFDLEdBQUdRLENBQUM7RUFDZjtFQUNBLE1BQU1XLENBQUMsR0FBR2QsUUFBUSxDQUFDLENBQUNHLENBQUMsR0FBR08sRUFBRSxDQUFDLEdBQUdWLFFBQVEsQ0FBQ0csQ0FBQyxHQUFHTyxFQUFFLENBQUM7RUFDOUMsT0FBTyxDQUFDZixDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUNtQixDQUFDLEdBQUdBLENBQUMsSUFBSUQsQ0FBQztBQUM3QixDQUFDO0FBQUFoQixPQUFBLENBQUFZLEVBQUEsR0FBQUEsRUFBQTtBQUVNLE1BQU1NLEVBQUUsR0FBR0EsQ0FBQ3BCLENBQVMsRUFBRVEsQ0FBUyxLQUFLO0VBQzFDLE1BQU1PLEVBQUUsR0FBR0MsSUFBSSxDQUFDQyxHQUFHLENBQUNqQixDQUFDLENBQUM7RUFDdEIsTUFBTWtCLENBQUMsR0FBR25CLFFBQVEsQ0FBQ1MsQ0FBQyxHQUFHTyxFQUFFLENBQUMsR0FBR2hCLFFBQVEsQ0FBQyxDQUFDUyxDQUFDLEdBQUdPLEVBQUUsQ0FBQztFQUM5QyxPQUFPRyxDQUFDLEdBQUdQLE1BQU0sQ0FBQ0MsT0FBTyxHQUNyQixHQUFHLEdBQ0gsQ0FBQyxDQUFDSixDQUFDLEdBQUdPLEVBQUUsSUFBSVYsUUFBUSxDQUFDRyxDQUFDLEdBQUdPLEVBQUUsQ0FBQyxHQUFHLENBQUNQLENBQUMsR0FBR08sRUFBRSxJQUFJVixRQUFRLENBQUMsQ0FBQ0csQ0FBQyxHQUFHTyxFQUFFLENBQUMsSUFBSUcsQ0FBQyxHQUFHSixFQUFFLENBQUNkLENBQUMsRUFBRVEsQ0FBQyxDQUFDLEdBQUdNLEVBQUUsQ0FBQ2QsQ0FBQyxFQUFFUSxDQUFDLENBQUM7QUFDNUYsQ0FBQztBQUFBTixPQUFBLENBQUFrQixFQUFBLEdBQUFBLEVBQUEiLCJpZ25vcmVMaXN0IjpbXX0= | ||
export { | ||
phiMajor, | ||
phiMajorInverse, | ||
phiMinor, | ||
v, | ||
vt, | ||
w, | ||
wt | ||
}; | ||
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL3N0YXRpc3RpY3MudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCBnYXVzc2lhbiBmcm9tICdnYXVzc2lhbidcblxuLy8gdXNlIGEgc3RhbmRhcmQgbm9ybWFsIGRpc3RyaWJ1dGlvbiAtIG1lYW4gb2YgemVybywgc3RkZGV2L3ZhcmlhbmNlIG9mIG9uZVxuY29uc3Qgbm9ybWFsID0gZ2F1c3NpYW4oMCwgMSlcblxuZXhwb3J0IGNvbnN0IHBoaU1ham9yID0gKHg6IG51bWJlcikgPT4gbm9ybWFsLmNkZih4KVxuXG5leHBvcnQgY29uc3QgcGhpTWFqb3JJbnZlcnNlID0gKHg6IG51bWJlcikgPT4gbm9ybWFsLnBwZih4KVxuXG5leHBvcnQgY29uc3QgcGhpTWlub3IgPSAoeDogbnVtYmVyKSA9PiBub3JtYWwucGRmKHgpXG5cbmV4cG9ydCBjb25zdCB2ID0gKHg6IG51bWJlciwgdDogbnVtYmVyKSA9PiB7XG4gIGNvbnN0IHh0ID0geCAtIHRcbiAgY29uc3QgZGVub20gPSBwaGlNYWpvcih4dClcbiAgcmV0dXJuIGRlbm9tIDwgTnVtYmVyLkVQU0lMT04gPyAteHQgOiBwaGlNaW5vcih4dCkgLyBkZW5vbVxufVxuXG5leHBvcnQgY29uc3QgdyA9ICh4OiBudW1iZXIsIHQ6IG51bWJlcikgPT4ge1xuICBjb25zdCB4dCA9IHggLSB0XG4gIGNvbnN0IGRlbm9tID0gcGhpTWFqb3IoeHQpXG4gIGlmIChkZW5vbSA8IE51bWJlci5FUFNJTE9OKSB7XG4gICAgcmV0dXJuIHggPCAwID8gMSA6IDBcbiAgfVxuICByZXR1cm4gdih4LCB0KSAqICh2KHgsIHQpICsgeHQpXG59XG5cbmV4cG9ydCBjb25zdCB2dCA9ICh4OiBudW1iZXIsIHQ6IG51bWJlcikgPT4ge1xuICBjb25zdCB4eCA9IE1hdGguYWJzKHgpXG4gIGNvbnN0IGIgPSBwaGlNYWpvcih0IC0geHgpIC0gcGhpTWFqb3IoLXQgLSB4eClcbiAgaWYgKGIgPCAxZS01KSB7XG4gICAgaWYgKHggPCAwKSByZXR1cm4gLXggLSB0XG4gICAgcmV0dXJuIC14ICsgdFxuICB9XG4gIGNvbnN0IGEgPSBwaGlNaW5vcigtdCAtIHh4KSAtIHBoaU1pbm9yKHQgLSB4eClcbiAgcmV0dXJuICh4IDwgMCA/IC1hIDogYSkgLyBiXG59XG5cbmV4cG9ydCBjb25zdCB3dCA9ICh4OiBudW1iZXIsIHQ6IG51bWJlcikgPT4ge1xuICBjb25zdCB4eCA9IE1hdGguYWJzKHgpXG4gIGNvbnN0IGIgPSBwaGlNYWpvcih0IC0geHgpIC0gcGhpTWFqb3IoLXQgLSB4eClcbiAgcmV0dXJuIGIgPCBOdW1iZXIuRVBTSUxPTlxuICAgID8gMS4wXG4gICAgOiAoKHQgLSB4eCkgKiBwaGlNaW5vcih0IC0geHgpICsgKHQgKyB4eCkgKiBwaGlNaW5vcigtdCAtIHh4KSkgLyBiICsgdnQoeCwgdCkgKiB2dCh4LCB0KVxufVxuIl0sCiAgIm1hcHBpbmdzIjogIjtBQUFBLE9BQU8sY0FBYztBQUdyQixJQUFNLFNBQVMsU0FBUyxHQUFHLENBQUM7QUFFckIsSUFBTSxXQUFXLENBQUMsTUFBYyxPQUFPLElBQUksQ0FBQztBQUU1QyxJQUFNLGtCQUFrQixDQUFDLE1BQWMsT0FBTyxJQUFJLENBQUM7QUFFbkQsSUFBTSxXQUFXLENBQUMsTUFBYyxPQUFPLElBQUksQ0FBQztBQUU1QyxJQUFNLElBQUksQ0FBQyxHQUFXLE1BQWM7QUFDekMsUUFBTSxLQUFLLElBQUk7QUFDZixRQUFNLFFBQVEsU0FBUyxFQUFFO0FBQ3pCLFNBQU8sUUFBUSxPQUFPLFVBQVUsQ0FBQyxLQUFLLFNBQVMsRUFBRSxJQUFJO0FBQ3ZEO0FBRU8sSUFBTSxJQUFJLENBQUMsR0FBVyxNQUFjO0FBQ3pDLFFBQU0sS0FBSyxJQUFJO0FBQ2YsUUFBTSxRQUFRLFNBQVMsRUFBRTtBQUN6QixNQUFJLFFBQVEsT0FBTyxTQUFTO0FBQzFCLFdBQU8sSUFBSSxJQUFJLElBQUk7QUFBQSxFQUNyQjtBQUNBLFNBQU8sRUFBRSxHQUFHLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxJQUFJO0FBQzlCO0FBRU8sSUFBTSxLQUFLLENBQUMsR0FBVyxNQUFjO0FBQzFDLFFBQU0sS0FBSyxLQUFLLElBQUksQ0FBQztBQUNyQixRQUFNLElBQUksU0FBUyxJQUFJLEVBQUUsSUFBSSxTQUFTLENBQUMsSUFBSSxFQUFFO0FBQzdDLE1BQUksSUFBSSxNQUFNO0FBQ1osUUFBSSxJQUFJLEVBQUcsUUFBTyxDQUFDLElBQUk7QUFDdkIsV0FBTyxDQUFDLElBQUk7QUFBQSxFQUNkO0FBQ0EsUUFBTSxJQUFJLFNBQVMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxTQUFTLElBQUksRUFBRTtBQUM3QyxVQUFRLElBQUksSUFBSSxDQUFDLElBQUksS0FBSztBQUM1QjtBQUVPLElBQU0sS0FBSyxDQUFDLEdBQVcsTUFBYztBQUMxQyxRQUFNLEtBQUssS0FBSyxJQUFJLENBQUM7QUFDckIsUUFBTSxJQUFJLFNBQVMsSUFBSSxFQUFFLElBQUksU0FBUyxDQUFDLElBQUksRUFBRTtBQUM3QyxTQUFPLElBQUksT0FBTyxVQUNkLE1BQ0UsSUFBSSxNQUFNLFNBQVMsSUFBSSxFQUFFLEtBQUssSUFBSSxNQUFNLFNBQVMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxJQUFJLEdBQUcsR0FBRyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDM0Y7IiwKICAibmFtZXMiOiBbXQp9Cg== |
@@ -1,10 +0,10 @@ | ||
export type Rating = { | ||
type Rating = { | ||
mu: number; | ||
sigma: number; | ||
}; | ||
export type Team = Rating[]; | ||
export type Rank = number; | ||
export type Gamma = (c: number, k: number, mu: number, sigmaSq: number, team: Rating[], qRank: number) => number; | ||
export type Model = (teams: Team[], options?: Options) => Team[]; | ||
export type Options = { | ||
type Team = Rating[]; | ||
type Rank = number; | ||
type Gamma = (c: number, k: number, mu: number, sigmaSq: number, team: Rating[], qRank: number) => number; | ||
type Model = (teams: Team[], options?: Options) => Team[]; | ||
type Options = { | ||
z?: number; | ||
@@ -24,1 +24,3 @@ mu?: number; | ||
}; | ||
export type { Gamma, Model, Options, Rank, Rating, Team }; |
@@ -1,6 +0,1 @@ | ||
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { | ||
value: true | ||
}); | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vc3JjL3R5cGVzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB0eXBlIFJhdGluZyA9IHtcbiAgbXU6IG51bWJlclxuICBzaWdtYTogbnVtYmVyXG59XG5cbmV4cG9ydCB0eXBlIFRlYW0gPSBSYXRpbmdbXVxuXG5leHBvcnQgdHlwZSBSYW5rID0gbnVtYmVyXG5cbmV4cG9ydCB0eXBlIEdhbW1hID0gKGM6IG51bWJlciwgazogbnVtYmVyLCBtdTogbnVtYmVyLCBzaWdtYVNxOiBudW1iZXIsIHRlYW06IFJhdGluZ1tdLCBxUmFuazogbnVtYmVyKSA9PiBudW1iZXJcblxuZXhwb3J0IHR5cGUgTW9kZWwgPSAodGVhbXM6IFRlYW1bXSwgb3B0aW9ucz86IE9wdGlvbnMpID0+IFRlYW1bXVxuXG5leHBvcnQgdHlwZSBPcHRpb25zID0ge1xuICB6PzogbnVtYmVyXG4gIG11PzogbnVtYmVyXG4gIHNpZ21hPzogbnVtYmVyXG4gIGVwc2lsb24/OiBudW1iZXJcbiAgZ2FtbWE/OiBHYW1tYVxuICBiZXRhPzogbnVtYmVyXG4gIG1vZGVsPzogTW9kZWxcbiAgcmFuaz86IFJhbmtbXVxuICBzY29yZT86IG51bWJlcltdXG4gIHdlaWdodD86IG51bWJlcltdW11cbiAgdGF1PzogbnVtYmVyXG4gIHByZXZlbnRTaWdtYUluY3JlYXNlPzogYm9vbGVhbiAvLyBkZXByZWNhdGVkLCB1c2UgbGltaXRTaWdtYSwgdGhpcyB3aWxsIGdvIGF3YXkgc29tZWRheVxuICBsaW1pdFNpZ21hPzogYm9vbGVhblxufVxuIl0sIm1hcHBpbmdzIjoiIiwiaWdub3JlTGlzdCI6W119 | ||
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFtdLAogICJzb3VyY2VzQ29udGVudCI6IFtdLAogICJtYXBwaW5ncyI6ICIiLAogICJuYW1lcyI6IFtdCn0K |
@@ -1,12 +0,13 @@ | ||
import { Options, Gamma, Team, Rank } from './types'; | ||
export type TeamMu = number; | ||
export type TeamSigmaSq = number; | ||
export type TeamRating = [TeamMu, TeamSigmaSq, Team, Rank]; | ||
export declare const sum: (a: number, b: number) => number; | ||
export declare const score: (q: number, i: number) => 0 | 1 | 0.5; | ||
export declare const rankings: (teams: Team[], rank?: number[]) => any[]; | ||
export declare const ladderPairs: <T>(ranks: T[]) => T[][]; | ||
export declare const utilSumQ: (teamRatings: TeamRating[], c: number) => number[]; | ||
export declare const utilA: (teamRatings: TeamRating[]) => number[]; | ||
export declare const gamma: (options: Options) => Gamma; | ||
import { Team, Rank, Options, Gamma } from './types.js'; | ||
type TeamMu = number; | ||
type TeamSigmaSq = number; | ||
type TeamRating = [TeamMu, TeamSigmaSq, Team, Rank]; | ||
declare const sum: (a: number, b: number) => number; | ||
declare const score: (q: number, i: number) => 0 | 1 | 0.5; | ||
declare const rankings: (teams: Team[], rank?: number[]) => any[]; | ||
declare const ladderPairs: <T>(ranks: T[]) => T[][]; | ||
declare const utilSumQ: (teamRatings: TeamRating[], c: number) => number[]; | ||
declare const utilA: (teamRatings: TeamRating[]) => number[]; | ||
declare const gamma: (options: Options) => Gamma; | ||
declare const _default: (options: Options) => { | ||
@@ -17,2 +18,3 @@ utilC: (teamRatings: TeamRating[]) => number; | ||
}; | ||
export default _default; | ||
export { type TeamMu, type TeamRating, type TeamSigmaSq, _default as default, gamma, ladderPairs, rankings, score, sum, utilA, utilSumQ }; |
130
dist/util.js
@@ -1,24 +0,35 @@ | ||
"use strict"; | ||
// src/util.ts | ||
import { zip } from "ramda"; | ||
Object.defineProperty(exports, "__esModule", { | ||
value: true | ||
}); | ||
exports.utilSumQ = exports.utilA = exports.sum = exports.score = exports.rankings = exports.ladderPairs = exports.gamma = exports.default = void 0; | ||
var _ramda = require("ramda"); | ||
var _constants = _interopRequireDefault(require("./constants")); | ||
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } | ||
const sum = (a, b) => a + b; | ||
exports.sum = sum; | ||
const score = (q, i) => { | ||
// src/constants.ts | ||
var builder = (options) => { | ||
const { z = 3, mu = 25, preventSigmaIncrease = false, epsilon = 1e-4 } = options; | ||
const { tau = mu / 300, sigma = mu / z, beta = sigma / 2, limitSigma = preventSigmaIncrease } = options; | ||
const betaSq = beta ** 2; | ||
return { | ||
SIGMA: sigma, | ||
MU: mu, | ||
EPSILON: epsilon, | ||
TWOBETASQ: 2 * betaSq, | ||
BETA: beta, | ||
BETASQ: betaSq, | ||
Z: z, | ||
TAU: tau, | ||
LIMIT_SIGMA: limitSigma | ||
}; | ||
}; | ||
var constants_default = builder; | ||
// src/util.ts | ||
var sum = (a, b) => a + b; | ||
var score = (q, i) => { | ||
if (q < i) { | ||
return 0.0; | ||
return 0; | ||
} | ||
if (q > i) { | ||
return 1.0; | ||
return 1; | ||
} | ||
// q === i | ||
return 0.5; | ||
}; | ||
exports.score = score; | ||
const rankings = (teams, rank = []) => { | ||
var rankings = (teams, rank = []) => { | ||
const teamScores = teams.map((_, i) => rank[i] || i); | ||
@@ -35,48 +46,44 @@ const outRank = new Array(teams.length); | ||
}; | ||
// this is basically shared code, precomputed for every model | ||
exports.rankings = rankings; | ||
const teamRating = options => game => { | ||
var teamRating = (options) => (game) => { | ||
const rank = rankings(game, options.rank); | ||
return game.map((team, i) => [ | ||
// mu[i] | ||
team.map(({ | ||
mu | ||
}) => mu).reduce(sum, 0), | ||
// sigma^2[i] | ||
team.map(({ | ||
sigma | ||
}) => sigma * sigma).reduce(sum, 0), | ||
// (original team data) | ||
team, | ||
// rank[i] | ||
rank[i]]); | ||
// mu[i] | ||
team.map(({ mu }) => mu).reduce(sum, 0), | ||
// sigma^2[i] | ||
team.map(({ sigma }) => sigma * sigma).reduce(sum, 0), | ||
// (original team data) | ||
team, | ||
// rank[i] | ||
rank[i] | ||
]); | ||
}; | ||
const ladderPairs = ranks => { | ||
var ladderPairs = (ranks) => { | ||
const size = ranks.length; | ||
const left = [undefined, ...ranks.slice(0, size - 1)]; | ||
const right = [...ranks.slice(1), undefined]; | ||
return (0, _ramda.zip)(left, right).map(([l, r]) => { | ||
if (l !== undefined && r !== undefined) return [l, r]; | ||
if (l !== undefined && r === undefined) return [l]; | ||
if (l === undefined && r !== undefined) return [r]; | ||
return []; // this should really only happen when size === 1 | ||
const left = [void 0, ...ranks.slice(0, size - 1)]; | ||
const right = [...ranks.slice(1), void 0]; | ||
return zip(left, right).map(([l, r]) => { | ||
if (l !== void 0 && r !== void 0) return [l, r]; | ||
if (l !== void 0 && r === void 0) return [l]; | ||
if (l === void 0 && r !== void 0) return [r]; | ||
return []; | ||
}); | ||
}; | ||
exports.ladderPairs = ladderPairs; | ||
const utilC = options => { | ||
const { | ||
BETASQ | ||
} = (0, _constants.default)(options); | ||
return teamRatings => Math.sqrt(teamRatings.map(([_teamMu, teamSigmaSq, _team, _rank]) => teamSigmaSq + BETASQ).reduce(sum, 0)); | ||
var utilC = (options) => { | ||
const { BETASQ } = constants_default(options); | ||
return (teamRatings) => Math.sqrt(teamRatings.map(([_teamMu, teamSigmaSq, _team, _rank]) => teamSigmaSq + BETASQ).reduce(sum, 0)); | ||
}; | ||
const utilSumQ = (teamRatings, c) => teamRatings.map(([_qMu, _qSigmaSq, _qTeam, qRank]) => teamRatings.filter(([_iMu, _iSigmaSq, _iTeam, iRank]) => iRank >= qRank).map(([iMu, _iSigmaSq, _iTeam, _iRank]) => Math.exp(iMu / c)).reduce(sum, 0)); | ||
exports.utilSumQ = utilSumQ; | ||
const utilA = teamRatings => teamRatings.map(([_iMu, _iSigmaSq, _iTeam, iRank]) => teamRatings.filter(([_qMu, _qSigmaSq, _qTeam, qRank]) => iRank === qRank).length); | ||
exports.utilA = utilA; | ||
const gamma = options => options.gamma ?? ( | ||
// default to iSigma / c | ||
(c, _k, _mu, sigmaSq, _team, _qRank) => Math.sqrt(sigmaSq) / c); | ||
exports.gamma = gamma; | ||
var _default = options => ({ | ||
var utilSumQ = (teamRatings, c) => teamRatings.map( | ||
([_qMu, _qSigmaSq, _qTeam, qRank]) => teamRatings.filter(([_iMu, _iSigmaSq, _iTeam, iRank]) => iRank >= qRank).map(([iMu, _iSigmaSq, _iTeam, _iRank]) => Math.exp(iMu / c)).reduce(sum, 0) | ||
); | ||
var utilA = (teamRatings) => teamRatings.map( | ||
([_iMu, _iSigmaSq, _iTeam, iRank]) => teamRatings.filter(([_qMu, _qSigmaSq, _qTeam, qRank]) => iRank === qRank).length | ||
); | ||
var gamma = (options) => { | ||
var _a; | ||
return (_a = options.gamma) != null ? _a : ( | ||
// default to iSigma / c | ||
(c, _k, _mu, sigmaSq, _team, _qRank) => Math.sqrt(sigmaSq) / c | ||
); | ||
}; | ||
var util_default = (options) => ({ | ||
utilC: utilC(options), | ||
@@ -86,3 +93,12 @@ teamRating: teamRating(options), | ||
}); | ||
exports.default = _default; | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmFtZGEiLCJyZXF1aXJlIiwiX2NvbnN0YW50cyIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJlIiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJzdW0iLCJhIiwiYiIsImV4cG9ydHMiLCJzY29yZSIsInEiLCJpIiwicmFua2luZ3MiLCJ0ZWFtcyIsInJhbmsiLCJ0ZWFtU2NvcmVzIiwibWFwIiwiXyIsIm91dFJhbmsiLCJBcnJheSIsImxlbmd0aCIsInMiLCJqIiwidGVhbVJhdGluZyIsIm9wdGlvbnMiLCJnYW1lIiwidGVhbSIsIm11IiwicmVkdWNlIiwic2lnbWEiLCJsYWRkZXJQYWlycyIsInJhbmtzIiwic2l6ZSIsImxlZnQiLCJ1bmRlZmluZWQiLCJzbGljZSIsInJpZ2h0IiwiemlwIiwibCIsInIiLCJ1dGlsQyIsIkJFVEFTUSIsImNvbnN0YW50cyIsInRlYW1SYXRpbmdzIiwiTWF0aCIsInNxcnQiLCJfdGVhbU11IiwidGVhbVNpZ21hU3EiLCJfdGVhbSIsIl9yYW5rIiwidXRpbFN1bVEiLCJjIiwiX3FNdSIsIl9xU2lnbWFTcSIsIl9xVGVhbSIsInFSYW5rIiwiZmlsdGVyIiwiX2lNdSIsIl9pU2lnbWFTcSIsIl9pVGVhbSIsImlSYW5rIiwiaU11IiwiX2lSYW5rIiwiZXhwIiwidXRpbEEiLCJnYW1tYSIsIl9rIiwiX211Iiwic2lnbWFTcSIsIl9xUmFuayIsIl9kZWZhdWx0Il0sInNvdXJjZXMiOlsiLi4vc3JjL3V0aWwudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgemlwIH0gZnJvbSAncmFtZGEnXG5pbXBvcnQgY29uc3RhbnRzIGZyb20gJy4vY29uc3RhbnRzJ1xuaW1wb3J0IHsgUmF0aW5nLCBPcHRpb25zLCBHYW1tYSwgVGVhbSwgUmFuayB9IGZyb20gJy4vdHlwZXMnXG5cbmV4cG9ydCB0eXBlIFRlYW1NdSA9IG51bWJlclxuXG5leHBvcnQgdHlwZSBUZWFtU2lnbWFTcSA9IG51bWJlclxuXG5leHBvcnQgdHlwZSBUZWFtUmF0aW5nID0gW1RlYW1NdSwgVGVhbVNpZ21hU3EsIFRlYW0sIFJhbmtdXG5cbmV4cG9ydCBjb25zdCBzdW0gPSAoYTogbnVtYmVyLCBiOiBudW1iZXIpID0+IGEgKyBiXG5cbmV4cG9ydCBjb25zdCBzY29yZSA9IChxOiBudW1iZXIsIGk6IG51bWJlcikgPT4ge1xuICBpZiAocSA8IGkpIHtcbiAgICByZXR1cm4gMC4wXG4gIH1cbiAgaWYgKHEgPiBpKSB7XG4gICAgcmV0dXJuIDEuMFxuICB9XG4gIC8vIHEgPT09IGlcbiAgcmV0dXJuIDAuNVxufVxuXG5leHBvcnQgY29uc3QgcmFua2luZ3MgPSAodGVhbXM6IFRlYW1bXSwgcmFuazogbnVtYmVyW10gPSBbXSkgPT4ge1xuICBjb25zdCB0ZWFtU2NvcmVzID0gdGVhbXMubWFwKChfLCBpKSA9PiByYW5rW2ldIHx8IGkpXG4gIGNvbnN0IG91dFJhbmsgPSBuZXcgQXJyYXkodGVhbXMubGVuZ3RoKVxuXG4gIGxldCBzID0gMFxuICBmb3IgKGxldCBqID0gMDsgaiA8IHRlYW1TY29yZXMubGVuZ3RoOyBqICs9IDEpIHtcbiAgICBpZiAoaiA+IDAgJiYgdGVhbVNjb3Jlc1tqIC0gMV0gPCB0ZWFtU2NvcmVzW2pdKSB7XG4gICAgICBzID0galxuICAgIH1cbiAgICBvdXRSYW5rW2pdID0gc1xuICB9XG4gIHJldHVybiBvdXRSYW5rXG59XG5cbi8vIHRoaXMgaXMgYmFzaWNhbGx5IHNoYXJlZCBjb2RlLCBwcmVjb21wdXRlZCBmb3IgZXZlcnkgbW9kZWxcbmNvbnN0IHRlYW1SYXRpbmcgPVxuICAob3B0aW9uczogT3B0aW9ucykgPT5cbiAgKGdhbWU6IFRlYW1bXSk6IFRlYW1SYXRpbmdbXSA9PiB7XG4gICAgY29uc3QgcmFuayA9IHJhbmtpbmdzKGdhbWUsIG9wdGlvbnMucmFuaylcbiAgICByZXR1cm4gZ2FtZS5tYXAoKHRlYW0sIGkpID0+IFtcbiAgICAgIC8vIG11W2ldXG4gICAgICB0ZWFtLm1hcCgoeyBtdSB9KSA9PiBtdSkucmVkdWNlKHN1bSwgMCksXG4gICAgICAvLyBzaWdtYV4yW2ldXG4gICAgICB0ZWFtLm1hcCgoeyBzaWdtYSB9KSA9PiBzaWdtYSAqIHNpZ21hKS5yZWR1Y2Uoc3VtLCAwKSxcbiAgICAgIC8vIChvcmlnaW5hbCB0ZWFtIGRhdGEpXG4gICAgICB0ZWFtLFxuICAgICAgLy8gcmFua1tpXVxuICAgICAgcmFua1tpXSxcbiAgICBdKVxuICB9XG5cbmV4cG9ydCBjb25zdCBsYWRkZXJQYWlycyA9IDxUPihyYW5rczogVFtdKTogVFtdW10gPT4ge1xuICBjb25zdCBzaXplID0gcmFua3MubGVuZ3RoXG4gIGNvbnN0IGxlZnQgPSBbdW5kZWZpbmVkLCAuLi5yYW5rcy5zbGljZSgwLCBzaXplIC0gMSldXG4gIGNvbnN0IHJpZ2h0ID0gWy4uLnJhbmtzLnNsaWNlKDEpLCB1bmRlZmluZWRdXG4gIHJldHVybiB6aXAobGVmdCwgcmlnaHQpLm1hcCgoW2wsIHJdKSA9PiB7XG4gICAgaWYgKGwgIT09IHVuZGVmaW5lZCAmJiByICE9PSB1bmRlZmluZWQpIHJldHVybiBbbCwgcl1cbiAgICBpZiAobCAhPT0gdW5kZWZpbmVkICYmIHIgPT09IHVuZGVmaW5lZCkgcmV0dXJuIFtsXVxuICAgIGlmIChsID09PSB1bmRlZmluZWQgJiYgciAhPT0gdW5kZWZpbmVkKSByZXR1cm4gW3JdXG4gICAgcmV0dXJuIFtdIC8vIHRoaXMgc2hvdWxkIHJlYWxseSBvbmx5IGhhcHBlbiB3aGVuIHNpemUgPT09IDFcbiAgfSlcbn1cblxuY29uc3QgdXRpbEMgPSAob3B0aW9uczogT3B0aW9ucykgPT4ge1xuICBjb25zdCB7IEJFVEFTUSB9ID0gY29uc3RhbnRzKG9wdGlvbnMpXG4gIHJldHVybiAodGVhbVJhdGluZ3M6IFRlYW1SYXRpbmdbXSkgPT5cbiAgICBNYXRoLnNxcnQodGVhbVJhdGluZ3MubWFwKChbX3RlYW1NdSwgdGVhbVNpZ21hU3EsIF90ZWFtLCBfcmFua10pID0+IHRlYW1TaWdtYVNxICsgQkVUQVNRKS5yZWR1Y2Uoc3VtLCAwKSlcbn1cblxuZXhwb3J0IGNvbnN0IHV0aWxTdW1RID0gKHRlYW1SYXRpbmdzOiBUZWFtUmF0aW5nW10sIGM6IG51bWJlcikgPT5cbiAgdGVhbVJhdGluZ3MubWFwKChbX3FNdSwgX3FTaWdtYVNxLCBfcVRlYW0sIHFSYW5rXSkgPT5cbiAgICB0ZWFtUmF0aW5nc1xuICAgICAgLmZpbHRlcigoW19pTXUsIF9pU2lnbWFTcSwgX2lUZWFtLCBpUmFua10pID0+IGlSYW5rID49IHFSYW5rKVxuICAgICAgLm1hcCgoW2lNdSwgX2lTaWdtYVNxLCBfaVRlYW0sIF9pUmFua10pID0+IE1hdGguZXhwKGlNdSAvIGMpKVxuICAgICAgLnJlZHVjZShzdW0sIDApXG4gIClcblxuZXhwb3J0IGNvbnN0IHV0aWxBID0gKHRlYW1SYXRpbmdzOiBUZWFtUmF0aW5nW10pID0+XG4gIHRlYW1SYXRpbmdzLm1hcChcbiAgICAoW19pTXUsIF9pU2lnbWFTcSwgX2lUZWFtLCBpUmFua10pID0+XG4gICAgICB0ZWFtUmF0aW5ncy5maWx0ZXIoKFtfcU11LCBfcVNpZ21hU3EsIF9xVGVhbSwgcVJhbmtdKSA9PiBpUmFuayA9PT0gcVJhbmspLmxlbmd0aFxuICApXG5cbmV4cG9ydCBjb25zdCBnYW1tYSA9IChvcHRpb25zOiBPcHRpb25zKTogR2FtbWEgPT5cbiAgb3B0aW9ucy5nYW1tYSA/P1xuICAvLyBkZWZhdWx0IHRvIGlTaWdtYSAvIGNcbiAgKChjOiBudW1iZXIsIF9rOiBudW1iZXIsIF9tdTogbnVtYmVyLCBzaWdtYVNxOiBudW1iZXIsIF90ZWFtOiBSYXRpbmdbXSwgX3FSYW5rOiBudW1iZXIpID0+IE1hdGguc3FydChzaWdtYVNxKSAvIGMpXG5cbmV4cG9ydCBkZWZhdWx0IChvcHRpb25zOiBPcHRpb25zKSA9PiAoe1xuICB1dGlsQzogdXRpbEMob3B0aW9ucyksXG4gIHRlYW1SYXRpbmc6IHRlYW1SYXRpbmcob3B0aW9ucyksXG4gIGdhbW1hOiBnYW1tYShvcHRpb25zKSxcbn0pXG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLElB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 | ||
export { | ||
util_default as default, | ||
gamma, | ||
ladderPairs, | ||
rankings, | ||
score, | ||
sum, | ||
utilA, | ||
utilSumQ | ||
}; | ||
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL3V0aWwudHMiLCAiLi4vc3JjL2NvbnN0YW50cy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0IHsgemlwIH0gZnJvbSAncmFtZGEnXG5pbXBvcnQgY29uc3RhbnRzIGZyb20gJy4vY29uc3RhbnRzJ1xuaW1wb3J0IHsgUmF0aW5nLCBPcHRpb25zLCBHYW1tYSwgVGVhbSwgUmFuayB9IGZyb20gJy4vdHlwZXMnXG5cbmV4cG9ydCB0eXBlIFRlYW1NdSA9IG51bWJlclxuXG5leHBvcnQgdHlwZSBUZWFtU2lnbWFTcSA9IG51bWJlclxuXG5leHBvcnQgdHlwZSBUZWFtUmF0aW5nID0gW1RlYW1NdSwgVGVhbVNpZ21hU3EsIFRlYW0sIFJhbmtdXG5cbmV4cG9ydCBjb25zdCBzdW0gPSAoYTogbnVtYmVyLCBiOiBudW1iZXIpID0+IGEgKyBiXG5cbmV4cG9ydCBjb25zdCBzY29yZSA9IChxOiBudW1iZXIsIGk6IG51bWJlcikgPT4ge1xuICBpZiAocSA8IGkpIHtcbiAgICByZXR1cm4gMC4wXG4gIH1cbiAgaWYgKHEgPiBpKSB7XG4gICAgcmV0dXJuIDEuMFxuICB9XG4gIC8vIHEgPT09IGlcbiAgcmV0dXJuIDAuNVxufVxuXG5leHBvcnQgY29uc3QgcmFua2luZ3MgPSAodGVhbXM6IFRlYW1bXSwgcmFuazogbnVtYmVyW10gPSBbXSkgPT4ge1xuICBjb25zdCB0ZWFtU2NvcmVzID0gdGVhbXMubWFwKChfLCBpKSA9PiByYW5rW2ldIHx8IGkpXG4gIGNvbnN0IG91dFJhbmsgPSBuZXcgQXJyYXkodGVhbXMubGVuZ3RoKVxuXG4gIGxldCBzID0gMFxuICBmb3IgKGxldCBqID0gMDsgaiA8IHRlYW1TY29yZXMubGVuZ3RoOyBqICs9IDEpIHtcbiAgICBpZiAoaiA+IDAgJiYgdGVhbVNjb3Jlc1tqIC0gMV0gPCB0ZWFtU2NvcmVzW2pdKSB7XG4gICAgICBzID0galxuICAgIH1cbiAgICBvdXRSYW5rW2pdID0gc1xuICB9XG4gIHJldHVybiBvdXRSYW5rXG59XG5cbi8vIHRoaXMgaXMgYmFzaWNhbGx5IHNoYXJlZCBjb2RlLCBwcmVjb21wdXRlZCBmb3IgZXZlcnkgbW9kZWxcbmNvbnN0IHRlYW1SYXRpbmcgPVxuICAob3B0aW9uczogT3B0aW9ucykgPT5cbiAgKGdhbWU6IFRlYW1bXSk6IFRlYW1SYXRpbmdbXSA9PiB7XG4gICAgY29uc3QgcmFuayA9IHJhbmtpbmdzKGdhbWUsIG9wdGlvbnMucmFuaylcbiAgICByZXR1cm4gZ2FtZS5tYXAoKHRlYW0sIGkpID0+IFtcbiAgICAgIC8vIG11W2ldXG4gICAgICB0ZWFtLm1hcCgoeyBtdSB9KSA9PiBtdSkucmVkdWNlKHN1bSwgMCksXG4gICAgICAvLyBzaWdtYV4yW2ldXG4gICAgICB0ZWFtLm1hcCgoeyBzaWdtYSB9KSA9PiBzaWdtYSAqIHNpZ21hKS5yZWR1Y2Uoc3VtLCAwKSxcbiAgICAgIC8vIChvcmlnaW5hbCB0ZWFtIGRhdGEpXG4gICAgICB0ZWFtLFxuICAgICAgLy8gcmFua1tpXVxuICAgICAgcmFua1tpXSxcbiAgICBdKVxuICB9XG5cbmV4cG9ydCBjb25zdCBsYWRkZXJQYWlycyA9IDxUPihyYW5rczogVFtdKTogVFtdW10gPT4ge1xuICBjb25zdCBzaXplID0gcmFua3MubGVuZ3RoXG4gIGNvbnN0IGxlZnQgPSBbdW5kZWZpbmVkLCAuLi5yYW5rcy5zbGljZSgwLCBzaXplIC0gMSldXG4gIGNvbnN0IHJpZ2h0ID0gWy4uLnJhbmtzLnNsaWNlKDEpLCB1bmRlZmluZWRdXG4gIHJldHVybiB6aXAobGVmdCwgcmlnaHQpLm1hcCgoW2wsIHJdKSA9PiB7XG4gICAgaWYgKGwgIT09IHVuZGVmaW5lZCAmJiByICE9PSB1bmRlZmluZWQpIHJldHVybiBbbCwgcl1cbiAgICBpZiAobCAhPT0gdW5kZWZpbmVkICYmIHIgPT09IHVuZGVmaW5lZCkgcmV0dXJuIFtsXVxuICAgIGlmIChsID09PSB1bmRlZmluZWQgJiYgciAhPT0gdW5kZWZpbmVkKSByZXR1cm4gW3JdXG4gICAgcmV0dXJuIFtdIC8vIHRoaXMgc2hvdWxkIHJlYWxseSBvbmx5IGhhcHBlbiB3aGVuIHNpemUgPT09IDFcbiAgfSlcbn1cblxuY29uc3QgdXRpbEMgPSAob3B0aW9uczogT3B0aW9ucykgPT4ge1xuICBjb25zdCB7IEJFVEFTUSB9ID0gY29uc3RhbnRzKG9wdGlvbnMpXG4gIHJldHVybiAodGVhbVJhdGluZ3M6IFRlYW1SYXRpbmdbXSkgPT5cbiAgICBNYXRoLnNxcnQodGVhbVJhdGluZ3MubWFwKChbX3RlYW1NdSwgdGVhbVNpZ21hU3EsIF90ZWFtLCBfcmFua10pID0+IHRlYW1TaWdtYVNxICsgQkVUQVNRKS5yZWR1Y2Uoc3VtLCAwKSlcbn1cblxuZXhwb3J0IGNvbnN0IHV0aWxTdW1RID0gKHRlYW1SYXRpbmdzOiBUZWFtUmF0aW5nW10sIGM6IG51bWJlcikgPT5cbiAgdGVhbVJhdGluZ3MubWFwKChbX3FNdSwgX3FTaWdtYVNxLCBfcVRlYW0sIHFSYW5rXSkgPT5cbiAgICB0ZWFtUmF0aW5nc1xuICAgICAgLmZpbHRlcigoW19pTXUsIF9pU2lnbWFTcSwgX2lUZWFtLCBpUmFua10pID0+IGlSYW5rID49IHFSYW5rKVxuICAgICAgLm1hcCgoW2lNdSwgX2lTaWdtYVNxLCBfaVRlYW0sIF9pUmFua10pID0+IE1hdGguZXhwKGlNdSAvIGMpKVxuICAgICAgLnJlZHVjZShzdW0sIDApXG4gIClcblxuZXhwb3J0IGNvbnN0IHV0aWxBID0gKHRlYW1SYXRpbmdzOiBUZWFtUmF0aW5nW10pID0+XG4gIHRlYW1SYXRpbmdzLm1hcChcbiAgICAoW19pTXUsIF9pU2lnbWFTcSwgX2lUZWFtLCBpUmFua10pID0+XG4gICAgICB0ZWFtUmF0aW5ncy5maWx0ZXIoKFtfcU11LCBfcVNpZ21hU3EsIF9xVGVhbSwgcVJhbmtdKSA9PiBpUmFuayA9PT0gcVJhbmspLmxlbmd0aFxuICApXG5cbmV4cG9ydCBjb25zdCBnYW1tYSA9IChvcHRpb25zOiBPcHRpb25zKTogR2FtbWEgPT5cbiAgb3B0aW9ucy5nYW1tYSA/P1xuICAvLyBkZWZhdWx0IHRvIGlTaWdtYSAvIGNcbiAgKChjOiBudW1iZXIsIF9rOiBudW1iZXIsIF9tdTogbnVtYmVyLCBzaWdtYVNxOiBudW1iZXIsIF90ZWFtOiBSYXRpbmdbXSwgX3FSYW5rOiBudW1iZXIpID0+IE1hdGguc3FydChzaWdtYVNxKSAvIGMpXG5cbmV4cG9ydCBkZWZhdWx0IChvcHRpb25zOiBPcHRpb25zKSA9PiAoe1xuICB1dGlsQzogdXRpbEMob3B0aW9ucyksXG4gIHRlYW1SYXRpbmc6IHRlYW1SYXRpbmcob3B0aW9ucyksXG4gIGdhbW1hOiBnYW1tYShvcHRpb25zKSxcbn0pXG4iLCAiaW1wb3J0IHsgT3B0aW9ucyB9IGZyb20gJy4vdHlwZXMnXG5cbmNvbnN0IGJ1aWxkZXIgPSAob3B0aW9uczogT3B0aW9ucykgPT4ge1xuICAvLyBpJ2QgbG92ZSB0byBrbm93IG9mIGEgYmV0dGVyIHdheSB0byBkbyB0aGlzXG4gIGNvbnN0IHsgeiA9IDMsIG11ID0gMjUsIHByZXZlbnRTaWdtYUluY3JlYXNlID0gZmFsc2UsIGVwc2lsb24gPSAwLjAwMDEgfSA9IG9wdGlvbnNcbiAgY29uc3QgeyB0YXUgPSBtdSAvIDMwMCwgc2lnbWEgPSBtdSAvIHosIGJldGEgPSBzaWdtYSAvIDIsIGxpbWl0U2lnbWEgPSBwcmV2ZW50U2lnbWFJbmNyZWFzZSB9ID0gb3B0aW9uc1xuICBjb25zdCBiZXRhU3EgPSBiZXRhICoqIDJcblxuICByZXR1cm4ge1xuICAgIFNJR01BOiBzaWdtYSxcbiAgICBNVTogbXUsXG4gICAgRVBTSUxPTjogZXBzaWxvbixcbiAgICBUV09CRVRBU1E6IDIgKiBiZXRhU3EsXG4gICAgQkVUQTogYmV0YSxcbiAgICBCRVRBU1E6IGJldGFTcSxcbiAgICBaOiB6LFxuICAgIFRBVTogdGF1LFxuICAgIExJTUlUX1NJR01BOiBsaW1pdFNpZ21hLFxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJ1aWxkZXJcbiJdLAogICJtYXBwaW5ncyI6ICI7QUFBQSxTQUFTLFdBQVc7OztBQ0Vw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 |
{ | ||
"name": "openskill", | ||
"version": "4.0.0", | ||
"version": "4.0.1", | ||
"description": "Weng-Lin Bayesian approximation method for online skill-ranking.", | ||
"scripts": { | ||
"build": "npm run build:typescript && npm run build:babel", | ||
"build:babel": "babel src --out-dir dist --extensions \".js,.ts\" --source-maps inline", | ||
"build:typescript": "tsc --emitDeclarationOnly", | ||
"build": "tsup", | ||
"lint": "eslint .", | ||
@@ -15,2 +13,5 @@ "prepare": "husky && npm run build", | ||
}, | ||
"engines": { | ||
"node": ">=18.0.0" | ||
}, | ||
"type": "module", | ||
@@ -39,7 +40,2 @@ "main": "./dist/index.js", | ||
"devDependencies": { | ||
"@babel/cli": "7.24.7", | ||
"@babel/core": "7.24.7", | ||
"@babel/preset-env": "7.24.7", | ||
"@babel/preset-typescript": "7.24.7", | ||
"@babel/register": "7.24.6", | ||
"@eslint/js": "9.6.0", | ||
@@ -49,2 +45,4 @@ "@philihp/prettier-config": "1.0.0", | ||
"@types/jest": "29.5.12", | ||
"esbuild": "0.23.0", | ||
"esbuild-jest": "0.5.0", | ||
"eslint": "8.57.0", | ||
@@ -57,2 +55,3 @@ "eslint-config-prettier": "9.1.0", | ||
"lint-staged": "15.2.7", | ||
"tsup": "8.1.0", | ||
"typescript": "5.5.3", | ||
@@ -62,7 +61,2 @@ "typescript-eslint": "7.15.0" | ||
"prettier": "@philihp/prettier-config", | ||
"jest": { | ||
"modulePathIgnorePatterns": [ | ||
"dist/" | ||
] | ||
}, | ||
"dependencies": { | ||
@@ -69,0 +63,0 @@ "@types/gaussian": "1.2.2", |
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
475880
16
67
3880