Source code for rstt.ranking.inferer.playerwinprc

from rstt.stypes import SPlayer

from typeguard import typechecked

import numpy as np


[docs] class PlayerWinPRC: def __init__(self, default: float = -1.0, scope: int = np.iinfo(np.int32).max): """Inferer based on Player win rate Parameters ---------- default : float, optional A rating for when no game was yet played, by default -1.0 scope : int, optional The number of game to consider, starting from the most recent one, by default np.iinfo(np.int32).max. """ self.default = default self.scope = scope
[docs] @typechecked def rate(self, player: SPlayer, *args, **kwargs) -> float: """Win rate inference Parameters ---------- player : Player a player to rate Returns ------- Dict[Player, float] the player and its associated rating """ return self._win_rate(player)
def _win_rate(self, player: SPlayer): games = player.games() if games: games = games[-self.scope:] nb_wins = sum([1 for game in games if player is game.winner()]) # QUEST: How to support arbitrary game outcomes # ??? sum([game.score(player) for game in games]) total = len(games) winrate = nb_wins / total * 100 else: winrate = self.default return winrate