from collections import Counter
import numpy as np
normal=json.loads(Path('src/loader/runtime/profile-tools/devdata/creative-mode-146/current-attribute-vm-20261016.json').read_text())
edge=json.loads(Path('src/loader/runtime/profile-tools/devdata/creative-mode-146/current-attribute-vm-boundaries-20261016.json').read_text())
summary={'executableSha256':normal['executableSha256'],'interpreters':normal['interpreters'],'resultValueOffset':normal['resultValueOffset'],'roots':len(edge['coverage']['roots']),'definitions':edge['coverage']['definitions'],'nonemptyPrograms':edge['coverage']['programs'],'normalVectors':len(normal['vectors']),'boundaryAndRootVectors':len(edge['vectors']),'totalVectors':len(normal['vectors'])+len(edge['vectors']),'boundaryCases':dict(Counter(x['case'] for x in edge['vectors'])),'kindCounts':dict(Counter(x['kind'] for d in (normal,edge) for x in d['vectors'])),'scalePrograms':{},'rustDifferential':'all vectors matched bitwise after float Clamp signed-zero bound correction','legacyKfc3ClientVectors':2080,'legacyKfc3ServerVectors':2080,'legacyKfc3Differential':'both matched','nonfinitePolicy':'model rejects nonfinite float inputs/results intentionally; nonfinite behavior is not authorized'}
def signed(x): return x if x<0x80000000 else x-0x100000000
def wrapping(x): return signed(x&0xffffffff)
for d in (normal,edge):
 for v in d['vectors']:
  w=v['words']
  if w[-1]>>16!=13: continue
  # These are the four actual current LoadRef,min,old,base,adder,Add,Scale programs.
  assert len(w)==7 and w[0]>>16==3 and w[5]>>16==6
  vals=v['values']; current=signed(vals[w[0]&65535]); minimum=0 if w[1]>>16==1 else signed(vals[w[1]&65535]); old=signed(vals[w[2]&65535]); new=wrapping(signed(vals[w[3]&65535])+signed(vals[w[4]&65535])); oldrange=wrapping(old-minimum)
  r=summary['scalePrograms'].setdefault(v['name'],Counter())
  r['vectors']+=1
  if old==new: r['unchangedMaximum']+=1
  elif not oldrange: r['zeroPreviousRange']+=1
  else:
   r['rescaled']+=1
   oldvalue=wrapping(current-minimum)
   scaled=np.float32(np.float32(np.float32(oldvalue)/np.float32(oldrange))*np.float32(wrapping(new-minimum)))
   if not(-2147483648<=scaled<2147483648): r['cvttss2siOutOfRange']+=1
   if v['after'][w[0]&65535]==1: r['resultCurrentOne']+=1
summary['scalePrograms']={k:dict(v) for k,v in summary['scalePrograms'].items()}
Path('src/loader/runtime/profile-tools/devdata/creative-mode-146/current-attribute-vm-summary-20261016.json').write_text(json.dumps(summary,indent=2))
print(json.dumps(summary,indent=2))
