Source code for wraquant.data.utils

"""Data utility functions — date parsing, symbol cleaning, etc."""

from __future__ import annotations

from datetime import date, datetime

import numpy as np
import pandas as pd

from wraquant.core.types import DateLike


[docs] def parse_date(d: DateLike | None) -> pd.Timestamp | None: """Parse a date-like value into a pd.Timestamp. Parameters: d: Date string, date, datetime, Timestamp, or None. Returns: pd.Timestamp or None if input is None. """ if d is None: return None if isinstance(d, pd.Timestamp): return d if isinstance(d, (date, datetime)): return pd.Timestamp(d) if isinstance(d, np.datetime64): return pd.Timestamp(d) if isinstance(d, str): return pd.Timestamp(d) raise TypeError(f"Cannot parse {type(d)} as date: {d}")
[docs] def clean_symbol(symbol: str) -> str: """Normalize a ticker symbol. Parameters: symbol: Raw ticker symbol. Returns: Cleaned, uppercase ticker symbol. """ return symbol.strip().upper()
[docs] def infer_frequency(index: pd.DatetimeIndex) -> str | None: """Attempt to infer the frequency of a DatetimeIndex. Parameters: index: DatetimeIndex to analyze. Returns: Frequency string or None if cannot be determined. """ if len(index) < 2: return None freq = pd.infer_freq(index) return freq