Files
Jyotisha/docs/research/artifacts/rectification-width-funnel-2026-10-16/prod_per_case.py
T

37 lines
2.1 KiB
Python

"""Per-case production replay (baseline variant) on v5, current staging code."""
import json, sys, time, traceback
from pathlib import Path
WT = Path('/workspace/Jyotisha/.worktrees/karaka-interval-20261016')
sys.path.insert(0, str(WT)); sys.path.insert(0, str(WT/'scripts'))
from scripts.research import cluster_width_probe as cwp
HOLD = WT/'references/real_case_calibration/minute_rectification_holdout_v5.json'
cases = json.loads(HOLD.read_text())['cases']
radii = [int(r) for r in (sys.argv[1] if len(sys.argv)>1 else '10,30,60').split(',')]
out = []
variant = cwp.Variant('baseline')
t0=time.time()
for case in cases:
cid = case['case_id']; true_time = str(case['birth']['time'])[:5]
for radius in radii:
try:
request = cwp.scoring_request_for(case, radius)
built = cwp.build_event_contribution_matrix(request)
rows = cwp.score_from_matrix(request, built)
contexts = list(built.get('static_contexts') or [])
window_times = [str(r['time'])[:5] for r in rows]
raw = cwp.raw_signature_clusters(contexts)
probes = cwp.discriminating_event_probes({**request,'refresh_probes':False}, built,
scan=cwp.window_scan(built), candidate_times=list(window_times),
representative_time=true_time, today=cwp.TODAY)
s = cwp.score_variant(raw_clusters=raw, rows=rows, variant=variant, true_time=true_time,
window_times=window_times, probes=probes)
r = s['replay']
out.append({'case_id':cid,'radius':radius,'true':true_time,
'engine':{k:s['engine'][k] for k in ('top1_hit','coverage','width')},
'replay':{k:r.get(k) for k in ('top1_hit','coverage','width','asked','eliminated_count','union_alive_width')}})
except Exception as e:
out.append({'case_id':cid,'radius':radius,'error':f'{type(e).__name__}: {e}','trace':traceback.format_exc()[-800:]})
print(cid, round(time.time()-t0), flush=True)
Path('prod_per_case.json').write_text(json.dumps(out, ensure_ascii=False, indent=1))
print('DONE')