from pathlib import Path
import pandas as pd
import numpy as np
from _shared import load
ROOT = Path(__file__).resolve().parents[1]
OUT = ROOT / "outputs"
OUT.mkdir(exist_ok=True)
raw=load("panel")
d=raw.drop_duplicates(["symbol","date"],keep="last").copy()
d["date"]=pd.to_datetime(d["date"])
d=d.sort_values(["symbol","date"]).reset_index(drop=True)
d["previous_close"]=d.groupby("symbol")["close"].shift(1)
d["return_observed"]=d["close"]/d["previous_close"]-1
d["mean_3_observations"]=d.groupby("symbol")["close"].transform(lambda s:s.rolling(3,min_periods=3).mean())
d["signal_available_before_today"]=d.groupby("symbol")["mean_3_observations"].shift(1)
first=d.groupby("symbol").head(1)
assert first["previous_close"].isna().all()
assert not d.duplicated(["symbol","date"]).any()
small=pd.Series([10.,12.,15.,20.],index=pd.to_datetime(["2026-01-01","2026-01-02","2026-01-05","2026-01-06"]))
assert small.rolling(3).mean().iloc[2]==37/3
assert small.rolling("3D",closed="right").mean().iloc[2]==15
print("三个观测 / 三个日历日:",small.rolling(3).mean().iloc[2],small.rolling("3D").mean().iloc[2])
print(d.head(8).to_string(index=False))
d.to_csv(OUT / "pd_time_panel.csv",index=False)
