Rhaister / scripts /run_parse_sweep.py
Shreshth Gandhi
Import Rhaister main branch from GitHub source
5a72781
Raw
History Blame Contribute Delete
2.34 kB
"""Run baselines + full model (with HP_IMPUTE_MISSING=1) on all 10 parse splits.
Writes per-split results into baseline_results.json and model_results.json
INCREMENTALLY — each split is saved as soon as it's done, so a long-running
run can be killed without losing work.
Progress is printed to stdout with flush=True so `tail -F` on a log file
shows live progress. Run with:
uv run python scripts/run_parse_sweep.py 2>&1 | tee /tmp/parse_sweep.log
"""
import os, sys, json, time
os.environ.setdefault("WANDB_MODE", "disabled")
os.environ.setdefault("HP_IMPUTE_MISSING", "1")
import numpy as np
SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__))
sys.path.insert(0, SCRIPT_DIR)
import baselines as baselines_mod
from rhaister import train
REPO_ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
BASELINE_JSON = os.path.join(REPO_ROOT, "baseline_results.json")
MODEL_JSON = os.path.join(REPO_ROOT, "model_results.json")
SPLITS = (
[f"parse/split_{i}" for i in range(5)]
+ [f"parse/donor_split_{i}" for i in range(5)]
)
def clean(metrics):
return {k: float(v) for k, v in metrics.items()
if isinstance(v, (int, float, np.floating))}
def merge_save(path, split, payload):
existing = {}
if os.path.exists(path):
with open(path) as f:
existing = json.load(f)
existing[split] = payload
with open(path, "w") as f:
json.dump(existing, f, indent=2, sort_keys=True)
print(f"splits to run: {SPLITS}", flush=True)
for split in SPLITS:
print(f"\n==================== {split} ====================", flush=True)
t0 = time.time()
print(f"[{split}] baselines starting ...", flush=True)
bl = baselines_mod.compute_baselines(split)
bl_payload = {name: clean(m) for name, m in bl.items()}
merge_save(BASELINE_JSON, split, bl_payload)
print(f"[{split}] baselines done in {time.time()-t0:.1f}s, saved to {BASELINE_JSON}", flush=True)
t0 = time.time()
print(f"[{split}] model starting ...", flush=True)
m = train.train_and_evaluate(split_name=split, log=False, compute_discrimination=True)
model_payload = {"full_impute": clean(m)}
merge_save(MODEL_JSON, split, model_payload)
print(f"[{split}] model done in {time.time()-t0:.1f}s, saved to {MODEL_JSON}", flush=True)
print("\nSWEEP COMPLETE", flush=True)