Archive fixed catalog subsets and captured events, manifests, reproducible commands, raw timing and regression logs, and device resource evidence. Document distribution-dependent tile reduction gains and independent indexed producer throughput. Update the GPU plan and renderer design while retaining the production atomic path. Preserve historical measurement metadata and exclude generated Python bytecode.
33 lines
1.9 KiB
Python
33 lines
1.9 KiB
Python
#!/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)])
|