Files
2026-09-30 16:11:14 +08:00

146 lines
9.6 KiB
Python

"""Register the exact zero/static interface tests; create no brain trajectory."""
import ast
from datetime import datetime, timezone
import hashlib
import platform
import shutil
import subprocess
import sys
import numpy as np
import pandas as pd
from context import (ROOT, MODEL, EXP, AK, AL, H, AG, META, AJ_MODEL, CFG, PINS,
read, save, digest, sources, integrity, write_npz)
def old_base_candidate(raw, source_path):
"""Evaluate exactly the pinned old assignment RHS; all candidate KC signs +1."""
assert raw.dtype == np.int64 and raw.ndim == 1 and np.all(raw > 0)
tree = ast.parse(source_path.read_text())
runtime = next(n for n in tree.body if isinstance(n, ast.ClassDef) and n.name == 'Runtime')
init = next(n for n in runtime.body if isinstance(n, ast.FunctionDef) and n.name == '__init__')
selected = [n for n in ast.walk(init) if isinstance(n, ast.Assign) and any(
isinstance(t, ast.Subscript) and isinstance(t.value, ast.Name) and t.value.id == 'effective'
for t in n.targets)]
assert len(selected) == 1
value = selected[0].value
assert ast.unparse(value) == "raw_np[a:b].astype(np.float32) * signs[src] * float(cfg['model']['w_syn_mv_per_anatomical_synapse'])"
env = dict(raw_np=raw, a=0, b=len(raw), np=np, signs=np.array([1], np.int8), src=0,
cfg={'model': {'w_syn_mv_per_anatomical_synapse': .275}}, float=float)
out = eval(compile(ast.Expression(value), str(source_path), 'eval'), {'__builtins__': {}}, env)
assert out.dtype == np.float32 and np.isfinite(out).all() and np.all(out > 0)
return out, hashlib.sha256(ast.dump(value, include_attributes=False).encode()).hexdigest()
def main():
assert not EXP.exists() or (EXP.is_dir() and not any(EXP.iterdir())), 'Never reuse a populated experiment'
assert shutil.disk_usage(EXP.parent).free > CFG['output_budget_bytes'] + 10 * 1024**3
for relative, sha in PINS.items():
assert digest(ROOT / relative) == sha, relative
assert read(AL / 'audit/final-status.json')['status'] == 'PASS-CONDITIONAL-CREDIT-TRANSFER-AUDIT-NOT-LEARNING'
assert CFG['stages'] == ['zero', 'static25'] and not CFG['training'] and not CFG['candidate_generation']
records = read(AK / 'protocol/validation-cases.json')
assert len(records) == 120 and len({r['name'] for r in records}) == 120
first_seed = min(r['seed'] for r in records)
planned = [dict(row, repeat=repeat) for row in records
for repeat in ((0, 1) if row['seed'] == first_seed else (0,))]
assert len(planned) == 144
inputs = dict(PINS)
static = [AK / 'protocol/validation-cases.json',
H / 'mappings/mbon-to-downstream-actual-edges.parquet',
ROOT / 'experiments/phase4l-olfactory-grounding/odor-encoder/selection.json',
ROOT / 'experiments/phase4af-author-fullgraph/oracle/no_input/coefficients.json']
static += list((AG / 'graphs/full').glob('*.npy')) + list((AG / 'apl-bundle').glob('*.npy'))
raw_path = ROOT / 'datasets/male-cns-v1.0/processed/neuron-only/gpu/csr-weights.int64.npy'
static.append(raw_path)
for row in planned:
case = AK / 'cases' / row['cohort'] / row['name']
spec = read(case / 'spec.json')
assert spec['steps'] == 1000 and spec['dt_ms'] == .1 and spec['apl_delay_steps'] == 18
assert spec['model']['w_syn_mv_per_anatomical_synapse'] == .275
static += [case / 'spec.json', case / 'requests.npz']
for p in static:
inputs[p.relative_to(ROOT).as_posix()] = digest(p)
for name in ('protocol', 'overlays', 'gpu', 'audit', 'regression', 'logs', 'extension-build', 'summaries'):
(EXP / name).mkdir(parents=True, exist_ok=False)
test = subprocess.run([sys.executable, '-B', '-m', 'unittest', 'discover', '-v', '-s', str(MODEL)],
cwd=MODEL, text=True, capture_output=True)
with (EXP / 'regression/unit-tests.log').open('x', encoding='utf-8') as f:
f.write(test.stdout + test.stderr)
save(EXP / 'regression/unit-tests.json', dict(pass_all=test.returncode == 0,
exit_code=test.returncode, log_sha256=digest(EXP / 'regression/unit-tests.log')))
assert test.returncode == 0, 'Unit tests failed; preserve partial experiment'
assert 'skipped=' not in test.stderr, 'All server compatibility tests must execute'
save(EXP / 'protocol/preregistered.json', dict(timestamp_utc=datetime.now(timezone.utc).isoformat(),
sources=sources(), config=CFG, planned=planned,
inputs=[dict(path=k, sha256=v) for k, v in sorted(inputs.items())],
parent_commit=subprocess.check_output(['git', '-C', str(ROOT), 'rev-parse', 'HEAD'], text=True).strip(),
before_new_brain_trajectories=True, prior_AK_AL_results_known=True,
no_dynamic_pair_selection=True, training=False, candidate_generated=False,
python=sys.version, numpy=np.__version__, platform=platform.platform()))
save(EXP / 'regression/old-integrity-before.json', integrity())
candidate = pd.read_parquet(H / 'plastic-mask/plastic-edge-candidates.parquet')
mask_path = H / 'plastic-mask/plastic-edge-ids.int64.npy'
ids = np.load(mask_path, allow_pickle=False)
mask = np.load(H / 'plastic-mask/plastic-edge-mask.bool.npy', allow_pickle=False)
assert ids.dtype == np.int64 and ids.shape == (14232,)
assert np.array_equal(candidate.edge_id, ids) and np.array_equal(np.flatnonzero(mask), ids)
graph = {k: np.load(AG / 'graphs/full' / (k + '.npy'), mmap_mode='r')
for k in ('src', 'dst', 'edge_id', 'weights', 'signed_raw', 'nodes')}
assert np.array_equal(graph['nodes'], np.arange(166700, dtype=np.int32))
assert np.array_equal(graph['edge_id'], np.arange(25582938, dtype=np.int64))
assert np.array_equal(graph['src'][ids], candidate.source_neuron_idx)
assert np.array_equal(graph['dst'][ids], candidate.target_neuron_idx)
raw = np.load(raw_path, mmap_mode='r')
assert np.array_equal(raw[ids], candidate.raw_synapse_count)
assert np.array_equal(graph['signed_raw'][ids], raw[ids]), 'Original candidate sign must be +1'
assert np.all(graph['weights'][ids] > 0) and (candidate.plasticity_polarity == -1).all()
base, rhs_sha = old_base_candidate(raw[ids], ROOT / 'models/male-cns-lif/phase4c.py')
base_path = EXP / 'protocol/base-candidate.float32-mV.npy'
with base_path.open('xb') as f:
np.save(f, base, allow_pickle=False)
for stage in CFG['stages']:
delta = np.zeros(len(ids), np.float32) if stage == 'zero' else (-float(.25) * base).astype(np.float32)
path = EXP / 'overlays' / (stage + '.npz')
write_npz(path, edge_id=ids, plastic_delta_mv=delta)
save(EXP / 'overlays' / (stage + '.json'), dict(schema='phase4am-overlay-v1', overlay_name=stage,
overlay_sha256=digest(path), mask_path=str(mask_path), mask_sha256=digest(mask_path),
base_candidate_path=str(base_path), base_candidate_sha256=digest(base_path),
aj_model_dir=str(AJ_MODEL), base_rhs_ast_sha256=rhs_sha,
old_f32_expression_source_sha256=digest(ROOT / 'models/male-cns-lif/phase4c.py'),
training=False, fixed_for_whole_trial=True))
meta = pd.read_parquet(META).sort_values('neuron_idx').reset_index(drop=True)
assert np.array_equal(meta.neuron_idx.to_numpy(), graph['nodes'])
kc = np.flatnonzero(meta.annotation_class.eq('Kenyon_Cell')).astype(np.int32)
mbon = np.flatnonzero(meta.annotation_class.eq('MBON')).astype(np.int32)
assert len(kc) == 4064 and len(mbon) == 97
assert np.isin(candidate.source_neuron_idx, kc).all() and np.isin(candidate.target_neuron_idx, mbon).all()
down = pd.read_parquet(H / 'mappings/mbon-to-downstream-actual-edges.parquet')
assert np.array_equal(graph['src'][down.edge_id.to_numpy()], down.source_neuron_idx.to_numpy())
assert np.array_equal(graph['dst'][down.edge_id.to_numpy()], down.target_neuron_idx.to_numpy())
populations = dict(KC=kc, MBON=mbon,
mask_recipient_MBON=np.unique(candidate.target_neuron_idx.to_numpy(dtype=np.int32)),
DAN=np.flatnonzero(meta.annotation_class.eq('DAN')).astype(np.int32),
MBON_downstream=np.unique(down.target_neuron_idx.to_numpy(dtype=np.int32)))
# Exact observed superclass strings are checked; no inferred body identity.
role_labels = {'descending': ['descending_neuron', 'descending_neuron_tbc'],
'motor': ['vnc_motor', 'cb_motor']}
for name, labels in role_labels.items():
assert set(labels).issubset(set(meta.annotation_superclass.dropna().astype(str))), labels
populations[name] = np.flatnonzero(meta.annotation_superclass.isin(labels)).astype(np.int32)
write_npz(EXP / 'protocol/populations.npz', **populations)
save(EXP / 'protocol/static-audit.json', dict(candidate_edges=len(ids), mask_fixed=True,
old_base_rhs_ast_sha256=rhs_sha, populations={k: len(v) for k, v in populations.items()},
exact_descending_motor_superclass_labels=role_labels,
compartments={str(k): len(g) for k, g in candidate.groupby('target_compartment_verbatim')},
old_selected_odors=read(ROOT / 'experiments/phase4l-olfactory-grounding/odor-encoder/selection.json'),
source_mapping='Exact annotation_class/superclass and frozen actual-edge table; no inferred type/body IDs',
old_base_signed_positive=True, training=False))
save(EXP / 'protocol/prepared-hashes.json', [dict(path=p.relative_to(EXP).as_posix(), sha256=digest(p))
for folder in ('protocol', 'overlays') for p in sorted((EXP / folder).rglob('*'))
if p.is_file() and p.name != 'prepared-hashes.json'])
print('PREREGISTERED zero 144 then static25 144; no brain trajectories or training', flush=True)
if __name__ == '__main__':
main()