def METHOD_NAME(self) -> list[WinnerGroup]:
    """Get an ordered list of winner groups."""
    if not self._game_set:
        raise RuntimeError("Can't get winners until game is set.")
    # Group by best scoring teams.
    winners: dict[int, list[bascenev1.SessionTeam]] = {}
    scores = [
        score
        for score in self._scores.values()
        if score[0]() is not None and score[1] is not None
    ]
    for score in scores:
        assert score[1] is not None
        sval = winners.setdefault(score[1], [])
        team = score[0]()
        assert team is not None
        sval.append(team)
    results: list[tuple[int | None, list[bascenev1.SessionTeam]]] = list(
        winners.items()
    )
    results.sort(
        reverse=not self._lower_is_better,
        key=lambda x: asserttype(x[0], int),
    )
    # Also group the 'None' scores.
    none_sessionteams: list[bascenev1.SessionTeam] = []
    for score in self._scores.values():
        scoreteam = score[0]()
        if scoreteam is not None and score[1] is None:
            none_sessionteams.append(scoreteam)
    # Add the Nones to the list (either as winners or losers
    # depending on the rules).
    if none_sessionteams:
        nones: list[tuple[int | None, list[bascenev1.SessionTeam]]] = [
            (None, none_sessionteams)
        ]
        if self._none_is_winner:
            results = nones + results
        else:
            results = results + nones
    return [WinnerGroup(score, team) for score, team in results]