"""日历/存续/停牌/来源错误分流后,只修复有证据的数据缺口。""" import json dates = ["2026-10-16", "2026-10-19", "2026-10-20", "2026-10-21", "2026-10-22", "2026-10-23", "2026-10-24", "2026-10-25", "2026-10-26"] market_sessions = set(dates)-{"2026-10-24", "2026-10-25"} listed_from, listed_until = "2026-10-19", "2026-10-23" stored = {"2026-10-19": {"close": 10, "source": "initial-1"}, "2026-10-23": {"close": 13, "source": "initial-2"}} status = {"2026-10-20": "verified_suspended", "2026-10-21": "verified_active"} failed_requests = {"2026-10-21"} diagnosis = {} for day in dates: if day not in market_sessions: state = "market_closed" elif day < listed_from: state = "before_listing" elif day > listed_until: state = "after_listing" elif day in stored: state = "observed" elif status.get(day) == "verified_suspended": state = "suspended" elif status.get(day) == "verified_active" and day in failed_requests: state = "download_gap" else: state = "unknown_reason" diagnosis[day] = state retry = [d for d, state in diagnosis.items() if state == "download_gap"] repaired = {**stored} for day in retry: repaired[day] = {"close": 11, "source": "synthetic-retry-1"} assert retry == ["2026-10-21"] assert diagnosis["2026-10-20"] == "suspended" and diagnosis["2026-10-22"] == "unknown_reason" assert diagnosis["2026-10-16"] == "before_listing" and diagnosis["2026-10-26"] == "after_listing" assert len(repaired) == 3 and set(repaired) == {"2026-10-19", "2026-10-21", "2026-10-23"} assert all(d not in repaired for d in ["2026-10-20", "2026-10-22", "2026-10-24", "2026-10-25"]) assert repaired["2026-10-21"]["source"] == "synthetic-retry-1" assert stored.keys() == {"2026-10-19", "2026-10-23"} print(json.dumps({"diagnosis": diagnosis, "retry": retry, "repaired": repaired, "still_unknown": [d for d, s in diagnosis.items() if s == "unknown_reason"]}, sort_keys=True))