"""Core data structures and helpers shared across GIFT-Eval modules.""" from dataclasses import dataclass from src.gift_eval.constants import ALL_DATASETS @dataclass class DatasetMetadata: """Structured description of a dataset/term combination.""" full_name: str key: str freq: str term: str season_length: int target_dim: int to_univariate: bool prediction_length: int windows: int @dataclass class EvaluationItem: """Container for evaluation results and optional figures.""" dataset_metadata: DatasetMetadata metrics: dict figures: list[tuple[object, str]] DatasetSelection = list[str] | tuple[str, ...] | str def expand_datasets_arg(datasets: DatasetSelection) -> list[str]: """Normalize dataset selection strings to explicit lists.""" if isinstance(datasets, str): dataset_list = [datasets] else: dataset_list = list(datasets) if not dataset_list: return [] if dataset_list[0] == "all": return list(ALL_DATASETS) for dataset in dataset_list: if dataset not in ALL_DATASETS: raise ValueError(f"Invalid dataset: {dataset}. Use one of {ALL_DATASETS}") return dataset_list __all__ = [ "DatasetMetadata", "EvaluationItem", "DatasetSelection", "expand_datasets_arg", ]