Source code for sr.comp.arenas

"""Arena and corner loading routines."""

from __future__ import annotations

from collections import OrderedDict
from pathlib import Path
from typing import NamedTuple, NewType

from . import yaml_loader
from .types import ArenaName, Colour

CornerNumber = NewType('CornerNumber', int)


[docs]class Arena(NamedTuple): name: ArenaName display_name: str colour: Colour
[docs]class Corner(NamedTuple): number: CornerNumber colour: Colour
[docs]def load_arenas(filename: Path) -> dict[ArenaName, Arena]: """ Load arenas from a YAML file. Parameters ---------- filename : str The filename of the YAML file to load arenas from. Returns ------- collections.OrderedDict A mapping of arena names to :class:`Arena` objects. """ y = yaml_loader.load(filename) arenas_data = y['arenas'] arenas = OrderedDict() for name in sorted(arenas_data.keys()): d = arenas_data[name] arenas[name] = Arena(name, d['display_name'], d.get('colour')) return arenas
[docs]def load_corners(filename: Path) -> dict[CornerNumber, Corner]: """ Load corner colours from a YAML file. Parameters ---------- filename : str The filename of the YAML file to load corners from. Returns ------- collections.OrderedDict A mapping of corner numbers to :class:`Corner` objects. """ y = yaml_loader.load(filename) corners = OrderedDict() for number, corner in y['corners'].items(): corners[number] = Corner(number, corner['colour']) return corners