Spaces:
Configuration error
Configuration error
Niranjan-Murugarasu024
feat: TradeSense AI Chairman Edition production release ready for Hugging Face Spaces
0125724 Download backend/data/normalizer.py from BlueMen/tradesenseAi: direct link, hf CLI and curl.
- Browser
- Download file 1.52 kB
-
https://huggingface.co/spaces/BlueMen/tradesenseAi/resolve/main/backend/data/normalizer.py
- Command line
-
hf download hf://spaces/BlueMen/tradesenseAi/backend/data/normalizer.py
-
curl -L -o normalizer.py https://huggingface.co/spaces/BlueMen/tradesenseAi/resolve/main/backend/data/normalizer.py
1.52 kB
| """ | |
| TradeSense AI — Canonical Market Data Normalizer | |
| Transforms raw provider CanonicalBar collections into standardized Pandas DataFrames. | |
| """ | |
| from typing import List | |
| import pandas as pd | |
| from backend.data.providers.base import CanonicalBar | |
| class CanonicalNormalizer: | |
| """Standardizes bar structures into canonical DataFrame representations.""" | |
| def to_dataframe(bars: List[CanonicalBar]) -> pd.DataFrame: | |
| """Converts list of CanonicalBar objects to a sorted, cleaned DataFrame.""" | |
| if not bars: | |
| return pd.DataFrame(columns=["session", "Open", "High", "Low", "Close", "Volume", "VWAP"]) | |
| records = [ | |
| { | |
| "session": b.session, | |
| "Open": b.open, | |
| "High": b.high, | |
| "Low": b.low, | |
| "Close": b.close, | |
| "Volume": b.volume, | |
| "VWAP": b.vwap if b.vwap is not None else b.close, | |
| } | |
| for b in bars | |
| ] | |
| df = pd.DataFrame(records) | |
| # Ensure correct datatypes | |
| df["Open"] = df["Open"].astype(float) | |
| df["High"] = df["High"].astype(float) | |
| df["Low"] = df["Low"].astype(float) | |
| df["Close"] = df["Close"].astype(float) | |
| df["Volume"] = df["Volume"].astype(float) | |
| df["VWAP"] = df["VWAP"].astype(float) | |
| # Drop duplicates by session and sort ascending | |
| df = df.drop_duplicates(subset=["session"]).sort_values("session").reset_index(drop=True) | |
| return df | |