"""按 bar idx 查询指标值。""" from __future__ import annotations from typing import Any, Dict, Optional import pandas as pd class IndicatorStore: """以 DataFrame 列 + 行 idx 对齐的只读指标视图。""" def __init__(self, df: pd.DataFrame): self._df = df @property def dataframe(self) -> pd.DataFrame: return self._df def __len__(self) -> int: return len(self._df) def get(self, idx: int, name: str, default: Any = None) -> Any: if idx < 0 or idx >= len(self._df): return default if name not in self._df.columns: return default val = self._df.iloc[idx][name] if pd.isna(val): return default return val def row(self, idx: int) -> Optional[Dict[str, Any]]: if idx < 0 or idx >= len(self._df): return None return self._df.iloc[idx].to_dict() def series(self, name: str): if name not in self._df.columns: return None return self._df[name]