import sys,json,pathlib
from types import SimpleNamespace as N
sys.path.insert(0,'/opt/contextra')
from app.byte_tracking import ByteTracker,TrackingSettings
from app.pose_nms import pose_nms_indices
r=pathlib.Path('/eval');tracker=ByteTracker(TrackingSettings(frame_rate=30));count=0
for line in (r/'inputs/pose_candidates_prefilter.jsonl').open():
 row=json.loads(line);w,h=row['width'],row['height'];cs=row['candidates']
 obs=[N(class_id=0,score=p['score'],bbox_xyxy=tuple(v/d for v,d in zip(p['bbox'],[w,h,w,h])),model_key='RFDETRKeypointPreview',frame=N(frame_width=w,frame_height=h),query=p['query']) for p in cs if p['parse_keep']]
 obs=[obs[i] for i in pose_nms_indices(obs,.85)]
 assert {o.query for o in obs}=={p['query'] for p in cs if p['nms_keep']}
 ids=tracker.update(obs)
 assert all(t==cs[o.query]['track_id'] for o,t in zip(obs,ids))
 count+=1
(r/'reports/tracker_replay.json').write_text(json.dumps(dict(status='PASS',observations=count,frame_rate=30,nms_selection_match=True,all_track_ids_match=True,model_inference=False)))
print('TRACKER_REPLAY_PASS',count)
