Coverage for src/duelboard/types.py: 100%

28 statements  

« prev     ^ index     » next       coverage.py v7.10.3, created at 2025-08-14 19:18 +0900

1"""Type definitions for duelboard.""" 

2 

3from typing import TYPE_CHECKING, Any, TypedDict 

4 

5 

6class BattleData(TypedDict): 

7 """Typed dict for battle data.""" 

8 

9 player_a: str 

10 player_b: str 

11 winner: str 

12 

13 

14class BattleStatistics(TypedDict): 

15 """Typed dict for battle statistics.""" 

16 

17 player: str 

18 battles: int 

19 wins: int 

20 losses: int 

21 ties: int 

22 win_rate: float 

23 

24 

25class PlayerStats(TypedDict): 

26 """Typed dict for internal player statistics.""" 

27 

28 battles: int 

29 wins: int 

30 losses: int 

31 ties: int 

32 

33 

34class RatingSummaryData(TypedDict, total=False): 

35 """Typed dict for rating summary data.""" 

36 

37 player: str 

38 rating: float 

39 battles: int 

40 ci_lower: float 

41 ci_upper: float 

42 ci_width: float 

43 

44 

45# Type aliases for better readability 

46RatingsDict = dict[str, "EloRating"] 

47PlayerRatings = dict[str, float] 

48WinRateMatrix = dict[str, dict[str, float]] 

49Metadata = dict[str, Any] 

50 

51if TYPE_CHECKING: 

52 from .models import EloRating