Seal Phase 4AM whole-brain plastic interface audit without learning claim
This commit is contained in:
+34
-13
@@ -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`。
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
+1673
File diff suppressed because it is too large
Load Diff
@@ -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"
|
||||
}
|
||||
+66
@@ -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
|
||||
}
|
||||
+45
@@ -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"
|
||||
}
|
||||
+38
@@ -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
|
||||
}
|
||||
+312
@@ -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": []
|
||||
}
|
||||
+97
@@ -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"
|
||||
}
|
||||
]
|
||||
+83
@@ -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
|
||||
}
|
||||
+14
@@ -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
|
||||
}
|
||||
+110
@@ -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
|
||||
|
+17
@@ -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"
|
||||
]
|
||||
}
|
||||
+168
@@ -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"
|
||||
}
|
||||
}
|
||||
+66
@@ -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
|
||||
}
|
||||
+45
@@ -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"
|
||||
}
|
||||
+38
@@ -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
|
||||
}
|
||||
+478
@@ -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": []
|
||||
}
|
||||
+97
@@ -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"
|
||||
}
|
||||
]
|
||||
+83
@@ -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
|
||||
}
|
||||
+14
@@ -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
|
||||
}
|
||||
+110
@@ -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
|
||||
|
+17
@@ -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"
|
||||
]
|
||||
}
|
||||
+168
@@ -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"
|
||||
}
|
||||
}
|
||||
+66
@@ -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
|
||||
}
|
||||
+45
@@ -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"
|
||||
}
|
||||
+38
@@ -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
|
||||
}
|
||||
+312
@@ -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": []
|
||||
}
|
||||
+97
@@ -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"
|
||||
}
|
||||
]
|
||||
+83
@@ -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
|
||||
}
|
||||
+14
@@ -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
|
||||
}
|
||||
+104
@@ -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
|
||||
|
+17
@@ -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"
|
||||
]
|
||||
}
|
||||
+168
@@ -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"
|
||||
}
|
||||
}
|
||||
+66
@@ -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
|
||||
}
|
||||
+45
@@ -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"
|
||||
}
|
||||
+38
@@ -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
|
||||
}
|
||||
+312
@@ -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": []
|
||||
}
|
||||
+97
@@ -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"
|
||||
}
|
||||
]
|
||||
+83
@@ -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
|
||||
}
|
||||
+14
@@ -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
|
||||
}
|
||||
+122
@@ -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
|
||||
|
+17
@@ -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"
|
||||
]
|
||||
}
|
||||
+168
@@ -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"
|
||||
}
|
||||
}
|
||||
+66
@@ -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
|
||||
}
|
||||
+45
@@ -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"
|
||||
}
|
||||
+38
@@ -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
|
||||
}
|
||||
+312
@@ -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": []
|
||||
}
|
||||
+97
@@ -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"
|
||||
}
|
||||
]
|
||||
+83
@@ -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
|
||||
}
|
||||
+14
@@ -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
|
||||
}
|
||||
+130
@@ -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
|
||||
|
+17
@@ -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"
|
||||
]
|
||||
}
|
||||
+168
@@ -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"
|
||||
}
|
||||
}
|
||||
+66
@@ -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
|
||||
}
|
||||
+45
@@ -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"
|
||||
}
|
||||
+38
@@ -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
|
||||
}
|
||||
+312
@@ -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": []
|
||||
}
|
||||
+97
@@ -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"
|
||||
}
|
||||
]
|
||||
+83
@@ -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
|
||||
}
|
||||
+14
@@ -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
|
||||
}
|
||||
+102
@@ -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
|
||||
|
+17
@@ -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"
|
||||
]
|
||||
}
|
||||
+168
@@ -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"
|
||||
}
|
||||
}
|
||||
+66
@@ -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
|
||||
}
|
||||
+45
@@ -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"
|
||||
}
|
||||
+38
@@ -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
|
||||
}
|
||||
+312
@@ -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": []
|
||||
}
|
||||
+97
@@ -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"
|
||||
}
|
||||
]
|
||||
+83
@@ -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
|
||||
}
|
||||
+14
@@ -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
|
||||
}
|
||||
+104
@@ -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
|
||||
|
+17
@@ -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"
|
||||
]
|
||||
}
|
||||
+168
@@ -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
Reference in New Issue
Block a user