import csv
import hashlib
import json
import os
import pathlib
import subprocess

os.umask(0o077)
R=pathlib.Path(__file__).parent
before=json.loads((R/'before.json').read_text())
after=json.loads((R/'after.json').read_text())
paired=json.loads((R/'paired.json').read_text())
verify=json.loads((R/'with-driver-result.json').read_text())
assert verify['errors']==verify['failures']==0
ssims=pathlib.Path('/workspace/ssims.ai/fastapi/gstreamer-python/ai_engine/byte_tracker.py')
assert hashlib.sha256(ssims.read_bytes()).hexdigest()==json.loads((R/'before-ledger.json').read_text())['ssims_source_hash']
summary={'comparison':{},'paired_empty_class':paired,'verification':verify,
         'production_image_changed':False,'model_rtsp_runs':0,'blas':before['backend'],
         'limits':['Synthetic candidate sequence, not measured live candidate distribution',
                   'SSIMS defaults and Contextra class-specific library differ in association semantics',
                   'Historical live timing scope is not identical to this function benchmark',
                   'Only paired empty-class comparison supports a bounded optimization effect',
                   'CPU2/RAM4GiB test environment; no production throughput extrapolation']}
for kind in before['results']:
    a=before['results'][kind]['contextra'];b=after['results'][kind]['contextra']
    assert a['outputs']==b['outputs'] and a['states']==b['states']
    summary['comparison'][kind]={'contextra_before':a['timings'],'contextra_after':b['timings'],
        'ssims_reference':before['results'][kind]['ssims']['timings'],
        'max_classes':max(x['classes'] for x in a['states']),
        'max_tracked':max(x['tracked'] for x in a['states']),
        'core_calls_mean':a['core_calls_mean']}
summary['paired_reduction_percent']=(1-paired['new']['mean_ms']/paired['old']['mean_ms'])*100
(R/'summary.json').write_text(json.dumps(summary,indent=2))
with (R/'summary.csv').open('w') as f:
    w=csv.writer(f);w.writerow(['fixture','implementation','stage','mean_ms','p95_ms'])
    for kind,values in summary['comparison'].items():
        for implementation in ('contextra_before','contextra_after','ssims_reference'):
            for stage,v in values[implementation].items():w.writerow([kind,implementation,stage,v['mean_ms'],v['p95_ms']])
for p in R.iterdir():
    if p.is_file():p.chmod(0o600)
print(json.dumps({'paired_reduction_percent':summary['paired_reduction_percent'],'tests':verify['tests'],'id_state_parity':True}))
