Seal Phase 4AM whole-brain plastic interface audit without learning claim

This commit is contained in:
Digital Drosophila Archive
2026-09-30 16:11:14 +08:00
parent 6d5f66bcc3
commit de61cf14b1
3051 changed files with 415090 additions and 13 deletions
+34 -13
View File
@@ -2,24 +2,45 @@
更新:2026-09-30。独立分支:`codex/lif-author-semantics-lab`。
## 最新结果
## 最近已封存结果
Phase 4AL 已封存:**PASS-CONDITIONAL-CREDIT-TRANSFER-AUDIT-NOT-LEARNING**。仍未达到“学习可用”,没有新增 learned candidate,也没有替换正式 reference/runtime。
Phase 4AM:**PASS-EXACT-WHOLEBRAIN-PLASTIC-INTERFACE-NOT-LEARNING**。
- 固定 D18 的 120 条主轨迹、24 次重复,全部 MBON 基线 events/counts/final V/g/ref 逐位复现。
- 全部 60 组气味对都有各自特有的 KC 与候选边,但完整 active-set overlap 仍明显。
- 一次固定 25% mask 减弱,在 120/120 主试验中改变了 MBON count 或首次 latency。它只是钳制上游的条件性诊断,不是学习、不是真实闭环反馈,也不是响应上界。
- 原有 14,232 条 mask 边保持不变,只覆盖 12 个 MBON;这次审计仍保留全部 97 个 MBON 及其 86,039 条入边。
- 29/29 模型合成测试通过;五组旧参考重新运行逐位一致;原 230,239 文件及完整性链 26 个根全部通过,无 mismatch。
独立建立 D18 whole-brain plastic-overlay 接口,不覆盖或替换旧 reference/runtime。
75/75 服务器单元测试通过;完整性链 28 个根运行前后全部通过,五组旧参考重新运行全部精确。
预注册 SHA-256:`465886b78ada08092c2c83de278844707499718977fb6dc6a7608391da0e5304`。
Phase 4AK 的 D18 表征验证 PASS 原样保留。1.8 ms 是工程时序假设,不是实测 APL 延迟;matched_energy 匹配预期而非每次实际输入数;旧 1212 条非 KC fast-APL 出边未被 graded 路径替代的限制仍存在。
- 零 delta 门完成:120 个固定主输入及 24 次技术重复,共 **144/144 与 Phase 4AK D18 精确一致**。
- 同一库存 static25 的 144 次闭环运行完成,24 次技术重复精确一致;真实反馈重新计算,不钳制源事件。
- static25 是原 float32 候选权重的 25% floor 经明确 SI 精度桥接,不是学习结果,也不声称等于 float64 基础权重的精确 25%。
- 120/120 主试验的 MBON、实际 downstream、descending、motor 事件序列及逐细胞计数有变化;12 个 mask 目标的计数变化为 119/120、事件变化为 120/120;KC 事件变化 120/120、计数变化 32/120。这不是每个细胞都变化,也不是学习或行为 PASS。
- 两阶段都不训练,未产生 learned candidate。zero/static25 阶段墙时分别约 1665.34/1471.04 秒;主试验最大已分配显存 526,523,392 bytes。
## 下一步
运行目录:`experiments/phase4am-wholebrain-plastic-interface/`。
[AM 结果解释](docs/progress/phase4am-interpretation.md) · [正式状态](registry/phase4am-wholebrain-plastic-interface/evidence/audit/final-status.json) · [预注册设计](models/male-cns-lif/wholebrain-plastic-interface-v1/PROTOCOL.md)
本轮排除了“这些候选边在固定回放中完全无法影响 MBON”的解释,但未证明气味特异记忆。下一关需单独预注册 whole-brain plastic-overlay:零更新必须精确复现 D18,反馈真实闭环,信用按实际 KC/DAN 与 compartment 记录;然后才检验独立 evaluation seeds 和严格对照下的关联记忆、保持。
## 前序结论保持不变
继续冻结 raw/base CSR/W_syn/sign、既有 APL 参数、eligibility-v2、14,232-edge mask 和所有已封存产物。不调参挽救结果,不接游戏、视觉、decoder、RL 或 Web。
Phase 4AL:**PASS-CONDITIONAL-CREDIT-TRANSFER-AUDIT-NOT-LEARNING**。
本轮实验 payload 1,336,493,035 bytes(约 1.34 GB)。所有正式文件有 SHA-256/manifest;大型轨迹仍在服务器,Git/本地小证据同步不等于全量异机备份。
固定 D18 的 120 条主轨迹及 24 次重复全部 MBON 基线逐位复现;60 组气味对都有各自特有的 KC/候选边。固定 25% 减弱在 120/120 主试验中改变了 MBON count 或首次 latency,但那是钳制源事件的条件性回放,不是真实全脑反馈、不代表气味特异记忆或响应上界。
[结果解释](docs/progress/phase4al-interpretation.md) · [正式状态](registry/phase4al-mb-credit-transfer/evidence/audit/final-status.json) · [60 组气味对](registry/phase4al-mb-credit-transfer/evidence/audit/pair-identities.json) · [封存校验](registry/phase4al-mb-credit-transfer/seal-verification.json) · [上一轮 D18 验证](docs/progress/phase4ak-interpretation.md)
14,232 条 mask 边、12 个 mask-recipient MBON 和全部 97 个 MBON 保留。
Phase 4AK D18 表征验证 PASS 原样保留。1.8 ms 为工程 APL 时序假设,不是实测延迟;matched_energy 匹配预期而非每次实际事件数;旧 1212 条非 KC fast-APL 出边未被 graded 路径替代的限制仍存在。
[AL 结果解释](docs/progress/phase4al-interpretation.md) · [AL 正式状态](registry/phase4al-mb-credit-transfer/evidence/audit/final-status.json) · [AK 结果解释](docs/progress/phase4ak-interpretation.md)
## 当前准备与学习边界
Phase 4AN 工程计划仍为 **UNREGISTERED**:32 calls / 11,074 ticks,拟比较精简报告运行及 checkpoint 连续性。实际脑运行数为 **0**。学习草案未登记,没有候选;这些工程测试不是条件化实验。
目标仍是“学习可以使用”,当前没有达到。接口验证或静态权重效果不能替代真实条件化。
后续须预注册固定 olfactory A/B、具体 DAN type/compartment、至少五个互不重叠训练种子流及独立 evaluation streams;保留原 eligibility-v2、人工 US 与实际 DAN 放电的明确区分,以及配对/控制、反转、延迟奖励、保持等功能验证。
继续冻结 raw/base CSR/W_syn/sign、既有 APL 参数、eligibility-v2、14,232-edge mask 和全部已封存产物。不调参挽救结果,不接游戏、视觉、decoder、RL 或 Web。
AM 已正式封存并在服务器发布 3,020 份小证据;本地已按发布收据逐项验收 3,040 个文件(含控制与清单文件)。Git 同步范围仅为源码、文档及小证据,须单独验证提交载荷。大型轨迹保留在服务器,小证据同步不等于全量异机备份。
模型 manifest SHA-256:`7edeb251ecbeac5a64805fefe171a0a0bf8bba2675919ef922cc1a329c203ea8`。
实验 manifest SHA-256:`9e24b682935a9b18e05db7a933080c5f63ddbeb8a0c85cc0df1cfe1d06d88ab4`。
正式状态 SHA-256:`18b12c832e156bd6e5ba950f48a49fb908c62104b91bb3e78213f523c8fdc8f9`。
+54
View File
@@ -0,0 +1,54 @@
# Phase 4AM — D18 全脑塑性权重接口
日期:2026-09-30。正式状态:`PASS-EXACT-WHOLEBRAIN-PLASTIC-INTERFACE-NOT-LEARNING`。
本轮通过的是固定权重接口、闭环运行与记录的一致性验证,不是学习或行为验证。实际运行和正式封存已完成;服务器发布了 3,020 份小证据,本地已按发布收据逐项验收 3,040 个文件(含控制与清单文件)。Git 发布范围仅为源码、文档及小证据。
## 已完成的固定门
- zero:120 个固定主输入及 24 次技术重复,共 144/144 与封存 Phase 4AK D18 精确一致;覆盖状态、事件、计数、延迟队列、请求接受及 APL generated/applied/pending 记录。
- static25:同一完整库存共 144 次闭环运行完成,24 次技术重复精确一致。每条轨迹的上游、反馈和目标发放都重新计算,没有沿用 AL 的钳制源事件。
- 五组旧 deterministic-v2 参考重新运行全部精确;28 个旧完整性根运行前后全部通过。旧参考回归不表示新 D18 与旧动力学等价。
- zero / static25 阶段墙时分别为 1665.339973549002 / 1471.0373302119988 秒。主试验报告的最大已分配显存为 526,523,392 bytes;不是全机内存或全部进程峰值。
每阶段统计样本仍为 120 个主试验,24 次重复不增加独立样本数。两种输入模式和两个原定 cohort 均保留;`novel_to_aj` 仅指相对于 AJ 新增,不宣称历史从未见过。`matched_energy` 仍匹配预期随机输入,不保证每次实际事件数相同。
## 静态干预的实际含义
候选 mask 保持 14,232 条边,目标为 12 个 MBON;报告同时覆盖全部 97 个 MBON。原 raw/base CSR、sign、W_syn、APL 参数、eligibility-v2 与 mask 均未改变。
static25 使用原 float32 候选 base 的 `-.25 * base_candidate_mv` floor,安装时仅对非零 delta 行按独立运算加入 `float64(delta32) * .001` SI 增量。它不是 float64 D18 基础权重的精确 25%,不是训练所得 delta,也不是最大功能效应上界。每个试验开始前固定 delta,试验内不更新权重。
以下比较均为 static25 相对于 zero,在全部 120 个主试验上的描述性结果:
| 群体 | 事件序列改变的试验 | 至少一个细胞计数改变的试验 |
|---|---:|---:|
| 全部 MBON | 120/120 | 120/120 |
| 实际 MBON downstream | 120/120 | 120/120 |
| descending | 120/120 | 120/120 |
| motor | 120/120 | 120/120 |
| 12 个 mask-recipient MBON | 120/120 | 119/120 |
| KC | 120/120 | 32/120 |
这些数值不是“每个细胞都改变”,也不必表示群体总 spike count 改变。它们说明固定候选边干预能在本模型的真实全脑反馈中影响发放;不能推出气味特异关联记忆、正确行为方向、感知或运动能力。AL 的非零条件回放使用不同精度干预并钳制反馈,因此不能充当本轮非零结果的严格算术 oracle。
## 未跨越的边界
D18 的 1.8 ms APL 延迟仍是工程时序假设,不是实测生理延迟。既有 1,212 条非 KC fast-APL 出边置零、而未由 graded 路径替代的限制未修正。早期 Brian 闭环对照共享 APL 组件,不是所有组件独立实现的 CPU 等价证明。本轮没有重新标定这些假设。
没有训练、没有 learned candidate、没有学习 PASS;不接游戏、视觉、decoder、RL 或 Web。条件化仍需单独预注册实际 cue/US、冻结 eligibility-v2、独立评估种子、未配对等控制及真实时间保持,不能把静态响应当作已获得记忆。
下一项 AN 目前仅有 **UNREGISTERED** 工程计划:32 calls、11,074 ticks,用于精简报告运行与 checkpoint 续跑的精确对照;实际脑运行数为 0。学习草案也未登记,没有由本轮结果自动解锁训练或产生候选。
## 证据与交付
[正式状态](../../registry/phase4am-wholebrain-plastic-interface/evidence/audit/final-status.json) · [科学汇总](../../registry/phase4am-wholebrain-plastic-interface/evidence/audit/scientific-summary.json) · [固定协议](../../models/male-cns-lif/wholebrain-plastic-interface-v1/PROTOCOL.md) · [发布收据](../../registry/phase4am-wholebrain-plastic-interface/publication-receipt.json)
- 预注册 SHA-256:`465886b78ada08092c2c83de278844707499718977fb6dc6a7608391da0e5304`
- 科学汇总 SHA-256:`03f229fc0768d38bb7c2a3c558dbd68c2c3a622cbf96b1b16aef2819b6b67b77`
- 正式状态 SHA-256:`18b12c832e156bd6e5ba950f48a49fb908c62104b91bb3e78213f523c8fdc8f9`
- 模型 manifest SHA-256:`7edeb251ecbeac5a64805fefe171a0a0bf8bba2675919ef922cc1a329c203ea8`
- 实验 manifest SHA-256:`9e24b682935a9b18e05db7a933080c5f63ddbeb8a0c85cc0df1cfe1d06d88ab4`
- 发布收据 SHA-256:`7bb7c8edc1d1c09e9c5aa37c0fb367431ee9b8afe83dbcaff0f3cec5d22017f7`
大型轨迹保留在服务器。小证据发布不等于全量异机备份;Git 暂存载荷及提交载荷须另外使用发布收据 SHA 校验,不能由本地下载成功推断远端 Git 已同步。
@@ -0,0 +1,28 @@
# Pre-registration engineering checks
No new brain trajectory or conditioning result existed during these repairs.
Only the new, unregistered AM code was changed; all prior models remained
read-only. The new experiment root was provisioned empty and owned by the
existing project user before preparation.
The first server-only unit test run had 74 tests: 73 passed, one failed
(`test_static25_repeat_and_single_validation`, copied-input SHA mismatch).
The local machine had not reproduced that failure. A direct synthetic probe
established the cause, rather than changing a tolerance or expected result:
- A temporary NPZ was overwritten with different, same-size (556-byte) data.
- Its device, inode, length, mtime_ns and ctime_ns were identical before/after.
- The fresh SHA changed from
`38219e908f1b500423c9fe1a70b6070103f878903c5f005c79e387fca8b449c4` to
`fa45373dd04bf5f9d574a5329d42f8259c99c70aa69b077673aaef8c95bf0a02`.
- The timestamp-keyed digest cache returned the former SHA for the latter
bytes. Both timestamps were `1790749632756475909` in the observed probe.
The new comparator was corrected to read fresh bytes for SHA verification and
to include content hashes in static cache identity. A deliberate same-stat,
same-length rewrite test guards this issue. No waiting/sleep workaround, relaxed
hash equality, modified old data, or scientific rerun is used to hide it.
This note is a human-readable preparation record, not a saved raw unit-test
transcript. The subsequent complete server test transcript is recorded during
formal preparation and must pass without skipped Torch compatibility tests.
@@ -0,0 +1,85 @@
# Phase 4AM — D18 whole-brain plastic interface
This is a separate, non-trained branch. All Phase 1–4AL files remain read-only.
The user authorized independent new-model dynamics hypothesis tests. No base
CSR, transmitter sign, W_syn, neuron threshold, APL calibration, eligibility-v2,
or 14,232-edge mask is changed. No game, decoder, RL, or visual input is used.
## Fixed test order and scope
1. All 120 sealed AK inputs and their 24 predeclared repeats run with exactly
zero plastic_delta. Compare every recorded state bit, event, count, delayed
edge queue, request acceptance, and APL generated/applied/pending sample
against AK. All must pass before any nonzero overlay runs.
2. The same complete input inventory runs with one fixed diagnostic overlay:
the original float32 eligibility-v2 floor, `-.25 * base_candidate_mv`.
All 14,232 mask edges are included; all other weights remain identical.
Twenty-four technical repeats must be exact. This is not learned memory.
All presynaptic events are recomputed by the whole brain, unlike AL's
clamped-source MBON replay. No outcome selects an odor, compartment, dose,
parameter, or number of training pairings.
3. Pure-function compatibility tests validate the frozen eligibility trace and
original additive apply_v2 rule. No reinforcement or weight update occurs
in any of these GPU trials. Fixed delta is installed only before tick zero.
Report both cohorts, both modes, all odors and all seeds. Technical repeats do
not increase the statistical sample. Matched-energy retains its inherited
meaning: expected stochastic input, not exactly matched realized event counts.
Simulation remains 100 ms, including its unadvanced delay/APL tail.
## Explicit precision bridge — a new interface assumption
The existing D18 brain uses float64 SI voltage weights. Frozen eligibility-v2
uses float32 mV deltas and float32 candidate base amplitudes. The adapter keeps
the original D18 base bytes and adds `float64(delta32) * float64(.001)` using
separate non-fused operations, only on nonzero delta rows. Zero delta must not
reconstruct the base through float32. Positive original mask weights must
remain positive. This is not a claim of bitwise nonzero equivalence to the old
float32 brain, nor of precisely 25% of float64 D18 amplitudes. The base candidate
is reproduced from the pinned original Phase 4C NumPy expression, not converted
back from the float64 brain. The mask and all units are recorded.
Only the pre-loop weight-install hook is inserted in an AST-derived copy of
the SHA-pinned AJ function. Its timestep loop AST and original CUDA operators
remain identical. The old module is not patched and its original __file__ is
not fabricated. Inherited AJ source metadata describes the parent; additional
AM adapter provenance explicitly describes the new overlay. The original spike
delay queue stores spike identities and reads fixed weights at arrival. No
mid-trial update or implicit weight-snapshot delay rule is introduced.
## Interpretation and next experiment boundary
Record MBON, KC, DAN, actual MBON downstream, descending and motor output
changes separately, as well as first divergence and recruited/lost KC cells.
Static transfer is neither associative acquisition nor a maximal functional
effect bound. A weak static response does not prove all sparse overlays fail.
The full-brain response is not compared with AL as a strict arithmetic oracle:
AL clamps feedback and its float64 0.75 multiplication is a different fixed
precision intervention. Any side-by-side descriptive result states both.
Conditioning must be separately preregistered. Keep the original 4L static
ODOR_A (4-ethylphenol) and ODOR_B (3-hexanone), reciprocal cue assignments,
type/compartment-specific US and frozen eligibility-v2. PAM/PPL1 alone never
defines valence. The original D scalar is an artificial unconditioned-signal
interface, not measured dopamine or the number of actually emitted DAN spikes.
Log requests, acceptance, and actual DAN spikes separately. Multiplying D by
actual accepted spikes would be a different explicitly registered hypothesis,
not an unnoticed repair of eligibility-v2. No such change is made here.
Later functional learning requires independent evaluation seeds, actual paired
and control trajectories, MBON and downstream specificity, reversal and real
time retention. Neither file validity, delta change nor a static response
completes the learning goal. This stage creates no learned candidate.
## Integrity
Exclusive-create outputs, a pre-outcome source/input/config manifest, fixed
trial inventory, unit-test records, complete per-trial recording hashes,
pre/post frozen integrity, and the five unchanged deterministic-v2 reference
trials are required. Partial outputs are preserved and never overwritten.
No queued ComfyUI job is evicted. Only the declared RTX 4090 is used. The old
references are regression checks of the old runtime, not proof of D18 biology.
The biological limitations and primary-paper evidence are inherited unchanged
from sealed AL EVIDENCE.md; this precision/interface implementation introduces
no new single-cell physiological measurement or universal dopamine rule.
@@ -0,0 +1,248 @@
"""One pre-loop overlay hook in the SHA-pinned AJ function; no old global patch.
run_gpu_overlay(case_dir, out_dir, build_root, overlay_file, overlay_manifest)
retains AJ's output/summary schema. overlay-audit.json and adapter-provenance.json
are mandatory additional evidence. The inherited source-audit.json describes
the unchanged AJ source only, NOT the complete Phase 4AM adapter semantics.
Delta is fixed during the whole trial; this interface never trains or updates
eligibility. The original CUDA arrival operator still samples current weights
at arrival, and no emission-time weight snapshot is introduced.
"""
from __future__ import annotations
import ast
import copy
import hashlib
import importlib.util
import json
from pathlib import Path
import sys
import numpy as np
import overlay
AJ_SHA256 = 'af1975ba5e5e700208c0a598d3cbe648a3cf10885c6231239b6e4b28f76d173b'
PINS = {
'apl-timing-lab-v1/gpu_timing.py': AJ_SHA256,
'apl-timing-lab-v1/timing_queue.py': '54df6d4818e2a0c26e96fb0aaf5d9b71cd964981706da937562d48af79aca14e',
'author-apl-lab-v2/gpu_apl.py': '69f5d893f47dafff4ef7c3186c3df0b9014666b32c8f4e943b57016bec92b18a',
'author-apl-lab-v2/legacy_apl_worker.py': '21ceec65fe42581dc55872010e0025d660e80358905f1cf4df1dadf341a3b291',
'author-runtime-lab-v1/gpu_backend.py': '03758d07572f4b44d272059d9308fac534268ad201b57bdd77d69fee95e67278',
'author-runtime-lab-v1/author_ext.cpp': '208a937d17bbb041b9bf6b25b89264ee566830b60609e58491b44583d8541f15',
'author-runtime-lab-v1/author_ext.cu': '669f166e18ce9a3f63fc723db8b0a8b74f7fa4757194b1bd65b4cf6008a7787e',
'author-fullgraph-lab-v1/oracle_full.py': 'd72003d98f0f1624b12126eff50bd361c43d888f4a64d90ba9247a58976f1961',
}
HOOK_NAME = '_phase4am_install_overlay'
HOOK_CODE = HOOK_NAME + '(weights, graph, apl_out_mask, upload, out_dir, source_provenance)'
_LOADED = {}
def _save(path, value):
with Path(path).open('x', encoding='utf-8') as stream:
json.dump(value, stream, ensure_ascii=False, sort_keys=True, indent=2, allow_nan=False)
stream.write('\n')
def verify_sources(aj_model_dir):
directory = Path(aj_model_dir).absolute()
overlay.require(directory.name == 'apl-timing-lab-v1', 'AJ must be loaded from its actual original model directory')
paths = {key: directory.parent / key for key in PINS}
for key, path in paths.items():
overlay.require(overlay.file_hash(path) == PINS[key], 'Sealed source SHA mismatch: ' + str(path))
return {key: {'path': str(paths[key]), 'sha256': value} for key, value in PINS.items()}
def _load_checked(name, path, expected):
path = Path(path).absolute()
data = path.read_bytes()
overlay.require(hashlib.sha256(data).hexdigest() == expected, 'Source changed before loading: ' + str(path))
if name in sys.modules:
existing = sys.modules[name]
overlay.require(_LOADED.get(name) == (path, expected, existing), 'Refusing an existing unverified module binding: ' + name)
return existing
spec = importlib.util.spec_from_file_location(name, path)
overlay.require(spec is not None and spec.loader is not None, 'No source loader')
module = importlib.util.module_from_spec(spec)
sys.modules[name] = module
try:
# Execute precisely the checked source bytes; do not write frozen pyc.
exec(compile(data, str(path), 'exec'), module.__dict__)
except BaseException:
sys.modules.pop(name, None)
raise
_LOADED[name] = (path, expected, module)
return module
def _dump(node):
return ast.dump(node, annotate_fields=True, include_attributes=False)
def derive_ast(source_bytes):
"""Pure AST adapter: one inserted Expr, every other original node unchanged."""
overlay.require(hashlib.sha256(source_bytes).hexdigest() == AJ_SHA256, 'Cannot derive from unpinned AJ source')
module = ast.parse(source_bytes)
matches = [node for node in module.body if isinstance(node, ast.FunctionDef) and node.name == 'run_gpu']
overlay.require(len(matches) == 1, 'Expected exactly one sealed AJ run_gpu')
original = matches[0]
adapted = copy.deepcopy(original)
tries = [node for node in adapted.body if isinstance(node, ast.Try)]
overlay.require(len(tries) == 1, 'Unexpected run_gpu try structure')
statements = tries[0].body
anchor = ast.parse('effective_hash = hashlib.sha256()').body[0]
positions = [i for i, node in enumerate(statements) if _dump(node) == _dump(anchor)]
overlay.require(len(positions) == 1, 'Effective-weight hash insertion anchor is not unique')
position = positions[0]
previous = ast.parse('if bool(np.any(apl_out_mask)):\n weights[upload(apl_out_mask, torch.bool)] = 0.0').body[0]
overlay.require(position > 0 and _dump(statements[position - 1]) == _dump(previous),
'Overlay hook must immediately follow frozen fast-APL zeroing')
hook = ast.copy_location(ast.parse(HOOK_CODE).body[0], statements[position])
statements.insert(position, hook)
tick_loops = lambda tree: [node for node in ast.walk(tree) if isinstance(node, ast.For) and
isinstance(node.target, ast.Name) and node.target.id == 'tick']
old_loops, new_loops = tick_loops(original), tick_loops(adapted)
overlay.require(len(old_loops) == len(new_loops) == 1 and _dump(old_loops[0]) == _dump(new_loops[0]),
'Entire simulation loop AST must remain identical')
restored = copy.deepcopy(adapted)
restored_try = next(node for node in restored.body if isinstance(node, ast.Try))
restored_try.body.pop(position)
overlay.require(_dump(restored) == _dump(original), 'Adapter changed more than its single pre-loop hook')
ast.fix_missing_locations(adapted)
sha = lambda value: hashlib.sha256(value.encode('utf-8')).hexdigest()
audit = {'original_run_ast_sha256': sha(_dump(original)), 'adapted_run_ast_sha256': sha(_dump(adapted)),
'loop_ast_sha256': sha(_dump(old_loops[0])), 'entire_tick_loop_ast_identical': True,
'only_ast_change': HOOK_CODE, 'inserted_ast_statements': 1,
'hook_after_apl_zero_before_effective_hash': True}
return adapted, audit
def compile_derived(aj_module, install_hook):
"""Compile only the derived function into a NEW namespace, never old globals."""
source_path = Path(aj_module.__file__).absolute()
function_ast, audit = derive_ast(source_path.read_bytes())
namespace = dict(aj_module.__dict__)
# Real adapter location, not AJ's __file__ masquerading as a new module.
namespace.update(__name__=__name__ + '.derived_run', __file__=str(Path(__file__).absolute()))
overlay.require(HOOK_NAME not in namespace, 'Hook name collides with sealed globals')
namespace[HOOK_NAME] = install_hook
tree = ast.fix_missing_locations(ast.Module(body=[function_ast], type_ignores=[]))
exec(compile(tree, str(Path(__file__).absolute()) + '::AST-derived-AJ-run_gpu', 'exec'), namespace)
audit.update(derived_namespace_file=namespace['__file__'], original_module_file=str(source_path),
original_module_globals_patched=False, fake_original_file_used=False)
return namespace['run_gpu'], audit
def _copy_input(source, destination, expected):
with Path(source).open('rb') as incoming, Path(destination).open('xb') as outgoing:
for block in iter(lambda: incoming.read(8 << 20), b''):
outgoing.write(block)
overlay.require(overlay.file_hash(destination) == expected, 'Copied input hash mismatch')
def run_gpu_overlay(case_dir, out_dir, build_root, overlay_file, overlay_manifest):
"""Fresh D18 constant-weight interface run; no learning/update inside trial.
This is the ONLY GPU entry point; importing/testing the module is CPU-only.
Output is exclusive. The caller still owns preregistration, case/graph and
frozen-mask authority, resource checks, budgets, and scientific gate choice.
Success requires the added complete adapter-provenance.json, not merely an
inherited AJ summary that may precede a failed final wrapper verification.
"""
case_dir, out_dir = Path(case_dir).absolute(), Path(out_dir).absolute()
overlay.require(not out_dir.exists(), 'Refusing an existing output directory')
overlay.require(sys.dont_write_bytecode, 'Invoke with python -B so inherited loaders cannot write frozen __pycache__')
own_sources = {'adapter': overlay.file_hash(__file__), 'overlay': overlay.file_hash(overlay.__file__)}
plan = overlay.load_overlay(overlay_file, overlay_manifest)
spec = json.loads((case_dir / 'spec.json').read_text(encoding='utf-8'))
overlay.require(type(spec.get('apl_delay_steps')) is int and spec['apl_delay_steps'] == 18,
'Phase 4AM interface requires fixed D18')
overlay.require(spec.get('training', False) is False and spec.get('learning', False) is False,
'This interface does not authorize a learning run')
aj_dir = Path(plan['metadata']['aj_model_dir'])
sources = verify_sources(aj_dir)
_load_checked('timing_queue', aj_dir / 'timing_queue.py', PINS['apl-timing-lab-v1/timing_queue.py'])
aj = _load_checked('phase4am_sealed_aj_gpu', aj_dir / 'gpu_timing.py', AJ_SHA256)
base_file = Path(spec['graph_dir']) / 'weights.npy'
base_file_sha = overlay.file_hash(base_file)
calls = []
def install(weights, graph, apl_out_mask, upload, output, inherited_provenance):
overlay.require(not calls, 'Plastic overlay hook must run exactly once')
mapping = overlay.map_installation(graph['weights'], graph['edge_id'], apl_out_mask, plan)
if len(graph['nodes']) == 166700:
overlay.require(int(apl_out_mask.sum()) == 5845, 'Frozen fullgraph fast-APL mask changed')
torch = aj.torch
overlay.require(weights.dtype == torch.float64 and weights.ndim == 1 and weights.numel() == len(graph['edge_id']),
'Runtime weight tensor must retain float64 SI edge order')
rows = mapping['rows']
if len(rows):
local = upload(rows, torch.int64)
# Separate eager f64 multiply and addition, never base->f32 roundtrip.
delta32 = plan['plastic_delta_mv'][plan['plastic_delta_mv'] != np.float32(0)]
delta_si = upload(delta32, torch.float64) * 0.001
weights[local] = weights[local] + delta_si
actual = weights[local].cpu().numpy().copy()
overlay.require(overlay.bit_equal(actual, mapping['expected_si']), 'GPU installation differs from independent CPU SI arithmetic')
# With zero delta no indexing assignment or +0 arithmetic happens.
base_raw_sha, expected_sha = overlay.expected_hashes(graph['weights'], apl_out_mask, mapping)
actual_hash = hashlib.sha256()
for start in range(0, weights.numel(), 1 << 20):
actual_hash.update(weights[start:start + (1 << 20)].cpu().numpy().astype('<f8', copy=False).tobytes())
effective_sha = actual_hash.hexdigest()
overlay.require(effective_sha == expected_sha, 'Full effective weight bytes differ from base+APLzero+sparse overlay')
overlay.verify_inputs(plan)
overlay.require(overlay.file_hash(base_file) == base_file_sha, 'Original graph base file changed')
_copy_input(plan['input']['overlay_file'], output / 'overlay-input.npz', plan['input']['overlay_sha256'])
_copy_input(plan['input']['manifest_file'], output / 'overlay-manifest.json', plan['input']['manifest_sha256'])
audit = {'schema': 'phase4am-overlay-audit-v1', 'complete': True,
'overlay_name': plan['metadata']['overlay_name'], 'input': plan['input'],
'arrays': {key: overlay.array_metadata(plan[key]) for key in
('edge_id', 'plastic_delta_mv', 'base_candidate_mv') if plan[key] is not None},
'candidate_count': len(plan['edge_id']), 'nonzero_delta_count': int(np.count_nonzero(plan['plastic_delta_mv'])),
**{key: mapping[key] for key in ('mapped_candidate_count', 'missing_candidate_count', 'installed_nonzero_count', 'apl_overlap_count')},
'delta_dtype': 'float32', 'delta_units': 'mV', 'state_dtype': 'float64', 'bridge': overlay.BRIDGE,
'installation_schedule': 'before tick 0; after fast APL zeroing',
'weights_updated_during_run': False, 'learning': False, 'zero_delta_no_write': True,
'frozen_mask_exact': True, 'bounds_pass': True, 'apl_fast_edges_zeroed': int(apl_out_mask.sum()),
'base_graph_files_modified': False, 'untouched_weights_bitwise_preserved': True,
'base_weights_file_sha256': base_file_sha, 'base_weights_raw_sha256': base_raw_sha,
'effective_weights_raw_sha256': effective_sha, 'expected_effective_weights_raw_sha256': expected_sha,
'copied_overlay_file': 'overlay-input.npz', 'copied_manifest_file': 'overlay-manifest.json',
'inherited_source_audit_scope': 'AJ source provenance only; AM overlay semantics are recorded separately',
'inherited_aj_source_provenance': inherited_provenance,
'static25_is_exact_fraction_of_float64_base_claimed': False,
'arrival_weight_sampling': 'arrival time; delta fixed for entire trial'}
_save(output / 'overlay-audit.json', audit)
calls.append(audit)
derived, ast_audit = compile_derived(aj, install)
try:
summary = derived(case_dir, out_dir, Path(build_root))
overlay.require(len(calls) == 1, 'Exactly one overlay installation was required')
overlay.verify_inputs(plan)
overlay.require(verify_sources(aj_dir) == sources and overlay.file_hash(base_file) == base_file_sha,
'Frozen sources or base graph changed during the run')
overlay.require(own_sources == {'adapter': overlay.file_hash(__file__), 'overlay': overlay.file_hash(overlay.__file__)},
'Adapter source changed during invocation')
overlay.require(summary.get('complete') is True and summary.get('effective_weights_raw_sha256') ==
calls[0]['effective_weights_raw_sha256'], 'Inherited run summary does not bind installed weights')
receipt = {'schema': 'phase4am-adapter-provenance-v1', 'complete': True,
'scope': 'constant sparse overlay installation only; no within-trial plasticity or learning',
'adapter_file': str(Path(__file__).absolute()), 'adapter_sha256': own_sources['adapter'],
'overlay_module_file': str(Path(overlay.__file__).absolute()), 'overlay_module_sha256': own_sources['overlay'],
'sealed_sources': sources, 'ast': ast_audit, 'installation_calls': len(calls),
'weights_updated_during_run': False, 'learning': False, 'apl_delay_steps': 18,
'original_module_globals_patched': False, 'delta_constant_for_entire_trial': True,
'inherited_source_audit_describes_AM_semantics': False,
'overlay_audit_sha256': overlay.file_hash(out_dir / 'overlay-audit.json'),
'inherited_summary_sha256': overlay.file_hash(out_dir / 'summary.json'),
'effective_weights_raw_sha256': calls[0]['effective_weights_raw_sha256']}
_save(out_dir / 'adapter-provenance.json', receipt)
return summary
except Exception as error:
if out_dir.is_dir() and not (out_dir / 'adapter-error.json').exists():
_save(out_dir / 'adapter-error.json', {'complete': False, 'type': type(error).__name__,
'message': str(error), 'installation_calls': len(calls), 'no_complete_adapter_receipt': True})
raise
@@ -0,0 +1,19 @@
85a3253ceb4e4c5d7bcf17b8b3294dbbf72bd1139415a892f6a90e8037785c89 PREPARATION.md
e03273995f4d5f1fc18d0af481374b8688ae735d83ae718895ffb741f8ac9399 PROTOCOL.md
3daabe771d3eef6c6189827c0ee5159b266c3a058e07da5781bb863be428aef9 adapter.py
4d64020af05e7fc9e535ac8532dd0e7b614b200f695ed8c6d486c6151de57175 comparison.py
c19f00c81f12c4c3503d3d557bd73d0722d4d3fed7279449408c67a89a6ffcf9 config.json
0fa2e0892c973fe70ecbc0613e3cb508c256b7745042f8936edf23dedc31d166 context.py
174fb8d14619189e74b095e77a6db18b14c93046dc431c0b55710a5aa2dd2e61 eligibility_bridge.py
b8e4fb59d4efa261a8615f1456bc2ad1f1822e941af558b27074b8c41dba15a1 finalize.py
7f891d0ba79b393c96e75fd2dee2eddc51e57d8213eaac2779703bc2c18712b4 overlay.py
40976f0ed0b01fbf275c245de0f0a907592d23f5ca4733293b41e1d011c7ee62 prepare.py
6a6fcf4cc64d27234ab69ce5a9dcdb8bbd8b3b4965c9c08c2f9d20747025e9e7 run_suite.py
b4f3cacf3ab60f70d63713d5bbc3e03658f38e357a47ef219b1050003176df01 summarize.py
a6274f338307a6961e514f565ab3e731051846caf62901e6843037755adc6fd8 test_comparison.py
113435c0f3528e3901e47421570a5f906d192826df9fc4ee600429a87ab904c5 test_eligibility_bridge.py
1c0536e0d0c27de6ab152ebb5aa0015ee31325417b17d3cfedc5f43bafa2ee79 test_overlay_adapter.py
351a0c2887d657e1942b849d768d7efe8c52c0c3c67d0cf4d55658549c3bfe32 test_workflow.py
f1453a8814339ec7860ef4dee20549cc811d13cefd7aee2d308ebdfd51a839ca test_workflow_identity.py
5b121184ec3e666814dd440356604e96520aecdd8902d5b68c7d61caa7f224c5 verify_frozen.py
7edeb251ecbeac5a64805fefe171a0a0bf8bba2675919ef922cc1a329c203ea8 manifest.json
@@ -0,0 +1,603 @@
"""Exact, read-only Phase 4AM output comparison; never a learning gate.
The sealed AJ comparator is loaded from verified bytes without modifying its
globals. Full-graph queue identities and refractory acceptance are additionally
reconstructed from actual events, including zero-weight edges. Only declared
performance fields may differ. New AM provenance is checked separately, not
mistaken for the inherited AJ implementation provenance.
"""
from __future__ import annotations
import argparse
import ast
import copy
from functools import lru_cache
import hashlib
import importlib.util
import json
import math
from pathlib import Path
import numpy as np
N = 166700
E = 25582938
K = 4064
CANDIDATES = 14232
STEPS = 1000
AJ_SHA = 'af1975ba5e5e700208c0a598d3cbe648a3cf10885c6231239b6e4b28f76d173b'
HELPER_SHA = '9010f070fba9b7c9cf2d86187ee2abc57f3ac606ebc08a42baad4f3922b51734'
CPP_SHA = '208a937d17bbb041b9bf6b25b89264ee566830b60609e58491b44583d8541f15'
CUDA_SHA = '669f166e18ce9a3f63fc723db8b0a8b74f7fa4757194b1bd65b4cf6008a7787e'
SEALED = {
'ag_gpu': '69f5d893f47dafff4ef7c3186c3df0b9014666b32c8f4e943b57016bec92b18a',
'ag_worker': '21ceec65fe42581dc55872010e0025d660e80358905f1cf4df1dadf341a3b291',
'ae_backend': '03758d07572f4b44d272059d9308fac534268ad201b57bdd77d69fee95e67278',
'af_queue': 'd72003d98f0f1624b12126eff50bd361c43d888f4a64d90ba9247a58976f1961',
}
ADAPTER_PINS = {
'apl-timing-lab-v1/gpu_timing.py': AJ_SHA,
'apl-timing-lab-v1/timing_queue.py': '54df6d4818e2a0c26e96fb0aaf5d9b71cd964981706da937562d48af79aca14e',
'author-apl-lab-v2/gpu_apl.py': SEALED['ag_gpu'],
'author-apl-lab-v2/legacy_apl_worker.py': SEALED['ag_worker'],
'author-runtime-lab-v1/gpu_backend.py': SEALED['ae_backend'],
'author-runtime-lab-v1/author_ext.cpp': CPP_SHA,
'author-runtime-lab-v1/author_ext.cu': CUDA_SHA,
'author-fullgraph-lab-v1/oracle_full.py': SEALED['af_queue'],
}
HOOK_CODE = '_phase4am_install_overlay(weights, graph, apl_out_mask, upload, out_dir, source_provenance)'
PERFORMANCE = frozenset(('wall_seconds', 'diagnostic_simulation_seconds', 'build_or_cache_seconds',
'peak_allocated_vram_bytes', 'peak_reserved_vram_bytes'))
BRIDGE = 'baseSI64 + (delta32 widened to float64) * float64(0.001); nonzero rows only'
SCHEDULE = 'before tick 0; after fast APL zeroing'
GRAPH_FIELDS = ('nodes', 'edge_id', 'src', 'dst', 'ptr', 'signed_raw', 'weights')
_WEIGHT_CACHE = {}
_BASE_RAW_CACHE = {}
def require(condition, message):
if not condition:
raise ValueError(message)
def _fingerprint(path):
path = Path(path).resolve()
stat = path.stat()
require(path.is_file(), 'Not a regular evidence file: ' + str(path))
return str(path), stat.st_dev, stat.st_ino, stat.st_size, stat.st_mtime_ns, stat.st_ctime_ns
def _digest_fingerprint(identity):
# Do not cache byte hashes by stat metadata. Same-size writes can share
# inode, mtime_ns and ctime_ns even on the actual server filesystem.
value = hashlib.sha256()
with Path(identity[0]).open('rb') as source:
for block in iter(lambda: source.read(8 << 20), b''):
value.update(block)
require(_fingerprint(identity[0]) == identity, 'Evidence changed while hashing')
return value.hexdigest()
def file_hash(path):
return _digest_fingerprint(_fingerprint(path))
def raw_hash(array):
return hashlib.sha256(np.ascontiguousarray(array).tobytes()).hexdigest()
@lru_cache(maxsize=2)
def _helper_from_bytes(identity):
require(file_hash(identity[0]) == HELPER_SHA, 'Sealed AJ comparator hash changed')
spec = importlib.util.spec_from_file_location('phase4am_readonly_sealed_aj_compare', identity[0])
module = importlib.util.module_from_spec(spec)
exec(compile(Path(identity[0]).read_bytes(), identity[0], 'exec'), module.__dict__)
return module
def _helper(used):
path = Path(__file__).resolve().parent.parent / 'apl-timing-lab-v1/compare_timing.py'
used.add(path)
sha = file_hash(path)
require(sha == HELPER_SHA, 'Sealed AJ comparator hash changed')
return _helper_from_bytes(_fingerprint(path) + (sha,))
def _json(path, used):
path = Path(path)
used.add(path)
def unique(pairs):
result = {}
for key, value in pairs:
require(key not in result, 'Duplicate JSON key: ' + key)
result[key] = value
return result
return json.loads(path.read_text(encoding='utf-8'), object_pairs_hook=unique,
parse_constant=lambda value: (_ for _ in ()).throw(ValueError('Nonfinite JSON: ' + value)))
def _npz(path, used):
path = Path(path)
used.add(path)
with np.load(path, allow_pickle=False) as data:
require(len(data.files) == len(set(data.files)), 'Duplicate NPZ key')
return {key: data[key].copy() for key in data.files}
@lru_cache(maxsize=2)
def _static_arrays(identities):
arrays = {Path(identity[0]).name: np.load(identity[0], mmap_mode='r', allow_pickle=False)
for identity in identities}
require(all(_fingerprint(identity[0]) == identity[:-1] and file_hash(identity[0]) == identity[-1]
for identity in identities), 'Static inputs changed while loading')
return arrays
def _load_case(case_dir, used):
spec = _json(case_dir / 'spec.json', used)
require(type(spec['steps']) is int and spec['steps'] == STEPS and spec['dt_ms'] == .1 and
spec['duration_ms'] == 100. and spec['record_history'] is False and
type(spec['apl_delay_steps']) is int and spec['apl_delay_steps'] == 18,
'Phase 4AM comparison requires the unchanged full 100-ms D18 case')
model = spec['model']
for key, value in (('synaptic_delay_ms', 1.8), ('refractory_ms', 2.2),
('w_syn_mv_per_anatomical_synapse', .275), ('resting_potential_mv', -52.),
('reset_potential_mv', -52.), ('threshold_mv', -45.)):
require(type(model[key]) in (int, float) and model[key] == value, 'Frozen model field changed: ' + key)
graph_dir, bundle_dir = Path(spec['graph_dir']), Path(spec['apl_bundle_dir'])
require(graph_dir.is_absolute() and bundle_dir.is_absolute(), 'Static input paths must be absolute')
paths = [graph_dir / (key + '.npy') for key in GRAPH_FIELDS]
paths += [bundle_dir / key for key in ('input_matrix.npy', 'output_matrix.npy', 'kc_globals.npy', 'apl_globals.npy')]
used.update(paths)
# Caches for parsed/derived immutable graph data are keyed by FRESH content
# SHA, not merely a filesystem timestamp. Re-read hashes on every call.
token = tuple(_fingerprint(p) + (file_hash(p),) for p in paths)
arrays = _static_arrays(token)
graph = {key: arrays[key + '.npy'] for key in GRAPH_FIELDS}
bundle = {key: arrays[key] for key in ('input_matrix.npy', 'output_matrix.npy', 'kc_globals.npy', 'apl_globals.npy')}
_validate_static(graph, bundle, token)
requests = _npz(case_dir / 'requests.npz', used)
require(set(requests) == {'tick', 'neuron_idx'}, 'Unexpected request arrays')
ticks, nodes = requests['tick'], requests['neuron_idx']
require(ticks.dtype == nodes.dtype == np.int32 and ticks.ndim == 1 and ticks.shape == nodes.shape and
np.all((ticks >= 0) & (ticks < STEPS)) and np.all((nodes >= 0) & (nodes < N)), 'Invalid sparse requests')
keys = ticks.astype(np.int64) * N + nodes
require(np.all(keys[1:] > keys[:-1]), 'Requests must be sorted unique; no silently deduplicated requests')
coeff_path = Path(spec['coefficients_path'])
require(coeff_path.is_absolute(), 'Coefficient path must be absolute')
coeff = _json(coeff_path, used)
for key in ('gd', 'c0', 'cg', 'cv', 'threshold', 'reset', 'seed_volt'):
require(type(coeff[key]) in (int, float) and math.isfinite(coeff[key]), 'Invalid author coefficient: ' + key)
require(coeff['threshold'] == model['threshold_mv'] * .001 and
coeff['reset'] == model['reset_potential_mv'] * .001 and coeff['seed_volt'] > coeff['threshold'],
'Author coefficient units/threshold mismatch')
input_hashes = {'spec.json': file_hash(case_dir / 'spec.json'),
'requests.npz': file_hash(case_dir / 'requests.npz'), 'base_weights.npy': file_hash(graph_dir / 'weights.npy'),
'coefficients.json': file_hash(coeff_path)}
if (case_dir / 'arrays.npz').exists():
used.add(case_dir / 'arrays.npz')
input_hashes['arrays.npz'] = file_hash(case_dir / 'arrays.npz')
return dict(spec=spec, graph=graph, bundle=bundle, token=token, input_hashes=input_hashes,
requested=list(zip(map(int, ticks), map(int, nodes))), graph_dir=graph_dir, bundle_dir=bundle_dir)
_VALIDATED_STATIC = set()
def _validate_static(graph, bundle, token):
if token in _VALIDATED_STATIC:
return
for key, dtype, shape in (('nodes', np.int32, (N,)), ('ptr', np.int64, (N + 1,)),
('edge_id', np.int64, (E,)), ('src', np.int32, (E,)), ('dst', np.int32, (E,)),
('signed_raw', np.int64, (E,)), ('weights', np.float64, (E,))):
require(graph[key].dtype == dtype and graph[key].shape == shape, 'Canonical graph schema changed: ' + key)
require(np.array_equal(graph['nodes'], np.arange(N, dtype=np.int32)), 'Global neuron identity changed')
ptr = graph['ptr']
require(ptr[0] == 0 and ptr[-1] == E and np.all(np.diff(ptr) >= 0), 'Invalid canonical CSR')
for start in range(0, E, 1 << 20):
stop = min(E, start + (1 << 20))
expected_ids = np.arange(start, stop, dtype=np.int64)
require(np.array_equal(graph['edge_id'][start:stop], expected_ids), 'Original edge identity changed')
require(np.array_equal(graph['src'][start:stop], np.searchsorted(ptr[1:], expected_ids, side='right')),
'CSR source order changed')
require(np.all((graph['dst'][start:stop] >= 0) & (graph['dst'][start:stop] < N)), 'Invalid edge targets')
original = graph['weights'][start:stop]
expected = graph['signed_raw'][start:stop] * (.275 * .001)
require(np.isfinite(original).all() and raw_hash(original) == raw_hash(expected), 'Original signed SI weights changed')
for name, dtype, shape in (('kc_globals.npy', np.int32, (K,)), ('apl_globals.npy', np.int32, (2,)),
('input_matrix.npy', np.float32, (2, N)), ('output_matrix.npy', np.float32, (2, K))):
a = bundle[name]
require(a.dtype == dtype and a.shape == shape and np.isfinite(a).all(), 'Invalid APL bundle ' + name)
if dtype == np.int32:
require(np.all((a >= 0) & (a < N)) and np.all(a[1:] > a[:-1]), 'Invalid APL/KC IDs')
else:
require(np.all(a >= 0), 'Negative normalized APL matrix')
require(not np.intersect1d(bundle['kc_globals.npy'], bundle['apl_globals.npy']).size, 'APL/KC overlap')
_VALIDATED_STATIC.add(token)
def _effective_hash(case, ids=None, delta=None):
"""Independent static bridge, cached per immutable graph/delta identity."""
key = (case['token'], None if ids is None else raw_hash(ids), None if delta is None else raw_hash(delta))
if key in _WEIGHT_CACHE:
return _WEIGHT_CACHE[key]
graph, apl = case['graph'], case['bundle']['apl_globals.npy']
baseline, effective = hashlib.sha256(), hashlib.sha256()
masked = 0
for start in range(0, len(graph['edge_id']), 1 << 20):
stop = min(len(graph['edge_id']), start + (1 << 20))
value = graph['weights'][start:stop].copy()
fast = np.isin(graph['src'][start:stop], apl)
masked += int(fast.sum())
value[fast] = np.float64(0)
baseline.update(value.astype('<f8', copy=False).tobytes())
if ids is not None:
lo, hi = np.searchsorted(ids, (start, stop))
ix, change = ids[lo:hi] - start, delta[lo:hi]
require(not fast[ix].any(), 'Plastic mask overlaps fast APL outputs')
nz = change != 0
value[ix[nz]] = np.add(value[ix[nz]], np.multiply(change[nz].astype(np.float64), np.float64(.001)))
require(np.isfinite(value[ix[nz]]).all() and np.all(value[ix[nz]] > 0), 'Static overlay changes candidate sign')
effective.update(value.astype('<f8', copy=False).tobytes())
result = (baseline.hexdigest(), effective.hexdigest(), masked)
_WEIGHT_CACHE[key] = result
return result
def _base_raw_hash(case):
key = case['token']
if key not in _BASE_RAW_CACHE:
h = hashlib.sha256()
values = case['graph']['weights']
for start in range(0, len(values), 1 << 20):
h.update(values[start:start + (1 << 20)].astype('<f8', copy=False).tobytes())
_BASE_RAW_CACHE[key] = h.hexdigest()
return _BASE_RAW_CACHE[key]
def _self_consistency(run, graph, requested, steps, helper, role, checks, differences):
"""Reconstruct every queue hash, request gate, and ref hash from events.
No edge weight, claimed queue digest, or stored PASS determines the result.
Expansion touches only the current delayed spike sources, not all edges.
"""
state, ptr, nodes = run['state'], graph['ptr'], graph['nodes']
n = len(nodes)
local = np.searchsorted(nodes, state['neuron_idx'])
require(np.all(local < n) and np.array_equal(nodes[local], state['neuron_idx']), 'Spike outside graph')
keys = state['step'].astype(np.int64) * N + state['neuron_idx']
require(np.all(keys[1:] > keys[:-1]), 'Duplicate or unordered actual events')
require(np.array_equal(np.bincount(local, minlength=n), state['counts']), 'Event counts do not match per-neuron counts')
require([(r['tick'], r['neuron_idx']) for r in run['requests']] == requested, 'Request input identity differs')
bounds = np.searchsorted(state['step'], np.arange(steps + 1))
rq_bounds = np.searchsorted([r['tick'] for r in run['requests']], np.arange(steps + 1))
last = np.full(n, -1_000_000_000, np.int64)
failures = {}
expected_due_total = expected_accepted_total = 0
for tick in range(steps):
fired = local[bounds[tick]:bounds[tick + 1]]
if np.any(tick - last[fired] < 22):
failures.setdefault('refractory_spike_violation', tick)
for row in run['requests'][rq_bounds[tick]:rq_bounds[tick + 1]]:
target = int(np.searchsorted(nodes, row['neuron_idx']))
require(target < n and nodes[target] == row['neuron_idx'], 'Request outside canonical graph')
accepted = tick - last[target] >= 22
if row['accepted'] != int(accepted) or row['rejected'] != int(not accepted):
failures.setdefault('request_refractory_gate', tick)
if bool(np.any(fired == target)) != bool(accepted):
failures.setdefault('request_actual_spike', tick)
last[fired] = tick
ref = np.maximum(22 - (tick - last), 0).astype(np.int32)
if helper.raw_hash(ref, '<i4') != run['hashes'][tick]['ref_sha256']:
failures.setdefault('all_tick_ref_hash', tick)
sources = local[bounds[tick - 18]:bounds[tick - 17]] if tick >= 18 else np.empty(0, np.int64)
pieces = [np.arange(ptr[source], ptr[source + 1], dtype=np.int64) for source in sources]
rows = np.concatenate(pieces) if pieces else np.empty(0, np.int64)
accepted = (ref[graph['dst'][rows]] == 0).astype(np.uint8)
expected = helper._queue_digest(tick, graph['edge_id'][rows], accepted)
expected_due_total += len(rows)
expected_accepted_total += int(accepted.sum())
if expected != run['queues'][tick]:
failures.setdefault('full_queue_edge_order_and_acceptance', tick)
if not np.array_equal(ref, state['ref']):
failures['final_ref_from_events'] = steps - 1
summary = run['summary']
if summary.get('arriving_edges') != expected_due_total or summary.get('accepted_arriving_edges') != expected_accepted_total:
failures['queue_summary_counts'] = 'mismatch'
checks[role + '.full_event_queue_request_accounting'] = not failures
if failures:
differences[role + '.independent_accounting'] = failures
def _overlay(run, case, used, zero_required=False):
folder = run['directory']
audit = _json(folder / 'overlay-audit.json', used)
require(audit['schema'] == 'phase4am-overlay-audit-v1' and audit['complete'] is True, 'Incomplete overlay audit')
source = audit['input']
inputs = {}
for label in ('overlay', 'manifest', 'mask', 'base_candidate'):
filename, sha = source[label + '_file'], source[label + '_sha256']
if filename is None:
require(label == 'base_candidate' and sha is None, 'Required overlay input absent')
inputs[label] = None
continue
path = Path(filename)
require(path.is_absolute(), 'Overlay provenance input must be absolute')
used.add(path)
require(file_hash(path) == sha, 'Overlay input hash mismatch: ' + label)
inputs[label] = path
manifest = _json(inputs['manifest'], used)
require(manifest['schema'] == 'phase4am-overlay-v1' and manifest['overlay_sha256'] == source['overlay_sha256'] and
manifest['mask_sha256'] == source['mask_sha256'] and Path(manifest['mask_path']).resolve() == inputs['mask'].resolve(),
'Overlay manifest linkage mismatch')
require(manifest['base_candidate_sha256'] == source['base_candidate_sha256'] and
(manifest['base_candidate_path'] is None if inputs['base_candidate'] is None else
Path(manifest['base_candidate_path']).resolve() == inputs['base_candidate'].resolve()), 'Candidate floor provenance mismatch')
require(Path(manifest['aj_model_dir']).resolve() == Path(__file__).resolve().parent.parent / 'apl-timing-lab-v1',
'Overlay is not bound to the sealed AJ model')
require(audit['copied_overlay_file'] == 'overlay-input.npz' and audit['copied_manifest_file'] == 'overlay-manifest.json',
'Unexpected copied overlay filenames')
for label, name in (('overlay', 'overlay-input.npz'), ('manifest', 'overlay-manifest.json')):
used.add(folder / name)
require(file_hash(folder / name) == source[label + '_sha256'], 'Copied input mismatch')
arrays = _npz(inputs['overlay'], used)
require(set(arrays) in ({'edge_id', 'plastic_delta_mv'}, {'edge_id', 'plastic_delta_mv', 'base_candidate_mv'}), 'Overlay NPZ schema changed')
ids, delta = arrays['edge_id'], arrays['plastic_delta_mv']
require(ids.dtype == np.int64 and ids.shape == (CANDIDATES,) and np.all(ids[1:] > ids[:-1]) and
np.all((ids >= 0) & (ids < len(case['graph']['edge_id']))), 'Invalid original plastic edge IDs')
mask = np.load(inputs['mask'], allow_pickle=False)
require(mask.dtype == np.int64 and mask.shape == ids.shape and np.array_equal(mask, ids), 'Frozen plastic mask identity mismatch')
require(delta.dtype == np.float32 and delta.shape == ids.shape and np.isfinite(delta).all() and np.all(delta <= 0), 'Invalid LTD delta')
audit_arrays = dict(arrays)
name = manifest['overlay_name']
require(name in ('zero', 'static25') and audit['overlay_name'] == name, 'Unknown overlay intervention')
if zero_required:
require(name == 'zero', 'Zero-regression cannot use a nonzero intervention')
if name == 'zero':
require(not np.any(delta != 0), 'Zero overlay contains nonzero delta')
else:
require(inputs['base_candidate'] is not None, 'Static25 requires its frozen float32 mV floor')
if inputs['base_candidate'] is not None:
base = np.load(inputs['base_candidate'], allow_pickle=False)
require(base.dtype == np.float32 and base.shape == ids.shape and np.isfinite(base).all() and np.all(base > 0), 'Invalid old float32 base')
floor = np.multiply(base, np.float32(-.25))
require(np.all(delta >= floor), 'Delta exceeds the existing depression bound')
if 'base_candidate_mv' in arrays:
require(arrays['base_candidate_mv'].dtype == np.float32 and raw_hash(arrays['base_candidate_mv']) == raw_hash(base), 'Embedded old base differs')
if name == 'static25':
require(raw_hash(delta) == raw_hash(floor), 'Static25 is not the declared old float32 floor')
audit_arrays['base_candidate_mv'] = base
else:
require('base_candidate_mv' not in arrays, 'Embedded unanchored old base is forbidden')
expected_arrays = {key: dict(dtype=str(value.dtype), shape=list(value.shape), raw_sha256=raw_hash(value))
for key, value in audit_arrays.items()}
require(audit['arrays'] == expected_arrays, 'Overlay array audit differs from actual bytes')
require(np.isin(case['graph']['src'][ids], case['bundle']['kc_globals.npy']).all() and
np.all(case['graph']['weights'][ids] > 0), 'Plastic edge source/sign changed')
baseline_sha, effective_sha, apl_count = _effective_hash(case, ids, delta)
graph = case['graph']
for key, value in {'candidate_count': CANDIDATES, 'nonzero_delta_count': int(np.count_nonzero(delta)),
'mapped_candidate_count': CANDIDATES, 'missing_candidate_count': 0,
'installed_nonzero_count': int(np.count_nonzero(delta)), 'delta_dtype': 'float32', 'delta_units': 'mV',
'state_dtype': 'float64', 'bridge': BRIDGE, 'installation_schedule': SCHEDULE,
'weights_updated_during_run': False, 'learning': False, 'zero_delta_no_write': True,
'frozen_mask_exact': True, 'bounds_pass': True, 'apl_overlap_count': 0,
'apl_fast_edges_zeroed': apl_count, 'base_graph_files_modified': False,
'untouched_weights_bitwise_preserved': True,
'base_weights_file_sha256': file_hash(case['graph_dir'] / 'weights.npy'),
'base_weights_raw_sha256': _base_raw_hash(case),
'effective_weights_raw_sha256': effective_sha, 'expected_effective_weights_raw_sha256': effective_sha}.items():
require(type(audit.get(key)) is type(value) and audit[key] == value, 'Overlay audit mismatch: ' + key)
require(run['summary']['effective_weights_raw_sha256'] == effective_sha, 'Installed effective-weight hash differs from independent bridge')
if zero_required:
require(effective_sha == baseline_sha, 'Zero overlay changed the baseline effective weights')
require(audit['inherited_aj_source_provenance'] == run['summary']['source_provenance'] and
audit['inherited_source_audit_scope'] == 'AJ source provenance only; AM overlay semantics are recorded separately' and
audit['static25_is_exact_fraction_of_float64_base_claimed'] is False and
audit['arrival_weight_sampling'] == 'arrival time; delta fixed for entire trial', 'Overlay semantic scope mismatch')
return audit
def _expected_ast(source_path, adapter_path):
"""Independently derive just the declared Expr insertion; no adapter import."""
tree = ast.parse(Path(source_path).read_bytes())
original = [node for node in tree.body if isinstance(node, ast.FunctionDef) and node.name == 'run_gpu']
require(len(original) == 1, 'Pinned AJ run_gpu not unique')
original = original[0]
adapted = copy.deepcopy(original)
tries = [node for node in adapted.body if isinstance(node, ast.Try)]
require(len(tries) == 1, 'Pinned run_gpu try not unique')
statements = tries[0].body
dump = lambda node: ast.dump(node, annotate_fields=True, include_attributes=False)
anchor = dump(ast.parse('effective_hash = hashlib.sha256()').body[0])
indices = [i for i, node in enumerate(statements) if dump(node) == anchor]
require(len(indices) == 1, 'Pinned hook anchor not unique')
index = indices[0]
previous = ast.parse('if bool(np.any(apl_out_mask)):\n weights[upload(apl_out_mask, torch.bool)] = 0.0').body[0]
require(index > 0 and dump(statements[index - 1]) == dump(previous), 'Hook is not immediately after APL zeroing')
statements.insert(index, ast.parse(HOOK_CODE).body[0])
loops = lambda node: [item for item in ast.walk(node) if isinstance(item, ast.For) and
isinstance(item.target, ast.Name) and item.target.id == 'tick']
before, after = loops(original), loops(adapted)
require(len(before) == len(after) == 1 and dump(before[0]) == dump(after[0]), 'Hook changed loop AST')
sha = lambda node: hashlib.sha256(dump(node).encode('utf-8')).hexdigest()
return dict(original_run_ast_sha256=sha(original), adapted_run_ast_sha256=sha(adapted),
loop_ast_sha256=sha(before[0]), entire_tick_loop_ast_identical=True, only_ast_change=HOOK_CODE,
inserted_ast_statements=1, hook_after_apl_zero_before_effective_hash=True,
derived_namespace_file=str(adapter_path.absolute()), original_module_file=str(Path(source_path).absolute()),
original_module_globals_patched=False, fake_original_file_used=False)
def _adapter_receipt(run, used):
folder = run['directory']
require(not (folder / 'adapter-error.json').exists(), 'Adapter recorded an error')
receipt = _json(folder / 'adapter-provenance.json', used)
require(receipt['schema'] == 'phase4am-adapter-provenance-v1' and receipt['complete'] is True,
'Completed inherited AJ summary is insufficient without completed AM receipt')
model = Path(__file__).resolve().parent
for label, filename in (('adapter', 'adapter.py'), ('overlay_module', 'overlay.py')):
path = Path(receipt[label + '_file'])
require(path.is_absolute() and path.resolve() == model / filename, 'Unexpected new wrapper source path')
used.add(path)
require(file_hash(path) == receipt[label + '_sha256'], 'Wrapper source hash changed')
source_rows = {}
for relative, sha in ADAPTER_PINS.items():
path = model.parent / relative
used.add(path)
require(file_hash(path) == sha, 'Frozen source changed: ' + relative)
source_rows[relative] = {'path': str(path.absolute()), 'sha256': sha}
require(receipt['sealed_sources'] == source_rows, 'Wrapper sealed-source inventory differs')
require(receipt['ast'] == _expected_ast(model.parent / 'apl-timing-lab-v1/gpu_timing.py', model / 'adapter.py'),
'Wrapper AST does not match independently reconstructed single pre-loop hook')
for key, value in dict(installation_calls=1, weights_updated_during_run=False, learning=False, apl_delay_steps=18,
original_module_globals_patched=False, delta_constant_for_entire_trial=True,
inherited_source_audit_describes_AM_semantics=False).items():
require(type(receipt.get(key)) is type(value) and receipt[key] == value, 'Wrapper receipt mismatch: ' + key)
require(receipt['scope'] == 'constant sparse overlay installation only; no within-trial plasticity or learning', 'Wrapper scope changed')
require(receipt['overlay_audit_sha256'] == file_hash(folder / 'overlay-audit.json') and
receipt['inherited_summary_sha256'] == file_hash(folder / 'summary.json') and
receipt['effective_weights_raw_sha256'] == run['summary']['effective_weights_raw_sha256'], 'Wrapper receipt not bound to output')
return {key: value for key, value in receipt.items() if key != 'inherited_summary_sha256'}
def _provenance(run, case, helper, used):
summary, component = run['summary'], run['component']
require(summary['input_sha256'] == case['input_hashes'], 'Actual case/weight/coefficient input hash differs')
require(summary['all_finite'] is True and summary['counts_match_sparse_events'] is True and
summary['learning'] is False and summary['state_units'] == 'SI volts', 'Invalid finite/state/learning declaration')
require(summary['sealed_ae_backend_sha256'] == SEALED['ae_backend'], 'Frozen backend changed')
build = summary['build']
require(build['sources'] == {'author_ext.cpp': CPP_SHA, 'author_ext.cu': CUDA_SHA} and
build['cuda_flags'] == ['-O2', '--fmad=false', '--ftz=false', '--prec-div=true', '--prec-sqrt=true'] and
build['arch_list'] == '8.9', 'Build arithmetic/source contract changed')
source = _json(run['directory'] / 'source-audit.json', used)
require(source == summary['source_provenance'] and source['sealed_source_sha256'] == SEALED and
source['candidate_sha256'] == AJ_SHA and source['module_globals_patched'] is False, 'Inherited AJ source audit changed')
diff = run['directory'] / 'sealed-gpu-source.diff'
used.add(diff)
require(file_hash(diff) == source['source_diff_sha256'], 'Inherited source diff hash mismatch')
bundle = case['bundle']
require(component['files_sha256'] == {name: file_hash(case['bundle_dir'] / name) for name in bundle} and
component['array_sha256'] == {name: raw_hash(value) for name, value in bundle.items()}, 'Actual APL bundle bytes changed')
require(component['ok'] is True and component['protocol'] == 'phase4ag-apl-v1' and
component['n_neurons'] == N and component['n_apl'] == 2 and component['n_kc'] == K and
component['dt_ms'] == .1, 'APL component dimensions/clock changed')
for key, value in (('decay_f32_bits', np.float32(math.exp(-.1 / 20.))), ('gain_f32_bits', np.float32(.01))):
require(component[key] == f'{int(value.view(np.uint32)):08x}', 'APL constant changed: ' + key)
env = component['environment']
require(env['cuda_matmul_allow_tf32'] is False and env['float32_matmul_precision'] == 'highest' and
env['precision_configuration_changed_by_component'] is False and '4090' in env['device_name'],
'GPU precision environment changed')
require(summary['apl_schedule'] == 'end, after threshold/reset and guarded arrivals, unconditional all KC' and
summary['apl_si_conversion'] == 'applied h32 -> float64 -> multiply float64 0.001 -> separate float64 subtraction',
'APL scheduling or SI conversion changed')
for key in PERFORMANCE:
require(type(summary[key]) in (int, float) and math.isfinite(summary[key]) and summary[key] >= 0, 'Invalid performance field: ' + key)
def _summary_pair(left, right, checks, differences):
a = {k: v for k, v in left.items() if k not in PERFORMANCE}
b = {k: v for k, v in right.items() if k not in PERFORMANCE}
checks['summary.nonperformance_exact'] = a == b
if a != b:
differences['summary'] = {key: {'left': a.get(key), 'right': b.get(key)}
for key in sorted(set(a) | set(b)) if a.get(key) != b.get(key) or (key in a) != (key in b)}
def compare_runs(case_dir, left, right, output_path=None, mode='zero'):
"""Zero-vs-sealed-AK or AM repeat equality; failures return a failed report.
``output_path=None`` is read-only. A provided report is created exclusively,
outside both run directories and the input case. Parent protocol must bind
the case and old manifests; this comparator reports exactly the bytes read.
"""
case_dir, left, right = (Path(p).resolve() for p in (case_dir, left, right))
if output_path is not None:
output_path = Path(output_path).resolve()
require(not output_path.exists(), 'Refusing existing comparison output')
require(not any(output_path.is_relative_to(p) for p in (case_dir, left, right)), 'Comparison must not write into input evidence')
checks, differences, used = {}, {}, {Path(__file__).resolve()}
report = dict(schema='phase4am-comparison-v1', mode=mode, case_dir=str(case_dir), left=str(left), right=str(right),
pass_all=False, learning_achieved=False, candidate_generated=False, tolerance=None,
scope='Exact declared trajectory and static overlay integrity; no physiological or learning PASS',
explicit_exclusions=sorted(PERFORMANCE), independent_cpu_wholebrain_oracle_claim=False)
try:
require(mode in ('zero', 'repeat', 'self'), 'Unknown comparison mode')
require((left == right) == (mode == 'self'), 'Only explicit single-run validation may use one directory')
helper = _helper(used)
case = _load_case(case_dir, used)
spec, graph = case['spec'], case['graph']
n, edges, steps = len(graph['nodes']), len(graph['edge_id']), spec['steps']
sides = ((left, 'left_gpu'),) if mode == 'self' else ((left, 'left_gpu'), (right, 'right_gpu'))
runs = [helper._load_run(path, role, n, edges, steps, False, spec['name'], 18, used, checks)
for path, role in sides]
for role, run in zip(('left_gpu', 'right_gpu'), runs):
_provenance(run, case, helper, used)
require(all(np.isfinite(a).all() for a in run['state'].values()), 'Nonfinite final state/events')
_self_consistency(run, graph, case['requested'], steps, helper, role, checks, differences)
helper._timing_sequence_checks(run['apl']['inhibition'], run['apl']['applied'], run['pending'], 18, role, checks, differences)
helper._timing_metadata_checks(run, role, 18, steps, checks)
require(not (run['directory'] / 'first-failure-state.npz').exists(), 'Recorded first numerical failure exists')
if mode != 'self':
helper._pair_outputs(*runs, checks, differences, n, steps, False)
require(runs[0]['timing'] == runs[1]['timing'], 'APL timing metadata differs')
_summary_pair(runs[0]['summary'], runs[1]['summary'], checks, differences)
baseline_sha, _, apl_count = _effective_hash(case)
for run in runs:
require(run['summary']['apl_fast_edges_zeroed'] == apl_count and run['summary']['kc_targets_present'] == K,
'Fast APL or KC coverage changed')
if mode == 'zero':
require(not (left / 'overlay-audit.json').exists(), 'Zero reference must be the unwrapped sealed AK run')
require(runs[0]['summary']['effective_weights_raw_sha256'] == baseline_sha, 'Sealed reference effective weights changed')
audit = _overlay(runs[1], case, used, zero_required=True)
_adapter_receipt(runs[1], used)
report['overlay_name'] = audit['overlay_name']
elif mode == 'repeat':
a, b = [_overlay(run, case, used) for run in runs]
require(a == b, 'Repeated overlay provenance/identity differs')
receipts = [_adapter_receipt(run, used) for run in runs]
require(receipts[0] == receipts[1], 'Repeated wrapper provenance differs beyond bound walltime-bearing summary')
report['overlay_name'] = a['overlay_name']
else:
report['overlay_name'] = _overlay(runs[0], case, used)['overlay_name']
_adapter_receipt(runs[0], used)
report['scope'] = 'Single-run event/queue/input/static-overlay self-consistency; no repeat, equivalence, physiology or learning PASS'
checks['input_overlay_and_source_provenance'] = True
report.update(nodes=n, edges=edges, steps=steps, apl_delay_steps=18,
full_queue_reconstructed=True, total_spikes=len(runs[0]['state']['step']))
except Exception as error:
report['error'] = {'type': type(error).__name__, 'message': str(error)}
manifest = []
try:
for path in sorted(used):
manifest.append(dict(path=str(path.resolve()), bytes=path.stat().st_size, sha256=file_hash(path)))
except Exception as error:
report['read_manifest_error'] = {'type': type(error).__name__, 'message': str(error)}
report.update(checks={key: bool(value) for key, value in checks.items()}, differences=differences,
read_manifest=manifest, failed_checks=sorted(key for key, value in checks.items() if not value))
report['pass_all'] = bool(checks) and all(checks.values()) and 'error' not in report and 'read_manifest_error' not in report
if output_path is not None:
output_path.parent.mkdir(parents=True, exist_ok=True)
with output_path.open('x', encoding='utf-8') as target:
json.dump(report, target, indent=2, sort_keys=True, allow_nan=False)
target.write('\n')
return report
def validate_run(case_dir, output_dir, output_path=None):
"""Single-run static-overlay integrity only; not numerical equivalence."""
return compare_runs(case_dir, output_dir, output_dir, output_path, mode='self')
if __name__ == '__main__':
parser = argparse.ArgumentParser(description=__doc__)
parser.add_argument('--case', required=True)
parser.add_argument('--left', required=True)
parser.add_argument('--right', required=True)
parser.add_argument('--output', required=True)
parser.add_argument('--mode', choices=('zero', 'repeat', 'self'), required=True)
args = parser.parse_args()
result = compare_runs(args.case, args.left, args.right, args.output, args.mode)
print(json.dumps({'pass_all': result['pass_all'], 'failed_checks': result['failed_checks'], 'error': result.get('error')}, allow_nan=False))
raise SystemExit(0 if result['pass_all'] else 1)
@@ -0,0 +1,22 @@
{
"phase": "4AM",
"purpose": "Exact D18 trial-boundary plastic-overlay interface and closed-loop transfer gate",
"neurons": 166700,
"edges": 25582938,
"candidate_edges": 14232,
"primary_trials": 120,
"technical_repeats": 24,
"steps": 1000,
"dt_ms": 0.1,
"apl_delay_steps": 18,
"stages": ["zero", "static25"],
"max_fractional_depression": 0.25,
"virtual_gate_tick": 900,
"gpu_uuid": "GPU-79f3a85d-adce-7833-7003-6488140ca596",
"output_budget_bytes": 17179869184,
"training": false,
"candidate_generation": false,
"static_test_is_learning": false,
"precision_bridge": "base float64 SI plus separate float64(delta float32 mV) times 0.001; zero rows untouched",
"future_learning": "Original frozen eligibility-v2 and additive trial-boundary update; artificial scalar D remains separate from actual DAN events"
}
@@ -0,0 +1,115 @@
"""New branch only. Old files are hash-anchored read-only inputs."""
import hashlib
import importlib.util
import json
import sys
from pathlib import Path
sys.dont_write_bytecode = True
ROOT = Path('/data/digital-drosophila')
MODEL = Path(__file__).resolve().parent
EXP = ROOT / 'experiments/phase4am-wholebrain-plastic-interface'
AK = ROOT / 'experiments/phase4ak-apl-timing-validation'
AL = ROOT / 'experiments/phase4al-mb-credit-transfer'
AL_MODEL = ROOT / 'models/male-cns-lif/mb-credit-transfer-audit-v1'
AJ_MODEL = ROOT / 'models/male-cns-lif/apl-timing-lab-v1'
AG = ROOT / 'experiments/phase4ag-author-apl-r2'
H = ROOT / 'experiments/phase4h-dopamine-plasticity'
META = ROOT / 'datasets/male-cns-v1.0/processed/neuron-only/neuron-index/unified-metadata.parquet'
CFG = json.loads((MODEL / 'config.json').read_text(encoding='utf-8'))
PINS = {
'models/male-cns-lif/mb-credit-transfer-audit-v1/context.py': '1626873baa224fab5d427a1fab1d6f840f14814152914ac4c2d6aa7a4f0bb1f6',
'models/male-cns-lif/mb-credit-transfer-audit-v1/manifest.json': '72e4b4e2c53c258939ca355f31eeba2cd6381e126a61efeea651d8bac8df5328',
'experiments/phase4al-mb-credit-transfer/manifest.json': 'a22de7d85cbfe760070ff55f5666e74475a3335c63bbd37b41241a94be7e3eea',
'experiments/phase4al-mb-credit-transfer/audit/final-status.json': 'ec846137531d3bea357f57364857b5de5ca2381a01aac3ebb1b7ade79059209e',
'models/male-cns-lif/apl-timing-lab-v1/gpu_timing.py': 'af1975ba5e5e700208c0a598d3cbe648a3cf10885c6231239b6e4b28f76d173b',
'models/male-cns-lif/apl-timing-lab-v1/compare_timing.py': '9010f070fba9b7c9cf2d86187ee2abc57f3ac606ebc08a42baad4f3922b51734',
'models/male-cns-lif/phase4c.py': '5ec83a132deb8ba20e62dab485537c2414016fe2fece546198d61c0668d75b6b',
'models/male-cns-lif/mb-physiology-v1/phase4j.py': 'abb4574da85f00bd9ef61024c65993ef81d42651ff8d8d63c15dd69c6222471e',
'experiments/phase4h-dopamine-plasticity/plastic-mask/plastic-edge-candidates.parquet': 'e5075ee3e5a0edf3a4d197453847163cc295b254f21c67203159bba204b12a76',
'experiments/phase4h-dopamine-plasticity/plastic-mask/plastic-edge-ids.int64.npy': '8b0fb6eb2e6c31da4d17dc20d890aa3f367e514f05642de5bad6b42a1611c05b',
'experiments/phase4h-dopamine-plasticity/plastic-mask/plastic-edge-mask.bool.npy': 'e8b7a439f07eae6e36729d6577a2c5e4a4c7aa4b15e97fc5266d7278db9e150e',
'datasets/male-cns-v1.0/processed/neuron-only/neuron-index/unified-metadata.parquet': '922af16846a065c3dbfca7c11146b83ca217fcbd7392edc745f444a04eae8c63'
}
def digest(path):
h = hashlib.sha256()
with Path(path).open('rb') as f:
for block in iter(lambda: f.read(8 << 20), b''):
h.update(block)
return h.hexdigest()
def read(path):
return json.loads(Path(path).read_text(encoding='utf-8'))
def save(path, value):
path = Path(path); path.parent.mkdir(parents=True, exist_ok=True)
with path.open('x', encoding='utf-8') as f:
json.dump(value, f, indent=2, ensure_ascii=False, allow_nan=False)
f.write('\n')
def write_npz(path, **values):
import numpy as np
with Path(path).open('xb') as f:
np.savez_compressed(f, **values)
def load_module(name, path, expected_hash):
data = Path(path).read_bytes()
assert hashlib.sha256(data).hexdigest() == expected_hash, str(path)
spec = importlib.util.spec_from_file_location(name, path)
module = importlib.util.module_from_spec(spec)
sys.modules[name] = module
exec(compile(data, str(path), 'exec'), module.__dict__)
return module
def sources():
return {p.relative_to(MODEL).as_posix(): digest(p) for p in sorted(MODEL.rglob('*'))
if p.is_file() and '__pycache__' not in p.parts and p.name not in ('manifest.json', 'checksums.sha256')}
def integrity():
old = load_module('sealed_al_context_am', AL_MODEL / 'context.py',
PINS['models/male-cns-lif/mb-credit-transfer-audit-v1/context.py'])
result = old.integrity()
sys.path.insert(0, str(ROOT / 'models/male-cns-lif/terminal-scope-diagnostic-v1'))
from diagnostic import manifest_check
for path in (AL_MODEL, AL):
result[path.relative_to(ROOT).as_posix()] = manifest_check(path, digest)
assert all(row['pass'] for row in result.values())
return result
def check(full=False):
reg = read(EXP / 'protocol/preregistered.json')
assert reg['sources'] == sources() and reg['config'] == CFG
for row in reg['inputs'] if full else []:
assert digest(ROOT / row['path']) == row['sha256'], row['path']
for row in read(EXP / 'protocol/prepared-hashes.json'):
assert digest(EXP / row['path']) == row['sha256'], row['path']
return reg
def bit_equal(a, b):
return a.dtype == b.dtype and a.shape == b.shape and a.tobytes() == b.tobytes()
def budget():
size = sum(p.stat().st_size for p in EXP.rglob('*') if p.is_file())
assert size < CFG['output_budget_bytes'], 'Output budget exceeded; stop and preserve all partials'
return size
def seal(root):
rows = [dict(path=p.relative_to(root).as_posix(), 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', encoding='utf-8') as f:
for row in rows:
f.write(row['sha256'] + ' ' + row['path'] + '\n')
f.write(digest(root / 'manifest.json') + ' manifest.json\n')
@@ -0,0 +1,285 @@
"""Pure Phase 4J eligibility adapter; no brain run, training, or artifact writes.
D is the original artificial command scalar. Actual DAN request acceptance and
spikes are separate evidence and MUST NOT silently replace D here. All input
arrays remain unchanged. Returned arrays own their storage and are read-only.
The NumPy trace backend is a candidate compatibility implementation; only an
explicit comparison with the Torch backend establishes Torch bitwise agreement.
"""
from __future__ import annotations
import ast
from dataclasses import dataclass
import hashlib
import math
from pathlib import Path
from types import MappingProxyType, SimpleNamespace
from typing import Any
import numpy as np
PHASE4J_SHA256 = "abb4574da85f00bd9ef61024c65993ef81d42651ff8d8d63c15dd69c6222471e"
DT_MS = 0.1
TAU_MS = 100.0
TRACE_CAP = 1.0
ETA_MV = 0.00275
FLOOR_FRACTION = 0.25
POLARITY = -1
COMPARTMENTS = ("B2B'2a", "a1", "y2a'1", "y5B'2a")
FIXED_GATES = MappingProxyType({"negative_us_before_cs_delta_exact_zero": True,
"plus_1000_to_zero_ratio_strict_upper": 0.01,
"off_compartment_delta_exact_unchanged": True,
"zero_d_and_frozen_delta_exact_unchanged": True})
_TRACE_EXPRESSION = (
"kc_trace.mul_(trace_decay).add_(spikes[self.kc_gpu].to(torch.float32))"
".clamp_max_(1.0)"
)
def _require(condition: bool, message: str) -> None:
if not condition:
raise ValueError(message)
def _readonly(array: np.ndarray) -> np.ndarray:
result = np.array(array, copy=True, order="C")
result.setflags(write=False)
return result
def bit_equal(left: np.ndarray, right: np.ndarray) -> bool:
a, b = np.asarray(left), np.asarray(right)
return a.dtype == b.dtype and a.shape == b.shape and a.tobytes() == b.tobytes()
def _integer(value: Any, name: str, minimum: int) -> int:
_require(isinstance(value, (int, np.integer)) and not isinstance(value, (bool, np.bool_)),
f"{name} must be an integer")
_require(int(value) >= minimum, f"{name} is below {minimum}")
return int(value)
def _array(value: Any, dtype: Any, name: str) -> np.ndarray:
result = np.asarray(value)
_require(result.ndim == 1 and result.dtype == np.dtype(dtype),
f"{name} must be a one-dimensional {np.dtype(dtype)} array")
return result
def _kc_array(kc: np.ndarray, n_neurons: int) -> np.ndarray:
kc = _array(kc, np.int32, "kc")
_require(len(kc) > 0 and np.all((kc >= 0) & (kc < n_neurons)), "KC IDs out of range or empty")
_require(np.all(kc[1:] > kc[:-1]), "KC IDs must be canonical sorted unique global IDs")
return kc
def _load_original(source: str | Path) -> tuple[Any, Any, dict[str, str]]:
"""Verify the entire frozen source, then execute ONLY one function AST.
Old imports, globals, class initialization and main are never executed.
The trace expression is also checked against the exact frozen expression.
"""
raw = Path(source).read_bytes()
actual_sha = hashlib.sha256(raw).hexdigest()
_require(actual_sha == PHASE4J_SHA256, "frozen Phase 4J source SHA256 mismatch")
tree = ast.parse(raw.decode("utf-8"), filename=str(source))
functions = [node for node in tree.body if isinstance(node, ast.FunctionDef) and node.name == "apply_v2"]
_require(len(functions) == 1, "frozen apply_v2 AST is missing or ambiguous")
function = functions[0]
classes = [node for node in tree.body if isinstance(node, ast.ClassDef) and node.name == "APLSimulator"]
runs = [node for cls in classes for node in cls.body
if isinstance(node, ast.FunctionDef) and node.name == "run"]
expected = ast.parse(_TRACE_EXPRESSION).body[0]
expected_dump = ast.dump(expected, include_attributes=False)
expressions = [node for run in runs for node in ast.walk(run)
if isinstance(node, ast.Expr) and ast.dump(node, include_attributes=False) == expected_dump]
_require(len(expressions) == 1, "frozen Torch trace expression is missing or ambiguous")
module = ast.Module(body=[function], type_ignores=[])
namespace = {"np": np, "Validator": object, "Any": Any}
exec(compile(module, str(source) + "::apply_v2-only", "exec"), namespace)
trace_code = compile(ast.Module(body=[expressions[0]], type_ignores=[]),
str(source) + "::trace-expression-only", "exec")
evidence = dict(source_sha256=actual_sha,
apply_v2_ast_sha256=hashlib.sha256(ast.dump(function, include_attributes=False).encode()).hexdigest(),
trace_expression_ast_sha256=hashlib.sha256(expected_dump.encode()).hexdigest())
return namespace["apply_v2"], trace_code, evidence
@dataclass(frozen=True)
class TraceResult:
command_steps: np.ndarray
snapshots: np.ndarray
final: np.ndarray
audit: dict[str, Any]
@property
def last_command_trace(self) -> np.ndarray:
"""Original runtime's last scheduled-US snapshot, or zero without US."""
return _readonly(self.snapshots[-1] if len(self.snapshots) else np.zeros_like(self.final))
def trace_from_events(step: np.ndarray, neuron_idx: np.ndarray, kc: np.ndarray,
steps: int, command_steps: Any, *, phase4j_source: str | Path,
backend: str = "numpy", n_neurons: int = 166700) -> TraceResult:
"""Replay actual sparse spikes; snapshot AFTER the current tick's spike.
One Boolean spike per global neuron/tick, including refractory ticks as
recorded by the caller. This function does not reconstruct brain dynamics,
infer missing events, or apply any refractory guard to eligibility.
"""
_, trace_code, evidence = _load_original(phase4j_source)
steps = _integer(steps, "steps", 1)
n_neurons = _integer(n_neurons, "n_neurons", 1)
kc = _kc_array(kc, n_neurons)
step = _array(step, np.int32, "step")
neuron_idx = _array(neuron_idx, np.int32, "neuron_idx")
_require(len(step) == len(neuron_idx), "event columns have different lengths")
_require(np.all((step >= 0) & (step < steps)), "event tick outside trial")
_require(np.all((neuron_idx >= 0) & (neuron_idx < n_neurons)), "event neuron outside graph")
_require(np.all((step[1:] > step[:-1]) |
((step[1:] == step[:-1]) & (neuron_idx[1:] > neuron_idx[:-1]))),
"events must be sorted by tick/global ID and unique")
commands = np.asarray(command_steps)
_require(commands.ndim == 1, "command_steps must be one-dimensional")
if commands.size == 0:
commands = np.empty(0, np.int64)
_require(commands.ndim == 1 and commands.dtype.kind in "iu", "command_steps must be integers")
_require(np.all((commands >= 0) & (commands < steps)), "command tick outside trial")
_require(np.all(commands[1:] > commands[:-1]), "command_steps must be sorted unique")
commands = commands.astype(np.int64, copy=True)
_require(backend in ("numpy", "torch"), "backend must be numpy or torch")
lookup = np.full(n_neurons, -1, np.int32)
lookup[kc] = np.arange(len(kc), dtype=np.int32)
local = lookup[neuron_idx]
keep = local >= 0
ticks, local = step[keep], local[keep]
snapshots = np.empty((len(commands), len(kc)), np.float32)
decay = math.exp(-DT_MS / TAU_MS)
command_lookup = {int(t): i for i, t in enumerate(commands)}
cursor = 0
torch_version = None
if backend == "numpy":
trace = np.zeros(len(kc), np.float32)
spike_values = np.zeros(len(kc), np.float32)
else:
try:
import torch
except ImportError as exc:
raise RuntimeError("Torch CPU reference unavailable; compatibility is not established") from exc
torch_version = str(torch.__version__)
trace = torch.zeros(len(kc), dtype=torch.float32, device="cpu")
spike_values = torch.zeros(len(kc), dtype=torch.bool, device="cpu")
environment = dict(torch=torch, kc_trace=trace, trace_decay=decay,
spikes=spike_values,
self=SimpleNamespace(kc_gpu=torch.arange(len(kc), dtype=torch.int64)))
for tick in range(steps):
end = cursor
while end < len(ticks) and ticks[end] == tick:
end += 1
if backend == "numpy":
spike_values.fill(0)
spike_values[local[cursor:end]] = 1
# Separate float32 operations; never power-jump across empty ticks.
np.multiply(trace, np.float32(decay), out=trace)
np.add(trace, spike_values, out=trace)
np.minimum(trace, np.float32(TRACE_CAP), out=trace)
if tick in command_lookup:
snapshots[command_lookup[tick]] = trace
else:
spike_values.zero_()
if end > cursor:
spike_values[torch.from_numpy(local[cursor:end].astype(np.int64, copy=True))] = True
exec(trace_code, environment)
if tick in command_lookup:
snapshots[command_lookup[tick]] = trace.numpy()
cursor = end
final = trace if backend == "numpy" else trace.numpy()
audit = dict(evidence, backend=backend, torch_version=torch_version, numpy_version=str(np.__version__),
steps=steps, kc_count=len(kc), actual_kc_events=int(keep.sum()),
command_count=len(commands), dt_ms=DT_MS, trace_tau_ms=TAU_MS,
trace_cap=TRACE_CAP, decay_python_float=decay,
decay_float32_bits=int(np.asarray(np.float32(decay)).view(np.uint32)),
sampling="after_current_tick_spike", interval_skip_optimization=False,
torch_numpy_bitwise_comparison_performed=False,
d_semantics="artificial scheduled command; not measured DAN activity",
actual_dan_activity_used_to_gate=False, brain_dynamics_executed=False,
training_executed=False, learning_pass_claimed=False)
return TraceResult(_readonly(commands), _readonly(snapshots), _readonly(final), audit)
class _Column:
"""Small immutable-array interface consumed by the frozen function."""
def __init__(self, values: np.ndarray):
self.values = values
def to_numpy(self, dtype: Any = None) -> np.ndarray:
return self.values.astype(dtype, copy=True) if dtype is not None else self.values.copy()
def astype(self, dtype: Any) -> "_Column":
return _Column(self.values.astype(dtype))
def apply_eligibility(trace: np.ndarray, kc: np.ndarray, candidate_sources: np.ndarray,
candidate_compartments: np.ndarray, compartment: str,
delta: np.ndarray, base_candidate: np.ndarray, *, d: float,
frozen: bool = False, phase4j_source: str | Path,
n_neurons: int = 166700) -> tuple[np.ndarray, dict[str, Any]]:
"""Apply the SHA-pinned original apply_v2 AST to candidate-aligned arrays.
delta/base_candidate are ORIGINAL float32 mV values, not SI or reconstructed
float64 D18 weights. Candidate row identity and the complete 14,232-edge mask
are verified by the coordinator; a small synthetic subset is allowed here.
Existing overlays must already obey the original floor and canonical +0.
No input is clipped, repaired, reordered, or mutated.
"""
original, _, evidence = _load_original(phase4j_source)
n_neurons = _integer(n_neurons, "n_neurons", 1)
kc = _kc_array(kc, n_neurons)
trace = _array(trace, np.float32, "trace")
sources = _array(candidate_sources, np.int32, "candidate_sources")
delta = _array(delta, np.float32, "delta")
base = _array(base_candidate, np.float32, "base_candidate")
compartments = np.asarray(candidate_compartments)
_require(compartments.ndim == 1 and compartments.dtype.kind == "U", "candidate_compartments must be Unicode strings")
_require(len(trace) == len(kc) and np.all(np.isfinite(trace)) and np.all((trace >= 0) & (trace <= TRACE_CAP)),
"trace must match KC IDs and lie in [0,1]")
_require(len(delta) == len(base) == len(sources) == len(compartments), "candidate columns have different lengths")
_require(np.all(np.isin(sources, kc)), "all candidate sources must be canonical KCs")
_require(compartment in COMPARTMENTS and np.all(np.isin(compartments, COMPARTMENTS)),
"unrecognized exact frozen compartment")
_require(isinstance(d, (float, int, np.floating, np.integer)) and not isinstance(d, (bool, np.bool_))
and np.isfinite(d) and float(d) in (0.0, 1.0), "D must be the fixed artificial scalar 0 or 1")
_require(isinstance(frozen, (bool, np.bool_)), "frozen must be Boolean")
_require(np.all(np.isfinite(base)) and np.all(base > 0), "original candidate base must be finite positive float32 mV")
lower = -FLOOR_FRACTION * base
_require(np.all(np.isfinite(delta)) and np.all((delta >= lower) & (delta <= 0)), "delta violates original frozen floor")
_require(not np.any((delta == 0) & np.signbit(delta)), "delta zero must be canonical +0 for exact identity")
validator = SimpleNamespace(n=n_neurons, kc=kc.copy(), base_candidate=base.copy(),
cand={"source_neuron_idx": _Column(sources.copy()),
"target_compartment_verbatim": _Column(compartments.copy())})
config = {"eligibility_v2": {"eta_effective_mv": ETA_MV,
"max_fractional_depression": FLOOR_FRACTION}}
if frozen:
result = delta.copy()
original_report = None
else:
result, original_report = original(validator, trace.copy(), compartment, float(d), delta.copy(), config)
selected = compartments == compartment
_require(result.dtype == np.float32 and np.all(np.isfinite(result)), "original update returned invalid values")
_require(bit_equal(result[~selected], delta[~selected]), "off-compartment delta changed")
if frozen or float(d) == 0:
_require(bit_equal(result, delta), "zero-D/frozen identity failed")
_require(np.all((result >= lower) & (result <= 0)), "original result violates frozen floor")
report = dict(evidence, original_apply_v2_executed=not bool(frozen), original_report=original_report,
candidate_count=len(delta), selected_compartment=compartment,
selected_candidate_count=int(selected.sum()), d_command=float(d), frozen=bool(frozen),
actual_changed_edges=int(np.count_nonzero(result != delta)),
off_compartment_exact_unchanged=True, numpy_version=str(np.__version__),
eta_effective_mv=ETA_MV, polarity=POLARITY, floor_fraction=FLOOR_FRACTION,
delta_units="mV", delta_dtype="float32", original_base_units="mV",
complete_mask_identity_verified_by_this_function=False,
actual_dan_activity_used_to_gate=False,
d_semantics="artificial scheduled command; not measured DAN activity",
brain_dynamics_executed=False, training_executed=False, learning_pass_claimed=False)
return _readonly(result), report
@@ -0,0 +1,36 @@
"""Seal interface evidence; never promote static transfer to learned memory."""
import yaml
from context import ROOT, MODEL, EXP, read, save, digest, check, integrity, budget, seal
def main():
check(full=True)
from summarize import run
result = run(verify_only=True)
refs = read(EXP / 'regression/frozen-five.json')
names = [r['name'] for r in yaml.safe_load((ROOT / 'models/male-cns-lif/deterministic-runtime-v2/phase4p.yaml').read_text())['reference_trials']]
assert len(names) == len(set(names)) == 5
assert refs['pass_all'] is True and [r['trial'] for r in refs['trials']] == names
assert all(set(r['exact']) == {'step', 'neuron_idx', 'counts', 'v', 'g'} and
all(v is True for v in r['exact'].values()) for r in refs['trials'])
old = integrity(); save(EXP / 'regression/old-integrity-after.json', old)
final = dict(status=result['status'], zero_overlay_exact=True, static25_repeat_exact=True,
primary_trials_per_stage=120, repeats_per_stage=24, old_integrity_pass=all(r['pass'] for r in old.values()),
frozen_five_reference_pass=True, frozen_eligibility_and_mask_unchanged=True,
base_weights_unchanged=True, training=False, learned_candidate=False,
scientific_summary_sha256=digest(EXP / 'audit/scientific-summary.json'),
payload_bytes_before_manifest=budget(), next_required='Separately preregister finite olfactory paired/control conditioning; no automatic learning PASS')
save(EXP / 'audit/final-status.json', final)
with (EXP / 'REPORT.md').open('x', encoding='utf-8') as f:
f.write('# Phase 4AM — whole-brain plastic interface\n\nStatus: `' + result['status'] + '`.\n\n')
f.write('All 144 zero-overlay runs reproduce sealed AK D18 exactly. All 120 fixed-overlay primary runs and 24 repeats are retained.\n')
f.write('The fixed overlay is the original float32 25% floor, added through the declared float64 SI bridge. No training occurred.\n\n')
for name, block in result['blocks'].items():
f.write('- ' + name + ': ' + '; '.join(pop + ' event changes ' + str(v['trials_event_change']) + '/30' for pop, v in block['populations'].items()) + '.\n')
f.write('\nOld artifacts and five deterministic-v2 references pass integrity/regression. This does not complete the learning goal.\n')
check(full=True); seal(MODEL); seal(EXP)
print(final['status'], flush=True)
if __name__ == '__main__':
main()
@@ -0,0 +1,95 @@
{
"root": "/data/digital-drosophila/models/male-cns-lif/wholebrain-plastic-interface-v1",
"files": [
{
"path": "PREPARATION.md",
"bytes": 1625,
"sha256": "85a3253ceb4e4c5d7bcf17b8b3294dbbf72bd1139415a892f6a90e8037785c89"
},
{
"path": "PROTOCOL.md",
"bytes": 5223,
"sha256": "e03273995f4d5f1fc18d0af481374b8688ae735d83ae718895ffb741f8ac9399"
},
{
"path": "adapter.py",
"bytes": 15690,
"sha256": "3daabe771d3eef6c6189827c0ee5159b266c3a058e07da5781bb863be428aef9"
},
{
"path": "comparison.py",
"bytes": 37000,
"sha256": "4d64020af05e7fc9e535ac8532dd0e7b614b200f695ed8c6d486c6151de57175"
},
{
"path": "config.json",
"bytes": 848,
"sha256": "c19f00c81f12c4c3503d3d557bd73d0722d4d3fed7279449408c67a89a6ffcf9"
},
{
"path": "context.py",
"bytes": 5444,
"sha256": "0fa2e0892c973fe70ecbc0613e3cb508c256b7745042f8936edf23dedc31d166"
},
{
"path": "eligibility_bridge.py",
"bytes": 15196,
"sha256": "174fb8d14619189e74b095e77a6db18b14c93046dc431c0b55710a5aa2dd2e61"
},
{
"path": "finalize.py",
"bytes": 2472,
"sha256": "b8e4fb59d4efa261a8615f1456bc2ad1f1822e941af558b27074b8c41dba15a1"
},
{
"path": "overlay.py",
"bytes": 11355,
"sha256": "7f891d0ba79b393c96e75fd2dee2eddc51e57d8213eaac2779703bc2c18712b4"
},
{
"path": "prepare.py",
"bytes": 9824,
"sha256": "40976f0ed0b01fbf275c245de0f0a907592d23f5ca4733293b41e1d011c7ee62"
},
{
"path": "run_suite.py",
"bytes": 6857,
"sha256": "6a6fcf4cc64d27234ab69ce5a9dcdb8bbd8b3b4965c9c08c2f9d20747025e9e7"
},
{
"path": "summarize.py",
"bytes": 6359,
"sha256": "b4f3cacf3ab60f70d63713d5bbc3e03658f38e357a47ef219b1050003176df01"
},
{
"path": "test_comparison.py",
"bytes": 22896,
"sha256": "a6274f338307a6961e514f565ab3e731051846caf62901e6843037755adc6fd8"
},
{
"path": "test_eligibility_bridge.py",
"bytes": 12900,
"sha256": "113435c0f3528e3901e47421570a5f906d192826df9fc4ee600429a87ab904c5"
},
{
"path": "test_overlay_adapter.py",
"bytes": 14389,
"sha256": "1c0536e0d0c27de6ab152ebb5aa0015ee31325417b17d3cfedc5f43bafa2ee79"
},
{
"path": "test_workflow.py",
"bytes": 2485,
"sha256": "351a0c2887d657e1942b849d768d7efe8c52c0c3c67d0cf4d55658549c3bfe32"
},
{
"path": "test_workflow_identity.py",
"bytes": 11771,
"sha256": "f1453a8814339ec7860ef4dee20549cc811d13cefd7aee2d308ebdfd51a839ca"
},
{
"path": "verify_frozen.py",
"bytes": 2383,
"sha256": "5b121184ec3e666814dd440356604e96520aecdd8902d5b68c7d61caa7f224c5"
}
]
}
@@ -0,0 +1,222 @@
"""Read-only sparse plastic-overlay validation and independent SI arithmetic.
This module does not calculate eligibility, generate learning updates, simulate
neurons, or alter a graph. File loading enforces the complete frozen 14,232-row
candidate identity; the array helpers also accept small synthetic identities.
The externally anchored manifest is a provenance input, not its own authority.
"""
from __future__ import annotations
import hashlib
import json
from pathlib import Path
import re
import numpy as np
CANDIDATE_COUNT = 14232
EDGE_COUNT = 25582938
SCHEMA = 'phase4am-overlay-v1'
BRIDGE = 'baseSI64 + (delta32 widened to float64) * float64(0.001); nonzero rows only'
def require(ok, message):
if not ok:
raise ValueError(message)
def file_hash(path):
digest = hashlib.sha256()
with Path(path).open('rb') as source:
for block in iter(lambda: source.read(8 << 20), b''):
digest.update(block)
return digest.hexdigest()
def raw_hash(value):
require(isinstance(value, np.ndarray), 'Raw hash requires an ndarray')
dtype = value.dtype.newbyteorder('<')
return hashlib.sha256(np.ascontiguousarray(value, dtype=dtype).tobytes()).hexdigest()
def bit_equal(first, second):
return (isinstance(first, np.ndarray) and isinstance(second, np.ndarray) and
first.dtype == second.dtype and first.shape == second.shape and
first.tobytes(order='C') == second.tobytes(order='C'))
def _vector(value, dtype, name, size=None):
require(isinstance(value, np.ndarray) and value.dtype == np.dtype(dtype) and value.ndim == 1,
name + ' requires exact ' + dtype + ' vector; no implicit conversion')
require(size is None or value.shape == (size,), name + ' length differs')
return value
def _ids(value, name):
_vector(value, 'int64', name)
require(np.all((value >= 0) & (value < EDGE_COUNT)) and np.all(value[1:] > value[:-1]),
name + ' must be sorted unique frozen-range global edge IDs')
return value
def _owned(value):
result = np.array(value, copy=True, order='C')
result.flags.writeable = False
return result
def validate_arrays(edge_id, plastic_delta_mv, mask_edge_id, base_candidate_mv=None):
"""Validate/copy arrays; small masks are permitted only for pure unit helpers.
The production file loader separately insists on CANDIDATE_COUNT. Every
nonzero delta needs the original, positive float32 base in legacy mV.
Its bound is the frozen float32 expression -0.25 * base_candidate, NOT
a fraction recomputed from the author's float64 SI runtime weights.
"""
ids, mask = _ids(edge_id, 'edge_id'), _ids(mask_edge_id, 'mask_edge_id')
delta = _vector(plastic_delta_mv, 'float32', 'plastic_delta_mv', len(ids))
require(len(ids) > 0 and bit_equal(ids, mask), 'Candidate IDs must equal the complete anchored mask in order')
require(np.isfinite(delta).all() and np.all(delta <= np.float32(0)), 'Delta must be finite, nonpositive float32 mV')
base = None
if base_candidate_mv is not None:
base = _vector(base_candidate_mv, 'float32', 'base_candidate_mv', len(ids))
require(np.isfinite(base).all() and np.all(base > np.float32(0)), 'Original candidate base must be finite, positive float32 mV')
lower = np.multiply(np.float32(-.25), base)
require(np.all(delta >= lower), 'Delta exceeds the frozen original-float32 -25% bound')
else:
require(not np.any(delta != np.float32(0)), 'Nonzero delta requires the authoritative original float32 base')
return {'edge_id': _owned(ids), 'plastic_delta_mv': _owned(delta),
'base_candidate_mv': None if base is None else _owned(base)}
def _checked_file(manifest, path_key, hash_key):
path = Path(manifest[path_key])
expected = manifest[hash_key]
require(path.is_absolute() and path.is_file(), 'Missing absolute input: ' + path_key)
require(isinstance(expected, str) and re.fullmatch('[0-9a-f]{64}', expected) is not None,
'Malformed SHA256: ' + hash_key)
require(file_hash(path) == expected, 'Input SHA256 mismatch: ' + path_key)
return path
def load_overlay(overlay_file, overlay_manifest):
"""Load immutable, hash-bound production inputs without importing Torch.
Manifest keys: schema, overlay_name (zero/static25), overlay_sha256,
mask_path/mask_sha256, base_candidate_path/base_candidate_sha256 (both
null only for zero), aj_model_dir. Extra provenance fields are retained
in the copied original manifest, not treated as executable instructions.
NPZ keys: edge_id, plastic_delta_mv; optional base_candidate_mv must be
bit-identical to the authoritative external .npy, never a replacement.
"""
overlay_file, manifest_file = Path(overlay_file).absolute(), Path(overlay_manifest).absolute()
require(overlay_file.is_file() and manifest_file.is_file(), 'Missing overlay or manifest')
manifest_bytes = manifest_file.read_bytes()
manifest_sha = hashlib.sha256(manifest_bytes).hexdigest()
metadata = json.loads(manifest_bytes.decode('utf-8'))
required = {'schema', 'overlay_name', 'overlay_sha256', 'mask_path', 'mask_sha256',
'base_candidate_path', 'base_candidate_sha256', 'aj_model_dir'}
require(isinstance(metadata, dict) and required <= metadata.keys(), 'Incomplete overlay manifest')
require(metadata['schema'] == SCHEMA and metadata['overlay_name'] in ('zero', 'static25'), 'Unregistered interface overlay kind')
require(file_hash(overlay_file) == metadata['overlay_sha256'], 'Overlay file SHA256 mismatch')
aj_dir = Path(metadata['aj_model_dir'])
require(aj_dir.is_absolute() and aj_dir.is_dir(), 'aj_model_dir must name the real sealed AJ directory')
mask_path = _checked_file(metadata, 'mask_path', 'mask_sha256')
mask = np.load(mask_path, allow_pickle=False)
_ids(mask, 'authoritative mask')
require(mask.shape == (CANDIDATE_COUNT,), 'Frozen mask must contain exactly 14,232 candidates')
base_path, base = None, None
if metadata['base_candidate_path'] is None:
require(metadata['base_candidate_sha256'] is None, 'Absent base needs a null base hash')
else:
base_path = _checked_file(metadata, 'base_candidate_path', 'base_candidate_sha256')
base = np.load(base_path, allow_pickle=False)
with np.load(overlay_file, allow_pickle=False) as archive:
require({'edge_id', 'plastic_delta_mv'} <= set(archive.files) <=
{'edge_id', 'plastic_delta_mv', 'base_candidate_mv'}, 'Unexpected overlay NPZ schema')
values = validate_arrays(archive['edge_id'], archive['plastic_delta_mv'], mask, base)
if 'base_candidate_mv' in archive.files:
require(base is not None and bit_equal(archive['base_candidate_mv'], base),
'Embedded base is not the authoritative external original float32 base')
delta = values['plastic_delta_mv']
if metadata['overlay_name'] == 'zero':
require(not np.any(delta != 0), 'Named zero overlay is not zero')
else:
require(base is not None and bit_equal(delta, np.multiply(np.float32(-.25), base)),
'static25 must exactly equal the original float32 floor, not 25% of float64 runtime base')
values.update(metadata=metadata, input={
'overlay_file': str(overlay_file), 'overlay_sha256': metadata['overlay_sha256'],
'manifest_file': str(manifest_file), 'manifest_sha256': manifest_sha,
'mask_file': str(mask_path), 'mask_sha256': metadata['mask_sha256'],
'base_candidate_file': None if base_path is None else str(base_path),
'base_candidate_sha256': metadata['base_candidate_sha256']})
verify_inputs(values)
return values
def verify_inputs(plan):
for name in ('overlay', 'manifest', 'mask', 'base_candidate'):
path, expected = plan['input'][name + '_file'], plan['input'][name + '_sha256']
require((path is None and expected is None) or (path is not None and file_hash(path) == expected),
'Overlay input changed: ' + name)
def map_installation(base_si, graph_edge_id, apl_out_mask, plan):
"""Return sparse nonzero installation rows and independently computed values.
Missing zero-delta mask members are permitted in a small fixture. Missing
nonzero members fail closed. APL/candidate overlap is always rejected.
Neither base nor any caller array is changed. Zero delta has no write row.
"""
ids = _ids(graph_edge_id, 'graph_edge_id')
base = _vector(base_si, 'float64', 'base_si', len(ids))
apl = _vector(apl_out_mask, 'bool', 'apl_out_mask', len(ids))
require(np.isfinite(base).all(), 'Nonfinite graph SI base')
candidates = plan['edge_id']
delta = plan['plastic_delta_mv']
rows = np.searchsorted(ids, candidates)
present = rows < len(ids)
present[present] &= ids[rows[present]] == candidates[present]
nonzero = delta != np.float32(0)
require(not np.any(nonzero & ~present), 'A nonzero plastic candidate is absent from this graph')
mapped = rows[present]
require(not np.any(apl[mapped]), 'Plastic candidate overlaps the frozen fast-APL output mask')
require(np.all(base[mapped] > np.float64(0)), 'Candidate graph SI base must remain positive')
selected = rows[nonzero].astype(np.int64)
delta_si = np.multiply(delta[nonzero].astype(np.float64), np.float64(.001))
expected = np.add(base[selected], delta_si)
require(np.isfinite(expected).all() and np.all(expected > 0), 'Overlay would change a candidate sign or create nonfinite weights')
return {'rows': _owned(selected), 'delta_si': _owned(delta_si), 'expected_si': _owned(expected),
'mapped_candidate_count': int(present.sum()), 'missing_candidate_count': int((~present).sum()),
'installed_nonzero_count': int(nonzero.sum()), 'apl_overlap_count': 0}
def materialize_numpy(base_si, graph_edge_id, apl_out_mask, plan):
"""Independent pure CPU reference; used by unit tests, not a brain run."""
mapping = map_installation(base_si, graph_edge_id, apl_out_mask, plan)
result = np.array(base_si, copy=True, order='C')
result[apl_out_mask] = np.float64(0)
result[mapping['rows']] = mapping['expected_si']
return result, mapping
def expected_hashes(base_si, apl_out_mask, mapping, chunk_elements=1 << 20):
"""Bounded-memory base/effective raw hashes, preserving untouched signed bits."""
require(type(chunk_elements) is int and chunk_elements > 0, 'Invalid hash chunk size')
base_hash, effective_hash = hashlib.sha256(), hashlib.sha256()
rows = mapping['rows']
for start in range(0, len(base_si), chunk_elements):
stop = min(start + chunk_elements, len(base_si))
original = np.ascontiguousarray(base_si[start:stop], dtype='<f8')
base_hash.update(original.tobytes())
effective = original.copy()
effective[apl_out_mask[start:stop]] = np.float64(0)
lo, hi = np.searchsorted(rows, (start, stop))
effective[rows[lo:hi] - start] = mapping['expected_si'][lo:hi]
effective_hash.update(effective.tobytes())
return base_hash.hexdigest(), effective_hash.hexdigest()
def array_metadata(value):
return {'dtype': value.dtype.name, 'shape': list(value.shape), 'raw_sha256': raw_hash(value)}
@@ -0,0 +1,145 @@
"""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()
@@ -0,0 +1,132 @@
"""Finite fixed inventory; no overwrites, no automatic scientific retries."""
import argparse
import json
import os
import time
import traceback
import urllib.request
from context import ROOT, MODEL, EXP, AK, CFG, read, save, digest, check, budget
def preflight():
os.environ['CUDA_VISIBLE_DEVICES'] = CFG['gpu_uuid']
os.environ['CUDA_HOME'] = '/usr/local/cuda'
os.environ['PATH'] = str(ROOT / 'models/male-cns-lif/.venv/bin') + ':/usr/local/cuda/bin:' + os.environ['PATH']
os.environ['MAX_JOBS'] = '2'
os.environ['TORCH_CUDA_ARCH_LIST'] = '8.9'
for port in (8188, 8189, 8190):
with urllib.request.urlopen(f'http://192.168.10.51:{port}/queue', timeout=5) as response:
q = json.load(response)
assert not q['queue_running'] and not q['queue_pending'], 'ComfyUI busy: defer, never evict'
def output_inventory(folder):
return [dict(path=p.relative_to(folder).as_posix(), bytes=p.stat().st_size, sha256=digest(p))
for p in sorted(folder.rglob('*')) if p.is_file() and p.name != 'output-hashes.json']
def compare_expected(stage, row, folder):
from comparison import compare_runs, validate_run
case = AK / 'cases' / row['cohort'] / row['name']
if stage == 'zero':
reference = AK / 'gpu' / row['cohort'] / (row['name'] + '-r' + str(row['repeat']))
return compare_runs(case, reference, folder, mode='zero')
if row['repeat'] == 1:
reference = EXP / 'gpu' / stage / (row['name'] + '-r0')
return compare_runs(case, reference, folder, mode='repeat')
return validate_run(case, folder)
def verify_identity(folder, stage, row):
assert stage in CFG['stages'] and row['repeat'] in (0, 1)
assert folder == EXP / 'gpu' / stage / (row['name'] + '-r' + str(row['repeat']))
case = AK / 'cases' / row['cohort'] / row['name']
summary = read(folder / 'summary.json')
assert summary['case'] == row['name'] and summary['complete'] and summary['pass_all']
assert summary['input_sha256']['spec.json'] == digest(case / 'spec.json')
assert summary['input_sha256']['requests.npz'] == digest(case / 'requests.npz')
overlay = read(folder / 'overlay-audit.json')
assert overlay['complete'] and overlay['overlay_name'] == stage
assert overlay['input']['overlay_sha256'] == digest(EXP / 'overlays' / (stage + '.npz'))
assert overlay['input']['manifest_sha256'] == digest(EXP / 'overlays' / (stage + '.json'))
report = read(folder / 'comparison.json')
assert report['pass_all'] and report['overlay_name'] == stage
assert report['case_dir'] == str(case) and report['right'] == str(folder)
if stage == 'zero':
assert report['mode'] == 'zero'
assert report['left'] == str(AK / 'gpu' / row['cohort'] / (row['name'] + '-r' + str(row['repeat'])))
elif row['repeat'] == 1:
assert report['mode'] == 'repeat' and report['left'] == str(EXP / 'gpu' / stage / (row['name'] + '-r0'))
else:
assert report['mode'] == 'self' and report['left'] == str(folder)
def verify_completed(folder, stage=None, row=None, recompute=False):
rows = read(folder / 'output-hashes.json')
assert rows == output_inventory(folder), 'Completed output bytes changed: ' + str(folder)
assert read(folder / 'comparison.json')['pass_all']
assert read(folder / 'summary.json')['complete']
if stage is not None:
verify_identity(folder, stage, row)
if recompute:
report = compare_expected(stage, row, folder)
assert report['pass_all'] and report == read(folder / 'comparison.json'), 'Recomputed comparison differs'
def run(stage):
assert stage in CFG['stages']
reg = check(full=True); budget()
assert not list((EXP / 'audit').glob('stopped-*.json')), 'Previous failure: preserve and inspect, never silently retry'
receipt = EXP / 'audit' / (stage + '-complete.json')
assert not receipt.exists(), 'Stage already completed'
if stage == 'static25':
prior = read(EXP / 'audit/zero-complete.json')
assert prior['pass_all'] and prior['trials'] == 144
for row in reg['planned']:
verify_completed(EXP / 'gpu/zero' / (row['name'] + '-r' + str(row['repeat'])), 'zero', row)
preflight()
from adapter import run_gpu_overlay
began = time.perf_counter()
completed = []
try:
for ordinal, row in enumerate(reg['planned'], 1):
key = row['name'] + '-r' + str(row['repeat'])
folder = EXP / 'gpu' / stage / key
case = AK / 'cases' / row['cohort'] / row['name']
if folder.exists():
verify_completed(folder, stage, row, recompute=True)
print('VERIFIED-COMPLETED', stage, ordinal, key, flush=True)
else:
preflight(); check(); budget()
print('START', stage, ordinal, key, flush=True)
summary = run_gpu_overlay(case, folder, EXP / 'extension-build',
EXP / 'overlays' / (stage + '.npz'), EXP / 'overlays' / (stage + '.json'))
assert summary['pass_all'] and summary['complete']
report = compare_expected(stage, row, folder)
save(folder / 'comparison.json', report)
assert report['pass_all'], 'Independent recording/equivalence gate failed: ' + key
save(folder / 'output-hashes.json', output_inventory(folder))
verify_completed(folder, stage, row)
print('COMPLETE', stage, ordinal, key, 'simulation_seconds', summary['diagnostic_simulation_seconds'], flush=True)
completed.append(dict(name=row['name'], repeat=row['repeat'],
output_hashes_sha256=digest(folder / 'output-hashes.json'),
comparison_sha256=digest(folder / 'comparison.json')))
assert len(completed) == 144
check(full=True)
result = dict(stage=stage, pass_all=True, trials=144, primary_trials=120, technical_repeats=24,
completed=completed, wall_seconds=time.perf_counter() - began, training=False,
scope='All zero-delta runs exactly match sealed AK' if stage == 'zero' else
'Full closed-loop fixed overlay, internal event/queue accounting and 24 exact technical repeats; not learning')
save(receipt, result); budget()
return result
except Exception as error:
save(EXP / 'audit' / ('stopped-' + stage + '.json'), dict(stage=stage,
completed_before_error=completed, type=type(error).__name__, message=str(error),
traceback=traceback.format_exc(), partial_outputs_preserved=True, no_parameter_rescue=True))
raise
if __name__ == '__main__':
parser = argparse.ArgumentParser(description=__doc__)
parser.add_argument('stage', choices=CFG['stages'])
run(parser.parse_args().stage)
@@ -0,0 +1,106 @@
"""Complete paired static-overlay effects; no learned-memory inference."""
import numpy as np
import pandas as pd
from context import EXP, CFG, read, save, digest, bit_equal
from run_suite import verify_completed
def load(path):
with np.load(path, allow_pickle=False) as data:
return {k: data[k].copy() for k in data.files}
def first_ticks(state, n=166700):
out = np.full(n, np.iinfo(np.int32).max, np.int32)
np.minimum.at(out, state['neuron_idx'], state['step'])
out[out == np.iinfo(np.int32).max] = -1
return out
def metrics(base, changed, population):
a, b = base['counts'][population], changed['counts'][population]
af, bf = first_ticks(base)[population], first_ticks(changed)[population]
ae = np.isin(base['neuron_idx'], population); be = np.isin(changed['neuron_idx'], population)
same = bit_equal(base['step'][ae], changed['step'][be]) and bit_equal(base['neuron_idx'][ae], changed['neuron_idx'][be])
ax = base['step'][ae].astype(np.int64) * 166700 + base['neuron_idx'][ae]
bx = changed['step'][be].astype(np.int64) * 166700 + changed['neuron_idx'][be]
different = np.setxor1d(ax, bx, assume_unique=True)
return dict(cells=len(population), base_active=int(np.count_nonzero(a)), changed_active=int(np.count_nonzero(b)),
base_spikes=int(a.sum()), changed_spikes=int(b.sum()),
recruited_cells=int(np.count_nonzero((a == 0) & (b > 0))), lost_cells=int(np.count_nonzero((a > 0) & (b == 0))),
count_changed_cells=int(np.count_nonzero(a != b)), first_spike_changed_cells=int(np.count_nonzero(af != bf)),
count_l1=int(np.abs(a.astype(np.int64) - b.astype(np.int64)).sum()), event_sequence_changed=not same,
first_event_divergence_ms=None if not len(different) else float(different.min() // 166700 * .1),
final_v_max_abs_SI=float(np.max(np.abs(base['v'][population] - changed['v'][population]))) if len(population) else None,
final_g_max_abs_SI=float(np.max(np.abs(base['g'][population] - changed['g'][population]))) if len(population) else None)
def run(verify_only=False):
def emit(path, value):
if verify_only:
assert read(path) == value, str(path)
else:
save(path, value)
reg = read(EXP / 'protocol/preregistered.json')
for stage in CFG['stages']:
receipt = read(EXP / 'audit' / (stage + '-complete.json'))
assert receipt['pass_all'] and receipt['trials'] == 144
assert len(receipt['completed']) == 144
for row, entry in zip(reg['planned'], receipt['completed']):
assert entry['name'] == row['name'] and entry['repeat'] == row['repeat']
folder = EXP / 'gpu' / stage / (row['name'] + '-r' + str(row['repeat']))
verify_completed(folder, stage, row, recompute=True)
assert digest(folder / 'output-hashes.json') == entry['output_hashes_sha256']
assert digest(folder / 'comparison.json') == entry['comparison_sha256']
pops = load(EXP / 'protocol/populations.npz')
rows, cellrows, times, peaks = [], [], [], []
for row in reg['planned']:
if row['repeat']:
continue
key = row['name'] + '-r0'
base, changed = [load(EXP / 'gpu' / stage / key / 'state.npz') for stage in CFG['stages']]
effects = {name: metrics(base, changed, nodes) for name, nodes in pops.items()}
result = dict(**row, effects=effects, whole_brain=metrics(base, changed, np.arange(166700, dtype=np.int32)))
emit(EXP / 'summaries' / (row['name'] + '.json'), result); rows.append(result)
af, bf = first_ticks(base), first_ticks(changed)
for neuron in pops['MBON']:
n = int(neuron)
cellrows.append(dict(case=row['name'], cohort=row['cohort'], mode=row['mode'], seed=row['seed'],
neuron_idx=n, base_count=int(base['counts'][n]), static25_count=int(changed['counts'][n]),
base_first_tick=int(af[n]), static25_first_tick=int(bf[n]),
base_final_v_SI=float(base['v'][n]), static25_final_v_SI=float(changed['v'][n]),
base_final_g_SI=float(base['g'][n]), static25_final_g_SI=float(changed['g'][n])))
for stage in CFG['stages']:
s = read(EXP / 'gpu' / stage / key / 'summary.json')
times.append(dict(stage=stage, case=row['name'], wall_seconds=s['wall_seconds'],
simulation_seconds=s['diagnostic_simulation_seconds']))
peaks.append(s['peak_allocated_vram_bytes'])
table = pd.DataFrame(cellrows)
table_path = EXP / 'summaries/per-MBON-static-effects.parquet'
if verify_only:
pd.testing.assert_frame_equal(table, pd.read_parquet(table_path), check_exact=True)
else:
assert not table_path.exists(); table.to_parquet(table_path, index=False)
blocks = {}
for cohort in sorted({r['cohort'] for r in rows}):
for mode in sorted({r['mode'] for r in rows}):
block = [r for r in rows if r['cohort'] == cohort and r['mode'] == mode]
assert len(block) == 30
blocks[cohort + '/' + mode] = dict(trials=30, populations={name: dict(
trials_event_change=sum(r['effects'][name]['event_sequence_changed'] for r in block),
trials_count_change=sum(r['effects'][name]['count_changed_cells'] > 0 for r in block),
mean_count_l1=float(np.mean([r['effects'][name]['count_l1'] for r in block])),
mean_recruited_cells=float(np.mean([r['effects'][name]['recruited_cells'] for r in block])),
mean_lost_cells=float(np.mean([r['effects'][name]['lost_cells'] for r in block]))) for name in pops})
summary = dict(status='PASS-EXACT-WHOLEBRAIN-PLASTIC-INTERFACE-NOT-LEARNING',
primary_trials_per_stage=120, technical_repeats_per_stage=24, zero_overlay_exact=True,
static25_repeat_exact=True, blocks=blocks, peak_allocated_vram_bytes=max(peaks),
timing=times, per_MBON_sha256=digest(table_path), training=False, learned_candidate=False,
conditional_AL_not_a_nonzero_arithmetic_oracle=True,
scope='Valid interface and recording; reported static response is not an associative learning PASS')
emit(EXP / 'audit/scientific-summary.json', summary)
return summary
if __name__ == '__main__':
print(run()['status'], flush=True)
@@ -0,0 +1,363 @@
"""Pure temporary-file synthetic tests; never a brain run or old-file write.
Public integration tests mock only the full-case loader to use a tiny graph.
The sealed output parser, timing/queue reconstructor, overlay bridge, source AST
and receipt checks remain real. Production rejects these tiny cases unchanged.
"""
import copy
import hashlib
import json
from pathlib import Path
import shutil
import tempfile
import unittest
from unittest.mock import patch
import numpy as np
import comparison as c
def write_json(path, data):
Path(path).write_text(json.dumps(data, sort_keys=True, allow_nan=False), encoding='utf-8')
class ComparisonTests(unittest.TestCase):
def setUp(self):
self.temp = tempfile.TemporaryDirectory(prefix='phase4am-comparison-synthetic-')
self.addCleanup(self.temp.cleanup)
self.root = Path(self.temp.name).resolve()
self.case_dir = self.root / 'case'
self.graph_dir = self.root / 'graph'
self.bundle_dir = self.root / 'bundle'
for p in (self.case_dir, self.graph_dir, self.bundle_dir):
p.mkdir()
self.helper = c._helper(set())
self.steps = 30
self.graph = dict(nodes=np.arange(4, dtype=np.int32), edge_id=np.arange(6, dtype=np.int64),
ptr=np.array([0, 2, 3, 5, 6], np.int64), src=np.array([0, 0, 1, 2, 2, 3], np.int32),
dst=np.array([3, 2, 2, 0, 3, 1], np.int32), signed_raw=np.array([1, 0, 2, -2, 3, 1], np.int64))
self.graph['weights'] = self.graph['signed_raw'] * (.275 * .001)
for key, value in self.graph.items():
np.save(self.graph_dir / (key + '.npy'), value)
self.bundle = {'kc_globals.npy': np.r_[np.array([0, 1], np.int32), np.arange(4, 4066, dtype=np.int32)],
'apl_globals.npy': np.array([2, 3], np.int32), 'input_matrix.npy': np.zeros((2, c.N), np.float32),
'output_matrix.npy': np.zeros((2, c.K), np.float32)}
for key, value in self.bundle.items():
np.save(self.bundle_dir / key, value)
self.requests = [(0, 0), (1, 1), (2, 0), (22, 0), (23, 3)]
np.savez(self.case_dir / 'requests.npz', tick=np.array([x[0] for x in self.requests], np.int32),
neuron_idx=np.array([x[1] for x in self.requests], np.int32))
write_json(self.case_dir / 'spec.json', {'name': 'synthetic', 'steps': self.steps,
'dt_ms': .1, 'duration_ms': 3., 'record_history': False, 'apl_delay_steps': 18})
write_json(self.root / 'coeff.json', {'synthetic': True})
self.case = dict(spec=json.loads((self.case_dir / 'spec.json').read_text()), graph=self.graph,
bundle=self.bundle, token=('synthetic', str(self.root)), graph_dir=self.graph_dir, bundle_dir=self.bundle_dir,
requested=self.requests, input_hashes={'spec.json': c.file_hash(self.case_dir / 'spec.json'),
'requests.npz': c.file_hash(self.case_dir / 'requests.npz'), 'base_weights.npy': c.file_hash(self.graph_dir / 'weights.npy'),
'coefficients.json': c.file_hash(self.root / 'coeff.json')})
self.ids = np.array([0, 2], np.int64)
self.base = np.array([.275, .55], np.float32)
np.save(self.root / 'mask.npy', self.ids)
np.save(self.root / 'base.npy', self.base)
self.delta = np.zeros(2, np.float32)
self.overlay_name = 'zero'
self._overlay_inputs()
def _overlay_inputs(self):
np.savez(self.root / 'overlay.npz', edge_id=self.ids, plastic_delta_mv=self.delta)
write_json(self.root / 'overlay-manifest.json', dict(schema='phase4am-overlay-v1', overlay_name=self.overlay_name,
overlay_sha256=c.file_hash(self.root / 'overlay.npz'), mask_path=str(self.root / 'mask.npy'),
mask_sha256=c.file_hash(self.root / 'mask.npy'), base_candidate_path=str(self.root / 'base.npy'),
base_candidate_sha256=c.file_hash(self.root / 'base.npy'),
aj_model_dir=str(Path(c.__file__).resolve().parent.parent / 'apl-timing-lab-v1')))
def run_files(self, name, wrapped):
directory = self.root / name
directory.mkdir()
ticks = np.array([0, 1, 18, 22, 23], np.int32)
nodes = np.array([0, 1, 2, 0, 3], np.int32)
state = dict(step=ticks, neuron_idx=nodes, counts=np.bincount(nodes, minlength=4).astype(np.int32),
v=np.full(4, -.052, np.float64), g=np.zeros(4, np.float64))
hashes, queues, requests = [], [], []
last = np.full(4, -1000000000, np.int64)
for tick in range(self.steps):
fired = nodes[ticks == tick]
for request_tick, target in self.requests:
if request_tick == tick:
ok = tick - last[target] >= 22
requests.append(dict(tick=tick, neuron_idx=target, attempted=1, accepted=int(ok), rejected=int(not ok)))
last[fired] = tick
ref = np.maximum(22 - (tick - last), 0).astype(np.int32)
hashes.append(dict(tick=tick, v_sha256=c.raw_hash(state['v']), g_sha256=c.raw_hash(state['g']), ref_sha256=c.raw_hash(ref)))
sources = nodes[ticks == tick - 18] if tick >= 18 else []
rows = np.array([eid for source in sources for eid in range(self.graph['ptr'][source], self.graph['ptr'][source + 1])], np.int64)
accepted = (ref[self.graph['dst'][rows]] == 0).astype(np.uint8)
queues.append(self.helper._queue_digest(tick, rows, accepted))
state['ref'] = ref
np.savez(directory / 'state.npz', **state)
for filename, rows in (('tick-state-hashes.jsonl', hashes), ('queue.jsonl', queues)):
(directory / filename).write_text(''.join(json.dumps(row) + '\n' for row in rows), encoding='utf-8')
(directory / 'requests.csv').write_text('tick,neuron_idx,attempted,accepted,rejected\n' +
''.join(','.join(str(row[key]) for key in c._helper(set()).REQUEST_FIELDS) + '\n' for row in requests), encoding='utf-8')
for field, width in (('drive', 2), ('state', 2), ('inhibition', c.K), ('applied', c.K)):
np.save(directory / ('apl-' + field + '.float32.npy'), np.zeros((self.steps, width), np.float32))
pending = np.zeros((18, c.K), np.float32)
np.save(directory / 'apl-pending-tail.float32.npy', pending)
timing = dict(apl_delay_steps=18, steps=self.steps, pending_generated_count=18, generated_rows=self.steps,
applied_generated_rows=self.steps - 18, pending_shape=[18, c.K], pending_initial_zero_prefix=0,
pending_application_tick_start=self.steps, pending_application_tick_stop_exclusive=self.steps + 18,
pending_generated_tick_start=self.steps - 18, pending_generated_tick_stop_exclusive=self.steps,
pending_raw_sha256=c.raw_hash(pending), final_apl_state_float32=[0., 0.], final_apl_state_u32_bits=[0, 0],
final_apl_state_nonzero=False, brain_tail_advanced=False, future_apl_decay_or_feedback_generated=False,
finite_generated_sequence_only=True, closed_loop_branch_integrals_claimed_equal=False,
biological_delay_measurement_claimed=False)
write_json(directory / 'apl-timing-audit.json', timing)
component = dict(ok=True, protocol='phase4ag-apl-v1', n_neurons=c.N, n_apl=2, n_kc=c.K, dt_ms=.1,
files_sha256={key: c.file_hash(self.bundle_dir / key) for key in self.bundle},
array_sha256={key: c.raw_hash(value) for key, value in self.bundle.items()},
decay_f32_bits=f'{int(np.float32(np.exp(-.1 / 20.)).view(np.uint32)):08x}',
gain_f32_bits=f'{int(np.float32(.01).view(np.uint32)):08x}',
environment=dict(device_name='NVIDIA GeForce RTX 4090', cuda_matmul_allow_tf32=False,
float32_matmul_precision='highest', precision_configuration_changed_by_component=False))
write_json(directory / 'apl-component.json', component)
(directory / 'sealed-gpu-source.diff').write_text('synthetic diff, not executed\n', encoding='utf-8')
provenance = dict(sealed_source_sha256=c.SEALED, candidate_sha256=c.AJ_SHA,
source_diff_sha256=c.file_hash(directory / 'sealed-gpu-source.diff'), module_globals_patched=False)
write_json(directory / 'source-audit.json', provenance)
_, effective_sha, apl_count = c._effective_hash(self.case, self.ids if wrapped else None, self.delta if wrapped else None)
summary = dict(case='synthetic', complete=True, pass_all=True, steps=self.steps, completed_ticks=self.steps,
nodes=4, edges=6, precision='float64', apl_precision='float32', state_units='SI volts', total_spikes=len(ticks),
requested=len(requests), accepted_requests=sum(row['accepted'] for row in requests),
rejected_requests=sum(row['rejected'] for row in requests), arriving_edges=sum(row['count'] for row in queues),
accepted_arriving_edges=sum(row['accepted_count'] for row in queues), counts_match_sparse_events=True,
all_finite=True, record_history=False, apl_fast_edges_zeroed=apl_count, kc_targets_present=c.K,
effective_weights_raw_sha256=effective_sha, apl_component=component,
apl_schedule='end, after threshold/reset and guarded arrivals, unconditional all KC',
apl_si_conversion='applied h32 -> float64 -> multiply float64 0.001 -> separate float64 subtraction',
apl_delay_steps=18, apl_timing=timing, source_provenance=provenance, pending_generated_count=18,
pending_initial_zero_prefix=0, pending_tail_shape=[18, c.K], future_generated_decay_tail_included=False,
build=dict(sources={'author_ext.cpp': c.CPP_SHA, 'author_ext.cu': c.CUDA_SHA}, arch_list='8.9',
cuda_flags=['-O2', '--fmad=false', '--ftz=false', '--prec-div=true', '--prec-sqrt=true']),
sealed_ae_backend_sha256=c.SEALED['ae_backend'], learning=False, input_sha256=self.case['input_hashes'],
**{key: 1.0 for key in c.PERFORMANCE})
write_json(directory / 'summary.json', summary)
if wrapped:
self._write_overlay(directory, summary)
return directory
def _write_overlay(self, directory, summary):
for source, target in (('overlay.npz', 'overlay-input.npz'), ('overlay-manifest.json', 'overlay-manifest.json')):
shutil.copyfile(self.root / source, directory / target)
input_rows = {}
for label, filename in (('overlay', 'overlay.npz'), ('manifest', 'overlay-manifest.json'), ('mask', 'mask.npy'), ('base_candidate', 'base.npy')):
input_rows[label + '_file'] = str(self.root / filename)
input_rows[label + '_sha256'] = c.file_hash(self.root / filename)
audit = dict(schema='phase4am-overlay-audit-v1', complete=True, overlay_name=self.overlay_name, input=input_rows,
arrays={key: dict(dtype=str(value.dtype), shape=list(value.shape), raw_sha256=c.raw_hash(value)) for key, value in
dict(edge_id=self.ids, plastic_delta_mv=self.delta, base_candidate_mv=self.base).items()},
candidate_count=2, nonzero_delta_count=int(np.count_nonzero(self.delta)), mapped_candidate_count=2,
missing_candidate_count=0, installed_nonzero_count=int(np.count_nonzero(self.delta)), delta_dtype='float32',
delta_units='mV', state_dtype='float64', bridge=c.BRIDGE, installation_schedule=c.SCHEDULE,
weights_updated_during_run=False, learning=False, zero_delta_no_write=True, frozen_mask_exact=True,
bounds_pass=True, apl_overlap_count=0, apl_fast_edges_zeroed=summary['apl_fast_edges_zeroed'],
base_graph_files_modified=False, untouched_weights_bitwise_preserved=True,
base_weights_file_sha256=c.file_hash(self.graph_dir / 'weights.npy'), base_weights_raw_sha256=c._base_raw_hash(self.case),
effective_weights_raw_sha256=summary['effective_weights_raw_sha256'],
expected_effective_weights_raw_sha256=summary['effective_weights_raw_sha256'],
copied_overlay_file='overlay-input.npz', copied_manifest_file='overlay-manifest.json',
inherited_aj_source_provenance=summary['source_provenance'],
inherited_source_audit_scope='AJ source provenance only; AM overlay semantics are recorded separately',
static25_is_exact_fraction_of_float64_base_claimed=False, arrival_weight_sampling='arrival time; delta fixed for entire trial')
write_json(directory / 'overlay-audit.json', audit)
model = Path(c.__file__).resolve().parent
receipt = dict(schema='phase4am-adapter-provenance-v1', complete=True,
scope='constant sparse overlay installation only; no within-trial plasticity or learning',
adapter_file=str(model / 'adapter.py'), adapter_sha256=c.file_hash(model / 'adapter.py'),
overlay_module_file=str(model / 'overlay.py'), overlay_module_sha256=c.file_hash(model / 'overlay.py'),
sealed_sources={relative: dict(path=str(model.parent / relative), sha256=sha) for relative, sha in c.ADAPTER_PINS.items()},
ast=c._expected_ast(model.parent / 'apl-timing-lab-v1/gpu_timing.py', model / 'adapter.py'),
installation_calls=1, weights_updated_during_run=False, learning=False, apl_delay_steps=18,
original_module_globals_patched=False, delta_constant_for_entire_trial=True,
inherited_source_audit_describes_AM_semantics=False, overlay_audit_sha256=c.file_hash(directory / 'overlay-audit.json'),
inherited_summary_sha256=c.file_hash(directory / 'summary.json'), effective_weights_raw_sha256=summary['effective_weights_raw_sha256'])
write_json(directory / 'adapter-provenance.json', receipt)
def compare(self, left, right, mode='zero', output=None):
with patch.object(c, '_load_case', return_value=self.case), patch.object(c, 'CANDIDATES', 2):
return c.compare_runs(self.case_dir, left, right, output, mode)
def assert_pass(self, report):
self.assertTrue(report['pass_all'], json.dumps({key: report.get(key) for key in ('error', 'failed_checks', 'differences')}))
self.assertFalse(report['learning_achieved'])
self.assertFalse(report['candidate_generated'])
self.assertTrue(report['read_manifest'])
def test_zero_complete_real_parsers(self):
left, right = self.run_files('left', False), self.run_files('right', True)
self.assert_pass(self.compare(left, right))
def test_static25_repeat_and_single_validation(self):
self.overlay_name = 'static25'
self.delta = np.multiply(self.base, np.float32(-.25))
self._overlay_inputs()
left, right = self.run_files('left', True), self.run_files('right', True)
self.assert_pass(self.compare(left, right, 'repeat'))
self.assert_pass(self.compare(left, left, 'self'))
def test_production_rejects_toy_dimensions(self):
with self.assertRaises(ValueError):
c._load_case(self.case_dir, set())
def test_missing_adapter_receipt_fails_despite_complete_summary(self):
left, right = self.run_files('left', False), self.run_files('right', True)
(right / 'adapter-provenance.json').unlink()
self.assertFalse(self.compare(left, right)['pass_all'])
def test_corrupt_adapter_receipt_ast_and_summary_binding_fail(self):
left, right = self.run_files('left', False), self.run_files('right', True)
path = right / 'adapter-provenance.json'
original = json.loads(path.read_text())
for change in ('ast', 'binding', 'complete'):
data = copy.deepcopy(original)
if change == 'ast':
data['ast']['entire_tick_loop_ast_identical'] = False
elif change == 'binding':
data['inherited_summary_sha256'] = '0' * 64
else:
data['complete'] = False
write_json(path, data)
self.assertFalse(self.compare(left, right)['pass_all'], change)
def test_per_neuron_count_corruption_not_hidden_by_equal_total(self):
left, right = self.run_files('left', False), self.run_files('right', True)
for folder in (left, right):
with np.load(folder / 'state.npz') as f:
state = {key: f[key].copy() for key in f.files}
state['counts'][0] -= 1
state['counts'][1] += 1
np.savez(folder / 'state.npz', **state)
self.assertFalse(self.compare(left, right)['pass_all'])
def test_both_equal_wrong_queues_fail_independent_reconstruction(self):
left, right = self.run_files('left', False), self.run_files('right', True)
for folder in (left, right):
path = folder / 'queue.jsonl'
rows = [json.loads(row) for row in path.read_text().splitlines()]
rows[18]['ordered_edge_sha256'] = '0' * 64
path.write_text(''.join(json.dumps(row) + '\n' for row in rows), encoding='utf-8')
report = self.compare(left, right)
self.assertFalse(report['pass_all'])
self.assertIn('left_gpu.full_event_queue_request_accounting', report['failed_checks'])
def test_both_equal_wrong_requests_fail(self):
left, right = self.run_files('left', False), self.run_files('right', True)
for folder in (left, right):
path = folder / 'requests.csv'
path.write_text(path.read_text().replace('2,0,1,0,1', '2,0,1,1,0'), encoding='utf-8')
self.assertFalse(self.compare(left, right)['pass_all'])
def test_both_equal_wrong_ref_hash_fails(self):
left, right = self.run_files('left', False), self.run_files('right', True)
for folder in (left, right):
path = folder / 'tick-state-hashes.jsonl'
rows = [json.loads(row) for row in path.read_text().splitlines()]
rows[1]['ref_sha256'] = '0' * 64
path.write_text(''.join(json.dumps(row) + '\n' for row in rows), encoding='utf-8')
self.assertFalse(self.compare(left, right)['pass_all'])
def test_state_signed_zero_detected(self):
left, right = self.run_files('left', False), self.run_files('right', True)
with np.load(right / 'state.npz') as f:
state = {key: f[key].copy() for key in f.files}
state['g'][0] = -0.
np.savez(right / 'state.npz', **state)
self.assertFalse(self.compare(left, right)['pass_all'])
def test_same_nonfinite_states_fail(self):
left, right = self.run_files('left', False), self.run_files('right', True)
for folder in (left, right):
with np.load(folder / 'state.npz') as f:
state = {key: f[key].copy() for key in f.files}
state['v'][0] = np.inf
np.savez(folder / 'state.npz', **state)
self.assertFalse(self.compare(left, right)['pass_all'])
def test_apl_pending_signed_zero_fails(self):
left, right = self.run_files('left', False), self.run_files('right', True)
path = right / 'apl-pending-tail.float32.npy'
value = np.load(path)
value[0, 0] = np.float32(-0.)
np.save(path, value)
self.assertFalse(self.compare(left, right)['pass_all'])
def test_missing_tick_or_extra_request_fails(self):
left, right = self.run_files('left', False), self.run_files('right', True)
path = right / 'queue.jsonl'
path.write_text('\n'.join(path.read_text().splitlines()[:-1]) + '\n', encoding='utf-8')
self.assertFalse(self.compare(left, right)['pass_all'])
def test_summary_only_whitelisted_performance_may_differ(self):
a = dict(dynamics='same', build={'source': 'same'}, wall_seconds=1)
b = dict(a, wall_seconds=5)
checks, differences = {}, {}
c._summary_pair(a, b, checks, differences)
self.assertTrue(all(checks.values()))
b['build'] = {'source': 'different'}
c._summary_pair(a, b, checks, differences)
self.assertFalse(all(checks.values()))
def test_overlay_bad_units_and_fake_complete_receipt_fail(self):
left, right = self.run_files('left', False), self.run_files('right', True)
path = right / 'overlay-audit.json'
data = json.loads(path.read_text()); data['delta_units'] = 'V'; write_json(path, data)
self.assertFalse(self.compare(left, right)['pass_all'])
def test_source_or_build_mutation_fails(self):
left, right = self.run_files('left', False), self.run_files('right', True)
path = right / 'summary.json'
data = json.loads(path.read_text()); data['build']['cuda_flags'].append('--use_fast_math'); write_json(path, data)
self.assertFalse(self.compare(left, right)['pass_all'])
def test_no_existing_output_overwrite_and_no_input_directory_write(self):
left, right = self.run_files('left', False), self.run_files('right', True)
output = self.root / 'report.json'
self.assert_pass(self.compare(left, right, output=output))
with self.assertRaises(ValueError):
self.compare(left, right, output=output)
with self.assertRaises(ValueError):
self.compare(left, right, output=right / 'report.json')
def test_fake_repeat_self_disallowed(self):
left = self.run_files('left', True)
self.assertFalse(self.compare(left, left, 'repeat')['pass_all'])
def test_static25_cannot_be_zero_reference(self):
self.overlay_name = 'static25'; self.delta = np.multiply(self.base, np.float32(-.25)); self._overlay_inputs()
left, right = self.run_files('left', False), self.run_files('right', True)
self.assertFalse(self.compare(left, right)['pass_all'])
def test_helper_source_pin_and_adapter_ast_contract(self):
model = Path(c.__file__).resolve().parent
self.assertEqual(c.file_hash(model.parent / 'apl-timing-lab-v1/compare_timing.py'), c.HELPER_SHA)
import adapter
_, owner = adapter.derive_ast((model.parent / 'apl-timing-lab-v1/gpu_timing.py').read_bytes())
independent = c._expected_ast(model.parent / 'apl-timing-lab-v1/gpu_timing.py', model / 'adapter.py')
for key, value in owner.items():
self.assertEqual(independent[key], value)
def test_fresh_sha_detects_same_size_write_even_with_identical_stat(self):
path = self.root / 'same-stat.bin'
path.write_bytes(b'first!')
identity = c._fingerprint(path)
with patch.object(c, '_fingerprint', return_value=identity):
before = c.file_hash(path)
path.write_bytes(b'other!')
after = c.file_hash(path)
self.assertEqual(before, hashlib.sha256(b'first!').hexdigest())
self.assertEqual(after, hashlib.sha256(b'other!').hexdigest())
self.assertNotEqual(before, after)
if __name__ == '__main__':
unittest.main()
@@ -0,0 +1,259 @@
"""Synthetic eligibility tests only; never load recorded brain trajectories."""
import ast
import importlib.util
import json
import math
import os
from pathlib import Path
from types import SimpleNamespace
import tempfile
import unittest
from typing import Any
import numpy as np
import eligibility_bridge as bridge
def source_path():
explicit = os.environ.get("PHASE4J_SOURCE")
if explicit:
return Path(explicit)
parent = Path(__file__).resolve().parents[1]
paths = (parent / "models/male-cns-lif/phase4j.py", parent / "mb-physiology-v1/phase4j.py")
for path in paths:
if path.is_file():
return path
raise FileNotFoundError("Set PHASE4J_SOURCE to the SHA-pinned original phase4j.py")
SOURCE = source_path()
KC = np.array([1, 3, 7], np.int32)
def run_trace(rows=(), steps=8, commands=(0, 3, 7), backend="numpy"):
events = np.asarray(rows, np.int32).reshape(-1, 2)
return bridge.trace_from_events(events[:, 0], events[:, 1], KC, steps, commands,
phase4j_source=SOURCE, backend=backend, n_neurons=10)
def update_args():
return dict(trace=np.array([1, .25, 0], np.float32), kc=KC.copy(),
candidate_sources=np.array([1, 1, 3, 7, 3], np.int32),
candidate_compartments=np.array(["y5B'2a", "a1", "y5B'2a", "y5B'2a", "y2a'1"]),
compartment="y5B'2a", delta=np.zeros(5, np.float32),
base_candidate=np.array([.275, .55, .0001, .275, 2.75], np.float32),
d=1., phase4j_source=SOURCE, n_neurons=10)
class FrozenTraceTests(unittest.TestCase):
def test_no_input_positive_zero_and_no_command(self):
result = run_trace(commands=())
self.assertEqual(result.snapshots.shape, (0, 3))
self.assertTrue(bridge.bit_equal(result.final, np.zeros(3, np.float32)))
self.assertTrue(bridge.bit_equal(result.last_command_trace, result.final))
self.assertFalse(result.audit["training_executed"])
self.assertFalse(result.audit["torch_numpy_bitwise_comparison_performed"])
json.dumps(result.audit, allow_nan=False)
def test_simultaneous_spike_is_seen_and_cap_is_one(self):
result = run_trace([(0, 1), (1, 1), (3, 3), (3, 7)])
self.assertEqual(result.snapshots[0, 0], np.float32(1))
self.assertEqual(result.snapshots[1, 1:].tolist(), [1., 1.])
self.assertLessEqual(float(result.final.max()), 1.)
def test_interval_decay_is_each_tick_not_power_jump(self):
result = run_trace([(0, 1)], steps=1001, commands=(0, 1, 1000))
expected = np.float32(1)
decay = np.float32(math.exp(-.1 / 100.))
for _ in range(1000):
expected = np.float32(expected * decay)
self.assertEqual(result.snapshots[-1, 0].view(np.uint32), expected.view(np.uint32))
self.assertEqual(result.snapshots[1, 0].view(np.uint32), decay.view(np.uint32))
def test_us_before_future_cs_has_zero_delta(self):
result = run_trace([(2, 1)], commands=(1,))
args = update_args()
args["trace"] = result.last_command_trace
delta, _ = bridge.apply_eligibility(**args)
self.assertTrue(bridge.bit_equal(delta, args["delta"]))
def test_plus_1000_ms_ratio_strict_below_point01(self):
result = run_trace([(0, 1)], steps=10001, commands=(0, 10000))
args = update_args()
args["base_candidate"][:] = 100 # no saturation in this temporal check
args["trace"] = result.snapshots[0]
zero, _ = bridge.apply_eligibility(**args)
args["trace"] = result.snapshots[1]
late, _ = bridge.apply_eligibility(**args)
self.assertLess(float(np.abs(late).sum() / np.abs(zero).sum()), .01)
self.assertGreater(float(result.snapshots[-1, 0]), 0.)
def test_non_kc_events_do_not_enter_trace(self):
a = run_trace([(0, 1), (3, 3)])
b = run_trace([(0, 0), (0, 1), (2, 9), (3, 3)])
self.assertTrue(bridge.bit_equal(a.snapshots, b.snapshots))
self.assertEqual(b.audit["actual_kc_events"], 2)
def test_inputs_and_outputs_are_not_mutated(self):
step, node, kc = np.array([0, 7], np.int32), np.array([1, 3], np.int32), KC.copy()
before = [a.copy() for a in (step, node, kc)]
result = bridge.trace_from_events(step, node, kc, 8, [7], phase4j_source=SOURCE, n_neurons=10)
for a, b in zip((step, node, kc), before):
self.assertTrue(bridge.bit_equal(a, b))
for a in (result.final, result.snapshots, result.command_steps, result.last_command_trace):
self.assertFalse(a.flags.writeable)
def test_bad_event_and_command_schema_is_rejected(self):
for rows in ([(0, 1), (0, 1)], [(1, 1), (0, 1)], [(-1, 1)], [(8, 1)], [(0, 10)]):
with self.subTest(rows=rows), self.assertRaises(ValueError):
run_trace(rows)
for commands in ((1, 1), (3, 1), (-1,), (8,), (.5,), (True,), np.empty((0, 2), np.int32)):
with self.subTest(commands=commands), self.assertRaises(ValueError):
run_trace(commands=commands)
with self.assertRaises(ValueError):
bridge.trace_from_events(np.array([], np.int64), np.array([], np.int32), KC, 8, [], phase4j_source=SOURCE)
def test_bad_kc_and_backend_are_rejected(self):
for kc in (np.array([3, 1], np.int32), np.array([1, 1], np.int32), np.array([], np.int32)):
with self.assertRaises(ValueError):
bridge.trace_from_events(np.array([], np.int32), np.array([], np.int32), kc, 1, [], phase4j_source=SOURCE)
with self.assertRaises(ValueError):
run_trace(backend="auto")
@unittest.skipUnless(importlib.util.find_spec("torch") is not None, "Torch absent: CPU bitwise compatibility NOT established locally")
def test_torch_original_expression_bitwise_against_numpy(self):
rng = np.random.default_rng(719)
mask = rng.random((1001, 10)) < .07
tick, node = np.nonzero(mask)
rows = np.stack((tick, node), axis=1).tolist()
numpy_result = run_trace(rows, steps=1001, commands=(0, 1, 7, 999, 1000))
torch_result = run_trace(rows, steps=1001, commands=(0, 1, 7, 999, 1000), backend="torch")
self.assertTrue(bridge.bit_equal(numpy_result.snapshots, torch_result.snapshots))
self.assertTrue(bridge.bit_equal(numpy_result.final, torch_result.final))
empty_np = run_trace([(0, 1)], steps=10001, commands=(0, 10000))
empty_torch = run_trace([(0, 1)], steps=10001, commands=(0, 10000), backend="torch")
self.assertTrue(bridge.bit_equal(empty_np.snapshots, empty_torch.snapshots))
class FrozenUpdateTests(unittest.TestCase):
def test_actual_source_sha_and_ast_only_extraction(self):
_, report = bridge.apply_eligibility(**update_args())
self.assertEqual(report["source_sha256"], bridge.PHASE4J_SHA256)
self.assertFalse(report["actual_dan_activity_used_to_gate"])
self.assertFalse(report["learning_pass_claimed"])
json.dumps(report, allow_nan=False)
def test_source_drift_is_rejected_before_execution(self):
with tempfile.TemporaryDirectory() as directory:
path = Path(directory) / "phase4j.py"
path.write_bytes(SOURCE.read_bytes() + b"\nraise RuntimeError('must not execute')\n")
args = update_args()
args["phase4j_source"] = path
with self.assertRaisesRegex(ValueError, "SHA256 mismatch"):
bridge.apply_eligibility(**args)
def test_bitwise_against_independently_extracted_original_apply_v2(self):
tree = ast.parse(SOURCE.read_text(encoding="utf-8"))
function = next(x for x in tree.body if isinstance(x, ast.FunctionDef) and x.name == "apply_v2")
namespace = {"np": np, "Validator": object, "Any": Any}
exec(compile(ast.Module(body=[function], type_ignores=[]), "independent-old-apply-v2", "exec"), namespace)
class Column:
def __init__(self, values):
self.values = values
def to_numpy(self, dtype=None):
return np.array(self.values, dtype=dtype)
def astype(self, dtype):
return Column(np.asarray(self.values).astype(dtype))
args = update_args()
validator = SimpleNamespace(n=10, kc=KC, base_candidate=args["base_candidate"],
cand={"source_neuron_idx": Column(args["candidate_sources"]),
"target_compartment_verbatim": Column(args["candidate_compartments"])})
cfg = {"eligibility_v2": {"eta_effective_mv": .00275, "max_fractional_depression": .25}}
for _ in range(50):
actual, report = bridge.apply_eligibility(**args)
expected, old_report = namespace["apply_v2"](validator, args["trace"], args["compartment"], 1., args["delta"], cfg)
self.assertTrue(bridge.bit_equal(actual, expected))
self.assertEqual(report["original_report"], old_report)
args["delta"] = actual
def test_zero_d_and_frozen_preserve_existing_overlay(self):
args = update_args()
args["delta"][:] = -.25 * args["base_candidate"]
for d, frozen in ((0., False), (1., True), (0., True)):
args.update(d=d, frozen=frozen)
result, report = bridge.apply_eligibility(**args)
self.assertTrue(bridge.bit_equal(result, args["delta"]))
self.assertEqual(report["actual_changed_edges"], 0)
def test_off_compartment_and_inactive_source_exact_unchanged(self):
args = update_args()
args["delta"][1] = -.01
result, _ = bridge.apply_eligibility(**args)
self.assertTrue(bridge.bit_equal(result[[1, 3, 4]], args["delta"][[1, 3, 4]]))
self.assertEqual(result[0], np.float32(-.00275))
def test_original_floor_clamps_and_does_not_reverse_sign(self):
args = update_args()
result, report = bridge.apply_eligibility(**args)
self.assertEqual(result[2], (-.25 * args["base_candidate"])[2])
args["delta"] = result
again, _ = bridge.apply_eligibility(**args)
self.assertEqual(again[2].view(np.uint32), result[2].view(np.uint32))
self.assertTrue(np.all(again <= 0))
# Original updated_edges counts attempted updates, including saturation.
self.assertEqual(report["original_report"]["updated_edges"], 2)
def test_all_original_compartments_are_literal_not_inferred(self):
args = update_args()
args["candidate_sources"] = np.full(4, 1, np.int32)
args["candidate_compartments"] = np.array(bridge.COMPARTMENTS)
args["delta"] = np.zeros(4, np.float32)
args["base_candidate"] = np.ones(4, np.float32)
for comp in bridge.COMPARTMENTS:
args["compartment"] = comp
result, _ = bridge.apply_eligibility(**args)
self.assertEqual(int(np.count_nonzero(result)), 1)
self.assertNotEqual(result[list(bridge.COMPARTMENTS).index(comp)], 0)
def test_update_does_not_mutate_inputs_and_returns_readonly(self):
args = update_args()
before = {k: v.copy() for k, v in args.items() if isinstance(v, np.ndarray)}
result, _ = bridge.apply_eligibility(**args)
for k, value in before.items():
self.assertTrue(bridge.bit_equal(args[k], value))
self.assertFalse(result.flags.writeable)
def test_invalid_units_dtypes_values_and_compartment_fail_closed(self):
bad = [("trace", np.array([1, .25, 0], np.float64)),
("trace", np.array([1, np.nan, 0], np.float32)),
("trace", np.array([1.1, 0, 0], np.float32)),
("candidate_sources", np.array([1, 1, 3, 8, 3], np.int32)),
("compartment", "PAM15"), ("d", -.1), ("d", .5), ("d", float("nan")),
("d", True), ("frozen", 1),
("base_candidate", np.zeros(5, np.float32)),
("delta", np.ones(5, np.float32)),
("delta", np.full(5, -.5, np.float32)),
("delta", np.full(5, -0., np.float32))]
for key, value in bad:
with self.subTest(key=key, value=value):
args = update_args()
args[key] = value
with self.assertRaises(ValueError):
bridge.apply_eligibility(**args)
def test_empty_candidate_subset_is_safe_but_not_claimed_full_mask(self):
args = update_args()
for key in ("candidate_sources", "candidate_compartments", "delta", "base_candidate"):
args[key] = args[key][:0]
result, report = bridge.apply_eligibility(**args)
self.assertEqual(result.shape, (0,))
self.assertFalse(report["complete_mask_identity_verified_by_this_function"])
if __name__ == "__main__":
unittest.main()
@@ -0,0 +1,275 @@
"""Pure synthetic inputs/AST tests; no Torch import, GPU, or brain execution."""
import ast
import hashlib
import json
from pathlib import Path
import tempfile
import types
import unittest
import time
import numpy as np
import adapter
import overlay
HERE = Path(__file__).absolute().parent
AJ = HERE.parent / 'apl-timing-lab-v1/gpu_timing.py'
class ArrayTests(unittest.TestCase):
def setUp(self):
self.ids = np.array([2, 7, 15], np.int64)
self.base32 = np.array([.275, 1.1, 2.75], np.float32)
def plan(self, delta=None):
if delta is None:
delta = np.zeros(3, np.float32)
return overlay.validate_arrays(self.ids, delta, self.ids, self.base32)
def test_zero_preserves_unrelated_signed_zero_and_original_bytes(self):
ids = np.array([0, 2, 7, 15, 17], np.int64)
base = np.array([-0., .000275, .0011, .00275, -1.], np.float64)
original = base.tobytes()
result, mapping = overlay.materialize_numpy(base, ids, np.zeros(5, bool), self.plan())
self.assertEqual(result.tobytes(), original)
self.assertEqual(base.tobytes(), original)
self.assertEqual(mapping['installed_nonzero_count'], 0)
self.assertEqual(len(mapping['rows']), 0)
self.assertFalse(np.shares_memory(result, base))
def test_negative_zero_delta_does_not_write(self):
plan = self.plan(np.full(3, -0., np.float32))
result, mapping = overlay.materialize_numpy(self.base32.astype(np.float64) * .001,
self.ids, np.zeros(3, bool), plan)
self.assertEqual(len(mapping['rows']), 0)
self.assertTrue(np.signbit(plan['plastic_delta_mv']).all())
def test_original_float32_floor_then_widen_and_multiply(self):
delta = np.float32(-.25) * self.base32
plan = self.plan(delta)
base_si = np.array([.000275, .0011, .00275], np.float64)
result, mapping = overlay.materialize_numpy(base_si, self.ids, np.zeros(3, bool), plan)
reference = np.add(base_si, np.multiply(delta.astype(np.float64), np.float64(.001)))
self.assertTrue(overlay.bit_equal(result, reference))
self.assertTrue(np.any(result.view(np.uint64) != (base_si * .75).view(np.uint64)))
self.assertEqual(mapping['installed_nonzero_count'], 3)
def test_global_id_mapping_fixture_intersection_and_missing_nonzero_reject(self):
plan = self.plan(np.array([0., -.1, 0.], np.float32))
ids = np.array([1, 7, 20], np.int64)
result, mapping = overlay.materialize_numpy(np.array([1., .002, -0.], np.float64), ids,
np.array([True, False, False]), plan)
np.testing.assert_array_equal(mapping['rows'], np.array([1], np.int64))
self.assertEqual(mapping['missing_candidate_count'], 2)
self.assertEqual(result[0].view(np.uint64), 0)
self.assertTrue(np.signbit(result[2]))
with self.assertRaises(ValueError):
overlay.materialize_numpy(np.array([1.], np.float64), np.array([1], np.int64), np.zeros(1, bool), plan)
def test_apl_overlap_sign_nonfinite_bad_mapping_fail_closed(self):
base = self.base32.astype(np.float64) * .001
for ids, values, apl in ((self.ids, base, np.array([1, 0, 0], bool)),
(self.ids[::-1], base, np.zeros(3, bool)),
(self.ids, -base, np.zeros(3, bool)),
(self.ids, np.array([np.nan, 1., 2.]), np.zeros(3, bool))):
with self.subTest(ids=ids), self.assertRaises(ValueError):
overlay.map_installation(values, ids, apl, self.plan())
def test_validation_bad_dtype_shape_sign_finite_bound_and_mask(self):
bad_deltas = [np.zeros(3, np.float64), np.zeros((3, 1), np.float32), np.zeros(2, np.float32),
np.array([.1, 0, 0], np.float32), np.array([np.nan, 0, 0], np.float32),
np.array([-np.inf, 0, 0], np.float32), np.array([-1., 0, 0], np.float32)]
for delta in bad_deltas:
with self.subTest(delta=delta), self.assertRaises(ValueError):
self.plan(delta)
for ids in (self.ids.astype(np.int32), self.ids[::-1], np.array([2, 2, 15], np.int64),
np.array([-1, 7, 15], np.int64), np.array([2, 7, overlay.EDGE_COUNT], np.int64)):
with self.subTest(ids=ids), self.assertRaises(ValueError):
overlay.validate_arrays(ids, np.zeros(3, np.float32), self.ids, self.base32)
with self.assertRaises(ValueError):
overlay.validate_arrays(self.ids, np.array([-.01, 0, 0], np.float32), self.ids)
def test_positive_original_base_and_bound_bits_readonly(self):
for base in (np.zeros(3, np.float32), -self.base32, self.base32.astype(np.float64),
np.array([np.inf, 1., 1.], np.float32)):
with self.assertRaises(ValueError):
overlay.validate_arrays(self.ids, np.zeros(3, np.float32), self.ids, base)
self.ids.flags.writeable = False
self.base32.flags.writeable = False
plan = self.plan()
self.assertFalse(plan['edge_id'].flags.writeable)
self.assertFalse(plan['plastic_delta_mv'].flags.writeable)
self.assertFalse(np.shares_memory(plan['base_candidate_mv'], self.base32))
lower = np.float32(-.25) * self.base32
too_low = lower.copy(); too_low[0] = np.nextafter(lower[0], np.float32(-np.inf))
with self.assertRaises(ValueError):
self.plan(too_low)
def test_chunked_expected_hash_matches_materialization(self):
ids = np.array([0, 2, 7, 15, 20], np.int64)
base = np.array([-0., .001, .002, .003, -1.], np.float64)
apl = np.array([False, False, False, False, True])
plan = self.plan(np.array([-.01, 0, -.2], np.float32))
result, mapping = overlay.materialize_numpy(base, ids, apl, plan)
for chunk in (1, 2, 3, 100):
self.assertEqual(overlay.expected_hashes(base, apl, mapping, chunk),
(overlay.raw_hash(base), overlay.raw_hash(result)))
class FileTests(unittest.TestCase):
def setUp(self):
self.temp = tempfile.TemporaryDirectory()
self.addCleanup(self.temp.cleanup)
self.root = Path(self.temp.name)
self.ids = np.arange(overlay.CANDIDATE_COUNT, dtype=np.int64)
self.base = np.full(overlay.CANDIDATE_COUNT, .275, np.float32)
np.save(self.root / 'mask.npy', self.ids)
np.save(self.root / 'base.npy', self.base)
def files(self, name='zero', embedded=False, base=True):
delta = np.zeros_like(self.base) if name == 'zero' else np.float32(-.25) * self.base
values = dict(edge_id=self.ids, plastic_delta_mv=delta)
if embedded:
values['base_candidate_mv'] = self.base
np.savez(self.root / 'overlay.npz', **values)
manifest = dict(schema=overlay.SCHEMA, overlay_name=name,
overlay_sha256=overlay.file_hash(self.root / 'overlay.npz'),
mask_path=str(self.root / 'mask.npy'), mask_sha256=overlay.file_hash(self.root / 'mask.npy'),
base_candidate_path=str(self.root / 'base.npy') if base else None,
base_candidate_sha256=overlay.file_hash(self.root / 'base.npy') if base else None,
aj_model_dir=str(self.root))
(self.root / 'manifest.json').write_text(json.dumps(manifest), encoding='utf-8')
return self.root / 'overlay.npz', self.root / 'manifest.json'
def test_full_mask_zero_optional_base_and_static_floor(self):
for name, embedded, base in (('zero', False, False), ('zero', True, True), ('static25', True, True)):
plan = overlay.load_overlay(*self.files(name, embedded, base))
self.assertEqual(len(plan['edge_id']), overlay.CANDIDATE_COUNT)
overlay.verify_inputs(plan)
def test_hash_tamper_and_wrong_count_reject(self):
paths = self.files()
(self.root / 'base.npy').write_bytes(b'not the anchored source')
with self.assertRaises(ValueError):
overlay.load_overlay(*paths)
np.save(self.root / 'base.npy', self.base)
np.save(self.root / 'mask.npy', self.ids[:-1])
paths = self.files()
with self.assertRaises(ValueError):
overlay.load_overlay(*paths)
def test_static25_needs_original_base_and_postload_tampering_is_detected(self):
with self.assertRaises(ValueError):
overlay.load_overlay(*self.files('static25', base=False))
paths = self.files()
plan = overlay.load_overlay(*paths)
(self.root / 'manifest.json').write_text('{}', encoding='utf-8')
with self.assertRaises(ValueError):
overlay.verify_inputs(plan)
class AstTests(unittest.TestCase):
def source(self):
if not AJ.is_file():
self.skipTest('Pinned AJ static source is not installed at its declared sibling path')
return AJ.read_bytes()
def test_exact_whole_tick_loop_and_only_one_preloop_insertion(self):
source = self.source()
transformed, audit = adapter.derive_ast(source)
original = next(node for node in ast.parse(source).body if isinstance(node, ast.FunctionDef) and node.name == 'run_gpu')
getloop = lambda function: next(node for node in ast.walk(function) if isinstance(node, ast.For) and
isinstance(node.target, ast.Name) and node.target.id == 'tick')
self.assertEqual(ast.dump(getloop(original), include_attributes=False), ast.dump(getloop(transformed), include_attributes=False))
hooks = [node for node in ast.walk(transformed) if isinstance(node, ast.Call) and
isinstance(node.func, ast.Name) and node.func.id == adapter.HOOK_NAME]
self.assertEqual(len(hooks), 1)
self.assertFalse(any(node is hooks[0] for node in ast.walk(getloop(transformed))))
self.assertTrue(audit['entire_tick_loop_ast_identical'])
self.assertEqual(audit['inserted_ast_statements'], 1)
def test_mutated_source_fails_even_if_loop_looks_plausible(self):
with self.assertRaises(ValueError):
adapter.derive_ast(self.source() + b'\n# unregistered change\n')
def test_compilation_new_namespace_no_fake_file_no_old_global_patch(self):
self.source()
# Compile only; the function is never called, so no Torch or GPU needed.
sealed = types.ModuleType('synthetic_sealed_namespace')
sealed.__file__ = str(AJ)
sealed.marker = object()
before = dict(sealed.__dict__)
hook = lambda *args: None
function, audit = adapter.compile_derived(sealed, hook)
self.assertEqual(sealed.__dict__, before)
self.assertNotIn(adapter.HOOK_NAME, sealed.__dict__)
self.assertIs(function.__globals__[adapter.HOOK_NAME], hook)
self.assertIs(function.__globals__['marker'], sealed.marker)
self.assertEqual(function.__globals__['__file__'], str(Path(adapter.__file__).absolute()))
self.assertNotEqual(function.__globals__['__file__'], sealed.__file__)
self.assertFalse(audit['fake_original_file_used'])
self.assertFalse(audit['original_module_globals_patched'])
def test_real_source_dependency_hashes_without_importing_gpu(self):
self.source()
proof = adapter.verify_sources(AJ.parent)
self.assertEqual({key: row['sha256'] for key, row in proof.items()}, adapter.PINS)
self.assertEqual(hashlib.sha256(AJ.read_bytes()).hexdigest(), adapter.AJ_SHA256)
def test_derived_hook_runs_after_apl_zero_and_before_any_state_tick(self):
self.source()
class StopBeforeBrain(BaseException):
pass
class Tensor:
def __init__(self, array):
self.array = np.array(array, copy=True)
def to(self, *, device, dtype):
return Tensor(self.array.astype(dtype))
def contiguous(self):
return self
def clone(self):
return Tensor(self.array)
def __setitem__(self, item, value):
self.array[item.array if isinstance(item, Tensor) else item] = value
torch_stub = types.SimpleNamespace(from_numpy=Tensor, float64=np.float64, int64=np.int64,
int32=np.int32, bool=bool, cuda=types.SimpleNamespace(is_available=lambda: True,
device_count=lambda: 1, get_device_name=lambda: 'synthetic RTX4090', reset_peak_memory_stats=lambda _: None))
graph = {'weights': np.array([.1, -.2], np.float64), 'nodes': np.array([3, 9], np.int32),
'edge_id': np.array([4, 12], np.int64), 'ptr': np.array([0, 1, 2], np.int64),
'dst': np.array([1, 0], np.int32), 'src': np.array([0, 1], np.int32)}
apl = types.SimpleNamespace(device='no-device', apl_globals=np.array([9], np.int32), metadata={})
sealed = types.ModuleType('synthetic_before_loop')
sealed.__file__ = str(AJ)
sealed.__dict__.update(Path=Path, time=time, np=np, torch=torch_stub, require=overlay.require,
source_audit=lambda _: {'scope': 'synthetic inherited AJ source'}, write_json=lambda *_: None,
load_inputs=lambda _: ({'apl_bundle_dir': 'unused', 'dt_ms': .1, 'steps': 2}, graph, {},
np.empty(0, np.int32), np.empty(0, np.int32), np.empty(0, np.int32), {}),
sealed_backend=lambda: types.SimpleNamespace(build_extension=lambda _: (None, {})),
sealed_apl=lambda: types.SimpleNamespace(LegacyAPL=lambda *_: apl))
observed = []
def hook(weights, actual_graph, mask, upload, out_dir, provenance):
self.assertTrue(overlay.bit_equal(weights.array, np.array([.1, 0.], np.float64)))
self.assertTrue(overlay.bit_equal(graph['weights'], np.array([.1, -.2], np.float64)))
np.testing.assert_array_equal(mask, [False, True])
observed.append(provenance)
raise StopBeforeBrain()
derived, _ = adapter.compile_derived(sealed, hook)
with tempfile.TemporaryDirectory() as directory:
with self.assertRaises(StopBeforeBrain):
derived(Path(directory), Path(directory) / 'new-output', Path(directory) / 'new-build')
self.assertEqual(len(observed), 1)
if __name__ == '__main__':
unittest.main()
@@ -0,0 +1,55 @@
"""Small independent checks of provenance/summary mechanics."""
import ast
from pathlib import Path
import tempfile
import unittest
import numpy as np
from prepare import old_base_candidate
from summarize import first_ticks, metrics
from run_suite import output_inventory, verify_completed
from context import save
class WorkflowTests(unittest.TestCase):
def test_old_expression_float32(self):
candidates = [Path(__file__).resolve().parent.parent / 'phase4c.py',
Path(__file__).resolve().parent.parent / 'models/male-cns-lif/phase4c.py']
source = next(p for p in candidates if p.is_file())
x = np.array([1, 2, 9, 19, 1234, 1048577], np.int64)
value, sha = old_base_candidate(x, source)
expected = x.astype(np.float32) * np.int8(1) * float(.275)
self.assertEqual(value.tobytes(), expected.tobytes())
self.assertEqual(len(sha), 64)
def test_first_tick_and_missing(self):
state = dict(step=np.array([0, 2, 3, 4], np.int32), neuron_idx=np.array([1, 2, 1, 2], np.int32))
np.testing.assert_array_equal(first_ticks(state, 4), [-1, 0, 2, -1])
def test_same_counts_event_change_not_hidden(self):
a = dict(step=np.array([0], np.int32), neuron_idx=np.array([1], np.int32),
counts=np.array([0, 1, 0], np.int32), v=np.zeros(3), g=np.zeros(3))
b = {k: v.copy() for k, v in a.items()}; b['step'][0] = 2
m = metrics(a, b, np.array([1], np.int32))
self.assertTrue(m['event_sequence_changed']); self.assertEqual(m['count_changed_cells'], 0)
self.assertEqual(m['first_spike_changed_cells'], 1); self.assertEqual(m['first_event_divergence_ms'], 0)
def test_extra_or_changed_output_rejected(self):
with tempfile.TemporaryDirectory() as temp:
folder = Path(temp)
save(folder / 'comparison.json', {'pass_all': True})
save(folder / 'summary.json', {'complete': True})
save(folder / 'output-hashes.json', output_inventory(folder))
verify_completed(folder)
save(folder / 'unexpected.json', {})
with self.assertRaises(AssertionError):
verify_completed(folder)
def test_exclusive_json(self):
with tempfile.TemporaryDirectory() as temp:
path = Path(temp) / 'value.json'; save(path, {})
with self.assertRaises(FileExistsError):
save(path, {})
if __name__ == '__main__':
unittest.main()
@@ -0,0 +1,220 @@
"""Synthetic AM workflow identity/dispatch tests; no old evidence or network."""
import builtins
import copy
import io
import json
import os
from pathlib import Path
import sys
import tempfile
from types import ModuleType
import unittest
from unittest.mock import Mock, patch
import run_suite as runner
class WorkflowIdentityTests(unittest.TestCase):
def setUp(self):
self.temp = tempfile.TemporaryDirectory()
self.addCleanup(self.temp.cleanup)
self.root = Path(self.temp.name).resolve()
self.exp = self.root / "experiments/new-am"
self.ak = self.root / "experiments/fake-ak"
self.patches = patch.multiple(runner, ROOT=self.root, EXP=self.exp, AK=self.ak)
self.patches.start()
self.addCleanup(self.patches.stop)
def fixture(self, stage="zero", repeat=0, name="synthetic-odor"):
row = dict(name=name, repeat=repeat, cohort="seed_validation")
case = self.ak / "cases" / row["cohort"] / name
case.mkdir(parents=True, exist_ok=True)
(case / "spec.json").write_bytes(b'{"synthetic":true}\n')
# This is a hash-only mock input, never parsed as scientific NPZ data.
(case / "requests.npz").write_bytes(b"synthetic-request-bytes")
overlays = self.exp / "overlays"
overlays.mkdir(parents=True, exist_ok=True)
(overlays / (stage + ".npz")).write_bytes((stage + "-synthetic-overlay").encode())
(overlays / (stage + ".json")).write_bytes((stage + "-synthetic-manifest").encode())
folder = self.exp / "gpu" / stage / (name + "-r" + str(repeat))
folder.mkdir(parents=True, exist_ok=False)
summary = dict(case=name, complete=True, pass_all=True, input_sha256={
key: runner.digest(case / key) for key in ("spec.json", "requests.npz")})
overlay = dict(complete=True, overlay_name=stage, input={
"overlay_sha256": runner.digest(overlays / (stage + ".npz")),
"manifest_sha256": runner.digest(overlays / (stage + ".json"))})
if stage == "zero":
mode = "zero"
left = self.ak / "gpu" / row["cohort"] / (name + "-r" + str(repeat))
elif repeat == 1:
mode = "repeat"
left = self.exp / "gpu" / stage / (name + "-r0")
else:
mode, left = "self", folder
report = dict(pass_all=True, overlay_name=stage, case_dir=str(case),
right=str(folder), left=str(left), mode=mode)
for key, value in (("summary.json", summary), ("overlay-audit.json", overlay),
("comparison.json", report)):
runner.save(folder / key, value)
runner.save(folder / "output-hashes.json", runner.output_inventory(folder))
return row, case, folder, report
@staticmethod
def replace_json(path, value):
# Mutations are deliberate corruptions of NEW temporary test fixtures.
path.write_text(json.dumps(value), encoding="utf-8")
def corrupt(self, folder, filename, field, value):
original = runner.read(folder / filename)
changed = copy.deepcopy(original)
target = changed
for key in field[:-1]:
target = target[key]
target[field[-1]] = value
self.replace_json(folder / filename, changed)
return original
def test_three_legitimate_identities_and_zero_repeat(self):
for stage, repeat in (("zero", 0), ("zero", 1), ("static25", 0), ("static25", 1)):
with self.subTest(stage=stage, repeat=repeat):
row, _, folder, _ = self.fixture(stage, repeat)
runner.verify_identity(folder, stage, row)
runner.verify_completed(folder, stage, row)
def test_wrong_case_and_cohort_fail_even_with_valid_hash_inventory(self):
row, _, folder, _ = self.fixture()
for altered in (dict(row, name="other-odor"), dict(row, cohort="novel_to_aj")):
with self.subTest(altered=altered), self.assertRaises((AssertionError, FileNotFoundError)):
runner.verify_identity(folder, "zero", altered)
self.corrupt(folder, "summary.json", ("case",), "other-odor")
self.replace_json(folder / "output-hashes.json", runner.output_inventory(folder))
with self.assertRaises(AssertionError):
runner.verify_completed(folder, "zero", row)
def test_wrong_stage_and_repeat_path_are_rejected(self):
row, _, folder, _ = self.fixture()
for stage, wrong_row in (("static25", row), ("zero", dict(row, repeat=1)),
("unknown", row), ("zero", dict(row, repeat=2))):
with self.subTest(stage=stage, row=wrong_row), self.assertRaises(AssertionError):
runner.verify_identity(folder, stage, wrong_row)
def test_overlay_stage_identity_and_two_input_hashes_are_required(self):
row, _, folder, _ = self.fixture("static25")
for field, value in ((("overlay_name",), "zero"), (("complete",), False),
(("input", "overlay_sha256"), "0" * 64),
(("input", "manifest_sha256"), "0" * 64)):
original = self.corrupt(folder, "overlay-audit.json", field, value)
with self.subTest(field=field), self.assertRaises(AssertionError):
runner.verify_identity(folder, "static25", row)
self.replace_json(folder / "overlay-audit.json", original)
def test_summary_completion_and_actual_case_hashes_are_required(self):
row, _, folder, _ = self.fixture()
for field, value in ((("complete",), False), (("pass_all",), False),
(("input_sha256", "spec.json"), "0" * 64),
(("input_sha256", "requests.npz"), "0" * 64)):
original = self.corrupt(folder, "summary.json", field, value)
with self.subTest(field=field), self.assertRaises(AssertionError):
runner.verify_identity(folder, "zero", row)
self.replace_json(folder / "summary.json", original)
def test_comparison_case_paths_mode_and_stage_are_required(self):
for stage, repeat in (("zero", 0), ("static25", 0), ("static25", 1)):
row, _, folder, _ = self.fixture(stage, repeat)
for field, value in ((("case_dir",), str(self.root / "wrong-case")),
(("right",), str(self.root / "wrong-output")),
(("left",), str(self.root / "wrong-reference")),
(("overlay_name",), "not-the-stage"),
(("mode",), "invalid-mode"), (("pass_all",), False)):
original = self.corrupt(folder, "comparison.json", field, value)
with self.subTest(stage=stage, repeat=repeat, field=field), self.assertRaises(AssertionError):
runner.verify_identity(folder, stage, row)
self.replace_json(folder / "comparison.json", original)
def test_self_report_cannot_substitute_for_repeat(self):
row, _, folder, _ = self.fixture("static25", 1)
report = runner.read(folder / "comparison.json")
report.update(mode="self", left=str(folder))
self.replace_json(folder / "comparison.json", report)
self.replace_json(folder / "output-hashes.json", runner.output_inventory(folder))
with self.assertRaises(AssertionError):
runner.verify_completed(folder, "static25", row)
def test_recompute_must_match_full_stored_report(self):
row, _, folder, report = self.fixture("static25", 1)
with patch.object(runner, "compare_expected", return_value=copy.deepcopy(report)) as compare:
runner.verify_completed(folder, "static25", row, recompute=True)
compare.assert_called_once_with("static25", row, folder)
for result in (dict(report, pass_all=False), dict(report, newly_detected_difference=True)):
with patch.object(runner, "compare_expected", return_value=result), self.assertRaises(AssertionError):
runner.verify_completed(folder, "static25", row, recompute=True)
def test_partial_folder_is_preserved_without_attempted_comparison(self):
row, _, folder, _ = self.fixture()
(folder / "output-hashes.json").unlink() # Deliberately incomplete NEW fixture.
before = {p.name: p.read_bytes() for p in folder.iterdir()}
with patch.object(runner, "compare_expected") as compare, self.assertRaises(FileNotFoundError):
runner.verify_completed(folder, "zero", row, recompute=True)
compare.assert_not_called()
self.assertEqual(before, {p.name: p.read_bytes() for p in folder.iterdir()})
def test_compare_expected_zero_dispatches_to_corresponding_ak_repeat(self):
self.assert_dispatch("zero", 0)
self.assert_dispatch("zero", 1)
def test_compare_expected_static_repeat_dispatches_to_r0(self):
self.assert_dispatch("static25", 1)
def test_compare_expected_static_primary_uses_self_validation(self):
self.assert_dispatch("static25", 0)
def assert_dispatch(self, stage, repeat):
fake = ModuleType("comparison")
fake.compare_runs = Mock(return_value={"marker": "pair"})
fake.validate_run = Mock(return_value={"marker": "single"})
row = dict(name="synthetic", cohort="novel_to_aj", repeat=repeat)
folder = self.exp / "gpu" / stage / (row["name"] + "-r" + str(repeat))
case = self.ak / "cases" / row["cohort"] / row["name"]
with patch.dict(sys.modules, {"comparison": fake}):
result = runner.compare_expected(stage, row, folder)
if stage == "zero":
reference = self.ak / "gpu" / row["cohort"] / (row["name"] + "-r" + str(repeat))
fake.compare_runs.assert_called_once_with(case, reference, folder, mode="zero")
fake.validate_run.assert_not_called()
self.assertEqual(result, {"marker": "pair"})
elif repeat:
reference = self.exp / "gpu" / stage / (row["name"] + "-r0")
fake.compare_runs.assert_called_once_with(case, reference, folder, mode="repeat")
fake.validate_run.assert_not_called()
self.assertEqual(result, {"marker": "pair"})
else:
fake.validate_run.assert_called_once_with(case, folder)
fake.compare_runs.assert_not_called()
self.assertEqual(result, {"marker": "single"})
# No output_path was passed: the comparator cannot write into evidence.
def test_preflight_sets_cuda_environment_without_torch_or_network(self):
imported = builtins.__import__
def guarded_import(name, *args, **kwargs):
if name == "torch" or name.startswith("torch."):
self.fail("preflight imported Torch")
return imported(name, *args, **kwargs)
def response(url, timeout):
self.assertEqual(os.environ["CUDA_VISIBLE_DEVICES"], runner.CFG["gpu_uuid"])
self.assertEqual(os.environ["CUDA_HOME"], "/usr/local/cuda")
self.assertEqual(os.environ["TORCH_CUDA_ARCH_LIST"], "8.9")
self.assertEqual(timeout, 5)
return io.BytesIO(b'{"queue_running":[],"queue_pending":[]}')
with patch.dict(os.environ, {"PATH": "synthetic-original-path"}), \
patch("builtins.__import__", side_effect=guarded_import), \
patch.object(runner.urllib.request, "urlopen", side_effect=response) as urlopen:
runner.preflight()
self.assertEqual(urlopen.call_count, 3)
self.assertTrue(os.environ["PATH"].endswith("synthetic-original-path"))
if __name__ == "__main__":
unittest.main()
@@ -0,0 +1,47 @@
"""Old deterministic-v2 references, into new output paths only."""
import sys
import time
import numpy as np
import pandas as pd
import yaml
from context import ROOT, EXP, check, save, bit_equal
from run_suite import preflight
def main():
check(full=True)
assert not (EXP / 'regression/frozen-five.json').exists()
preflight()
runtime_path = ROOT / 'models/male-cns-lif/deterministic-runtime-v2'
pc = yaml.safe_load((runtime_path / 'phase4p.yaml').read_text())
sys.path.insert(0, str(ROOT / 'models/male-cns-lif'))
sys.path.insert(0, str(runtime_path))
import torch
import phase4p
assert torch.cuda.mem_get_info()[0] > 2 * 1024**3
torch.cuda.reset_peak_memory_stats()
started = time.perf_counter()
runtime = phase4p.CanonicalRuntime(pc, runtime_path, EXP)
rows = []
for spec in pc['reference_trials']:
preflight()
reference_dir = ROOT / 'experiments/phase4p-deterministic-runtime/phase4c-v2/reference' / spec['name']
events = pd.read_parquet(reference_dir / 'spike-events.parquet')
reference = dict(step=events.step.to_numpy(), neuron_idx=events.neuron_idx.to_numpy(),
counts=np.load(reference_dir / 'per-neuron-spike-counts.int32.npy'),
v=np.load(reference_dir / 'final-voltage.float32.npy'), g=np.load(reference_dir / 'final-g.float32.npy'))
result = runtime.run(np.flatnonzero(runtime.pops[spec['population']]), spec['rate_hz'], spec['seed'], spec['duration_ms'])
row = dict(trial=spec['name'], exact={key: bool(bit_equal(value, result[key])) for key, value in reference.items()},
dtype_shape={key: dict(reference_dtype=str(value.dtype), actual_dtype=str(result[key].dtype),
reference_shape=list(value.shape), actual_shape=list(result[key].shape)) for key, value in reference.items()},
wall_seconds=result['metrics']['wall_seconds'])
rows.append(row); print(row, flush=True)
passed = len(rows) == 5 and all(all(row['exact'].values()) for row in rows)
save(EXP / 'regression/frozen-five.json', dict(pass_all=passed, trials=rows,
wall_seconds=time.perf_counter() - started, peak_allocated_vram=int(torch.cuda.max_memory_allocated()),
scope='Old frozen deterministic-v2 references; not a claim D18 equals old runtime'))
assert passed
if __name__ == '__main__':
main()
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,13 @@
# Phase 4AM — whole-brain plastic interface
Status: `PASS-EXACT-WHOLEBRAIN-PLASTIC-INTERFACE-NOT-LEARNING`.
All 144 zero-overlay runs reproduce sealed AK D18 exactly. All 120 fixed-overlay primary runs and 24 repeats are retained.
The fixed overlay is the original float32 25% floor, added through the declared float64 SI bridge. No training occurred.
- novel_to_aj/matched_energy: KC event changes 30/30; MBON event changes 30/30; mask_recipient_MBON event changes 30/30; DAN event changes 30/30; MBON_downstream event changes 30/30; descending event changes 30/30; motor event changes 30/30.
- novel_to_aj/physiological: KC event changes 30/30; MBON event changes 30/30; mask_recipient_MBON event changes 30/30; DAN event changes 30/30; MBON_downstream event changes 30/30; descending event changes 30/30; motor event changes 30/30.
- seed_validation/matched_energy: KC event changes 30/30; MBON event changes 30/30; mask_recipient_MBON event changes 30/30; DAN event changes 30/30; MBON_downstream event changes 30/30; descending event changes 30/30; motor event changes 30/30.
- seed_validation/physiological: KC event changes 30/30; MBON event changes 30/30; mask_recipient_MBON event changes 30/30; DAN event changes 30/30; MBON_downstream event changes 30/30; descending event changes 30/30; motor event changes 30/30.
Old artifacts and five deterministic-v2 references pass integrity/regression. This does not complete the learning goal.
@@ -0,0 +1,16 @@
{
"status": "PASS-EXACT-WHOLEBRAIN-PLASTIC-INTERFACE-NOT-LEARNING",
"zero_overlay_exact": true,
"static25_repeat_exact": true,
"primary_trials_per_stage": 120,
"repeats_per_stage": 24,
"old_integrity_pass": true,
"frozen_five_reference_pass": true,
"frozen_eligibility_and_mask_unchanged": true,
"base_weights_unchanged": true,
"training": false,
"learned_candidate": false,
"scientific_summary_sha256": "03f229fc0768d38bb7c2a3c558dbd68c2c3a622cbf96b1b16aef2819b6b67b77",
"payload_bytes_before_manifest": 10251867790,
"next_required": "Separately preregister finite olfactory paired/control conditioning; no automatic learning PASS"
}
@@ -0,0 +1,876 @@
{
"stage": "static25",
"pass_all": true,
"trials": 144,
"primary_trials": 120,
"technical_repeats": 24,
"completed": [
{
"name": "seed_validation-physiological-00-s1073741825",
"repeat": 0,
"output_hashes_sha256": "74748bb4cde4769caa31ecc7c888e9e6192fffc022deee94e4378573d0dbc9cc",
"comparison_sha256": "becda112d4f7576318e2a825daf8f049eb3916c964252511963779899228974c"
},
{
"name": "seed_validation-physiological-00-s1073741825",
"repeat": 1,
"output_hashes_sha256": "7b52f5eef241f467a4d9a60d6bcddb7613d20d0122e9a557aaee7509abbbb99c",
"comparison_sha256": "965ca4ba1192f1638686e55f51eed2d09d4226008a3622cb5a7655b659d6040b"
},
{
"name": "seed_validation-physiological-00-s1073741826",
"repeat": 0,
"output_hashes_sha256": "4d0b785f2076e290bde103d6e8aa0362af661a04264bdd5c82f09319f410a69d",
"comparison_sha256": "292b9785eeb3075c59cd22c5c04ac08acca19286c74b698d1a6d1a7caf3d4142"
},
{
"name": "seed_validation-physiological-00-s1073741827",
"repeat": 0,
"output_hashes_sha256": "01fbbc12dd2fd0398adc597eb851c8386d0d83b2455badd970814d7edf9d85bb",
"comparison_sha256": "bb5c06645388e472d4f71f0959ce5dc0706c7bf7dccc5f88d9034bceda306326"
},
{
"name": "seed_validation-physiological-00-s1073741828",
"repeat": 0,
"output_hashes_sha256": "f727aebba75e10d97a55a421a4a66d52b909aa66e00e0c1afc3c82f868326a84",
"comparison_sha256": "857dff4d9f82a321ae0490cfdf1f8312fede211fa00e8c7a4716420e2428b3c0"
},
{
"name": "seed_validation-physiological-00-s1073741829",
"repeat": 0,
"output_hashes_sha256": "d8eab25b7119b959542957058c66c7ffc7472502a5250060c39ad6130d51c534",
"comparison_sha256": "f88080428725c6f710c6b278c2d383d81fba12f57c2a7299d1a28777c7674500"
},
{
"name": "seed_validation-physiological-01-s1073741825",
"repeat": 0,
"output_hashes_sha256": "66d4bf336c9fdb99894afbe654772bd512dd8046467745238d8877c8b71d013a",
"comparison_sha256": "a901571a7335f8a1a2dffe243e04ef64269780db67b033a356baf51fe7cda9e0"
},
{
"name": "seed_validation-physiological-01-s1073741825",
"repeat": 1,
"output_hashes_sha256": "4b0c84f85478e7d19d5aad4e98da1653fa25f75f74b24961c2d0d45e294e04ff",
"comparison_sha256": "0839003d2be8b4d08f72bab681669c3f7f5fbc18010d23ea5654d9f9e62b8f4e"
},
{
"name": "seed_validation-physiological-01-s1073741826",
"repeat": 0,
"output_hashes_sha256": "d181f7d3cd50e88f70c3685ed0797ba8a4fdbf8a310655d3fc8687d6b16b0ec1",
"comparison_sha256": "09dcd228438492b1385682d4badcf3410f95a06e55305896bb964334fc067556"
},
{
"name": "seed_validation-physiological-01-s1073741827",
"repeat": 0,
"output_hashes_sha256": "a6e71badaff5f108e3f2bbd8a760735a8e02f770f3cc6fb00a915ee69026b8ea",
"comparison_sha256": "1ded28695b51d86067c2b2f9affbc835f9b0d1679869cb7e8761fbae95866ece"
},
{
"name": "seed_validation-physiological-01-s1073741828",
"repeat": 0,
"output_hashes_sha256": "37b717eb71c6f4bc3f0b0c9b492eafe37d3d0c4ad51aeafe434b849ffae47797",
"comparison_sha256": "507f396badcd7e0165c4933f6b5ab56ae15d9807d887a233cb4d424cb87448aa"
},
{
"name": "seed_validation-physiological-01-s1073741829",
"repeat": 0,
"output_hashes_sha256": "70a6504fc56259765fb766e8f23892d1220e136ccd970896c1131ef32603f5da",
"comparison_sha256": "901351ba4afaaa4dfe986db341360837168961e9ff905380346dd8955e7d8a29"
},
{
"name": "seed_validation-physiological-02-s1073741825",
"repeat": 0,
"output_hashes_sha256": "5590ecd251ca33218f6b397b10ab06617a91c480d8db23485f53668b92c186d8",
"comparison_sha256": "a1cd9cdadbfd8d9201a5dc130a6c8250f32a9367830845b3eed5572a7fe04148"
},
{
"name": "seed_validation-physiological-02-s1073741825",
"repeat": 1,
"output_hashes_sha256": "63d3e39062961cb155fd25da9f34563be8ab0a41fc93ca00e9d3d6e1d5b8a3d9",
"comparison_sha256": "b5a8e6370efcf78f8e80f706fe207627d6b108806ff3fff951094e2c086c7180"
},
{
"name": "seed_validation-physiological-02-s1073741826",
"repeat": 0,
"output_hashes_sha256": "8be3fce7e633b44ce92a46a597e07e5d9c2415b850890c40bb2eb8a8efa1b464",
"comparison_sha256": "39bc0e0e0619821679f76d7d6af68c7890218b8423a4231190ec58133d05a516"
},
{
"name": "seed_validation-physiological-02-s1073741827",
"repeat": 0,
"output_hashes_sha256": "bc84cd7f4c7644603300912f40a019077b16c277c2e373528214ad26ef527780",
"comparison_sha256": "1b198dfb0694d67538829b1af3f069e532cc227bc4759f899fbc204cf0df827e"
},
{
"name": "seed_validation-physiological-02-s1073741828",
"repeat": 0,
"output_hashes_sha256": "99d31d4449843191f1c2ba195b49c380576906d614d1126f40541f55428c7fc2",
"comparison_sha256": "d8fb12ed0263777b322fc2870cc0ea1c4bfbd844e919a735f590a9db2cfb936e"
},
{
"name": "seed_validation-physiological-02-s1073741829",
"repeat": 0,
"output_hashes_sha256": "96bd0b161c055244b607152bb9a15909228b223b0e1a7277248f09f51bcd289e",
"comparison_sha256": "ccc641ddd21e3d64209a9d844b3b5dc4f4d91dedb9aaaac42fec345b2e93614d"
},
{
"name": "seed_validation-physiological-03-s1073741825",
"repeat": 0,
"output_hashes_sha256": "869b395b670a992e98c322bf064e841dc30432165a8d1ecb861e3ac58be401c8",
"comparison_sha256": "ad5c81b2d9fd682749243b27d7f9e201fe17bbfd238e21224f2b5cf8a6b90f93"
},
{
"name": "seed_validation-physiological-03-s1073741825",
"repeat": 1,
"output_hashes_sha256": "edde2b957942cc297018ada6d3d6c92ced99fa1c554066a603d24f6914f9d414",
"comparison_sha256": "dab44748643b24ce93eaf47c733b0b09dbd0165b3d27991684c7cdaf63b3278b"
},
{
"name": "seed_validation-physiological-03-s1073741826",
"repeat": 0,
"output_hashes_sha256": "279194d352d11f1aa21da540711c501d28a40d367f236d87fbaa757426396fbe",
"comparison_sha256": "30651c48a5ee91ed28bfc8d398855abcb7c066361a771670e2d0527a7186d3ce"
},
{
"name": "seed_validation-physiological-03-s1073741827",
"repeat": 0,
"output_hashes_sha256": "b2edcbc24dac28b36ecaaad6e3b30318a48cf860a26ef15156d36eec5dcb28ae",
"comparison_sha256": "b45bfaf95506f6ce55b2eea1c70fbd4e6b836fc4040ee27bfe5f5ff4ee283cd8"
},
{
"name": "seed_validation-physiological-03-s1073741828",
"repeat": 0,
"output_hashes_sha256": "5800a8fe32f393004bab05ee670946a97784dd48263fcc556dff55b6fffd1ed6",
"comparison_sha256": "3dd4283c3e0e9fcbeaf9f474faed387db7f89ee3f2205814f39214ed58e92af1"
},
{
"name": "seed_validation-physiological-03-s1073741829",
"repeat": 0,
"output_hashes_sha256": "30ec65435501e3572f68191f531e857abf54addefc02ae5a9f3fc37c8e2979d5",
"comparison_sha256": "ca55040e0d4b95f506f365197bbc60766b6939421d6d7cdd8cabb49fdf188955"
},
{
"name": "seed_validation-physiological-04-s1073741825",
"repeat": 0,
"output_hashes_sha256": "3f00fd2b12ba3aec932b51514e14b61c3636813999b851e7a23310d8b104398d",
"comparison_sha256": "cfe6b29cb53b7e6bd9065c9f71a78010b1c64da1ed0462e6667ec2ce0ad40d8b"
},
{
"name": "seed_validation-physiological-04-s1073741825",
"repeat": 1,
"output_hashes_sha256": "048465eb273228bf72a9990f35e64bf4e8eff41d2b0222afc679d46f771f787d",
"comparison_sha256": "3cf608e34d908d86f94a0364c887220caff919f962a81b635879032cd15597f4"
},
{
"name": "seed_validation-physiological-04-s1073741826",
"repeat": 0,
"output_hashes_sha256": "51f21ec41219c963a1529e0360d79ec342537023013dcbec7e129045b69cb499",
"comparison_sha256": "5771a13bfdd2de774f3b5e3dbc4a2b137bdb140943b4380cf8f1892dd8fbeac4"
},
{
"name": "seed_validation-physiological-04-s1073741827",
"repeat": 0,
"output_hashes_sha256": "9a2b575d32c5dddfa8473e7ad90388cdb2dc869865ffdd281eeb496c609bdaf1",
"comparison_sha256": "3e539223d37d1eb0c51f86aba86b81674082cff02b4a67d02dd1e6cae22f939e"
},
{
"name": "seed_validation-physiological-04-s1073741828",
"repeat": 0,
"output_hashes_sha256": "f46312bc760a4c1d873b293f0ec20a922c2149dd7b616a11666a6348ba298f92",
"comparison_sha256": "2887e7041528a8090c67434c2504ffe2869e37ccd0021d81c5c0c268b3e0a54f"
},
{
"name": "seed_validation-physiological-04-s1073741829",
"repeat": 0,
"output_hashes_sha256": "2e810c31a6c10fe7ce11b1ed0c0797687675402940927901c8efa144bf58da33",
"comparison_sha256": "fdb88dd9afdb254a68fe1ee42788722a326e43bfac40ab40f663218625574a69"
},
{
"name": "seed_validation-physiological-05-s1073741825",
"repeat": 0,
"output_hashes_sha256": "1558c52da2781bf14da802e000808c7010067465d96e9b647ebc03ad501c39bd",
"comparison_sha256": "8eafb2cb89ef6bd9e9a67321e884843fd7569648fd42555a5097ced63d118842"
},
{
"name": "seed_validation-physiological-05-s1073741825",
"repeat": 1,
"output_hashes_sha256": "c65fbcaf0cbfe9b89be0a71c520aa5fbd1d90af989945bf7fc8d1530bd354621",
"comparison_sha256": "b619d51261d6abd429463e75b7cc182934a95cf5f87af7a19be0b0265ff2cb80"
},
{
"name": "seed_validation-physiological-05-s1073741826",
"repeat": 0,
"output_hashes_sha256": "22b77c852999143ccd19dd8afbbfcf49fdabbad510f85c8e9ee1f5044d04cc93",
"comparison_sha256": "773f2b7093e0e3e08b99b6cad5e113e82e6a0920b96fcfe41d5d74f58acc7015"
},
{
"name": "seed_validation-physiological-05-s1073741827",
"repeat": 0,
"output_hashes_sha256": "21a757166bd495cb882eb7edd27e48526aa0b44acf527b048301fcedf05682a1",
"comparison_sha256": "f81b78d935508e4fa2b20a1d10e9db26fe00e9049dada0bfd081f3535d6d1a39"
},
{
"name": "seed_validation-physiological-05-s1073741828",
"repeat": 0,
"output_hashes_sha256": "b7aed5d88ab149c97f52968e13a6b85865359b537a1c7726dbdb89b589a66ec0",
"comparison_sha256": "32ecd63aef8cd8744a48e201b05f29b02be751d5854ce4fda849cb45a55cd264"
},
{
"name": "seed_validation-physiological-05-s1073741829",
"repeat": 0,
"output_hashes_sha256": "e4dfd579f7b5bb8b22319fc4406b1d88332a17b2207a5894fe525796c6c92524",
"comparison_sha256": "9f611e858c69d01f3b7f114885997807e7d0a96dddfc95aea59fdca8d4f5bbc6"
},
{
"name": "seed_validation-matched_energy-00-s1073741825",
"repeat": 0,
"output_hashes_sha256": "7213c4f1cd2f37dcba48c0e5a3afef5ea7a0bd2fbd8841a92513300fa849915d",
"comparison_sha256": "e9dae535c08020912ea78ab853b5d4cd9edb8536271070a13fa9d342b40f9752"
},
{
"name": "seed_validation-matched_energy-00-s1073741825",
"repeat": 1,
"output_hashes_sha256": "52adddb64623a9d89ed2435363c4bbb3812e821a2207c47f464196ad26b99d1e",
"comparison_sha256": "93f916008932cb0c401e9e30ed3165c595ef2560a98cc7a37c5318b9da4292fd"
},
{
"name": "seed_validation-matched_energy-00-s1073741826",
"repeat": 0,
"output_hashes_sha256": "42073473cfe0c02a2082cfe30cb3354fa2a3df2157e6a636b98f78148099f47c",
"comparison_sha256": "436f31ff9e07c23534c69b3aa8204f12c1c08847dbb52fe7a237eddf30f39600"
},
{
"name": "seed_validation-matched_energy-00-s1073741827",
"repeat": 0,
"output_hashes_sha256": "6f1230e9b83e6800d21657bb4455d44fef7e70b31e5ebc5cc6d7a603778bb764",
"comparison_sha256": "14aac8ffca17220c7ff48caf81a114ba90389afdae2c4bd42fde8967c4ed8bfe"
},
{
"name": "seed_validation-matched_energy-00-s1073741828",
"repeat": 0,
"output_hashes_sha256": "2cbabae5183d81e8c4d537ed7a8998499feae17db86cd784862bd693b98066da",
"comparison_sha256": "2d1844be4a2cc92a33f09652553eed6e0daf20bb2a6defe452880e376b001443"
},
{
"name": "seed_validation-matched_energy-00-s1073741829",
"repeat": 0,
"output_hashes_sha256": "55ee30fb525e48717961fac843c6898ae03ced5c33450882d3bfa2ecc55dce4e",
"comparison_sha256": "40824bb136219f4301bb566fee77258ff727a063b040ebf4d40401ceb90ba3fe"
},
{
"name": "seed_validation-matched_energy-01-s1073741825",
"repeat": 0,
"output_hashes_sha256": "ed326060da57daed926689e0e65f47beaa4838174d947b73e8ddacc1adc6acf8",
"comparison_sha256": "7ab926f5ce5507fda96d475ffad19ff65accece0451051959d89a897b3210bcd"
},
{
"name": "seed_validation-matched_energy-01-s1073741825",
"repeat": 1,
"output_hashes_sha256": "24c28a5ab53054abd43b27b17a36b56a38ffdfc7fc3889035f4da92a8aefc975",
"comparison_sha256": "464263ca54a6b07f4a1513a8b04553b263053362cfeff09f4ca3ad1c18338f58"
},
{
"name": "seed_validation-matched_energy-01-s1073741826",
"repeat": 0,
"output_hashes_sha256": "8d91f1f620ba9cf7954b8e3a3c2f3df1c4163cee159faf6b9ac78aa43d34694f",
"comparison_sha256": "fda37c3278852c09ab1743f7ad222b71afa585e111fae3dc0bd318cae73b4235"
},
{
"name": "seed_validation-matched_energy-01-s1073741827",
"repeat": 0,
"output_hashes_sha256": "024ba0c397d9c1900c9b4a6367abffa0c481d91cda9fa8aad16393ea964ae44c",
"comparison_sha256": "661e86fa13cb65841c05729a61c4c097e69e4039e2b4dab37649c491eb517c8a"
},
{
"name": "seed_validation-matched_energy-01-s1073741828",
"repeat": 0,
"output_hashes_sha256": "1df0e4a2f28722aafd30c9b5997528c2f6165686752ffebb865c9636ede8ab4f",
"comparison_sha256": "022ae6d248b0874068d56fe77e3a61966a149274f6979af4656b35fbcccf25be"
},
{
"name": "seed_validation-matched_energy-01-s1073741829",
"repeat": 0,
"output_hashes_sha256": "855b811dcef3145488d1024b6441ca277ce10824679a5d049ee8436087bb4779",
"comparison_sha256": "6ab8320e036b321e4252992c22c637a7864a53b86e8408a923e171eded6566e0"
},
{
"name": "seed_validation-matched_energy-02-s1073741825",
"repeat": 0,
"output_hashes_sha256": "fa068ed61208655ad46024002af13d77b76f06669ed296cf6d42dd53a48fdc60",
"comparison_sha256": "a775d2a12fd99a2952caa948981b8036e8698a11394a175539a325ec9b0f1d55"
},
{
"name": "seed_validation-matched_energy-02-s1073741825",
"repeat": 1,
"output_hashes_sha256": "e6b228e5befc6940a360739c499ca7756b28e2de160f28f27a1eae3bb82cffae",
"comparison_sha256": "312e363edb302cd8e71e75411398f28f0b96f110985072e5ad00c3a4f58e3694"
},
{
"name": "seed_validation-matched_energy-02-s1073741826",
"repeat": 0,
"output_hashes_sha256": "d97e51dc01721abe62dcd5d9e672685c0986bc17a36353abea6498b9bb59b611",
"comparison_sha256": "cbcf30fc3e3ca21467de634ab90beb7afc07f71d2ee7205e5ac3fb7a9d868c03"
},
{
"name": "seed_validation-matched_energy-02-s1073741827",
"repeat": 0,
"output_hashes_sha256": "84298fa64483f64c7dd758e1efadc4423db725e35bd1d0002dd5f803fdb97da6",
"comparison_sha256": "5b24f36a067a0b8529430e08a379fde9b4ab0ef09ecaff21f28159bf490709d3"
},
{
"name": "seed_validation-matched_energy-02-s1073741828",
"repeat": 0,
"output_hashes_sha256": "8bbc9261fa71b99f166a942b95c36e4f5af458c8870538dbc46782bef5ed3542",
"comparison_sha256": "d42fbc3d6dd920c6d65aebb830e9c70109144faed523233bff3fc143ef105939"
},
{
"name": "seed_validation-matched_energy-02-s1073741829",
"repeat": 0,
"output_hashes_sha256": "375bb0e8874e191848ad2db4c6bed20ff2cd49d39685c459a0101272d7936951",
"comparison_sha256": "985151f91983349224cf7988bbb0189b5551fd41c0c80cfb62240711e12692c4"
},
{
"name": "seed_validation-matched_energy-03-s1073741825",
"repeat": 0,
"output_hashes_sha256": "3b35a6f97c9e25284eef40767d0079103412c4e891631cb67796ee7a7bc49b85",
"comparison_sha256": "04823dfc4229b0c1fd28a9f02f1fa9be6163881bcc13b98db245e7b59040a302"
},
{
"name": "seed_validation-matched_energy-03-s1073741825",
"repeat": 1,
"output_hashes_sha256": "219ad369e48c9205f38dff5e51de055dec2c119d25be80128a6742ebd32f3be1",
"comparison_sha256": "91e19ae4af258312773e76d28ed6115de79cf8506d4fa89bd47c28cb5d2b0d47"
},
{
"name": "seed_validation-matched_energy-03-s1073741826",
"repeat": 0,
"output_hashes_sha256": "01b8c3f1d7daad952aeba34b22379b8b6c964ccedfbfb4c295ed11f23fa74cf2",
"comparison_sha256": "f37dddb95ab6a588e25e239ba68a85a20d5aaa118bf65ec039609e18c547a7d1"
},
{
"name": "seed_validation-matched_energy-03-s1073741827",
"repeat": 0,
"output_hashes_sha256": "18bf8a4eae64419ce9f20647c1ab387204fb1c72f0bec7643b999b7c75f983ee",
"comparison_sha256": "26fa089154762025ec8473a9bd87fa2a746caadd2df969092cfd652c61d6def3"
},
{
"name": "seed_validation-matched_energy-03-s1073741828",
"repeat": 0,
"output_hashes_sha256": "44aa368562058887658bb623508bce2a7ad514e71d2350b5dc413cbffe3d324f",
"comparison_sha256": "74ab5ffe02fd2a975edcbe0a1546428d1ebdb0254016b60728e096f96082ed6a"
},
{
"name": "seed_validation-matched_energy-03-s1073741829",
"repeat": 0,
"output_hashes_sha256": "dc792054e67e08a4300d7949cf3c930ca372ed24e927be14908a35123c05273c",
"comparison_sha256": "247d16b34213d79e17f6f727d46a7c7d64830919bd861513e6bdd790022cd83c"
},
{
"name": "seed_validation-matched_energy-04-s1073741825",
"repeat": 0,
"output_hashes_sha256": "5dae42e9da159ec93a2a5818daf530a5057be925cb0760e7ca71508ed62da83b",
"comparison_sha256": "73826a7afd63c190685b816189c2b82760cc2883ad7a27009becf6a87c77461f"
},
{
"name": "seed_validation-matched_energy-04-s1073741825",
"repeat": 1,
"output_hashes_sha256": "45c2941f28b726306e95fa5a3f4b158025e0f09fbcdcc1ba77a7ed6a090e5bf1",
"comparison_sha256": "16393e16e5c93047a8f48fc062e915abbc3c2fb341f7ebc88013a2ef88137728"
},
{
"name": "seed_validation-matched_energy-04-s1073741826",
"repeat": 0,
"output_hashes_sha256": "ba926618e58dfe1af01c9f85c6f97754d7b9e27f19a7c5eee825f7b1372aab22",
"comparison_sha256": "a15606e92905d5896776bb0a09b599057bb847231e12f9f3d6c6d507b52fde96"
},
{
"name": "seed_validation-matched_energy-04-s1073741827",
"repeat": 0,
"output_hashes_sha256": "9b12ae9c5a9b3edeb91fabadfc34c991fcd52b78af25856b03acc171167a425b",
"comparison_sha256": "23c6c473b46bd891668741c2018e69e6eb7cc50806a2b0b55c44560f04c0e505"
},
{
"name": "seed_validation-matched_energy-04-s1073741828",
"repeat": 0,
"output_hashes_sha256": "a3b60e60a70a0514bac781a74fea076ca448812fcdc9b2468125fb5dd2696717",
"comparison_sha256": "d917fd1383aeb1ca245a6adc0df598613d2b1f3ba303de8751fb3f2233f44044"
},
{
"name": "seed_validation-matched_energy-04-s1073741829",
"repeat": 0,
"output_hashes_sha256": "b21ef86c4b0df496cfaf4017bdc100f1da650fe7c6e3938c6444f0054c526354",
"comparison_sha256": "80d487437e19810b7fce14ae26ae0f18621e7934e10176f08b6529bdccd81701"
},
{
"name": "seed_validation-matched_energy-05-s1073741825",
"repeat": 0,
"output_hashes_sha256": "2b5a8e90dcc502644376b053c91c04fce4674e1fec92442eeb4d00f3a82eff9e",
"comparison_sha256": "b5f8a40466bc51013569a1d31213ed22db8e6531bc0c76e7ddc460d76517c0f0"
},
{
"name": "seed_validation-matched_energy-05-s1073741825",
"repeat": 1,
"output_hashes_sha256": "452a2ab6d30cbab0ce16fdec72026d6c7f66f425f5c5f131a4b9aaf7ad825c37",
"comparison_sha256": "dc66df76bc45434033d071a41337986d721078399e1d985daf0ccea3b2d430e8"
},
{
"name": "seed_validation-matched_energy-05-s1073741826",
"repeat": 0,
"output_hashes_sha256": "a6e8e79a7c05b60666f1a4abab6bc1a5eab284dff6355d5bd3845cdddf7b908b",
"comparison_sha256": "ad90403c68abc435ce35fa93d080f7b465d021ab3f6c27297b5f0a16e53e501d"
},
{
"name": "seed_validation-matched_energy-05-s1073741827",
"repeat": 0,
"output_hashes_sha256": "bd88264b92362a3ba837b7211b31741e266ac4aecd58b12165b874afddb23174",
"comparison_sha256": "c028786e6e4c13a468b557a790c2ee552da41d5c4229e199d4205a24ccaadd90"
},
{
"name": "seed_validation-matched_energy-05-s1073741828",
"repeat": 0,
"output_hashes_sha256": "a7cc06d9bcee14cecde086811bc9723bb596f6d9dc7dbad110c8878f8134b680",
"comparison_sha256": "0d3651931ae378749fb69e57a45f66c57a3196c47f45a4e34ea368a1d51537d9"
},
{
"name": "seed_validation-matched_energy-05-s1073741829",
"repeat": 0,
"output_hashes_sha256": "7910ebd1b35289416369977ba3f79de8241285732a019d41594cb318791661b9",
"comparison_sha256": "adeef1985b96f7ca279fc9690727b8bf98c1914a26790b779a4d02f40762f49d"
},
{
"name": "novel_to_aj-physiological-00-s1073741825",
"repeat": 0,
"output_hashes_sha256": "64a71550475feb8a6fe1193147a931dbdb56dd3c0c97311831b1f7e0bc9b9db1",
"comparison_sha256": "158402bd6a71a87d0917e60f72ffae9d701ed7fa9fae1cdd5835613727c03460"
},
{
"name": "novel_to_aj-physiological-00-s1073741825",
"repeat": 1,
"output_hashes_sha256": "81d61814fbf705cf530089510bb8e1a3eafdd78adec5bdcfe69b4639352bcb90",
"comparison_sha256": "e302c64f64996e9a0bb4d171311ea7a4ddb975f95f8acbb347712f2cd0a8aa5d"
},
{
"name": "novel_to_aj-physiological-00-s1073741826",
"repeat": 0,
"output_hashes_sha256": "a970411ec905c463913584ff693c573c81a61ca570d2fc493176c337e28da45b",
"comparison_sha256": "727390c75994dae9dd9ccb2d84691feb453c0053b486f9f9c0c9055ff4de905a"
},
{
"name": "novel_to_aj-physiological-00-s1073741827",
"repeat": 0,
"output_hashes_sha256": "bbf0d141cfea4b441329c5f478f4165f2382ce2c47d9ff486ad0bec0c5511797",
"comparison_sha256": "a3ce62a1ae83a06f831ec17664f25ec29ccdd6fe605ab96cca67dec98dd20f19"
},
{
"name": "novel_to_aj-physiological-00-s1073741828",
"repeat": 0,
"output_hashes_sha256": "64110a5447e41a6e23ba120e636d95958e501521f39e32c6f37005448ffe51bd",
"comparison_sha256": "73206b61ae0bdbd71e9fdf82e2c83cea20aa7fecc1716b5dac2a70fde518e26e"
},
{
"name": "novel_to_aj-physiological-00-s1073741829",
"repeat": 0,
"output_hashes_sha256": "6d575399c6c2b1ac63d386e309dba5d2494dbf744af24496c717de56b4d558b9",
"comparison_sha256": "ccc98abc3e7ebe699b06652ba712b7aa8134a8360880b22f1edff9917f784c49"
},
{
"name": "novel_to_aj-physiological-01-s1073741825",
"repeat": 0,
"output_hashes_sha256": "df3dd591d4d078622ef2dd7feb8d30dd78c3d65e37299bf8e11ab46646827099",
"comparison_sha256": "c4a713bc3d2de5baea0d6b98d3c2ebd447a60f44dfaf2b21038198a98b099876"
},
{
"name": "novel_to_aj-physiological-01-s1073741825",
"repeat": 1,
"output_hashes_sha256": "b7ff31b9dbce2f3a833a14d1410e895d5e1b8334e2adce4180b5b387d5f569b0",
"comparison_sha256": "0710bd3b43534801a748eb2102bcf38a0b076603fec4c54b6f3865fc5cb60656"
},
{
"name": "novel_to_aj-physiological-01-s1073741826",
"repeat": 0,
"output_hashes_sha256": "1243e94ca9bd08c7a0dd4cfb01f8bc9c0fdd143009ccc509a2629a55d91f7eb4",
"comparison_sha256": "4db3f386a06d52a7065b0fe80f96cbf7e690c819c0eacff5b75a1ec8c05bcfad"
},
{
"name": "novel_to_aj-physiological-01-s1073741827",
"repeat": 0,
"output_hashes_sha256": "d7d6c7fc2b870a737ef6ff47c5e0f96838a4a88365924c08ebea8e218a215400",
"comparison_sha256": "cd2cbf56ee52d072757b8312a9d9a0291d44a9c26c4d33d163c1d237d1ffb385"
},
{
"name": "novel_to_aj-physiological-01-s1073741828",
"repeat": 0,
"output_hashes_sha256": "f7d6164e7f402131a7024c165ca28dd2bbfc81a83a23e7745e9e56d38f5c4efd",
"comparison_sha256": "e385af2790f63d88c4930089ef223fce9131ab9a62cf2a3b3e3c7fea4a34123d"
},
{
"name": "novel_to_aj-physiological-01-s1073741829",
"repeat": 0,
"output_hashes_sha256": "2464f9efb4fc1cf58b97c08f8629d629edbd1820c522dc397d551a63f5c0f7c7",
"comparison_sha256": "a9d0c2080af94aa47d3354c8c6b4210d8c5969187d1fedfd73c6d4281c1e7f68"
},
{
"name": "novel_to_aj-physiological-02-s1073741825",
"repeat": 0,
"output_hashes_sha256": "7e8a6ece4cb7ec50469ec79767d3a8f0037781936305cf9214852a672c90f869",
"comparison_sha256": "84b94f3c9f206e74c306e88e8e28c680cabb301063d8ab532e022207a1197be8"
},
{
"name": "novel_to_aj-physiological-02-s1073741825",
"repeat": 1,
"output_hashes_sha256": "8b2e8226db0db0767ecf73243e1cb583695bec768062ad3d5827c5c47e386831",
"comparison_sha256": "473a59d8e8fb9125d7307eac8366165f6594b047c141a6904044f0246c1afede"
},
{
"name": "novel_to_aj-physiological-02-s1073741826",
"repeat": 0,
"output_hashes_sha256": "232b0e332ebe604340a140990ee81d869d2ff2755e19669fda9539a68f1de3e9",
"comparison_sha256": "0ffca91319ad28c164ee6f6297604adf15a5f9dbb58ebb27f1423efa839b857e"
},
{
"name": "novel_to_aj-physiological-02-s1073741827",
"repeat": 0,
"output_hashes_sha256": "365445a52bd3bd270a899a479bf08e64f73b6a178f9339a19a40b9c33d7d09bd",
"comparison_sha256": "eef0703393d6bdf0ab528c777d7a65eaa4bd6d7abed3116e475605d740563682"
},
{
"name": "novel_to_aj-physiological-02-s1073741828",
"repeat": 0,
"output_hashes_sha256": "4e49c22eda06cdd3edb2c1fb589279c59fabe25eef26acf45abeddbc3e190053",
"comparison_sha256": "d9768a6bda26e9561de416dd15c70accee9b8cc176c4766569c65a81fce0fcb2"
},
{
"name": "novel_to_aj-physiological-02-s1073741829",
"repeat": 0,
"output_hashes_sha256": "1ba30a37d620c0cd35be4469c5dd82f226c835044d7dd75384d550fcbc345fdb",
"comparison_sha256": "0ea00ce43752723b715cc7854c8d78302c02a815d3c9b8ad0aac546cb0be61cf"
},
{
"name": "novel_to_aj-physiological-03-s1073741825",
"repeat": 0,
"output_hashes_sha256": "80b0b2496c64f685f32dc1824c0878c278b71b7a532a79cafe91c64c78f192fa",
"comparison_sha256": "de6408d64cfdc666503c4b0c64b44804b13103bb0749d7fdbfb908ff2e2d05fa"
},
{
"name": "novel_to_aj-physiological-03-s1073741825",
"repeat": 1,
"output_hashes_sha256": "026d45f8297be72cf2d1ae239ae8458561d2409f1860ca57b3a444861dff0582",
"comparison_sha256": "787105a3bc6e16f3ff531b9059d7af857cb6e127bc9b90f9891b6521e2546fc0"
},
{
"name": "novel_to_aj-physiological-03-s1073741826",
"repeat": 0,
"output_hashes_sha256": "b4291f96483a799b53897575e70726879d275a06e522ddbe6a9fd7f4bbf0671c",
"comparison_sha256": "61ccbe94a7c3b1f3ace7f10028a93b8ec85c21b809bf11434a26870ad77d6fd4"
},
{
"name": "novel_to_aj-physiological-03-s1073741827",
"repeat": 0,
"output_hashes_sha256": "282fc76f0bdebb3752e7053946c18ed818ffd7d0f935b3b64307782fa41229e9",
"comparison_sha256": "f868bb3967dde76f4dfb56ed0733b92a2246b81779d5e5cd998623101e99a9ef"
},
{
"name": "novel_to_aj-physiological-03-s1073741828",
"repeat": 0,
"output_hashes_sha256": "e1b7190cddd994edfe5fc025a713a77a5864133659a9fcec126aecd48ff8dea2",
"comparison_sha256": "ca7cf54fe0b45803b4564aef8267329ace5e5e7e0edffc7cdc12700e00e5f2ca"
},
{
"name": "novel_to_aj-physiological-03-s1073741829",
"repeat": 0,
"output_hashes_sha256": "93e77a62c5663446805488e27eeec7cd340ff302090d64c0586118d7a08914fd",
"comparison_sha256": "8f46dc7f167eefe808def406de2f6b6d759faa9aa2e1a2adb0310cacab1adeca"
},
{
"name": "novel_to_aj-physiological-04-s1073741825",
"repeat": 0,
"output_hashes_sha256": "d10b551a1b14a592245605ea42cff980a73e1d2d3c9d4fe389c540067a8e90a1",
"comparison_sha256": "05276740569fb6526d2e098fb958018e689e6243ba47ef24a4e71a64a839b684"
},
{
"name": "novel_to_aj-physiological-04-s1073741825",
"repeat": 1,
"output_hashes_sha256": "616244fe630b40cafe916246dda01a4e34fbdd610242eaddd9f0ee7ab412b5e8",
"comparison_sha256": "921d607d9b0f1df72b8edc50ea1ba39c15fb2aaeb8c4917b6771111bac7ada0b"
},
{
"name": "novel_to_aj-physiological-04-s1073741826",
"repeat": 0,
"output_hashes_sha256": "dda281c92b868d10060123e6eb9d6e646c4adf150320f1854236a1a71291cbdf",
"comparison_sha256": "c74fd67d478971b37f26fe3311c508e2f20a5b401a8a0f8d897eb8bcd9d892f6"
},
{
"name": "novel_to_aj-physiological-04-s1073741827",
"repeat": 0,
"output_hashes_sha256": "6e75c0b086ca14ee56eef607a4442b1ea4d8cb1a88f3142958199fff5757a5fd",
"comparison_sha256": "9d00b90f45346cd6c205bff284a69b374b788c32dd4b4a42eec00aaeb82cd749"
},
{
"name": "novel_to_aj-physiological-04-s1073741828",
"repeat": 0,
"output_hashes_sha256": "59538e261447e877e5ea679057dc08cd57f73dbd08a3d1be013ee2bd371b84cb",
"comparison_sha256": "e5da72c3096e939609577e1dd30910161b7e2098e2ffec7433b3a50cd3a6e523"
},
{
"name": "novel_to_aj-physiological-04-s1073741829",
"repeat": 0,
"output_hashes_sha256": "20c1a834f14669c9f2b687ba5629cd30e1dcd9cbc541e292b6b51bf73b97a8c9",
"comparison_sha256": "11a6081ca7dd7bc456cf4d2a5a456b697afb200d3f3b6ebf055cc7f219abe203"
},
{
"name": "novel_to_aj-physiological-05-s1073741825",
"repeat": 0,
"output_hashes_sha256": "eb0ce4c81af72ecac3b0d75084b95701effa8e61ba3897e373c9a8ab32f03e96",
"comparison_sha256": "aaf57720b08c755457df1e05d207bf8c1359acf3b5e3f18530ab1e6a04a05a5b"
},
{
"name": "novel_to_aj-physiological-05-s1073741825",
"repeat": 1,
"output_hashes_sha256": "d584d0e7ba2a421124ed9bb5ea259a7183fbef06cb063dcfe12d295651bc421e",
"comparison_sha256": "e3be2b1b8b42eeecbef0eab2474634af9d67169ccc2b57d715276841f1eae810"
},
{
"name": "novel_to_aj-physiological-05-s1073741826",
"repeat": 0,
"output_hashes_sha256": "7d4d6adcb42648190180f61a332554c5c830ac660eb4c8617001148db3f5ffee",
"comparison_sha256": "954b62c9ce6b11a6468c5c8d93366af0c031544598c83d1d230722117924be82"
},
{
"name": "novel_to_aj-physiological-05-s1073741827",
"repeat": 0,
"output_hashes_sha256": "fb4e1a3b4159a31a48961f944fe24d65b8d17f8d70eeb9d066aad3bf2a825eed",
"comparison_sha256": "73103350af26ef3cbbab4c2efe30091360b38cacbf0782e5ce4f1e5aa296d958"
},
{
"name": "novel_to_aj-physiological-05-s1073741828",
"repeat": 0,
"output_hashes_sha256": "c54236e2c37e93a4090a76e8d9fc6a12b4150a3e4ff991a26c9ea79c05c2963b",
"comparison_sha256": "a7b6fde05ead73e5dc15f0556bfda6f8d4ebbc347fbee4b4a36c1b5d8c7fd603"
},
{
"name": "novel_to_aj-physiological-05-s1073741829",
"repeat": 0,
"output_hashes_sha256": "e5f054c76124037c4b5bdc214b4ec3aaf58fecb406ad0b1a227db3b2a8c63838",
"comparison_sha256": "7968cf16505488edc95fb9d8da2512a0752a2824644ac795704b9bf7898115cc"
},
{
"name": "novel_to_aj-matched_energy-00-s1073741825",
"repeat": 0,
"output_hashes_sha256": "86bce0d9c03d53673d69eddc47231efe3f553b15cebadf932a71775869d5b24f",
"comparison_sha256": "c5937385d6ef97143233e5ddfd14deb47c503ed7bc27c6e3607338b0680ec789"
},
{
"name": "novel_to_aj-matched_energy-00-s1073741825",
"repeat": 1,
"output_hashes_sha256": "16bdf33a42e89ac7857a3900cb24c5ef0040addf95eaefe40e010938c443f540",
"comparison_sha256": "6e4de77a4e60bdb93e6c7be7c1ee7e601a0bd5d5b77053a7b1ba82f1174a5d33"
},
{
"name": "novel_to_aj-matched_energy-00-s1073741826",
"repeat": 0,
"output_hashes_sha256": "5f33d56c6c7d6d1cbbff5f9e617ff8e298dc55b3ec1105782057f7f78ec897d9",
"comparison_sha256": "715ffdd8bed6e9ee68a31fafaa966603f2f988c1b200549bfdc102f6b94a4d54"
},
{
"name": "novel_to_aj-matched_energy-00-s1073741827",
"repeat": 0,
"output_hashes_sha256": "80551f6d8a84c0692eeb4a4f1e3c9a8a4ca532cab2407df40617940f5e17f26d",
"comparison_sha256": "300febee83d763a5be718ecf1534287088dc2812c152011ec252969f43c1428a"
},
{
"name": "novel_to_aj-matched_energy-00-s1073741828",
"repeat": 0,
"output_hashes_sha256": "d918e7b9ae6cab0888c040494c1cd38ead6f7d0f0db0f400f20c2df3525944a9",
"comparison_sha256": "0c02c2156b0007dccb564451fc83d039e28137a6bfdef85b4dd7ac40669f6b24"
},
{
"name": "novel_to_aj-matched_energy-00-s1073741829",
"repeat": 0,
"output_hashes_sha256": "ab0db04014758b5474108263a1639206c00e0195abe0caa52df6c46eced49ad6",
"comparison_sha256": "c84046afbcd3dedc170c72a75f4cc08ef914269fbd4db4804a49f1494eb1da76"
},
{
"name": "novel_to_aj-matched_energy-01-s1073741825",
"repeat": 0,
"output_hashes_sha256": "9d498f426b28d56a41482df8c72a4d9bb7e68c21fc637469c19ba1c9a257a2b7",
"comparison_sha256": "322efee84ad44f3cf7a1f260e6f2c3825cefb947aec23c2dfecbf8f418fea501"
},
{
"name": "novel_to_aj-matched_energy-01-s1073741825",
"repeat": 1,
"output_hashes_sha256": "682bedaaad23d2e43b3cf56e18b0f7e6b799b764b9579b4b77faa54f635b250e",
"comparison_sha256": "3d3acf45cdf8617f53fd7c1e3ee1c898416410b4beb3ba85a9710823a0b45053"
},
{
"name": "novel_to_aj-matched_energy-01-s1073741826",
"repeat": 0,
"output_hashes_sha256": "2e62c4d436aa715cf1d1ef150efcfeadc2d6fdaf7d318e2d798ff40d993ee5d0",
"comparison_sha256": "92ed881a21e42ba71c75d380472fc00ab27c6d7c53e4599c6857bc6b6130e5bc"
},
{
"name": "novel_to_aj-matched_energy-01-s1073741827",
"repeat": 0,
"output_hashes_sha256": "6db018b9d9167765865ededaf3675207adc3b736b57872ac710fd28819395a49",
"comparison_sha256": "5985e1fd73066a40c3f1fea01ca8559eab8f78037192896ec91aa86408785851"
},
{
"name": "novel_to_aj-matched_energy-01-s1073741828",
"repeat": 0,
"output_hashes_sha256": "37f748ce276bbcd27018f81c90885c92298c8aca1808a8429ee7ee63b9d8ca99",
"comparison_sha256": "6e3e339486ac44e88b7043dfe3f5bff3a26cfbc66a6589c7b8209b779ce20b17"
},
{
"name": "novel_to_aj-matched_energy-01-s1073741829",
"repeat": 0,
"output_hashes_sha256": "a7feb8daf50fed05812005b1d94d5891cc7819f1d28bd7db960f47eba19080cf",
"comparison_sha256": "d3eb144f87796e2888fbd21353654a23a8c33d2b8bffe60608831d3139536d97"
},
{
"name": "novel_to_aj-matched_energy-02-s1073741825",
"repeat": 0,
"output_hashes_sha256": "c9bf872668281d4f74beac29ba5f787561ea6498e67eb4884ec08fb4b62db1e9",
"comparison_sha256": "a02a87db3baecf0c14043acb3f6dd4da934aa11e1ff5963f174792870e922f7a"
},
{
"name": "novel_to_aj-matched_energy-02-s1073741825",
"repeat": 1,
"output_hashes_sha256": "ee5fec603db01d81e555ea8c92b2ba6c1a7805bfb1be1a60ac3f108eda9a3729",
"comparison_sha256": "bd3fe0f33dd779a3a9b7e424e348a2b9705f50eab3b30474717b68cc99a8aa45"
},
{
"name": "novel_to_aj-matched_energy-02-s1073741826",
"repeat": 0,
"output_hashes_sha256": "9b7f48386535bc81e30e623433526b8b342bebe333abaae6ed81b1190a6ecef9",
"comparison_sha256": "26c77bc51767047691603418aae9c71297aaf4bbc1206fc88d74706d95fa636b"
},
{
"name": "novel_to_aj-matched_energy-02-s1073741827",
"repeat": 0,
"output_hashes_sha256": "d94e4bd0fefd3e9c1c935518217d77d86c67dd8dfa6b1549061aafd0890ebd78",
"comparison_sha256": "23559e46ef2ff4a112b95fce0b49d8baa893f7c1b831e1c5f3cb22f6b9cdb3c6"
},
{
"name": "novel_to_aj-matched_energy-02-s1073741828",
"repeat": 0,
"output_hashes_sha256": "3539f8d55b067d95e98d5f56271095d801e32e9e60cc257ee3eda9971fae89a6",
"comparison_sha256": "53c1bb4dec50c8db323bbed18e64bd0abf6e2af54403d13909faa55e5dd361e3"
},
{
"name": "novel_to_aj-matched_energy-02-s1073741829",
"repeat": 0,
"output_hashes_sha256": "d190927097d49a21406d58b1be6a1c1b51b2f05e39abc49ce9c12be4e757df7b",
"comparison_sha256": "dbfe5fff410ed92ae7206ba649a94fd0cfc5e084b7a1d73b4a0e924922ce1719"
},
{
"name": "novel_to_aj-matched_energy-03-s1073741825",
"repeat": 0,
"output_hashes_sha256": "8fdc2f99ab4b3cd59ac28c5b8a019b9aab9357f5ece282f3483c84983bd1ef2d",
"comparison_sha256": "a52c3a95136b7586e155a986d07273f5bddeb32b8a979f4910eab879071c5791"
},
{
"name": "novel_to_aj-matched_energy-03-s1073741825",
"repeat": 1,
"output_hashes_sha256": "2911a726c323b3758f7c2bb0354350d8d00ae72e5546ba16110ed520ea1d8bec",
"comparison_sha256": "eddc06b54e22d95d5b75a5b0de398be816618bef0098116cf3a329b3b8f13742"
},
{
"name": "novel_to_aj-matched_energy-03-s1073741826",
"repeat": 0,
"output_hashes_sha256": "363517586d45df160ca65aaf2666369d848522487bc83147572c73ab3d7627bd",
"comparison_sha256": "5370c48327e5c2fe364e304073233668f471d18a652f12400a967e339e09e831"
},
{
"name": "novel_to_aj-matched_energy-03-s1073741827",
"repeat": 0,
"output_hashes_sha256": "3ade34f0eef1f50f5187a863e449dc285058e39ce8962df0ebb73143109cc14a",
"comparison_sha256": "5942d12d2976bf9f01b0ef3a68bfa1ec30e478c1ee44f0324469802412b2a10a"
},
{
"name": "novel_to_aj-matched_energy-03-s1073741828",
"repeat": 0,
"output_hashes_sha256": "243d3f768dbee013d83df0798a5aee111ca7d0ffcce713895c514617b8c25c90",
"comparison_sha256": "25407ee0ae28196240ddc486e79363adc2c3e9397905cd685c8c8bdaac94342b"
},
{
"name": "novel_to_aj-matched_energy-03-s1073741829",
"repeat": 0,
"output_hashes_sha256": "8410f3fede459f06375ef7e2db0d339db66156b7a6ba0a13db7c1f4e2b64b09e",
"comparison_sha256": "6579a1c299aa644d62669370ececb6e354354f65481a2dbf1fa69050fd935b38"
},
{
"name": "novel_to_aj-matched_energy-04-s1073741825",
"repeat": 0,
"output_hashes_sha256": "75d8d46e048e0e93903fdfae33cb5e4a284889a3e5cdcb024feb638cca512a51",
"comparison_sha256": "20674f75d7339fe2fb85660c20165b0fd3aaaed189b022607f5e6189569e363c"
},
{
"name": "novel_to_aj-matched_energy-04-s1073741825",
"repeat": 1,
"output_hashes_sha256": "b63c4b980c88cf77dd7b1b5856be9aae41c0a707792395ed45aad1618815f601",
"comparison_sha256": "ea9cbb35999f88fac410957e8643a790d145188bb75555ae0a4601bc7be860f4"
},
{
"name": "novel_to_aj-matched_energy-04-s1073741826",
"repeat": 0,
"output_hashes_sha256": "7db347641300eef9bc406a960e4b2ba4a2cb5d411ab606c1cd92c5b81d740e0f",
"comparison_sha256": "39ee29dd079218468898220aea6c802ae14c2213417a2c3d47d6422965655286"
},
{
"name": "novel_to_aj-matched_energy-04-s1073741827",
"repeat": 0,
"output_hashes_sha256": "ef927e61e3c8d01d3588921e2758867458d489bbe8ce66ff8229168fc0364e83",
"comparison_sha256": "b6c80493c58f6bb82884044a5381480aa3ada08e120e9c9043faf0f75fc7ebd8"
},
{
"name": "novel_to_aj-matched_energy-04-s1073741828",
"repeat": 0,
"output_hashes_sha256": "603684a77e5d77c67bc77b567aa46976108221c1fabdff2dbf11360ba212afa9",
"comparison_sha256": "3a67d47393d8e7e7cf2f108bb8f31e40fd0c6fb972045fdbed0d41f55d2c0628"
},
{
"name": "novel_to_aj-matched_energy-04-s1073741829",
"repeat": 0,
"output_hashes_sha256": "483cb4ee534bfde847039744f288d6ef978ee34d246d186e4e916f98ee71e9a9",
"comparison_sha256": "ad3a8d78e241b9d93b8a3ab4d45838c7334055e17a15d8c334e177d6b69dd9f5"
},
{
"name": "novel_to_aj-matched_energy-05-s1073741825",
"repeat": 0,
"output_hashes_sha256": "f9953f1cd2826358a5d8d02c54ec1edd0cef3ed1bb62814a6304f70f89a5009a",
"comparison_sha256": "05613e91815de429085699a0924f60f659594f552597076b94407095fe1c2df1"
},
{
"name": "novel_to_aj-matched_energy-05-s1073741825",
"repeat": 1,
"output_hashes_sha256": "7bcfbb20c41e66f1f010b0d6baddacb444dabb98e8c02b82b368cae11f144514",
"comparison_sha256": "5450b62c2f6750c51be8ef8ec44b2ca397425f7a3033f004235bd2c94cfcdfe3"
},
{
"name": "novel_to_aj-matched_energy-05-s1073741826",
"repeat": 0,
"output_hashes_sha256": "a0ed70a9857f5a61c8f1e12c0c8041be9eae7f62822f8f204025522c9be8425b",
"comparison_sha256": "39cd94548a14e9f76888f1df32b16cc72ee2eb344f3491af1e06a16e6008a42b"
},
{
"name": "novel_to_aj-matched_energy-05-s1073741827",
"repeat": 0,
"output_hashes_sha256": "8206e3d04063971a710f2ecf68e50b8a4bb943d1dc34a29e062dc193093adb8f",
"comparison_sha256": "4f59fcee096dcccb73692e8b89129730e9523fbfff588ee476cb17443b80dd4d"
},
{
"name": "novel_to_aj-matched_energy-05-s1073741828",
"repeat": 0,
"output_hashes_sha256": "9e07846a6322bf48d09af0ebd049accd67870d68c9499c5726d878626ae758da",
"comparison_sha256": "df43ace8d1371f135f9033478193ca3950192a6d3cde9e2913ada71122a8e233"
},
{
"name": "novel_to_aj-matched_energy-05-s1073741829",
"repeat": 0,
"output_hashes_sha256": "44bfbd78c32af9a7c89384a0040feb5ad1d1a22648206c4d39a07ab58f820225",
"comparison_sha256": "04f62ecea73fa7c000f29ef008550a91cd192b3a1ea3eb6861c229afe12b5da8"
}
],
"wall_seconds": 1471.0373302119988,
"training": false,
"scope": "Full closed-loop fixed overlay, internal event/queue accounting and 24 exact technical repeats; not learning"
}
@@ -0,0 +1,876 @@
{
"stage": "zero",
"pass_all": true,
"trials": 144,
"primary_trials": 120,
"technical_repeats": 24,
"completed": [
{
"name": "seed_validation-physiological-00-s1073741825",
"repeat": 0,
"output_hashes_sha256": "aabd9f46a9697440f0cc0204455e831d16b7aadfdebe3e5a8c986bfe85d05300",
"comparison_sha256": "3e55e8edaf7e3cf4453e37cf90d7a420808977665174ccf525dfef7553418d46"
},
{
"name": "seed_validation-physiological-00-s1073741825",
"repeat": 1,
"output_hashes_sha256": "0ab3d6f35c2b9e6c78444f7820df4ad392110ab7cccea376f301edca255645f4",
"comparison_sha256": "97d2ad681b4315998aa47b7da71c00d06a2c895bbecc86dd598436e2493cc9a5"
},
{
"name": "seed_validation-physiological-00-s1073741826",
"repeat": 0,
"output_hashes_sha256": "1f5d9b806867066af042610eacb5810bc5a3453abeec132fdd51aff2f4843796",
"comparison_sha256": "1cbe69aedd5a206adda199e2de80d156e1c3c9a9101f5060fe1cbae35ab6cefe"
},
{
"name": "seed_validation-physiological-00-s1073741827",
"repeat": 0,
"output_hashes_sha256": "ac7d289c2344463730077e9ef1dc8a079347b8f0c1f6262132504adde4e1baff",
"comparison_sha256": "3c86023f3b70b792bf1795a56c6fc02107835019a38d0df5d491332eb24f9a96"
},
{
"name": "seed_validation-physiological-00-s1073741828",
"repeat": 0,
"output_hashes_sha256": "f31efc2bef39ee0a043d3f26fc0fa7c3132298b6f8436e42d2cbf8b3b696c436",
"comparison_sha256": "17d2f3d11ac1dc71799e43e56bd3d9df59a8da812a203300c16ce204553447e8"
},
{
"name": "seed_validation-physiological-00-s1073741829",
"repeat": 0,
"output_hashes_sha256": "65a582de423649d687c0c863732584a7bb56b9957b176927796146c1cdd0fabe",
"comparison_sha256": "08a53a56c6c3e73a7801fda134f6da13adfcce7efd11392dc371536a26c405b2"
},
{
"name": "seed_validation-physiological-01-s1073741825",
"repeat": 0,
"output_hashes_sha256": "c40906cbc2dd36942bcdece3572fe271a7cec8ac12707a9de460e17f79162070",
"comparison_sha256": "27b992912a70d772f426035521d724692071e5c4f05d97d86cf1e733dead16a9"
},
{
"name": "seed_validation-physiological-01-s1073741825",
"repeat": 1,
"output_hashes_sha256": "cc1a6effe0aeb61883999192be15efa4db41052bfd8474a8cbfcfc6f550b693b",
"comparison_sha256": "20f9e4492a2f7af5df0bce5a293839e950d8333acd76eef9aaa9737233998561"
},
{
"name": "seed_validation-physiological-01-s1073741826",
"repeat": 0,
"output_hashes_sha256": "20c4aafb03d1b9bac519f844ee506ad866ea46d707b5d4f421655729dae7f991",
"comparison_sha256": "93f8e90319e6c4f6bd59048bb280b00505d8b69019e3755a9b008edae669b282"
},
{
"name": "seed_validation-physiological-01-s1073741827",
"repeat": 0,
"output_hashes_sha256": "a8df196fde9f7987cf2f0f3261e1f09d83c9173741f0ae95715f82b97945f3c4",
"comparison_sha256": "b4b07a4e8efb62318ca708e1ef0a96cd7156c8a5bf138a9de9f4c88b81d35b9b"
},
{
"name": "seed_validation-physiological-01-s1073741828",
"repeat": 0,
"output_hashes_sha256": "6fe6b410cc0521d2d3f4561cf6a722cff81c34811119303315a3ada0e7b1f5f2",
"comparison_sha256": "ef55c8d425718ef75dbb9afedf45027163a965b2c35987e52f1188a663c24907"
},
{
"name": "seed_validation-physiological-01-s1073741829",
"repeat": 0,
"output_hashes_sha256": "050e28bb0673dfc11cdbf65892a96555bd97607b2a573a3e3577e834b75fb0d7",
"comparison_sha256": "fd7dbf3750a3b6bad3ab17c10de9a2e0fba74e1feced7b6d99b6e0883f3b4cc1"
},
{
"name": "seed_validation-physiological-02-s1073741825",
"repeat": 0,
"output_hashes_sha256": "ec59945078d7355414da363b0b29245d1f30e7bd53a391e6ed0bc1a501422492",
"comparison_sha256": "22a9b133a84023b17f6ce25906b9c9554caf38dde8afd545f52a40cda623abd9"
},
{
"name": "seed_validation-physiological-02-s1073741825",
"repeat": 1,
"output_hashes_sha256": "f7b7d14a3db5c4735f358a7ae67d580c12ef7df8a51a46bb2568ca77971843ea",
"comparison_sha256": "993f0891d6f0d892e716d58f8b86db400a05f66481c8d1a1574e550ead384ab8"
},
{
"name": "seed_validation-physiological-02-s1073741826",
"repeat": 0,
"output_hashes_sha256": "15dd672e0277760c58924b73626fa26cc8c35395e41798b385de11d5738a8c83",
"comparison_sha256": "eceea6141b5f9fe23091cf7c0071302d9fe52764b38e3b23daf35a7df770efff"
},
{
"name": "seed_validation-physiological-02-s1073741827",
"repeat": 0,
"output_hashes_sha256": "8cbfc2ecb7e653a9441b5c2207fb8ce123aef1dc33b651cced9978bfbae05391",
"comparison_sha256": "765385e6caba518c238581cd23751ad1f4dd22c30dec983984192f5443446f95"
},
{
"name": "seed_validation-physiological-02-s1073741828",
"repeat": 0,
"output_hashes_sha256": "43110df9874c94f0f91ee17e8073898609f8fda38644301dba918cc8022e6a24",
"comparison_sha256": "5aa4a3658c938e0bd8942b75956b955ba5419cd6757364d61aab593dcd1f36af"
},
{
"name": "seed_validation-physiological-02-s1073741829",
"repeat": 0,
"output_hashes_sha256": "9ad766b28df5b5ac669fcc280ef7ea628f3e55ac30fe8358db3b330c3c762fd5",
"comparison_sha256": "cc67170033fa01c3df5c66e50914a77b2b033e6d59aa5aaea695acb709262ea6"
},
{
"name": "seed_validation-physiological-03-s1073741825",
"repeat": 0,
"output_hashes_sha256": "826145054a2d0ff019a437d854dff375263bedbb417d2eaa3a4e796239b4f752",
"comparison_sha256": "df342b3a94d0bdf4f79b1c32985c661495e09730ccebfb048250904bfd1d4216"
},
{
"name": "seed_validation-physiological-03-s1073741825",
"repeat": 1,
"output_hashes_sha256": "a58fdc9ec16077c52df6e7a4e173b6e6303e4cc5c4d35b6a5f1031b0902ac4e9",
"comparison_sha256": "2e75d9769063a83ceb09a7734a8fef495888f9228ddf5b790d8de445c017d9d9"
},
{
"name": "seed_validation-physiological-03-s1073741826",
"repeat": 0,
"output_hashes_sha256": "ec7bd35212e39e674155b7a8bc612b321c883374f76c591261439f046266afef",
"comparison_sha256": "721bc94fefee6a3e64043b64d943b3686daec386d916e9db0c2d38dbf8e1b580"
},
{
"name": "seed_validation-physiological-03-s1073741827",
"repeat": 0,
"output_hashes_sha256": "99bc5414a84b55f3478ce8c553838a34e0aa1b51fef97eea993dd87f796473bb",
"comparison_sha256": "42a6dda8ff948fd03383d1009480839e116ca51592fc322f9ae208d8e814141b"
},
{
"name": "seed_validation-physiological-03-s1073741828",
"repeat": 0,
"output_hashes_sha256": "acca338193597af74d7488a0b803c6edd33f7b227ce3d519a3629fbc62c46b9d",
"comparison_sha256": "6df76b9170409fe9265626d47cb00682d00de434e8d99069dbf2fd281063422e"
},
{
"name": "seed_validation-physiological-03-s1073741829",
"repeat": 0,
"output_hashes_sha256": "eea8dfa148c4d66bebadab9f0f1d8690a655bdbdda30fbb26c3cc0b52fdb00e1",
"comparison_sha256": "de19b85ccc937e6a13324b5257a8e7d918fe6ed4eb2309c5455c76edce2ab619"
},
{
"name": "seed_validation-physiological-04-s1073741825",
"repeat": 0,
"output_hashes_sha256": "34d1d109f59edafd1173970224e13fad99cc8d9cf3201c24cca906d33f77d36a",
"comparison_sha256": "e909183a3e63691910a83733c61d75b84b1d8cde40c2d1737a4c03a38b5337e3"
},
{
"name": "seed_validation-physiological-04-s1073741825",
"repeat": 1,
"output_hashes_sha256": "652b8a6ff444dc37bd968bfe8b84b9b612e9d47ab63b155182af94f412ad3ad3",
"comparison_sha256": "832822b9880c27576bd1a8f9906e4ab07d8076078fb49b64b725d16ad7ceadfc"
},
{
"name": "seed_validation-physiological-04-s1073741826",
"repeat": 0,
"output_hashes_sha256": "620bd13c6edffc89a19f8bb9000f902cecb85f85b7ead3ea4b85655aa495810e",
"comparison_sha256": "a7f39f4b78f39c2380a984b82632b4fc687787dd80255816c238ba9e75cb15a3"
},
{
"name": "seed_validation-physiological-04-s1073741827",
"repeat": 0,
"output_hashes_sha256": "425dd9a482809bde34638eb765431ee9eb43ef3a2a33669bd0287183e5878a16",
"comparison_sha256": "35779e9d2f38ee6f81057a4e4c723bef9d2cd6c0f5fd7ffa98304ad07841f94f"
},
{
"name": "seed_validation-physiological-04-s1073741828",
"repeat": 0,
"output_hashes_sha256": "c0eaeb4f2cfb2fa87d4ef6689cf4e8451e6b28e2726f25eb7b7ee783ac533791",
"comparison_sha256": "6afc61746f0f05aa6d577585c1f67afd9f254aad9ed554255b3768e244607a1f"
},
{
"name": "seed_validation-physiological-04-s1073741829",
"repeat": 0,
"output_hashes_sha256": "eb11b8c5ae8bb7e12b2ed389e362e741d007977c17884a027290d1cba6a21274",
"comparison_sha256": "9513defdcdc2f95cb7dca4b61b5559efa6ad9e3117ef906c61fa348d6ec658e3"
},
{
"name": "seed_validation-physiological-05-s1073741825",
"repeat": 0,
"output_hashes_sha256": "ff5932f4983720c3b86f5fc72de3f66e07b2b3ffd0a5dbe21ad908f30831f798",
"comparison_sha256": "03fe08f37f76dd4e9f3ebc3c67982b0a9a8a559f5c0677e6027fac8ff73d35e8"
},
{
"name": "seed_validation-physiological-05-s1073741825",
"repeat": 1,
"output_hashes_sha256": "0053a13f369f6d793dd94b2f719c96d378a7390e7d84eba507e29f709c51a71e",
"comparison_sha256": "cfffca09854413d605b4436440cc9eb2659535338c0a300065e8b3a298646eed"
},
{
"name": "seed_validation-physiological-05-s1073741826",
"repeat": 0,
"output_hashes_sha256": "681305aec96e7d2cf571af69b788fdef8a5a551bf69b04a4520dfd2db718a9b3",
"comparison_sha256": "18d30ac955990052ceeadb3f2f509916b049840af0dc1f87353881f8ce4eca5d"
},
{
"name": "seed_validation-physiological-05-s1073741827",
"repeat": 0,
"output_hashes_sha256": "3e036ac7e70f26b0a15027b7927552bb7a3e8b52fb962d553803c25a11f0fd65",
"comparison_sha256": "40b9269468a46d1e776598d1b9a0197e97f9c953ebe37ca6bce967b5e9d9debb"
},
{
"name": "seed_validation-physiological-05-s1073741828",
"repeat": 0,
"output_hashes_sha256": "4fea20b32e945a307fe1c855535167fe7e0c8af8de131a7b022d6d940e51fbb3",
"comparison_sha256": "e6eb2aed0812010030281eae2e54d12be5468c0410c07df998fae9792b27a426"
},
{
"name": "seed_validation-physiological-05-s1073741829",
"repeat": 0,
"output_hashes_sha256": "a7779011b50fbbd60b1ce28cb121387b0ee7cbc671e0bde5855280489b0ad896",
"comparison_sha256": "b07ca1b7afbaed489d322f40a320297c90dc1e5c535268eaa87ce8b9a98202d2"
},
{
"name": "seed_validation-matched_energy-00-s1073741825",
"repeat": 0,
"output_hashes_sha256": "22bcdd79c5fbd2fd4bed48d587adf718d73dd58fa58b568c06092ed02e9de444",
"comparison_sha256": "ab0ee1cfdb2cc24b39b1cb0253a79bf9d65e35f432738f2c7ff34d2a344bfd80"
},
{
"name": "seed_validation-matched_energy-00-s1073741825",
"repeat": 1,
"output_hashes_sha256": "331b936e8b08f6b9e7d06047f708f98d573c7e346d0657618eb50616cf049e47",
"comparison_sha256": "fede87f019863cac98646d2a64ce9fac3628372f101b614bac61789e3163e5b6"
},
{
"name": "seed_validation-matched_energy-00-s1073741826",
"repeat": 0,
"output_hashes_sha256": "e19ab9c6c0c5206b8ad852741bba17540f5ec4e8aede50263a7724131a8b6520",
"comparison_sha256": "b9e72d462ad35b49f5b98694d6772decf44e1c8d603d98078712eb71bcea2cb0"
},
{
"name": "seed_validation-matched_energy-00-s1073741827",
"repeat": 0,
"output_hashes_sha256": "c6fe05c42b1ccf3ee1380f486f5a2c30839be1416da563f2032b19e4cd1a73d9",
"comparison_sha256": "d6c4699f9d55b342a88e11252a5a046072bb816566b0e827ac1077114e984cf8"
},
{
"name": "seed_validation-matched_energy-00-s1073741828",
"repeat": 0,
"output_hashes_sha256": "2864d3b3fb816f5fc77dceb181c13bfb9fa4d76e3374646bcca953d05e159a4f",
"comparison_sha256": "ecd0127964b7b91fe07b41128644fec65c6253cfc2892de2990d25e40c085a1d"
},
{
"name": "seed_validation-matched_energy-00-s1073741829",
"repeat": 0,
"output_hashes_sha256": "1d972e4a1e38f2c0a5d49f08681f6b4ad4f66007a153bfa5711973bf576e9d6a",
"comparison_sha256": "95010de0e500d6f606d951278fe9169eb9a09ea39d28065a2787747d7399da1c"
},
{
"name": "seed_validation-matched_energy-01-s1073741825",
"repeat": 0,
"output_hashes_sha256": "a854bf131115d32b0ea43ea6b8983d68d8a7760e9e45e92a750efe5b2e50e447",
"comparison_sha256": "b03ce6a9be5495451de8d8b9111ac16ecde83014592c6a3cfd2b18bca0745833"
},
{
"name": "seed_validation-matched_energy-01-s1073741825",
"repeat": 1,
"output_hashes_sha256": "fb450eb4da4dd58aec1137042c2bd68a219e8efb68391526d57d9ae9cd4f7aff",
"comparison_sha256": "eef1625851693e5f0711e9f81bab5e64dcf96634bf44cb26a0b4ce9f7c486b8b"
},
{
"name": "seed_validation-matched_energy-01-s1073741826",
"repeat": 0,
"output_hashes_sha256": "9a4b3b0f3e1db1a91f77438693da9660618a45579c6b390ceaa7888f2f60a6d3",
"comparison_sha256": "256f74a52719864dcb9e41f71857780bf50ab395586ff317f09f3da8bd85a4e1"
},
{
"name": "seed_validation-matched_energy-01-s1073741827",
"repeat": 0,
"output_hashes_sha256": "cf9eb66809c9d6a3c8638b3de026f10d201ffd7162d3e6a262e1355ba85a57a3",
"comparison_sha256": "fb3b554beb17b1ef0fc8dda46fc895f295cfb97849bc6eaed25bcf26b894a087"
},
{
"name": "seed_validation-matched_energy-01-s1073741828",
"repeat": 0,
"output_hashes_sha256": "3d9f3f038ab7078925cbf971cc78aa099b97c50f1ca73b5018ba4fbcac3bb804",
"comparison_sha256": "e920e132bd6a2b2d14ce8887ae278ac0fd1b1d27887c2adccdf8cdb6fb05c9ab"
},
{
"name": "seed_validation-matched_energy-01-s1073741829",
"repeat": 0,
"output_hashes_sha256": "dabcbb6d275469236a94ee3c1bc47e93b2470269df2cb894228e6eefc6093862",
"comparison_sha256": "22c79bc33fe123be0aed279a12331d4ef598f4d3b374bbb9e557035354c590cb"
},
{
"name": "seed_validation-matched_energy-02-s1073741825",
"repeat": 0,
"output_hashes_sha256": "474ab1ab266c0eedcc677cee0db5fc824a07e79acce70a745dd0a337e08a2b91",
"comparison_sha256": "b7fe44210bd82d6213d0de2bc9aad63a98b257c46d3bc2f25eeebc5e4b423bd2"
},
{
"name": "seed_validation-matched_energy-02-s1073741825",
"repeat": 1,
"output_hashes_sha256": "6a66784cf9324b6485deb6708bebc8c2886af57472e894bd37c340bebeece951",
"comparison_sha256": "c87a09b161e2e673dd6dfe3362620276020e4a340a45dac1c34d2a8a28b8a6ce"
},
{
"name": "seed_validation-matched_energy-02-s1073741826",
"repeat": 0,
"output_hashes_sha256": "d9003b7bf9b89e12380c78587ecbe193515ae862b8a3192121507e0b591ed2c4",
"comparison_sha256": "6185900d6028ab2885561833e1345ffebf99fe01003ced4b17ac092caa8ca067"
},
{
"name": "seed_validation-matched_energy-02-s1073741827",
"repeat": 0,
"output_hashes_sha256": "0e7ffb3d7450618dd52ee9d37e73bbf99d7c5f7b9ee9222b4ffc8276dfdd4810",
"comparison_sha256": "a9c92eb8de27fd9f8527d30c340cfd94ae9c3f6439887321abef09aa7388736d"
},
{
"name": "seed_validation-matched_energy-02-s1073741828",
"repeat": 0,
"output_hashes_sha256": "3e84cfec606df235ae79551e5925ed3370f5a8388086aaf455601eebf68d70cc",
"comparison_sha256": "4b97f756a878bc5a455558bfadd3aafa7632057da93aa09975ba5acc032ef1f0"
},
{
"name": "seed_validation-matched_energy-02-s1073741829",
"repeat": 0,
"output_hashes_sha256": "cc97ff6a1c327ace64e02f9ab5d2f023ff53d6cb365531efd56034b8b5289840",
"comparison_sha256": "8e2c02a378f50b1644a963bc946bff8e64035930e83811568f5b086718ef8430"
},
{
"name": "seed_validation-matched_energy-03-s1073741825",
"repeat": 0,
"output_hashes_sha256": "bb71f40eea414ec5026fdfb821721cd122cf5fce307b70d2a578913b2e7d483d",
"comparison_sha256": "10d69ebe1db5f37abe8ce9c5881ddf59318d8d16fc0d2cc9b611e2f7ee145246"
},
{
"name": "seed_validation-matched_energy-03-s1073741825",
"repeat": 1,
"output_hashes_sha256": "f757b81d16052c1d447436406281a12596cca5b45319b32f1e880b4a586191fb",
"comparison_sha256": "65a7bff4eed524b3a0f8a9b19e9c0ba14b1b7290ccb96fed9d714bde4b5d2d7d"
},
{
"name": "seed_validation-matched_energy-03-s1073741826",
"repeat": 0,
"output_hashes_sha256": "610aa5d4a974c0151cb5a74303b2b10004a8f15f9ed47518066d97d1b4faf394",
"comparison_sha256": "27ed1cccf0608322ec9673a106eacda429f7cf47d7ff7a12d81cf893daf5ed56"
},
{
"name": "seed_validation-matched_energy-03-s1073741827",
"repeat": 0,
"output_hashes_sha256": "39eee0cbfcd588369459409af7cdb3b624fe4195ccd3294ab495932401a12a7d",
"comparison_sha256": "153272419ea676b53477d5e6c748b524938443f30c082fe1e515eaaf32ba4d15"
},
{
"name": "seed_validation-matched_energy-03-s1073741828",
"repeat": 0,
"output_hashes_sha256": "e814cef4892cf8ef975c2803b88a3acbafbd7db483543f9b7a13e27c54d98b6a",
"comparison_sha256": "32edafa2c26b3c0499f21c2af6edf2b3846f5967f2bf92501f4ce072cdc473d8"
},
{
"name": "seed_validation-matched_energy-03-s1073741829",
"repeat": 0,
"output_hashes_sha256": "2080115e6c7041dcb3ee04b808dddfd12521ec754ef5d93e9f30e54cbab7fcc9",
"comparison_sha256": "484fe2197d7883cbcfc4afc478d2b053fc3384e1555f98831bdaae34c4459de5"
},
{
"name": "seed_validation-matched_energy-04-s1073741825",
"repeat": 0,
"output_hashes_sha256": "012b1619efce8f43b954bcee95eec7fd222ea263e743aab00080f8d5b33efd19",
"comparison_sha256": "d62446808f3c8027cb5cddfade8979b0eefcb75cda53b527079c8942b351e400"
},
{
"name": "seed_validation-matched_energy-04-s1073741825",
"repeat": 1,
"output_hashes_sha256": "9640eeba64c7d4e1c7752674fb188d1042e35a03ac3d30859ffae31497cd4aee",
"comparison_sha256": "6335c04ea45ae239784db0963e2be53684fbee17c9d146c77b1d1048f3a3b453"
},
{
"name": "seed_validation-matched_energy-04-s1073741826",
"repeat": 0,
"output_hashes_sha256": "dd286a1fb6d4fd46c3bf1364f607596c99beb03ad817ee1c60748cb20edd630c",
"comparison_sha256": "7231c266fdd2efce0225e059a0c51fdc2949d7e3fdd197213257a72ed2859467"
},
{
"name": "seed_validation-matched_energy-04-s1073741827",
"repeat": 0,
"output_hashes_sha256": "de0504c02fd772b4700aa89722702e1c659391e72af65c5c29716a0b0640c761",
"comparison_sha256": "2f5fcf6966e23544f368f1678476af2c83a036d30e611067007c76935491bdec"
},
{
"name": "seed_validation-matched_energy-04-s1073741828",
"repeat": 0,
"output_hashes_sha256": "f2f4d71423203ad068878735dfcabd72a6932d1440da98f609e134fd2ad5108d",
"comparison_sha256": "c17dc0becc0c74223e5318dc6972ec38dc702fc703a31657434293a373c056ab"
},
{
"name": "seed_validation-matched_energy-04-s1073741829",
"repeat": 0,
"output_hashes_sha256": "e9bec4dcc31e4cb811c63b46a7ab7e7a5528a5ddf619b0d641a0367fb5d1e317",
"comparison_sha256": "25e9fdce01f9b1eb6b5ff96b45443a2ac14a04f21f36bcc6b2c5f29287f26b65"
},
{
"name": "seed_validation-matched_energy-05-s1073741825",
"repeat": 0,
"output_hashes_sha256": "6a106b9690460727a4410d1187fd4b67e534315d169390b81b19aa47e0220158",
"comparison_sha256": "cc17d5b6caa2efec440ce87e3ca7082844ae4e088f5a74e58d282759f4245c00"
},
{
"name": "seed_validation-matched_energy-05-s1073741825",
"repeat": 1,
"output_hashes_sha256": "ba9a412d902bd235c4cfb9b3470086cedb4121d3526490358ffabb26423a6eb0",
"comparison_sha256": "b2494d60178fc12b91386897fd10e735c385e43cf44981cc382d84d0270b51ce"
},
{
"name": "seed_validation-matched_energy-05-s1073741826",
"repeat": 0,
"output_hashes_sha256": "b652c0f8a4d94c0550c0d67e2eb98ac8bf974247b61df769cfa0151b41648784",
"comparison_sha256": "d8d11623d99fae06e7848c640e9a7816b8dc05e02fae79a8a18cd5894b87da1c"
},
{
"name": "seed_validation-matched_energy-05-s1073741827",
"repeat": 0,
"output_hashes_sha256": "d3458140cad01d2c78b2631a13834fc654a278b277e773636cbfc8c7ab9db0b9",
"comparison_sha256": "5289007e2d2334124dee3fe7c3a6f3fc9822eac7072e630b80dd63df92e9afcf"
},
{
"name": "seed_validation-matched_energy-05-s1073741828",
"repeat": 0,
"output_hashes_sha256": "8d8e46f51f10c18a39797b3f54d12c05f8622a2acde7e4682eb0f7cfcaf492a1",
"comparison_sha256": "68884110503c0fb7ffd3116c976739853e816227d756a671733b8b09bdb20f1f"
},
{
"name": "seed_validation-matched_energy-05-s1073741829",
"repeat": 0,
"output_hashes_sha256": "8b18331a457665e4d3b23e65ddf82011b6049aa6e0a67ac4f7cfe2bc1f90a7b3",
"comparison_sha256": "eae05625351f1f0d4bda71fdfeb61a5f7852e21e3fedc849f143ab7c52f741f5"
},
{
"name": "novel_to_aj-physiological-00-s1073741825",
"repeat": 0,
"output_hashes_sha256": "3728bb76d03a4aa0dcd0cdcaf91eaa5e6d808a26f96320827dea8f43864c7e75",
"comparison_sha256": "3a1aefc6c21ab45ba6527b1e68d746ffc49090ac930a9c594e7689dd415634d4"
},
{
"name": "novel_to_aj-physiological-00-s1073741825",
"repeat": 1,
"output_hashes_sha256": "f7cb5f19e1d3e3fd29ea1cfd208a30d7377f7acaf3e4b00d4f7a63baaa8f334f",
"comparison_sha256": "bcbd6df89b094b73d1664c0486b8b3719c112c8c97d340c93512e913a005797a"
},
{
"name": "novel_to_aj-physiological-00-s1073741826",
"repeat": 0,
"output_hashes_sha256": "2a15781e0c5adc10e8ed2ded14d1e81b41e786bd1d221d245a7185b9e28a66eb",
"comparison_sha256": "090017e9c45b1657eff05e50961769da8ff1d9b133ea80551d560bd885bf1e05"
},
{
"name": "novel_to_aj-physiological-00-s1073741827",
"repeat": 0,
"output_hashes_sha256": "07fa232c8fc35db860d4c8ea675b35178190f77fedbc90cd022e560cc2a1d3ad",
"comparison_sha256": "32e052fe34ca6266e2cf48dec8c6f089d3c8dc43a07b5be3e9736201bee52249"
},
{
"name": "novel_to_aj-physiological-00-s1073741828",
"repeat": 0,
"output_hashes_sha256": "177839bf5fa9e9303c3cc111ae5bc28f80c467577850027a38922ff1607c1178",
"comparison_sha256": "6d6ab7708509ddae8e3d889a72bbd21cce890ee39d1afec1e976d40d922464ad"
},
{
"name": "novel_to_aj-physiological-00-s1073741829",
"repeat": 0,
"output_hashes_sha256": "3f771d2804ae735fd84c273378bf160b570878443bbbfb9e902fc1e6c6da42e3",
"comparison_sha256": "09c4f8fe892e65f9b7dd73cc9d57f5616706a777863a320f00bdbc2bf6139fac"
},
{
"name": "novel_to_aj-physiological-01-s1073741825",
"repeat": 0,
"output_hashes_sha256": "4011460d77e1490ad496814cdb0f9959a053fb3cf1f1554949cf906b4084c66a",
"comparison_sha256": "cacbf130b34eed1df454c5d1afcfeb464a91894aa79a19947e43f2df2cc99c0e"
},
{
"name": "novel_to_aj-physiological-01-s1073741825",
"repeat": 1,
"output_hashes_sha256": "1e3dd5ccaba7fb148f208a523b6d065863ee7e255394c6ba4e87d9e35de01e34",
"comparison_sha256": "1c814a5dedbd9a9ba929e4ab1a1cb943ff9a7a27919f4cfb3b886dc2cd75f873"
},
{
"name": "novel_to_aj-physiological-01-s1073741826",
"repeat": 0,
"output_hashes_sha256": "8ec452dbf69bafebadfd65a147b4e1fcc1bb47802a7ce03bdf47ee46ad3afb80",
"comparison_sha256": "7d5699b472c735b3ee2c871a8cb5d9c939858550d8ba30adcf9159de8ce02709"
},
{
"name": "novel_to_aj-physiological-01-s1073741827",
"repeat": 0,
"output_hashes_sha256": "228c5356a56a753afdc937d97c1dc58c9d4b1bb0c9c558f46bcb70e7cbe3c083",
"comparison_sha256": "67c613bdf6cc9b639d5552667e78a06f0a193b9741d62227cc0b9948bb226b57"
},
{
"name": "novel_to_aj-physiological-01-s1073741828",
"repeat": 0,
"output_hashes_sha256": "355b096aed24623a8904b73943a903350732ccd1a06e08d8142e9cc93fe2a096",
"comparison_sha256": "632fb0fb1f298b7dcdb73558914ef1408765ada4563640d8aa4965deeb1308e2"
},
{
"name": "novel_to_aj-physiological-01-s1073741829",
"repeat": 0,
"output_hashes_sha256": "94fcd5c82ec82920c0c3777f5006a0f909389dc16f8adb0927e46a8d8e79d861",
"comparison_sha256": "067eb2a9caedf9c006d8d30db97bb8298892362710631ec64ea52841176f1e49"
},
{
"name": "novel_to_aj-physiological-02-s1073741825",
"repeat": 0,
"output_hashes_sha256": "475be6525e692f4e5c9f6023a2c14fa57f5adea0dfc5ab84c116afea0a795812",
"comparison_sha256": "c6b6c6cb961d1de53455368bf14003f4de8d51e267914d089dfedb1128973e76"
},
{
"name": "novel_to_aj-physiological-02-s1073741825",
"repeat": 1,
"output_hashes_sha256": "53129c35462a1a33ddb7b6431e19ffc64a71c2dead23735450c4a1a2f25792f0",
"comparison_sha256": "d096628954032ecf979d63018bc01b7adb484ed60baf2cb2e8b28dbb96f1cc58"
},
{
"name": "novel_to_aj-physiological-02-s1073741826",
"repeat": 0,
"output_hashes_sha256": "983a6f77a817defdd14097a80f6368410a912202854c48c8a14a81465cacc1cb",
"comparison_sha256": "97a0d8c30c0ba4e81fdb90e91ecf8e1faa3b67b1b8a398f448ad64b35180a082"
},
{
"name": "novel_to_aj-physiological-02-s1073741827",
"repeat": 0,
"output_hashes_sha256": "1e859bdb843cfb8b96e14d129b420fefd40b169f0e302d622913de193e289758",
"comparison_sha256": "2c78a9de1a6b505c3a5f0b838d001606ab75f9287c1f86d8b84384f8ac59a071"
},
{
"name": "novel_to_aj-physiological-02-s1073741828",
"repeat": 0,
"output_hashes_sha256": "9f1dccb283437fb9eb5169a457f4e4dbde7638097290b6329a15cf295c3b2282",
"comparison_sha256": "3ac38362ab5b1abe3d209471d8717badfb084078568cbfb6fd60ea955d6ccd5e"
},
{
"name": "novel_to_aj-physiological-02-s1073741829",
"repeat": 0,
"output_hashes_sha256": "20b71e15130fef981e36b1cd24d5d008951081ffb966e0442d9114cd33767bba",
"comparison_sha256": "e0e79466d43e534dfc2170fb1ce63d38f31bf46ac3bff8aa91bca1d4701c9684"
},
{
"name": "novel_to_aj-physiological-03-s1073741825",
"repeat": 0,
"output_hashes_sha256": "df43a7c3339dabaf6a6f104f86025725de63da23e90755e1d18c08311478bbb2",
"comparison_sha256": "6e10b4775e90d53d9a0215b3a92726fcfe5e1c151237b2b907c37d357a80e892"
},
{
"name": "novel_to_aj-physiological-03-s1073741825",
"repeat": 1,
"output_hashes_sha256": "9483418baa7aed2647589a3a0f755650914b98ec2a62a2159494c5f3510b97db",
"comparison_sha256": "03fa03ec5c7ca5abbb28b818470fb93e3d0bb7749e0b317993a99717ca3720e4"
},
{
"name": "novel_to_aj-physiological-03-s1073741826",
"repeat": 0,
"output_hashes_sha256": "183447b55333dc417b09efc15860254bcda42439377e1f4927c9fe7aa6328fd3",
"comparison_sha256": "10f16e48bd6ca90ea98bc87c05d6ec24848eb4e5c28595ee143e551522d4a758"
},
{
"name": "novel_to_aj-physiological-03-s1073741827",
"repeat": 0,
"output_hashes_sha256": "f798a10d1dc5d6c79ff7e9d34eaf56bbb644d2c859bbbb1b8bcfb3e45b1dc82d",
"comparison_sha256": "edc8c55eea7f58518c9665bf60770aca97fea5371bed45eb5d36c396f104e2ec"
},
{
"name": "novel_to_aj-physiological-03-s1073741828",
"repeat": 0,
"output_hashes_sha256": "f62e72ef80994b7cd1f85b4ebed5db52cded6935eb6e7001689ecc42975e3a13",
"comparison_sha256": "3801adc05a9b9191f167bc3056d4d4e98bb1119539f270e99db9b815b682ee6e"
},
{
"name": "novel_to_aj-physiological-03-s1073741829",
"repeat": 0,
"output_hashes_sha256": "904f33833e6021376ff79e00e9b1cd03fb063e2882c4a6562e6c86dc2d0b7048",
"comparison_sha256": "6a8c310aad6d8fe1a737f2b1f04b10c7fca4cc2329bc5f997d723d073b35e176"
},
{
"name": "novel_to_aj-physiological-04-s1073741825",
"repeat": 0,
"output_hashes_sha256": "f58b69539b95efca152161409d9674b7db800ece3ced61c71cfcde5a89863559",
"comparison_sha256": "dceb2cbe64a19db7925299da6af3101178bb4c0dc347e4ca17f9dbc98728436e"
},
{
"name": "novel_to_aj-physiological-04-s1073741825",
"repeat": 1,
"output_hashes_sha256": "3f3ed912e69c1b332ce11709623c977aa49f5dcd6c5d6690c213833044bd980f",
"comparison_sha256": "ad5483fddee8b1dd48f07aebf20558a0e6a261e9e40713c5d1e4849baa65a73e"
},
{
"name": "novel_to_aj-physiological-04-s1073741826",
"repeat": 0,
"output_hashes_sha256": "79f81b9eb6ea036638ccca5d519924a30d458884480176ecdd586e52abd566ea",
"comparison_sha256": "406f4d0b555d28923e66c67b33b08d7ef5919db807f3611cb6a9549fb0616f85"
},
{
"name": "novel_to_aj-physiological-04-s1073741827",
"repeat": 0,
"output_hashes_sha256": "945e98f251bd537931941ce6c86df76659fae0d6063b066e07e4dbe0191729ac",
"comparison_sha256": "3c6c3224a664f505f996927ef0bf179855a4a5c615fd9a6062e3cc210f941581"
},
{
"name": "novel_to_aj-physiological-04-s1073741828",
"repeat": 0,
"output_hashes_sha256": "b68ea688c7f070c5391023c5ec43e5a7f60f0b7a910dec29de7188e32b2445d9",
"comparison_sha256": "6a3690a9ee9e84ad67d4a825dd7240749dee2439b4bbad62e18d2bffcba905db"
},
{
"name": "novel_to_aj-physiological-04-s1073741829",
"repeat": 0,
"output_hashes_sha256": "f15054e6d416a373da2d9a57fd63303ad413531f7ed7433cbc44401a88d5d7fb",
"comparison_sha256": "7c048b5ca2338ead44f29cb0bf9062d52b76828bf4109f3e6ebadc6bb54870f5"
},
{
"name": "novel_to_aj-physiological-05-s1073741825",
"repeat": 0,
"output_hashes_sha256": "e55dd6caf670b47f0daba82db952a98932752753d5fb7d91e6ddfbc873226c38",
"comparison_sha256": "cf8772813eaed741548226d9291d435ebecd05fee2512554d9029def6eb418e7"
},
{
"name": "novel_to_aj-physiological-05-s1073741825",
"repeat": 1,
"output_hashes_sha256": "b1f64a54fd6313c9b9f22f605f8ff009092ef315c408217fc93bffc24e6deba3",
"comparison_sha256": "c6078a81be1ebfa35ba920dd801e6d4ec0f4d3f2637f443de831fc39515073a9"
},
{
"name": "novel_to_aj-physiological-05-s1073741826",
"repeat": 0,
"output_hashes_sha256": "046431e5158af3b10de0f954e092a28b71f3dacd5a4229d38e4105638ae930cc",
"comparison_sha256": "d97de2ef8c2a9afcf29ef20cc253d215f338ef943330601516563c89e8fdfb1c"
},
{
"name": "novel_to_aj-physiological-05-s1073741827",
"repeat": 0,
"output_hashes_sha256": "e6be053b57e60c598c9e4f4382ab5b35dd94fe879935143652f8799ee04b011c",
"comparison_sha256": "62cd5124778d193abc3bb912980abb67675426a13daceab0e8b28082855f974f"
},
{
"name": "novel_to_aj-physiological-05-s1073741828",
"repeat": 0,
"output_hashes_sha256": "96edd10faa507d866c2a84219002d57a59fd4393e26b4059c2cbd193ae0167c5",
"comparison_sha256": "cdfe71869644c42073af3366d43a6b13dedeb41a694ed292eb9c1a03951e4019"
},
{
"name": "novel_to_aj-physiological-05-s1073741829",
"repeat": 0,
"output_hashes_sha256": "31c0992ec7bc25bd80addac283eda45205d224e3c68bc80edb46e0a84be57ad2",
"comparison_sha256": "4bd1ace7b5fa97da81f9b290013ee8a82c31b43543d28ed6da710ee15b87b85c"
},
{
"name": "novel_to_aj-matched_energy-00-s1073741825",
"repeat": 0,
"output_hashes_sha256": "e0df38b9acf98da0c43a029b125f516ce51f6ff24588b66f24d78b9610e9fe52",
"comparison_sha256": "2e61ecf24f730bbf732a18c0e400efea39384627f091cf831dfa60515cfb3df7"
},
{
"name": "novel_to_aj-matched_energy-00-s1073741825",
"repeat": 1,
"output_hashes_sha256": "9fcdf6ba3ba281d04cf5fb25f4da9e349738738ccf01e56fcac78c676552db4b",
"comparison_sha256": "472da4ec0d18586dcc6dddea756afb535f9f244b812e82fc5d244c7b25b4564e"
},
{
"name": "novel_to_aj-matched_energy-00-s1073741826",
"repeat": 0,
"output_hashes_sha256": "153926d54e5ed39b2b92f2725223f6fd611d78c62cf409e9b27c0071e36d922b",
"comparison_sha256": "2b19e1787310725a596ba9e317780ec0505713d6216699a6b845cec8d1645adb"
},
{
"name": "novel_to_aj-matched_energy-00-s1073741827",
"repeat": 0,
"output_hashes_sha256": "f1212496e7aa271a6052699bb306931043dce2ae8c1c5a6508c85ff77b056743",
"comparison_sha256": "d43346c969c3befaa5f61a53fa2f0ebd441b28908d5ee98f76dc08bd2b8f4600"
},
{
"name": "novel_to_aj-matched_energy-00-s1073741828",
"repeat": 0,
"output_hashes_sha256": "86623a0eecdbb1050a7a5eabd322b327c33daf60f8dec7e485dd67c6204c96bc",
"comparison_sha256": "a5788d8b8d43eeee3428e2fc22bcac78c11fd4c286a52310aa0e37316cd85821"
},
{
"name": "novel_to_aj-matched_energy-00-s1073741829",
"repeat": 0,
"output_hashes_sha256": "990f066ccfdcf76da28320765349700269c563dfee2e68830759ec7e6d554722",
"comparison_sha256": "c52b936bac6f7b648a0b071529ff3ed6e2e5ff4ae73d6e4b32c2ae4ad61086b1"
},
{
"name": "novel_to_aj-matched_energy-01-s1073741825",
"repeat": 0,
"output_hashes_sha256": "b5bfe6af9120cf13f7d2c583a076d1f0dffa1328e49a12403cbf8a15147ba97a",
"comparison_sha256": "570ad048f6ec0f096a3afd7aa587be8e46683274b81c6a172d8b1ed68fc1bd56"
},
{
"name": "novel_to_aj-matched_energy-01-s1073741825",
"repeat": 1,
"output_hashes_sha256": "c49b7193c226092e5947ec77c3576bd50af58f4bd6ee447631d9c9052991b14f",
"comparison_sha256": "86a79e56d476624de40f339f00b1a6a263fb182dfe296ce28aad96e15c980b2a"
},
{
"name": "novel_to_aj-matched_energy-01-s1073741826",
"repeat": 0,
"output_hashes_sha256": "77c894329d8e342eabc78fb0e9fd8870bc4971569547c238de7e3b97ba73b0ae",
"comparison_sha256": "af8921c88e6c4778b6cf5cc5320e5a36d30f7cdab3a669f534165c9526829676"
},
{
"name": "novel_to_aj-matched_energy-01-s1073741827",
"repeat": 0,
"output_hashes_sha256": "b57a03f05c01b8bfbb6969d02273cebd18cba6e28e690862f3ddb04d89b84f73",
"comparison_sha256": "52dca07e0eb692cce36cb6c3f984240f4372f4b6aadd10b0303861f5beb5afaa"
},
{
"name": "novel_to_aj-matched_energy-01-s1073741828",
"repeat": 0,
"output_hashes_sha256": "5402412c5b9566c953f715fe0b3abfac34211704388d9707210950a1c001e2c9",
"comparison_sha256": "d13ff510e2731ae98ccb9730ad6f32407bcdedec444eee745a24b9d03d68c937"
},
{
"name": "novel_to_aj-matched_energy-01-s1073741829",
"repeat": 0,
"output_hashes_sha256": "cebbc8a585887c8f716a2a7aedaa2185fd1b32827bc6b8ea7f46a23d9fbc1308",
"comparison_sha256": "7f61b27cf60e2990d87ba6c6f3543b569324d5d5437e9d5704244371f0af0e56"
},
{
"name": "novel_to_aj-matched_energy-02-s1073741825",
"repeat": 0,
"output_hashes_sha256": "2d8224f28d8429ae1049f08868ff36e112db44b4400de71e0c5bb9cb995e49c5",
"comparison_sha256": "177174e19066024df389ed961d878783dc33f5dae102b48862ef4c51e0cd9a23"
},
{
"name": "novel_to_aj-matched_energy-02-s1073741825",
"repeat": 1,
"output_hashes_sha256": "8382f844614c9776ea3b2ead30ed4ece8f5b45cf509a4ff9bf60b74956089766",
"comparison_sha256": "f179e27e2754fc4474d667db05c25142cbb11ab0ca55576504e55e5e1bdd63aa"
},
{
"name": "novel_to_aj-matched_energy-02-s1073741826",
"repeat": 0,
"output_hashes_sha256": "ed5b36d48a5df47a734bf5b92af2510d3813d5fbcf82decf66b498e68d1124c4",
"comparison_sha256": "7afc622e035fc1147c303afadb49ab462fd19bcad073350308cf77986c9dcad5"
},
{
"name": "novel_to_aj-matched_energy-02-s1073741827",
"repeat": 0,
"output_hashes_sha256": "1cd01e154dcc18e7765f11340b85108335ecb26e587880a1c227f66b8ee77197",
"comparison_sha256": "ae3c48cbf3f4fed23f4c222e6b499999dbcadb4fea0138f5bac5bf4042c6fc21"
},
{
"name": "novel_to_aj-matched_energy-02-s1073741828",
"repeat": 0,
"output_hashes_sha256": "4064765626ff396f77db4fb898848118bbc97f75bc89f01d50c8e8157abdd708",
"comparison_sha256": "5983fb207fc1fdf1bd94b2b3fd958d5c69b156ef4574f12777cdf85d6c17211a"
},
{
"name": "novel_to_aj-matched_energy-02-s1073741829",
"repeat": 0,
"output_hashes_sha256": "57d0fd7852550de4f7520c27142857b0fe7227bce9caf99a619f98c2559088e7",
"comparison_sha256": "6f2b1944b415743dcaab3edfe83c2df5886d7bb5ac4d5a4072c236d71389b344"
},
{
"name": "novel_to_aj-matched_energy-03-s1073741825",
"repeat": 0,
"output_hashes_sha256": "f5a62406de6c714b8d0485f858014e5c126f701ab56733f54568e3124096018a",
"comparison_sha256": "0e7080b1d9c783046f2f6e386cbeb4e3d6f684367ce08b5c9fec8bd99a53cd73"
},
{
"name": "novel_to_aj-matched_energy-03-s1073741825",
"repeat": 1,
"output_hashes_sha256": "26eddb1b9def876636d6aab6ebf5e76bf2792c0e9a516a1fde07aee85c6a6d48",
"comparison_sha256": "738b52055ab24d76277ccf33a774e5d104b4fd4b2f2b25799181311f64229023"
},
{
"name": "novel_to_aj-matched_energy-03-s1073741826",
"repeat": 0,
"output_hashes_sha256": "25307969798683fa58267c0777f7e3e8ee39c4338ebca372fa7e9ebde244858d",
"comparison_sha256": "61bc1e2997d9c820190c90ddf43c9a2574d154ba88fdf79b10623dffb397417e"
},
{
"name": "novel_to_aj-matched_energy-03-s1073741827",
"repeat": 0,
"output_hashes_sha256": "08706e19c64bde859fbdfc333b9161eaa0b6b4c508e2ec3abe2b5fc3e20910d9",
"comparison_sha256": "de1204f9aa9014132cdb68b14ec2a67d946d865f678fadcb99f9ab9a08abd07f"
},
{
"name": "novel_to_aj-matched_energy-03-s1073741828",
"repeat": 0,
"output_hashes_sha256": "b899453e6e33ad8a573073877e81ff3229e940a0bef1e35b712baddb63da393f",
"comparison_sha256": "433dbfecdad48e899e4817db44a71750cdcebf91c8a881fbffb60194ee129689"
},
{
"name": "novel_to_aj-matched_energy-03-s1073741829",
"repeat": 0,
"output_hashes_sha256": "dc3a5a998f783a7e8acea1cbf33b907d8d182edbeeb31ab15dbe2e7ea88cf909",
"comparison_sha256": "5d799451053b6c7cb1c3ece7161b9b16f153b993074cd0863f5d7bc4deaba6d4"
},
{
"name": "novel_to_aj-matched_energy-04-s1073741825",
"repeat": 0,
"output_hashes_sha256": "656a5c12105aaef3a7941b6692b31506176be4662c625cae11288127bfc82cea",
"comparison_sha256": "5d3bdd2919c77c305e365f0512531c1d0ad2b7bf1b65ff2fe979f68c5f66978e"
},
{
"name": "novel_to_aj-matched_energy-04-s1073741825",
"repeat": 1,
"output_hashes_sha256": "c0e08582857ac49e524ad1b3a56ed71dd670f29a4c339c8bb2cacecb8c9526c0",
"comparison_sha256": "3121f98be390a5632f6f01d877f47fb08f5f5db8976a7c9d7be3b24b69028663"
},
{
"name": "novel_to_aj-matched_energy-04-s1073741826",
"repeat": 0,
"output_hashes_sha256": "ac4d439a96db968a53b42871dcd989ddbcfe2c319621d30da5adad208deacdb1",
"comparison_sha256": "2e77666b6ecfdb3f9968359d5bcb93dd72d09d6df9fa4e99ed8ebb892dafcf7f"
},
{
"name": "novel_to_aj-matched_energy-04-s1073741827",
"repeat": 0,
"output_hashes_sha256": "1c222e0616f9724034cdd984f9ef5c24ad9618388bcbfdb4fea9d49c1a5927c0",
"comparison_sha256": "e005c415d17349ba94c3fcfcf1e2ea313e06849ba1db7f0b3924af82da1adb0f"
},
{
"name": "novel_to_aj-matched_energy-04-s1073741828",
"repeat": 0,
"output_hashes_sha256": "fa57f4597b334e8a0a063cd53a1fa924150a4b32d57c0f2f86f7d1fc54e277fa",
"comparison_sha256": "86b54a97829186c17d797dde5bab99fcda65f13f82b558a703de7af78a3add3c"
},
{
"name": "novel_to_aj-matched_energy-04-s1073741829",
"repeat": 0,
"output_hashes_sha256": "bbccd0558108e2bfe5e7bdeabfe7e52fd3957a5297cde8e7193b3944a3650d4a",
"comparison_sha256": "2f0da55fc6041aec8b55a227143e1e25762cb84b0a04054e2d225433b4898c3a"
},
{
"name": "novel_to_aj-matched_energy-05-s1073741825",
"repeat": 0,
"output_hashes_sha256": "14668488730f589571fbdf0688eef41053c26cdd140362ba24631756f6cc8f10",
"comparison_sha256": "e69dcc2db39e80baff6906658135ebebf174fe01f03ce17c738d45ac527293ca"
},
{
"name": "novel_to_aj-matched_energy-05-s1073741825",
"repeat": 1,
"output_hashes_sha256": "92ce09ac7bd7368466cb2b745bf4505640ba10d43e0c806de2c4ef06dbc6f31c",
"comparison_sha256": "56b678e2477d1812f15d3101ace014360a8c45d964633630414e2cd6dc5ddbcf"
},
{
"name": "novel_to_aj-matched_energy-05-s1073741826",
"repeat": 0,
"output_hashes_sha256": "f96c5f203242ffd4a6d5f0af55edfd061f406e1807f0bf522217d7fa186fcffb",
"comparison_sha256": "c6cfb263e624be2d184ec8834408c349ed350fda50892c89eef6b759bd2d5f76"
},
{
"name": "novel_to_aj-matched_energy-05-s1073741827",
"repeat": 0,
"output_hashes_sha256": "a15a03174dddb5e4c8e2c998083da8385b5764e304220658c29288b0572708ba",
"comparison_sha256": "603cb68923e66ed351bc1b0ba2402c9096682b647bb05611250be5b82ba38c09"
},
{
"name": "novel_to_aj-matched_energy-05-s1073741828",
"repeat": 0,
"output_hashes_sha256": "cb65521a30bb94dfe4ff2e4aaa3b332e920d9ba47b2d09627b8b354201fec4ed",
"comparison_sha256": "da9658d52cf54b55c9428858c26c2ed14d7ad9ea1c87d525e99b726fb1f85ba6"
},
{
"name": "novel_to_aj-matched_energy-05-s1073741829",
"repeat": 0,
"output_hashes_sha256": "638309996c862e55339a816018ddce1727d7ab5a53cd490ff6c29752e6e1678b",
"comparison_sha256": "558e5a64cda3a8c184a044d2cdc44b7b23c9b2303ec1c7dae770f1f4aeaa8fe6"
}
],
"wall_seconds": 1665.339973549002,
"training": false,
"scope": "All zero-delta runs exactly match sealed AK"
}
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,17 @@
{
"binary": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu-reference/extension-build/male_cns_lif_deterministic_v2_ext.so",
"binary_sha256": "cbba6e8d7a99a8fc4c53a523da8a72ba2fc99decd9369c6f56085dce61acf964",
"build_seconds": 54.533880727001815,
"flags": {
"cuda": [
"-O3",
"--fmad=false",
"-std=c++20"
],
"cxx": [
"-O3",
"-ffp-contract=off"
]
},
"status": "PASS"
}
@@ -0,0 +1,66 @@
{
"adapter_file": "/data/digital-drosophila/models/male-cns-lif/wholebrain-plastic-interface-v1/adapter.py",
"adapter_sha256": "3daabe771d3eef6c6189827c0ee5159b266c3a058e07da5781bb863be428aef9",
"apl_delay_steps": 18,
"ast": {
"adapted_run_ast_sha256": "b0401e196eb3a9f40873381ffa2d5a42bd9d2be854c386851c80fb0b0a386eb0",
"derived_namespace_file": "/data/digital-drosophila/models/male-cns-lif/wholebrain-plastic-interface-v1/adapter.py",
"entire_tick_loop_ast_identical": true,
"fake_original_file_used": false,
"hook_after_apl_zero_before_effective_hash": true,
"inserted_ast_statements": 1,
"loop_ast_sha256": "b50b21b7239f6b55b357e9f275786099c06e8e1ea924aeca07f13d3955d64151",
"only_ast_change": "_phase4am_install_overlay(weights, graph, apl_out_mask, upload, out_dir, source_provenance)",
"original_module_file": "/data/digital-drosophila/models/male-cns-lif/apl-timing-lab-v1/gpu_timing.py",
"original_module_globals_patched": false,
"original_run_ast_sha256": "6efd7d130a853ba9e99cc8672580ac91fcda9cf0883631efcd61c5e673756e1b"
},
"complete": true,
"delta_constant_for_entire_trial": true,
"effective_weights_raw_sha256": "a60a2846dd952916097cecd1d3daf74cf5e785818749e0ffd818b3ced1c58fd2",
"inherited_source_audit_describes_AM_semantics": false,
"inherited_summary_sha256": "9ded1d6c4b66e642448caabbcb3da36c428f28375685b97a2866a30e33e8d149",
"installation_calls": 1,
"learning": false,
"original_module_globals_patched": false,
"overlay_audit_sha256": "949d7f986ae2212d44777bd351b88e54c38db857fc062d4d232c2670d31e3085",
"overlay_module_file": "/data/digital-drosophila/models/male-cns-lif/wholebrain-plastic-interface-v1/overlay.py",
"overlay_module_sha256": "7f891d0ba79b393c96e75fd2dee2eddc51e57d8213eaac2779703bc2c18712b4",
"schema": "phase4am-adapter-provenance-v1",
"scope": "constant sparse overlay installation only; no within-trial plasticity or learning",
"sealed_sources": {
"apl-timing-lab-v1/gpu_timing.py": {
"path": "/data/digital-drosophila/models/male-cns-lif/apl-timing-lab-v1/gpu_timing.py",
"sha256": "af1975ba5e5e700208c0a598d3cbe648a3cf10885c6231239b6e4b28f76d173b"
},
"apl-timing-lab-v1/timing_queue.py": {
"path": "/data/digital-drosophila/models/male-cns-lif/apl-timing-lab-v1/timing_queue.py",
"sha256": "54df6d4818e2a0c26e96fb0aaf5d9b71cd964981706da937562d48af79aca14e"
},
"author-apl-lab-v2/gpu_apl.py": {
"path": "/data/digital-drosophila/models/male-cns-lif/author-apl-lab-v2/gpu_apl.py",
"sha256": "69f5d893f47dafff4ef7c3186c3df0b9014666b32c8f4e943b57016bec92b18a"
},
"author-apl-lab-v2/legacy_apl_worker.py": {
"path": "/data/digital-drosophila/models/male-cns-lif/author-apl-lab-v2/legacy_apl_worker.py",
"sha256": "21ceec65fe42581dc55872010e0025d660e80358905f1cf4df1dadf341a3b291"
},
"author-fullgraph-lab-v1/oracle_full.py": {
"path": "/data/digital-drosophila/models/male-cns-lif/author-fullgraph-lab-v1/oracle_full.py",
"sha256": "d72003d98f0f1624b12126eff50bd361c43d888f4a64d90ba9247a58976f1961"
},
"author-runtime-lab-v1/author_ext.cpp": {
"path": "/data/digital-drosophila/models/male-cns-lif/author-runtime-lab-v1/author_ext.cpp",
"sha256": "208a937d17bbb041b9bf6b25b89264ee566830b60609e58491b44583d8541f15"
},
"author-runtime-lab-v1/author_ext.cu": {
"path": "/data/digital-drosophila/models/male-cns-lif/author-runtime-lab-v1/author_ext.cu",
"sha256": "669f166e18ce9a3f63fc723db8b0a8b74f7fa4757194b1bd65b4cf6008a7787e"
},
"author-runtime-lab-v1/gpu_backend.py": {
"path": "/data/digital-drosophila/models/male-cns-lif/author-runtime-lab-v1/gpu_backend.py",
"sha256": "03758d07572f4b44d272059d9308fac534268ad201b57bdd77d69fee95e67278"
}
},
"weights_updated_during_run": false
}
@@ -0,0 +1,45 @@
{
"ok": true,
"protocol": "phase4ag-apl-v1",
"n_neurons": 166700,
"n_apl": 2,
"n_kc": 4064,
"dt_ms": 0.1,
"files_sha256": {
"input_matrix.npy": "c4d3df703ea5f1d7402b8255cfa19d9744139ad1048827c23b151d8ba766fec6",
"output_matrix.npy": "e2d0a1ccd740e6777245ebf2efcd88bf5e1da9e47308c63ec8e83d451e134a73",
"kc_globals.npy": "97a570aafa089f93e642b2bb07e3a3322dabb14c3c7dd431f0c8d2b3b7951fdd",
"apl_globals.npy": "8388c8795d49cfe5b14fda54f76ef3a35030c62ba87bd8ca6334a2dcdf186f19"
},
"array_sha256": {
"input_matrix.npy": "528a5f6f5ffe424f323c5a44695db4a7cf32570709832eff2f37f49e85c92c3e",
"output_matrix.npy": "0dcf02cdb7836ab72da32ac47f5682ca33e25f63a8a662a8452d4ea9d46babb9",
"kc_globals.npy": "9e990d10a63b0f74cd7bbbdc5369082f24d5246487af944ba289bc6bf48d4b75",
"apl_globals.npy": "979ef88dff30d41168ce9b377a006ccb3cd034b2dce86d54923ca0f4b87cb6a6"
},
"decay_f32_bits": "3f7eb923",
"gain_f32_bits": "3c23d70a",
"environment": {
"torch": "2.14.0+cu130",
"numpy": "2.2.6",
"cuda": "13.0",
"cudnn": 92400,
"device_name": "NVIDIA GeForce RTX 4090",
"device_index": 0,
"device_capability": [
8,
9
],
"deterministic_algorithms": false,
"cudnn_deterministic": false,
"cudnn_benchmark": false,
"cuda_matmul_allow_tf32": false,
"cudnn_allow_tf32": true,
"float32_matmul_precision": "highest",
"CUBLAS_WORKSPACE_CONFIG": null,
"precision_configuration_changed_by_component": false
},
"operator_sequence": "state.mul_(decay32); drive=mv(I32,spikes32); state.add_(drive); h=matmul(state,O32)*gain32",
"h_units": "legacy mV",
"initial_state": "float32 zeros"
}
@@ -0,0 +1,38 @@
{
"pass_all": true,
"apl_delay_steps": 18,
"steps": 1000,
"pending_generated_count": 18,
"pending_initial_zero_prefix": 0,
"initial_padding_positive_zero": true,
"sample_bits_preserved": true,
"brain_tail_advanced": false,
"generated_rows": 1000,
"applied_generated_rows": 982,
"pending_shape": [
18,
4064
],
"pending_application_tick_start": 1000,
"pending_application_tick_stop_exclusive": 1018,
"pending_generated_tick_start": 982,
"pending_generated_tick_stop_exclusive": 1000,
"generated_trace": "apl-inhibition.float32.npy",
"applied_trace": "apl-applied.float32.npy",
"pending_trace": "apl-pending-tail.float32.npy",
"pending_raw_sha256": "bac621f063d7a78ace6e713640cf4e2b7994481b3aa7bd1d6ebdd38dd06c3cbd",
"final_apl_state_float32": [
153.61734008789062,
164.1633758544922
],
"final_apl_state_u32_bits": [
1125752330,
1126443475
],
"final_apl_state_nonzero": true,
"pending_queue_drained": false,
"finite_generated_sequence_only": true,
"future_apl_decay_or_feedback_generated": false,
"closed_loop_branch_integrals_claimed_equal": false,
"biological_delay_measurement_claimed": false
}
@@ -0,0 +1,312 @@
{
"schema": "phase4am-comparison-v1",
"mode": "self",
"case_dir": "/data/digital-drosophila/experiments/phase4ak-apl-timing-validation/cases/novel_to_aj/novel_to_aj-matched_energy-00-s1073741825",
"left": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-00-s1073741825-r0",
"right": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-00-s1073741825-r0",
"pass_all": true,
"learning_achieved": false,
"candidate_generated": false,
"tolerance": null,
"scope": "Single-run event/queue/input/static-overlay self-consistency; no repeat, equivalence, physiology or learning PASS",
"explicit_exclusions": [
"build_or_cache_seconds",
"diagnostic_simulation_seconds",
"peak_allocated_vram_bytes",
"peak_reserved_vram_bytes",
"wall_seconds"
],
"independent_cpu_wholebrain_oracle_claim": false,
"overlay_name": "static25",
"nodes": 166700,
"edges": 25582938,
"steps": 1000,
"apl_delay_steps": 18,
"full_queue_reconstructed": true,
"total_spikes": 30416,
"checks": {
"left_gpu.summary_complete": true,
"left_gpu.case_name": true,
"left_gpu.history_mode": true,
"left_gpu.apl_precision": true,
"left_gpu.no_error_marker": true,
"left_gpu.events_sorted_unique": true,
"left_gpu.count_nonnegative_total": true,
"left_gpu.ref_range": true,
"left_gpu.reported_events": true,
"left_gpu.last_hash_v": true,
"left_gpu.last_hash_g": true,
"left_gpu.last_hash_ref": true,
"left_gpu.request_summary": true,
"left_gpu.apl_positive_drive": true,
"left_gpu.apl_positive_state": true,
"left_gpu.apl_positive_inhibition": true,
"left_gpu.apl_positive_applied": true,
"left_gpu.delay_summary": true,
"left_gpu.no_dense_v": true,
"left_gpu.no_dense_g": true,
"left_gpu.no_dense_ref": true,
"left_gpu.component_summary_consistent": true,
"left_gpu.full_event_queue_request_accounting": true,
"left_gpu.timing_finite_nonnegative": true,
"left_gpu.fixed_delay_applied.schema": true,
"left_gpu.fixed_delay_applied.finite": true,
"left_gpu.fixed_delay_applied.bitwise_exact": true,
"left_gpu.fixed_delay_pending.schema": true,
"left_gpu.fixed_delay_pending.finite": true,
"left_gpu.fixed_delay_pending.bitwise_exact": true,
"left_gpu.finite_sequence_row_conservation": true,
"left_gpu.timing_integer_metadata": true,
"left_gpu.pending_hash_metadata": true,
"left_gpu.pending_shape_metadata": true,
"left_gpu.pending_summary_counts": true,
"left_gpu.final_apl_state_metadata": true,
"left_gpu.no_extra_brain_or_apl_ticks": true,
"left_gpu.timing_summary_metadata": true,
"input_overlay_and_source_provenance": true
},
"differences": {},
"read_manifest": [
{
"path": "/data/digital-drosophila/experiments/phase4af-author-fullgraph/oracle/no_input/coefficients.json",
"bytes": 2329,
"sha256": "bde79d95ef0097b827d5faf4d5658eafc009d8e9fcef1fddd645c953823e3f64"
},
{
"path": "/data/digital-drosophila/experiments/phase4ag-author-apl-r2/apl-bundle/apl_globals.npy",
"bytes": 136,
"sha256": "8388c8795d49cfe5b14fda54f76ef3a35030c62ba87bd8ca6334a2dcdf186f19"
},
{
"path": "/data/digital-drosophila/experiments/phase4ag-author-apl-r2/apl-bundle/input_matrix.npy",
"bytes": 1333728,
"sha256": "c4d3df703ea5f1d7402b8255cfa19d9744139ad1048827c23b151d8ba766fec6"
},
{
"path": "/data/digital-drosophila/experiments/phase4ag-author-apl-r2/apl-bundle/kc_globals.npy",
"bytes": 16384,
"sha256": "97a570aafa089f93e642b2bb07e3a3322dabb14c3c7dd431f0c8d2b3b7951fdd"
},
{
"path": "/data/digital-drosophila/experiments/phase4ag-author-apl-r2/apl-bundle/output_matrix.npy",
"bytes": 32640,
"sha256": "e2d0a1ccd740e6777245ebf2efcd88bf5e1da9e47308c63ec8e83d451e134a73"
},
{
"path": "/data/digital-drosophila/experiments/phase4ag-author-apl-r2/graphs/full/dst.npy",
"bytes": 102331880,
"sha256": "ce20f7433f78442c717ad2a7b5394cf4a3b109d990b4be0788040b7b0f4ed150"
},
{
"path": "/data/digital-drosophila/experiments/phase4ag-author-apl-r2/graphs/full/edge_id.npy",
"bytes": 204663632,
"sha256": "49260615ff2b6432ce3dea9ce2c7ab8f83d06c2fb7491e58e08355fcedf86a30"
},
{
"path": "/data/digital-drosophila/experiments/phase4ag-author-apl-r2/graphs/full/nodes.npy",
"bytes": 666928,
"sha256": "5b511a98e8fbf8d65bbc70b93e75ecae19366f650b7842a45611bfad62ed83dc"
},
{
"path": "/data/digital-drosophila/experiments/phase4ag-author-apl-r2/graphs/full/ptr.npy",
"bytes": 1333736,
"sha256": "fe43420f11e6242a11f8199ae7f097cab4b8a6db181d36f2a46b9e46670acbb4"
},
{
"path": "/data/digital-drosophila/experiments/phase4ag-author-apl-r2/graphs/full/signed_raw.npy",
"bytes": 204663632,
"sha256": "f9884ccb8930b32420b27c69271df78034a8350fe5a5c9b76a63c259268efc09"
},
{
"path": "/data/digital-drosophila/experiments/phase4ag-author-apl-r2/graphs/full/src.npy",
"bytes": 102331880,
"sha256": "bfd625ce690fc21eb0a8b9dede831688ab73b789045ba83ddf4baeefeddf1fc3"
},
{
"path": "/data/digital-drosophila/experiments/phase4ag-author-apl-r2/graphs/full/weights.npy",
"bytes": 204663632,
"sha256": "462839ffc3feb8f6c278044488082b1c8e410e7f23229d6b5e29d1b7042416a1"
},
{
"path": "/data/digital-drosophila/experiments/phase4ak-apl-timing-validation/cases/novel_to_aj/novel_to_aj-matched_energy-00-s1073741825/requests.npz",
"bytes": 832,
"sha256": "2492a95c805c779db16753a786a20e5668885ae9f54f4be39e6d86e3090e5cd3"
},
{
"path": "/data/digital-drosophila/experiments/phase4ak-apl-timing-validation/cases/novel_to_aj/novel_to_aj-matched_energy-00-s1073741825/spec.json",
"bytes": 1632,
"sha256": "f57a9d8eba2548c8a4c1129494620f55e12acf5a4492ee04301c3c90c7ad15c8"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-00-s1073741825-r0/adapter-provenance.json",
"bytes": 3871,
"sha256": "204d8810a31d6089c5dfc9a3f36d0ba03471db104579dfefdc44693cc3f6fd17"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-00-s1073741825-r0/apl-applied.float32.npy",
"bytes": 16256128,
"sha256": "169f0f62c9e71903ca0a45c06dc7a0929a9e4d911863a87b4ba6ee5c36fffb97"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-00-s1073741825-r0/apl-component.json",
"bytes": 1684,
"sha256": "f94b360033b4cb643c9774e7fa31c95a65c5571ca62b73072ee29b3af80121f9"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-00-s1073741825-r0/apl-drive.float32.npy",
"bytes": 8128,
"sha256": "9eca6408cd6865e46665d136d8b9cd595c17872900b67914a5afeb4e3207905e"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-00-s1073741825-r0/apl-inhibition.float32.npy",
"bytes": 16256128,
"sha256": "310fcab94499c14b772369529e35722873652765a14aade327f786c1daa67984"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-00-s1073741825-r0/apl-pending-tail.float32.npy",
"bytes": 292736,
"sha256": "8f660f75945476c2d56ea3f1a9f6dbe9bba12081f6ba8698b0f79d29d3ddc414"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-00-s1073741825-r0/apl-state.float32.npy",
"bytes": 8128,
"sha256": "7c5809b2f543e498d7115a9c309f9273722f069982a8677b3d48fb4644939dcd"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-00-s1073741825-r0/apl-timing-audit.json",
"bytes": 1179,
"sha256": "cc3c85d10520c91003def95e94feebcb1f4dae079991944e5947b686371d3805"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-00-s1073741825-r0/overlay-audit.json",
"bytes": 3921,
"sha256": "949d7f986ae2212d44777bd351b88e54c38db857fc062d4d232c2670d31e3085"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-00-s1073741825-r0/overlay-input.npz",
"bytes": 44476,
"sha256": "7805bd2f86de91777bca86c52870607a2e091ed74b901319b896055ad3463f6d"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-00-s1073741825-r0/overlay-manifest.json",
"bytes": 938,
"sha256": "96d8406b69e98ba9829a52788c6c96888493e8bf34581d6d653226b1eb2e494b"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-00-s1073741825-r0/queue.jsonl",
"bytes": 320892,
"sha256": "d3c1035dd51852e1149676f29537e2df78c10483920b3b61c95dbc62c31399fa"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-00-s1073741825-r0/requests.csv",
"bytes": 1757,
"sha256": "b4a4128d4316f2beff352b748f2893e3e0e7adab3ad1fef9b58a59a3b5082548"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-00-s1073741825-r0/sealed-gpu-source.diff",
"bytes": 12917,
"sha256": "0584f865885b18e6a36870a7ecfbbc98d7a94274fa5e9e073e7cf97597d78a03"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-00-s1073741825-r0/source-audit.json",
"bytes": 859,
"sha256": "d644f0265632f117bba0e045d26fb266765b1d005a89426b6242f3de034be935"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-00-s1073741825-r0/state.npz",
"bytes": 2055207,
"sha256": "ccd4ce17b1939f270d79a18a9c3bbb1d190e9dfc257fc5d5f1db40d56cfd26ad"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-00-s1073741825-r0/summary.json",
"bytes": 6481,
"sha256": "9ded1d6c4b66e642448caabbcb3da36c428f28375685b97a2866a30e33e8d149"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-00-s1073741825-r0/tick-state-hashes.jsonl",
"bytes": 255890,
"sha256": "37ac2d57930c6af9d366c287fa98ee0a8ea57932d28eabfcd7baccefbfd8e19c"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/overlays/static25.json",
"bytes": 938,
"sha256": "96d8406b69e98ba9829a52788c6c96888493e8bf34581d6d653226b1eb2e494b"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/overlays/static25.npz",
"bytes": 44476,
"sha256": "7805bd2f86de91777bca86c52870607a2e091ed74b901319b896055ad3463f6d"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/protocol/base-candidate.float32-mV.npy",
"bytes": 57056,
"sha256": "1218d1b328f29a7afefb0ca0b7b6421247f14ad598aa1957a6a7aacbc8cebcae"
},
{
"path": "/data/digital-drosophila/experiments/phase4h-dopamine-plasticity/plastic-mask/plastic-edge-ids.int64.npy",
"bytes": 113984,
"sha256": "8b0fb6eb2e6c31da4d17dc20d890aa3f367e514f05642de5bad6b42a1611c05b"
},
{
"path": "/data/digital-drosophila/models/male-cns-lif/apl-timing-lab-v1/compare_timing.py",
"bytes": 41221,
"sha256": "9010f070fba9b7c9cf2d86187ee2abc57f3ac606ebc08a42baad4f3922b51734"
},
{
"path": "/data/digital-drosophila/models/male-cns-lif/apl-timing-lab-v1/gpu_timing.py",
"bytes": 27083,
"sha256": "af1975ba5e5e700208c0a598d3cbe648a3cf10885c6231239b6e4b28f76d173b"
},
{
"path": "/data/digital-drosophila/models/male-cns-lif/apl-timing-lab-v1/timing_queue.py",
"bytes": 4443,
"sha256": "54df6d4818e2a0c26e96fb0aaf5d9b71cd964981706da937562d48af79aca14e"
},
{
"path": "/data/digital-drosophila/models/male-cns-lif/author-apl-lab-v2/gpu_apl.py",
"bytes": 21206,
"sha256": "69f5d893f47dafff4ef7c3186c3df0b9014666b32c8f4e943b57016bec92b18a"
},
{
"path": "/data/digital-drosophila/models/male-cns-lif/author-apl-lab-v2/legacy_apl_worker.py",
"bytes": 8158,
"sha256": "21ceec65fe42581dc55872010e0025d660e80358905f1cf4df1dadf341a3b291"
},
{
"path": "/data/digital-drosophila/models/male-cns-lif/author-fullgraph-lab-v1/oracle_full.py",
"bytes": 32146,
"sha256": "d72003d98f0f1624b12126eff50bd361c43d888f4a64d90ba9247a58976f1961"
},
{
"path": "/data/digital-drosophila/models/male-cns-lif/author-runtime-lab-v1/author_ext.cpp",
"bytes": 1203,
"sha256": "208a937d17bbb041b9bf6b25b89264ee566830b60609e58491b44583d8541f15"
},
{
"path": "/data/digital-drosophila/models/male-cns-lif/author-runtime-lab-v1/author_ext.cu",
"bytes": 10422,
"sha256": "669f166e18ce9a3f63fc723db8b0a8b74f7fa4757194b1bd65b4cf6008a7787e"
},
{
"path": "/data/digital-drosophila/models/male-cns-lif/author-runtime-lab-v1/gpu_backend.py",
"bytes": 16277,
"sha256": "03758d07572f4b44d272059d9308fac534268ad201b57bdd77d69fee95e67278"
},
{
"path": "/data/digital-drosophila/models/male-cns-lif/wholebrain-plastic-interface-v1/adapter.py",
"bytes": 15690,
"sha256": "3daabe771d3eef6c6189827c0ee5159b266c3a058e07da5781bb863be428aef9"
},
{
"path": "/data/digital-drosophila/models/male-cns-lif/wholebrain-plastic-interface-v1/comparison.py",
"bytes": 37000,
"sha256": "4d64020af05e7fc9e535ac8532dd0e7b614b200f695ed8c6d486c6151de57175"
},
{
"path": "/data/digital-drosophila/models/male-cns-lif/wholebrain-plastic-interface-v1/overlay.py",
"bytes": 11355,
"sha256": "7f891d0ba79b393c96e75fd2dee2eddc51e57d8213eaac2779703bc2c18712b4"
}
],
"failed_checks": []
}
@@ -0,0 +1,97 @@
[
{
"path": "adapter-provenance.json",
"bytes": 3871,
"sha256": "204d8810a31d6089c5dfc9a3f36d0ba03471db104579dfefdc44693cc3f6fd17"
},
{
"path": "apl-applied.float32.npy",
"bytes": 16256128,
"sha256": "169f0f62c9e71903ca0a45c06dc7a0929a9e4d911863a87b4ba6ee5c36fffb97"
},
{
"path": "apl-component.json",
"bytes": 1684,
"sha256": "f94b360033b4cb643c9774e7fa31c95a65c5571ca62b73072ee29b3af80121f9"
},
{
"path": "apl-drive.float32.npy",
"bytes": 8128,
"sha256": "9eca6408cd6865e46665d136d8b9cd595c17872900b67914a5afeb4e3207905e"
},
{
"path": "apl-inhibition.float32.npy",
"bytes": 16256128,
"sha256": "310fcab94499c14b772369529e35722873652765a14aade327f786c1daa67984"
},
{
"path": "apl-pending-tail.float32.npy",
"bytes": 292736,
"sha256": "8f660f75945476c2d56ea3f1a9f6dbe9bba12081f6ba8698b0f79d29d3ddc414"
},
{
"path": "apl-state.float32.npy",
"bytes": 8128,
"sha256": "7c5809b2f543e498d7115a9c309f9273722f069982a8677b3d48fb4644939dcd"
},
{
"path": "apl-timing-audit.json",
"bytes": 1179,
"sha256": "cc3c85d10520c91003def95e94feebcb1f4dae079991944e5947b686371d3805"
},
{
"path": "comparison.json",
"bytes": 14861,
"sha256": "c5937385d6ef97143233e5ddfd14deb47c503ed7bc27c6e3607338b0680ec789"
},
{
"path": "overlay-audit.json",
"bytes": 3921,
"sha256": "949d7f986ae2212d44777bd351b88e54c38db857fc062d4d232c2670d31e3085"
},
{
"path": "overlay-input.npz",
"bytes": 44476,
"sha256": "7805bd2f86de91777bca86c52870607a2e091ed74b901319b896055ad3463f6d"
},
{
"path": "overlay-manifest.json",
"bytes": 938,
"sha256": "96d8406b69e98ba9829a52788c6c96888493e8bf34581d6d653226b1eb2e494b"
},
{
"path": "queue.jsonl",
"bytes": 320892,
"sha256": "d3c1035dd51852e1149676f29537e2df78c10483920b3b61c95dbc62c31399fa"
},
{
"path": "requests.csv",
"bytes": 1757,
"sha256": "b4a4128d4316f2beff352b748f2893e3e0e7adab3ad1fef9b58a59a3b5082548"
},
{
"path": "sealed-gpu-source.diff",
"bytes": 12917,
"sha256": "0584f865885b18e6a36870a7ecfbbc98d7a94274fa5e9e073e7cf97597d78a03"
},
{
"path": "source-audit.json",
"bytes": 859,
"sha256": "d644f0265632f117bba0e045d26fb266765b1d005a89426b6242f3de034be935"
},
{
"path": "state.npz",
"bytes": 2055207,
"sha256": "ccd4ce17b1939f270d79a18a9c3bbb1d190e9dfc257fc5d5f1db40d56cfd26ad"
},
{
"path": "summary.json",
"bytes": 6481,
"sha256": "9ded1d6c4b66e642448caabbcb3da36c428f28375685b97a2866a30e33e8d149"
},
{
"path": "tick-state-hashes.jsonl",
"bytes": 255890,
"sha256": "37ac2d57930c6af9d366c287fa98ee0a8ea57932d28eabfcd7baccefbfd8e19c"
}
]
@@ -0,0 +1,83 @@
{
"apl_fast_edges_zeroed": 5845,
"apl_overlap_count": 0,
"arrays": {
"base_candidate_mv": {
"dtype": "float32",
"raw_sha256": "380a4e9f5e5431baa8f74ecabf791febdc328e5e054fb222dc505df64a3fd501",
"shape": [
14232
]
},
"edge_id": {
"dtype": "int64",
"raw_sha256": "7c2facacbf1b3ec2fc8f265596d85988b6db6d20daab86922e194d66964367f0",
"shape": [
14232
]
},
"plastic_delta_mv": {
"dtype": "float32",
"raw_sha256": "ea03a0ab6b537ea6bcac86191dc79f4eed997ef890885cb695440a0cfc224a67",
"shape": [
14232
]
}
},
"arrival_weight_sampling": "arrival time; delta fixed for entire trial",
"base_graph_files_modified": false,
"base_weights_file_sha256": "462839ffc3feb8f6c278044488082b1c8e410e7f23229d6b5e29d1b7042416a1",
"base_weights_raw_sha256": "a8c19cde743bd456bcb2e988d504f805b6943d6ceb97cd241d6e1e472ab5a591",
"bounds_pass": true,
"bridge": "baseSI64 + (delta32 widened to float64) * float64(0.001); nonzero rows only",
"candidate_count": 14232,
"complete": true,
"copied_manifest_file": "overlay-manifest.json",
"copied_overlay_file": "overlay-input.npz",
"delta_dtype": "float32",
"delta_units": "mV",
"effective_weights_raw_sha256": "a60a2846dd952916097cecd1d3daf74cf5e785818749e0ffd818b3ced1c58fd2",
"expected_effective_weights_raw_sha256": "a60a2846dd952916097cecd1d3daf74cf5e785818749e0ffd818b3ced1c58fd2",
"frozen_mask_exact": true,
"inherited_aj_source_provenance": {
"candidate_sha256": "af1975ba5e5e700208c0a598d3cbe648a3cf10885c6231239b6e4b28f76d173b",
"diagnostic_additions": [
"generated/applied/pending trace split",
"fixed-sequence bitwise audit",
"source provenance and final APL state disclosure"
],
"module_globals_patched": false,
"only_dynamics_change": "fixed zero-initialized 0/18-step h32 delay before unchanged end g write",
"sealed_source_sha256": {
"ae_backend": "03758d07572f4b44d272059d9308fac534268ad201b57bdd77d69fee95e67278",
"af_queue": "d72003d98f0f1624b12126eff50bd361c43d888f4a64d90ba9247a58976f1961",
"ag_gpu": "69f5d893f47dafff4ef7c3186c3df0b9014666b32c8f4e943b57016bec92b18a",
"ag_worker": "21ceec65fe42581dc55872010e0025d660e80358905f1cf4df1dadf341a3b291"
},
"source_diff_sha256": "0584f865885b18e6a36870a7ecfbbc98d7a94274fa5e9e073e7cf97597d78a03"
},
"inherited_source_audit_scope": "AJ source provenance only; AM overlay semantics are recorded separately",
"input": {
"base_candidate_file": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/protocol/base-candidate.float32-mV.npy",
"base_candidate_sha256": "1218d1b328f29a7afefb0ca0b7b6421247f14ad598aa1957a6a7aacbc8cebcae",
"manifest_file": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/overlays/static25.json",
"manifest_sha256": "96d8406b69e98ba9829a52788c6c96888493e8bf34581d6d653226b1eb2e494b",
"mask_file": "/data/digital-drosophila/experiments/phase4h-dopamine-plasticity/plastic-mask/plastic-edge-ids.int64.npy",
"mask_sha256": "8b0fb6eb2e6c31da4d17dc20d890aa3f367e514f05642de5bad6b42a1611c05b",
"overlay_file": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/overlays/static25.npz",
"overlay_sha256": "7805bd2f86de91777bca86c52870607a2e091ed74b901319b896055ad3463f6d"
},
"installation_schedule": "before tick 0; after fast APL zeroing",
"installed_nonzero_count": 14232,
"learning": false,
"mapped_candidate_count": 14232,
"missing_candidate_count": 0,
"nonzero_delta_count": 14232,
"overlay_name": "static25",
"schema": "phase4am-overlay-audit-v1",
"state_dtype": "float64",
"static25_is_exact_fraction_of_float64_base_claimed": false,
"untouched_weights_bitwise_preserved": true,
"weights_updated_during_run": false,
"zero_delta_no_write": true
}
@@ -0,0 +1,14 @@
{
"schema": "phase4am-overlay-v1",
"overlay_name": "static25",
"overlay_sha256": "7805bd2f86de91777bca86c52870607a2e091ed74b901319b896055ad3463f6d",
"mask_path": "/data/digital-drosophila/experiments/phase4h-dopamine-plasticity/plastic-mask/plastic-edge-ids.int64.npy",
"mask_sha256": "8b0fb6eb2e6c31da4d17dc20d890aa3f367e514f05642de5bad6b42a1611c05b",
"base_candidate_path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/protocol/base-candidate.float32-mV.npy",
"base_candidate_sha256": "1218d1b328f29a7afefb0ca0b7b6421247f14ad598aa1957a6a7aacbc8cebcae",
"aj_model_dir": "/data/digital-drosophila/models/male-cns-lif/apl-timing-lab-v1",
"base_rhs_ast_sha256": "e89afc5c18e34631489aa479d9c8ba9d1fa40a8b0f721105405b9a6ef636959d",
"old_f32_expression_source_sha256": "5ec83a132deb8ba20e62dab485537c2414016fe2fece546198d61c0668d75b6b",
"training": false,
"fixed_for_whole_trial": true
}
@@ -0,0 +1,110 @@
tick,neuron_idx,attempted,accepted,rejected
20,7322,1,1,0
21,53508,1,1,0
24,999,1,1,0
25,530,1,1,0
31,159,1,1,0
37,2029,1,1,0
43,530,1,0,1
50,522,1,1,0
51,1372,1,1,0
58,9052,1,1,0
73,530,1,1,0
81,530,1,0,1
95,622,1,1,0
114,710,1,1,0
115,2029,1,1,0
136,79514,1,1,0
138,79514,1,0,1
150,130753,1,1,0
152,130753,1,0,1
154,530,1,0,1
155,2029,1,1,0
157,54264,1,1,0
160,54264,1,0,1
163,54264,1,0,1
172,2029,1,0,1
183,7322,1,1,0
190,130753,1,1,0
195,7322,1,0,1
201,97,1,1,0
202,530,1,0,1
204,9052,1,1,0
214,55121,1,1,0
220,522,1,1,0
234,1011,1,1,0
257,530,1,1,0
278,6721,1,1,0
287,999,1,0,1
295,189,1,1,0
326,571,1,0,1
334,360,1,0,1
353,79514,1,1,0
366,1372,1,1,0
386,189,1,0,1
408,1011,1,1,0
415,130753,1,0,1
423,434,1,1,0
430,130257,1,1,0
446,79514,1,1,0
463,2601,1,0,1
469,522,1,0,1
479,159,1,0,1
481,360,1,0,1
511,9052,1,1,0
513,571,1,1,0
527,54264,1,1,0
547,189,1,1,0
554,999,1,0,1
556,2029,1,1,0
556,9052,1,1,0
567,4786,1,1,0
567,79514,1,1,0
568,7680,1,1,0
610,434,1,1,0
613,1011,1,1,0
629,159,1,1,0
643,130753,1,1,0
657,1011,1,1,0
682,1372,1,1,0
695,6721,1,1,0
704,4624,1,1,0
710,9052,1,1,0
714,700,1,0,1
725,1372,1,1,0
725,7680,1,1,0
726,6721,1,1,0
742,1022,1,0,1
750,1011,1,1,0
754,189,1,0,1
755,4624,1,1,0
770,130753,1,0,1
795,97,1,1,0
814,189,1,1,0
817,360,1,1,0
817,6721,1,1,0
831,434,1,0,1
836,133666,1,1,0
842,530,1,1,0
844,54264,1,1,0
846,530,1,0,1
847,97,1,1,0
886,522,1,1,0
890,189,1,0,1
896,1372,1,1,0
896,133666,1,1,0
897,1011,1,1,0
902,1011,1,0,1
906,530,1,1,0
909,97,1,1,0
915,1927,1,0,1
950,4786,1,1,0
952,360,1,1,0
957,7322,1,1,0
964,189,1,1,0
965,522,1,0,1
974,2029,1,1,0
977,79514,1,0,1
982,97,1,0,1
992,54264,1,1,0
998,189,1,1,0
1 tick neuron_idx attempted accepted rejected
2 20 7322 1 1 0
3 21 53508 1 1 0
4 24 999 1 1 0
5 25 530 1 1 0
6 31 159 1 1 0
7 37 2029 1 1 0
8 43 530 1 0 1
9 50 522 1 1 0
10 51 1372 1 1 0
11 58 9052 1 1 0
12 73 530 1 1 0
13 81 530 1 0 1
14 95 622 1 1 0
15 114 710 1 1 0
16 115 2029 1 1 0
17 136 79514 1 1 0
18 138 79514 1 0 1
19 150 130753 1 1 0
20 152 130753 1 0 1
21 154 530 1 0 1
22 155 2029 1 1 0
23 157 54264 1 1 0
24 160 54264 1 0 1
25 163 54264 1 0 1
26 172 2029 1 0 1
27 183 7322 1 1 0
28 190 130753 1 1 0
29 195 7322 1 0 1
30 201 97 1 1 0
31 202 530 1 0 1
32 204 9052 1 1 0
33 214 55121 1 1 0
34 220 522 1 1 0
35 234 1011 1 1 0
36 257 530 1 1 0
37 278 6721 1 1 0
38 287 999 1 0 1
39 295 189 1 1 0
40 326 571 1 0 1
41 334 360 1 0 1
42 353 79514 1 1 0
43 366 1372 1 1 0
44 386 189 1 0 1
45 408 1011 1 1 0
46 415 130753 1 0 1
47 423 434 1 1 0
48 430 130257 1 1 0
49 446 79514 1 1 0
50 463 2601 1 0 1
51 469 522 1 0 1
52 479 159 1 0 1
53 481 360 1 0 1
54 511 9052 1 1 0
55 513 571 1 1 0
56 527 54264 1 1 0
57 547 189 1 1 0
58 554 999 1 0 1
59 556 2029 1 1 0
60 556 9052 1 1 0
61 567 4786 1 1 0
62 567 79514 1 1 0
63 568 7680 1 1 0
64 610 434 1 1 0
65 613 1011 1 1 0
66 629 159 1 1 0
67 643 130753 1 1 0
68 657 1011 1 1 0
69 682 1372 1 1 0
70 695 6721 1 1 0
71 704 4624 1 1 0
72 710 9052 1 1 0
73 714 700 1 0 1
74 725 1372 1 1 0
75 725 7680 1 1 0
76 726 6721 1 1 0
77 742 1022 1 0 1
78 750 1011 1 1 0
79 754 189 1 0 1
80 755 4624 1 1 0
81 770 130753 1 0 1
82 795 97 1 1 0
83 814 189 1 1 0
84 817 360 1 1 0
85 817 6721 1 1 0
86 831 434 1 0 1
87 836 133666 1 1 0
88 842 530 1 1 0
89 844 54264 1 1 0
90 846 530 1 0 1
91 847 97 1 1 0
92 886 522 1 1 0
93 890 189 1 0 1
94 896 1372 1 1 0
95 896 133666 1 1 0
96 897 1011 1 1 0
97 902 1011 1 0 1
98 906 530 1 1 0
99 909 97 1 1 0
100 915 1927 1 0 1
101 950 4786 1 1 0
102 952 360 1 1 0
103 957 7322 1 1 0
104 964 189 1 1 0
105 965 522 1 0 1
106 974 2029 1 1 0
107 977 79514 1 0 1
108 982 97 1 0 1
109 992 54264 1 1 0
110 998 189 1 1 0
@@ -0,0 +1,17 @@
{
"sealed_source_sha256": {
"ag_gpu": "69f5d893f47dafff4ef7c3186c3df0b9014666b32c8f4e943b57016bec92b18a",
"ag_worker": "21ceec65fe42581dc55872010e0025d660e80358905f1cf4df1dadf341a3b291",
"ae_backend": "03758d07572f4b44d272059d9308fac534268ad201b57bdd77d69fee95e67278",
"af_queue": "d72003d98f0f1624b12126eff50bd361c43d888f4a64d90ba9247a58976f1961"
},
"candidate_sha256": "af1975ba5e5e700208c0a598d3cbe648a3cf10885c6231239b6e4b28f76d173b",
"source_diff_sha256": "0584f865885b18e6a36870a7ecfbbc98d7a94274fa5e9e073e7cf97597d78a03",
"module_globals_patched": false,
"only_dynamics_change": "fixed zero-initialized 0/18-step h32 delay before unchanged end g write",
"diagnostic_additions": [
"generated/applied/pending trace split",
"fixed-sequence bitwise audit",
"source provenance and final APL state disclosure"
]
}
@@ -0,0 +1,168 @@
{
"case": "novel_to_aj-matched_energy-00-s1073741825",
"complete": true,
"pass_all": true,
"pass_all_scope": "internal finite/recording/event-count integrity only; independent equivalence not claimed",
"steps": 1000,
"completed_ticks": 1000,
"nodes": 166700,
"edges": 25582938,
"precision": "float64",
"apl_precision": "float32",
"state_units": "SI volts",
"total_spikes": 30416,
"requested": 109,
"accepted_requests": 77,
"rejected_requests": 32,
"arriving_edges": 14650115,
"accepted_arriving_edges": 13476870,
"counts_match_sparse_events": true,
"all_finite": true,
"record_history": false,
"apl_fast_edges_zeroed": 5845,
"kc_targets_present": 4064,
"effective_weights_raw_sha256": "a60a2846dd952916097cecd1d3daf74cf5e785818749e0ffd818b3ced1c58fd2",
"apl_component": {
"ok": true,
"protocol": "phase4ag-apl-v1",
"n_neurons": 166700,
"n_apl": 2,
"n_kc": 4064,
"dt_ms": 0.1,
"files_sha256": {
"input_matrix.npy": "c4d3df703ea5f1d7402b8255cfa19d9744139ad1048827c23b151d8ba766fec6",
"output_matrix.npy": "e2d0a1ccd740e6777245ebf2efcd88bf5e1da9e47308c63ec8e83d451e134a73",
"kc_globals.npy": "97a570aafa089f93e642b2bb07e3a3322dabb14c3c7dd431f0c8d2b3b7951fdd",
"apl_globals.npy": "8388c8795d49cfe5b14fda54f76ef3a35030c62ba87bd8ca6334a2dcdf186f19"
},
"array_sha256": {
"input_matrix.npy": "528a5f6f5ffe424f323c5a44695db4a7cf32570709832eff2f37f49e85c92c3e",
"output_matrix.npy": "0dcf02cdb7836ab72da32ac47f5682ca33e25f63a8a662a8452d4ea9d46babb9",
"kc_globals.npy": "9e990d10a63b0f74cd7bbbdc5369082f24d5246487af944ba289bc6bf48d4b75",
"apl_globals.npy": "979ef88dff30d41168ce9b377a006ccb3cd034b2dce86d54923ca0f4b87cb6a6"
},
"decay_f32_bits": "3f7eb923",
"gain_f32_bits": "3c23d70a",
"environment": {
"torch": "2.14.0+cu130",
"numpy": "2.2.6",
"cuda": "13.0",
"cudnn": 92400,
"device_name": "NVIDIA GeForce RTX 4090",
"device_index": 0,
"device_capability": [
8,
9
],
"deterministic_algorithms": false,
"cudnn_deterministic": false,
"cudnn_benchmark": false,
"cuda_matmul_allow_tf32": false,
"cudnn_allow_tf32": true,
"float32_matmul_precision": "highest",
"CUBLAS_WORKSPACE_CONFIG": null,
"precision_configuration_changed_by_component": false
},
"operator_sequence": "state.mul_(decay32); drive=mv(I32,spikes32); state.add_(drive); h=matmul(state,O32)*gain32",
"h_units": "legacy mV",
"initial_state": "float32 zeros"
},
"apl_schedule": "end, after threshold/reset and guarded arrivals, unconditional all KC",
"apl_si_conversion": "applied h32 -> float64 -> multiply float64 0.001 -> separate float64 subtraction",
"apl_delay_steps": 18,
"apl_timing": {
"pass_all": true,
"apl_delay_steps": 18,
"steps": 1000,
"pending_generated_count": 18,
"pending_initial_zero_prefix": 0,
"initial_padding_positive_zero": true,
"sample_bits_preserved": true,
"brain_tail_advanced": false,
"generated_rows": 1000,
"applied_generated_rows": 982,
"pending_shape": [
18,
4064
],
"pending_application_tick_start": 1000,
"pending_application_tick_stop_exclusive": 1018,
"pending_generated_tick_start": 982,
"pending_generated_tick_stop_exclusive": 1000,
"generated_trace": "apl-inhibition.float32.npy",
"applied_trace": "apl-applied.float32.npy",
"pending_trace": "apl-pending-tail.float32.npy",
"pending_raw_sha256": "bac621f063d7a78ace6e713640cf4e2b7994481b3aa7bd1d6ebdd38dd06c3cbd",
"final_apl_state_float32": [
153.61734008789062,
164.1633758544922
],
"final_apl_state_u32_bits": [
1125752330,
1126443475
],
"final_apl_state_nonzero": true,
"pending_queue_drained": false,
"finite_generated_sequence_only": true,
"future_apl_decay_or_feedback_generated": false,
"closed_loop_branch_integrals_claimed_equal": false,
"biological_delay_measurement_claimed": false
},
"source_provenance": {
"sealed_source_sha256": {
"ag_gpu": "69f5d893f47dafff4ef7c3186c3df0b9014666b32c8f4e943b57016bec92b18a",
"ag_worker": "21ceec65fe42581dc55872010e0025d660e80358905f1cf4df1dadf341a3b291",
"ae_backend": "03758d07572f4b44d272059d9308fac534268ad201b57bdd77d69fee95e67278",
"af_queue": "d72003d98f0f1624b12126eff50bd361c43d888f4a64d90ba9247a58976f1961"
},
"candidate_sha256": "af1975ba5e5e700208c0a598d3cbe648a3cf10885c6231239b6e4b28f76d173b",
"source_diff_sha256": "0584f865885b18e6a36870a7ecfbbc98d7a94274fa5e9e073e7cf97597d78a03",
"module_globals_patched": false,
"only_dynamics_change": "fixed zero-initialized 0/18-step h32 delay before unchanged end g write",
"diagnostic_additions": [
"generated/applied/pending trace split",
"fixed-sequence bitwise audit",
"source provenance and final APL state disclosure"
]
},
"pending_generated_count": 18,
"pending_initial_zero_prefix": 0,
"pending_tail_shape": [
18,
4064
],
"future_generated_decay_tail_included": false,
"build": {
"sources": {
"author_ext.cpp": "208a937d17bbb041b9bf6b25b89264ee566830b60609e58491b44583d8541f15",
"author_ext.cu": "669f166e18ce9a3f63fc723db8b0a8b74f7fa4757194b1bd65b4cf6008a7787e"
},
"torch": "2.14.0+cu130",
"torch_cuda": "13.0",
"arch_list": "8.9",
"cuda_flags": [
"-O2",
"--fmad=false",
"--ftz=false",
"--prec-div=true",
"--prec-sqrt=true"
]
},
"sealed_ae_backend_sha256": "03758d07572f4b44d272059d9308fac534268ad201b57bdd77d69fee95e67278",
"shared_apl_component_oracle_limitation": true,
"oracle_validation_claim": false,
"learning": false,
"performance_runtime_claim": false,
"cpu_sync_each_tick": true,
"build_or_cache_seconds": 0.0034589399983815383,
"diagnostic_simulation_seconds": 5.338038537996908,
"wall_seconds": 6.419123194998974,
"peak_allocated_vram_bytes": 526523392,
"peak_reserved_vram_bytes": 541065216,
"input_sha256": {
"spec.json": "f57a9d8eba2548c8a4c1129494620f55e12acf5a4492ee04301c3c90c7ad15c8",
"requests.npz": "2492a95c805c779db16753a786a20e5668885ae9f54f4be39e6d86e3090e5cd3",
"base_weights.npy": "462839ffc3feb8f6c278044488082b1c8e410e7f23229d6b5e29d1b7042416a1",
"coefficients.json": "bde79d95ef0097b827d5faf4d5658eafc009d8e9fcef1fddd645c953823e3f64"
}
}
@@ -0,0 +1,66 @@
{
"adapter_file": "/data/digital-drosophila/models/male-cns-lif/wholebrain-plastic-interface-v1/adapter.py",
"adapter_sha256": "3daabe771d3eef6c6189827c0ee5159b266c3a058e07da5781bb863be428aef9",
"apl_delay_steps": 18,
"ast": {
"adapted_run_ast_sha256": "b0401e196eb3a9f40873381ffa2d5a42bd9d2be854c386851c80fb0b0a386eb0",
"derived_namespace_file": "/data/digital-drosophila/models/male-cns-lif/wholebrain-plastic-interface-v1/adapter.py",
"entire_tick_loop_ast_identical": true,
"fake_original_file_used": false,
"hook_after_apl_zero_before_effective_hash": true,
"inserted_ast_statements": 1,
"loop_ast_sha256": "b50b21b7239f6b55b357e9f275786099c06e8e1ea924aeca07f13d3955d64151",
"only_ast_change": "_phase4am_install_overlay(weights, graph, apl_out_mask, upload, out_dir, source_provenance)",
"original_module_file": "/data/digital-drosophila/models/male-cns-lif/apl-timing-lab-v1/gpu_timing.py",
"original_module_globals_patched": false,
"original_run_ast_sha256": "6efd7d130a853ba9e99cc8672580ac91fcda9cf0883631efcd61c5e673756e1b"
},
"complete": true,
"delta_constant_for_entire_trial": true,
"effective_weights_raw_sha256": "a60a2846dd952916097cecd1d3daf74cf5e785818749e0ffd818b3ced1c58fd2",
"inherited_source_audit_describes_AM_semantics": false,
"inherited_summary_sha256": "90b376a5245947a57c08db5f10a8c53ae01cdf7c4e0fb2c70e4f96779d7a37a6",
"installation_calls": 1,
"learning": false,
"original_module_globals_patched": false,
"overlay_audit_sha256": "949d7f986ae2212d44777bd351b88e54c38db857fc062d4d232c2670d31e3085",
"overlay_module_file": "/data/digital-drosophila/models/male-cns-lif/wholebrain-plastic-interface-v1/overlay.py",
"overlay_module_sha256": "7f891d0ba79b393c96e75fd2dee2eddc51e57d8213eaac2779703bc2c18712b4",
"schema": "phase4am-adapter-provenance-v1",
"scope": "constant sparse overlay installation only; no within-trial plasticity or learning",
"sealed_sources": {
"apl-timing-lab-v1/gpu_timing.py": {
"path": "/data/digital-drosophila/models/male-cns-lif/apl-timing-lab-v1/gpu_timing.py",
"sha256": "af1975ba5e5e700208c0a598d3cbe648a3cf10885c6231239b6e4b28f76d173b"
},
"apl-timing-lab-v1/timing_queue.py": {
"path": "/data/digital-drosophila/models/male-cns-lif/apl-timing-lab-v1/timing_queue.py",
"sha256": "54df6d4818e2a0c26e96fb0aaf5d9b71cd964981706da937562d48af79aca14e"
},
"author-apl-lab-v2/gpu_apl.py": {
"path": "/data/digital-drosophila/models/male-cns-lif/author-apl-lab-v2/gpu_apl.py",
"sha256": "69f5d893f47dafff4ef7c3186c3df0b9014666b32c8f4e943b57016bec92b18a"
},
"author-apl-lab-v2/legacy_apl_worker.py": {
"path": "/data/digital-drosophila/models/male-cns-lif/author-apl-lab-v2/legacy_apl_worker.py",
"sha256": "21ceec65fe42581dc55872010e0025d660e80358905f1cf4df1dadf341a3b291"
},
"author-fullgraph-lab-v1/oracle_full.py": {
"path": "/data/digital-drosophila/models/male-cns-lif/author-fullgraph-lab-v1/oracle_full.py",
"sha256": "d72003d98f0f1624b12126eff50bd361c43d888f4a64d90ba9247a58976f1961"
},
"author-runtime-lab-v1/author_ext.cpp": {
"path": "/data/digital-drosophila/models/male-cns-lif/author-runtime-lab-v1/author_ext.cpp",
"sha256": "208a937d17bbb041b9bf6b25b89264ee566830b60609e58491b44583d8541f15"
},
"author-runtime-lab-v1/author_ext.cu": {
"path": "/data/digital-drosophila/models/male-cns-lif/author-runtime-lab-v1/author_ext.cu",
"sha256": "669f166e18ce9a3f63fc723db8b0a8b74f7fa4757194b1bd65b4cf6008a7787e"
},
"author-runtime-lab-v1/gpu_backend.py": {
"path": "/data/digital-drosophila/models/male-cns-lif/author-runtime-lab-v1/gpu_backend.py",
"sha256": "03758d07572f4b44d272059d9308fac534268ad201b57bdd77d69fee95e67278"
}
},
"weights_updated_during_run": false
}
@@ -0,0 +1,45 @@
{
"ok": true,
"protocol": "phase4ag-apl-v1",
"n_neurons": 166700,
"n_apl": 2,
"n_kc": 4064,
"dt_ms": 0.1,
"files_sha256": {
"input_matrix.npy": "c4d3df703ea5f1d7402b8255cfa19d9744139ad1048827c23b151d8ba766fec6",
"output_matrix.npy": "e2d0a1ccd740e6777245ebf2efcd88bf5e1da9e47308c63ec8e83d451e134a73",
"kc_globals.npy": "97a570aafa089f93e642b2bb07e3a3322dabb14c3c7dd431f0c8d2b3b7951fdd",
"apl_globals.npy": "8388c8795d49cfe5b14fda54f76ef3a35030c62ba87bd8ca6334a2dcdf186f19"
},
"array_sha256": {
"input_matrix.npy": "528a5f6f5ffe424f323c5a44695db4a7cf32570709832eff2f37f49e85c92c3e",
"output_matrix.npy": "0dcf02cdb7836ab72da32ac47f5682ca33e25f63a8a662a8452d4ea9d46babb9",
"kc_globals.npy": "9e990d10a63b0f74cd7bbbdc5369082f24d5246487af944ba289bc6bf48d4b75",
"apl_globals.npy": "979ef88dff30d41168ce9b377a006ccb3cd034b2dce86d54923ca0f4b87cb6a6"
},
"decay_f32_bits": "3f7eb923",
"gain_f32_bits": "3c23d70a",
"environment": {
"torch": "2.14.0+cu130",
"numpy": "2.2.6",
"cuda": "13.0",
"cudnn": 92400,
"device_name": "NVIDIA GeForce RTX 4090",
"device_index": 0,
"device_capability": [
8,
9
],
"deterministic_algorithms": false,
"cudnn_deterministic": false,
"cudnn_benchmark": false,
"cuda_matmul_allow_tf32": false,
"cudnn_allow_tf32": true,
"float32_matmul_precision": "highest",
"CUBLAS_WORKSPACE_CONFIG": null,
"precision_configuration_changed_by_component": false
},
"operator_sequence": "state.mul_(decay32); drive=mv(I32,spikes32); state.add_(drive); h=matmul(state,O32)*gain32",
"h_units": "legacy mV",
"initial_state": "float32 zeros"
}
@@ -0,0 +1,38 @@
{
"pass_all": true,
"apl_delay_steps": 18,
"steps": 1000,
"pending_generated_count": 18,
"pending_initial_zero_prefix": 0,
"initial_padding_positive_zero": true,
"sample_bits_preserved": true,
"brain_tail_advanced": false,
"generated_rows": 1000,
"applied_generated_rows": 982,
"pending_shape": [
18,
4064
],
"pending_application_tick_start": 1000,
"pending_application_tick_stop_exclusive": 1018,
"pending_generated_tick_start": 982,
"pending_generated_tick_stop_exclusive": 1000,
"generated_trace": "apl-inhibition.float32.npy",
"applied_trace": "apl-applied.float32.npy",
"pending_trace": "apl-pending-tail.float32.npy",
"pending_raw_sha256": "bac621f063d7a78ace6e713640cf4e2b7994481b3aa7bd1d6ebdd38dd06c3cbd",
"final_apl_state_float32": [
153.61734008789062,
164.1633758544922
],
"final_apl_state_u32_bits": [
1125752330,
1126443475
],
"final_apl_state_nonzero": true,
"pending_queue_drained": false,
"finite_generated_sequence_only": true,
"future_apl_decay_or_feedback_generated": false,
"closed_loop_branch_integrals_claimed_equal": false,
"biological_delay_measurement_claimed": false
}
@@ -0,0 +1,478 @@
{
"schema": "phase4am-comparison-v1",
"mode": "repeat",
"case_dir": "/data/digital-drosophila/experiments/phase4ak-apl-timing-validation/cases/novel_to_aj/novel_to_aj-matched_energy-00-s1073741825",
"left": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-00-s1073741825-r0",
"right": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-00-s1073741825-r1",
"pass_all": true,
"learning_achieved": false,
"candidate_generated": false,
"tolerance": null,
"scope": "Exact declared trajectory and static overlay integrity; no physiological or learning PASS",
"explicit_exclusions": [
"build_or_cache_seconds",
"diagnostic_simulation_seconds",
"peak_allocated_vram_bytes",
"peak_reserved_vram_bytes",
"wall_seconds"
],
"independent_cpu_wholebrain_oracle_claim": false,
"overlay_name": "static25",
"nodes": 166700,
"edges": 25582938,
"steps": 1000,
"apl_delay_steps": 18,
"full_queue_reconstructed": true,
"total_spikes": 30416,
"checks": {
"left_gpu.summary_complete": true,
"left_gpu.case_name": true,
"left_gpu.history_mode": true,
"left_gpu.apl_precision": true,
"left_gpu.no_error_marker": true,
"left_gpu.events_sorted_unique": true,
"left_gpu.count_nonnegative_total": true,
"left_gpu.ref_range": true,
"left_gpu.reported_events": true,
"left_gpu.last_hash_v": true,
"left_gpu.last_hash_g": true,
"left_gpu.last_hash_ref": true,
"left_gpu.request_summary": true,
"left_gpu.apl_positive_drive": true,
"left_gpu.apl_positive_state": true,
"left_gpu.apl_positive_inhibition": true,
"left_gpu.apl_positive_applied": true,
"left_gpu.delay_summary": true,
"left_gpu.no_dense_v": true,
"left_gpu.no_dense_g": true,
"left_gpu.no_dense_ref": true,
"left_gpu.component_summary_consistent": true,
"right_gpu.summary_complete": true,
"right_gpu.case_name": true,
"right_gpu.history_mode": true,
"right_gpu.apl_precision": true,
"right_gpu.no_error_marker": true,
"right_gpu.events_sorted_unique": true,
"right_gpu.count_nonnegative_total": true,
"right_gpu.ref_range": true,
"right_gpu.reported_events": true,
"right_gpu.last_hash_v": true,
"right_gpu.last_hash_g": true,
"right_gpu.last_hash_ref": true,
"right_gpu.request_summary": true,
"right_gpu.apl_positive_drive": true,
"right_gpu.apl_positive_state": true,
"right_gpu.apl_positive_inhibition": true,
"right_gpu.apl_positive_applied": true,
"right_gpu.delay_summary": true,
"right_gpu.no_dense_v": true,
"right_gpu.no_dense_g": true,
"right_gpu.no_dense_ref": true,
"right_gpu.component_summary_consistent": true,
"left_gpu.full_event_queue_request_accounting": true,
"left_gpu.timing_finite_nonnegative": true,
"left_gpu.fixed_delay_applied.schema": true,
"left_gpu.fixed_delay_applied.finite": true,
"left_gpu.fixed_delay_applied.bitwise_exact": true,
"left_gpu.fixed_delay_pending.schema": true,
"left_gpu.fixed_delay_pending.finite": true,
"left_gpu.fixed_delay_pending.bitwise_exact": true,
"left_gpu.finite_sequence_row_conservation": true,
"left_gpu.timing_integer_metadata": true,
"left_gpu.pending_hash_metadata": true,
"left_gpu.pending_shape_metadata": true,
"left_gpu.pending_summary_counts": true,
"left_gpu.final_apl_state_metadata": true,
"left_gpu.no_extra_brain_or_apl_ticks": true,
"left_gpu.timing_summary_metadata": true,
"right_gpu.full_event_queue_request_accounting": true,
"right_gpu.timing_finite_nonnegative": true,
"right_gpu.fixed_delay_applied.schema": true,
"right_gpu.fixed_delay_applied.finite": true,
"right_gpu.fixed_delay_applied.bitwise_exact": true,
"right_gpu.fixed_delay_pending.schema": true,
"right_gpu.fixed_delay_pending.finite": true,
"right_gpu.fixed_delay_pending.bitwise_exact": true,
"right_gpu.finite_sequence_row_conservation": true,
"right_gpu.timing_integer_metadata": true,
"right_gpu.pending_hash_metadata": true,
"right_gpu.pending_shape_metadata": true,
"right_gpu.pending_summary_counts": true,
"right_gpu.final_apl_state_metadata": true,
"right_gpu.no_extra_brain_or_apl_ticks": true,
"right_gpu.timing_summary_metadata": true,
"state.step.schema": true,
"state.step.finite": true,
"state.step.bitwise_exact": true,
"state.neuron_idx.schema": true,
"state.neuron_idx.finite": true,
"state.neuron_idx.bitwise_exact": true,
"state.counts.schema": true,
"state.counts.finite": true,
"state.counts.bitwise_exact": true,
"state.v.schema": true,
"state.v.finite": true,
"state.v.bitwise_exact": true,
"state.g.schema": true,
"state.g.finite": true,
"state.g.bitwise_exact": true,
"state.ref.schema": true,
"state.ref.finite": true,
"state.ref.bitwise_exact": true,
"apl.drive.schema": true,
"apl.drive.finite": true,
"apl.drive.bitwise_exact": true,
"apl.state.schema": true,
"apl.state.finite": true,
"apl.state.bitwise_exact": true,
"apl.inhibition.schema": true,
"apl.inhibition.finite": true,
"apl.inhibition.bitwise_exact": true,
"apl.applied.schema": true,
"apl.applied.finite": true,
"apl.applied.bitwise_exact": true,
"apl.pending.schema": true,
"apl.pending.finite": true,
"apl.pending.bitwise_exact": true,
"hashes.parsed_exact": true,
"queues.parsed_exact": true,
"requests.parsed_exact": true,
"component.parsed_exact": true,
"summary.nonperformance_exact": true,
"input_overlay_and_source_provenance": true
},
"differences": {},
"read_manifest": [
{
"path": "/data/digital-drosophila/experiments/phase4af-author-fullgraph/oracle/no_input/coefficients.json",
"bytes": 2329,
"sha256": "bde79d95ef0097b827d5faf4d5658eafc009d8e9fcef1fddd645c953823e3f64"
},
{
"path": "/data/digital-drosophila/experiments/phase4ag-author-apl-r2/apl-bundle/apl_globals.npy",
"bytes": 136,
"sha256": "8388c8795d49cfe5b14fda54f76ef3a35030c62ba87bd8ca6334a2dcdf186f19"
},
{
"path": "/data/digital-drosophila/experiments/phase4ag-author-apl-r2/apl-bundle/input_matrix.npy",
"bytes": 1333728,
"sha256": "c4d3df703ea5f1d7402b8255cfa19d9744139ad1048827c23b151d8ba766fec6"
},
{
"path": "/data/digital-drosophila/experiments/phase4ag-author-apl-r2/apl-bundle/kc_globals.npy",
"bytes": 16384,
"sha256": "97a570aafa089f93e642b2bb07e3a3322dabb14c3c7dd431f0c8d2b3b7951fdd"
},
{
"path": "/data/digital-drosophila/experiments/phase4ag-author-apl-r2/apl-bundle/output_matrix.npy",
"bytes": 32640,
"sha256": "e2d0a1ccd740e6777245ebf2efcd88bf5e1da9e47308c63ec8e83d451e134a73"
},
{
"path": "/data/digital-drosophila/experiments/phase4ag-author-apl-r2/graphs/full/dst.npy",
"bytes": 102331880,
"sha256": "ce20f7433f78442c717ad2a7b5394cf4a3b109d990b4be0788040b7b0f4ed150"
},
{
"path": "/data/digital-drosophila/experiments/phase4ag-author-apl-r2/graphs/full/edge_id.npy",
"bytes": 204663632,
"sha256": "49260615ff2b6432ce3dea9ce2c7ab8f83d06c2fb7491e58e08355fcedf86a30"
},
{
"path": "/data/digital-drosophila/experiments/phase4ag-author-apl-r2/graphs/full/nodes.npy",
"bytes": 666928,
"sha256": "5b511a98e8fbf8d65bbc70b93e75ecae19366f650b7842a45611bfad62ed83dc"
},
{
"path": "/data/digital-drosophila/experiments/phase4ag-author-apl-r2/graphs/full/ptr.npy",
"bytes": 1333736,
"sha256": "fe43420f11e6242a11f8199ae7f097cab4b8a6db181d36f2a46b9e46670acbb4"
},
{
"path": "/data/digital-drosophila/experiments/phase4ag-author-apl-r2/graphs/full/signed_raw.npy",
"bytes": 204663632,
"sha256": "f9884ccb8930b32420b27c69271df78034a8350fe5a5c9b76a63c259268efc09"
},
{
"path": "/data/digital-drosophila/experiments/phase4ag-author-apl-r2/graphs/full/src.npy",
"bytes": 102331880,
"sha256": "bfd625ce690fc21eb0a8b9dede831688ab73b789045ba83ddf4baeefeddf1fc3"
},
{
"path": "/data/digital-drosophila/experiments/phase4ag-author-apl-r2/graphs/full/weights.npy",
"bytes": 204663632,
"sha256": "462839ffc3feb8f6c278044488082b1c8e410e7f23229d6b5e29d1b7042416a1"
},
{
"path": "/data/digital-drosophila/experiments/phase4ak-apl-timing-validation/cases/novel_to_aj/novel_to_aj-matched_energy-00-s1073741825/requests.npz",
"bytes": 832,
"sha256": "2492a95c805c779db16753a786a20e5668885ae9f54f4be39e6d86e3090e5cd3"
},
{
"path": "/data/digital-drosophila/experiments/phase4ak-apl-timing-validation/cases/novel_to_aj/novel_to_aj-matched_energy-00-s1073741825/spec.json",
"bytes": 1632,
"sha256": "f57a9d8eba2548c8a4c1129494620f55e12acf5a4492ee04301c3c90c7ad15c8"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-00-s1073741825-r0/adapter-provenance.json",
"bytes": 3871,
"sha256": "204d8810a31d6089c5dfc9a3f36d0ba03471db104579dfefdc44693cc3f6fd17"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-00-s1073741825-r0/apl-applied.float32.npy",
"bytes": 16256128,
"sha256": "169f0f62c9e71903ca0a45c06dc7a0929a9e4d911863a87b4ba6ee5c36fffb97"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-00-s1073741825-r0/apl-component.json",
"bytes": 1684,
"sha256": "f94b360033b4cb643c9774e7fa31c95a65c5571ca62b73072ee29b3af80121f9"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-00-s1073741825-r0/apl-drive.float32.npy",
"bytes": 8128,
"sha256": "9eca6408cd6865e46665d136d8b9cd595c17872900b67914a5afeb4e3207905e"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-00-s1073741825-r0/apl-inhibition.float32.npy",
"bytes": 16256128,
"sha256": "310fcab94499c14b772369529e35722873652765a14aade327f786c1daa67984"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-00-s1073741825-r0/apl-pending-tail.float32.npy",
"bytes": 292736,
"sha256": "8f660f75945476c2d56ea3f1a9f6dbe9bba12081f6ba8698b0f79d29d3ddc414"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-00-s1073741825-r0/apl-state.float32.npy",
"bytes": 8128,
"sha256": "7c5809b2f543e498d7115a9c309f9273722f069982a8677b3d48fb4644939dcd"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-00-s1073741825-r0/apl-timing-audit.json",
"bytes": 1179,
"sha256": "cc3c85d10520c91003def95e94feebcb1f4dae079991944e5947b686371d3805"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-00-s1073741825-r0/overlay-audit.json",
"bytes": 3921,
"sha256": "949d7f986ae2212d44777bd351b88e54c38db857fc062d4d232c2670d31e3085"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-00-s1073741825-r0/overlay-input.npz",
"bytes": 44476,
"sha256": "7805bd2f86de91777bca86c52870607a2e091ed74b901319b896055ad3463f6d"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-00-s1073741825-r0/overlay-manifest.json",
"bytes": 938,
"sha256": "96d8406b69e98ba9829a52788c6c96888493e8bf34581d6d653226b1eb2e494b"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-00-s1073741825-r0/queue.jsonl",
"bytes": 320892,
"sha256": "d3c1035dd51852e1149676f29537e2df78c10483920b3b61c95dbc62c31399fa"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-00-s1073741825-r0/requests.csv",
"bytes": 1757,
"sha256": "b4a4128d4316f2beff352b748f2893e3e0e7adab3ad1fef9b58a59a3b5082548"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-00-s1073741825-r0/sealed-gpu-source.diff",
"bytes": 12917,
"sha256": "0584f865885b18e6a36870a7ecfbbc98d7a94274fa5e9e073e7cf97597d78a03"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-00-s1073741825-r0/source-audit.json",
"bytes": 859,
"sha256": "d644f0265632f117bba0e045d26fb266765b1d005a89426b6242f3de034be935"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-00-s1073741825-r0/state.npz",
"bytes": 2055207,
"sha256": "ccd4ce17b1939f270d79a18a9c3bbb1d190e9dfc257fc5d5f1db40d56cfd26ad"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-00-s1073741825-r0/summary.json",
"bytes": 6481,
"sha256": "9ded1d6c4b66e642448caabbcb3da36c428f28375685b97a2866a30e33e8d149"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-00-s1073741825-r0/tick-state-hashes.jsonl",
"bytes": 255890,
"sha256": "37ac2d57930c6af9d366c287fa98ee0a8ea57932d28eabfcd7baccefbfd8e19c"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-00-s1073741825-r1/adapter-provenance.json",
"bytes": 3871,
"sha256": "8c4c5d58dc77d783e5b59185dfe63a8f61112929b17fc225bbd7e36d97cb685d"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-00-s1073741825-r1/apl-applied.float32.npy",
"bytes": 16256128,
"sha256": "169f0f62c9e71903ca0a45c06dc7a0929a9e4d911863a87b4ba6ee5c36fffb97"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-00-s1073741825-r1/apl-component.json",
"bytes": 1684,
"sha256": "f94b360033b4cb643c9774e7fa31c95a65c5571ca62b73072ee29b3af80121f9"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-00-s1073741825-r1/apl-drive.float32.npy",
"bytes": 8128,
"sha256": "9eca6408cd6865e46665d136d8b9cd595c17872900b67914a5afeb4e3207905e"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-00-s1073741825-r1/apl-inhibition.float32.npy",
"bytes": 16256128,
"sha256": "310fcab94499c14b772369529e35722873652765a14aade327f786c1daa67984"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-00-s1073741825-r1/apl-pending-tail.float32.npy",
"bytes": 292736,
"sha256": "8f660f75945476c2d56ea3f1a9f6dbe9bba12081f6ba8698b0f79d29d3ddc414"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-00-s1073741825-r1/apl-state.float32.npy",
"bytes": 8128,
"sha256": "7c5809b2f543e498d7115a9c309f9273722f069982a8677b3d48fb4644939dcd"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-00-s1073741825-r1/apl-timing-audit.json",
"bytes": 1179,
"sha256": "cc3c85d10520c91003def95e94feebcb1f4dae079991944e5947b686371d3805"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-00-s1073741825-r1/overlay-audit.json",
"bytes": 3921,
"sha256": "949d7f986ae2212d44777bd351b88e54c38db857fc062d4d232c2670d31e3085"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-00-s1073741825-r1/overlay-input.npz",
"bytes": 44476,
"sha256": "7805bd2f86de91777bca86c52870607a2e091ed74b901319b896055ad3463f6d"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-00-s1073741825-r1/overlay-manifest.json",
"bytes": 938,
"sha256": "96d8406b69e98ba9829a52788c6c96888493e8bf34581d6d653226b1eb2e494b"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-00-s1073741825-r1/queue.jsonl",
"bytes": 320892,
"sha256": "d3c1035dd51852e1149676f29537e2df78c10483920b3b61c95dbc62c31399fa"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-00-s1073741825-r1/requests.csv",
"bytes": 1757,
"sha256": "b4a4128d4316f2beff352b748f2893e3e0e7adab3ad1fef9b58a59a3b5082548"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-00-s1073741825-r1/sealed-gpu-source.diff",
"bytes": 12917,
"sha256": "0584f865885b18e6a36870a7ecfbbc98d7a94274fa5e9e073e7cf97597d78a03"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-00-s1073741825-r1/source-audit.json",
"bytes": 859,
"sha256": "d644f0265632f117bba0e045d26fb266765b1d005a89426b6242f3de034be935"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-00-s1073741825-r1/state.npz",
"bytes": 2055207,
"sha256": "ccd4ce17b1939f270d79a18a9c3bbb1d190e9dfc257fc5d5f1db40d56cfd26ad"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-00-s1073741825-r1/summary.json",
"bytes": 6481,
"sha256": "90b376a5245947a57c08db5f10a8c53ae01cdf7c4e0fb2c70e4f96779d7a37a6"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-00-s1073741825-r1/tick-state-hashes.jsonl",
"bytes": 255890,
"sha256": "37ac2d57930c6af9d366c287fa98ee0a8ea57932d28eabfcd7baccefbfd8e19c"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/overlays/static25.json",
"bytes": 938,
"sha256": "96d8406b69e98ba9829a52788c6c96888493e8bf34581d6d653226b1eb2e494b"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/overlays/static25.npz",
"bytes": 44476,
"sha256": "7805bd2f86de91777bca86c52870607a2e091ed74b901319b896055ad3463f6d"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/protocol/base-candidate.float32-mV.npy",
"bytes": 57056,
"sha256": "1218d1b328f29a7afefb0ca0b7b6421247f14ad598aa1957a6a7aacbc8cebcae"
},
{
"path": "/data/digital-drosophila/experiments/phase4h-dopamine-plasticity/plastic-mask/plastic-edge-ids.int64.npy",
"bytes": 113984,
"sha256": "8b0fb6eb2e6c31da4d17dc20d890aa3f367e514f05642de5bad6b42a1611c05b"
},
{
"path": "/data/digital-drosophila/models/male-cns-lif/apl-timing-lab-v1/compare_timing.py",
"bytes": 41221,
"sha256": "9010f070fba9b7c9cf2d86187ee2abc57f3ac606ebc08a42baad4f3922b51734"
},
{
"path": "/data/digital-drosophila/models/male-cns-lif/apl-timing-lab-v1/gpu_timing.py",
"bytes": 27083,
"sha256": "af1975ba5e5e700208c0a598d3cbe648a3cf10885c6231239b6e4b28f76d173b"
},
{
"path": "/data/digital-drosophila/models/male-cns-lif/apl-timing-lab-v1/timing_queue.py",
"bytes": 4443,
"sha256": "54df6d4818e2a0c26e96fb0aaf5d9b71cd964981706da937562d48af79aca14e"
},
{
"path": "/data/digital-drosophila/models/male-cns-lif/author-apl-lab-v2/gpu_apl.py",
"bytes": 21206,
"sha256": "69f5d893f47dafff4ef7c3186c3df0b9014666b32c8f4e943b57016bec92b18a"
},
{
"path": "/data/digital-drosophila/models/male-cns-lif/author-apl-lab-v2/legacy_apl_worker.py",
"bytes": 8158,
"sha256": "21ceec65fe42581dc55872010e0025d660e80358905f1cf4df1dadf341a3b291"
},
{
"path": "/data/digital-drosophila/models/male-cns-lif/author-fullgraph-lab-v1/oracle_full.py",
"bytes": 32146,
"sha256": "d72003d98f0f1624b12126eff50bd361c43d888f4a64d90ba9247a58976f1961"
},
{
"path": "/data/digital-drosophila/models/male-cns-lif/author-runtime-lab-v1/author_ext.cpp",
"bytes": 1203,
"sha256": "208a937d17bbb041b9bf6b25b89264ee566830b60609e58491b44583d8541f15"
},
{
"path": "/data/digital-drosophila/models/male-cns-lif/author-runtime-lab-v1/author_ext.cu",
"bytes": 10422,
"sha256": "669f166e18ce9a3f63fc723db8b0a8b74f7fa4757194b1bd65b4cf6008a7787e"
},
{
"path": "/data/digital-drosophila/models/male-cns-lif/author-runtime-lab-v1/gpu_backend.py",
"bytes": 16277,
"sha256": "03758d07572f4b44d272059d9308fac534268ad201b57bdd77d69fee95e67278"
},
{
"path": "/data/digital-drosophila/models/male-cns-lif/wholebrain-plastic-interface-v1/adapter.py",
"bytes": 15690,
"sha256": "3daabe771d3eef6c6189827c0ee5159b266c3a058e07da5781bb863be428aef9"
},
{
"path": "/data/digital-drosophila/models/male-cns-lif/wholebrain-plastic-interface-v1/comparison.py",
"bytes": 37000,
"sha256": "4d64020af05e7fc9e535ac8532dd0e7b614b200f695ed8c6d486c6151de57175"
},
{
"path": "/data/digital-drosophila/models/male-cns-lif/wholebrain-plastic-interface-v1/overlay.py",
"bytes": 11355,
"sha256": "7f891d0ba79b393c96e75fd2dee2eddc51e57d8213eaac2779703bc2c18712b4"
}
],
"failed_checks": []
}
@@ -0,0 +1,97 @@
[
{
"path": "adapter-provenance.json",
"bytes": 3871,
"sha256": "8c4c5d58dc77d783e5b59185dfe63a8f61112929b17fc225bbd7e36d97cb685d"
},
{
"path": "apl-applied.float32.npy",
"bytes": 16256128,
"sha256": "169f0f62c9e71903ca0a45c06dc7a0929a9e4d911863a87b4ba6ee5c36fffb97"
},
{
"path": "apl-component.json",
"bytes": 1684,
"sha256": "f94b360033b4cb643c9774e7fa31c95a65c5571ca62b73072ee29b3af80121f9"
},
{
"path": "apl-drive.float32.npy",
"bytes": 8128,
"sha256": "9eca6408cd6865e46665d136d8b9cd595c17872900b67914a5afeb4e3207905e"
},
{
"path": "apl-inhibition.float32.npy",
"bytes": 16256128,
"sha256": "310fcab94499c14b772369529e35722873652765a14aade327f786c1daa67984"
},
{
"path": "apl-pending-tail.float32.npy",
"bytes": 292736,
"sha256": "8f660f75945476c2d56ea3f1a9f6dbe9bba12081f6ba8698b0f79d29d3ddc414"
},
{
"path": "apl-state.float32.npy",
"bytes": 8128,
"sha256": "7c5809b2f543e498d7115a9c309f9273722f069982a8677b3d48fb4644939dcd"
},
{
"path": "apl-timing-audit.json",
"bytes": 1179,
"sha256": "cc3c85d10520c91003def95e94feebcb1f4dae079991944e5947b686371d3805"
},
{
"path": "comparison.json",
"bytes": 22987,
"sha256": "6e4de77a4e60bdb93e6c7be7c1ee7e601a0bd5d5b77053a7b1ba82f1174a5d33"
},
{
"path": "overlay-audit.json",
"bytes": 3921,
"sha256": "949d7f986ae2212d44777bd351b88e54c38db857fc062d4d232c2670d31e3085"
},
{
"path": "overlay-input.npz",
"bytes": 44476,
"sha256": "7805bd2f86de91777bca86c52870607a2e091ed74b901319b896055ad3463f6d"
},
{
"path": "overlay-manifest.json",
"bytes": 938,
"sha256": "96d8406b69e98ba9829a52788c6c96888493e8bf34581d6d653226b1eb2e494b"
},
{
"path": "queue.jsonl",
"bytes": 320892,
"sha256": "d3c1035dd51852e1149676f29537e2df78c10483920b3b61c95dbc62c31399fa"
},
{
"path": "requests.csv",
"bytes": 1757,
"sha256": "b4a4128d4316f2beff352b748f2893e3e0e7adab3ad1fef9b58a59a3b5082548"
},
{
"path": "sealed-gpu-source.diff",
"bytes": 12917,
"sha256": "0584f865885b18e6a36870a7ecfbbc98d7a94274fa5e9e073e7cf97597d78a03"
},
{
"path": "source-audit.json",
"bytes": 859,
"sha256": "d644f0265632f117bba0e045d26fb266765b1d005a89426b6242f3de034be935"
},
{
"path": "state.npz",
"bytes": 2055207,
"sha256": "ccd4ce17b1939f270d79a18a9c3bbb1d190e9dfc257fc5d5f1db40d56cfd26ad"
},
{
"path": "summary.json",
"bytes": 6481,
"sha256": "90b376a5245947a57c08db5f10a8c53ae01cdf7c4e0fb2c70e4f96779d7a37a6"
},
{
"path": "tick-state-hashes.jsonl",
"bytes": 255890,
"sha256": "37ac2d57930c6af9d366c287fa98ee0a8ea57932d28eabfcd7baccefbfd8e19c"
}
]
@@ -0,0 +1,83 @@
{
"apl_fast_edges_zeroed": 5845,
"apl_overlap_count": 0,
"arrays": {
"base_candidate_mv": {
"dtype": "float32",
"raw_sha256": "380a4e9f5e5431baa8f74ecabf791febdc328e5e054fb222dc505df64a3fd501",
"shape": [
14232
]
},
"edge_id": {
"dtype": "int64",
"raw_sha256": "7c2facacbf1b3ec2fc8f265596d85988b6db6d20daab86922e194d66964367f0",
"shape": [
14232
]
},
"plastic_delta_mv": {
"dtype": "float32",
"raw_sha256": "ea03a0ab6b537ea6bcac86191dc79f4eed997ef890885cb695440a0cfc224a67",
"shape": [
14232
]
}
},
"arrival_weight_sampling": "arrival time; delta fixed for entire trial",
"base_graph_files_modified": false,
"base_weights_file_sha256": "462839ffc3feb8f6c278044488082b1c8e410e7f23229d6b5e29d1b7042416a1",
"base_weights_raw_sha256": "a8c19cde743bd456bcb2e988d504f805b6943d6ceb97cd241d6e1e472ab5a591",
"bounds_pass": true,
"bridge": "baseSI64 + (delta32 widened to float64) * float64(0.001); nonzero rows only",
"candidate_count": 14232,
"complete": true,
"copied_manifest_file": "overlay-manifest.json",
"copied_overlay_file": "overlay-input.npz",
"delta_dtype": "float32",
"delta_units": "mV",
"effective_weights_raw_sha256": "a60a2846dd952916097cecd1d3daf74cf5e785818749e0ffd818b3ced1c58fd2",
"expected_effective_weights_raw_sha256": "a60a2846dd952916097cecd1d3daf74cf5e785818749e0ffd818b3ced1c58fd2",
"frozen_mask_exact": true,
"inherited_aj_source_provenance": {
"candidate_sha256": "af1975ba5e5e700208c0a598d3cbe648a3cf10885c6231239b6e4b28f76d173b",
"diagnostic_additions": [
"generated/applied/pending trace split",
"fixed-sequence bitwise audit",
"source provenance and final APL state disclosure"
],
"module_globals_patched": false,
"only_dynamics_change": "fixed zero-initialized 0/18-step h32 delay before unchanged end g write",
"sealed_source_sha256": {
"ae_backend": "03758d07572f4b44d272059d9308fac534268ad201b57bdd77d69fee95e67278",
"af_queue": "d72003d98f0f1624b12126eff50bd361c43d888f4a64d90ba9247a58976f1961",
"ag_gpu": "69f5d893f47dafff4ef7c3186c3df0b9014666b32c8f4e943b57016bec92b18a",
"ag_worker": "21ceec65fe42581dc55872010e0025d660e80358905f1cf4df1dadf341a3b291"
},
"source_diff_sha256": "0584f865885b18e6a36870a7ecfbbc98d7a94274fa5e9e073e7cf97597d78a03"
},
"inherited_source_audit_scope": "AJ source provenance only; AM overlay semantics are recorded separately",
"input": {
"base_candidate_file": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/protocol/base-candidate.float32-mV.npy",
"base_candidate_sha256": "1218d1b328f29a7afefb0ca0b7b6421247f14ad598aa1957a6a7aacbc8cebcae",
"manifest_file": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/overlays/static25.json",
"manifest_sha256": "96d8406b69e98ba9829a52788c6c96888493e8bf34581d6d653226b1eb2e494b",
"mask_file": "/data/digital-drosophila/experiments/phase4h-dopamine-plasticity/plastic-mask/plastic-edge-ids.int64.npy",
"mask_sha256": "8b0fb6eb2e6c31da4d17dc20d890aa3f367e514f05642de5bad6b42a1611c05b",
"overlay_file": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/overlays/static25.npz",
"overlay_sha256": "7805bd2f86de91777bca86c52870607a2e091ed74b901319b896055ad3463f6d"
},
"installation_schedule": "before tick 0; after fast APL zeroing",
"installed_nonzero_count": 14232,
"learning": false,
"mapped_candidate_count": 14232,
"missing_candidate_count": 0,
"nonzero_delta_count": 14232,
"overlay_name": "static25",
"schema": "phase4am-overlay-audit-v1",
"state_dtype": "float64",
"static25_is_exact_fraction_of_float64_base_claimed": false,
"untouched_weights_bitwise_preserved": true,
"weights_updated_during_run": false,
"zero_delta_no_write": true
}
@@ -0,0 +1,14 @@
{
"schema": "phase4am-overlay-v1",
"overlay_name": "static25",
"overlay_sha256": "7805bd2f86de91777bca86c52870607a2e091ed74b901319b896055ad3463f6d",
"mask_path": "/data/digital-drosophila/experiments/phase4h-dopamine-plasticity/plastic-mask/plastic-edge-ids.int64.npy",
"mask_sha256": "8b0fb6eb2e6c31da4d17dc20d890aa3f367e514f05642de5bad6b42a1611c05b",
"base_candidate_path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/protocol/base-candidate.float32-mV.npy",
"base_candidate_sha256": "1218d1b328f29a7afefb0ca0b7b6421247f14ad598aa1957a6a7aacbc8cebcae",
"aj_model_dir": "/data/digital-drosophila/models/male-cns-lif/apl-timing-lab-v1",
"base_rhs_ast_sha256": "e89afc5c18e34631489aa479d9c8ba9d1fa40a8b0f721105405b9a6ef636959d",
"old_f32_expression_source_sha256": "5ec83a132deb8ba20e62dab485537c2414016fe2fece546198d61c0668d75b6b",
"training": false,
"fixed_for_whole_trial": true
}
@@ -0,0 +1,110 @@
tick,neuron_idx,attempted,accepted,rejected
20,7322,1,1,0
21,53508,1,1,0
24,999,1,1,0
25,530,1,1,0
31,159,1,1,0
37,2029,1,1,0
43,530,1,0,1
50,522,1,1,0
51,1372,1,1,0
58,9052,1,1,0
73,530,1,1,0
81,530,1,0,1
95,622,1,1,0
114,710,1,1,0
115,2029,1,1,0
136,79514,1,1,0
138,79514,1,0,1
150,130753,1,1,0
152,130753,1,0,1
154,530,1,0,1
155,2029,1,1,0
157,54264,1,1,0
160,54264,1,0,1
163,54264,1,0,1
172,2029,1,0,1
183,7322,1,1,0
190,130753,1,1,0
195,7322,1,0,1
201,97,1,1,0
202,530,1,0,1
204,9052,1,1,0
214,55121,1,1,0
220,522,1,1,0
234,1011,1,1,0
257,530,1,1,0
278,6721,1,1,0
287,999,1,0,1
295,189,1,1,0
326,571,1,0,1
334,360,1,0,1
353,79514,1,1,0
366,1372,1,1,0
386,189,1,0,1
408,1011,1,1,0
415,130753,1,0,1
423,434,1,1,0
430,130257,1,1,0
446,79514,1,1,0
463,2601,1,0,1
469,522,1,0,1
479,159,1,0,1
481,360,1,0,1
511,9052,1,1,0
513,571,1,1,0
527,54264,1,1,0
547,189,1,1,0
554,999,1,0,1
556,2029,1,1,0
556,9052,1,1,0
567,4786,1,1,0
567,79514,1,1,0
568,7680,1,1,0
610,434,1,1,0
613,1011,1,1,0
629,159,1,1,0
643,130753,1,1,0
657,1011,1,1,0
682,1372,1,1,0
695,6721,1,1,0
704,4624,1,1,0
710,9052,1,1,0
714,700,1,0,1
725,1372,1,1,0
725,7680,1,1,0
726,6721,1,1,0
742,1022,1,0,1
750,1011,1,1,0
754,189,1,0,1
755,4624,1,1,0
770,130753,1,0,1
795,97,1,1,0
814,189,1,1,0
817,360,1,1,0
817,6721,1,1,0
831,434,1,0,1
836,133666,1,1,0
842,530,1,1,0
844,54264,1,1,0
846,530,1,0,1
847,97,1,1,0
886,522,1,1,0
890,189,1,0,1
896,1372,1,1,0
896,133666,1,1,0
897,1011,1,1,0
902,1011,1,0,1
906,530,1,1,0
909,97,1,1,0
915,1927,1,0,1
950,4786,1,1,0
952,360,1,1,0
957,7322,1,1,0
964,189,1,1,0
965,522,1,0,1
974,2029,1,1,0
977,79514,1,0,1
982,97,1,0,1
992,54264,1,1,0
998,189,1,1,0
1 tick neuron_idx attempted accepted rejected
2 20 7322 1 1 0
3 21 53508 1 1 0
4 24 999 1 1 0
5 25 530 1 1 0
6 31 159 1 1 0
7 37 2029 1 1 0
8 43 530 1 0 1
9 50 522 1 1 0
10 51 1372 1 1 0
11 58 9052 1 1 0
12 73 530 1 1 0
13 81 530 1 0 1
14 95 622 1 1 0
15 114 710 1 1 0
16 115 2029 1 1 0
17 136 79514 1 1 0
18 138 79514 1 0 1
19 150 130753 1 1 0
20 152 130753 1 0 1
21 154 530 1 0 1
22 155 2029 1 1 0
23 157 54264 1 1 0
24 160 54264 1 0 1
25 163 54264 1 0 1
26 172 2029 1 0 1
27 183 7322 1 1 0
28 190 130753 1 1 0
29 195 7322 1 0 1
30 201 97 1 1 0
31 202 530 1 0 1
32 204 9052 1 1 0
33 214 55121 1 1 0
34 220 522 1 1 0
35 234 1011 1 1 0
36 257 530 1 1 0
37 278 6721 1 1 0
38 287 999 1 0 1
39 295 189 1 1 0
40 326 571 1 0 1
41 334 360 1 0 1
42 353 79514 1 1 0
43 366 1372 1 1 0
44 386 189 1 0 1
45 408 1011 1 1 0
46 415 130753 1 0 1
47 423 434 1 1 0
48 430 130257 1 1 0
49 446 79514 1 1 0
50 463 2601 1 0 1
51 469 522 1 0 1
52 479 159 1 0 1
53 481 360 1 0 1
54 511 9052 1 1 0
55 513 571 1 1 0
56 527 54264 1 1 0
57 547 189 1 1 0
58 554 999 1 0 1
59 556 2029 1 1 0
60 556 9052 1 1 0
61 567 4786 1 1 0
62 567 79514 1 1 0
63 568 7680 1 1 0
64 610 434 1 1 0
65 613 1011 1 1 0
66 629 159 1 1 0
67 643 130753 1 1 0
68 657 1011 1 1 0
69 682 1372 1 1 0
70 695 6721 1 1 0
71 704 4624 1 1 0
72 710 9052 1 1 0
73 714 700 1 0 1
74 725 1372 1 1 0
75 725 7680 1 1 0
76 726 6721 1 1 0
77 742 1022 1 0 1
78 750 1011 1 1 0
79 754 189 1 0 1
80 755 4624 1 1 0
81 770 130753 1 0 1
82 795 97 1 1 0
83 814 189 1 1 0
84 817 360 1 1 0
85 817 6721 1 1 0
86 831 434 1 0 1
87 836 133666 1 1 0
88 842 530 1 1 0
89 844 54264 1 1 0
90 846 530 1 0 1
91 847 97 1 1 0
92 886 522 1 1 0
93 890 189 1 0 1
94 896 1372 1 1 0
95 896 133666 1 1 0
96 897 1011 1 1 0
97 902 1011 1 0 1
98 906 530 1 1 0
99 909 97 1 1 0
100 915 1927 1 0 1
101 950 4786 1 1 0
102 952 360 1 1 0
103 957 7322 1 1 0
104 964 189 1 1 0
105 965 522 1 0 1
106 974 2029 1 1 0
107 977 79514 1 0 1
108 982 97 1 0 1
109 992 54264 1 1 0
110 998 189 1 1 0
@@ -0,0 +1,17 @@
{
"sealed_source_sha256": {
"ag_gpu": "69f5d893f47dafff4ef7c3186c3df0b9014666b32c8f4e943b57016bec92b18a",
"ag_worker": "21ceec65fe42581dc55872010e0025d660e80358905f1cf4df1dadf341a3b291",
"ae_backend": "03758d07572f4b44d272059d9308fac534268ad201b57bdd77d69fee95e67278",
"af_queue": "d72003d98f0f1624b12126eff50bd361c43d888f4a64d90ba9247a58976f1961"
},
"candidate_sha256": "af1975ba5e5e700208c0a598d3cbe648a3cf10885c6231239b6e4b28f76d173b",
"source_diff_sha256": "0584f865885b18e6a36870a7ecfbbc98d7a94274fa5e9e073e7cf97597d78a03",
"module_globals_patched": false,
"only_dynamics_change": "fixed zero-initialized 0/18-step h32 delay before unchanged end g write",
"diagnostic_additions": [
"generated/applied/pending trace split",
"fixed-sequence bitwise audit",
"source provenance and final APL state disclosure"
]
}
@@ -0,0 +1,168 @@
{
"case": "novel_to_aj-matched_energy-00-s1073741825",
"complete": true,
"pass_all": true,
"pass_all_scope": "internal finite/recording/event-count integrity only; independent equivalence not claimed",
"steps": 1000,
"completed_ticks": 1000,
"nodes": 166700,
"edges": 25582938,
"precision": "float64",
"apl_precision": "float32",
"state_units": "SI volts",
"total_spikes": 30416,
"requested": 109,
"accepted_requests": 77,
"rejected_requests": 32,
"arriving_edges": 14650115,
"accepted_arriving_edges": 13476870,
"counts_match_sparse_events": true,
"all_finite": true,
"record_history": false,
"apl_fast_edges_zeroed": 5845,
"kc_targets_present": 4064,
"effective_weights_raw_sha256": "a60a2846dd952916097cecd1d3daf74cf5e785818749e0ffd818b3ced1c58fd2",
"apl_component": {
"ok": true,
"protocol": "phase4ag-apl-v1",
"n_neurons": 166700,
"n_apl": 2,
"n_kc": 4064,
"dt_ms": 0.1,
"files_sha256": {
"input_matrix.npy": "c4d3df703ea5f1d7402b8255cfa19d9744139ad1048827c23b151d8ba766fec6",
"output_matrix.npy": "e2d0a1ccd740e6777245ebf2efcd88bf5e1da9e47308c63ec8e83d451e134a73",
"kc_globals.npy": "97a570aafa089f93e642b2bb07e3a3322dabb14c3c7dd431f0c8d2b3b7951fdd",
"apl_globals.npy": "8388c8795d49cfe5b14fda54f76ef3a35030c62ba87bd8ca6334a2dcdf186f19"
},
"array_sha256": {
"input_matrix.npy": "528a5f6f5ffe424f323c5a44695db4a7cf32570709832eff2f37f49e85c92c3e",
"output_matrix.npy": "0dcf02cdb7836ab72da32ac47f5682ca33e25f63a8a662a8452d4ea9d46babb9",
"kc_globals.npy": "9e990d10a63b0f74cd7bbbdc5369082f24d5246487af944ba289bc6bf48d4b75",
"apl_globals.npy": "979ef88dff30d41168ce9b377a006ccb3cd034b2dce86d54923ca0f4b87cb6a6"
},
"decay_f32_bits": "3f7eb923",
"gain_f32_bits": "3c23d70a",
"environment": {
"torch": "2.14.0+cu130",
"numpy": "2.2.6",
"cuda": "13.0",
"cudnn": 92400,
"device_name": "NVIDIA GeForce RTX 4090",
"device_index": 0,
"device_capability": [
8,
9
],
"deterministic_algorithms": false,
"cudnn_deterministic": false,
"cudnn_benchmark": false,
"cuda_matmul_allow_tf32": false,
"cudnn_allow_tf32": true,
"float32_matmul_precision": "highest",
"CUBLAS_WORKSPACE_CONFIG": null,
"precision_configuration_changed_by_component": false
},
"operator_sequence": "state.mul_(decay32); drive=mv(I32,spikes32); state.add_(drive); h=matmul(state,O32)*gain32",
"h_units": "legacy mV",
"initial_state": "float32 zeros"
},
"apl_schedule": "end, after threshold/reset and guarded arrivals, unconditional all KC",
"apl_si_conversion": "applied h32 -> float64 -> multiply float64 0.001 -> separate float64 subtraction",
"apl_delay_steps": 18,
"apl_timing": {
"pass_all": true,
"apl_delay_steps": 18,
"steps": 1000,
"pending_generated_count": 18,
"pending_initial_zero_prefix": 0,
"initial_padding_positive_zero": true,
"sample_bits_preserved": true,
"brain_tail_advanced": false,
"generated_rows": 1000,
"applied_generated_rows": 982,
"pending_shape": [
18,
4064
],
"pending_application_tick_start": 1000,
"pending_application_tick_stop_exclusive": 1018,
"pending_generated_tick_start": 982,
"pending_generated_tick_stop_exclusive": 1000,
"generated_trace": "apl-inhibition.float32.npy",
"applied_trace": "apl-applied.float32.npy",
"pending_trace": "apl-pending-tail.float32.npy",
"pending_raw_sha256": "bac621f063d7a78ace6e713640cf4e2b7994481b3aa7bd1d6ebdd38dd06c3cbd",
"final_apl_state_float32": [
153.61734008789062,
164.1633758544922
],
"final_apl_state_u32_bits": [
1125752330,
1126443475
],
"final_apl_state_nonzero": true,
"pending_queue_drained": false,
"finite_generated_sequence_only": true,
"future_apl_decay_or_feedback_generated": false,
"closed_loop_branch_integrals_claimed_equal": false,
"biological_delay_measurement_claimed": false
},
"source_provenance": {
"sealed_source_sha256": {
"ag_gpu": "69f5d893f47dafff4ef7c3186c3df0b9014666b32c8f4e943b57016bec92b18a",
"ag_worker": "21ceec65fe42581dc55872010e0025d660e80358905f1cf4df1dadf341a3b291",
"ae_backend": "03758d07572f4b44d272059d9308fac534268ad201b57bdd77d69fee95e67278",
"af_queue": "d72003d98f0f1624b12126eff50bd361c43d888f4a64d90ba9247a58976f1961"
},
"candidate_sha256": "af1975ba5e5e700208c0a598d3cbe648a3cf10885c6231239b6e4b28f76d173b",
"source_diff_sha256": "0584f865885b18e6a36870a7ecfbbc98d7a94274fa5e9e073e7cf97597d78a03",
"module_globals_patched": false,
"only_dynamics_change": "fixed zero-initialized 0/18-step h32 delay before unchanged end g write",
"diagnostic_additions": [
"generated/applied/pending trace split",
"fixed-sequence bitwise audit",
"source provenance and final APL state disclosure"
]
},
"pending_generated_count": 18,
"pending_initial_zero_prefix": 0,
"pending_tail_shape": [
18,
4064
],
"future_generated_decay_tail_included": false,
"build": {
"sources": {
"author_ext.cpp": "208a937d17bbb041b9bf6b25b89264ee566830b60609e58491b44583d8541f15",
"author_ext.cu": "669f166e18ce9a3f63fc723db8b0a8b74f7fa4757194b1bd65b4cf6008a7787e"
},
"torch": "2.14.0+cu130",
"torch_cuda": "13.0",
"arch_list": "8.9",
"cuda_flags": [
"-O2",
"--fmad=false",
"--ftz=false",
"--prec-div=true",
"--prec-sqrt=true"
]
},
"sealed_ae_backend_sha256": "03758d07572f4b44d272059d9308fac534268ad201b57bdd77d69fee95e67278",
"shared_apl_component_oracle_limitation": true,
"oracle_validation_claim": false,
"learning": false,
"performance_runtime_claim": false,
"cpu_sync_each_tick": true,
"build_or_cache_seconds": 0.0033543129975441843,
"diagnostic_simulation_seconds": 5.270468188999075,
"wall_seconds": 6.349607487998583,
"peak_allocated_vram_bytes": 526523392,
"peak_reserved_vram_bytes": 541065216,
"input_sha256": {
"spec.json": "f57a9d8eba2548c8a4c1129494620f55e12acf5a4492ee04301c3c90c7ad15c8",
"requests.npz": "2492a95c805c779db16753a786a20e5668885ae9f54f4be39e6d86e3090e5cd3",
"base_weights.npy": "462839ffc3feb8f6c278044488082b1c8e410e7f23229d6b5e29d1b7042416a1",
"coefficients.json": "bde79d95ef0097b827d5faf4d5658eafc009d8e9fcef1fddd645c953823e3f64"
}
}
@@ -0,0 +1,66 @@
{
"adapter_file": "/data/digital-drosophila/models/male-cns-lif/wholebrain-plastic-interface-v1/adapter.py",
"adapter_sha256": "3daabe771d3eef6c6189827c0ee5159b266c3a058e07da5781bb863be428aef9",
"apl_delay_steps": 18,
"ast": {
"adapted_run_ast_sha256": "b0401e196eb3a9f40873381ffa2d5a42bd9d2be854c386851c80fb0b0a386eb0",
"derived_namespace_file": "/data/digital-drosophila/models/male-cns-lif/wholebrain-plastic-interface-v1/adapter.py",
"entire_tick_loop_ast_identical": true,
"fake_original_file_used": false,
"hook_after_apl_zero_before_effective_hash": true,
"inserted_ast_statements": 1,
"loop_ast_sha256": "b50b21b7239f6b55b357e9f275786099c06e8e1ea924aeca07f13d3955d64151",
"only_ast_change": "_phase4am_install_overlay(weights, graph, apl_out_mask, upload, out_dir, source_provenance)",
"original_module_file": "/data/digital-drosophila/models/male-cns-lif/apl-timing-lab-v1/gpu_timing.py",
"original_module_globals_patched": false,
"original_run_ast_sha256": "6efd7d130a853ba9e99cc8672580ac91fcda9cf0883631efcd61c5e673756e1b"
},
"complete": true,
"delta_constant_for_entire_trial": true,
"effective_weights_raw_sha256": "a60a2846dd952916097cecd1d3daf74cf5e785818749e0ffd818b3ced1c58fd2",
"inherited_source_audit_describes_AM_semantics": false,
"inherited_summary_sha256": "f6208f99eef078bc51a1800e05ace755aabb9b90323cdd465c404578d4e5e964",
"installation_calls": 1,
"learning": false,
"original_module_globals_patched": false,
"overlay_audit_sha256": "949d7f986ae2212d44777bd351b88e54c38db857fc062d4d232c2670d31e3085",
"overlay_module_file": "/data/digital-drosophila/models/male-cns-lif/wholebrain-plastic-interface-v1/overlay.py",
"overlay_module_sha256": "7f891d0ba79b393c96e75fd2dee2eddc51e57d8213eaac2779703bc2c18712b4",
"schema": "phase4am-adapter-provenance-v1",
"scope": "constant sparse overlay installation only; no within-trial plasticity or learning",
"sealed_sources": {
"apl-timing-lab-v1/gpu_timing.py": {
"path": "/data/digital-drosophila/models/male-cns-lif/apl-timing-lab-v1/gpu_timing.py",
"sha256": "af1975ba5e5e700208c0a598d3cbe648a3cf10885c6231239b6e4b28f76d173b"
},
"apl-timing-lab-v1/timing_queue.py": {
"path": "/data/digital-drosophila/models/male-cns-lif/apl-timing-lab-v1/timing_queue.py",
"sha256": "54df6d4818e2a0c26e96fb0aaf5d9b71cd964981706da937562d48af79aca14e"
},
"author-apl-lab-v2/gpu_apl.py": {
"path": "/data/digital-drosophila/models/male-cns-lif/author-apl-lab-v2/gpu_apl.py",
"sha256": "69f5d893f47dafff4ef7c3186c3df0b9014666b32c8f4e943b57016bec92b18a"
},
"author-apl-lab-v2/legacy_apl_worker.py": {
"path": "/data/digital-drosophila/models/male-cns-lif/author-apl-lab-v2/legacy_apl_worker.py",
"sha256": "21ceec65fe42581dc55872010e0025d660e80358905f1cf4df1dadf341a3b291"
},
"author-fullgraph-lab-v1/oracle_full.py": {
"path": "/data/digital-drosophila/models/male-cns-lif/author-fullgraph-lab-v1/oracle_full.py",
"sha256": "d72003d98f0f1624b12126eff50bd361c43d888f4a64d90ba9247a58976f1961"
},
"author-runtime-lab-v1/author_ext.cpp": {
"path": "/data/digital-drosophila/models/male-cns-lif/author-runtime-lab-v1/author_ext.cpp",
"sha256": "208a937d17bbb041b9bf6b25b89264ee566830b60609e58491b44583d8541f15"
},
"author-runtime-lab-v1/author_ext.cu": {
"path": "/data/digital-drosophila/models/male-cns-lif/author-runtime-lab-v1/author_ext.cu",
"sha256": "669f166e18ce9a3f63fc723db8b0a8b74f7fa4757194b1bd65b4cf6008a7787e"
},
"author-runtime-lab-v1/gpu_backend.py": {
"path": "/data/digital-drosophila/models/male-cns-lif/author-runtime-lab-v1/gpu_backend.py",
"sha256": "03758d07572f4b44d272059d9308fac534268ad201b57bdd77d69fee95e67278"
}
},
"weights_updated_during_run": false
}
@@ -0,0 +1,45 @@
{
"ok": true,
"protocol": "phase4ag-apl-v1",
"n_neurons": 166700,
"n_apl": 2,
"n_kc": 4064,
"dt_ms": 0.1,
"files_sha256": {
"input_matrix.npy": "c4d3df703ea5f1d7402b8255cfa19d9744139ad1048827c23b151d8ba766fec6",
"output_matrix.npy": "e2d0a1ccd740e6777245ebf2efcd88bf5e1da9e47308c63ec8e83d451e134a73",
"kc_globals.npy": "97a570aafa089f93e642b2bb07e3a3322dabb14c3c7dd431f0c8d2b3b7951fdd",
"apl_globals.npy": "8388c8795d49cfe5b14fda54f76ef3a35030c62ba87bd8ca6334a2dcdf186f19"
},
"array_sha256": {
"input_matrix.npy": "528a5f6f5ffe424f323c5a44695db4a7cf32570709832eff2f37f49e85c92c3e",
"output_matrix.npy": "0dcf02cdb7836ab72da32ac47f5682ca33e25f63a8a662a8452d4ea9d46babb9",
"kc_globals.npy": "9e990d10a63b0f74cd7bbbdc5369082f24d5246487af944ba289bc6bf48d4b75",
"apl_globals.npy": "979ef88dff30d41168ce9b377a006ccb3cd034b2dce86d54923ca0f4b87cb6a6"
},
"decay_f32_bits": "3f7eb923",
"gain_f32_bits": "3c23d70a",
"environment": {
"torch": "2.14.0+cu130",
"numpy": "2.2.6",
"cuda": "13.0",
"cudnn": 92400,
"device_name": "NVIDIA GeForce RTX 4090",
"device_index": 0,
"device_capability": [
8,
9
],
"deterministic_algorithms": false,
"cudnn_deterministic": false,
"cudnn_benchmark": false,
"cuda_matmul_allow_tf32": false,
"cudnn_allow_tf32": true,
"float32_matmul_precision": "highest",
"CUBLAS_WORKSPACE_CONFIG": null,
"precision_configuration_changed_by_component": false
},
"operator_sequence": "state.mul_(decay32); drive=mv(I32,spikes32); state.add_(drive); h=matmul(state,O32)*gain32",
"h_units": "legacy mV",
"initial_state": "float32 zeros"
}
@@ -0,0 +1,38 @@
{
"pass_all": true,
"apl_delay_steps": 18,
"steps": 1000,
"pending_generated_count": 18,
"pending_initial_zero_prefix": 0,
"initial_padding_positive_zero": true,
"sample_bits_preserved": true,
"brain_tail_advanced": false,
"generated_rows": 1000,
"applied_generated_rows": 982,
"pending_shape": [
18,
4064
],
"pending_application_tick_start": 1000,
"pending_application_tick_stop_exclusive": 1018,
"pending_generated_tick_start": 982,
"pending_generated_tick_stop_exclusive": 1000,
"generated_trace": "apl-inhibition.float32.npy",
"applied_trace": "apl-applied.float32.npy",
"pending_trace": "apl-pending-tail.float32.npy",
"pending_raw_sha256": "b3bccac72e917bb146891764945b6d4e97a9ad56cb6d91b40dfd082f0db35ab3",
"final_apl_state_float32": [
151.92092895507812,
170.62469482421875
],
"final_apl_state_u32_bits": [
1125641154,
1126866924
],
"final_apl_state_nonzero": true,
"pending_queue_drained": false,
"finite_generated_sequence_only": true,
"future_apl_decay_or_feedback_generated": false,
"closed_loop_branch_integrals_claimed_equal": false,
"biological_delay_measurement_claimed": false
}
@@ -0,0 +1,312 @@
{
"schema": "phase4am-comparison-v1",
"mode": "self",
"case_dir": "/data/digital-drosophila/experiments/phase4ak-apl-timing-validation/cases/novel_to_aj/novel_to_aj-matched_energy-00-s1073741826",
"left": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-00-s1073741826-r0",
"right": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-00-s1073741826-r0",
"pass_all": true,
"learning_achieved": false,
"candidate_generated": false,
"tolerance": null,
"scope": "Single-run event/queue/input/static-overlay self-consistency; no repeat, equivalence, physiology or learning PASS",
"explicit_exclusions": [
"build_or_cache_seconds",
"diagnostic_simulation_seconds",
"peak_allocated_vram_bytes",
"peak_reserved_vram_bytes",
"wall_seconds"
],
"independent_cpu_wholebrain_oracle_claim": false,
"overlay_name": "static25",
"nodes": 166700,
"edges": 25582938,
"steps": 1000,
"apl_delay_steps": 18,
"full_queue_reconstructed": true,
"total_spikes": 31278,
"checks": {
"left_gpu.summary_complete": true,
"left_gpu.case_name": true,
"left_gpu.history_mode": true,
"left_gpu.apl_precision": true,
"left_gpu.no_error_marker": true,
"left_gpu.events_sorted_unique": true,
"left_gpu.count_nonnegative_total": true,
"left_gpu.ref_range": true,
"left_gpu.reported_events": true,
"left_gpu.last_hash_v": true,
"left_gpu.last_hash_g": true,
"left_gpu.last_hash_ref": true,
"left_gpu.request_summary": true,
"left_gpu.apl_positive_drive": true,
"left_gpu.apl_positive_state": true,
"left_gpu.apl_positive_inhibition": true,
"left_gpu.apl_positive_applied": true,
"left_gpu.delay_summary": true,
"left_gpu.no_dense_v": true,
"left_gpu.no_dense_g": true,
"left_gpu.no_dense_ref": true,
"left_gpu.component_summary_consistent": true,
"left_gpu.full_event_queue_request_accounting": true,
"left_gpu.timing_finite_nonnegative": true,
"left_gpu.fixed_delay_applied.schema": true,
"left_gpu.fixed_delay_applied.finite": true,
"left_gpu.fixed_delay_applied.bitwise_exact": true,
"left_gpu.fixed_delay_pending.schema": true,
"left_gpu.fixed_delay_pending.finite": true,
"left_gpu.fixed_delay_pending.bitwise_exact": true,
"left_gpu.finite_sequence_row_conservation": true,
"left_gpu.timing_integer_metadata": true,
"left_gpu.pending_hash_metadata": true,
"left_gpu.pending_shape_metadata": true,
"left_gpu.pending_summary_counts": true,
"left_gpu.final_apl_state_metadata": true,
"left_gpu.no_extra_brain_or_apl_ticks": true,
"left_gpu.timing_summary_metadata": true,
"input_overlay_and_source_provenance": true
},
"differences": {},
"read_manifest": [
{
"path": "/data/digital-drosophila/experiments/phase4af-author-fullgraph/oracle/no_input/coefficients.json",
"bytes": 2329,
"sha256": "bde79d95ef0097b827d5faf4d5658eafc009d8e9fcef1fddd645c953823e3f64"
},
{
"path": "/data/digital-drosophila/experiments/phase4ag-author-apl-r2/apl-bundle/apl_globals.npy",
"bytes": 136,
"sha256": "8388c8795d49cfe5b14fda54f76ef3a35030c62ba87bd8ca6334a2dcdf186f19"
},
{
"path": "/data/digital-drosophila/experiments/phase4ag-author-apl-r2/apl-bundle/input_matrix.npy",
"bytes": 1333728,
"sha256": "c4d3df703ea5f1d7402b8255cfa19d9744139ad1048827c23b151d8ba766fec6"
},
{
"path": "/data/digital-drosophila/experiments/phase4ag-author-apl-r2/apl-bundle/kc_globals.npy",
"bytes": 16384,
"sha256": "97a570aafa089f93e642b2bb07e3a3322dabb14c3c7dd431f0c8d2b3b7951fdd"
},
{
"path": "/data/digital-drosophila/experiments/phase4ag-author-apl-r2/apl-bundle/output_matrix.npy",
"bytes": 32640,
"sha256": "e2d0a1ccd740e6777245ebf2efcd88bf5e1da9e47308c63ec8e83d451e134a73"
},
{
"path": "/data/digital-drosophila/experiments/phase4ag-author-apl-r2/graphs/full/dst.npy",
"bytes": 102331880,
"sha256": "ce20f7433f78442c717ad2a7b5394cf4a3b109d990b4be0788040b7b0f4ed150"
},
{
"path": "/data/digital-drosophila/experiments/phase4ag-author-apl-r2/graphs/full/edge_id.npy",
"bytes": 204663632,
"sha256": "49260615ff2b6432ce3dea9ce2c7ab8f83d06c2fb7491e58e08355fcedf86a30"
},
{
"path": "/data/digital-drosophila/experiments/phase4ag-author-apl-r2/graphs/full/nodes.npy",
"bytes": 666928,
"sha256": "5b511a98e8fbf8d65bbc70b93e75ecae19366f650b7842a45611bfad62ed83dc"
},
{
"path": "/data/digital-drosophila/experiments/phase4ag-author-apl-r2/graphs/full/ptr.npy",
"bytes": 1333736,
"sha256": "fe43420f11e6242a11f8199ae7f097cab4b8a6db181d36f2a46b9e46670acbb4"
},
{
"path": "/data/digital-drosophila/experiments/phase4ag-author-apl-r2/graphs/full/signed_raw.npy",
"bytes": 204663632,
"sha256": "f9884ccb8930b32420b27c69271df78034a8350fe5a5c9b76a63c259268efc09"
},
{
"path": "/data/digital-drosophila/experiments/phase4ag-author-apl-r2/graphs/full/src.npy",
"bytes": 102331880,
"sha256": "bfd625ce690fc21eb0a8b9dede831688ab73b789045ba83ddf4baeefeddf1fc3"
},
{
"path": "/data/digital-drosophila/experiments/phase4ag-author-apl-r2/graphs/full/weights.npy",
"bytes": 204663632,
"sha256": "462839ffc3feb8f6c278044488082b1c8e410e7f23229d6b5e29d1b7042416a1"
},
{
"path": "/data/digital-drosophila/experiments/phase4ak-apl-timing-validation/cases/novel_to_aj/novel_to_aj-matched_energy-00-s1073741826/requests.npz",
"bytes": 807,
"sha256": "3bbb79402b17f63d92b0390973396d2a84d9df7d9ba3d400a8ab9ec12a9ebb6d"
},
{
"path": "/data/digital-drosophila/experiments/phase4ak-apl-timing-validation/cases/novel_to_aj/novel_to_aj-matched_energy-00-s1073741826/spec.json",
"bytes": 1632,
"sha256": "8d7f56b1e0cab5de147d5395bd89906b25b7d07fef9d7fc859a45ffe5884cc2c"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-00-s1073741826-r0/adapter-provenance.json",
"bytes": 3871,
"sha256": "ee7f4ff1afb6afd185bbb79e52f9411dd701b37f0930dacfbc3cf0af000c4a9d"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-00-s1073741826-r0/apl-applied.float32.npy",
"bytes": 16256128,
"sha256": "ab63ef455e3023c6442bca8706c9ebe240422273651c612acae36f35b9040c42"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-00-s1073741826-r0/apl-component.json",
"bytes": 1684,
"sha256": "f94b360033b4cb643c9774e7fa31c95a65c5571ca62b73072ee29b3af80121f9"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-00-s1073741826-r0/apl-drive.float32.npy",
"bytes": 8128,
"sha256": "cbd7ca1527b4e3b6af722be85331627a854e5bcf159b7d0c2bd2820a1325297a"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-00-s1073741826-r0/apl-inhibition.float32.npy",
"bytes": 16256128,
"sha256": "df432ba35c9d7465be261cdf013707f34ae47f90e38d67ebd1dc8f7c0c17bf19"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-00-s1073741826-r0/apl-pending-tail.float32.npy",
"bytes": 292736,
"sha256": "48c322502bb544eddc08b8077a8d7c79f3329b1f9322ff43837d516c06cee12f"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-00-s1073741826-r0/apl-state.float32.npy",
"bytes": 8128,
"sha256": "2af79eb620accd1a9896bc697717e8c878401be126ad70d83acb1a747fb5023d"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-00-s1073741826-r0/apl-timing-audit.json",
"bytes": 1180,
"sha256": "322e87e7e09b9418ff5bc3ed7297313bf4446b028b490d784bdccc8d810e278e"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-00-s1073741826-r0/overlay-audit.json",
"bytes": 3921,
"sha256": "949d7f986ae2212d44777bd351b88e54c38db857fc062d4d232c2670d31e3085"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-00-s1073741826-r0/overlay-input.npz",
"bytes": 44476,
"sha256": "7805bd2f86de91777bca86c52870607a2e091ed74b901319b896055ad3463f6d"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-00-s1073741826-r0/overlay-manifest.json",
"bytes": 938,
"sha256": "96d8406b69e98ba9829a52788c6c96888493e8bf34581d6d653226b1eb2e494b"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-00-s1073741826-r0/queue.jsonl",
"bytes": 321027,
"sha256": "46d4d4913537304089bcaa9c955be1553898e8a14f17eeab92fb6b5a626be67e"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-00-s1073741826-r0/requests.csv",
"bytes": 1658,
"sha256": "f35ee7bce00b0aae152a56eee2e1db98aa9bb5a37d65e159da3bc970bbaaabdf"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-00-s1073741826-r0/sealed-gpu-source.diff",
"bytes": 12917,
"sha256": "0584f865885b18e6a36870a7ecfbbc98d7a94274fa5e9e073e7cf97597d78a03"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-00-s1073741826-r0/source-audit.json",
"bytes": 859,
"sha256": "d644f0265632f117bba0e045d26fb266765b1d005a89426b6242f3de034be935"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-00-s1073741826-r0/state.npz",
"bytes": 2111708,
"sha256": "30e3bd5e01b1f4305752b1621fd76610bade3f24ab9892e45c63f7aafaf083fe"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-00-s1073741826-r0/summary.json",
"bytes": 6483,
"sha256": "f6208f99eef078bc51a1800e05ace755aabb9b90323cdd465c404578d4e5e964"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-00-s1073741826-r0/tick-state-hashes.jsonl",
"bytes": 255890,
"sha256": "8a50a8f240238e970bda969d6b7b3fe8ac54c51f63e5985773a20c54edfeca15"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/overlays/static25.json",
"bytes": 938,
"sha256": "96d8406b69e98ba9829a52788c6c96888493e8bf34581d6d653226b1eb2e494b"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/overlays/static25.npz",
"bytes": 44476,
"sha256": "7805bd2f86de91777bca86c52870607a2e091ed74b901319b896055ad3463f6d"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/protocol/base-candidate.float32-mV.npy",
"bytes": 57056,
"sha256": "1218d1b328f29a7afefb0ca0b7b6421247f14ad598aa1957a6a7aacbc8cebcae"
},
{
"path": "/data/digital-drosophila/experiments/phase4h-dopamine-plasticity/plastic-mask/plastic-edge-ids.int64.npy",
"bytes": 113984,
"sha256": "8b0fb6eb2e6c31da4d17dc20d890aa3f367e514f05642de5bad6b42a1611c05b"
},
{
"path": "/data/digital-drosophila/models/male-cns-lif/apl-timing-lab-v1/compare_timing.py",
"bytes": 41221,
"sha256": "9010f070fba9b7c9cf2d86187ee2abc57f3ac606ebc08a42baad4f3922b51734"
},
{
"path": "/data/digital-drosophila/models/male-cns-lif/apl-timing-lab-v1/gpu_timing.py",
"bytes": 27083,
"sha256": "af1975ba5e5e700208c0a598d3cbe648a3cf10885c6231239b6e4b28f76d173b"
},
{
"path": "/data/digital-drosophila/models/male-cns-lif/apl-timing-lab-v1/timing_queue.py",
"bytes": 4443,
"sha256": "54df6d4818e2a0c26e96fb0aaf5d9b71cd964981706da937562d48af79aca14e"
},
{
"path": "/data/digital-drosophila/models/male-cns-lif/author-apl-lab-v2/gpu_apl.py",
"bytes": 21206,
"sha256": "69f5d893f47dafff4ef7c3186c3df0b9014666b32c8f4e943b57016bec92b18a"
},
{
"path": "/data/digital-drosophila/models/male-cns-lif/author-apl-lab-v2/legacy_apl_worker.py",
"bytes": 8158,
"sha256": "21ceec65fe42581dc55872010e0025d660e80358905f1cf4df1dadf341a3b291"
},
{
"path": "/data/digital-drosophila/models/male-cns-lif/author-fullgraph-lab-v1/oracle_full.py",
"bytes": 32146,
"sha256": "d72003d98f0f1624b12126eff50bd361c43d888f4a64d90ba9247a58976f1961"
},
{
"path": "/data/digital-drosophila/models/male-cns-lif/author-runtime-lab-v1/author_ext.cpp",
"bytes": 1203,
"sha256": "208a937d17bbb041b9bf6b25b89264ee566830b60609e58491b44583d8541f15"
},
{
"path": "/data/digital-drosophila/models/male-cns-lif/author-runtime-lab-v1/author_ext.cu",
"bytes": 10422,
"sha256": "669f166e18ce9a3f63fc723db8b0a8b74f7fa4757194b1bd65b4cf6008a7787e"
},
{
"path": "/data/digital-drosophila/models/male-cns-lif/author-runtime-lab-v1/gpu_backend.py",
"bytes": 16277,
"sha256": "03758d07572f4b44d272059d9308fac534268ad201b57bdd77d69fee95e67278"
},
{
"path": "/data/digital-drosophila/models/male-cns-lif/wholebrain-plastic-interface-v1/adapter.py",
"bytes": 15690,
"sha256": "3daabe771d3eef6c6189827c0ee5159b266c3a058e07da5781bb863be428aef9"
},
{
"path": "/data/digital-drosophila/models/male-cns-lif/wholebrain-plastic-interface-v1/comparison.py",
"bytes": 37000,
"sha256": "4d64020af05e7fc9e535ac8532dd0e7b614b200f695ed8c6d486c6151de57175"
},
{
"path": "/data/digital-drosophila/models/male-cns-lif/wholebrain-plastic-interface-v1/overlay.py",
"bytes": 11355,
"sha256": "7f891d0ba79b393c96e75fd2dee2eddc51e57d8213eaac2779703bc2c18712b4"
}
],
"failed_checks": []
}
@@ -0,0 +1,97 @@
[
{
"path": "adapter-provenance.json",
"bytes": 3871,
"sha256": "ee7f4ff1afb6afd185bbb79e52f9411dd701b37f0930dacfbc3cf0af000c4a9d"
},
{
"path": "apl-applied.float32.npy",
"bytes": 16256128,
"sha256": "ab63ef455e3023c6442bca8706c9ebe240422273651c612acae36f35b9040c42"
},
{
"path": "apl-component.json",
"bytes": 1684,
"sha256": "f94b360033b4cb643c9774e7fa31c95a65c5571ca62b73072ee29b3af80121f9"
},
{
"path": "apl-drive.float32.npy",
"bytes": 8128,
"sha256": "cbd7ca1527b4e3b6af722be85331627a854e5bcf159b7d0c2bd2820a1325297a"
},
{
"path": "apl-inhibition.float32.npy",
"bytes": 16256128,
"sha256": "df432ba35c9d7465be261cdf013707f34ae47f90e38d67ebd1dc8f7c0c17bf19"
},
{
"path": "apl-pending-tail.float32.npy",
"bytes": 292736,
"sha256": "48c322502bb544eddc08b8077a8d7c79f3329b1f9322ff43837d516c06cee12f"
},
{
"path": "apl-state.float32.npy",
"bytes": 8128,
"sha256": "2af79eb620accd1a9896bc697717e8c878401be126ad70d83acb1a747fb5023d"
},
{
"path": "apl-timing-audit.json",
"bytes": 1180,
"sha256": "322e87e7e09b9418ff5bc3ed7297313bf4446b028b490d784bdccc8d810e278e"
},
{
"path": "comparison.json",
"bytes": 14861,
"sha256": "715ffdd8bed6e9ee68a31fafaa966603f2f988c1b200549bfdc102f6b94a4d54"
},
{
"path": "overlay-audit.json",
"bytes": 3921,
"sha256": "949d7f986ae2212d44777bd351b88e54c38db857fc062d4d232c2670d31e3085"
},
{
"path": "overlay-input.npz",
"bytes": 44476,
"sha256": "7805bd2f86de91777bca86c52870607a2e091ed74b901319b896055ad3463f6d"
},
{
"path": "overlay-manifest.json",
"bytes": 938,
"sha256": "96d8406b69e98ba9829a52788c6c96888493e8bf34581d6d653226b1eb2e494b"
},
{
"path": "queue.jsonl",
"bytes": 321027,
"sha256": "46d4d4913537304089bcaa9c955be1553898e8a14f17eeab92fb6b5a626be67e"
},
{
"path": "requests.csv",
"bytes": 1658,
"sha256": "f35ee7bce00b0aae152a56eee2e1db98aa9bb5a37d65e159da3bc970bbaaabdf"
},
{
"path": "sealed-gpu-source.diff",
"bytes": 12917,
"sha256": "0584f865885b18e6a36870a7ecfbbc98d7a94274fa5e9e073e7cf97597d78a03"
},
{
"path": "source-audit.json",
"bytes": 859,
"sha256": "d644f0265632f117bba0e045d26fb266765b1d005a89426b6242f3de034be935"
},
{
"path": "state.npz",
"bytes": 2111708,
"sha256": "30e3bd5e01b1f4305752b1621fd76610bade3f24ab9892e45c63f7aafaf083fe"
},
{
"path": "summary.json",
"bytes": 6483,
"sha256": "f6208f99eef078bc51a1800e05ace755aabb9b90323cdd465c404578d4e5e964"
},
{
"path": "tick-state-hashes.jsonl",
"bytes": 255890,
"sha256": "8a50a8f240238e970bda969d6b7b3fe8ac54c51f63e5985773a20c54edfeca15"
}
]
@@ -0,0 +1,83 @@
{
"apl_fast_edges_zeroed": 5845,
"apl_overlap_count": 0,
"arrays": {
"base_candidate_mv": {
"dtype": "float32",
"raw_sha256": "380a4e9f5e5431baa8f74ecabf791febdc328e5e054fb222dc505df64a3fd501",
"shape": [
14232
]
},
"edge_id": {
"dtype": "int64",
"raw_sha256": "7c2facacbf1b3ec2fc8f265596d85988b6db6d20daab86922e194d66964367f0",
"shape": [
14232
]
},
"plastic_delta_mv": {
"dtype": "float32",
"raw_sha256": "ea03a0ab6b537ea6bcac86191dc79f4eed997ef890885cb695440a0cfc224a67",
"shape": [
14232
]
}
},
"arrival_weight_sampling": "arrival time; delta fixed for entire trial",
"base_graph_files_modified": false,
"base_weights_file_sha256": "462839ffc3feb8f6c278044488082b1c8e410e7f23229d6b5e29d1b7042416a1",
"base_weights_raw_sha256": "a8c19cde743bd456bcb2e988d504f805b6943d6ceb97cd241d6e1e472ab5a591",
"bounds_pass": true,
"bridge": "baseSI64 + (delta32 widened to float64) * float64(0.001); nonzero rows only",
"candidate_count": 14232,
"complete": true,
"copied_manifest_file": "overlay-manifest.json",
"copied_overlay_file": "overlay-input.npz",
"delta_dtype": "float32",
"delta_units": "mV",
"effective_weights_raw_sha256": "a60a2846dd952916097cecd1d3daf74cf5e785818749e0ffd818b3ced1c58fd2",
"expected_effective_weights_raw_sha256": "a60a2846dd952916097cecd1d3daf74cf5e785818749e0ffd818b3ced1c58fd2",
"frozen_mask_exact": true,
"inherited_aj_source_provenance": {
"candidate_sha256": "af1975ba5e5e700208c0a598d3cbe648a3cf10885c6231239b6e4b28f76d173b",
"diagnostic_additions": [
"generated/applied/pending trace split",
"fixed-sequence bitwise audit",
"source provenance and final APL state disclosure"
],
"module_globals_patched": false,
"only_dynamics_change": "fixed zero-initialized 0/18-step h32 delay before unchanged end g write",
"sealed_source_sha256": {
"ae_backend": "03758d07572f4b44d272059d9308fac534268ad201b57bdd77d69fee95e67278",
"af_queue": "d72003d98f0f1624b12126eff50bd361c43d888f4a64d90ba9247a58976f1961",
"ag_gpu": "69f5d893f47dafff4ef7c3186c3df0b9014666b32c8f4e943b57016bec92b18a",
"ag_worker": "21ceec65fe42581dc55872010e0025d660e80358905f1cf4df1dadf341a3b291"
},
"source_diff_sha256": "0584f865885b18e6a36870a7ecfbbc98d7a94274fa5e9e073e7cf97597d78a03"
},
"inherited_source_audit_scope": "AJ source provenance only; AM overlay semantics are recorded separately",
"input": {
"base_candidate_file": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/protocol/base-candidate.float32-mV.npy",
"base_candidate_sha256": "1218d1b328f29a7afefb0ca0b7b6421247f14ad598aa1957a6a7aacbc8cebcae",
"manifest_file": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/overlays/static25.json",
"manifest_sha256": "96d8406b69e98ba9829a52788c6c96888493e8bf34581d6d653226b1eb2e494b",
"mask_file": "/data/digital-drosophila/experiments/phase4h-dopamine-plasticity/plastic-mask/plastic-edge-ids.int64.npy",
"mask_sha256": "8b0fb6eb2e6c31da4d17dc20d890aa3f367e514f05642de5bad6b42a1611c05b",
"overlay_file": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/overlays/static25.npz",
"overlay_sha256": "7805bd2f86de91777bca86c52870607a2e091ed74b901319b896055ad3463f6d"
},
"installation_schedule": "before tick 0; after fast APL zeroing",
"installed_nonzero_count": 14232,
"learning": false,
"mapped_candidate_count": 14232,
"missing_candidate_count": 0,
"nonzero_delta_count": 14232,
"overlay_name": "static25",
"schema": "phase4am-overlay-audit-v1",
"state_dtype": "float64",
"static25_is_exact_fraction_of_float64_base_claimed": false,
"untouched_weights_bitwise_preserved": true,
"weights_updated_during_run": false,
"zero_delta_no_write": true
}
@@ -0,0 +1,14 @@
{
"schema": "phase4am-overlay-v1",
"overlay_name": "static25",
"overlay_sha256": "7805bd2f86de91777bca86c52870607a2e091ed74b901319b896055ad3463f6d",
"mask_path": "/data/digital-drosophila/experiments/phase4h-dopamine-plasticity/plastic-mask/plastic-edge-ids.int64.npy",
"mask_sha256": "8b0fb6eb2e6c31da4d17dc20d890aa3f367e514f05642de5bad6b42a1611c05b",
"base_candidate_path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/protocol/base-candidate.float32-mV.npy",
"base_candidate_sha256": "1218d1b328f29a7afefb0ca0b7b6421247f14ad598aa1957a6a7aacbc8cebcae",
"aj_model_dir": "/data/digital-drosophila/models/male-cns-lif/apl-timing-lab-v1",
"base_rhs_ast_sha256": "e89afc5c18e34631489aa479d9c8ba9d1fa40a8b0f721105405b9a6ef636959d",
"old_f32_expression_source_sha256": "5ec83a132deb8ba20e62dab485537c2414016fe2fece546198d61c0668d75b6b",
"training": false,
"fixed_for_whole_trial": true
}
@@ -0,0 +1,104 @@
tick,neuron_idx,attempted,accepted,rejected
10,4786,1,1,0
14,2029,1,1,0
17,530,1,1,0
26,434,1,1,0
27,7680,1,1,0
28,999,1,1,0
34,189,1,1,0
43,622,1,1,0
46,571,1,1,0
59,999,1,1,0
69,6721,1,1,0
73,434,1,1,0
73,130753,1,1,0
74,97,1,1,0
83,7322,1,1,0
87,97,1,0,1
89,159,1,1,0
96,1022,1,1,0
111,1372,1,1,0
113,54264,1,1,0
121,189,1,1,0
127,4786,1,1,0
129,189,1,0,1
141,1372,1,1,0
141,132659,1,1,0
146,9052,1,1,0
188,1011,1,0,1
213,434,1,0,1
217,130753,1,1,0
229,1372,1,0,1
242,1372,1,1,0
250,2029,1,1,0
277,522,1,1,0
279,4624,1,1,0
280,97,1,1,0
280,9052,1,1,0
289,530,1,0,1
296,159,1,1,0
297,189,1,1,0
304,434,1,1,0
306,4786,1,1,0
346,54264,1,1,0
356,710,1,0,1
364,2029,1,1,0
365,1372,1,1,0
368,7322,1,1,0
381,530,1,1,0
394,1372,1,1,0
394,54264,1,1,0
402,54264,1,0,1
424,189,1,1,0
441,1011,1,0,1
453,132659,1,0,1
472,130257,1,1,0
494,97,1,1,0
500,97,1,0,1
536,1372,1,1,0
545,360,1,1,0
560,189,1,0,1
574,6721,1,1,0
585,4624,1,1,0
605,360,1,0,1
623,434,1,1,0
626,2029,1,0,1
635,1022,1,1,0
638,530,1,0,1
666,6721,1,1,0
673,130753,1,1,0
679,130753,1,0,1
687,530,1,1,0
688,1372,1,1,0
689,79514,1,1,0
697,54264,1,1,0
715,522,1,1,0
730,1011,1,1,0
734,434,1,1,0
734,2029,1,1,0
766,130257,1,1,0
770,130257,1,0,1
782,9052,1,1,0
795,2029,1,1,0
806,132659,1,0,1
811,434,1,0,1
813,4786,1,1,0
819,54264,1,1,0
831,710,1,0,1
832,130753,1,0,1
835,53508,1,1,0
862,4624,1,1,0
869,159,1,1,0
872,189,1,0,1
876,130753,1,1,0
898,522,1,1,0
913,9052,1,1,0
945,97,1,0,1
948,97,1,0,1
949,54264,1,1,0
955,522,1,0,1
960,6721,1,1,0
965,1022,1,0,1
971,54264,1,1,0
978,159,1,1,0
984,97,1,1,0
1 tick neuron_idx attempted accepted rejected
2 10 4786 1 1 0
3 14 2029 1 1 0
4 17 530 1 1 0
5 26 434 1 1 0
6 27 7680 1 1 0
7 28 999 1 1 0
8 34 189 1 1 0
9 43 622 1 1 0
10 46 571 1 1 0
11 59 999 1 1 0
12 69 6721 1 1 0
13 73 434 1 1 0
14 73 130753 1 1 0
15 74 97 1 1 0
16 83 7322 1 1 0
17 87 97 1 0 1
18 89 159 1 1 0
19 96 1022 1 1 0
20 111 1372 1 1 0
21 113 54264 1 1 0
22 121 189 1 1 0
23 127 4786 1 1 0
24 129 189 1 0 1
25 141 1372 1 1 0
26 141 132659 1 1 0
27 146 9052 1 1 0
28 188 1011 1 0 1
29 213 434 1 0 1
30 217 130753 1 1 0
31 229 1372 1 0 1
32 242 1372 1 1 0
33 250 2029 1 1 0
34 277 522 1 1 0
35 279 4624 1 1 0
36 280 97 1 1 0
37 280 9052 1 1 0
38 289 530 1 0 1
39 296 159 1 1 0
40 297 189 1 1 0
41 304 434 1 1 0
42 306 4786 1 1 0
43 346 54264 1 1 0
44 356 710 1 0 1
45 364 2029 1 1 0
46 365 1372 1 1 0
47 368 7322 1 1 0
48 381 530 1 1 0
49 394 1372 1 1 0
50 394 54264 1 1 0
51 402 54264 1 0 1
52 424 189 1 1 0
53 441 1011 1 0 1
54 453 132659 1 0 1
55 472 130257 1 1 0
56 494 97 1 1 0
57 500 97 1 0 1
58 536 1372 1 1 0
59 545 360 1 1 0
60 560 189 1 0 1
61 574 6721 1 1 0
62 585 4624 1 1 0
63 605 360 1 0 1
64 623 434 1 1 0
65 626 2029 1 0 1
66 635 1022 1 1 0
67 638 530 1 0 1
68 666 6721 1 1 0
69 673 130753 1 1 0
70 679 130753 1 0 1
71 687 530 1 1 0
72 688 1372 1 1 0
73 689 79514 1 1 0
74 697 54264 1 1 0
75 715 522 1 1 0
76 730 1011 1 1 0
77 734 434 1 1 0
78 734 2029 1 1 0
79 766 130257 1 1 0
80 770 130257 1 0 1
81 782 9052 1 1 0
82 795 2029 1 1 0
83 806 132659 1 0 1
84 811 434 1 0 1
85 813 4786 1 1 0
86 819 54264 1 1 0
87 831 710 1 0 1
88 832 130753 1 0 1
89 835 53508 1 1 0
90 862 4624 1 1 0
91 869 159 1 1 0
92 872 189 1 0 1
93 876 130753 1 1 0
94 898 522 1 1 0
95 913 9052 1 1 0
96 945 97 1 0 1
97 948 97 1 0 1
98 949 54264 1 1 0
99 955 522 1 0 1
100 960 6721 1 1 0
101 965 1022 1 0 1
102 971 54264 1 1 0
103 978 159 1 1 0
104 984 97 1 1 0
@@ -0,0 +1,17 @@
{
"sealed_source_sha256": {
"ag_gpu": "69f5d893f47dafff4ef7c3186c3df0b9014666b32c8f4e943b57016bec92b18a",
"ag_worker": "21ceec65fe42581dc55872010e0025d660e80358905f1cf4df1dadf341a3b291",
"ae_backend": "03758d07572f4b44d272059d9308fac534268ad201b57bdd77d69fee95e67278",
"af_queue": "d72003d98f0f1624b12126eff50bd361c43d888f4a64d90ba9247a58976f1961"
},
"candidate_sha256": "af1975ba5e5e700208c0a598d3cbe648a3cf10885c6231239b6e4b28f76d173b",
"source_diff_sha256": "0584f865885b18e6a36870a7ecfbbc98d7a94274fa5e9e073e7cf97597d78a03",
"module_globals_patched": false,
"only_dynamics_change": "fixed zero-initialized 0/18-step h32 delay before unchanged end g write",
"diagnostic_additions": [
"generated/applied/pending trace split",
"fixed-sequence bitwise audit",
"source provenance and final APL state disclosure"
]
}
@@ -0,0 +1,168 @@
{
"case": "novel_to_aj-matched_energy-00-s1073741826",
"complete": true,
"pass_all": true,
"pass_all_scope": "internal finite/recording/event-count integrity only; independent equivalence not claimed",
"steps": 1000,
"completed_ticks": 1000,
"nodes": 166700,
"edges": 25582938,
"precision": "float64",
"apl_precision": "float32",
"state_units": "SI volts",
"total_spikes": 31278,
"requested": 103,
"accepted_requests": 77,
"rejected_requests": 26,
"arriving_edges": 15282839,
"accepted_arriving_edges": 14078029,
"counts_match_sparse_events": true,
"all_finite": true,
"record_history": false,
"apl_fast_edges_zeroed": 5845,
"kc_targets_present": 4064,
"effective_weights_raw_sha256": "a60a2846dd952916097cecd1d3daf74cf5e785818749e0ffd818b3ced1c58fd2",
"apl_component": {
"ok": true,
"protocol": "phase4ag-apl-v1",
"n_neurons": 166700,
"n_apl": 2,
"n_kc": 4064,
"dt_ms": 0.1,
"files_sha256": {
"input_matrix.npy": "c4d3df703ea5f1d7402b8255cfa19d9744139ad1048827c23b151d8ba766fec6",
"output_matrix.npy": "e2d0a1ccd740e6777245ebf2efcd88bf5e1da9e47308c63ec8e83d451e134a73",
"kc_globals.npy": "97a570aafa089f93e642b2bb07e3a3322dabb14c3c7dd431f0c8d2b3b7951fdd",
"apl_globals.npy": "8388c8795d49cfe5b14fda54f76ef3a35030c62ba87bd8ca6334a2dcdf186f19"
},
"array_sha256": {
"input_matrix.npy": "528a5f6f5ffe424f323c5a44695db4a7cf32570709832eff2f37f49e85c92c3e",
"output_matrix.npy": "0dcf02cdb7836ab72da32ac47f5682ca33e25f63a8a662a8452d4ea9d46babb9",
"kc_globals.npy": "9e990d10a63b0f74cd7bbbdc5369082f24d5246487af944ba289bc6bf48d4b75",
"apl_globals.npy": "979ef88dff30d41168ce9b377a006ccb3cd034b2dce86d54923ca0f4b87cb6a6"
},
"decay_f32_bits": "3f7eb923",
"gain_f32_bits": "3c23d70a",
"environment": {
"torch": "2.14.0+cu130",
"numpy": "2.2.6",
"cuda": "13.0",
"cudnn": 92400,
"device_name": "NVIDIA GeForce RTX 4090",
"device_index": 0,
"device_capability": [
8,
9
],
"deterministic_algorithms": false,
"cudnn_deterministic": false,
"cudnn_benchmark": false,
"cuda_matmul_allow_tf32": false,
"cudnn_allow_tf32": true,
"float32_matmul_precision": "highest",
"CUBLAS_WORKSPACE_CONFIG": null,
"precision_configuration_changed_by_component": false
},
"operator_sequence": "state.mul_(decay32); drive=mv(I32,spikes32); state.add_(drive); h=matmul(state,O32)*gain32",
"h_units": "legacy mV",
"initial_state": "float32 zeros"
},
"apl_schedule": "end, after threshold/reset and guarded arrivals, unconditional all KC",
"apl_si_conversion": "applied h32 -> float64 -> multiply float64 0.001 -> separate float64 subtraction",
"apl_delay_steps": 18,
"apl_timing": {
"pass_all": true,
"apl_delay_steps": 18,
"steps": 1000,
"pending_generated_count": 18,
"pending_initial_zero_prefix": 0,
"initial_padding_positive_zero": true,
"sample_bits_preserved": true,
"brain_tail_advanced": false,
"generated_rows": 1000,
"applied_generated_rows": 982,
"pending_shape": [
18,
4064
],
"pending_application_tick_start": 1000,
"pending_application_tick_stop_exclusive": 1018,
"pending_generated_tick_start": 982,
"pending_generated_tick_stop_exclusive": 1000,
"generated_trace": "apl-inhibition.float32.npy",
"applied_trace": "apl-applied.float32.npy",
"pending_trace": "apl-pending-tail.float32.npy",
"pending_raw_sha256": "b3bccac72e917bb146891764945b6d4e97a9ad56cb6d91b40dfd082f0db35ab3",
"final_apl_state_float32": [
151.92092895507812,
170.62469482421875
],
"final_apl_state_u32_bits": [
1125641154,
1126866924
],
"final_apl_state_nonzero": true,
"pending_queue_drained": false,
"finite_generated_sequence_only": true,
"future_apl_decay_or_feedback_generated": false,
"closed_loop_branch_integrals_claimed_equal": false,
"biological_delay_measurement_claimed": false
},
"source_provenance": {
"sealed_source_sha256": {
"ag_gpu": "69f5d893f47dafff4ef7c3186c3df0b9014666b32c8f4e943b57016bec92b18a",
"ag_worker": "21ceec65fe42581dc55872010e0025d660e80358905f1cf4df1dadf341a3b291",
"ae_backend": "03758d07572f4b44d272059d9308fac534268ad201b57bdd77d69fee95e67278",
"af_queue": "d72003d98f0f1624b12126eff50bd361c43d888f4a64d90ba9247a58976f1961"
},
"candidate_sha256": "af1975ba5e5e700208c0a598d3cbe648a3cf10885c6231239b6e4b28f76d173b",
"source_diff_sha256": "0584f865885b18e6a36870a7ecfbbc98d7a94274fa5e9e073e7cf97597d78a03",
"module_globals_patched": false,
"only_dynamics_change": "fixed zero-initialized 0/18-step h32 delay before unchanged end g write",
"diagnostic_additions": [
"generated/applied/pending trace split",
"fixed-sequence bitwise audit",
"source provenance and final APL state disclosure"
]
},
"pending_generated_count": 18,
"pending_initial_zero_prefix": 0,
"pending_tail_shape": [
18,
4064
],
"future_generated_decay_tail_included": false,
"build": {
"sources": {
"author_ext.cpp": "208a937d17bbb041b9bf6b25b89264ee566830b60609e58491b44583d8541f15",
"author_ext.cu": "669f166e18ce9a3f63fc723db8b0a8b74f7fa4757194b1bd65b4cf6008a7787e"
},
"torch": "2.14.0+cu130",
"torch_cuda": "13.0",
"arch_list": "8.9",
"cuda_flags": [
"-O2",
"--fmad=false",
"--ftz=false",
"--prec-div=true",
"--prec-sqrt=true"
]
},
"sealed_ae_backend_sha256": "03758d07572f4b44d272059d9308fac534268ad201b57bdd77d69fee95e67278",
"shared_apl_component_oracle_limitation": true,
"oracle_validation_claim": false,
"learning": false,
"performance_runtime_claim": false,
"cpu_sync_each_tick": true,
"build_or_cache_seconds": 0.0028037480005878024,
"diagnostic_simulation_seconds": 5.291460865999397,
"wall_seconds": 6.3629232040002535,
"peak_allocated_vram_bytes": 526523392,
"peak_reserved_vram_bytes": 541065216,
"input_sha256": {
"spec.json": "8d7f56b1e0cab5de147d5395bd89906b25b7d07fef9d7fc859a45ffe5884cc2c",
"requests.npz": "3bbb79402b17f63d92b0390973396d2a84d9df7d9ba3d400a8ab9ec12a9ebb6d",
"base_weights.npy": "462839ffc3feb8f6c278044488082b1c8e410e7f23229d6b5e29d1b7042416a1",
"coefficients.json": "bde79d95ef0097b827d5faf4d5658eafc009d8e9fcef1fddd645c953823e3f64"
}
}
@@ -0,0 +1,66 @@
{
"adapter_file": "/data/digital-drosophila/models/male-cns-lif/wholebrain-plastic-interface-v1/adapter.py",
"adapter_sha256": "3daabe771d3eef6c6189827c0ee5159b266c3a058e07da5781bb863be428aef9",
"apl_delay_steps": 18,
"ast": {
"adapted_run_ast_sha256": "b0401e196eb3a9f40873381ffa2d5a42bd9d2be854c386851c80fb0b0a386eb0",
"derived_namespace_file": "/data/digital-drosophila/models/male-cns-lif/wholebrain-plastic-interface-v1/adapter.py",
"entire_tick_loop_ast_identical": true,
"fake_original_file_used": false,
"hook_after_apl_zero_before_effective_hash": true,
"inserted_ast_statements": 1,
"loop_ast_sha256": "b50b21b7239f6b55b357e9f275786099c06e8e1ea924aeca07f13d3955d64151",
"only_ast_change": "_phase4am_install_overlay(weights, graph, apl_out_mask, upload, out_dir, source_provenance)",
"original_module_file": "/data/digital-drosophila/models/male-cns-lif/apl-timing-lab-v1/gpu_timing.py",
"original_module_globals_patched": false,
"original_run_ast_sha256": "6efd7d130a853ba9e99cc8672580ac91fcda9cf0883631efcd61c5e673756e1b"
},
"complete": true,
"delta_constant_for_entire_trial": true,
"effective_weights_raw_sha256": "a60a2846dd952916097cecd1d3daf74cf5e785818749e0ffd818b3ced1c58fd2",
"inherited_source_audit_describes_AM_semantics": false,
"inherited_summary_sha256": "0041ac2e5b6473196d943dde6c2891c75695bce5d73ee8e1a01b44b6bfc618ff",
"installation_calls": 1,
"learning": false,
"original_module_globals_patched": false,
"overlay_audit_sha256": "949d7f986ae2212d44777bd351b88e54c38db857fc062d4d232c2670d31e3085",
"overlay_module_file": "/data/digital-drosophila/models/male-cns-lif/wholebrain-plastic-interface-v1/overlay.py",
"overlay_module_sha256": "7f891d0ba79b393c96e75fd2dee2eddc51e57d8213eaac2779703bc2c18712b4",
"schema": "phase4am-adapter-provenance-v1",
"scope": "constant sparse overlay installation only; no within-trial plasticity or learning",
"sealed_sources": {
"apl-timing-lab-v1/gpu_timing.py": {
"path": "/data/digital-drosophila/models/male-cns-lif/apl-timing-lab-v1/gpu_timing.py",
"sha256": "af1975ba5e5e700208c0a598d3cbe648a3cf10885c6231239b6e4b28f76d173b"
},
"apl-timing-lab-v1/timing_queue.py": {
"path": "/data/digital-drosophila/models/male-cns-lif/apl-timing-lab-v1/timing_queue.py",
"sha256": "54df6d4818e2a0c26e96fb0aaf5d9b71cd964981706da937562d48af79aca14e"
},
"author-apl-lab-v2/gpu_apl.py": {
"path": "/data/digital-drosophila/models/male-cns-lif/author-apl-lab-v2/gpu_apl.py",
"sha256": "69f5d893f47dafff4ef7c3186c3df0b9014666b32c8f4e943b57016bec92b18a"
},
"author-apl-lab-v2/legacy_apl_worker.py": {
"path": "/data/digital-drosophila/models/male-cns-lif/author-apl-lab-v2/legacy_apl_worker.py",
"sha256": "21ceec65fe42581dc55872010e0025d660e80358905f1cf4df1dadf341a3b291"
},
"author-fullgraph-lab-v1/oracle_full.py": {
"path": "/data/digital-drosophila/models/male-cns-lif/author-fullgraph-lab-v1/oracle_full.py",
"sha256": "d72003d98f0f1624b12126eff50bd361c43d888f4a64d90ba9247a58976f1961"
},
"author-runtime-lab-v1/author_ext.cpp": {
"path": "/data/digital-drosophila/models/male-cns-lif/author-runtime-lab-v1/author_ext.cpp",
"sha256": "208a937d17bbb041b9bf6b25b89264ee566830b60609e58491b44583d8541f15"
},
"author-runtime-lab-v1/author_ext.cu": {
"path": "/data/digital-drosophila/models/male-cns-lif/author-runtime-lab-v1/author_ext.cu",
"sha256": "669f166e18ce9a3f63fc723db8b0a8b74f7fa4757194b1bd65b4cf6008a7787e"
},
"author-runtime-lab-v1/gpu_backend.py": {
"path": "/data/digital-drosophila/models/male-cns-lif/author-runtime-lab-v1/gpu_backend.py",
"sha256": "03758d07572f4b44d272059d9308fac534268ad201b57bdd77d69fee95e67278"
}
},
"weights_updated_during_run": false
}
@@ -0,0 +1,45 @@
{
"ok": true,
"protocol": "phase4ag-apl-v1",
"n_neurons": 166700,
"n_apl": 2,
"n_kc": 4064,
"dt_ms": 0.1,
"files_sha256": {
"input_matrix.npy": "c4d3df703ea5f1d7402b8255cfa19d9744139ad1048827c23b151d8ba766fec6",
"output_matrix.npy": "e2d0a1ccd740e6777245ebf2efcd88bf5e1da9e47308c63ec8e83d451e134a73",
"kc_globals.npy": "97a570aafa089f93e642b2bb07e3a3322dabb14c3c7dd431f0c8d2b3b7951fdd",
"apl_globals.npy": "8388c8795d49cfe5b14fda54f76ef3a35030c62ba87bd8ca6334a2dcdf186f19"
},
"array_sha256": {
"input_matrix.npy": "528a5f6f5ffe424f323c5a44695db4a7cf32570709832eff2f37f49e85c92c3e",
"output_matrix.npy": "0dcf02cdb7836ab72da32ac47f5682ca33e25f63a8a662a8452d4ea9d46babb9",
"kc_globals.npy": "9e990d10a63b0f74cd7bbbdc5369082f24d5246487af944ba289bc6bf48d4b75",
"apl_globals.npy": "979ef88dff30d41168ce9b377a006ccb3cd034b2dce86d54923ca0f4b87cb6a6"
},
"decay_f32_bits": "3f7eb923",
"gain_f32_bits": "3c23d70a",
"environment": {
"torch": "2.14.0+cu130",
"numpy": "2.2.6",
"cuda": "13.0",
"cudnn": 92400,
"device_name": "NVIDIA GeForce RTX 4090",
"device_index": 0,
"device_capability": [
8,
9
],
"deterministic_algorithms": false,
"cudnn_deterministic": false,
"cudnn_benchmark": false,
"cuda_matmul_allow_tf32": false,
"cudnn_allow_tf32": true,
"float32_matmul_precision": "highest",
"CUBLAS_WORKSPACE_CONFIG": null,
"precision_configuration_changed_by_component": false
},
"operator_sequence": "state.mul_(decay32); drive=mv(I32,spikes32); state.add_(drive); h=matmul(state,O32)*gain32",
"h_units": "legacy mV",
"initial_state": "float32 zeros"
}
@@ -0,0 +1,38 @@
{
"pass_all": true,
"apl_delay_steps": 18,
"steps": 1000,
"pending_generated_count": 18,
"pending_initial_zero_prefix": 0,
"initial_padding_positive_zero": true,
"sample_bits_preserved": true,
"brain_tail_advanced": false,
"generated_rows": 1000,
"applied_generated_rows": 982,
"pending_shape": [
18,
4064
],
"pending_application_tick_start": 1000,
"pending_application_tick_stop_exclusive": 1018,
"pending_generated_tick_start": 982,
"pending_generated_tick_stop_exclusive": 1000,
"generated_trace": "apl-inhibition.float32.npy",
"applied_trace": "apl-applied.float32.npy",
"pending_trace": "apl-pending-tail.float32.npy",
"pending_raw_sha256": "4162486c61f9f1c20dbf230c4b88fa3c02f36eff7f2f8843586ac269fee77e47",
"final_apl_state_float32": [
152.2058563232422,
171.3150634765625
],
"final_apl_state_u32_bits": [
1125659827,
1126912168
],
"final_apl_state_nonzero": true,
"pending_queue_drained": false,
"finite_generated_sequence_only": true,
"future_apl_decay_or_feedback_generated": false,
"closed_loop_branch_integrals_claimed_equal": false,
"biological_delay_measurement_claimed": false
}
@@ -0,0 +1,312 @@
{
"schema": "phase4am-comparison-v1",
"mode": "self",
"case_dir": "/data/digital-drosophila/experiments/phase4ak-apl-timing-validation/cases/novel_to_aj/novel_to_aj-matched_energy-00-s1073741827",
"left": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-00-s1073741827-r0",
"right": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-00-s1073741827-r0",
"pass_all": true,
"learning_achieved": false,
"candidate_generated": false,
"tolerance": null,
"scope": "Single-run event/queue/input/static-overlay self-consistency; no repeat, equivalence, physiology or learning PASS",
"explicit_exclusions": [
"build_or_cache_seconds",
"diagnostic_simulation_seconds",
"peak_allocated_vram_bytes",
"peak_reserved_vram_bytes",
"wall_seconds"
],
"independent_cpu_wholebrain_oracle_claim": false,
"overlay_name": "static25",
"nodes": 166700,
"edges": 25582938,
"steps": 1000,
"apl_delay_steps": 18,
"full_queue_reconstructed": true,
"total_spikes": 29910,
"checks": {
"left_gpu.summary_complete": true,
"left_gpu.case_name": true,
"left_gpu.history_mode": true,
"left_gpu.apl_precision": true,
"left_gpu.no_error_marker": true,
"left_gpu.events_sorted_unique": true,
"left_gpu.count_nonnegative_total": true,
"left_gpu.ref_range": true,
"left_gpu.reported_events": true,
"left_gpu.last_hash_v": true,
"left_gpu.last_hash_g": true,
"left_gpu.last_hash_ref": true,
"left_gpu.request_summary": true,
"left_gpu.apl_positive_drive": true,
"left_gpu.apl_positive_state": true,
"left_gpu.apl_positive_inhibition": true,
"left_gpu.apl_positive_applied": true,
"left_gpu.delay_summary": true,
"left_gpu.no_dense_v": true,
"left_gpu.no_dense_g": true,
"left_gpu.no_dense_ref": true,
"left_gpu.component_summary_consistent": true,
"left_gpu.full_event_queue_request_accounting": true,
"left_gpu.timing_finite_nonnegative": true,
"left_gpu.fixed_delay_applied.schema": true,
"left_gpu.fixed_delay_applied.finite": true,
"left_gpu.fixed_delay_applied.bitwise_exact": true,
"left_gpu.fixed_delay_pending.schema": true,
"left_gpu.fixed_delay_pending.finite": true,
"left_gpu.fixed_delay_pending.bitwise_exact": true,
"left_gpu.finite_sequence_row_conservation": true,
"left_gpu.timing_integer_metadata": true,
"left_gpu.pending_hash_metadata": true,
"left_gpu.pending_shape_metadata": true,
"left_gpu.pending_summary_counts": true,
"left_gpu.final_apl_state_metadata": true,
"left_gpu.no_extra_brain_or_apl_ticks": true,
"left_gpu.timing_summary_metadata": true,
"input_overlay_and_source_provenance": true
},
"differences": {},
"read_manifest": [
{
"path": "/data/digital-drosophila/experiments/phase4af-author-fullgraph/oracle/no_input/coefficients.json",
"bytes": 2329,
"sha256": "bde79d95ef0097b827d5faf4d5658eafc009d8e9fcef1fddd645c953823e3f64"
},
{
"path": "/data/digital-drosophila/experiments/phase4ag-author-apl-r2/apl-bundle/apl_globals.npy",
"bytes": 136,
"sha256": "8388c8795d49cfe5b14fda54f76ef3a35030c62ba87bd8ca6334a2dcdf186f19"
},
{
"path": "/data/digital-drosophila/experiments/phase4ag-author-apl-r2/apl-bundle/input_matrix.npy",
"bytes": 1333728,
"sha256": "c4d3df703ea5f1d7402b8255cfa19d9744139ad1048827c23b151d8ba766fec6"
},
{
"path": "/data/digital-drosophila/experiments/phase4ag-author-apl-r2/apl-bundle/kc_globals.npy",
"bytes": 16384,
"sha256": "97a570aafa089f93e642b2bb07e3a3322dabb14c3c7dd431f0c8d2b3b7951fdd"
},
{
"path": "/data/digital-drosophila/experiments/phase4ag-author-apl-r2/apl-bundle/output_matrix.npy",
"bytes": 32640,
"sha256": "e2d0a1ccd740e6777245ebf2efcd88bf5e1da9e47308c63ec8e83d451e134a73"
},
{
"path": "/data/digital-drosophila/experiments/phase4ag-author-apl-r2/graphs/full/dst.npy",
"bytes": 102331880,
"sha256": "ce20f7433f78442c717ad2a7b5394cf4a3b109d990b4be0788040b7b0f4ed150"
},
{
"path": "/data/digital-drosophila/experiments/phase4ag-author-apl-r2/graphs/full/edge_id.npy",
"bytes": 204663632,
"sha256": "49260615ff2b6432ce3dea9ce2c7ab8f83d06c2fb7491e58e08355fcedf86a30"
},
{
"path": "/data/digital-drosophila/experiments/phase4ag-author-apl-r2/graphs/full/nodes.npy",
"bytes": 666928,
"sha256": "5b511a98e8fbf8d65bbc70b93e75ecae19366f650b7842a45611bfad62ed83dc"
},
{
"path": "/data/digital-drosophila/experiments/phase4ag-author-apl-r2/graphs/full/ptr.npy",
"bytes": 1333736,
"sha256": "fe43420f11e6242a11f8199ae7f097cab4b8a6db181d36f2a46b9e46670acbb4"
},
{
"path": "/data/digital-drosophila/experiments/phase4ag-author-apl-r2/graphs/full/signed_raw.npy",
"bytes": 204663632,
"sha256": "f9884ccb8930b32420b27c69271df78034a8350fe5a5c9b76a63c259268efc09"
},
{
"path": "/data/digital-drosophila/experiments/phase4ag-author-apl-r2/graphs/full/src.npy",
"bytes": 102331880,
"sha256": "bfd625ce690fc21eb0a8b9dede831688ab73b789045ba83ddf4baeefeddf1fc3"
},
{
"path": "/data/digital-drosophila/experiments/phase4ag-author-apl-r2/graphs/full/weights.npy",
"bytes": 204663632,
"sha256": "462839ffc3feb8f6c278044488082b1c8e410e7f23229d6b5e29d1b7042416a1"
},
{
"path": "/data/digital-drosophila/experiments/phase4ak-apl-timing-validation/cases/novel_to_aj/novel_to_aj-matched_energy-00-s1073741827/requests.npz",
"bytes": 858,
"sha256": "2e551b842adc13a505d7703cacb7329df45752e5705bd0b912dcd73ac6d481d8"
},
{
"path": "/data/digital-drosophila/experiments/phase4ak-apl-timing-validation/cases/novel_to_aj/novel_to_aj-matched_energy-00-s1073741827/spec.json",
"bytes": 1632,
"sha256": "e8e2d1b7fe4abbd70b4a03316955a33277475cffa9395f102500321d47e971c1"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-00-s1073741827-r0/adapter-provenance.json",
"bytes": 3871,
"sha256": "5a181941b67b4a28e6df9ca2a8498aeed233d72f16a1223f0eb311dfb493762d"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-00-s1073741827-r0/apl-applied.float32.npy",
"bytes": 16256128,
"sha256": "d3daf3db4a4bbfd788625d6e4f4c091e0dc3a5d8502f7a8a256e5bd170d37ac9"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-00-s1073741827-r0/apl-component.json",
"bytes": 1684,
"sha256": "f94b360033b4cb643c9774e7fa31c95a65c5571ca62b73072ee29b3af80121f9"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-00-s1073741827-r0/apl-drive.float32.npy",
"bytes": 8128,
"sha256": "aa24122ed9527ebf2c9c405abd9588408ae83bd9692594e5a8ee43e1539f4392"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-00-s1073741827-r0/apl-inhibition.float32.npy",
"bytes": 16256128,
"sha256": "a27f44322402b3bca538baf2497b15261d4c9975af1b9b453df0b8c5e373b025"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-00-s1073741827-r0/apl-pending-tail.float32.npy",
"bytes": 292736,
"sha256": "11c4308abebae48431222499f2be3531d240dc642252ad3ea52fce79912cffd8"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-00-s1073741827-r0/apl-state.float32.npy",
"bytes": 8128,
"sha256": "c3a3f3f4f55640fb6796f512bc8949ac68e4c64a695d4b1429c6a442ca0f76e6"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-00-s1073741827-r0/apl-timing-audit.json",
"bytes": 1178,
"sha256": "09e81fcee6469a29f159e36f324c4fc653be93ac979d8ee6cc5178bc53d4a95c"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-00-s1073741827-r0/overlay-audit.json",
"bytes": 3921,
"sha256": "949d7f986ae2212d44777bd351b88e54c38db857fc062d4d232c2670d31e3085"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-00-s1073741827-r0/overlay-input.npz",
"bytes": 44476,
"sha256": "7805bd2f86de91777bca86c52870607a2e091ed74b901319b896055ad3463f6d"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-00-s1073741827-r0/overlay-manifest.json",
"bytes": 938,
"sha256": "96d8406b69e98ba9829a52788c6c96888493e8bf34581d6d653226b1eb2e494b"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-00-s1073741827-r0/queue.jsonl",
"bytes": 320760,
"sha256": "6f897a2c1abc5da838ec838d7fd3227d64c2542c10f46f988bd1e68e47bbf091"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-00-s1073741827-r0/requests.csv",
"bytes": 1954,
"sha256": "50e38f3b8f8e877b78b7e7766b273d7d31bedd247a853c0d5cafe71bc599d0d6"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-00-s1073741827-r0/sealed-gpu-source.diff",
"bytes": 12917,
"sha256": "0584f865885b18e6a36870a7ecfbbc98d7a94274fa5e9e073e7cf97597d78a03"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-00-s1073741827-r0/source-audit.json",
"bytes": 859,
"sha256": "d644f0265632f117bba0e045d26fb266765b1d005a89426b6242f3de034be935"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-00-s1073741827-r0/state.npz",
"bytes": 2064365,
"sha256": "9b02804de646d42edffb4d839455417c38c25774b5195ce97733ed80cd726529"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-00-s1073741827-r0/summary.json",
"bytes": 6480,
"sha256": "0041ac2e5b6473196d943dde6c2891c75695bce5d73ee8e1a01b44b6bfc618ff"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-00-s1073741827-r0/tick-state-hashes.jsonl",
"bytes": 255890,
"sha256": "1571cf88d1ab3577a2f302b43e21863be887a9636048af82aa86b6ba5b9e2026"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/overlays/static25.json",
"bytes": 938,
"sha256": "96d8406b69e98ba9829a52788c6c96888493e8bf34581d6d653226b1eb2e494b"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/overlays/static25.npz",
"bytes": 44476,
"sha256": "7805bd2f86de91777bca86c52870607a2e091ed74b901319b896055ad3463f6d"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/protocol/base-candidate.float32-mV.npy",
"bytes": 57056,
"sha256": "1218d1b328f29a7afefb0ca0b7b6421247f14ad598aa1957a6a7aacbc8cebcae"
},
{
"path": "/data/digital-drosophila/experiments/phase4h-dopamine-plasticity/plastic-mask/plastic-edge-ids.int64.npy",
"bytes": 113984,
"sha256": "8b0fb6eb2e6c31da4d17dc20d890aa3f367e514f05642de5bad6b42a1611c05b"
},
{
"path": "/data/digital-drosophila/models/male-cns-lif/apl-timing-lab-v1/compare_timing.py",
"bytes": 41221,
"sha256": "9010f070fba9b7c9cf2d86187ee2abc57f3ac606ebc08a42baad4f3922b51734"
},
{
"path": "/data/digital-drosophila/models/male-cns-lif/apl-timing-lab-v1/gpu_timing.py",
"bytes": 27083,
"sha256": "af1975ba5e5e700208c0a598d3cbe648a3cf10885c6231239b6e4b28f76d173b"
},
{
"path": "/data/digital-drosophila/models/male-cns-lif/apl-timing-lab-v1/timing_queue.py",
"bytes": 4443,
"sha256": "54df6d4818e2a0c26e96fb0aaf5d9b71cd964981706da937562d48af79aca14e"
},
{
"path": "/data/digital-drosophila/models/male-cns-lif/author-apl-lab-v2/gpu_apl.py",
"bytes": 21206,
"sha256": "69f5d893f47dafff4ef7c3186c3df0b9014666b32c8f4e943b57016bec92b18a"
},
{
"path": "/data/digital-drosophila/models/male-cns-lif/author-apl-lab-v2/legacy_apl_worker.py",
"bytes": 8158,
"sha256": "21ceec65fe42581dc55872010e0025d660e80358905f1cf4df1dadf341a3b291"
},
{
"path": "/data/digital-drosophila/models/male-cns-lif/author-fullgraph-lab-v1/oracle_full.py",
"bytes": 32146,
"sha256": "d72003d98f0f1624b12126eff50bd361c43d888f4a64d90ba9247a58976f1961"
},
{
"path": "/data/digital-drosophila/models/male-cns-lif/author-runtime-lab-v1/author_ext.cpp",
"bytes": 1203,
"sha256": "208a937d17bbb041b9bf6b25b89264ee566830b60609e58491b44583d8541f15"
},
{
"path": "/data/digital-drosophila/models/male-cns-lif/author-runtime-lab-v1/author_ext.cu",
"bytes": 10422,
"sha256": "669f166e18ce9a3f63fc723db8b0a8b74f7fa4757194b1bd65b4cf6008a7787e"
},
{
"path": "/data/digital-drosophila/models/male-cns-lif/author-runtime-lab-v1/gpu_backend.py",
"bytes": 16277,
"sha256": "03758d07572f4b44d272059d9308fac534268ad201b57bdd77d69fee95e67278"
},
{
"path": "/data/digital-drosophila/models/male-cns-lif/wholebrain-plastic-interface-v1/adapter.py",
"bytes": 15690,
"sha256": "3daabe771d3eef6c6189827c0ee5159b266c3a058e07da5781bb863be428aef9"
},
{
"path": "/data/digital-drosophila/models/male-cns-lif/wholebrain-plastic-interface-v1/comparison.py",
"bytes": 37000,
"sha256": "4d64020af05e7fc9e535ac8532dd0e7b614b200f695ed8c6d486c6151de57175"
},
{
"path": "/data/digital-drosophila/models/male-cns-lif/wholebrain-plastic-interface-v1/overlay.py",
"bytes": 11355,
"sha256": "7f891d0ba79b393c96e75fd2dee2eddc51e57d8213eaac2779703bc2c18712b4"
}
],
"failed_checks": []
}
@@ -0,0 +1,97 @@
[
{
"path": "adapter-provenance.json",
"bytes": 3871,
"sha256": "5a181941b67b4a28e6df9ca2a8498aeed233d72f16a1223f0eb311dfb493762d"
},
{
"path": "apl-applied.float32.npy",
"bytes": 16256128,
"sha256": "d3daf3db4a4bbfd788625d6e4f4c091e0dc3a5d8502f7a8a256e5bd170d37ac9"
},
{
"path": "apl-component.json",
"bytes": 1684,
"sha256": "f94b360033b4cb643c9774e7fa31c95a65c5571ca62b73072ee29b3af80121f9"
},
{
"path": "apl-drive.float32.npy",
"bytes": 8128,
"sha256": "aa24122ed9527ebf2c9c405abd9588408ae83bd9692594e5a8ee43e1539f4392"
},
{
"path": "apl-inhibition.float32.npy",
"bytes": 16256128,
"sha256": "a27f44322402b3bca538baf2497b15261d4c9975af1b9b453df0b8c5e373b025"
},
{
"path": "apl-pending-tail.float32.npy",
"bytes": 292736,
"sha256": "11c4308abebae48431222499f2be3531d240dc642252ad3ea52fce79912cffd8"
},
{
"path": "apl-state.float32.npy",
"bytes": 8128,
"sha256": "c3a3f3f4f55640fb6796f512bc8949ac68e4c64a695d4b1429c6a442ca0f76e6"
},
{
"path": "apl-timing-audit.json",
"bytes": 1178,
"sha256": "09e81fcee6469a29f159e36f324c4fc653be93ac979d8ee6cc5178bc53d4a95c"
},
{
"path": "comparison.json",
"bytes": 14861,
"sha256": "300febee83d763a5be718ecf1534287088dc2812c152011ec252969f43c1428a"
},
{
"path": "overlay-audit.json",
"bytes": 3921,
"sha256": "949d7f986ae2212d44777bd351b88e54c38db857fc062d4d232c2670d31e3085"
},
{
"path": "overlay-input.npz",
"bytes": 44476,
"sha256": "7805bd2f86de91777bca86c52870607a2e091ed74b901319b896055ad3463f6d"
},
{
"path": "overlay-manifest.json",
"bytes": 938,
"sha256": "96d8406b69e98ba9829a52788c6c96888493e8bf34581d6d653226b1eb2e494b"
},
{
"path": "queue.jsonl",
"bytes": 320760,
"sha256": "6f897a2c1abc5da838ec838d7fd3227d64c2542c10f46f988bd1e68e47bbf091"
},
{
"path": "requests.csv",
"bytes": 1954,
"sha256": "50e38f3b8f8e877b78b7e7766b273d7d31bedd247a853c0d5cafe71bc599d0d6"
},
{
"path": "sealed-gpu-source.diff",
"bytes": 12917,
"sha256": "0584f865885b18e6a36870a7ecfbbc98d7a94274fa5e9e073e7cf97597d78a03"
},
{
"path": "source-audit.json",
"bytes": 859,
"sha256": "d644f0265632f117bba0e045d26fb266765b1d005a89426b6242f3de034be935"
},
{
"path": "state.npz",
"bytes": 2064365,
"sha256": "9b02804de646d42edffb4d839455417c38c25774b5195ce97733ed80cd726529"
},
{
"path": "summary.json",
"bytes": 6480,
"sha256": "0041ac2e5b6473196d943dde6c2891c75695bce5d73ee8e1a01b44b6bfc618ff"
},
{
"path": "tick-state-hashes.jsonl",
"bytes": 255890,
"sha256": "1571cf88d1ab3577a2f302b43e21863be887a9636048af82aa86b6ba5b9e2026"
}
]
@@ -0,0 +1,83 @@
{
"apl_fast_edges_zeroed": 5845,
"apl_overlap_count": 0,
"arrays": {
"base_candidate_mv": {
"dtype": "float32",
"raw_sha256": "380a4e9f5e5431baa8f74ecabf791febdc328e5e054fb222dc505df64a3fd501",
"shape": [
14232
]
},
"edge_id": {
"dtype": "int64",
"raw_sha256": "7c2facacbf1b3ec2fc8f265596d85988b6db6d20daab86922e194d66964367f0",
"shape": [
14232
]
},
"plastic_delta_mv": {
"dtype": "float32",
"raw_sha256": "ea03a0ab6b537ea6bcac86191dc79f4eed997ef890885cb695440a0cfc224a67",
"shape": [
14232
]
}
},
"arrival_weight_sampling": "arrival time; delta fixed for entire trial",
"base_graph_files_modified": false,
"base_weights_file_sha256": "462839ffc3feb8f6c278044488082b1c8e410e7f23229d6b5e29d1b7042416a1",
"base_weights_raw_sha256": "a8c19cde743bd456bcb2e988d504f805b6943d6ceb97cd241d6e1e472ab5a591",
"bounds_pass": true,
"bridge": "baseSI64 + (delta32 widened to float64) * float64(0.001); nonzero rows only",
"candidate_count": 14232,
"complete": true,
"copied_manifest_file": "overlay-manifest.json",
"copied_overlay_file": "overlay-input.npz",
"delta_dtype": "float32",
"delta_units": "mV",
"effective_weights_raw_sha256": "a60a2846dd952916097cecd1d3daf74cf5e785818749e0ffd818b3ced1c58fd2",
"expected_effective_weights_raw_sha256": "a60a2846dd952916097cecd1d3daf74cf5e785818749e0ffd818b3ced1c58fd2",
"frozen_mask_exact": true,
"inherited_aj_source_provenance": {
"candidate_sha256": "af1975ba5e5e700208c0a598d3cbe648a3cf10885c6231239b6e4b28f76d173b",
"diagnostic_additions": [
"generated/applied/pending trace split",
"fixed-sequence bitwise audit",
"source provenance and final APL state disclosure"
],
"module_globals_patched": false,
"only_dynamics_change": "fixed zero-initialized 0/18-step h32 delay before unchanged end g write",
"sealed_source_sha256": {
"ae_backend": "03758d07572f4b44d272059d9308fac534268ad201b57bdd77d69fee95e67278",
"af_queue": "d72003d98f0f1624b12126eff50bd361c43d888f4a64d90ba9247a58976f1961",
"ag_gpu": "69f5d893f47dafff4ef7c3186c3df0b9014666b32c8f4e943b57016bec92b18a",
"ag_worker": "21ceec65fe42581dc55872010e0025d660e80358905f1cf4df1dadf341a3b291"
},
"source_diff_sha256": "0584f865885b18e6a36870a7ecfbbc98d7a94274fa5e9e073e7cf97597d78a03"
},
"inherited_source_audit_scope": "AJ source provenance only; AM overlay semantics are recorded separately",
"input": {
"base_candidate_file": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/protocol/base-candidate.float32-mV.npy",
"base_candidate_sha256": "1218d1b328f29a7afefb0ca0b7b6421247f14ad598aa1957a6a7aacbc8cebcae",
"manifest_file": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/overlays/static25.json",
"manifest_sha256": "96d8406b69e98ba9829a52788c6c96888493e8bf34581d6d653226b1eb2e494b",
"mask_file": "/data/digital-drosophila/experiments/phase4h-dopamine-plasticity/plastic-mask/plastic-edge-ids.int64.npy",
"mask_sha256": "8b0fb6eb2e6c31da4d17dc20d890aa3f367e514f05642de5bad6b42a1611c05b",
"overlay_file": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/overlays/static25.npz",
"overlay_sha256": "7805bd2f86de91777bca86c52870607a2e091ed74b901319b896055ad3463f6d"
},
"installation_schedule": "before tick 0; after fast APL zeroing",
"installed_nonzero_count": 14232,
"learning": false,
"mapped_candidate_count": 14232,
"missing_candidate_count": 0,
"nonzero_delta_count": 14232,
"overlay_name": "static25",
"schema": "phase4am-overlay-audit-v1",
"state_dtype": "float64",
"static25_is_exact_fraction_of_float64_base_claimed": false,
"untouched_weights_bitwise_preserved": true,
"weights_updated_during_run": false,
"zero_delta_no_write": true
}
@@ -0,0 +1,14 @@
{
"schema": "phase4am-overlay-v1",
"overlay_name": "static25",
"overlay_sha256": "7805bd2f86de91777bca86c52870607a2e091ed74b901319b896055ad3463f6d",
"mask_path": "/data/digital-drosophila/experiments/phase4h-dopamine-plasticity/plastic-mask/plastic-edge-ids.int64.npy",
"mask_sha256": "8b0fb6eb2e6c31da4d17dc20d890aa3f367e514f05642de5bad6b42a1611c05b",
"base_candidate_path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/protocol/base-candidate.float32-mV.npy",
"base_candidate_sha256": "1218d1b328f29a7afefb0ca0b7b6421247f14ad598aa1957a6a7aacbc8cebcae",
"aj_model_dir": "/data/digital-drosophila/models/male-cns-lif/apl-timing-lab-v1",
"base_rhs_ast_sha256": "e89afc5c18e34631489aa479d9c8ba9d1fa40a8b0f721105405b9a6ef636959d",
"old_f32_expression_source_sha256": "5ec83a132deb8ba20e62dab485537c2414016fe2fece546198d61c0668d75b6b",
"training": false,
"fixed_for_whole_trial": true
}
@@ -0,0 +1,122 @@
tick,neuron_idx,attempted,accepted,rejected
9,999,1,1,0
10,54264,1,1,0
20,813,1,1,0
47,189,1,1,0
59,1372,1,1,0
78,522,1,1,0
80,1372,1,0,1
88,159,1,1,0
105,6721,1,1,0
108,2029,1,1,0
112,2029,1,0,1
117,54264,1,1,0
121,434,1,0,1
121,1372,1,1,0
126,79514,1,1,0
130,130257,1,1,0
133,2029,1,1,0
134,53508,1,1,0
145,130753,1,1,0
160,700,1,1,0
190,434,1,0,1
191,159,1,0,1
197,522,1,1,0
207,2029,1,1,0
210,2029,1,0,1
212,7680,1,1,0
226,434,1,0,1
249,434,1,1,0
260,6721,1,1,0
261,434,1,0,1
271,1022,1,0,1
273,522,1,1,0
294,97,1,1,0
295,1372,1,1,0
306,360,1,1,0
316,54264,1,1,0
319,530,1,0,1
320,159,1,0,1
321,360,1,0,1
334,54264,1,0,1
349,1011,1,0,1
352,1372,1,1,0
353,999,1,0,1
354,79514,1,1,0
355,189,1,0,1
355,55121,1,1,0
359,7322,1,1,0
365,999,1,0,1
366,622,1,1,0
369,6721,1,1,0
380,53508,1,1,0
393,189,1,0,1
415,434,1,0,1
421,4624,1,1,0
422,97,1,1,0
432,710,1,1,0
433,97,1,0,1
445,130753,1,1,0
460,4624,1,1,0
477,7322,1,1,0
482,7322,1,0,1
517,1372,1,1,0
525,530,1,1,0
525,710,1,1,0
548,1022,1,0,1
552,999,1,0,1
561,130753,1,1,0
571,4786,1,1,0
573,622,1,1,0
594,4786,1,1,0
594,130753,1,1,0
605,2029,1,1,0
623,434,1,0,1
628,2029,1,1,0
634,1022,1,1,0
643,54264,1,1,0
651,55121,1,1,0
660,530,1,1,0
661,79514,1,1,0
692,159,1,1,0
703,434,1,0,1
709,710,1,1,0
709,54264,1,1,0
713,97,1,0,1
732,79514,1,1,0
733,189,1,1,0
735,700,1,0,1
738,2029,1,1,0
763,530,1,1,0
768,132659,1,1,0
773,1372,1,1,0
774,9052,1,1,0
791,1011,1,1,0
800,1011,1,0,1
811,54264,1,1,0
813,130753,1,1,0
817,130257,1,0,1
838,530,1,1,0
840,1011,1,1,0
848,4624,1,0,1
854,530,1,0,1
855,4786,1,1,0
861,53508,1,1,0
867,622,1,1,0
871,7680,1,1,0
885,159,1,0,1
891,9052,1,1,0
894,130753,1,0,1
898,159,1,0,1
903,1372,1,1,0
918,132659,1,0,1
920,4786,1,1,0
921,79514,1,1,0
947,97,1,0,1
947,1372,1,1,0
949,571,1,1,0
949,9052,1,1,0
951,159,1,0,1
975,132659,1,1,0
976,97,1,1,0
983,700,1,1,0
1 tick neuron_idx attempted accepted rejected
2 9 999 1 1 0
3 10 54264 1 1 0
4 20 813 1 1 0
5 47 189 1 1 0
6 59 1372 1 1 0
7 78 522 1 1 0
8 80 1372 1 0 1
9 88 159 1 1 0
10 105 6721 1 1 0
11 108 2029 1 1 0
12 112 2029 1 0 1
13 117 54264 1 1 0
14 121 434 1 0 1
15 121 1372 1 1 0
16 126 79514 1 1 0
17 130 130257 1 1 0
18 133 2029 1 1 0
19 134 53508 1 1 0
20 145 130753 1 1 0
21 160 700 1 1 0
22 190 434 1 0 1
23 191 159 1 0 1
24 197 522 1 1 0
25 207 2029 1 1 0
26 210 2029 1 0 1
27 212 7680 1 1 0
28 226 434 1 0 1
29 249 434 1 1 0
30 260 6721 1 1 0
31 261 434 1 0 1
32 271 1022 1 0 1
33 273 522 1 1 0
34 294 97 1 1 0
35 295 1372 1 1 0
36 306 360 1 1 0
37 316 54264 1 1 0
38 319 530 1 0 1
39 320 159 1 0 1
40 321 360 1 0 1
41 334 54264 1 0 1
42 349 1011 1 0 1
43 352 1372 1 1 0
44 353 999 1 0 1
45 354 79514 1 1 0
46 355 189 1 0 1
47 355 55121 1 1 0
48 359 7322 1 1 0
49 365 999 1 0 1
50 366 622 1 1 0
51 369 6721 1 1 0
52 380 53508 1 1 0
53 393 189 1 0 1
54 415 434 1 0 1
55 421 4624 1 1 0
56 422 97 1 1 0
57 432 710 1 1 0
58 433 97 1 0 1
59 445 130753 1 1 0
60 460 4624 1 1 0
61 477 7322 1 1 0
62 482 7322 1 0 1
63 517 1372 1 1 0
64 525 530 1 1 0
65 525 710 1 1 0
66 548 1022 1 0 1
67 552 999 1 0 1
68 561 130753 1 1 0
69 571 4786 1 1 0
70 573 622 1 1 0
71 594 4786 1 1 0
72 594 130753 1 1 0
73 605 2029 1 1 0
74 623 434 1 0 1
75 628 2029 1 1 0
76 634 1022 1 1 0
77 643 54264 1 1 0
78 651 55121 1 1 0
79 660 530 1 1 0
80 661 79514 1 1 0
81 692 159 1 1 0
82 703 434 1 0 1
83 709 710 1 1 0
84 709 54264 1 1 0
85 713 97 1 0 1
86 732 79514 1 1 0
87 733 189 1 1 0
88 735 700 1 0 1
89 738 2029 1 1 0
90 763 530 1 1 0
91 768 132659 1 1 0
92 773 1372 1 1 0
93 774 9052 1 1 0
94 791 1011 1 1 0
95 800 1011 1 0 1
96 811 54264 1 1 0
97 813 130753 1 1 0
98 817 130257 1 0 1
99 838 530 1 1 0
100 840 1011 1 1 0
101 848 4624 1 0 1
102 854 530 1 0 1
103 855 4786 1 1 0
104 861 53508 1 1 0
105 867 622 1 1 0
106 871 7680 1 1 0
107 885 159 1 0 1
108 891 9052 1 1 0
109 894 130753 1 0 1
110 898 159 1 0 1
111 903 1372 1 1 0
112 918 132659 1 0 1
113 920 4786 1 1 0
114 921 79514 1 1 0
115 947 97 1 0 1
116 947 1372 1 1 0
117 949 571 1 1 0
118 949 9052 1 1 0
119 951 159 1 0 1
120 975 132659 1 1 0
121 976 97 1 1 0
122 983 700 1 1 0
@@ -0,0 +1,17 @@
{
"sealed_source_sha256": {
"ag_gpu": "69f5d893f47dafff4ef7c3186c3df0b9014666b32c8f4e943b57016bec92b18a",
"ag_worker": "21ceec65fe42581dc55872010e0025d660e80358905f1cf4df1dadf341a3b291",
"ae_backend": "03758d07572f4b44d272059d9308fac534268ad201b57bdd77d69fee95e67278",
"af_queue": "d72003d98f0f1624b12126eff50bd361c43d888f4a64d90ba9247a58976f1961"
},
"candidate_sha256": "af1975ba5e5e700208c0a598d3cbe648a3cf10885c6231239b6e4b28f76d173b",
"source_diff_sha256": "0584f865885b18e6a36870a7ecfbbc98d7a94274fa5e9e073e7cf97597d78a03",
"module_globals_patched": false,
"only_dynamics_change": "fixed zero-initialized 0/18-step h32 delay before unchanged end g write",
"diagnostic_additions": [
"generated/applied/pending trace split",
"fixed-sequence bitwise audit",
"source provenance and final APL state disclosure"
]
}
@@ -0,0 +1,168 @@
{
"case": "novel_to_aj-matched_energy-00-s1073741827",
"complete": true,
"pass_all": true,
"pass_all_scope": "internal finite/recording/event-count integrity only; independent equivalence not claimed",
"steps": 1000,
"completed_ticks": 1000,
"nodes": 166700,
"edges": 25582938,
"precision": "float64",
"apl_precision": "float32",
"state_units": "SI volts",
"total_spikes": 29910,
"requested": 121,
"accepted_requests": 84,
"rejected_requests": 37,
"arriving_edges": 14241795,
"accepted_arriving_edges": 13096300,
"counts_match_sparse_events": true,
"all_finite": true,
"record_history": false,
"apl_fast_edges_zeroed": 5845,
"kc_targets_present": 4064,
"effective_weights_raw_sha256": "a60a2846dd952916097cecd1d3daf74cf5e785818749e0ffd818b3ced1c58fd2",
"apl_component": {
"ok": true,
"protocol": "phase4ag-apl-v1",
"n_neurons": 166700,
"n_apl": 2,
"n_kc": 4064,
"dt_ms": 0.1,
"files_sha256": {
"input_matrix.npy": "c4d3df703ea5f1d7402b8255cfa19d9744139ad1048827c23b151d8ba766fec6",
"output_matrix.npy": "e2d0a1ccd740e6777245ebf2efcd88bf5e1da9e47308c63ec8e83d451e134a73",
"kc_globals.npy": "97a570aafa089f93e642b2bb07e3a3322dabb14c3c7dd431f0c8d2b3b7951fdd",
"apl_globals.npy": "8388c8795d49cfe5b14fda54f76ef3a35030c62ba87bd8ca6334a2dcdf186f19"
},
"array_sha256": {
"input_matrix.npy": "528a5f6f5ffe424f323c5a44695db4a7cf32570709832eff2f37f49e85c92c3e",
"output_matrix.npy": "0dcf02cdb7836ab72da32ac47f5682ca33e25f63a8a662a8452d4ea9d46babb9",
"kc_globals.npy": "9e990d10a63b0f74cd7bbbdc5369082f24d5246487af944ba289bc6bf48d4b75",
"apl_globals.npy": "979ef88dff30d41168ce9b377a006ccb3cd034b2dce86d54923ca0f4b87cb6a6"
},
"decay_f32_bits": "3f7eb923",
"gain_f32_bits": "3c23d70a",
"environment": {
"torch": "2.14.0+cu130",
"numpy": "2.2.6",
"cuda": "13.0",
"cudnn": 92400,
"device_name": "NVIDIA GeForce RTX 4090",
"device_index": 0,
"device_capability": [
8,
9
],
"deterministic_algorithms": false,
"cudnn_deterministic": false,
"cudnn_benchmark": false,
"cuda_matmul_allow_tf32": false,
"cudnn_allow_tf32": true,
"float32_matmul_precision": "highest",
"CUBLAS_WORKSPACE_CONFIG": null,
"precision_configuration_changed_by_component": false
},
"operator_sequence": "state.mul_(decay32); drive=mv(I32,spikes32); state.add_(drive); h=matmul(state,O32)*gain32",
"h_units": "legacy mV",
"initial_state": "float32 zeros"
},
"apl_schedule": "end, after threshold/reset and guarded arrivals, unconditional all KC",
"apl_si_conversion": "applied h32 -> float64 -> multiply float64 0.001 -> separate float64 subtraction",
"apl_delay_steps": 18,
"apl_timing": {
"pass_all": true,
"apl_delay_steps": 18,
"steps": 1000,
"pending_generated_count": 18,
"pending_initial_zero_prefix": 0,
"initial_padding_positive_zero": true,
"sample_bits_preserved": true,
"brain_tail_advanced": false,
"generated_rows": 1000,
"applied_generated_rows": 982,
"pending_shape": [
18,
4064
],
"pending_application_tick_start": 1000,
"pending_application_tick_stop_exclusive": 1018,
"pending_generated_tick_start": 982,
"pending_generated_tick_stop_exclusive": 1000,
"generated_trace": "apl-inhibition.float32.npy",
"applied_trace": "apl-applied.float32.npy",
"pending_trace": "apl-pending-tail.float32.npy",
"pending_raw_sha256": "4162486c61f9f1c20dbf230c4b88fa3c02f36eff7f2f8843586ac269fee77e47",
"final_apl_state_float32": [
152.2058563232422,
171.3150634765625
],
"final_apl_state_u32_bits": [
1125659827,
1126912168
],
"final_apl_state_nonzero": true,
"pending_queue_drained": false,
"finite_generated_sequence_only": true,
"future_apl_decay_or_feedback_generated": false,
"closed_loop_branch_integrals_claimed_equal": false,
"biological_delay_measurement_claimed": false
},
"source_provenance": {
"sealed_source_sha256": {
"ag_gpu": "69f5d893f47dafff4ef7c3186c3df0b9014666b32c8f4e943b57016bec92b18a",
"ag_worker": "21ceec65fe42581dc55872010e0025d660e80358905f1cf4df1dadf341a3b291",
"ae_backend": "03758d07572f4b44d272059d9308fac534268ad201b57bdd77d69fee95e67278",
"af_queue": "d72003d98f0f1624b12126eff50bd361c43d888f4a64d90ba9247a58976f1961"
},
"candidate_sha256": "af1975ba5e5e700208c0a598d3cbe648a3cf10885c6231239b6e4b28f76d173b",
"source_diff_sha256": "0584f865885b18e6a36870a7ecfbbc98d7a94274fa5e9e073e7cf97597d78a03",
"module_globals_patched": false,
"only_dynamics_change": "fixed zero-initialized 0/18-step h32 delay before unchanged end g write",
"diagnostic_additions": [
"generated/applied/pending trace split",
"fixed-sequence bitwise audit",
"source provenance and final APL state disclosure"
]
},
"pending_generated_count": 18,
"pending_initial_zero_prefix": 0,
"pending_tail_shape": [
18,
4064
],
"future_generated_decay_tail_included": false,
"build": {
"sources": {
"author_ext.cpp": "208a937d17bbb041b9bf6b25b89264ee566830b60609e58491b44583d8541f15",
"author_ext.cu": "669f166e18ce9a3f63fc723db8b0a8b74f7fa4757194b1bd65b4cf6008a7787e"
},
"torch": "2.14.0+cu130",
"torch_cuda": "13.0",
"arch_list": "8.9",
"cuda_flags": [
"-O2",
"--fmad=false",
"--ftz=false",
"--prec-div=true",
"--prec-sqrt=true"
]
},
"sealed_ae_backend_sha256": "03758d07572f4b44d272059d9308fac534268ad201b57bdd77d69fee95e67278",
"shared_apl_component_oracle_limitation": true,
"oracle_validation_claim": false,
"learning": false,
"performance_runtime_claim": false,
"cpu_sync_each_tick": true,
"build_or_cache_seconds": 0.0028094189983676188,
"diagnostic_simulation_seconds": 5.216078991001268,
"wall_seconds": 6.299051606998546,
"peak_allocated_vram_bytes": 526523392,
"peak_reserved_vram_bytes": 541065216,
"input_sha256": {
"spec.json": "e8e2d1b7fe4abbd70b4a03316955a33277475cffa9395f102500321d47e971c1",
"requests.npz": "2e551b842adc13a505d7703cacb7329df45752e5705bd0b912dcd73ac6d481d8",
"base_weights.npy": "462839ffc3feb8f6c278044488082b1c8e410e7f23229d6b5e29d1b7042416a1",
"coefficients.json": "bde79d95ef0097b827d5faf4d5658eafc009d8e9fcef1fddd645c953823e3f64"
}
}
@@ -0,0 +1,66 @@
{
"adapter_file": "/data/digital-drosophila/models/male-cns-lif/wholebrain-plastic-interface-v1/adapter.py",
"adapter_sha256": "3daabe771d3eef6c6189827c0ee5159b266c3a058e07da5781bb863be428aef9",
"apl_delay_steps": 18,
"ast": {
"adapted_run_ast_sha256": "b0401e196eb3a9f40873381ffa2d5a42bd9d2be854c386851c80fb0b0a386eb0",
"derived_namespace_file": "/data/digital-drosophila/models/male-cns-lif/wholebrain-plastic-interface-v1/adapter.py",
"entire_tick_loop_ast_identical": true,
"fake_original_file_used": false,
"hook_after_apl_zero_before_effective_hash": true,
"inserted_ast_statements": 1,
"loop_ast_sha256": "b50b21b7239f6b55b357e9f275786099c06e8e1ea924aeca07f13d3955d64151",
"only_ast_change": "_phase4am_install_overlay(weights, graph, apl_out_mask, upload, out_dir, source_provenance)",
"original_module_file": "/data/digital-drosophila/models/male-cns-lif/apl-timing-lab-v1/gpu_timing.py",
"original_module_globals_patched": false,
"original_run_ast_sha256": "6efd7d130a853ba9e99cc8672580ac91fcda9cf0883631efcd61c5e673756e1b"
},
"complete": true,
"delta_constant_for_entire_trial": true,
"effective_weights_raw_sha256": "a60a2846dd952916097cecd1d3daf74cf5e785818749e0ffd818b3ced1c58fd2",
"inherited_source_audit_describes_AM_semantics": false,
"inherited_summary_sha256": "07c91dc8e1d82bf96e120d228b68621d831922e4dfb1976355b9735582975b2d",
"installation_calls": 1,
"learning": false,
"original_module_globals_patched": false,
"overlay_audit_sha256": "949d7f986ae2212d44777bd351b88e54c38db857fc062d4d232c2670d31e3085",
"overlay_module_file": "/data/digital-drosophila/models/male-cns-lif/wholebrain-plastic-interface-v1/overlay.py",
"overlay_module_sha256": "7f891d0ba79b393c96e75fd2dee2eddc51e57d8213eaac2779703bc2c18712b4",
"schema": "phase4am-adapter-provenance-v1",
"scope": "constant sparse overlay installation only; no within-trial plasticity or learning",
"sealed_sources": {
"apl-timing-lab-v1/gpu_timing.py": {
"path": "/data/digital-drosophila/models/male-cns-lif/apl-timing-lab-v1/gpu_timing.py",
"sha256": "af1975ba5e5e700208c0a598d3cbe648a3cf10885c6231239b6e4b28f76d173b"
},
"apl-timing-lab-v1/timing_queue.py": {
"path": "/data/digital-drosophila/models/male-cns-lif/apl-timing-lab-v1/timing_queue.py",
"sha256": "54df6d4818e2a0c26e96fb0aaf5d9b71cd964981706da937562d48af79aca14e"
},
"author-apl-lab-v2/gpu_apl.py": {
"path": "/data/digital-drosophila/models/male-cns-lif/author-apl-lab-v2/gpu_apl.py",
"sha256": "69f5d893f47dafff4ef7c3186c3df0b9014666b32c8f4e943b57016bec92b18a"
},
"author-apl-lab-v2/legacy_apl_worker.py": {
"path": "/data/digital-drosophila/models/male-cns-lif/author-apl-lab-v2/legacy_apl_worker.py",
"sha256": "21ceec65fe42581dc55872010e0025d660e80358905f1cf4df1dadf341a3b291"
},
"author-fullgraph-lab-v1/oracle_full.py": {
"path": "/data/digital-drosophila/models/male-cns-lif/author-fullgraph-lab-v1/oracle_full.py",
"sha256": "d72003d98f0f1624b12126eff50bd361c43d888f4a64d90ba9247a58976f1961"
},
"author-runtime-lab-v1/author_ext.cpp": {
"path": "/data/digital-drosophila/models/male-cns-lif/author-runtime-lab-v1/author_ext.cpp",
"sha256": "208a937d17bbb041b9bf6b25b89264ee566830b60609e58491b44583d8541f15"
},
"author-runtime-lab-v1/author_ext.cu": {
"path": "/data/digital-drosophila/models/male-cns-lif/author-runtime-lab-v1/author_ext.cu",
"sha256": "669f166e18ce9a3f63fc723db8b0a8b74f7fa4757194b1bd65b4cf6008a7787e"
},
"author-runtime-lab-v1/gpu_backend.py": {
"path": "/data/digital-drosophila/models/male-cns-lif/author-runtime-lab-v1/gpu_backend.py",
"sha256": "03758d07572f4b44d272059d9308fac534268ad201b57bdd77d69fee95e67278"
}
},
"weights_updated_during_run": false
}
@@ -0,0 +1,45 @@
{
"ok": true,
"protocol": "phase4ag-apl-v1",
"n_neurons": 166700,
"n_apl": 2,
"n_kc": 4064,
"dt_ms": 0.1,
"files_sha256": {
"input_matrix.npy": "c4d3df703ea5f1d7402b8255cfa19d9744139ad1048827c23b151d8ba766fec6",
"output_matrix.npy": "e2d0a1ccd740e6777245ebf2efcd88bf5e1da9e47308c63ec8e83d451e134a73",
"kc_globals.npy": "97a570aafa089f93e642b2bb07e3a3322dabb14c3c7dd431f0c8d2b3b7951fdd",
"apl_globals.npy": "8388c8795d49cfe5b14fda54f76ef3a35030c62ba87bd8ca6334a2dcdf186f19"
},
"array_sha256": {
"input_matrix.npy": "528a5f6f5ffe424f323c5a44695db4a7cf32570709832eff2f37f49e85c92c3e",
"output_matrix.npy": "0dcf02cdb7836ab72da32ac47f5682ca33e25f63a8a662a8452d4ea9d46babb9",
"kc_globals.npy": "9e990d10a63b0f74cd7bbbdc5369082f24d5246487af944ba289bc6bf48d4b75",
"apl_globals.npy": "979ef88dff30d41168ce9b377a006ccb3cd034b2dce86d54923ca0f4b87cb6a6"
},
"decay_f32_bits": "3f7eb923",
"gain_f32_bits": "3c23d70a",
"environment": {
"torch": "2.14.0+cu130",
"numpy": "2.2.6",
"cuda": "13.0",
"cudnn": 92400,
"device_name": "NVIDIA GeForce RTX 4090",
"device_index": 0,
"device_capability": [
8,
9
],
"deterministic_algorithms": false,
"cudnn_deterministic": false,
"cudnn_benchmark": false,
"cuda_matmul_allow_tf32": false,
"cudnn_allow_tf32": true,
"float32_matmul_precision": "highest",
"CUBLAS_WORKSPACE_CONFIG": null,
"precision_configuration_changed_by_component": false
},
"operator_sequence": "state.mul_(decay32); drive=mv(I32,spikes32); state.add_(drive); h=matmul(state,O32)*gain32",
"h_units": "legacy mV",
"initial_state": "float32 zeros"
}
@@ -0,0 +1,38 @@
{
"pass_all": true,
"apl_delay_steps": 18,
"steps": 1000,
"pending_generated_count": 18,
"pending_initial_zero_prefix": 0,
"initial_padding_positive_zero": true,
"sample_bits_preserved": true,
"brain_tail_advanced": false,
"generated_rows": 1000,
"applied_generated_rows": 982,
"pending_shape": [
18,
4064
],
"pending_application_tick_start": 1000,
"pending_application_tick_stop_exclusive": 1018,
"pending_generated_tick_start": 982,
"pending_generated_tick_stop_exclusive": 1000,
"generated_trace": "apl-inhibition.float32.npy",
"applied_trace": "apl-applied.float32.npy",
"pending_trace": "apl-pending-tail.float32.npy",
"pending_raw_sha256": "d8835665596ef77b38b8338f04954c64f6d082b893c57b1b1ffb05392b2bfffc",
"final_apl_state_float32": [
154.08975219726562,
168.51675415039062
],
"final_apl_state_u32_bits": [
1125783290,
1126728778
],
"final_apl_state_nonzero": true,
"pending_queue_drained": false,
"finite_generated_sequence_only": true,
"future_apl_decay_or_feedback_generated": false,
"closed_loop_branch_integrals_claimed_equal": false,
"biological_delay_measurement_claimed": false
}
@@ -0,0 +1,312 @@
{
"schema": "phase4am-comparison-v1",
"mode": "self",
"case_dir": "/data/digital-drosophila/experiments/phase4ak-apl-timing-validation/cases/novel_to_aj/novel_to_aj-matched_energy-00-s1073741828",
"left": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-00-s1073741828-r0",
"right": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-00-s1073741828-r0",
"pass_all": true,
"learning_achieved": false,
"candidate_generated": false,
"tolerance": null,
"scope": "Single-run event/queue/input/static-overlay self-consistency; no repeat, equivalence, physiology or learning PASS",
"explicit_exclusions": [
"build_or_cache_seconds",
"diagnostic_simulation_seconds",
"peak_allocated_vram_bytes",
"peak_reserved_vram_bytes",
"wall_seconds"
],
"independent_cpu_wholebrain_oracle_claim": false,
"overlay_name": "static25",
"nodes": 166700,
"edges": 25582938,
"steps": 1000,
"apl_delay_steps": 18,
"full_queue_reconstructed": true,
"total_spikes": 31006,
"checks": {
"left_gpu.summary_complete": true,
"left_gpu.case_name": true,
"left_gpu.history_mode": true,
"left_gpu.apl_precision": true,
"left_gpu.no_error_marker": true,
"left_gpu.events_sorted_unique": true,
"left_gpu.count_nonnegative_total": true,
"left_gpu.ref_range": true,
"left_gpu.reported_events": true,
"left_gpu.last_hash_v": true,
"left_gpu.last_hash_g": true,
"left_gpu.last_hash_ref": true,
"left_gpu.request_summary": true,
"left_gpu.apl_positive_drive": true,
"left_gpu.apl_positive_state": true,
"left_gpu.apl_positive_inhibition": true,
"left_gpu.apl_positive_applied": true,
"left_gpu.delay_summary": true,
"left_gpu.no_dense_v": true,
"left_gpu.no_dense_g": true,
"left_gpu.no_dense_ref": true,
"left_gpu.component_summary_consistent": true,
"left_gpu.full_event_queue_request_accounting": true,
"left_gpu.timing_finite_nonnegative": true,
"left_gpu.fixed_delay_applied.schema": true,
"left_gpu.fixed_delay_applied.finite": true,
"left_gpu.fixed_delay_applied.bitwise_exact": true,
"left_gpu.fixed_delay_pending.schema": true,
"left_gpu.fixed_delay_pending.finite": true,
"left_gpu.fixed_delay_pending.bitwise_exact": true,
"left_gpu.finite_sequence_row_conservation": true,
"left_gpu.timing_integer_metadata": true,
"left_gpu.pending_hash_metadata": true,
"left_gpu.pending_shape_metadata": true,
"left_gpu.pending_summary_counts": true,
"left_gpu.final_apl_state_metadata": true,
"left_gpu.no_extra_brain_or_apl_ticks": true,
"left_gpu.timing_summary_metadata": true,
"input_overlay_and_source_provenance": true
},
"differences": {},
"read_manifest": [
{
"path": "/data/digital-drosophila/experiments/phase4af-author-fullgraph/oracle/no_input/coefficients.json",
"bytes": 2329,
"sha256": "bde79d95ef0097b827d5faf4d5658eafc009d8e9fcef1fddd645c953823e3f64"
},
{
"path": "/data/digital-drosophila/experiments/phase4ag-author-apl-r2/apl-bundle/apl_globals.npy",
"bytes": 136,
"sha256": "8388c8795d49cfe5b14fda54f76ef3a35030c62ba87bd8ca6334a2dcdf186f19"
},
{
"path": "/data/digital-drosophila/experiments/phase4ag-author-apl-r2/apl-bundle/input_matrix.npy",
"bytes": 1333728,
"sha256": "c4d3df703ea5f1d7402b8255cfa19d9744139ad1048827c23b151d8ba766fec6"
},
{
"path": "/data/digital-drosophila/experiments/phase4ag-author-apl-r2/apl-bundle/kc_globals.npy",
"bytes": 16384,
"sha256": "97a570aafa089f93e642b2bb07e3a3322dabb14c3c7dd431f0c8d2b3b7951fdd"
},
{
"path": "/data/digital-drosophila/experiments/phase4ag-author-apl-r2/apl-bundle/output_matrix.npy",
"bytes": 32640,
"sha256": "e2d0a1ccd740e6777245ebf2efcd88bf5e1da9e47308c63ec8e83d451e134a73"
},
{
"path": "/data/digital-drosophila/experiments/phase4ag-author-apl-r2/graphs/full/dst.npy",
"bytes": 102331880,
"sha256": "ce20f7433f78442c717ad2a7b5394cf4a3b109d990b4be0788040b7b0f4ed150"
},
{
"path": "/data/digital-drosophila/experiments/phase4ag-author-apl-r2/graphs/full/edge_id.npy",
"bytes": 204663632,
"sha256": "49260615ff2b6432ce3dea9ce2c7ab8f83d06c2fb7491e58e08355fcedf86a30"
},
{
"path": "/data/digital-drosophila/experiments/phase4ag-author-apl-r2/graphs/full/nodes.npy",
"bytes": 666928,
"sha256": "5b511a98e8fbf8d65bbc70b93e75ecae19366f650b7842a45611bfad62ed83dc"
},
{
"path": "/data/digital-drosophila/experiments/phase4ag-author-apl-r2/graphs/full/ptr.npy",
"bytes": 1333736,
"sha256": "fe43420f11e6242a11f8199ae7f097cab4b8a6db181d36f2a46b9e46670acbb4"
},
{
"path": "/data/digital-drosophila/experiments/phase4ag-author-apl-r2/graphs/full/signed_raw.npy",
"bytes": 204663632,
"sha256": "f9884ccb8930b32420b27c69271df78034a8350fe5a5c9b76a63c259268efc09"
},
{
"path": "/data/digital-drosophila/experiments/phase4ag-author-apl-r2/graphs/full/src.npy",
"bytes": 102331880,
"sha256": "bfd625ce690fc21eb0a8b9dede831688ab73b789045ba83ddf4baeefeddf1fc3"
},
{
"path": "/data/digital-drosophila/experiments/phase4ag-author-apl-r2/graphs/full/weights.npy",
"bytes": 204663632,
"sha256": "462839ffc3feb8f6c278044488082b1c8e410e7f23229d6b5e29d1b7042416a1"
},
{
"path": "/data/digital-drosophila/experiments/phase4ak-apl-timing-validation/cases/novel_to_aj/novel_to_aj-matched_energy-00-s1073741828/requests.npz",
"bytes": 886,
"sha256": "40ddaa87b131754987871b2a47480dc69cafdf9183cbe94238e405488d457366"
},
{
"path": "/data/digital-drosophila/experiments/phase4ak-apl-timing-validation/cases/novel_to_aj/novel_to_aj-matched_energy-00-s1073741828/spec.json",
"bytes": 1632,
"sha256": "750244ab6ab03181ab841dcf9706c9d0a9b82bceec5683bf6cf976e58dbf4232"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-00-s1073741828-r0/adapter-provenance.json",
"bytes": 3871,
"sha256": "1f9980ef0444ca654471b8844e33614f7eb8badf6598f9b0a0c206d61b85ead5"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-00-s1073741828-r0/apl-applied.float32.npy",
"bytes": 16256128,
"sha256": "3c24c9bf2d1a9132b6d0e77c9a8bedefb0ec339aa0b642522e332460413886d3"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-00-s1073741828-r0/apl-component.json",
"bytes": 1684,
"sha256": "f94b360033b4cb643c9774e7fa31c95a65c5571ca62b73072ee29b3af80121f9"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-00-s1073741828-r0/apl-drive.float32.npy",
"bytes": 8128,
"sha256": "663808920de9d7dbe26c1a0a3de099bbdf4ed2a47eda93e76b21976df3e8535e"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-00-s1073741828-r0/apl-inhibition.float32.npy",
"bytes": 16256128,
"sha256": "6d1dd5756f210d22c9ae65e7c353040477db8eb379da99f649811f5a487340d0"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-00-s1073741828-r0/apl-pending-tail.float32.npy",
"bytes": 292736,
"sha256": "6a253843d47eacff86138d3bf4219ca20cea5b5ac7ffba92a83d2857b441bb50"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-00-s1073741828-r0/apl-state.float32.npy",
"bytes": 8128,
"sha256": "bf5e871420b43ee8e403018f8f3a35700e00f6b3521ffc5aaab5fa4f928cee86"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-00-s1073741828-r0/apl-timing-audit.json",
"bytes": 1180,
"sha256": "f277f8a3b2de34c941e8522dc012f2f418f3558cac9b2359c7527c60e21e2e65"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-00-s1073741828-r0/overlay-audit.json",
"bytes": 3921,
"sha256": "949d7f986ae2212d44777bd351b88e54c38db857fc062d4d232c2670d31e3085"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-00-s1073741828-r0/overlay-input.npz",
"bytes": 44476,
"sha256": "7805bd2f86de91777bca86c52870607a2e091ed74b901319b896055ad3463f6d"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-00-s1073741828-r0/overlay-manifest.json",
"bytes": 938,
"sha256": "96d8406b69e98ba9829a52788c6c96888493e8bf34581d6d653226b1eb2e494b"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-00-s1073741828-r0/queue.jsonl",
"bytes": 320867,
"sha256": "6597c49e87cee4d2bb93aaa4648d05d48a450946244c377f52810c5300408116"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-00-s1073741828-r0/requests.csv",
"bytes": 2077,
"sha256": "8e96201cd13f46454111d1ee33a060cc780c5b228ad4df9820c7d850fae72502"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-00-s1073741828-r0/sealed-gpu-source.diff",
"bytes": 12917,
"sha256": "0584f865885b18e6a36870a7ecfbbc98d7a94274fa5e9e073e7cf97597d78a03"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-00-s1073741828-r0/source-audit.json",
"bytes": 859,
"sha256": "d644f0265632f117bba0e045d26fb266765b1d005a89426b6242f3de034be935"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-00-s1073741828-r0/state.npz",
"bytes": 2101974,
"sha256": "daacd3e5ccfcfc391a3bc6a67c842e0c2a2ce79a0bb4167b693e799317879a6d"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-00-s1073741828-r0/summary.json",
"bytes": 6480,
"sha256": "07c91dc8e1d82bf96e120d228b68621d831922e4dfb1976355b9735582975b2d"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-00-s1073741828-r0/tick-state-hashes.jsonl",
"bytes": 255890,
"sha256": "3210be8e765d698e31a577b2e8cfb576353b4faa1facddc0ca3ca4c6dea7e9fb"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/overlays/static25.json",
"bytes": 938,
"sha256": "96d8406b69e98ba9829a52788c6c96888493e8bf34581d6d653226b1eb2e494b"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/overlays/static25.npz",
"bytes": 44476,
"sha256": "7805bd2f86de91777bca86c52870607a2e091ed74b901319b896055ad3463f6d"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/protocol/base-candidate.float32-mV.npy",
"bytes": 57056,
"sha256": "1218d1b328f29a7afefb0ca0b7b6421247f14ad598aa1957a6a7aacbc8cebcae"
},
{
"path": "/data/digital-drosophila/experiments/phase4h-dopamine-plasticity/plastic-mask/plastic-edge-ids.int64.npy",
"bytes": 113984,
"sha256": "8b0fb6eb2e6c31da4d17dc20d890aa3f367e514f05642de5bad6b42a1611c05b"
},
{
"path": "/data/digital-drosophila/models/male-cns-lif/apl-timing-lab-v1/compare_timing.py",
"bytes": 41221,
"sha256": "9010f070fba9b7c9cf2d86187ee2abc57f3ac606ebc08a42baad4f3922b51734"
},
{
"path": "/data/digital-drosophila/models/male-cns-lif/apl-timing-lab-v1/gpu_timing.py",
"bytes": 27083,
"sha256": "af1975ba5e5e700208c0a598d3cbe648a3cf10885c6231239b6e4b28f76d173b"
},
{
"path": "/data/digital-drosophila/models/male-cns-lif/apl-timing-lab-v1/timing_queue.py",
"bytes": 4443,
"sha256": "54df6d4818e2a0c26e96fb0aaf5d9b71cd964981706da937562d48af79aca14e"
},
{
"path": "/data/digital-drosophila/models/male-cns-lif/author-apl-lab-v2/gpu_apl.py",
"bytes": 21206,
"sha256": "69f5d893f47dafff4ef7c3186c3df0b9014666b32c8f4e943b57016bec92b18a"
},
{
"path": "/data/digital-drosophila/models/male-cns-lif/author-apl-lab-v2/legacy_apl_worker.py",
"bytes": 8158,
"sha256": "21ceec65fe42581dc55872010e0025d660e80358905f1cf4df1dadf341a3b291"
},
{
"path": "/data/digital-drosophila/models/male-cns-lif/author-fullgraph-lab-v1/oracle_full.py",
"bytes": 32146,
"sha256": "d72003d98f0f1624b12126eff50bd361c43d888f4a64d90ba9247a58976f1961"
},
{
"path": "/data/digital-drosophila/models/male-cns-lif/author-runtime-lab-v1/author_ext.cpp",
"bytes": 1203,
"sha256": "208a937d17bbb041b9bf6b25b89264ee566830b60609e58491b44583d8541f15"
},
{
"path": "/data/digital-drosophila/models/male-cns-lif/author-runtime-lab-v1/author_ext.cu",
"bytes": 10422,
"sha256": "669f166e18ce9a3f63fc723db8b0a8b74f7fa4757194b1bd65b4cf6008a7787e"
},
{
"path": "/data/digital-drosophila/models/male-cns-lif/author-runtime-lab-v1/gpu_backend.py",
"bytes": 16277,
"sha256": "03758d07572f4b44d272059d9308fac534268ad201b57bdd77d69fee95e67278"
},
{
"path": "/data/digital-drosophila/models/male-cns-lif/wholebrain-plastic-interface-v1/adapter.py",
"bytes": 15690,
"sha256": "3daabe771d3eef6c6189827c0ee5159b266c3a058e07da5781bb863be428aef9"
},
{
"path": "/data/digital-drosophila/models/male-cns-lif/wholebrain-plastic-interface-v1/comparison.py",
"bytes": 37000,
"sha256": "4d64020af05e7fc9e535ac8532dd0e7b614b200f695ed8c6d486c6151de57175"
},
{
"path": "/data/digital-drosophila/models/male-cns-lif/wholebrain-plastic-interface-v1/overlay.py",
"bytes": 11355,
"sha256": "7f891d0ba79b393c96e75fd2dee2eddc51e57d8213eaac2779703bc2c18712b4"
}
],
"failed_checks": []
}
@@ -0,0 +1,97 @@
[
{
"path": "adapter-provenance.json",
"bytes": 3871,
"sha256": "1f9980ef0444ca654471b8844e33614f7eb8badf6598f9b0a0c206d61b85ead5"
},
{
"path": "apl-applied.float32.npy",
"bytes": 16256128,
"sha256": "3c24c9bf2d1a9132b6d0e77c9a8bedefb0ec339aa0b642522e332460413886d3"
},
{
"path": "apl-component.json",
"bytes": 1684,
"sha256": "f94b360033b4cb643c9774e7fa31c95a65c5571ca62b73072ee29b3af80121f9"
},
{
"path": "apl-drive.float32.npy",
"bytes": 8128,
"sha256": "663808920de9d7dbe26c1a0a3de099bbdf4ed2a47eda93e76b21976df3e8535e"
},
{
"path": "apl-inhibition.float32.npy",
"bytes": 16256128,
"sha256": "6d1dd5756f210d22c9ae65e7c353040477db8eb379da99f649811f5a487340d0"
},
{
"path": "apl-pending-tail.float32.npy",
"bytes": 292736,
"sha256": "6a253843d47eacff86138d3bf4219ca20cea5b5ac7ffba92a83d2857b441bb50"
},
{
"path": "apl-state.float32.npy",
"bytes": 8128,
"sha256": "bf5e871420b43ee8e403018f8f3a35700e00f6b3521ffc5aaab5fa4f928cee86"
},
{
"path": "apl-timing-audit.json",
"bytes": 1180,
"sha256": "f277f8a3b2de34c941e8522dc012f2f418f3558cac9b2359c7527c60e21e2e65"
},
{
"path": "comparison.json",
"bytes": 14861,
"sha256": "0c02c2156b0007dccb564451fc83d039e28137a6bfdef85b4dd7ac40669f6b24"
},
{
"path": "overlay-audit.json",
"bytes": 3921,
"sha256": "949d7f986ae2212d44777bd351b88e54c38db857fc062d4d232c2670d31e3085"
},
{
"path": "overlay-input.npz",
"bytes": 44476,
"sha256": "7805bd2f86de91777bca86c52870607a2e091ed74b901319b896055ad3463f6d"
},
{
"path": "overlay-manifest.json",
"bytes": 938,
"sha256": "96d8406b69e98ba9829a52788c6c96888493e8bf34581d6d653226b1eb2e494b"
},
{
"path": "queue.jsonl",
"bytes": 320867,
"sha256": "6597c49e87cee4d2bb93aaa4648d05d48a450946244c377f52810c5300408116"
},
{
"path": "requests.csv",
"bytes": 2077,
"sha256": "8e96201cd13f46454111d1ee33a060cc780c5b228ad4df9820c7d850fae72502"
},
{
"path": "sealed-gpu-source.diff",
"bytes": 12917,
"sha256": "0584f865885b18e6a36870a7ecfbbc98d7a94274fa5e9e073e7cf97597d78a03"
},
{
"path": "source-audit.json",
"bytes": 859,
"sha256": "d644f0265632f117bba0e045d26fb266765b1d005a89426b6242f3de034be935"
},
{
"path": "state.npz",
"bytes": 2101974,
"sha256": "daacd3e5ccfcfc391a3bc6a67c842e0c2a2ce79a0bb4167b693e799317879a6d"
},
{
"path": "summary.json",
"bytes": 6480,
"sha256": "07c91dc8e1d82bf96e120d228b68621d831922e4dfb1976355b9735582975b2d"
},
{
"path": "tick-state-hashes.jsonl",
"bytes": 255890,
"sha256": "3210be8e765d698e31a577b2e8cfb576353b4faa1facddc0ca3ca4c6dea7e9fb"
}
]
@@ -0,0 +1,83 @@
{
"apl_fast_edges_zeroed": 5845,
"apl_overlap_count": 0,
"arrays": {
"base_candidate_mv": {
"dtype": "float32",
"raw_sha256": "380a4e9f5e5431baa8f74ecabf791febdc328e5e054fb222dc505df64a3fd501",
"shape": [
14232
]
},
"edge_id": {
"dtype": "int64",
"raw_sha256": "7c2facacbf1b3ec2fc8f265596d85988b6db6d20daab86922e194d66964367f0",
"shape": [
14232
]
},
"plastic_delta_mv": {
"dtype": "float32",
"raw_sha256": "ea03a0ab6b537ea6bcac86191dc79f4eed997ef890885cb695440a0cfc224a67",
"shape": [
14232
]
}
},
"arrival_weight_sampling": "arrival time; delta fixed for entire trial",
"base_graph_files_modified": false,
"base_weights_file_sha256": "462839ffc3feb8f6c278044488082b1c8e410e7f23229d6b5e29d1b7042416a1",
"base_weights_raw_sha256": "a8c19cde743bd456bcb2e988d504f805b6943d6ceb97cd241d6e1e472ab5a591",
"bounds_pass": true,
"bridge": "baseSI64 + (delta32 widened to float64) * float64(0.001); nonzero rows only",
"candidate_count": 14232,
"complete": true,
"copied_manifest_file": "overlay-manifest.json",
"copied_overlay_file": "overlay-input.npz",
"delta_dtype": "float32",
"delta_units": "mV",
"effective_weights_raw_sha256": "a60a2846dd952916097cecd1d3daf74cf5e785818749e0ffd818b3ced1c58fd2",
"expected_effective_weights_raw_sha256": "a60a2846dd952916097cecd1d3daf74cf5e785818749e0ffd818b3ced1c58fd2",
"frozen_mask_exact": true,
"inherited_aj_source_provenance": {
"candidate_sha256": "af1975ba5e5e700208c0a598d3cbe648a3cf10885c6231239b6e4b28f76d173b",
"diagnostic_additions": [
"generated/applied/pending trace split",
"fixed-sequence bitwise audit",
"source provenance and final APL state disclosure"
],
"module_globals_patched": false,
"only_dynamics_change": "fixed zero-initialized 0/18-step h32 delay before unchanged end g write",
"sealed_source_sha256": {
"ae_backend": "03758d07572f4b44d272059d9308fac534268ad201b57bdd77d69fee95e67278",
"af_queue": "d72003d98f0f1624b12126eff50bd361c43d888f4a64d90ba9247a58976f1961",
"ag_gpu": "69f5d893f47dafff4ef7c3186c3df0b9014666b32c8f4e943b57016bec92b18a",
"ag_worker": "21ceec65fe42581dc55872010e0025d660e80358905f1cf4df1dadf341a3b291"
},
"source_diff_sha256": "0584f865885b18e6a36870a7ecfbbc98d7a94274fa5e9e073e7cf97597d78a03"
},
"inherited_source_audit_scope": "AJ source provenance only; AM overlay semantics are recorded separately",
"input": {
"base_candidate_file": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/protocol/base-candidate.float32-mV.npy",
"base_candidate_sha256": "1218d1b328f29a7afefb0ca0b7b6421247f14ad598aa1957a6a7aacbc8cebcae",
"manifest_file": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/overlays/static25.json",
"manifest_sha256": "96d8406b69e98ba9829a52788c6c96888493e8bf34581d6d653226b1eb2e494b",
"mask_file": "/data/digital-drosophila/experiments/phase4h-dopamine-plasticity/plastic-mask/plastic-edge-ids.int64.npy",
"mask_sha256": "8b0fb6eb2e6c31da4d17dc20d890aa3f367e514f05642de5bad6b42a1611c05b",
"overlay_file": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/overlays/static25.npz",
"overlay_sha256": "7805bd2f86de91777bca86c52870607a2e091ed74b901319b896055ad3463f6d"
},
"installation_schedule": "before tick 0; after fast APL zeroing",
"installed_nonzero_count": 14232,
"learning": false,
"mapped_candidate_count": 14232,
"missing_candidate_count": 0,
"nonzero_delta_count": 14232,
"overlay_name": "static25",
"schema": "phase4am-overlay-audit-v1",
"state_dtype": "float64",
"static25_is_exact_fraction_of_float64_base_claimed": false,
"untouched_weights_bitwise_preserved": true,
"weights_updated_during_run": false,
"zero_delta_no_write": true
}
@@ -0,0 +1,14 @@
{
"schema": "phase4am-overlay-v1",
"overlay_name": "static25",
"overlay_sha256": "7805bd2f86de91777bca86c52870607a2e091ed74b901319b896055ad3463f6d",
"mask_path": "/data/digital-drosophila/experiments/phase4h-dopamine-plasticity/plastic-mask/plastic-edge-ids.int64.npy",
"mask_sha256": "8b0fb6eb2e6c31da4d17dc20d890aa3f367e514f05642de5bad6b42a1611c05b",
"base_candidate_path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/protocol/base-candidate.float32-mV.npy",
"base_candidate_sha256": "1218d1b328f29a7afefb0ca0b7b6421247f14ad598aa1957a6a7aacbc8cebcae",
"aj_model_dir": "/data/digital-drosophila/models/male-cns-lif/apl-timing-lab-v1",
"base_rhs_ast_sha256": "e89afc5c18e34631489aa479d9c8ba9d1fa40a8b0f721105405b9a6ef636959d",
"old_f32_expression_source_sha256": "5ec83a132deb8ba20e62dab485537c2414016fe2fece546198d61c0668d75b6b",
"training": false,
"fixed_for_whole_trial": true
}
@@ -0,0 +1,130 @@
tick,neuron_idx,attempted,accepted,rejected
7,97,1,1,0
21,6721,1,1,0
27,4624,1,1,0
46,434,1,1,0
46,530,1,1,0
48,130753,1,1,0
61,999,1,1,0
63,999,1,0,1
66,522,1,1,0
68,530,1,1,0
75,79514,1,1,0
86,130497,1,1,0
88,133666,1,1,0
91,7322,1,1,0
97,999,1,1,0
98,2601,1,1,0
102,54264,1,1,0
108,7322,1,0,1
124,434,1,0,1
124,130257,1,1,0
131,189,1,0,1
141,434,1,1,0
164,999,1,0,1
167,7680,1,1,0
169,130753,1,1,0
175,130753,1,0,1
200,710,1,1,0
208,130753,1,1,0
217,1372,1,1,0
238,1011,1,1,0
254,4786,1,1,0
267,189,1,1,0
294,189,1,1,0
301,97,1,1,0
303,7680,1,1,0
312,130257,1,1,0
313,130753,1,1,0
319,1011,1,0,1
321,159,1,0,1
335,999,1,1,0
335,54264,1,1,0
336,130753,1,1,0
340,622,1,0,1
340,700,1,1,0
348,130753,1,0,1
359,54264,1,1,0
371,522,1,1,0
382,710,1,1,0
384,130753,1,1,0
390,2029,1,0,1
391,530,1,0,1
398,130257,1,1,0
422,2029,1,1,0
429,53508,1,0,1
437,622,1,0,1
446,522,1,0,1
447,189,1,0,1
458,360,1,0,1
465,1011,1,1,0
484,999,1,1,0
496,9052,1,0,1
498,54264,1,1,0
510,130257,1,1,0
511,7680,1,0,1
512,4786,1,1,0
516,189,1,0,1
523,7322,1,1,0
525,97,1,1,0
527,6721,1,1,0
534,97,1,0,1
535,2029,1,1,0
536,9052,1,1,0
543,159,1,0,1
563,79514,1,1,0
565,522,1,1,0
572,159,1,0,1
587,522,1,1,0
592,130753,1,0,1
593,999,1,1,0
608,571,1,1,0
610,1011,1,1,0
623,159,1,0,1
641,6721,1,1,0
643,700,1,1,0
648,132659,1,1,0
654,1372,1,1,0
672,7322,1,1,0
676,6721,1,1,0
677,360,1,0,1
679,54264,1,1,0
683,132659,1,1,0
688,189,1,1,0
699,522,1,0,1
717,130257,1,1,0
718,130753,1,1,0
724,530,1,1,0
725,434,1,0,1
725,522,1,1,0
732,522,1,0,1
740,360,1,0,1
748,434,1,1,0
766,7680,1,1,0
770,522,1,1,0
775,530,1,0,1
792,9052,1,1,0
796,1022,1,1,0
797,97,1,1,0
808,97,1,0,1
822,130753,1,1,0
824,189,1,1,0
824,1011,1,1,0
827,54264,1,1,0
836,2029,1,1,0
839,700,1,0,1
848,530,1,0,1
862,189,1,1,0
870,1011,1,1,0
872,4624,1,0,1
880,522,1,1,0
891,999,1,1,0
910,6721,1,1,0
914,434,1,1,0
918,1372,1,0,1
921,9052,1,1,0
924,999,1,1,0
948,97,1,0,1
985,130257,1,1,0
994,53508,1,1,0
997,79514,1,0,1
1 tick neuron_idx attempted accepted rejected
2 7 97 1 1 0
3 21 6721 1 1 0
4 27 4624 1 1 0
5 46 434 1 1 0
6 46 530 1 1 0
7 48 130753 1 1 0
8 61 999 1 1 0
9 63 999 1 0 1
10 66 522 1 1 0
11 68 530 1 1 0
12 75 79514 1 1 0
13 86 130497 1 1 0
14 88 133666 1 1 0
15 91 7322 1 1 0
16 97 999 1 1 0
17 98 2601 1 1 0
18 102 54264 1 1 0
19 108 7322 1 0 1
20 124 434 1 0 1
21 124 130257 1 1 0
22 131 189 1 0 1
23 141 434 1 1 0
24 164 999 1 0 1
25 167 7680 1 1 0
26 169 130753 1 1 0
27 175 130753 1 0 1
28 200 710 1 1 0
29 208 130753 1 1 0
30 217 1372 1 1 0
31 238 1011 1 1 0
32 254 4786 1 1 0
33 267 189 1 1 0
34 294 189 1 1 0
35 301 97 1 1 0
36 303 7680 1 1 0
37 312 130257 1 1 0
38 313 130753 1 1 0
39 319 1011 1 0 1
40 321 159 1 0 1
41 335 999 1 1 0
42 335 54264 1 1 0
43 336 130753 1 1 0
44 340 622 1 0 1
45 340 700 1 1 0
46 348 130753 1 0 1
47 359 54264 1 1 0
48 371 522 1 1 0
49 382 710 1 1 0
50 384 130753 1 1 0
51 390 2029 1 0 1
52 391 530 1 0 1
53 398 130257 1 1 0
54 422 2029 1 1 0
55 429 53508 1 0 1
56 437 622 1 0 1
57 446 522 1 0 1
58 447 189 1 0 1
59 458 360 1 0 1
60 465 1011 1 1 0
61 484 999 1 1 0
62 496 9052 1 0 1
63 498 54264 1 1 0
64 510 130257 1 1 0
65 511 7680 1 0 1
66 512 4786 1 1 0
67 516 189 1 0 1
68 523 7322 1 1 0
69 525 97 1 1 0
70 527 6721 1 1 0
71 534 97 1 0 1
72 535 2029 1 1 0
73 536 9052 1 1 0
74 543 159 1 0 1
75 563 79514 1 1 0
76 565 522 1 1 0
77 572 159 1 0 1
78 587 522 1 1 0
79 592 130753 1 0 1
80 593 999 1 1 0
81 608 571 1 1 0
82 610 1011 1 1 0
83 623 159 1 0 1
84 641 6721 1 1 0
85 643 700 1 1 0
86 648 132659 1 1 0
87 654 1372 1 1 0
88 672 7322 1 1 0
89 676 6721 1 1 0
90 677 360 1 0 1
91 679 54264 1 1 0
92 683 132659 1 1 0
93 688 189 1 1 0
94 699 522 1 0 1
95 717 130257 1 1 0
96 718 130753 1 1 0
97 724 530 1 1 0
98 725 434 1 0 1
99 725 522 1 1 0
100 732 522 1 0 1
101 740 360 1 0 1
102 748 434 1 1 0
103 766 7680 1 1 0
104 770 522 1 1 0
105 775 530 1 0 1
106 792 9052 1 1 0
107 796 1022 1 1 0
108 797 97 1 1 0
109 808 97 1 0 1
110 822 130753 1 1 0
111 824 189 1 1 0
112 824 1011 1 1 0
113 827 54264 1 1 0
114 836 2029 1 1 0
115 839 700 1 0 1
116 848 530 1 0 1
117 862 189 1 1 0
118 870 1011 1 1 0
119 872 4624 1 0 1
120 880 522 1 1 0
121 891 999 1 1 0
122 910 6721 1 1 0
123 914 434 1 1 0
124 918 1372 1 0 1
125 921 9052 1 1 0
126 924 999 1 1 0
127 948 97 1 0 1
128 985 130257 1 1 0
129 994 53508 1 1 0
130 997 79514 1 0 1
@@ -0,0 +1,17 @@
{
"sealed_source_sha256": {
"ag_gpu": "69f5d893f47dafff4ef7c3186c3df0b9014666b32c8f4e943b57016bec92b18a",
"ag_worker": "21ceec65fe42581dc55872010e0025d660e80358905f1cf4df1dadf341a3b291",
"ae_backend": "03758d07572f4b44d272059d9308fac534268ad201b57bdd77d69fee95e67278",
"af_queue": "d72003d98f0f1624b12126eff50bd361c43d888f4a64d90ba9247a58976f1961"
},
"candidate_sha256": "af1975ba5e5e700208c0a598d3cbe648a3cf10885c6231239b6e4b28f76d173b",
"source_diff_sha256": "0584f865885b18e6a36870a7ecfbbc98d7a94274fa5e9e073e7cf97597d78a03",
"module_globals_patched": false,
"only_dynamics_change": "fixed zero-initialized 0/18-step h32 delay before unchanged end g write",
"diagnostic_additions": [
"generated/applied/pending trace split",
"fixed-sequence bitwise audit",
"source provenance and final APL state disclosure"
]
}
@@ -0,0 +1,168 @@
{
"case": "novel_to_aj-matched_energy-00-s1073741828",
"complete": true,
"pass_all": true,
"pass_all_scope": "internal finite/recording/event-count integrity only; independent equivalence not claimed",
"steps": 1000,
"completed_ticks": 1000,
"nodes": 166700,
"edges": 25582938,
"precision": "float64",
"apl_precision": "float32",
"state_units": "SI volts",
"total_spikes": 31006,
"requested": 129,
"accepted_requests": 91,
"rejected_requests": 38,
"arriving_edges": 15042218,
"accepted_arriving_edges": 13858925,
"counts_match_sparse_events": true,
"all_finite": true,
"record_history": false,
"apl_fast_edges_zeroed": 5845,
"kc_targets_present": 4064,
"effective_weights_raw_sha256": "a60a2846dd952916097cecd1d3daf74cf5e785818749e0ffd818b3ced1c58fd2",
"apl_component": {
"ok": true,
"protocol": "phase4ag-apl-v1",
"n_neurons": 166700,
"n_apl": 2,
"n_kc": 4064,
"dt_ms": 0.1,
"files_sha256": {
"input_matrix.npy": "c4d3df703ea5f1d7402b8255cfa19d9744139ad1048827c23b151d8ba766fec6",
"output_matrix.npy": "e2d0a1ccd740e6777245ebf2efcd88bf5e1da9e47308c63ec8e83d451e134a73",
"kc_globals.npy": "97a570aafa089f93e642b2bb07e3a3322dabb14c3c7dd431f0c8d2b3b7951fdd",
"apl_globals.npy": "8388c8795d49cfe5b14fda54f76ef3a35030c62ba87bd8ca6334a2dcdf186f19"
},
"array_sha256": {
"input_matrix.npy": "528a5f6f5ffe424f323c5a44695db4a7cf32570709832eff2f37f49e85c92c3e",
"output_matrix.npy": "0dcf02cdb7836ab72da32ac47f5682ca33e25f63a8a662a8452d4ea9d46babb9",
"kc_globals.npy": "9e990d10a63b0f74cd7bbbdc5369082f24d5246487af944ba289bc6bf48d4b75",
"apl_globals.npy": "979ef88dff30d41168ce9b377a006ccb3cd034b2dce86d54923ca0f4b87cb6a6"
},
"decay_f32_bits": "3f7eb923",
"gain_f32_bits": "3c23d70a",
"environment": {
"torch": "2.14.0+cu130",
"numpy": "2.2.6",
"cuda": "13.0",
"cudnn": 92400,
"device_name": "NVIDIA GeForce RTX 4090",
"device_index": 0,
"device_capability": [
8,
9
],
"deterministic_algorithms": false,
"cudnn_deterministic": false,
"cudnn_benchmark": false,
"cuda_matmul_allow_tf32": false,
"cudnn_allow_tf32": true,
"float32_matmul_precision": "highest",
"CUBLAS_WORKSPACE_CONFIG": null,
"precision_configuration_changed_by_component": false
},
"operator_sequence": "state.mul_(decay32); drive=mv(I32,spikes32); state.add_(drive); h=matmul(state,O32)*gain32",
"h_units": "legacy mV",
"initial_state": "float32 zeros"
},
"apl_schedule": "end, after threshold/reset and guarded arrivals, unconditional all KC",
"apl_si_conversion": "applied h32 -> float64 -> multiply float64 0.001 -> separate float64 subtraction",
"apl_delay_steps": 18,
"apl_timing": {
"pass_all": true,
"apl_delay_steps": 18,
"steps": 1000,
"pending_generated_count": 18,
"pending_initial_zero_prefix": 0,
"initial_padding_positive_zero": true,
"sample_bits_preserved": true,
"brain_tail_advanced": false,
"generated_rows": 1000,
"applied_generated_rows": 982,
"pending_shape": [
18,
4064
],
"pending_application_tick_start": 1000,
"pending_application_tick_stop_exclusive": 1018,
"pending_generated_tick_start": 982,
"pending_generated_tick_stop_exclusive": 1000,
"generated_trace": "apl-inhibition.float32.npy",
"applied_trace": "apl-applied.float32.npy",
"pending_trace": "apl-pending-tail.float32.npy",
"pending_raw_sha256": "d8835665596ef77b38b8338f04954c64f6d082b893c57b1b1ffb05392b2bfffc",
"final_apl_state_float32": [
154.08975219726562,
168.51675415039062
],
"final_apl_state_u32_bits": [
1125783290,
1126728778
],
"final_apl_state_nonzero": true,
"pending_queue_drained": false,
"finite_generated_sequence_only": true,
"future_apl_decay_or_feedback_generated": false,
"closed_loop_branch_integrals_claimed_equal": false,
"biological_delay_measurement_claimed": false
},
"source_provenance": {
"sealed_source_sha256": {
"ag_gpu": "69f5d893f47dafff4ef7c3186c3df0b9014666b32c8f4e943b57016bec92b18a",
"ag_worker": "21ceec65fe42581dc55872010e0025d660e80358905f1cf4df1dadf341a3b291",
"ae_backend": "03758d07572f4b44d272059d9308fac534268ad201b57bdd77d69fee95e67278",
"af_queue": "d72003d98f0f1624b12126eff50bd361c43d888f4a64d90ba9247a58976f1961"
},
"candidate_sha256": "af1975ba5e5e700208c0a598d3cbe648a3cf10885c6231239b6e4b28f76d173b",
"source_diff_sha256": "0584f865885b18e6a36870a7ecfbbc98d7a94274fa5e9e073e7cf97597d78a03",
"module_globals_patched": false,
"only_dynamics_change": "fixed zero-initialized 0/18-step h32 delay before unchanged end g write",
"diagnostic_additions": [
"generated/applied/pending trace split",
"fixed-sequence bitwise audit",
"source provenance and final APL state disclosure"
]
},
"pending_generated_count": 18,
"pending_initial_zero_prefix": 0,
"pending_tail_shape": [
18,
4064
],
"future_generated_decay_tail_included": false,
"build": {
"sources": {
"author_ext.cpp": "208a937d17bbb041b9bf6b25b89264ee566830b60609e58491b44583d8541f15",
"author_ext.cu": "669f166e18ce9a3f63fc723db8b0a8b74f7fa4757194b1bd65b4cf6008a7787e"
},
"torch": "2.14.0+cu130",
"torch_cuda": "13.0",
"arch_list": "8.9",
"cuda_flags": [
"-O2",
"--fmad=false",
"--ftz=false",
"--prec-div=true",
"--prec-sqrt=true"
]
},
"sealed_ae_backend_sha256": "03758d07572f4b44d272059d9308fac534268ad201b57bdd77d69fee95e67278",
"shared_apl_component_oracle_limitation": true,
"oracle_validation_claim": false,
"learning": false,
"performance_runtime_claim": false,
"cpu_sync_each_tick": true,
"build_or_cache_seconds": 0.002819847999489866,
"diagnostic_simulation_seconds": 5.28222067599927,
"wall_seconds": 6.359186628000316,
"peak_allocated_vram_bytes": 526523392,
"peak_reserved_vram_bytes": 541065216,
"input_sha256": {
"spec.json": "750244ab6ab03181ab841dcf9706c9d0a9b82bceec5683bf6cf976e58dbf4232",
"requests.npz": "40ddaa87b131754987871b2a47480dc69cafdf9183cbe94238e405488d457366",
"base_weights.npy": "462839ffc3feb8f6c278044488082b1c8e410e7f23229d6b5e29d1b7042416a1",
"coefficients.json": "bde79d95ef0097b827d5faf4d5658eafc009d8e9fcef1fddd645c953823e3f64"
}
}
@@ -0,0 +1,66 @@
{
"adapter_file": "/data/digital-drosophila/models/male-cns-lif/wholebrain-plastic-interface-v1/adapter.py",
"adapter_sha256": "3daabe771d3eef6c6189827c0ee5159b266c3a058e07da5781bb863be428aef9",
"apl_delay_steps": 18,
"ast": {
"adapted_run_ast_sha256": "b0401e196eb3a9f40873381ffa2d5a42bd9d2be854c386851c80fb0b0a386eb0",
"derived_namespace_file": "/data/digital-drosophila/models/male-cns-lif/wholebrain-plastic-interface-v1/adapter.py",
"entire_tick_loop_ast_identical": true,
"fake_original_file_used": false,
"hook_after_apl_zero_before_effective_hash": true,
"inserted_ast_statements": 1,
"loop_ast_sha256": "b50b21b7239f6b55b357e9f275786099c06e8e1ea924aeca07f13d3955d64151",
"only_ast_change": "_phase4am_install_overlay(weights, graph, apl_out_mask, upload, out_dir, source_provenance)",
"original_module_file": "/data/digital-drosophila/models/male-cns-lif/apl-timing-lab-v1/gpu_timing.py",
"original_module_globals_patched": false,
"original_run_ast_sha256": "6efd7d130a853ba9e99cc8672580ac91fcda9cf0883631efcd61c5e673756e1b"
},
"complete": true,
"delta_constant_for_entire_trial": true,
"effective_weights_raw_sha256": "a60a2846dd952916097cecd1d3daf74cf5e785818749e0ffd818b3ced1c58fd2",
"inherited_source_audit_describes_AM_semantics": false,
"inherited_summary_sha256": "00afce074a9c842f81264586c6f6f44d79e179bacf925cae678490d8cffad103",
"installation_calls": 1,
"learning": false,
"original_module_globals_patched": false,
"overlay_audit_sha256": "949d7f986ae2212d44777bd351b88e54c38db857fc062d4d232c2670d31e3085",
"overlay_module_file": "/data/digital-drosophila/models/male-cns-lif/wholebrain-plastic-interface-v1/overlay.py",
"overlay_module_sha256": "7f891d0ba79b393c96e75fd2dee2eddc51e57d8213eaac2779703bc2c18712b4",
"schema": "phase4am-adapter-provenance-v1",
"scope": "constant sparse overlay installation only; no within-trial plasticity or learning",
"sealed_sources": {
"apl-timing-lab-v1/gpu_timing.py": {
"path": "/data/digital-drosophila/models/male-cns-lif/apl-timing-lab-v1/gpu_timing.py",
"sha256": "af1975ba5e5e700208c0a598d3cbe648a3cf10885c6231239b6e4b28f76d173b"
},
"apl-timing-lab-v1/timing_queue.py": {
"path": "/data/digital-drosophila/models/male-cns-lif/apl-timing-lab-v1/timing_queue.py",
"sha256": "54df6d4818e2a0c26e96fb0aaf5d9b71cd964981706da937562d48af79aca14e"
},
"author-apl-lab-v2/gpu_apl.py": {
"path": "/data/digital-drosophila/models/male-cns-lif/author-apl-lab-v2/gpu_apl.py",
"sha256": "69f5d893f47dafff4ef7c3186c3df0b9014666b32c8f4e943b57016bec92b18a"
},
"author-apl-lab-v2/legacy_apl_worker.py": {
"path": "/data/digital-drosophila/models/male-cns-lif/author-apl-lab-v2/legacy_apl_worker.py",
"sha256": "21ceec65fe42581dc55872010e0025d660e80358905f1cf4df1dadf341a3b291"
},
"author-fullgraph-lab-v1/oracle_full.py": {
"path": "/data/digital-drosophila/models/male-cns-lif/author-fullgraph-lab-v1/oracle_full.py",
"sha256": "d72003d98f0f1624b12126eff50bd361c43d888f4a64d90ba9247a58976f1961"
},
"author-runtime-lab-v1/author_ext.cpp": {
"path": "/data/digital-drosophila/models/male-cns-lif/author-runtime-lab-v1/author_ext.cpp",
"sha256": "208a937d17bbb041b9bf6b25b89264ee566830b60609e58491b44583d8541f15"
},
"author-runtime-lab-v1/author_ext.cu": {
"path": "/data/digital-drosophila/models/male-cns-lif/author-runtime-lab-v1/author_ext.cu",
"sha256": "669f166e18ce9a3f63fc723db8b0a8b74f7fa4757194b1bd65b4cf6008a7787e"
},
"author-runtime-lab-v1/gpu_backend.py": {
"path": "/data/digital-drosophila/models/male-cns-lif/author-runtime-lab-v1/gpu_backend.py",
"sha256": "03758d07572f4b44d272059d9308fac534268ad201b57bdd77d69fee95e67278"
}
},
"weights_updated_during_run": false
}
@@ -0,0 +1,45 @@
{
"ok": true,
"protocol": "phase4ag-apl-v1",
"n_neurons": 166700,
"n_apl": 2,
"n_kc": 4064,
"dt_ms": 0.1,
"files_sha256": {
"input_matrix.npy": "c4d3df703ea5f1d7402b8255cfa19d9744139ad1048827c23b151d8ba766fec6",
"output_matrix.npy": "e2d0a1ccd740e6777245ebf2efcd88bf5e1da9e47308c63ec8e83d451e134a73",
"kc_globals.npy": "97a570aafa089f93e642b2bb07e3a3322dabb14c3c7dd431f0c8d2b3b7951fdd",
"apl_globals.npy": "8388c8795d49cfe5b14fda54f76ef3a35030c62ba87bd8ca6334a2dcdf186f19"
},
"array_sha256": {
"input_matrix.npy": "528a5f6f5ffe424f323c5a44695db4a7cf32570709832eff2f37f49e85c92c3e",
"output_matrix.npy": "0dcf02cdb7836ab72da32ac47f5682ca33e25f63a8a662a8452d4ea9d46babb9",
"kc_globals.npy": "9e990d10a63b0f74cd7bbbdc5369082f24d5246487af944ba289bc6bf48d4b75",
"apl_globals.npy": "979ef88dff30d41168ce9b377a006ccb3cd034b2dce86d54923ca0f4b87cb6a6"
},
"decay_f32_bits": "3f7eb923",
"gain_f32_bits": "3c23d70a",
"environment": {
"torch": "2.14.0+cu130",
"numpy": "2.2.6",
"cuda": "13.0",
"cudnn": 92400,
"device_name": "NVIDIA GeForce RTX 4090",
"device_index": 0,
"device_capability": [
8,
9
],
"deterministic_algorithms": false,
"cudnn_deterministic": false,
"cudnn_benchmark": false,
"cuda_matmul_allow_tf32": false,
"cudnn_allow_tf32": true,
"float32_matmul_precision": "highest",
"CUBLAS_WORKSPACE_CONFIG": null,
"precision_configuration_changed_by_component": false
},
"operator_sequence": "state.mul_(decay32); drive=mv(I32,spikes32); state.add_(drive); h=matmul(state,O32)*gain32",
"h_units": "legacy mV",
"initial_state": "float32 zeros"
}
@@ -0,0 +1,38 @@
{
"pass_all": true,
"apl_delay_steps": 18,
"steps": 1000,
"pending_generated_count": 18,
"pending_initial_zero_prefix": 0,
"initial_padding_positive_zero": true,
"sample_bits_preserved": true,
"brain_tail_advanced": false,
"generated_rows": 1000,
"applied_generated_rows": 982,
"pending_shape": [
18,
4064
],
"pending_application_tick_start": 1000,
"pending_application_tick_stop_exclusive": 1018,
"pending_generated_tick_start": 982,
"pending_generated_tick_stop_exclusive": 1000,
"generated_trace": "apl-inhibition.float32.npy",
"applied_trace": "apl-applied.float32.npy",
"pending_trace": "apl-pending-tail.float32.npy",
"pending_raw_sha256": "18d5ae2590803d5abb4a8bd126c8fcefd4a83f0ecbd77231e9102a76457f8513",
"final_apl_state_float32": [
151.39376831054688,
165.854736328125
],
"final_apl_state_u32_bits": [
1125606606,
1126554320
],
"final_apl_state_nonzero": true,
"pending_queue_drained": false,
"finite_generated_sequence_only": true,
"future_apl_decay_or_feedback_generated": false,
"closed_loop_branch_integrals_claimed_equal": false,
"biological_delay_measurement_claimed": false
}
@@ -0,0 +1,312 @@
{
"schema": "phase4am-comparison-v1",
"mode": "self",
"case_dir": "/data/digital-drosophila/experiments/phase4ak-apl-timing-validation/cases/novel_to_aj/novel_to_aj-matched_energy-00-s1073741829",
"left": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-00-s1073741829-r0",
"right": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-00-s1073741829-r0",
"pass_all": true,
"learning_achieved": false,
"candidate_generated": false,
"tolerance": null,
"scope": "Single-run event/queue/input/static-overlay self-consistency; no repeat, equivalence, physiology or learning PASS",
"explicit_exclusions": [
"build_or_cache_seconds",
"diagnostic_simulation_seconds",
"peak_allocated_vram_bytes",
"peak_reserved_vram_bytes",
"wall_seconds"
],
"independent_cpu_wholebrain_oracle_claim": false,
"overlay_name": "static25",
"nodes": 166700,
"edges": 25582938,
"steps": 1000,
"apl_delay_steps": 18,
"full_queue_reconstructed": true,
"total_spikes": 31062,
"checks": {
"left_gpu.summary_complete": true,
"left_gpu.case_name": true,
"left_gpu.history_mode": true,
"left_gpu.apl_precision": true,
"left_gpu.no_error_marker": true,
"left_gpu.events_sorted_unique": true,
"left_gpu.count_nonnegative_total": true,
"left_gpu.ref_range": true,
"left_gpu.reported_events": true,
"left_gpu.last_hash_v": true,
"left_gpu.last_hash_g": true,
"left_gpu.last_hash_ref": true,
"left_gpu.request_summary": true,
"left_gpu.apl_positive_drive": true,
"left_gpu.apl_positive_state": true,
"left_gpu.apl_positive_inhibition": true,
"left_gpu.apl_positive_applied": true,
"left_gpu.delay_summary": true,
"left_gpu.no_dense_v": true,
"left_gpu.no_dense_g": true,
"left_gpu.no_dense_ref": true,
"left_gpu.component_summary_consistent": true,
"left_gpu.full_event_queue_request_accounting": true,
"left_gpu.timing_finite_nonnegative": true,
"left_gpu.fixed_delay_applied.schema": true,
"left_gpu.fixed_delay_applied.finite": true,
"left_gpu.fixed_delay_applied.bitwise_exact": true,
"left_gpu.fixed_delay_pending.schema": true,
"left_gpu.fixed_delay_pending.finite": true,
"left_gpu.fixed_delay_pending.bitwise_exact": true,
"left_gpu.finite_sequence_row_conservation": true,
"left_gpu.timing_integer_metadata": true,
"left_gpu.pending_hash_metadata": true,
"left_gpu.pending_shape_metadata": true,
"left_gpu.pending_summary_counts": true,
"left_gpu.final_apl_state_metadata": true,
"left_gpu.no_extra_brain_or_apl_ticks": true,
"left_gpu.timing_summary_metadata": true,
"input_overlay_and_source_provenance": true
},
"differences": {},
"read_manifest": [
{
"path": "/data/digital-drosophila/experiments/phase4af-author-fullgraph/oracle/no_input/coefficients.json",
"bytes": 2329,
"sha256": "bde79d95ef0097b827d5faf4d5658eafc009d8e9fcef1fddd645c953823e3f64"
},
{
"path": "/data/digital-drosophila/experiments/phase4ag-author-apl-r2/apl-bundle/apl_globals.npy",
"bytes": 136,
"sha256": "8388c8795d49cfe5b14fda54f76ef3a35030c62ba87bd8ca6334a2dcdf186f19"
},
{
"path": "/data/digital-drosophila/experiments/phase4ag-author-apl-r2/apl-bundle/input_matrix.npy",
"bytes": 1333728,
"sha256": "c4d3df703ea5f1d7402b8255cfa19d9744139ad1048827c23b151d8ba766fec6"
},
{
"path": "/data/digital-drosophila/experiments/phase4ag-author-apl-r2/apl-bundle/kc_globals.npy",
"bytes": 16384,
"sha256": "97a570aafa089f93e642b2bb07e3a3322dabb14c3c7dd431f0c8d2b3b7951fdd"
},
{
"path": "/data/digital-drosophila/experiments/phase4ag-author-apl-r2/apl-bundle/output_matrix.npy",
"bytes": 32640,
"sha256": "e2d0a1ccd740e6777245ebf2efcd88bf5e1da9e47308c63ec8e83d451e134a73"
},
{
"path": "/data/digital-drosophila/experiments/phase4ag-author-apl-r2/graphs/full/dst.npy",
"bytes": 102331880,
"sha256": "ce20f7433f78442c717ad2a7b5394cf4a3b109d990b4be0788040b7b0f4ed150"
},
{
"path": "/data/digital-drosophila/experiments/phase4ag-author-apl-r2/graphs/full/edge_id.npy",
"bytes": 204663632,
"sha256": "49260615ff2b6432ce3dea9ce2c7ab8f83d06c2fb7491e58e08355fcedf86a30"
},
{
"path": "/data/digital-drosophila/experiments/phase4ag-author-apl-r2/graphs/full/nodes.npy",
"bytes": 666928,
"sha256": "5b511a98e8fbf8d65bbc70b93e75ecae19366f650b7842a45611bfad62ed83dc"
},
{
"path": "/data/digital-drosophila/experiments/phase4ag-author-apl-r2/graphs/full/ptr.npy",
"bytes": 1333736,
"sha256": "fe43420f11e6242a11f8199ae7f097cab4b8a6db181d36f2a46b9e46670acbb4"
},
{
"path": "/data/digital-drosophila/experiments/phase4ag-author-apl-r2/graphs/full/signed_raw.npy",
"bytes": 204663632,
"sha256": "f9884ccb8930b32420b27c69271df78034a8350fe5a5c9b76a63c259268efc09"
},
{
"path": "/data/digital-drosophila/experiments/phase4ag-author-apl-r2/graphs/full/src.npy",
"bytes": 102331880,
"sha256": "bfd625ce690fc21eb0a8b9dede831688ab73b789045ba83ddf4baeefeddf1fc3"
},
{
"path": "/data/digital-drosophila/experiments/phase4ag-author-apl-r2/graphs/full/weights.npy",
"bytes": 204663632,
"sha256": "462839ffc3feb8f6c278044488082b1c8e410e7f23229d6b5e29d1b7042416a1"
},
{
"path": "/data/digital-drosophila/experiments/phase4ak-apl-timing-validation/cases/novel_to_aj/novel_to_aj-matched_energy-00-s1073741829/requests.npz",
"bytes": 804,
"sha256": "7d9c70413c78f5da6d0eb02c98ffdbdc58e6eae73249b084a08f2e7360e1a087"
},
{
"path": "/data/digital-drosophila/experiments/phase4ak-apl-timing-validation/cases/novel_to_aj/novel_to_aj-matched_energy-00-s1073741829/spec.json",
"bytes": 1632,
"sha256": "3ca648e445b4bbb59ba2c0220557a6a18d387280af48a4429e70dc725671a580"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-00-s1073741829-r0/adapter-provenance.json",
"bytes": 3871,
"sha256": "87ef3a37ab5667b963116cf01825801619656dadaf5dbf0a02ea1989040e270b"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-00-s1073741829-r0/apl-applied.float32.npy",
"bytes": 16256128,
"sha256": "afa6bf6a059d8d01baba49ac7895c4ee197ff52d6b93a35538a724a27e6cde3f"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-00-s1073741829-r0/apl-component.json",
"bytes": 1684,
"sha256": "f94b360033b4cb643c9774e7fa31c95a65c5571ca62b73072ee29b3af80121f9"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-00-s1073741829-r0/apl-drive.float32.npy",
"bytes": 8128,
"sha256": "af89d28fe17df79e97f5c4d776cb94964dd9d633c563fb1b4cc0efb6b704d6aa"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-00-s1073741829-r0/apl-inhibition.float32.npy",
"bytes": 16256128,
"sha256": "883e821d9c9940e31def801618261b48985dafbe30187052df46addeec6cc82d"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-00-s1073741829-r0/apl-pending-tail.float32.npy",
"bytes": 292736,
"sha256": "cd5e33f7659d107bd04b969f78b219f36fdf8a78dd2ac801facd7836de6b5d4d"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-00-s1073741829-r0/apl-state.float32.npy",
"bytes": 8128,
"sha256": "97663f4233aead9e1df5f6fff96607281812b0fb6abdac1c9fa13ee607caf619"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-00-s1073741829-r0/apl-timing-audit.json",
"bytes": 1178,
"sha256": "cb25dca5f90c7e7327cddca8ed9fc2c0f9647f687ff1c4195ce1e66a85a04961"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-00-s1073741829-r0/overlay-audit.json",
"bytes": 3921,
"sha256": "949d7f986ae2212d44777bd351b88e54c38db857fc062d4d232c2670d31e3085"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-00-s1073741829-r0/overlay-input.npz",
"bytes": 44476,
"sha256": "7805bd2f86de91777bca86c52870607a2e091ed74b901319b896055ad3463f6d"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-00-s1073741829-r0/overlay-manifest.json",
"bytes": 938,
"sha256": "96d8406b69e98ba9829a52788c6c96888493e8bf34581d6d653226b1eb2e494b"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-00-s1073741829-r0/queue.jsonl",
"bytes": 321000,
"sha256": "985dc1e167f37856e2c9a28201422167819139785caa846322369ff509de1678"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-00-s1073741829-r0/requests.csv",
"bytes": 1633,
"sha256": "8b4f04f179567b98c7901be81d3e95bb135a94b5f69c356cb82ab877ffe463c7"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-00-s1073741829-r0/sealed-gpu-source.diff",
"bytes": 12917,
"sha256": "0584f865885b18e6a36870a7ecfbbc98d7a94274fa5e9e073e7cf97597d78a03"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-00-s1073741829-r0/source-audit.json",
"bytes": 859,
"sha256": "d644f0265632f117bba0e045d26fb266765b1d005a89426b6242f3de034be935"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-00-s1073741829-r0/state.npz",
"bytes": 2082892,
"sha256": "4bf0e7b61e0640ecdc57145feec9a221cecab6b0c60516b7870a92f0818b0993"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-00-s1073741829-r0/summary.json",
"bytes": 6479,
"sha256": "00afce074a9c842f81264586c6f6f44d79e179bacf925cae678490d8cffad103"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-00-s1073741829-r0/tick-state-hashes.jsonl",
"bytes": 255890,
"sha256": "6f3fe9fb1cc3d3d4f5ad65e50373960b0a88e56cafbfdf98e6c3e03e32d52a24"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/overlays/static25.json",
"bytes": 938,
"sha256": "96d8406b69e98ba9829a52788c6c96888493e8bf34581d6d653226b1eb2e494b"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/overlays/static25.npz",
"bytes": 44476,
"sha256": "7805bd2f86de91777bca86c52870607a2e091ed74b901319b896055ad3463f6d"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/protocol/base-candidate.float32-mV.npy",
"bytes": 57056,
"sha256": "1218d1b328f29a7afefb0ca0b7b6421247f14ad598aa1957a6a7aacbc8cebcae"
},
{
"path": "/data/digital-drosophila/experiments/phase4h-dopamine-plasticity/plastic-mask/plastic-edge-ids.int64.npy",
"bytes": 113984,
"sha256": "8b0fb6eb2e6c31da4d17dc20d890aa3f367e514f05642de5bad6b42a1611c05b"
},
{
"path": "/data/digital-drosophila/models/male-cns-lif/apl-timing-lab-v1/compare_timing.py",
"bytes": 41221,
"sha256": "9010f070fba9b7c9cf2d86187ee2abc57f3ac606ebc08a42baad4f3922b51734"
},
{
"path": "/data/digital-drosophila/models/male-cns-lif/apl-timing-lab-v1/gpu_timing.py",
"bytes": 27083,
"sha256": "af1975ba5e5e700208c0a598d3cbe648a3cf10885c6231239b6e4b28f76d173b"
},
{
"path": "/data/digital-drosophila/models/male-cns-lif/apl-timing-lab-v1/timing_queue.py",
"bytes": 4443,
"sha256": "54df6d4818e2a0c26e96fb0aaf5d9b71cd964981706da937562d48af79aca14e"
},
{
"path": "/data/digital-drosophila/models/male-cns-lif/author-apl-lab-v2/gpu_apl.py",
"bytes": 21206,
"sha256": "69f5d893f47dafff4ef7c3186c3df0b9014666b32c8f4e943b57016bec92b18a"
},
{
"path": "/data/digital-drosophila/models/male-cns-lif/author-apl-lab-v2/legacy_apl_worker.py",
"bytes": 8158,
"sha256": "21ceec65fe42581dc55872010e0025d660e80358905f1cf4df1dadf341a3b291"
},
{
"path": "/data/digital-drosophila/models/male-cns-lif/author-fullgraph-lab-v1/oracle_full.py",
"bytes": 32146,
"sha256": "d72003d98f0f1624b12126eff50bd361c43d888f4a64d90ba9247a58976f1961"
},
{
"path": "/data/digital-drosophila/models/male-cns-lif/author-runtime-lab-v1/author_ext.cpp",
"bytes": 1203,
"sha256": "208a937d17bbb041b9bf6b25b89264ee566830b60609e58491b44583d8541f15"
},
{
"path": "/data/digital-drosophila/models/male-cns-lif/author-runtime-lab-v1/author_ext.cu",
"bytes": 10422,
"sha256": "669f166e18ce9a3f63fc723db8b0a8b74f7fa4757194b1bd65b4cf6008a7787e"
},
{
"path": "/data/digital-drosophila/models/male-cns-lif/author-runtime-lab-v1/gpu_backend.py",
"bytes": 16277,
"sha256": "03758d07572f4b44d272059d9308fac534268ad201b57bdd77d69fee95e67278"
},
{
"path": "/data/digital-drosophila/models/male-cns-lif/wholebrain-plastic-interface-v1/adapter.py",
"bytes": 15690,
"sha256": "3daabe771d3eef6c6189827c0ee5159b266c3a058e07da5781bb863be428aef9"
},
{
"path": "/data/digital-drosophila/models/male-cns-lif/wholebrain-plastic-interface-v1/comparison.py",
"bytes": 37000,
"sha256": "4d64020af05e7fc9e535ac8532dd0e7b614b200f695ed8c6d486c6151de57175"
},
{
"path": "/data/digital-drosophila/models/male-cns-lif/wholebrain-plastic-interface-v1/overlay.py",
"bytes": 11355,
"sha256": "7f891d0ba79b393c96e75fd2dee2eddc51e57d8213eaac2779703bc2c18712b4"
}
],
"failed_checks": []
}
@@ -0,0 +1,97 @@
[
{
"path": "adapter-provenance.json",
"bytes": 3871,
"sha256": "87ef3a37ab5667b963116cf01825801619656dadaf5dbf0a02ea1989040e270b"
},
{
"path": "apl-applied.float32.npy",
"bytes": 16256128,
"sha256": "afa6bf6a059d8d01baba49ac7895c4ee197ff52d6b93a35538a724a27e6cde3f"
},
{
"path": "apl-component.json",
"bytes": 1684,
"sha256": "f94b360033b4cb643c9774e7fa31c95a65c5571ca62b73072ee29b3af80121f9"
},
{
"path": "apl-drive.float32.npy",
"bytes": 8128,
"sha256": "af89d28fe17df79e97f5c4d776cb94964dd9d633c563fb1b4cc0efb6b704d6aa"
},
{
"path": "apl-inhibition.float32.npy",
"bytes": 16256128,
"sha256": "883e821d9c9940e31def801618261b48985dafbe30187052df46addeec6cc82d"
},
{
"path": "apl-pending-tail.float32.npy",
"bytes": 292736,
"sha256": "cd5e33f7659d107bd04b969f78b219f36fdf8a78dd2ac801facd7836de6b5d4d"
},
{
"path": "apl-state.float32.npy",
"bytes": 8128,
"sha256": "97663f4233aead9e1df5f6fff96607281812b0fb6abdac1c9fa13ee607caf619"
},
{
"path": "apl-timing-audit.json",
"bytes": 1178,
"sha256": "cb25dca5f90c7e7327cddca8ed9fc2c0f9647f687ff1c4195ce1e66a85a04961"
},
{
"path": "comparison.json",
"bytes": 14861,
"sha256": "c84046afbcd3dedc170c72a75f4cc08ef914269fbd4db4804a49f1494eb1da76"
},
{
"path": "overlay-audit.json",
"bytes": 3921,
"sha256": "949d7f986ae2212d44777bd351b88e54c38db857fc062d4d232c2670d31e3085"
},
{
"path": "overlay-input.npz",
"bytes": 44476,
"sha256": "7805bd2f86de91777bca86c52870607a2e091ed74b901319b896055ad3463f6d"
},
{
"path": "overlay-manifest.json",
"bytes": 938,
"sha256": "96d8406b69e98ba9829a52788c6c96888493e8bf34581d6d653226b1eb2e494b"
},
{
"path": "queue.jsonl",
"bytes": 321000,
"sha256": "985dc1e167f37856e2c9a28201422167819139785caa846322369ff509de1678"
},
{
"path": "requests.csv",
"bytes": 1633,
"sha256": "8b4f04f179567b98c7901be81d3e95bb135a94b5f69c356cb82ab877ffe463c7"
},
{
"path": "sealed-gpu-source.diff",
"bytes": 12917,
"sha256": "0584f865885b18e6a36870a7ecfbbc98d7a94274fa5e9e073e7cf97597d78a03"
},
{
"path": "source-audit.json",
"bytes": 859,
"sha256": "d644f0265632f117bba0e045d26fb266765b1d005a89426b6242f3de034be935"
},
{
"path": "state.npz",
"bytes": 2082892,
"sha256": "4bf0e7b61e0640ecdc57145feec9a221cecab6b0c60516b7870a92f0818b0993"
},
{
"path": "summary.json",
"bytes": 6479,
"sha256": "00afce074a9c842f81264586c6f6f44d79e179bacf925cae678490d8cffad103"
},
{
"path": "tick-state-hashes.jsonl",
"bytes": 255890,
"sha256": "6f3fe9fb1cc3d3d4f5ad65e50373960b0a88e56cafbfdf98e6c3e03e32d52a24"
}
]
@@ -0,0 +1,83 @@
{
"apl_fast_edges_zeroed": 5845,
"apl_overlap_count": 0,
"arrays": {
"base_candidate_mv": {
"dtype": "float32",
"raw_sha256": "380a4e9f5e5431baa8f74ecabf791febdc328e5e054fb222dc505df64a3fd501",
"shape": [
14232
]
},
"edge_id": {
"dtype": "int64",
"raw_sha256": "7c2facacbf1b3ec2fc8f265596d85988b6db6d20daab86922e194d66964367f0",
"shape": [
14232
]
},
"plastic_delta_mv": {
"dtype": "float32",
"raw_sha256": "ea03a0ab6b537ea6bcac86191dc79f4eed997ef890885cb695440a0cfc224a67",
"shape": [
14232
]
}
},
"arrival_weight_sampling": "arrival time; delta fixed for entire trial",
"base_graph_files_modified": false,
"base_weights_file_sha256": "462839ffc3feb8f6c278044488082b1c8e410e7f23229d6b5e29d1b7042416a1",
"base_weights_raw_sha256": "a8c19cde743bd456bcb2e988d504f805b6943d6ceb97cd241d6e1e472ab5a591",
"bounds_pass": true,
"bridge": "baseSI64 + (delta32 widened to float64) * float64(0.001); nonzero rows only",
"candidate_count": 14232,
"complete": true,
"copied_manifest_file": "overlay-manifest.json",
"copied_overlay_file": "overlay-input.npz",
"delta_dtype": "float32",
"delta_units": "mV",
"effective_weights_raw_sha256": "a60a2846dd952916097cecd1d3daf74cf5e785818749e0ffd818b3ced1c58fd2",
"expected_effective_weights_raw_sha256": "a60a2846dd952916097cecd1d3daf74cf5e785818749e0ffd818b3ced1c58fd2",
"frozen_mask_exact": true,
"inherited_aj_source_provenance": {
"candidate_sha256": "af1975ba5e5e700208c0a598d3cbe648a3cf10885c6231239b6e4b28f76d173b",
"diagnostic_additions": [
"generated/applied/pending trace split",
"fixed-sequence bitwise audit",
"source provenance and final APL state disclosure"
],
"module_globals_patched": false,
"only_dynamics_change": "fixed zero-initialized 0/18-step h32 delay before unchanged end g write",
"sealed_source_sha256": {
"ae_backend": "03758d07572f4b44d272059d9308fac534268ad201b57bdd77d69fee95e67278",
"af_queue": "d72003d98f0f1624b12126eff50bd361c43d888f4a64d90ba9247a58976f1961",
"ag_gpu": "69f5d893f47dafff4ef7c3186c3df0b9014666b32c8f4e943b57016bec92b18a",
"ag_worker": "21ceec65fe42581dc55872010e0025d660e80358905f1cf4df1dadf341a3b291"
},
"source_diff_sha256": "0584f865885b18e6a36870a7ecfbbc98d7a94274fa5e9e073e7cf97597d78a03"
},
"inherited_source_audit_scope": "AJ source provenance only; AM overlay semantics are recorded separately",
"input": {
"base_candidate_file": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/protocol/base-candidate.float32-mV.npy",
"base_candidate_sha256": "1218d1b328f29a7afefb0ca0b7b6421247f14ad598aa1957a6a7aacbc8cebcae",
"manifest_file": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/overlays/static25.json",
"manifest_sha256": "96d8406b69e98ba9829a52788c6c96888493e8bf34581d6d653226b1eb2e494b",
"mask_file": "/data/digital-drosophila/experiments/phase4h-dopamine-plasticity/plastic-mask/plastic-edge-ids.int64.npy",
"mask_sha256": "8b0fb6eb2e6c31da4d17dc20d890aa3f367e514f05642de5bad6b42a1611c05b",
"overlay_file": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/overlays/static25.npz",
"overlay_sha256": "7805bd2f86de91777bca86c52870607a2e091ed74b901319b896055ad3463f6d"
},
"installation_schedule": "before tick 0; after fast APL zeroing",
"installed_nonzero_count": 14232,
"learning": false,
"mapped_candidate_count": 14232,
"missing_candidate_count": 0,
"nonzero_delta_count": 14232,
"overlay_name": "static25",
"schema": "phase4am-overlay-audit-v1",
"state_dtype": "float64",
"static25_is_exact_fraction_of_float64_base_claimed": false,
"untouched_weights_bitwise_preserved": true,
"weights_updated_during_run": false,
"zero_delta_no_write": true
}
@@ -0,0 +1,14 @@
{
"schema": "phase4am-overlay-v1",
"overlay_name": "static25",
"overlay_sha256": "7805bd2f86de91777bca86c52870607a2e091ed74b901319b896055ad3463f6d",
"mask_path": "/data/digital-drosophila/experiments/phase4h-dopamine-plasticity/plastic-mask/plastic-edge-ids.int64.npy",
"mask_sha256": "8b0fb6eb2e6c31da4d17dc20d890aa3f367e514f05642de5bad6b42a1611c05b",
"base_candidate_path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/protocol/base-candidate.float32-mV.npy",
"base_candidate_sha256": "1218d1b328f29a7afefb0ca0b7b6421247f14ad598aa1957a6a7aacbc8cebcae",
"aj_model_dir": "/data/digital-drosophila/models/male-cns-lif/apl-timing-lab-v1",
"base_rhs_ast_sha256": "e89afc5c18e34631489aa479d9c8ba9d1fa40a8b0f721105405b9a6ef636959d",
"old_f32_expression_source_sha256": "5ec83a132deb8ba20e62dab485537c2414016fe2fece546198d61c0668d75b6b",
"training": false,
"fixed_for_whole_trial": true
}
@@ -0,0 +1,102 @@
tick,neuron_idx,attempted,accepted,rejected
1,434,1,1,0
11,159,1,1,0
31,132659,1,1,0
32,189,1,1,0
33,79514,1,1,0
51,530,1,1,0
70,999,1,1,0
77,522,1,1,0
85,130753,1,1,0
124,999,1,1,0
137,4624,1,1,0
145,54264,1,1,0
149,522,1,0,1
159,4624,1,1,0
170,4624,1,0,1
186,6721,1,1,0
190,4786,1,1,0
199,130497,1,1,0
201,434,1,1,0
201,9052,1,1,0
203,130753,1,1,0
205,7322,1,1,0
216,2029,1,0,1
227,530,1,0,1
244,1022,1,1,0
249,522,1,1,0
263,9052,1,1,0
283,97,1,0,1
288,7680,1,0,1
311,522,1,0,1
311,1372,1,0,1
329,530,1,0,1
336,4786,1,1,0
338,79514,1,1,0
376,7322,1,1,0
382,360,1,0,1
385,79514,1,1,0
389,434,1,0,1
391,97,1,1,0
403,530,1,0,1
417,130753,1,1,0
422,710,1,1,0
428,97,1,1,0
429,130753,1,0,1
430,130753,1,0,1
433,189,1,0,1
433,79514,1,1,0
434,9052,1,1,0
434,54264,1,1,0
450,1372,1,1,0
453,54264,1,0,1
468,189,1,1,0
479,530,1,0,1
504,434,1,0,1
509,130257,1,1,0
516,79514,1,1,0
520,79514,1,0,1
528,1022,1,0,1
546,6721,1,1,0
574,4624,1,1,0
583,54264,1,1,0
587,2029,1,0,1
588,6721,1,1,0
588,9052,1,1,0
600,54264,1,0,1
615,97,1,1,0
617,130753,1,1,0
625,360,1,1,0
653,97,1,1,0
662,9052,1,1,0
675,1022,1,0,1
683,710,1,1,0
688,97,1,1,0
694,1372,1,0,1
697,530,1,0,1
714,360,1,1,0
719,710,1,1,0
734,2029,1,0,1
734,7322,1,1,0
738,79514,1,1,0
751,522,1,0,1
771,1927,1,1,0
776,999,1,1,0
777,360,1,0,1
781,530,1,0,1
783,130753,1,1,0
785,132659,1,1,0
786,130257,1,1,0
790,97,1,1,0
793,54264,1,1,0
827,159,1,1,0
833,1372,1,1,0
865,97,1,0,1
893,360,1,0,1
894,97,1,1,0
940,999,1,0,1
944,159,1,0,1
973,97,1,0,1
984,710,1,1,0
989,1011,1,1,0
993,1022,1,1,0
1 tick neuron_idx attempted accepted rejected
2 1 434 1 1 0
3 11 159 1 1 0
4 31 132659 1 1 0
5 32 189 1 1 0
6 33 79514 1 1 0
7 51 530 1 1 0
8 70 999 1 1 0
9 77 522 1 1 0
10 85 130753 1 1 0
11 124 999 1 1 0
12 137 4624 1 1 0
13 145 54264 1 1 0
14 149 522 1 0 1
15 159 4624 1 1 0
16 170 4624 1 0 1
17 186 6721 1 1 0
18 190 4786 1 1 0
19 199 130497 1 1 0
20 201 434 1 1 0
21 201 9052 1 1 0
22 203 130753 1 1 0
23 205 7322 1 1 0
24 216 2029 1 0 1
25 227 530 1 0 1
26 244 1022 1 1 0
27 249 522 1 1 0
28 263 9052 1 1 0
29 283 97 1 0 1
30 288 7680 1 0 1
31 311 522 1 0 1
32 311 1372 1 0 1
33 329 530 1 0 1
34 336 4786 1 1 0
35 338 79514 1 1 0
36 376 7322 1 1 0
37 382 360 1 0 1
38 385 79514 1 1 0
39 389 434 1 0 1
40 391 97 1 1 0
41 403 530 1 0 1
42 417 130753 1 1 0
43 422 710 1 1 0
44 428 97 1 1 0
45 429 130753 1 0 1
46 430 130753 1 0 1
47 433 189 1 0 1
48 433 79514 1 1 0
49 434 9052 1 1 0
50 434 54264 1 1 0
51 450 1372 1 1 0
52 453 54264 1 0 1
53 468 189 1 1 0
54 479 530 1 0 1
55 504 434 1 0 1
56 509 130257 1 1 0
57 516 79514 1 1 0
58 520 79514 1 0 1
59 528 1022 1 0 1
60 546 6721 1 1 0
61 574 4624 1 1 0
62 583 54264 1 1 0
63 587 2029 1 0 1
64 588 6721 1 1 0
65 588 9052 1 1 0
66 600 54264 1 0 1
67 615 97 1 1 0
68 617 130753 1 1 0
69 625 360 1 1 0
70 653 97 1 1 0
71 662 9052 1 1 0
72 675 1022 1 0 1
73 683 710 1 1 0
74 688 97 1 1 0
75 694 1372 1 0 1
76 697 530 1 0 1
77 714 360 1 1 0
78 719 710 1 1 0
79 734 2029 1 0 1
80 734 7322 1 1 0
81 738 79514 1 1 0
82 751 522 1 0 1
83 771 1927 1 1 0
84 776 999 1 1 0
85 777 360 1 0 1
86 781 530 1 0 1
87 783 130753 1 1 0
88 785 132659 1 1 0
89 786 130257 1 1 0
90 790 97 1 1 0
91 793 54264 1 1 0
92 827 159 1 1 0
93 833 1372 1 1 0
94 865 97 1 0 1
95 893 360 1 0 1
96 894 97 1 1 0
97 940 999 1 0 1
98 944 159 1 0 1
99 973 97 1 0 1
100 984 710 1 1 0
101 989 1011 1 1 0
102 993 1022 1 1 0
@@ -0,0 +1,17 @@
{
"sealed_source_sha256": {
"ag_gpu": "69f5d893f47dafff4ef7c3186c3df0b9014666b32c8f4e943b57016bec92b18a",
"ag_worker": "21ceec65fe42581dc55872010e0025d660e80358905f1cf4df1dadf341a3b291",
"ae_backend": "03758d07572f4b44d272059d9308fac534268ad201b57bdd77d69fee95e67278",
"af_queue": "d72003d98f0f1624b12126eff50bd361c43d888f4a64d90ba9247a58976f1961"
},
"candidate_sha256": "af1975ba5e5e700208c0a598d3cbe648a3cf10885c6231239b6e4b28f76d173b",
"source_diff_sha256": "0584f865885b18e6a36870a7ecfbbc98d7a94274fa5e9e073e7cf97597d78a03",
"module_globals_patched": false,
"only_dynamics_change": "fixed zero-initialized 0/18-step h32 delay before unchanged end g write",
"diagnostic_additions": [
"generated/applied/pending trace split",
"fixed-sequence bitwise audit",
"source provenance and final APL state disclosure"
]
}
@@ -0,0 +1,168 @@
{
"case": "novel_to_aj-matched_energy-00-s1073741829",
"complete": true,
"pass_all": true,
"pass_all_scope": "internal finite/recording/event-count integrity only; independent equivalence not claimed",
"steps": 1000,
"completed_ticks": 1000,
"nodes": 166700,
"edges": 25582938,
"precision": "float64",
"apl_precision": "float32",
"state_units": "SI volts",
"total_spikes": 31062,
"requested": 101,
"accepted_requests": 67,
"rejected_requests": 34,
"arriving_edges": 15160550,
"accepted_arriving_edges": 13947282,
"counts_match_sparse_events": true,
"all_finite": true,
"record_history": false,
"apl_fast_edges_zeroed": 5845,
"kc_targets_present": 4064,
"effective_weights_raw_sha256": "a60a2846dd952916097cecd1d3daf74cf5e785818749e0ffd818b3ced1c58fd2",
"apl_component": {
"ok": true,
"protocol": "phase4ag-apl-v1",
"n_neurons": 166700,
"n_apl": 2,
"n_kc": 4064,
"dt_ms": 0.1,
"files_sha256": {
"input_matrix.npy": "c4d3df703ea5f1d7402b8255cfa19d9744139ad1048827c23b151d8ba766fec6",
"output_matrix.npy": "e2d0a1ccd740e6777245ebf2efcd88bf5e1da9e47308c63ec8e83d451e134a73",
"kc_globals.npy": "97a570aafa089f93e642b2bb07e3a3322dabb14c3c7dd431f0c8d2b3b7951fdd",
"apl_globals.npy": "8388c8795d49cfe5b14fda54f76ef3a35030c62ba87bd8ca6334a2dcdf186f19"
},
"array_sha256": {
"input_matrix.npy": "528a5f6f5ffe424f323c5a44695db4a7cf32570709832eff2f37f49e85c92c3e",
"output_matrix.npy": "0dcf02cdb7836ab72da32ac47f5682ca33e25f63a8a662a8452d4ea9d46babb9",
"kc_globals.npy": "9e990d10a63b0f74cd7bbbdc5369082f24d5246487af944ba289bc6bf48d4b75",
"apl_globals.npy": "979ef88dff30d41168ce9b377a006ccb3cd034b2dce86d54923ca0f4b87cb6a6"
},
"decay_f32_bits": "3f7eb923",
"gain_f32_bits": "3c23d70a",
"environment": {
"torch": "2.14.0+cu130",
"numpy": "2.2.6",
"cuda": "13.0",
"cudnn": 92400,
"device_name": "NVIDIA GeForce RTX 4090",
"device_index": 0,
"device_capability": [
8,
9
],
"deterministic_algorithms": false,
"cudnn_deterministic": false,
"cudnn_benchmark": false,
"cuda_matmul_allow_tf32": false,
"cudnn_allow_tf32": true,
"float32_matmul_precision": "highest",
"CUBLAS_WORKSPACE_CONFIG": null,
"precision_configuration_changed_by_component": false
},
"operator_sequence": "state.mul_(decay32); drive=mv(I32,spikes32); state.add_(drive); h=matmul(state,O32)*gain32",
"h_units": "legacy mV",
"initial_state": "float32 zeros"
},
"apl_schedule": "end, after threshold/reset and guarded arrivals, unconditional all KC",
"apl_si_conversion": "applied h32 -> float64 -> multiply float64 0.001 -> separate float64 subtraction",
"apl_delay_steps": 18,
"apl_timing": {
"pass_all": true,
"apl_delay_steps": 18,
"steps": 1000,
"pending_generated_count": 18,
"pending_initial_zero_prefix": 0,
"initial_padding_positive_zero": true,
"sample_bits_preserved": true,
"brain_tail_advanced": false,
"generated_rows": 1000,
"applied_generated_rows": 982,
"pending_shape": [
18,
4064
],
"pending_application_tick_start": 1000,
"pending_application_tick_stop_exclusive": 1018,
"pending_generated_tick_start": 982,
"pending_generated_tick_stop_exclusive": 1000,
"generated_trace": "apl-inhibition.float32.npy",
"applied_trace": "apl-applied.float32.npy",
"pending_trace": "apl-pending-tail.float32.npy",
"pending_raw_sha256": "18d5ae2590803d5abb4a8bd126c8fcefd4a83f0ecbd77231e9102a76457f8513",
"final_apl_state_float32": [
151.39376831054688,
165.854736328125
],
"final_apl_state_u32_bits": [
1125606606,
1126554320
],
"final_apl_state_nonzero": true,
"pending_queue_drained": false,
"finite_generated_sequence_only": true,
"future_apl_decay_or_feedback_generated": false,
"closed_loop_branch_integrals_claimed_equal": false,
"biological_delay_measurement_claimed": false
},
"source_provenance": {
"sealed_source_sha256": {
"ag_gpu": "69f5d893f47dafff4ef7c3186c3df0b9014666b32c8f4e943b57016bec92b18a",
"ag_worker": "21ceec65fe42581dc55872010e0025d660e80358905f1cf4df1dadf341a3b291",
"ae_backend": "03758d07572f4b44d272059d9308fac534268ad201b57bdd77d69fee95e67278",
"af_queue": "d72003d98f0f1624b12126eff50bd361c43d888f4a64d90ba9247a58976f1961"
},
"candidate_sha256": "af1975ba5e5e700208c0a598d3cbe648a3cf10885c6231239b6e4b28f76d173b",
"source_diff_sha256": "0584f865885b18e6a36870a7ecfbbc98d7a94274fa5e9e073e7cf97597d78a03",
"module_globals_patched": false,
"only_dynamics_change": "fixed zero-initialized 0/18-step h32 delay before unchanged end g write",
"diagnostic_additions": [
"generated/applied/pending trace split",
"fixed-sequence bitwise audit",
"source provenance and final APL state disclosure"
]
},
"pending_generated_count": 18,
"pending_initial_zero_prefix": 0,
"pending_tail_shape": [
18,
4064
],
"future_generated_decay_tail_included": false,
"build": {
"sources": {
"author_ext.cpp": "208a937d17bbb041b9bf6b25b89264ee566830b60609e58491b44583d8541f15",
"author_ext.cu": "669f166e18ce9a3f63fc723db8b0a8b74f7fa4757194b1bd65b4cf6008a7787e"
},
"torch": "2.14.0+cu130",
"torch_cuda": "13.0",
"arch_list": "8.9",
"cuda_flags": [
"-O2",
"--fmad=false",
"--ftz=false",
"--prec-div=true",
"--prec-sqrt=true"
]
},
"sealed_ae_backend_sha256": "03758d07572f4b44d272059d9308fac534268ad201b57bdd77d69fee95e67278",
"shared_apl_component_oracle_limitation": true,
"oracle_validation_claim": false,
"learning": false,
"performance_runtime_claim": false,
"cpu_sync_each_tick": true,
"build_or_cache_seconds": 0.002927109999291133,
"diagnostic_simulation_seconds": 5.297807353003009,
"wall_seconds": 6.373276176000218,
"peak_allocated_vram_bytes": 526523392,
"peak_reserved_vram_bytes": 541065216,
"input_sha256": {
"spec.json": "3ca648e445b4bbb59ba2c0220557a6a18d387280af48a4429e70dc725671a580",
"requests.npz": "7d9c70413c78f5da6d0eb02c98ffdbdc58e6eae73249b084a08f2e7360e1a087",
"base_weights.npy": "462839ffc3feb8f6c278044488082b1c8e410e7f23229d6b5e29d1b7042416a1",
"coefficients.json": "bde79d95ef0097b827d5faf4d5658eafc009d8e9fcef1fddd645c953823e3f64"
}
}
@@ -0,0 +1,66 @@
{
"adapter_file": "/data/digital-drosophila/models/male-cns-lif/wholebrain-plastic-interface-v1/adapter.py",
"adapter_sha256": "3daabe771d3eef6c6189827c0ee5159b266c3a058e07da5781bb863be428aef9",
"apl_delay_steps": 18,
"ast": {
"adapted_run_ast_sha256": "b0401e196eb3a9f40873381ffa2d5a42bd9d2be854c386851c80fb0b0a386eb0",
"derived_namespace_file": "/data/digital-drosophila/models/male-cns-lif/wholebrain-plastic-interface-v1/adapter.py",
"entire_tick_loop_ast_identical": true,
"fake_original_file_used": false,
"hook_after_apl_zero_before_effective_hash": true,
"inserted_ast_statements": 1,
"loop_ast_sha256": "b50b21b7239f6b55b357e9f275786099c06e8e1ea924aeca07f13d3955d64151",
"only_ast_change": "_phase4am_install_overlay(weights, graph, apl_out_mask, upload, out_dir, source_provenance)",
"original_module_file": "/data/digital-drosophila/models/male-cns-lif/apl-timing-lab-v1/gpu_timing.py",
"original_module_globals_patched": false,
"original_run_ast_sha256": "6efd7d130a853ba9e99cc8672580ac91fcda9cf0883631efcd61c5e673756e1b"
},
"complete": true,
"delta_constant_for_entire_trial": true,
"effective_weights_raw_sha256": "a60a2846dd952916097cecd1d3daf74cf5e785818749e0ffd818b3ced1c58fd2",
"inherited_source_audit_describes_AM_semantics": false,
"inherited_summary_sha256": "de8ee196d0aec26071f007f6613811e31f4bf36778779707e885ad80146cb52a",
"installation_calls": 1,
"learning": false,
"original_module_globals_patched": false,
"overlay_audit_sha256": "949d7f986ae2212d44777bd351b88e54c38db857fc062d4d232c2670d31e3085",
"overlay_module_file": "/data/digital-drosophila/models/male-cns-lif/wholebrain-plastic-interface-v1/overlay.py",
"overlay_module_sha256": "7f891d0ba79b393c96e75fd2dee2eddc51e57d8213eaac2779703bc2c18712b4",
"schema": "phase4am-adapter-provenance-v1",
"scope": "constant sparse overlay installation only; no within-trial plasticity or learning",
"sealed_sources": {
"apl-timing-lab-v1/gpu_timing.py": {
"path": "/data/digital-drosophila/models/male-cns-lif/apl-timing-lab-v1/gpu_timing.py",
"sha256": "af1975ba5e5e700208c0a598d3cbe648a3cf10885c6231239b6e4b28f76d173b"
},
"apl-timing-lab-v1/timing_queue.py": {
"path": "/data/digital-drosophila/models/male-cns-lif/apl-timing-lab-v1/timing_queue.py",
"sha256": "54df6d4818e2a0c26e96fb0aaf5d9b71cd964981706da937562d48af79aca14e"
},
"author-apl-lab-v2/gpu_apl.py": {
"path": "/data/digital-drosophila/models/male-cns-lif/author-apl-lab-v2/gpu_apl.py",
"sha256": "69f5d893f47dafff4ef7c3186c3df0b9014666b32c8f4e943b57016bec92b18a"
},
"author-apl-lab-v2/legacy_apl_worker.py": {
"path": "/data/digital-drosophila/models/male-cns-lif/author-apl-lab-v2/legacy_apl_worker.py",
"sha256": "21ceec65fe42581dc55872010e0025d660e80358905f1cf4df1dadf341a3b291"
},
"author-fullgraph-lab-v1/oracle_full.py": {
"path": "/data/digital-drosophila/models/male-cns-lif/author-fullgraph-lab-v1/oracle_full.py",
"sha256": "d72003d98f0f1624b12126eff50bd361c43d888f4a64d90ba9247a58976f1961"
},
"author-runtime-lab-v1/author_ext.cpp": {
"path": "/data/digital-drosophila/models/male-cns-lif/author-runtime-lab-v1/author_ext.cpp",
"sha256": "208a937d17bbb041b9bf6b25b89264ee566830b60609e58491b44583d8541f15"
},
"author-runtime-lab-v1/author_ext.cu": {
"path": "/data/digital-drosophila/models/male-cns-lif/author-runtime-lab-v1/author_ext.cu",
"sha256": "669f166e18ce9a3f63fc723db8b0a8b74f7fa4757194b1bd65b4cf6008a7787e"
},
"author-runtime-lab-v1/gpu_backend.py": {
"path": "/data/digital-drosophila/models/male-cns-lif/author-runtime-lab-v1/gpu_backend.py",
"sha256": "03758d07572f4b44d272059d9308fac534268ad201b57bdd77d69fee95e67278"
}
},
"weights_updated_during_run": false
}
@@ -0,0 +1,45 @@
{
"ok": true,
"protocol": "phase4ag-apl-v1",
"n_neurons": 166700,
"n_apl": 2,
"n_kc": 4064,
"dt_ms": 0.1,
"files_sha256": {
"input_matrix.npy": "c4d3df703ea5f1d7402b8255cfa19d9744139ad1048827c23b151d8ba766fec6",
"output_matrix.npy": "e2d0a1ccd740e6777245ebf2efcd88bf5e1da9e47308c63ec8e83d451e134a73",
"kc_globals.npy": "97a570aafa089f93e642b2bb07e3a3322dabb14c3c7dd431f0c8d2b3b7951fdd",
"apl_globals.npy": "8388c8795d49cfe5b14fda54f76ef3a35030c62ba87bd8ca6334a2dcdf186f19"
},
"array_sha256": {
"input_matrix.npy": "528a5f6f5ffe424f323c5a44695db4a7cf32570709832eff2f37f49e85c92c3e",
"output_matrix.npy": "0dcf02cdb7836ab72da32ac47f5682ca33e25f63a8a662a8452d4ea9d46babb9",
"kc_globals.npy": "9e990d10a63b0f74cd7bbbdc5369082f24d5246487af944ba289bc6bf48d4b75",
"apl_globals.npy": "979ef88dff30d41168ce9b377a006ccb3cd034b2dce86d54923ca0f4b87cb6a6"
},
"decay_f32_bits": "3f7eb923",
"gain_f32_bits": "3c23d70a",
"environment": {
"torch": "2.14.0+cu130",
"numpy": "2.2.6",
"cuda": "13.0",
"cudnn": 92400,
"device_name": "NVIDIA GeForce RTX 4090",
"device_index": 0,
"device_capability": [
8,
9
],
"deterministic_algorithms": false,
"cudnn_deterministic": false,
"cudnn_benchmark": false,
"cuda_matmul_allow_tf32": false,
"cudnn_allow_tf32": true,
"float32_matmul_precision": "highest",
"CUBLAS_WORKSPACE_CONFIG": null,
"precision_configuration_changed_by_component": false
},
"operator_sequence": "state.mul_(decay32); drive=mv(I32,spikes32); state.add_(drive); h=matmul(state,O32)*gain32",
"h_units": "legacy mV",
"initial_state": "float32 zeros"
}
@@ -0,0 +1,38 @@
{
"pass_all": true,
"apl_delay_steps": 18,
"steps": 1000,
"pending_generated_count": 18,
"pending_initial_zero_prefix": 0,
"initial_padding_positive_zero": true,
"sample_bits_preserved": true,
"brain_tail_advanced": false,
"generated_rows": 1000,
"applied_generated_rows": 982,
"pending_shape": [
18,
4064
],
"pending_application_tick_start": 1000,
"pending_application_tick_stop_exclusive": 1018,
"pending_generated_tick_start": 982,
"pending_generated_tick_stop_exclusive": 1000,
"generated_trace": "apl-inhibition.float32.npy",
"applied_trace": "apl-applied.float32.npy",
"pending_trace": "apl-pending-tail.float32.npy",
"pending_raw_sha256": "1f855d145ac5c44a640e3374bdd66b3b772d840e04b81b6760ad728b5670c4fc",
"final_apl_state_float32": [
155.6795654296875,
172.2212677001953
],
"final_apl_state_u32_bits": [
1125887480,
1126971557
],
"final_apl_state_nonzero": true,
"pending_queue_drained": false,
"finite_generated_sequence_only": true,
"future_apl_decay_or_feedback_generated": false,
"closed_loop_branch_integrals_claimed_equal": false,
"biological_delay_measurement_claimed": false
}
@@ -0,0 +1,312 @@
{
"schema": "phase4am-comparison-v1",
"mode": "self",
"case_dir": "/data/digital-drosophila/experiments/phase4ak-apl-timing-validation/cases/novel_to_aj/novel_to_aj-matched_energy-01-s1073741825",
"left": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-01-s1073741825-r0",
"right": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-01-s1073741825-r0",
"pass_all": true,
"learning_achieved": false,
"candidate_generated": false,
"tolerance": null,
"scope": "Single-run event/queue/input/static-overlay self-consistency; no repeat, equivalence, physiology or learning PASS",
"explicit_exclusions": [
"build_or_cache_seconds",
"diagnostic_simulation_seconds",
"peak_allocated_vram_bytes",
"peak_reserved_vram_bytes",
"wall_seconds"
],
"independent_cpu_wholebrain_oracle_claim": false,
"overlay_name": "static25",
"nodes": 166700,
"edges": 25582938,
"steps": 1000,
"apl_delay_steps": 18,
"full_queue_reconstructed": true,
"total_spikes": 30288,
"checks": {
"left_gpu.summary_complete": true,
"left_gpu.case_name": true,
"left_gpu.history_mode": true,
"left_gpu.apl_precision": true,
"left_gpu.no_error_marker": true,
"left_gpu.events_sorted_unique": true,
"left_gpu.count_nonnegative_total": true,
"left_gpu.ref_range": true,
"left_gpu.reported_events": true,
"left_gpu.last_hash_v": true,
"left_gpu.last_hash_g": true,
"left_gpu.last_hash_ref": true,
"left_gpu.request_summary": true,
"left_gpu.apl_positive_drive": true,
"left_gpu.apl_positive_state": true,
"left_gpu.apl_positive_inhibition": true,
"left_gpu.apl_positive_applied": true,
"left_gpu.delay_summary": true,
"left_gpu.no_dense_v": true,
"left_gpu.no_dense_g": true,
"left_gpu.no_dense_ref": true,
"left_gpu.component_summary_consistent": true,
"left_gpu.full_event_queue_request_accounting": true,
"left_gpu.timing_finite_nonnegative": true,
"left_gpu.fixed_delay_applied.schema": true,
"left_gpu.fixed_delay_applied.finite": true,
"left_gpu.fixed_delay_applied.bitwise_exact": true,
"left_gpu.fixed_delay_pending.schema": true,
"left_gpu.fixed_delay_pending.finite": true,
"left_gpu.fixed_delay_pending.bitwise_exact": true,
"left_gpu.finite_sequence_row_conservation": true,
"left_gpu.timing_integer_metadata": true,
"left_gpu.pending_hash_metadata": true,
"left_gpu.pending_shape_metadata": true,
"left_gpu.pending_summary_counts": true,
"left_gpu.final_apl_state_metadata": true,
"left_gpu.no_extra_brain_or_apl_ticks": true,
"left_gpu.timing_summary_metadata": true,
"input_overlay_and_source_provenance": true
},
"differences": {},
"read_manifest": [
{
"path": "/data/digital-drosophila/experiments/phase4af-author-fullgraph/oracle/no_input/coefficients.json",
"bytes": 2329,
"sha256": "bde79d95ef0097b827d5faf4d5658eafc009d8e9fcef1fddd645c953823e3f64"
},
{
"path": "/data/digital-drosophila/experiments/phase4ag-author-apl-r2/apl-bundle/apl_globals.npy",
"bytes": 136,
"sha256": "8388c8795d49cfe5b14fda54f76ef3a35030c62ba87bd8ca6334a2dcdf186f19"
},
{
"path": "/data/digital-drosophila/experiments/phase4ag-author-apl-r2/apl-bundle/input_matrix.npy",
"bytes": 1333728,
"sha256": "c4d3df703ea5f1d7402b8255cfa19d9744139ad1048827c23b151d8ba766fec6"
},
{
"path": "/data/digital-drosophila/experiments/phase4ag-author-apl-r2/apl-bundle/kc_globals.npy",
"bytes": 16384,
"sha256": "97a570aafa089f93e642b2bb07e3a3322dabb14c3c7dd431f0c8d2b3b7951fdd"
},
{
"path": "/data/digital-drosophila/experiments/phase4ag-author-apl-r2/apl-bundle/output_matrix.npy",
"bytes": 32640,
"sha256": "e2d0a1ccd740e6777245ebf2efcd88bf5e1da9e47308c63ec8e83d451e134a73"
},
{
"path": "/data/digital-drosophila/experiments/phase4ag-author-apl-r2/graphs/full/dst.npy",
"bytes": 102331880,
"sha256": "ce20f7433f78442c717ad2a7b5394cf4a3b109d990b4be0788040b7b0f4ed150"
},
{
"path": "/data/digital-drosophila/experiments/phase4ag-author-apl-r2/graphs/full/edge_id.npy",
"bytes": 204663632,
"sha256": "49260615ff2b6432ce3dea9ce2c7ab8f83d06c2fb7491e58e08355fcedf86a30"
},
{
"path": "/data/digital-drosophila/experiments/phase4ag-author-apl-r2/graphs/full/nodes.npy",
"bytes": 666928,
"sha256": "5b511a98e8fbf8d65bbc70b93e75ecae19366f650b7842a45611bfad62ed83dc"
},
{
"path": "/data/digital-drosophila/experiments/phase4ag-author-apl-r2/graphs/full/ptr.npy",
"bytes": 1333736,
"sha256": "fe43420f11e6242a11f8199ae7f097cab4b8a6db181d36f2a46b9e46670acbb4"
},
{
"path": "/data/digital-drosophila/experiments/phase4ag-author-apl-r2/graphs/full/signed_raw.npy",
"bytes": 204663632,
"sha256": "f9884ccb8930b32420b27c69271df78034a8350fe5a5c9b76a63c259268efc09"
},
{
"path": "/data/digital-drosophila/experiments/phase4ag-author-apl-r2/graphs/full/src.npy",
"bytes": 102331880,
"sha256": "bfd625ce690fc21eb0a8b9dede831688ab73b789045ba83ddf4baeefeddf1fc3"
},
{
"path": "/data/digital-drosophila/experiments/phase4ag-author-apl-r2/graphs/full/weights.npy",
"bytes": 204663632,
"sha256": "462839ffc3feb8f6c278044488082b1c8e410e7f23229d6b5e29d1b7042416a1"
},
{
"path": "/data/digital-drosophila/experiments/phase4ak-apl-timing-validation/cases/novel_to_aj/novel_to_aj-matched_energy-01-s1073741825/requests.npz",
"bytes": 824,
"sha256": "4e523d2ed0a30993a2c0338a6d8a8e8b81b1f726822ad5a3c391f6ca738944f9"
},
{
"path": "/data/digital-drosophila/experiments/phase4ak-apl-timing-validation/cases/novel_to_aj/novel_to_aj-matched_energy-01-s1073741825/spec.json",
"bytes": 1626,
"sha256": "01b7167f144cfb840c4713085272654ed931b2dee52bd4563e01327cfbd492f0"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-01-s1073741825-r0/adapter-provenance.json",
"bytes": 3871,
"sha256": "e703424e516cdf6f6cd31c53ffaa1ea8a277a538de9ef6ec5f7f4d62c63a6811"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-01-s1073741825-r0/apl-applied.float32.npy",
"bytes": 16256128,
"sha256": "e722f90e71547b42ef614cf48d55d13829effd4aa315c8276b21e2cbb01bc6d9"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-01-s1073741825-r0/apl-component.json",
"bytes": 1684,
"sha256": "f94b360033b4cb643c9774e7fa31c95a65c5571ca62b73072ee29b3af80121f9"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-01-s1073741825-r0/apl-drive.float32.npy",
"bytes": 8128,
"sha256": "e051b1beb4248b7c83805bde5cde34b380548846d2302d0077c2b93c8605e246"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-01-s1073741825-r0/apl-inhibition.float32.npy",
"bytes": 16256128,
"sha256": "f7362a3dc2786450177aa6d5559ac170f62ba9928c15401d1d19aa05c2b8143a"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-01-s1073741825-r0/apl-pending-tail.float32.npy",
"bytes": 292736,
"sha256": "64f03ced1b00ef74146463e7d161488ffed20ec02a8acd6cbbbf965f9daf2f3a"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-01-s1073741825-r0/apl-state.float32.npy",
"bytes": 8128,
"sha256": "7f4229f94a11f33b5dc137f404494a49fe3d2ae5365a4b53a7c67c8c445f5149"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-01-s1073741825-r0/apl-timing-audit.json",
"bytes": 1178,
"sha256": "35e526068709944bc29508938236a253e13ec5b8118a340f53d7a4049321787d"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-01-s1073741825-r0/overlay-audit.json",
"bytes": 3921,
"sha256": "949d7f986ae2212d44777bd351b88e54c38db857fc062d4d232c2670d31e3085"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-01-s1073741825-r0/overlay-input.npz",
"bytes": 44476,
"sha256": "7805bd2f86de91777bca86c52870607a2e091ed74b901319b896055ad3463f6d"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-01-s1073741825-r0/overlay-manifest.json",
"bytes": 938,
"sha256": "96d8406b69e98ba9829a52788c6c96888493e8bf34581d6d653226b1eb2e494b"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-01-s1073741825-r0/queue.jsonl",
"bytes": 320819,
"sha256": "61919a49f82be23786cbe49de16eb929e06c24135d6cd9f57626f73dd89bb00c"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-01-s1073741825-r0/requests.csv",
"bytes": 1694,
"sha256": "df75d6fcce7980d34b225155ee98ef7c0a9f81592e8b5063adae926dee286fcf"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-01-s1073741825-r0/sealed-gpu-source.diff",
"bytes": 12917,
"sha256": "0584f865885b18e6a36870a7ecfbbc98d7a94274fa5e9e073e7cf97597d78a03"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-01-s1073741825-r0/source-audit.json",
"bytes": 859,
"sha256": "d644f0265632f117bba0e045d26fb266765b1d005a89426b6242f3de034be935"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-01-s1073741825-r0/state.npz",
"bytes": 2101486,
"sha256": "20efde1c5af4ea89dc2ed51658ab93d3a48008a5da9b2e3065c4dc9faa275e46"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-01-s1073741825-r0/summary.json",
"bytes": 6480,
"sha256": "de8ee196d0aec26071f007f6613811e31f4bf36778779707e885ad80146cb52a"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/gpu/static25/novel_to_aj-matched_energy-01-s1073741825-r0/tick-state-hashes.jsonl",
"bytes": 255890,
"sha256": "eee3520bc383c75b64c0106b9cec21eb21b8ab3a8d5866cde0ffae29dff20ded"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/overlays/static25.json",
"bytes": 938,
"sha256": "96d8406b69e98ba9829a52788c6c96888493e8bf34581d6d653226b1eb2e494b"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/overlays/static25.npz",
"bytes": 44476,
"sha256": "7805bd2f86de91777bca86c52870607a2e091ed74b901319b896055ad3463f6d"
},
{
"path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/protocol/base-candidate.float32-mV.npy",
"bytes": 57056,
"sha256": "1218d1b328f29a7afefb0ca0b7b6421247f14ad598aa1957a6a7aacbc8cebcae"
},
{
"path": "/data/digital-drosophila/experiments/phase4h-dopamine-plasticity/plastic-mask/plastic-edge-ids.int64.npy",
"bytes": 113984,
"sha256": "8b0fb6eb2e6c31da4d17dc20d890aa3f367e514f05642de5bad6b42a1611c05b"
},
{
"path": "/data/digital-drosophila/models/male-cns-lif/apl-timing-lab-v1/compare_timing.py",
"bytes": 41221,
"sha256": "9010f070fba9b7c9cf2d86187ee2abc57f3ac606ebc08a42baad4f3922b51734"
},
{
"path": "/data/digital-drosophila/models/male-cns-lif/apl-timing-lab-v1/gpu_timing.py",
"bytes": 27083,
"sha256": "af1975ba5e5e700208c0a598d3cbe648a3cf10885c6231239b6e4b28f76d173b"
},
{
"path": "/data/digital-drosophila/models/male-cns-lif/apl-timing-lab-v1/timing_queue.py",
"bytes": 4443,
"sha256": "54df6d4818e2a0c26e96fb0aaf5d9b71cd964981706da937562d48af79aca14e"
},
{
"path": "/data/digital-drosophila/models/male-cns-lif/author-apl-lab-v2/gpu_apl.py",
"bytes": 21206,
"sha256": "69f5d893f47dafff4ef7c3186c3df0b9014666b32c8f4e943b57016bec92b18a"
},
{
"path": "/data/digital-drosophila/models/male-cns-lif/author-apl-lab-v2/legacy_apl_worker.py",
"bytes": 8158,
"sha256": "21ceec65fe42581dc55872010e0025d660e80358905f1cf4df1dadf341a3b291"
},
{
"path": "/data/digital-drosophila/models/male-cns-lif/author-fullgraph-lab-v1/oracle_full.py",
"bytes": 32146,
"sha256": "d72003d98f0f1624b12126eff50bd361c43d888f4a64d90ba9247a58976f1961"
},
{
"path": "/data/digital-drosophila/models/male-cns-lif/author-runtime-lab-v1/author_ext.cpp",
"bytes": 1203,
"sha256": "208a937d17bbb041b9bf6b25b89264ee566830b60609e58491b44583d8541f15"
},
{
"path": "/data/digital-drosophila/models/male-cns-lif/author-runtime-lab-v1/author_ext.cu",
"bytes": 10422,
"sha256": "669f166e18ce9a3f63fc723db8b0a8b74f7fa4757194b1bd65b4cf6008a7787e"
},
{
"path": "/data/digital-drosophila/models/male-cns-lif/author-runtime-lab-v1/gpu_backend.py",
"bytes": 16277,
"sha256": "03758d07572f4b44d272059d9308fac534268ad201b57bdd77d69fee95e67278"
},
{
"path": "/data/digital-drosophila/models/male-cns-lif/wholebrain-plastic-interface-v1/adapter.py",
"bytes": 15690,
"sha256": "3daabe771d3eef6c6189827c0ee5159b266c3a058e07da5781bb863be428aef9"
},
{
"path": "/data/digital-drosophila/models/male-cns-lif/wholebrain-plastic-interface-v1/comparison.py",
"bytes": 37000,
"sha256": "4d64020af05e7fc9e535ac8532dd0e7b614b200f695ed8c6d486c6151de57175"
},
{
"path": "/data/digital-drosophila/models/male-cns-lif/wholebrain-plastic-interface-v1/overlay.py",
"bytes": 11355,
"sha256": "7f891d0ba79b393c96e75fd2dee2eddc51e57d8213eaac2779703bc2c18712b4"
}
],
"failed_checks": []
}
@@ -0,0 +1,97 @@
[
{
"path": "adapter-provenance.json",
"bytes": 3871,
"sha256": "e703424e516cdf6f6cd31c53ffaa1ea8a277a538de9ef6ec5f7f4d62c63a6811"
},
{
"path": "apl-applied.float32.npy",
"bytes": 16256128,
"sha256": "e722f90e71547b42ef614cf48d55d13829effd4aa315c8276b21e2cbb01bc6d9"
},
{
"path": "apl-component.json",
"bytes": 1684,
"sha256": "f94b360033b4cb643c9774e7fa31c95a65c5571ca62b73072ee29b3af80121f9"
},
{
"path": "apl-drive.float32.npy",
"bytes": 8128,
"sha256": "e051b1beb4248b7c83805bde5cde34b380548846d2302d0077c2b93c8605e246"
},
{
"path": "apl-inhibition.float32.npy",
"bytes": 16256128,
"sha256": "f7362a3dc2786450177aa6d5559ac170f62ba9928c15401d1d19aa05c2b8143a"
},
{
"path": "apl-pending-tail.float32.npy",
"bytes": 292736,
"sha256": "64f03ced1b00ef74146463e7d161488ffed20ec02a8acd6cbbbf965f9daf2f3a"
},
{
"path": "apl-state.float32.npy",
"bytes": 8128,
"sha256": "7f4229f94a11f33b5dc137f404494a49fe3d2ae5365a4b53a7c67c8c445f5149"
},
{
"path": "apl-timing-audit.json",
"bytes": 1178,
"sha256": "35e526068709944bc29508938236a253e13ec5b8118a340f53d7a4049321787d"
},
{
"path": "comparison.json",
"bytes": 14861,
"sha256": "322efee84ad44f3cf7a1f260e6f2c3825cefb947aec23c2dfecbf8f418fea501"
},
{
"path": "overlay-audit.json",
"bytes": 3921,
"sha256": "949d7f986ae2212d44777bd351b88e54c38db857fc062d4d232c2670d31e3085"
},
{
"path": "overlay-input.npz",
"bytes": 44476,
"sha256": "7805bd2f86de91777bca86c52870607a2e091ed74b901319b896055ad3463f6d"
},
{
"path": "overlay-manifest.json",
"bytes": 938,
"sha256": "96d8406b69e98ba9829a52788c6c96888493e8bf34581d6d653226b1eb2e494b"
},
{
"path": "queue.jsonl",
"bytes": 320819,
"sha256": "61919a49f82be23786cbe49de16eb929e06c24135d6cd9f57626f73dd89bb00c"
},
{
"path": "requests.csv",
"bytes": 1694,
"sha256": "df75d6fcce7980d34b225155ee98ef7c0a9f81592e8b5063adae926dee286fcf"
},
{
"path": "sealed-gpu-source.diff",
"bytes": 12917,
"sha256": "0584f865885b18e6a36870a7ecfbbc98d7a94274fa5e9e073e7cf97597d78a03"
},
{
"path": "source-audit.json",
"bytes": 859,
"sha256": "d644f0265632f117bba0e045d26fb266765b1d005a89426b6242f3de034be935"
},
{
"path": "state.npz",
"bytes": 2101486,
"sha256": "20efde1c5af4ea89dc2ed51658ab93d3a48008a5da9b2e3065c4dc9faa275e46"
},
{
"path": "summary.json",
"bytes": 6480,
"sha256": "de8ee196d0aec26071f007f6613811e31f4bf36778779707e885ad80146cb52a"
},
{
"path": "tick-state-hashes.jsonl",
"bytes": 255890,
"sha256": "eee3520bc383c75b64c0106b9cec21eb21b8ab3a8d5866cde0ffae29dff20ded"
}
]
@@ -0,0 +1,83 @@
{
"apl_fast_edges_zeroed": 5845,
"apl_overlap_count": 0,
"arrays": {
"base_candidate_mv": {
"dtype": "float32",
"raw_sha256": "380a4e9f5e5431baa8f74ecabf791febdc328e5e054fb222dc505df64a3fd501",
"shape": [
14232
]
},
"edge_id": {
"dtype": "int64",
"raw_sha256": "7c2facacbf1b3ec2fc8f265596d85988b6db6d20daab86922e194d66964367f0",
"shape": [
14232
]
},
"plastic_delta_mv": {
"dtype": "float32",
"raw_sha256": "ea03a0ab6b537ea6bcac86191dc79f4eed997ef890885cb695440a0cfc224a67",
"shape": [
14232
]
}
},
"arrival_weight_sampling": "arrival time; delta fixed for entire trial",
"base_graph_files_modified": false,
"base_weights_file_sha256": "462839ffc3feb8f6c278044488082b1c8e410e7f23229d6b5e29d1b7042416a1",
"base_weights_raw_sha256": "a8c19cde743bd456bcb2e988d504f805b6943d6ceb97cd241d6e1e472ab5a591",
"bounds_pass": true,
"bridge": "baseSI64 + (delta32 widened to float64) * float64(0.001); nonzero rows only",
"candidate_count": 14232,
"complete": true,
"copied_manifest_file": "overlay-manifest.json",
"copied_overlay_file": "overlay-input.npz",
"delta_dtype": "float32",
"delta_units": "mV",
"effective_weights_raw_sha256": "a60a2846dd952916097cecd1d3daf74cf5e785818749e0ffd818b3ced1c58fd2",
"expected_effective_weights_raw_sha256": "a60a2846dd952916097cecd1d3daf74cf5e785818749e0ffd818b3ced1c58fd2",
"frozen_mask_exact": true,
"inherited_aj_source_provenance": {
"candidate_sha256": "af1975ba5e5e700208c0a598d3cbe648a3cf10885c6231239b6e4b28f76d173b",
"diagnostic_additions": [
"generated/applied/pending trace split",
"fixed-sequence bitwise audit",
"source provenance and final APL state disclosure"
],
"module_globals_patched": false,
"only_dynamics_change": "fixed zero-initialized 0/18-step h32 delay before unchanged end g write",
"sealed_source_sha256": {
"ae_backend": "03758d07572f4b44d272059d9308fac534268ad201b57bdd77d69fee95e67278",
"af_queue": "d72003d98f0f1624b12126eff50bd361c43d888f4a64d90ba9247a58976f1961",
"ag_gpu": "69f5d893f47dafff4ef7c3186c3df0b9014666b32c8f4e943b57016bec92b18a",
"ag_worker": "21ceec65fe42581dc55872010e0025d660e80358905f1cf4df1dadf341a3b291"
},
"source_diff_sha256": "0584f865885b18e6a36870a7ecfbbc98d7a94274fa5e9e073e7cf97597d78a03"
},
"inherited_source_audit_scope": "AJ source provenance only; AM overlay semantics are recorded separately",
"input": {
"base_candidate_file": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/protocol/base-candidate.float32-mV.npy",
"base_candidate_sha256": "1218d1b328f29a7afefb0ca0b7b6421247f14ad598aa1957a6a7aacbc8cebcae",
"manifest_file": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/overlays/static25.json",
"manifest_sha256": "96d8406b69e98ba9829a52788c6c96888493e8bf34581d6d653226b1eb2e494b",
"mask_file": "/data/digital-drosophila/experiments/phase4h-dopamine-plasticity/plastic-mask/plastic-edge-ids.int64.npy",
"mask_sha256": "8b0fb6eb2e6c31da4d17dc20d890aa3f367e514f05642de5bad6b42a1611c05b",
"overlay_file": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/overlays/static25.npz",
"overlay_sha256": "7805bd2f86de91777bca86c52870607a2e091ed74b901319b896055ad3463f6d"
},
"installation_schedule": "before tick 0; after fast APL zeroing",
"installed_nonzero_count": 14232,
"learning": false,
"mapped_candidate_count": 14232,
"missing_candidate_count": 0,
"nonzero_delta_count": 14232,
"overlay_name": "static25",
"schema": "phase4am-overlay-audit-v1",
"state_dtype": "float64",
"static25_is_exact_fraction_of_float64_base_claimed": false,
"untouched_weights_bitwise_preserved": true,
"weights_updated_during_run": false,
"zero_delta_no_write": true
}
@@ -0,0 +1,14 @@
{
"schema": "phase4am-overlay-v1",
"overlay_name": "static25",
"overlay_sha256": "7805bd2f86de91777bca86c52870607a2e091ed74b901319b896055ad3463f6d",
"mask_path": "/data/digital-drosophila/experiments/phase4h-dopamine-plasticity/plastic-mask/plastic-edge-ids.int64.npy",
"mask_sha256": "8b0fb6eb2e6c31da4d17dc20d890aa3f367e514f05642de5bad6b42a1611c05b",
"base_candidate_path": "/data/digital-drosophila/experiments/phase4am-wholebrain-plastic-interface/protocol/base-candidate.float32-mV.npy",
"base_candidate_sha256": "1218d1b328f29a7afefb0ca0b7b6421247f14ad598aa1957a6a7aacbc8cebcae",
"aj_model_dir": "/data/digital-drosophila/models/male-cns-lif/apl-timing-lab-v1",
"base_rhs_ast_sha256": "e89afc5c18e34631489aa479d9c8ba9d1fa40a8b0f721105405b9a6ef636959d",
"old_f32_expression_source_sha256": "5ec83a132deb8ba20e62dab485537c2414016fe2fece546198d61c0668d75b6b",
"training": false,
"fixed_for_whole_trial": true
}
@@ -0,0 +1,104 @@
tick,neuron_idx,attempted,accepted,rejected
5,5519,1,1,0
13,2586,1,1,0
15,189,1,1,0
15,1890,1,1,0
26,4505,1,1,0
32,2586,1,0,1
60,2994,1,1,0
64,130472,1,1,0
98,3202,1,1,0
98,4026,1,1,0
100,9975,1,1,0
103,3202,1,0,1
104,3202,1,0,1
128,9188,1,1,0
130,2010,1,0,1
169,4505,1,1,0
177,6842,1,1,0
207,2970,1,1,0
213,5519,1,0,1
224,2347,1,0,1
264,3252,1,0,1
294,2535,1,1,0
299,2231,1,1,0
302,7781,1,0,1
303,130753,1,1,0
326,2970,1,1,0
342,6842,1,1,0
350,7781,1,1,0
354,2010,1,1,0
354,4311,1,1,0
361,1890,1,1,0
373,1011,1,1,0
390,1514,1,0,1
418,1514,1,1,0
427,4505,1,0,1
442,2535,1,0,1
442,5519,1,1,0
452,2010,1,1,0
454,130472,1,1,0
472,2994,1,1,0
477,999,1,1,0
479,131226,1,0,1
480,4026,1,1,0
518,9188,1,1,0
520,6842,1,0,1
528,3161,1,1,0
532,4311,1,1,0
566,130753,1,1,0
570,2943,1,1,0
571,3202,1,1,0
578,1011,1,0,1
582,3252,1,1,0
604,130472,1,0,1
606,6842,1,1,0
609,189,1,0,1
620,4311,1,0,1
622,4311,1,1,0
637,4505,1,1,0
649,130753,1,1,0
650,1011,1,0,1
663,999,1,1,0
666,2010,1,1,0
666,4505,1,1,0
674,159,1,1,0
684,2347,1,1,0
712,9975,1,1,0
718,999,1,1,0
718,2029,1,1,0
728,2231,1,1,0
729,999,1,0,1
735,3202,1,0,1
751,1514,1,0,1
766,189,1,0,1
771,2029,1,1,0
784,1011,1,0,1
791,2231,1,0,1
791,4505,1,0,1
793,7781,1,1,0
803,1011,1,1,0
804,6842,1,1,0
813,1514,1,0,1
821,8001,1,1,0
835,1890,1,0,1
838,1011,1,1,0
842,2231,1,1,0
848,10769,1,1,0
869,189,1,1,0
873,130472,1,0,1
875,2231,1,1,0
879,2010,1,0,1
911,2586,1,1,0
921,3202,1,1,0
933,8001,1,1,0
940,1011,1,0,1
946,2029,1,1,0
955,3252,1,0,1
956,3252,1,0,1
966,159,1,0,1
979,12644,1,1,0
983,1011,1,0,1
988,1011,1,0,1
990,130753,1,0,1
997,130753,1,0,1
1 tick neuron_idx attempted accepted rejected
2 5 5519 1 1 0
3 13 2586 1 1 0
4 15 189 1 1 0
5 15 1890 1 1 0
6 26 4505 1 1 0
7 32 2586 1 0 1
8 60 2994 1 1 0
9 64 130472 1 1 0
10 98 3202 1 1 0
11 98 4026 1 1 0
12 100 9975 1 1 0
13 103 3202 1 0 1
14 104 3202 1 0 1
15 128 9188 1 1 0
16 130 2010 1 0 1
17 169 4505 1 1 0
18 177 6842 1 1 0
19 207 2970 1 1 0
20 213 5519 1 0 1
21 224 2347 1 0 1
22 264 3252 1 0 1
23 294 2535 1 1 0
24 299 2231 1 1 0
25 302 7781 1 0 1
26 303 130753 1 1 0
27 326 2970 1 1 0
28 342 6842 1 1 0
29 350 7781 1 1 0
30 354 2010 1 1 0
31 354 4311 1 1 0
32 361 1890 1 1 0
33 373 1011 1 1 0
34 390 1514 1 0 1
35 418 1514 1 1 0
36 427 4505 1 0 1
37 442 2535 1 0 1
38 442 5519 1 1 0
39 452 2010 1 1 0
40 454 130472 1 1 0
41 472 2994 1 1 0
42 477 999 1 1 0
43 479 131226 1 0 1
44 480 4026 1 1 0
45 518 9188 1 1 0
46 520 6842 1 0 1
47 528 3161 1 1 0
48 532 4311 1 1 0
49 566 130753 1 1 0
50 570 2943 1 1 0
51 571 3202 1 1 0
52 578 1011 1 0 1
53 582 3252 1 1 0
54 604 130472 1 0 1
55 606 6842 1 1 0
56 609 189 1 0 1
57 620 4311 1 0 1
58 622 4311 1 1 0
59 637 4505 1 1 0
60 649 130753 1 1 0
61 650 1011 1 0 1
62 663 999 1 1 0
63 666 2010 1 1 0
64 666 4505 1 1 0
65 674 159 1 1 0
66 684 2347 1 1 0
67 712 9975 1 1 0
68 718 999 1 1 0
69 718 2029 1 1 0
70 728 2231 1 1 0
71 729 999 1 0 1
72 735 3202 1 0 1
73 751 1514 1 0 1
74 766 189 1 0 1
75 771 2029 1 1 0
76 784 1011 1 0 1
77 791 2231 1 0 1
78 791 4505 1 0 1
79 793 7781 1 1 0
80 803 1011 1 1 0
81 804 6842 1 1 0
82 813 1514 1 0 1
83 821 8001 1 1 0
84 835 1890 1 0 1
85 838 1011 1 1 0
86 842 2231 1 1 0
87 848 10769 1 1 0
88 869 189 1 1 0
89 873 130472 1 0 1
90 875 2231 1 1 0
91 879 2010 1 0 1
92 911 2586 1 1 0
93 921 3202 1 1 0
94 933 8001 1 1 0
95 940 1011 1 0 1
96 946 2029 1 1 0
97 955 3252 1 0 1
98 956 3252 1 0 1
99 966 159 1 0 1
100 979 12644 1 1 0
101 983 1011 1 0 1
102 988 1011 1 0 1
103 990 130753 1 0 1
104 997 130753 1 0 1
@@ -0,0 +1,17 @@
{
"sealed_source_sha256": {
"ag_gpu": "69f5d893f47dafff4ef7c3186c3df0b9014666b32c8f4e943b57016bec92b18a",
"ag_worker": "21ceec65fe42581dc55872010e0025d660e80358905f1cf4df1dadf341a3b291",
"ae_backend": "03758d07572f4b44d272059d9308fac534268ad201b57bdd77d69fee95e67278",
"af_queue": "d72003d98f0f1624b12126eff50bd361c43d888f4a64d90ba9247a58976f1961"
},
"candidate_sha256": "af1975ba5e5e700208c0a598d3cbe648a3cf10885c6231239b6e4b28f76d173b",
"source_diff_sha256": "0584f865885b18e6a36870a7ecfbbc98d7a94274fa5e9e073e7cf97597d78a03",
"module_globals_patched": false,
"only_dynamics_change": "fixed zero-initialized 0/18-step h32 delay before unchanged end g write",
"diagnostic_additions": [
"generated/applied/pending trace split",
"fixed-sequence bitwise audit",
"source provenance and final APL state disclosure"
]
}
@@ -0,0 +1,168 @@
{
"case": "novel_to_aj-matched_energy-01-s1073741825",
"complete": true,
"pass_all": true,
"pass_all_scope": "internal finite/recording/event-count integrity only; independent equivalence not claimed",
"steps": 1000,
"completed_ticks": 1000,
"nodes": 166700,
"edges": 25582938,
"precision": "float64",
"apl_precision": "float32",
"state_units": "SI volts",
"total_spikes": 30288,
"requested": 103,
"accepted_requests": 66,
"rejected_requests": 37,
"arriving_edges": 14592029,
"accepted_arriving_edges": 13411778,
"counts_match_sparse_events": true,
"all_finite": true,
"record_history": false,
"apl_fast_edges_zeroed": 5845,
"kc_targets_present": 4064,
"effective_weights_raw_sha256": "a60a2846dd952916097cecd1d3daf74cf5e785818749e0ffd818b3ced1c58fd2",
"apl_component": {
"ok": true,
"protocol": "phase4ag-apl-v1",
"n_neurons": 166700,
"n_apl": 2,
"n_kc": 4064,
"dt_ms": 0.1,
"files_sha256": {
"input_matrix.npy": "c4d3df703ea5f1d7402b8255cfa19d9744139ad1048827c23b151d8ba766fec6",
"output_matrix.npy": "e2d0a1ccd740e6777245ebf2efcd88bf5e1da9e47308c63ec8e83d451e134a73",
"kc_globals.npy": "97a570aafa089f93e642b2bb07e3a3322dabb14c3c7dd431f0c8d2b3b7951fdd",
"apl_globals.npy": "8388c8795d49cfe5b14fda54f76ef3a35030c62ba87bd8ca6334a2dcdf186f19"
},
"array_sha256": {
"input_matrix.npy": "528a5f6f5ffe424f323c5a44695db4a7cf32570709832eff2f37f49e85c92c3e",
"output_matrix.npy": "0dcf02cdb7836ab72da32ac47f5682ca33e25f63a8a662a8452d4ea9d46babb9",
"kc_globals.npy": "9e990d10a63b0f74cd7bbbdc5369082f24d5246487af944ba289bc6bf48d4b75",
"apl_globals.npy": "979ef88dff30d41168ce9b377a006ccb3cd034b2dce86d54923ca0f4b87cb6a6"
},
"decay_f32_bits": "3f7eb923",
"gain_f32_bits": "3c23d70a",
"environment": {
"torch": "2.14.0+cu130",
"numpy": "2.2.6",
"cuda": "13.0",
"cudnn": 92400,
"device_name": "NVIDIA GeForce RTX 4090",
"device_index": 0,
"device_capability": [
8,
9
],
"deterministic_algorithms": false,
"cudnn_deterministic": false,
"cudnn_benchmark": false,
"cuda_matmul_allow_tf32": false,
"cudnn_allow_tf32": true,
"float32_matmul_precision": "highest",
"CUBLAS_WORKSPACE_CONFIG": null,
"precision_configuration_changed_by_component": false
},
"operator_sequence": "state.mul_(decay32); drive=mv(I32,spikes32); state.add_(drive); h=matmul(state,O32)*gain32",
"h_units": "legacy mV",
"initial_state": "float32 zeros"
},
"apl_schedule": "end, after threshold/reset and guarded arrivals, unconditional all KC",
"apl_si_conversion": "applied h32 -> float64 -> multiply float64 0.001 -> separate float64 subtraction",
"apl_delay_steps": 18,
"apl_timing": {
"pass_all": true,
"apl_delay_steps": 18,
"steps": 1000,
"pending_generated_count": 18,
"pending_initial_zero_prefix": 0,
"initial_padding_positive_zero": true,
"sample_bits_preserved": true,
"brain_tail_advanced": false,
"generated_rows": 1000,
"applied_generated_rows": 982,
"pending_shape": [
18,
4064
],
"pending_application_tick_start": 1000,
"pending_application_tick_stop_exclusive": 1018,
"pending_generated_tick_start": 982,
"pending_generated_tick_stop_exclusive": 1000,
"generated_trace": "apl-inhibition.float32.npy",
"applied_trace": "apl-applied.float32.npy",
"pending_trace": "apl-pending-tail.float32.npy",
"pending_raw_sha256": "1f855d145ac5c44a640e3374bdd66b3b772d840e04b81b6760ad728b5670c4fc",
"final_apl_state_float32": [
155.6795654296875,
172.2212677001953
],
"final_apl_state_u32_bits": [
1125887480,
1126971557
],
"final_apl_state_nonzero": true,
"pending_queue_drained": false,
"finite_generated_sequence_only": true,
"future_apl_decay_or_feedback_generated": false,
"closed_loop_branch_integrals_claimed_equal": false,
"biological_delay_measurement_claimed": false
},
"source_provenance": {
"sealed_source_sha256": {
"ag_gpu": "69f5d893f47dafff4ef7c3186c3df0b9014666b32c8f4e943b57016bec92b18a",
"ag_worker": "21ceec65fe42581dc55872010e0025d660e80358905f1cf4df1dadf341a3b291",
"ae_backend": "03758d07572f4b44d272059d9308fac534268ad201b57bdd77d69fee95e67278",
"af_queue": "d72003d98f0f1624b12126eff50bd361c43d888f4a64d90ba9247a58976f1961"
},
"candidate_sha256": "af1975ba5e5e700208c0a598d3cbe648a3cf10885c6231239b6e4b28f76d173b",
"source_diff_sha256": "0584f865885b18e6a36870a7ecfbbc98d7a94274fa5e9e073e7cf97597d78a03",
"module_globals_patched": false,
"only_dynamics_change": "fixed zero-initialized 0/18-step h32 delay before unchanged end g write",
"diagnostic_additions": [
"generated/applied/pending trace split",
"fixed-sequence bitwise audit",
"source provenance and final APL state disclosure"
]
},
"pending_generated_count": 18,
"pending_initial_zero_prefix": 0,
"pending_tail_shape": [
18,
4064
],
"future_generated_decay_tail_included": false,
"build": {
"sources": {
"author_ext.cpp": "208a937d17bbb041b9bf6b25b89264ee566830b60609e58491b44583d8541f15",
"author_ext.cu": "669f166e18ce9a3f63fc723db8b0a8b74f7fa4757194b1bd65b4cf6008a7787e"
},
"torch": "2.14.0+cu130",
"torch_cuda": "13.0",
"arch_list": "8.9",
"cuda_flags": [
"-O2",
"--fmad=false",
"--ftz=false",
"--prec-div=true",
"--prec-sqrt=true"
]
},
"sealed_ae_backend_sha256": "03758d07572f4b44d272059d9308fac534268ad201b57bdd77d69fee95e67278",
"shared_apl_component_oracle_limitation": true,
"oracle_validation_claim": false,
"learning": false,
"performance_runtime_claim": false,
"cpu_sync_each_tick": true,
"build_or_cache_seconds": 0.0028355879985610954,
"diagnostic_simulation_seconds": 5.283904928000993,
"wall_seconds": 6.365027777999785,
"peak_allocated_vram_bytes": 526523392,
"peak_reserved_vram_bytes": 541065216,
"input_sha256": {
"spec.json": "01b7167f144cfb840c4713085272654ed931b2dee52bd4563e01327cfbd492f0",
"requests.npz": "4e523d2ed0a30993a2c0338a6d8a8e8b81b1f726822ad5a3c391f6ca738944f9",
"base_weights.npy": "462839ffc3feb8f6c278044488082b1c8e410e7f23229d6b5e29d1b7042416a1",
"coefficients.json": "bde79d95ef0097b827d5faf4d5658eafc009d8e9fcef1fddd645c953823e3f64"
}
}

Some files were not shown because too many files have changed in this diff Show More