""" exp13_v2_launcher.py — Run exp13 multiscale sweep with convnext_model_v2.json (ep=13). Changes vs default exp13: - MODEL_1M → convnext_model_v2.json (calibration-fixed, always-positive z[13]) - PROXY_B_DIM → 13 (z[13] is proxy_B dim in v2, vs z[10] in ep=17) Everything else identical to exp13_multiscale_sweep.py. Results logged to ../../exp13_v2_screening_run.log Usage (from nautilus_dolphin/ dir): python dvae/exp13_v2_launcher.py --subset 14 --top_k 20 # Phase 1 screening python dvae/exp13_v2_launcher.py --subset 0 --top_k 0 # Full 56-day run Why v2 should be better: ep=17 z[10]: ALWAYS NEGATIVE [-1.24, -0.30] → direct scaling configs hurt v2 z[13]: ALWAYS POSITIVE [+0.17, +1.46] → direct scaling configs work correctly Separation (proxy_B quartiles): 0.46 (ep=17) → 0.61 (v2) — 32% improvement """ import sys, os from pathlib import Path ROOT = Path(__file__).resolve().parent.parent.parent sys.path.insert(0, str(ROOT / 'nautilus_dolphin')) # ── patch model path and proxy_B dim before importing main ─────────────────── MODEL_V2 = ROOT / 'nautilus_dolphin' / 'dvae' / 'convnext_model_v2.json' PROXY_B_V2 = 13 # z[13] r=+0.9332 for v2 ep=13 (auto-confirmed by proto_v2_query.py) assert MODEL_V2.exists(), f"v2 model not found: {MODEL_V2}" import dvae.exp13_multiscale_sweep as e13 import dvae.convnext_sensor as cs # Patch module-level constants before main() runs e13.MODEL_1M = MODEL_V2 e13.PROXY_B_DIM = PROXY_B_V2 cs.PROXY_B_DIM = PROXY_B_V2 # sensor module also exports this print(f"[v2-launcher] MODEL_1M → {MODEL_V2.name}") print(f"[v2-launcher] PROXY_B_DIM → {PROXY_B_V2} (was 10)") print(f"[v2-launcher] v2 ep=13 val=18.002 z[13] r=+0.933 calibration=ALWAYS_POSITIVE") print() if __name__ == '__main__': e13.main()