import bootstrap
import json
from inputs import OUT
from integrated import Integrated,DEFAULT

contract=json.loads((OUT/'execution_contract.json').read_text());results=[]
options=[dict(hand_vertical=.12,response_min=x,hand_contact_max=y) for x,y in ((.1,.09),(.15,.12),(.25,.12),(.15,.15))]
options += [dict(hand_vertical=.16,response_min=.15,hand_contact_max=.12),dict(hand_vertical=.12,response_min=.15,hand_contact_max=.12,min_samples=3)]
for idx,cfg in enumerate(options):
    per={}
    for clip in contract['development']:
        eng=Integrated(cfg);counts={};rules={}
        for line in (OUT/'work'/clip/'enriched.jsonl').open():
            r=json.loads(line);v=eng.step(r)
            if not r['displayed']:continue
            s=counts.setdefault(r['reference'],dict(N=0,observable=0,hit=0))
            s['N']+=1;s['observable']+=v['observable'];s['hit']+=v['hit']
            for rule in {x for p in v['pairs'] if p['hit'] for x in p['rules']}:rules[rule]=rules.get(rule,0)+1
        per[clip]=dict(counts=counts,rules=rules)
    results.append(dict(id=idx,config=dict(DEFAULT,**cfg),per=per))
    print(idx,{k:sum(x['hit'] for x in v['counts'].values()) for k,v in per.items()},flush=True)
(OUT/'reports/probe_refinement.json').write_text(json.dumps(results,indent=2))
