#!/usr/bin/env python3 """Summarize raw runs; create artifact provenance and actual coverage metadata.""" from pathlib import Path import hashlib,json,re,statistics base=Path(__file__).resolve().parent manifest={} for p in sorted(base.glob('*.events')): lines=p.read_text().splitlines();header=lines[0].split();events=[list(map(float,s.split())) for s in lines[1:]] assert len(events)==int(header[3]) tiles={} for e in events: tile=f'{int(e[0]//32)},{int(e[1]//32)}';tiles[tile]=tiles.get(tile,0)+1 manifest[p.name]={'sha256':hashlib.sha256(p.read_bytes()).hexdigest(),'events':len(events), 'bbox_xy':[min(e[0] for e in events),min(e[1] for e in events),max(e[0] for e in events),max(e[1] for e in events)] if events else [], 'flux_range':[min(e[5] for e in events),max(e[5] for e in events)] if events else [], 'support_range':[min(e[6] for e in events),max(e[6] for e in events)] if events else [], 'occupied_center_tiles_32':len(tiles),'max_centers_per_tile_32':max(tiles.values(),default=0), 'centers_per_tile_32':tiles} (base/'events_manifest.json').write_text(json.dumps(manifest,indent=2)+'\n') for version in ['v2','v3','final']: groups={} for p in sorted(base.glob(version+'_*.log')): text=p.read_text();matches=re.findall(r'(\w+)=([-+0-9.eE]+)',text) row=dict(matches) if 'replay_wall' not in row or 'EXIT 0' not in text:continue key=p.stem.rsplit('_',1)[0];groups.setdefault(key,[]).append(row) print(version) for key,rows in groups.items(): ms=statistics.median(float(r['replay_wall'])*1000 for r in rows) complete=statistics.median((float(r['replay_wall'])+float(r['create']))*1000 for r in rows) print(key,'repeats',len(rows),'replay_ms',round(ms,3),'with_create_ms',round(complete,3), 'range_ms',[round(min(float(r['replay_wall'])*1000 for r in rows),3),round(max(float(r['replay_wall'])*1000 for r in rows),3)])