Source code for forecasting.simulation.harness_base
from typing import List, Dict, Optional, Union
import polars as pl
from forecasting.data.storage import Storage
[docs]
class BaseHarness:
"""
Abstract base class for all Harnesses.
Provides common functionality for:
- S3/Local/Modal volume file path resolution.
- Cloud storage configuration.
"""
def __init__(
self,
base_source: Union[str, List[str]],
storage_options: Optional[Dict] = None,
id: str = "harness",
):
self.base_source = base_source
self.storage_options = storage_options or {}
self.id = id
def _resolve_paths(self) -> List[str]:
"""Resolves wildcards and S3/Modal volume paths to a concrete list of files."""
paths = []
# Normalize to list
sources = (
self.base_source
if isinstance(self.base_source, list)
else [self.base_source]
)
for source in sources:
if not isinstance(source, str):
continue
paths.extend(Storage.list_files(source))
# Deduplicate and sort
return sorted(list(set(paths)))