| """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", |
| ] |
|
|