"""Structural main-reader compatibility only; never imports or runs engines."""
import csv
import hashlib
import json
import math
import os
from pathlib import Path

root=Path('/eval');key=os.environ['CLIP']
spec=json.loads(Path('/specs.json').read_text())[key]
rows=json.loads((root/'inputs/pose.json').read_text())
check=json.loads((root/'reports/cache_validation.json').read_text())
plan=json.loads((root/'inputs/sampling_plan.json').read_text())
assert len(rows)==spec['expected_samples']==check['observations']
assert check['status']=='PASS' and check['selected_samples']==list(range(len(rows)))
assert [r['source_frame'] for r in rows]==plan['source_frame_indices']
assert len(list((root/'inputs/frames').glob('*.png')))==len(rows)
candidate_count=0
with (root/'inputs/pose_candidates_prefilter.jsonl').open() as f:
    for i,line in enumerate(f):
        raw=json.loads(line);r=rows[i]
        assert raw['sample']==i and raw['source_frame']==r['source_frame'] and raw['seconds']==r['seconds']
        assert len(raw['candidates'])==100
        for p in raw['candidates']:
            assert len(p['bbox'])==4 and all(math.isfinite(v) for v in p['bbox'])
            assert math.isfinite(p['score']) and 0<=p['score']<=1
            assert len(p['keypoints'])==17
            assert all(len(j)==3 and all(math.isfinite(v) for v in j) and 0<=j[2]<=1 for j in p['keypoints'])
        for p in r['persons']:
            q=raw['candidates'][p['query']]
            assert q['nms_keep'] and q['parse_keep'] and q['track_id']==p['track_id']
            assert q['keypoints']==p['keypoints'] and q['score']==p['score']
            assert p['valid_joints']==sum(j[2]>=.3 for j in p['keypoints'])
        candidate_count+=len(raw['candidates'])
assert i+1==len(rows)
summary=dict(status='PASS',samples=len(rows),raw_queries=candidate_count,main_reader='JSON loading and selected_samples/hash contract only; engine NOT executed',
    tracker_reset='new ByteTracker per clip process, unchanged helper',source_frame='clip-local 1-based',rgb='remote inputs/frames; first/middle/last pixel verification in cache_validation.json',
    input_shape=[1,3,576,576],keypoint_shape=[17,3],legacy_valid_joints_threshold=.3)
(root/'reports/compatibility.json').write_text(json.dumps(summary,indent=2))
files={}
for p in sorted(root.rglob('*')):
    if not p.is_file() or 'pose_models' in p.parts or p.name=='cache_hashes.json':continue
    h=hashlib.sha256()
    with p.open('rb') as f:
        for b in iter(lambda:f.read(1024*1024),b''):h.update(b)
    files[str(p.relative_to(root))]=h.hexdigest()
(root/'reports/cache_hashes.json').write_text(json.dumps(dict(files=files),indent=2))
print(json.dumps(summary),flush=True)
