Files
digital-drosophila/models/male-cns-lif/wholebrain-plastic-interface-v1/test_workflow.py
T
2026-09-30 16:11:14 +08:00

56 lines
2.4 KiB
Python

"""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()