Files
digital-drosophila/models/male-cns-lif/author-apl-lab-v1/finalize.py
T
2026-09-30 09:26:21 +08:00

91 lines
6.6 KiB
Python

"""Seal a completed gate or preserved failure; never claim learning."""
import json
from context import ROOT,MODEL,EXP,CFG,check,save,digest,integrity,budget
def seal(root):
assert not (root/'manifest.json').exists() and not (root/'checksums.sha256').exists()
rows=[dict(path=str(p.relative_to(root)),bytes=p.stat().st_size,sha256=digest(p))
for p in sorted(root.rglob('*')) if p.is_file() and '__pycache__' not in p.parts]
save(root/'manifest.json',dict(root=str(root),files=rows))
with (root/'checksums.sha256').open('x') as f:
for row in rows:f.write(row['sha256']+' '+row['path']+'\n')
f.write(digest(root/'manifest.json')+' manifest.json\n')
def main():
from compare import compare,compare_gpu_repeats
check();budget();comparisons=[];repeats={};components={}
for p in sorted((EXP/'audit').glob('compare-*.json')):
name=p.stem[len('compare-'):]
actual=compare(EXP/'cases'/name,EXP/'gpu'/(name+'-r0'),EXP/'oracle'/name,None)
assert actual==json.loads(p.read_text()),'Changed raw closed-loop evidence: '+name
comparisons.append(dict(case=name,pass_all=actual['pass_all']))
for p in sorted((EXP/'audit').glob('repeat-*.json')):
name,repeat=p.stem[len('repeat-'):].rsplit('-r',1)
actual=compare_gpu_repeats(EXP/'gpu'/(name+'-r0'),EXP/'gpu'/f'{name}-r{repeat}',None)
assert actual==json.loads(p.read_text()),'Changed raw repeat evidence: '+name
repeats[f'{name}-r{repeat}']=actual['pass_all']
for p in (EXP/'component-audit').glob('*.json'):
result=json.loads(p.read_text())
components[p.stem]=result['pass_all']
for filename,sha in result.get('input_sha256',{}).items():
assert digest(EXP/'gpu'/(p.stem+'-r0')/filename)==sha
gates={}
for name in ('fixtures','probes','calibration'):
path=EXP/'audit'/(name+'-gate.json')
gates[name]=json.loads(path.read_text()) if path.exists() else None
calpath=EXP/'calibration/summary.json'
cal=json.loads(calpath.read_text()) if calpath.exists() else None
if cal is not None:
from calibration import summarize
assert summarize(out_json=None)==cal,'CAL raw evidence changed'
frozen=json.loads((EXP/'regression/frozen-five.json').read_text())
after=integrity();save(EXP/'regression/old-integrity-after.json',after)
stops=[dict(path=str(p.relative_to(EXP)),report=json.loads(p.read_text())) for p in sorted((EXP/'audit').glob('stopped-*.json'))]
expected_cases=CFG['fixtures']+CFG['calibration']['full_oracle_probes']
expected_repeats=[f'{name}-r{r}' for name in CFG['fixtures'] for r in range(1,CFG['fixture_repeats'])]
compared={x['case']:x['pass_all'] for x in comparisons}
missing=dict(comparisons=sorted(set(expected_cases)-set(compared)),
components=sorted(set(expected_cases)-set(components)),repeats=sorted(set(expected_repeats)-set(repeats)))
evidence_ok=(set(compared)==set(components)==set(expected_cases) and set(repeats)==set(expected_repeats) and
all(compared.values()) and all(components.values()) and all(repeats.values()))
numerical=evidence_ok and all(gates[x] is not None and gates[x]['pass_all'] for x in ('fixtures','probes'))
representation=bool(cal is not None and cal['pass_all'])
if numerical:status='PASS-FIXED-CAL-REPRESENTATION' if representation else 'FAIL-FIXED-CAL-REPRESENTATION' if cal is not None else 'INCOMPLETE-CAL-EXECUTION'
else:status='FAIL-NUMERICAL-OR-AUDIT-GATE' if any(not p for group in (compared,components,repeats) for p in group.values()) else 'INCOMPLETE-NUMERICAL-EXECUTION'
oldpass=bool(frozen['pass_all'] and all(r['pass'] for r in after.values()))
if not oldpass:status='FAIL-FROZEN-INTEGRITY-OR-REGRESSION'
measurements=[]
for p in sorted((EXP/'gpu').glob('*/summary.json')):
s=json.loads(p.read_text())
measurements.append({k:s[k] for k in ('case','total_spikes','accepted_requests','nodes','edges','diagnostic_simulation_seconds','peak_allocated_vram_bytes')})
result=dict(status=status,numerical_gate_pass=bool(numerical),fixed_CAL_representation_pass=representation,
gates=gates,closed_loop_comparisons=comparisons,component_results=components,repeat_results=repeats,
missing_numerical_evidence=missing,calibration=cal,stopped=stops,
old_frozen_integrity_and_five_reference_pass=oldpass,measurements=measurements,
unchanged_APL_parameters=CFG['apl'],author_LIF_precision='float64',legacy_APL_precision='float32',
explicit_hypothesis=CFG['hypothesis'],APL_nonKC_fast_edges_unreplaced=1212,
shared_APL_component_oracle_limitation=True,whole_brain_universal_equivalence_claim=False,
heldout_generalization_tested=False,formal_AB_tested=False,learning_achieved=False,candidate_generated=False,
payload_bytes_before_manifest=budget(),
next_gate='Independent seeds/novel-odor representation, then credit specificity; no learning promotion from CAL' if numerical and representation else
'Audit first failure in this explicitly declared hypothesis; no gain search, no heldout tuning, no conditioning')
save(EXP/'audit/final-status.json',result)
lines=['# Phase 4AG: author LIF + unchanged legacy graded APL','',f'Status: `{status}`.','',
f'Numerical closed-loop gate: {numerical}; original complete fixed six-CAL gate: {representation}.',
'The independent Brian LIF and candidate use independent state but share the APL arithmetic component. Original frozen APL AST replay and a float64 error audit are separately recorded.',
'Author LIF uses float64; APL retains float32, tau20ms/gain0.01/normalization1, full original matrices and order. No learning/parameter search.',
'The explicitly hypothesized unconditional end-APL write includes refractory KC. Original fast APL mask leaves1,212 non-KC edges unreplaced; this scope limitation was not silently fixed.',
f'Old checksums and five frozen reference trials: {oldpass}.',
f'Successfully compared cases: {comparisons}.',
'Detailed CAL, exact comparisons, component errors, event/request traces and execution exceptions are linked from audit/final-status.json.',
'Wall/VRAM here include per-tick CPU synchronization, IPC and hashes. They are diagnostic costs, not runtime-performance benchmarks.',
'No heldout dynamic outputs, formal A/B, learning, game, reward, decoder or new candidate.',
'Next gate: '+result['next_gate'],'']
with (EXP/'REPORT.md').open('x',encoding='utf-8') as f:f.write('\n'.join(lines))
check();seal(MODEL);seal(EXP);print(status,flush=True)
if __name__=='__main__':main()