File size: 2,978 Bytes
c8590d5 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | #!/usr/bin/env python3
"""Measure recovered original-asset outputs against conventional geometry formulas."""
import hashlib,json,math,struct
from pathlib import Path
from analyze_qvm_acceleration import word,number
from analyze_qvm import write_json
def f(v):return struct.unpack('<f',struct.pack('<f',v))[0]
def conventional_basis(t):
a=list(map(number,t['sample_words64_108']));left=[a[3:6]+[0],a[6:9]+[0],a[9:12]+[0],[0,0,0,1]];right=[[number(v) for v in t['initial_record'][3+4*r:7+4*r]] for r in range(4)];out=[]
for row in left:
for col in range(4):
value=f(row[0]*right[0][col])
for k in range(1,4):value=f(value+f(row[k]*right[k][col]))
out.append(word(value))
return out
def main():
points=[];matrices=[];sources={}
for stem in ['md3-original-leaf','md3-original-hierarchy','md3-original-model-hit']:
path=Path('docs/research')/(stem+'.json');data=path.read_bytes();sources[stem]=hashlib.sha256(data).hexdigest();rows=json.loads(data)['probes']
for row_index,p in enumerate(rows):
leafs=[p] if stem=='md3-original-leaf' else [r['effect'] for r in (p['leaf_reports'] if stem=='md3-original-hierarchy' else p['hierarchies'][0]['leaf_reports'])]
for leaf_index,r in enumerate(leafs):
origin=list(map(number,r['input']['origin']));direction=list(map(number,r['input']['direction']))
for record in range(r['before'][16],r['after'][16]):
values=r['after'][17+5*record:22+5*record];t=number(values[4]);expected=[word(f(x+f(t*y))) for x,y in zip(origin,direction)];distance=math.sqrt(sum((number(x)-number(y))**2 for x,y in zip(values[1:4],expected)));points.append({'source':stem,'row':row_index,'leaf':leaf_index,'record':record,'category':values[0],'parameter':values[4],'source_point':values[1:4],'conventional_ray_point':expected,'distance':distance})
if stem=='md3-original-hierarchy':
for index,t in enumerate(p['transforms']):
actual=t['final_record'][3:19];expected=conventional_basis(t);matrices.append({'source':stem,'row':row_index,'transform':index,'source_basis':actual,'conventional_basis':expected,'different_indices':[j for j,(a,b) in enumerate(zip(actual,expected)) if a!=b]})
write_json(Path('docs/research/md3-geometry-audit.json'),{'source_report_hashes':sources,'points':points,'matrices':matrices,'summary':{'point_comparisons':len(points),'noncoincident_points':sum(p['distance']>1e-5 for p in points),'largest_point_distance':max(p['distance'] for p in points),'fourth_row_differences':sum(bool(p['different_indices']) for p in matrices)},'limits':'Numeric comparison of recovered QVM outputs on original assets against conventional formulas. Neither formula is executed in the original game here. Differences are evidence requiring native/reference validation, not authorization to change source behavior.'})
if __name__=='__main__':main()
|