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