"""独立复核本地 adj_factor_all.csv（累积表）是否 = tushare 真值（按日 API，独立来源）。
用法: ./zt_venv/bin/python code/chk_adj_factor_all_vs_api.py 20250115 20210802 20260911
"""
import os, sys, time
import numpy as np
import pandas as pd

os.environ.setdefault('HTTP_PROXY', 'http://127.0.0.1:7897')
os.environ.setdefault('HTTPS_PROXY', 'http://127.0.0.1:7897')
import tushare as ts
ts.set_token('edf6739fe1a4de0d747600cc753a8b4bf335cf27ef0f5aea2d2aa64c')
pro = ts.pro_api()
a = pd.read_csv("backtest_zt_full/adj_factor_all.csv")
a['trade_date'] = a['trade_date'].astype(int)

for dt in sys.argv[1:] or ['20250115']:
    sub = a[a.trade_date == int(dt)].set_index('ts_code')['adj_factor'].astype(float)
    t = None
    for _ in range(4):
        try:
            t = pro.adj_factor(trade_date=dt)
            if t is not None and len(t):
                break
        except Exception:
            pass
        time.sleep(3)
    if t is None or not len(t):
        print(f"{dt}: API 空表"); continue
    s = t.set_index('ts_code')['adj_factor'].astype(float)
    common = sub.index.intersection(s.index)
    rel = ((sub[common] - s[common]) / s[common]).abs()
    print(f"[{dt}] 表内 {len(sub)} 只 / API {len(s)} 只 / 交集 {len(common)} | "
          f"不等 {int((rel > 0).sum())} | >1e-4 {int((rel > 1e-4).sum())} | max {rel.max():.2e}"
          f" | 表内独有 {len(sub.index.difference(s.index))}")
    time.sleep(0.5)
