"""One frozen state, new spatial points, known times and three readouts.""" from pathlib import Path import argparse,csv,json,time,sys,hashlib ROOT=Path(__file__).resolve().parents[1];sys.path.insert(0,str(ROOT)) import numpy as np from aureole.renderer import Scene,receiver_grid,light_grid,unoccluded from aureole.certificates import CertificateMemory,visibility_certificate def run(output): protocol=ROOT/'experiments_queries.json';cfg=json.loads(protocol.read_text()) out=ROOT/output;out.mkdir(parents=True,exist_ok=True) anchors=receiver_grid(*cfg['anchor_grid']);queries=receiver_grid(*cfg['query_grid']);lights=light_grid(cfg['emitter_grid_side']) ah,aw=cfg['anchor_grid'];nearest=(np.rint((queries[:,1]+1)*(ah-1)/2).astype(int)*aw +np.rint((queries[:,0]+1)*(aw-1)/2).astype(int)) rows=[];images={};warm_count=0;init_seconds=0 for sid in cfg['scene_ids']: base=Scene.create(sid);memory=CertificateMemory(anchors,lights,base.spheres) ai=np.repeat(np.arange(len(anchors)),len(lights));aj=np.tile(np.arange(len(lights)),len(anchors)) tic=time.perf_counter();v,m=visibility_certificate(base,anchors[ai],lights[aj]);memory.commit(ai,aj,v,m) init_seconds+=time.perf_counter()-tic;warm_count+=len(ai) for tau in cfg['times']: g=base.spheres.copy();g[:,0]+=tau*np.array([.035,-.020,.015]);g[:,1]+=tau*np.array([.010,.018,-.012]) scene=Scene(sid,g) # Known affine trajectory; this endpoint difference also bounds its whole prefix. movement=float(np.max(np.linalg.norm(g[:,:3]-base.spheres[:,:3],axis=1))) tic=time.perf_counter();v,known=memory.lookup(nearest,queries,extra_motion=movement) rr,j=np.where(~known) fresh,_=visibility_certificate(scene,queries[rr],lights[j]);v[rr,j]=fresh lookup_trace_seconds=time.perf_counter()-tic # Three linear appearance readouts of identical reconstructed visibility. outputs=[];tic=time.perf_counter() for appearance in range(cfg['appearance_readouts']): b=unoccluded(queries,lights,appearance==1,appearance*.7) outputs.append((b*v[...,None]).sum(1)) readout_seconds=time.perf_counter()-tic # Independent quadratic oracle audits current exact visibility after output. truth=scene.visibility(queries[:,None,:],lights[None,:,:]) wrong=int(np.count_nonzero(known & (v!=truth)));error=0 for a,y in enumerate(outputs): b=unoccluded(queries,lights,a==1,a*.7);target=(b*truth[...,None]).sum(1) error=max(error,float(np.max(np.abs(y-target)))) if sid==cfg['scene_ids'][0] and tau in (0.,.5,1.): images[f't{tau}_appearance{a}']=y.reshape(*cfg['query_grid'],3) rows.append({'scene':sid,'time':tau,'terms':int(v.size),'certified_terms':int(known.sum()), 'fresh_queries':len(rr),'shared_fresh_baseline_queries':int(v.size), 'separate_readout_baseline_queries':int(v.size*cfg['appearance_readouts']), 'false_certificates':wrong,'max_linear_rgb_error':error, 'lookup_trace_seconds':lookup_trace_seconds,'three_readout_seconds':readout_seconds}) print(f'completed query scene {sid}',flush=True) with (out/'queries_raw.csv').open('w',newline='') as f: w=csv.DictWriter(f,fieldnames=list(rows[0]));w.writeheader();w.writerows(rows) fresh=sum(r['fresh_queries'] for r in rows);shared=sum(r['shared_fresh_baseline_queries'] for r in rows) separate=sum(r['separate_readout_baseline_queries'] for r in rows) report={'protocol':cfg,'protocol_sha256':hashlib.sha256(protocol.read_bytes()).hexdigest(),'records':len(rows), 'initialization_queries':warm_count,'residual_queries':fresh,'total_queries_including_initialization':warm_count+fresh, 'shared_fresh_baseline_queries':shared,'independent_readout_baseline_queries':separate, 'amortized_query_reduction_vs_shared':1-(warm_count+fresh)/shared, 'query_reduction_after_warmup_vs_shared':1-fresh/shared, 'false_certificates':sum(r['false_certificates'] for r in rows), 'max_linear_rgb_error':max(r['max_linear_rgb_error'] for r in rows), 'initialization_seconds':init_seconds,'memory_bytes':memory.nbytes, 'audit_queries_not_in_policy_budget':shared, 'scope':'Eight new scenes, five prescribed times, three known appearance readouts. No neural SR/FG claims. Warmup charged. Baseline comparison counts physical queries, not total time.'} (out/'queries_report.json').write_text(json.dumps(report,indent=2)+'\n') np.savez_compressed(out/'queries_frames.npz',**images) print(json.dumps(report,indent=2)) if __name__=='__main__': p=argparse.ArgumentParser();p.add_argument('--output',default='queries_reproduced');run(p.parse_args().output)