from __future__ import annotations import unittest from pathlib import Path import pandas as pd from dragon_branch_configs import alpha_first_glued_refined_hot_cap_config from dragon_rc1_golden_baseline import _load_indicator_snapshot from dragon_shared import END_DATE, START_DATE from dragon_strategy import DragonRuleEngine class TestBridgeChainRegression(unittest.TestCase): def setUp(self) -> None: self.base_dir = Path(__file__).resolve().parents[1] indexed, _ = _load_indicator_snapshot(self.base_dir) events, _ = DragonRuleEngine(config=alpha_first_glued_refined_hot_cap_config()).run(indexed) self.events = events[(events["date"] >= START_DATE) & (events["date"] <= END_DATE)].copy() self.events["date"] = pd.to_datetime(self.events["date"]) def test_predictive_reentry_requires_recent_predictive_exit(self) -> None: reentries = self.events[ (self.events["side"] == "BUY") & (self.events["layer"] == "real_trade") & (self.events["reason"] == "predictive_error_reentry_buy") ].copy() self.assertGreaterEqual(len(reentries), 1) sells = self.events[ (self.events["side"] == "SELL") & (self.events["layer"] == "real_trade") ][["date", "reason"]].copy() for _, buy_row in reentries.iterrows(): prior = sells[sells["date"] < buy_row["date"]].sort_values("date") self.assertFalse(prior.empty) last_sell = prior.iloc[-1] self.assertEqual(str(last_sell["reason"]), "predictive_b1_break_exit") self.assertLessEqual((buy_row["date"] - last_sell["date"]).days, 3) def test_predictive_events_stay_in_bridge_family(self) -> None: predictive_events = self.events[self.events["reason"].isin(["predictive_b1_break_exit", "predictive_error_reentry_buy"])].copy() self.assertGreaterEqual(len(predictive_events), 2) self.assertTrue((predictive_events["reason_layer"] == "bridge").all()) self.assertTrue((predictive_events["reason_family"] == "predictive_break").all()) if __name__ == "__main__": unittest.main()