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)
from decimal import Decimal
orders=load("orders").copy()
orders["net_cents"]=[int((Decimal(str(a))-Decimal(str(r)))*100) for a,r in zip(orders["amount"],orders["refund_amount"])]
paid=orders.loc[orders["status"].isin(["paid","refunded"])]
vector=paid.groupby("user_id",dropna=False)["net_cents"].sum()
manual={}
for r in paid.itertuples(index=False):
    k="NULL" if pd.isna(r.user_id) else str(int(r.user_id))
    manual[k]=manual.get(k,0)+r.net_cents
actual={"NULL" if pd.isna(k) else str(int(k)):int(v) for k,v in vector.items()}
assert actual==manual
before=orders.memory_usage(deep=True).sum()
compact=orders.copy()
compact["status"]=compact["status"].astype("category")
after=compact.memory_usage(deep=True).sum()
assert compact["status"].astype("string").equals(orders["status"].astype("string"))
print("内存字节 / 转类别:",int(before),int(after))
print("分组结果与独立逐行累计一致:",actual)
print("全行数 / 已知用户数:",len(paid),paid["user_id"].count())
