"""Read-only selection and deterministic fixtures, before observing any dynamics.""" from datetime import datetime,timezone import json import subprocess import numpy as np import pandas as pd import yaml from context import MODEL,ROOT,EXP,AD,CFG,digest,save,sources,integrity M=json.loads((AD/'protocol/preregistered.json').read_text())['config']['model'] def put(name,nodes,src,dst,raw,steps,description,edge_id=None,requests=None,external=None,v=None,g=None,metadata=None): n=len(nodes);src=np.asarray(src,np.int32);dst=np.asarray(dst,np.int32);raw=np.asarray(raw,np.int64) eid=np.arange(len(src),dtype=np.int64) if edge_id is None else np.asarray(edge_id,np.int64) order=np.lexsort((eid,src));src,dst,raw,eid=src[order],dst[order],raw[order],eid[order] assert len(src) and len(src)==len(dst)==len(raw) and np.all((src>=0)&(src=0)&(dst0],minlength=166700);neg=np.bincount(dst[signs[src]<0],minlength=166700) ranked=np.lexsort((np.arange(166700),-degree));targets=[int(ranked[0]),int(next(i for i in ranked if pos[i]>=64 and neg[i]>=63))] for name,target in zip(CFG['real_cases'],targets): incoming=np.flatnonzero((dst==target)&(src!=target));incoming=incoming[np.lexsort((src[incoming],-raw[incoming]))] if name=='highest_indegree':chosen=incoming[:127] else: pp=incoming[signs[src[incoming]]>0][:64];nn=incoming[signs[src[incoming]]<0][:63] assert len(pp)==64 and len(nn)==63,'Insufficient mixed partners for predeclared graph' chosen=np.r_[pp,nn] nodes=np.sort(np.unique(np.r_[src[chosen],target])).astype(np.int32);assert len(nodes)==128 lookup=np.full(166700,-1,np.int32);lookup[nodes]=np.arange(len(nodes),dtype=np.int32) ids=np.concatenate([np.arange(ptr[s],ptr[s+1],dtype=np.int64) for s in nodes]);ids=ids[lookup[dst[ids]]>=0] local_src=lookup[src[ids]];local_dst=lookup[dst[ids]];signed=raw[ids]*signs[src[ids]] req=np.zeros((500,len(nodes)),np.uint8);stim=np.sort(src[chosen[:16]]) for tick in (0,25,50,100,150,200):req[tick,lookup[stim]]=1 put(name,nodes,local_src,local_dst,signed,500,'Deterministically selected real induced graph; canonical edge IDs/counts and frozen signs.',edge_id=ids,requests=req, metadata=dict(target_neuron_idx=target,target_body_id=int(meta.body_id.iloc[target]),global_in_degree=int(degree[target]),positive_in_edges=int(pos[target]),negative_in_edges=int(neg[target]),stimulated_neuron_idx=stim.tolist())) meta.iloc[nodes][['neuron_idx','body_id','annotation_type','neurotransmitter']].to_csv(EXP/'cases'/name/'identities.csv',index=False) pd.DataFrame(dict(edge_id=ids,source_neuron_idx=src[ids],target_neuron_idx=dst[ids],raw_count=raw[ids],source_sign=signs[src[ids]],signed_raw=signed)).to_csv(EXP/'cases'/name/'anatomical-edges.csv',index=False) ac=ROOT/'experiments/phase4ac-lif-semantics' for name in CFG['prior_motifs']: e=pd.read_csv(ac/'motifs'/f'{name}-edges.csv');nodes=np.load(ac/'motifs'/f'{name}-state.npz')['nodes'];look={int(v):i for i,v in enumerate(nodes)} req=np.zeros((1000,len(nodes)),np.uint8) if name!='no_input':req[0,look[1381]]=1 put('motif_'+name,nodes,[look[int(x)] for x in e.source_neuron_idx],[look[int(x)] for x in e.target_neuron_idx],e.raw_count.to_numpy()*signs[e.source_neuron_idx],1000, 'Same selected4AC/4AD motif,100ms prefix; no new edge or weight.',edge_id=e.edge_id.to_numpy(),requests=req) def main(): assert not (EXP/'protocol').exists() for d in ('protocol','cases','oracle','gpu','regression','audit','performance'):(EXP/d).mkdir() can=ROOT/'datasets/male-cns-v1.0/processed/neuron-only' inputs=[can/'gpu/csr-indptr.int64.npy',can/'gpu/csr-indices.int32.npy',can/'gpu/csr-weights.int64.npy',can/'neuron-index/unified-metadata.parquet',ROOT/'models/male-cns-lif/runtime-v1/phase4c.yaml',AD/'external-resources/model.py',AD/'manifest.json'] save(EXP/'protocol/preregistered.json',dict(timestamp_utc=datetime.now(timezone.utc).isoformat(),config=CFG,sources=sources(), inputs=[dict(path=str(p.relative_to(ROOT)),sha256=digest(p)) for p in inputs],before_model_execution=True, parent_commit=subprocess.check_output(['git','-C',str(ROOT),'rev-parse','HEAD'],text=True).strip())) save(EXP/'regression/old-integrity-before.json',integrity()) synthetic();real() save(EXP/'protocol/case-hashes.json',[dict(path=str(p.relative_to(EXP)),sha256=digest(p)) for p in sorted((EXP/'cases').rglob('*')) if p.is_file()]) print('PREPARED',len(list((EXP/'cases').iterdir())),'fixed cases; old integrity PASS',flush=True) if __name__=='__main__':main()