"""Base class for daily feature plugins.""" from abc import ABC, abstractmethod import pandas as pd class BaseFeature(ABC): """Aggregate raw minute bars into daily, symbol-keyed feature columns.""" #: Unique registry key. Every concrete feature must set this to a non-empty str. name: str = "" @abstractmethod def compute( self, minute: pd.DataFrame, daily: pd.DataFrame | None = None, ) -> pd.DataFrame: """Compute daily features. Args: minute: Raw minute bars with ``symbol_id`` and ``date`` keys. daily: Optional daily data frame for calendar alignment or reference daily columns. Returns: DataFrame with ``symbol_id``, ``date``, and one or more numeric feature columns. """ def __repr__(self) -> str: params = ", ".join(f"{k}={v!r}" for k, v in vars(self).items()) return f"{type(self).__name__}({params})"