"""Read-only warehouse layer. Dashboard reads ONLY from data/warehouse/. Cached with @st.cache_data. No imports from ML code. """ from pathlib import Path import pandas as pd ROOT = Path(__file__).resolve().parent.parent WAREHOUSE = ROOT / "data" / "warehouse" def _cache_key(): """Bust cache when parquet files change.""" files = sorted(WAREHOUSE.glob("*.parquet")) mtimes = tuple(f.stat().st_mtime for f in files) return (len(files), mtimes) def load_players() -> pd.DataFrame: return pd.read_parquet(WAREHOUSE / "players.parquet") def load_fixtures() -> pd.DataFrame: return pd.read_parquet(WAREHOUSE / "fixtures.parquet") def load_predictions() -> pd.DataFrame: return pd.read_parquet(WAREHOUSE / "predictions.parquet") def load_lineups() -> pd.DataFrame: return pd.read_parquet(WAREHOUSE / "lineups.parquet") def load_votes() -> pd.DataFrame: return pd.read_parquet(WAREHOUSE / "votes.parquet") def load_model_metrics() -> pd.DataFrame: return pd.read_parquet(WAREHOUSE / "model_metrics.parquet")