Spaces:
Running
Running
File size: 1,995 Bytes
cd4fb81 888ef7f cd4fb81 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 | from __future__ import annotations
from dataclasses import dataclass
from datetime import datetime
from typing import Any
@dataclass(frozen=True)
class FinishedMatch:
match_id: str
competition: str
utc_date: datetime
home: str
away: str
home_goals: int
away_goals: int
home_id: str = ""
away_id: str = ""
home_aliases: tuple[str, ...] = ()
away_aliases: tuple[str, ...] = ()
@property
def home_key(self) -> str:
return f"id:{self.home_id}" if self.home_id else self.home
@property
def away_key(self) -> str:
return f"id:{self.away_id}" if self.away_id else self.away
@dataclass(frozen=True)
class TeamIdentity:
key: str
name: str
aliases: tuple[str, ...]
@dataclass(frozen=True)
class MarketConsensus:
home_odd: float | None
draw_odd: float | None
away_odd: float | None
home_prob: float | None
draw_prob: float | None
away_prob: float | None
bookmakers: int
dispersion: float = 1.0
home_dispersion: float = 1.0
draw_dispersion: float = 1.0
away_dispersion: float = 1.0
stale_bookmakers: int = 0
bookmaker_names: tuple[str, ...] = ()
@dataclass
class Pick:
event_id: str
kickoff: str
competition: str
competition_code: str
home: str
away: str
resolved_home_key: str
resolved_away_key: str
selection: str
side: str
odd: float
probability: float
raw_model_probability: float
conservative_probability: float
market_probability: float
fair_odd: float
model_ev: float
edge: float
safe_score: float
quality: float
reliability: float
disagreement: float
market_dispersion: float
market_bookmakers: int
name_confidence: float
calibration_delta: float
market_move: float
label: str
reasons: list[str]
model_detail: dict[str, float]
model_version: str
def as_dict(self) -> dict[str, Any]:
return self.__dict__.copy()
|