Seal Phase4AE same-precision GPU numerical gate and audit limits

This commit is contained in:
Digital Drosophila Archive
2026-09-30 07:50:57 +08:00
parent 92241aea02
commit 1eb4c52cf7
648 changed files with 51363 additions and 22 deletions
@@ -0,0 +1,59 @@
{
"author_commit": "91bdd1e7dcf193f3e7ca5a8933497fcef63b7960",
"author_path": "/data/digital-drosophila/experiments/phase4ad-author-semantics/external-resources/model.py",
"author_sha256": "fc45837d7122c6ce2a7f3f2f23c515992e4b232aadb919efabb72337fac88e4e",
"case_arrays_sha256": "63fb734a967aee5f77709788ad9bd7d8783c2209c34f0e1d9aa6a0a8b7a6ecf5",
"case_spec_sha256": "11f07dd0a3e62b6ee66373022539a68daad766dce26fa759654f0201599f6703",
"common_interface_preserved": true,
"learning": false,
"original_poi_interface_adopted": false,
"precision": "float64",
"spec": {
"description": "Deterministically selected real induced graph; canonical edge IDs/counts and frozen signs.",
"dt_ms": 0.1,
"duration_ms": 50.0,
"model": {
"dt_ms": 0.1,
"membrane_tau_ms": 20.0,
"refractory_ms": 2.2,
"reset_potential_mv": -52.0,
"resting_potential_mv": -52.0,
"synaptic_delay_ms": 1.8,
"synaptic_tau_ms": 5.0,
"threshold_mv": -45.0,
"w_syn_mv_per_anatomical_synapse": 0.275
},
"name": "mixed_high_indegree",
"selection": {
"global_in_degree": 11526,
"negative_in_edges": 1403,
"positive_in_edges": 10076,
"stimulated_neuron_idx": [
494,
775,
61804,
62257,
62700,
62795,
63041,
65262,
66225,
66237,
67241,
67324,
67373,
68199,
68856,
70626
],
"target_body_id": 10009,
"target_neuron_idx": 5
},
"steps": 500,
"trace_queue": true,
"validate_queue_proxy": true
},
"trace_queue": true,
"validate_queue_proxy": true,
"whole_brain": false
}
@@ -0,0 +1,72 @@
{
"c0": -0.00025935108198051754,
"cg": 0.004937935295309027,
"cv": 0.9950124791926823,
"gd": 0.9801986733067553,
"metadata": {
"constant_values_are_double": true,
"float32_execution_note": "Brian NumPy scalar/array promotion and operation order must be matched separately; double coefficients alone do not assert float64 intermediate array arithmetic.",
"g_expression": "gd * old_g",
"hex": {
"c0": "-0x1.0ff306a505980p-12",
"cg": "0x1.439cce9a65d5bp-8",
"cv": "0x1.fd7246927d28bp-1",
"gd": "0x1.f5dc99badec5bp-1",
"reset": "-0x1.a9fbe76c8b43ap-5",
"seed_volt": "-0x1.6872b020c49bap-5",
"threshold": "-0x1.70a3d70a3d70ap-5"
},
"names": {
"c0": "_lio_8",
"cg": "_lio_9",
"cv": "_lio_10",
"gd": "_lio_2"
},
"provenance": {
"c0": {
"code_object": "default_neurons_stateupdater_codeobject_6",
"name": "_lio_8",
"namespace_dtype": "float64",
"source": "CodeObject.namespace"
},
"cg": {
"code_object": "default_neurons_stateupdater_codeobject_6",
"name": "_lio_9",
"namespace_dtype": "float64",
"source": "CodeObject.namespace"
},
"cv": {
"code_object": "default_neurons_stateupdater_codeobject_6",
"name": "_lio_10",
"namespace_dtype": "float64",
"source": "CodeObject.namespace"
},
"gd": {
"code_object": "default_neurons_stateupdater_codeobject_6",
"name": "_lio_2",
"namespace_dtype": "float64",
"source": "CodeObject.namespace"
},
"reset": {
"code_object": "default_neurons_spike_resetter_codeobject_6",
"name": "v_rst",
"namespace_dtype": "float64",
"source": "CodeObject.namespace"
},
"seed_volt": {
"source": "common request interface: unchanged v_th + 1 mV"
},
"threshold": {
"code_object": "default_neurons_spike_thresholder_codeobject_6",
"name": "v_th",
"namespace_dtype": "float64",
"source": "CodeObject.namespace"
}
},
"units": "SI volts and dimensionless coefficients",
"voltage_expression": "c0 + ((cg * old_g) + (cv * old_v))"
},
"reset": -0.052000000000000005,
"seed_volt": -0.044,
"threshold": -0.045
}
@@ -0,0 +1,14 @@
{
"backend": "Brian2 numpy runtime",
"packages": {
"brian2": "2.5.1",
"cython": "0.29.33",
"numpy": "1.22.3",
"pandas": "1.4.3",
"pyarrow": "11.0.0",
"scipy": "1.8.1",
"sympy": "1.12"
},
"platform": "Linux-5.15.0-194-generic-x86_64-with-glibc2.35",
"python": "3.10.12 (main, Aug 31 2026, 10:18:17) [GCC 11.4.0]"
}
@@ -0,0 +1,72 @@
{
"c0": -0.00025935108198051754,
"cg": 0.004937935295309027,
"cv": 0.9950124791926823,
"gd": 0.9801986733067553,
"metadata": {
"constant_values_are_double": true,
"float32_execution_note": "Brian NumPy scalar/array promotion and operation order must be matched separately; double coefficients alone do not assert float64 intermediate array arithmetic.",
"g_expression": "gd * old_g",
"hex": {
"c0": "-0x1.0ff306a505980p-12",
"cg": "0x1.439cce9a65d5bp-8",
"cv": "0x1.fd7246927d28bp-1",
"gd": "0x1.f5dc99badec5bp-1",
"reset": "-0x1.a9fbe76c8b43ap-5",
"seed_volt": "-0x1.6872b020c49bap-5",
"threshold": "-0x1.70a3d70a3d70ap-5"
},
"names": {
"c0": "_lio_8",
"cg": "_lio_9",
"cv": "_lio_10",
"gd": "_lio_2"
},
"provenance": {
"c0": {
"code_object": "default_neurons_stateupdater_codeobject_6",
"name": "_lio_8",
"namespace_dtype": "float64",
"source": "CodeObject.namespace"
},
"cg": {
"code_object": "default_neurons_stateupdater_codeobject_6",
"name": "_lio_9",
"namespace_dtype": "float64",
"source": "CodeObject.namespace"
},
"cv": {
"code_object": "default_neurons_stateupdater_codeobject_6",
"name": "_lio_10",
"namespace_dtype": "float64",
"source": "CodeObject.namespace"
},
"gd": {
"code_object": "default_neurons_stateupdater_codeobject_6",
"name": "_lio_2",
"namespace_dtype": "float64",
"source": "CodeObject.namespace"
},
"reset": {
"code_object": "default_neurons_spike_resetter_codeobject_6",
"name": "v_rst",
"namespace_dtype": "float64",
"source": "CodeObject.namespace"
},
"seed_volt": {
"source": "common request interface: unchanged v_th + 1 mV"
},
"threshold": {
"code_object": "default_neurons_spike_thresholder_codeobject_6",
"name": "v_th",
"namespace_dtype": "float64",
"source": "CodeObject.namespace"
}
},
"units": "SI volts and dimensionless coefficients",
"voltage_expression": "c0 + ((cg * old_g) + (cv * old_v))"
},
"reset": -0.052000000000000005,
"seed_volt": -0.044,
"threshold": -0.045
}
@@ -0,0 +1,122 @@
[
{
"active": true,
"code_objects": [],
"name": "default_neurons",
"order": 0,
"type": "NeuronGroup",
"when": "start"
},
{
"active": true,
"code_objects": [],
"name": "default_synapses",
"order": 0,
"type": "Synapses",
"when": "start"
},
{
"abstract_code": "not_refractory = timestep(t - lastspike, dt) >= timestep(rfc, dt)\n_g = g*exp(-dt*int(not_refractory)/tau)\n_v = g*tau*(-exp(dt*int(not_refractory)/t_mbr) + exp(dt*int(not_refractory)/tau))*exp(-dt*int(not_refractory)/t_mbr)*exp(-dt*int(not_refractory)/tau)/(t_mbr - tau) + v*exp(-dt*int(not_refractory)/t_mbr) + v_0 - v_0*exp(-dt*int(not_refractory)/t_mbr)\ng = _g\nv = _v",
"active": true,
"code_objects": [
{
"generated_code": "after_run:\n import numpy as _numpy\n from brian2.codegen.runtime.numpy_rt.numpy_rt import LazyArange\n # EMPTY_CODE_BLOCK -- overwrite in child template\nbefore_run:\n import numpy as _numpy\n from brian2.codegen.runtime.numpy_rt.numpy_rt import LazyArange\n # EMPTY_CODE_BLOCK -- overwrite in child template\nrun:\n import numpy as _numpy\n from brian2.codegen.runtime.numpy_rt.numpy_rt import LazyArange\n # scalar code\n _vectorisation_idx = 1\n dt = _array_defaultclock_dt[0]\n _lio_1 = (- dt) / tau\n _lio_2 = exp(_lio_1)\n _lio_3 = tau / (t_mbr - tau)\n _lio_4 = dt / t_mbr\n _lio_5 = dt / tau\n _lio_6 = (- dt) / t_mbr\n _lio_7 = v_0 - v_0\n _lio_8 = v_0 - (v_0 * exp(_lio_6))\n _lio_9 = ((_lio_3 * ((- exp(_lio_4)) + exp(_lio_5))) * exp(_lio_6)) * exp(_lio_1)\n _lio_10 = exp(_lio_6)\n # vector code\n _vectorisation_idx = LazyArange(N)\n g = _array_default_neurons_g.copy()\n lastspike = _array_default_neurons_lastspike\n rfc = _array_default_neurons_rfc\n v = _array_default_neurons_v.copy()\n t = _array_defaultclock_t[0]\n not_refractory = _array_default_neurons_not_refractory.copy()\n dt = _array_defaultclock_dt[0]\n not_refractory = timestep(t - lastspike, dt) >= timestep(rfc, dt)\n _g = _numpy.where(not_refractory, _lio_2 * g, g)\n _v = _numpy.where(not_refractory, _lio_8 + ((_lio_9 * g) + (_lio_10 * v)), _lio_7 + v)\n g[not_refractory] = _g[not_refractory]\n v[not_refractory] = _v[not_refractory]\n _array_default_neurons_g[:] = g\n _array_default_neurons_not_refractory[:] = not_refractory\n _array_default_neurons_v[:] = v\n",
"name": "default_neurons_stateupdater_codeobject"
}
],
"name": "default_neurons_stateupdater",
"order": 0,
"type": "StateUpdater",
"when": "groups"
},
{
"active": true,
"code_objects": [],
"name": "oracle_common_requests",
"order": 0,
"type": "NetworkOperation",
"when": "before_thresholds"
},
{
"abstract_code": "_cond = (v > v_th) and not_refractory",
"active": true,
"code_objects": [
{
"generated_code": "after_run:\n import numpy as _numpy\n from brian2.codegen.runtime.numpy_rt.numpy_rt import LazyArange\n _array_default_neurons__spikespace[-1] = 0\nbefore_run:\n import numpy as _numpy\n from brian2.codegen.runtime.numpy_rt.numpy_rt import LazyArange\n # EMPTY_CODE_BLOCK -- overwrite in child template\nrun:\n import numpy as _numpy\n from brian2.codegen.runtime.numpy_rt.numpy_rt import LazyArange\n numpy_True = _numpy.bool_(True)\n numpy_False = _numpy.bool_(False)\n # scalar code\n _vectorisation_idx = 1\n # vector code\n _vectorisation_idx = LazyArange(N)\n not_refractory = _array_default_neurons_not_refractory\n v = _array_default_neurons_v\n _cond = (v > v_th) & not_refractory\n if _cond is True or _cond is numpy_True:\n _events = _numpy.arange(N)\n elif _cond is False or _cond is numpy_False:\n _events = _numpy.array([])\n else:\n _events, = _cond.nonzero()\n _array_default_neurons__spikespace[-1] = len(_events)\n _array_default_neurons__spikespace[:len(_events)] = _events\n # Set the neuron to refractory\n _array_default_neurons_not_refractory[_events] = False\n _array_default_neurons_lastspike[_events] = _array_defaultclock_t[0]\n",
"name": "default_neurons_spike_thresholder_codeobject"
}
],
"name": "default_neurons_spike_thresholder",
"order": 0,
"type": "Thresholder",
"when": "thresholds"
},
{
"abstract_code": "_to_record_i = _source_i\n_to_record_t = _source_t",
"active": true,
"code_objects": [
{
"generated_code": "after_run:\n import numpy as _numpy\n from brian2.codegen.runtime.numpy_rt.numpy_rt import LazyArange\n # EMPTY_CODE_BLOCK -- overwrite in child template\nbefore_run:\n import numpy as _numpy\n from brian2.codegen.runtime.numpy_rt.numpy_rt import LazyArange\n # EMPTY_CODE_BLOCK -- overwrite in child template\nrun:\n import numpy as _numpy\n from brian2.codegen.runtime.numpy_rt.numpy_rt import LazyArange\n _n_events = _array_default_neurons__spikespace[-1]\n if _n_events > 0:\n _events = _array_default_neurons__spikespace[:_n_events]\n # Take subgroups into account\n if _source_start != 0 or _source_stop != _source_N:\n _events = _events[(_events >= _source_start) & (_events < _source_stop)]\n _n_events = len(_events)\n if _n_events > 0:\n _vectorisation_idx = 1\n _curlen = _array_spikemonitor_N[0]\n _newlen = _curlen + _n_events\n _owner.resize(_newlen)\n _array_spikemonitor_N[0] = _newlen\n _vectorisation_idx = _events\n _idx = _events\n _source_t = _array_defaultclock_t[0]\n _source_i = _array_default_neurons_i[_idx]\n _to_record_i = _source_i\n _to_record_t = _source_t\n _dynamic_array_spikemonitor_t[_curlen:_newlen] = _to_record_t\n _dynamic_array_spikemonitor_i[_curlen:_newlen] = _to_record_i\n _array_spikemonitor_count[_events - _source_start] += 1\n",
"name": "spikemonitor_codeobject"
}
],
"name": "spikemonitor",
"order": 1,
"type": "SpikeMonitor",
"when": "thresholds"
},
{
"abstract_code": "g += w\n",
"active": true,
"code_objects": [
{
"generated_code": "after_run:\n import numpy as _numpy\n from brian2.codegen.runtime.numpy_rt.numpy_rt import LazyArange\n # EMPTY_CODE_BLOCK -- overwrite in child template\nbefore_run:\n import numpy as _numpy\n from brian2.codegen.runtime.numpy_rt.numpy_rt import LazyArange\n _owner.initialise_queue()\nrun:\n import numpy as _numpy\n from brian2.codegen.runtime.numpy_rt.numpy_rt import LazyArange\n _owner.push_spikes()\n",
"name": "default_synapses_pre_push_spikes"
},
{
"generated_code": "after_run:\n import numpy as _numpy\n from brian2.codegen.runtime.numpy_rt.numpy_rt import LazyArange\n # EMPTY_CODE_BLOCK -- overwrite in child template\nbefore_run:\n import numpy as _numpy\n from brian2.codegen.runtime.numpy_rt.numpy_rt import LazyArange\n # EMPTY_CODE_BLOCK -- overwrite in child template\nrun:\n import numpy as _numpy\n from brian2.codegen.runtime.numpy_rt.numpy_rt import LazyArange\n _spiking_synapses = _queue.peek()\n if len(_spiking_synapses):\n # scalar code\n # vector code\n _idx = _spiking_synapses\n _vectorisation_idx = _idx\n # Abstract code: g += w\n _postsynaptic_idx = _array_default_synapses__synaptic_post[_idx]\n not_refractory = _array_default_neurons_not_refractory[_postsynaptic_idx]\n w = _array_default_synapses_w[_idx]\n _numpy.add.at(_array_default_neurons_g, _postsynaptic_idx[not_refractory], w[not_refractory])\n # Advance the spike queue\n _queue.advance()\n",
"name": "default_synapses_pre_codeobject"
}
],
"name": "default_synapses_pre",
"order": -1,
"type": "SynapticPathway",
"when": "synapses"
},
{
"abstract_code": "v = v_rst; w = 0; g = 0 * mV",
"active": true,
"code_objects": [
{
"generated_code": "after_run:\n import numpy as _numpy\n from brian2.codegen.runtime.numpy_rt.numpy_rt import LazyArange\n # EMPTY_CODE_BLOCK -- overwrite in child template\nbefore_run:\n import numpy as _numpy\n from brian2.codegen.runtime.numpy_rt.numpy_rt import LazyArange\n # EMPTY_CODE_BLOCK -- overwrite in child template\nrun:\n import numpy as _numpy\n from brian2.codegen.runtime.numpy_rt.numpy_rt import LazyArange\n # scalar code\n _vectorisation_idx = 1\n w = 0\n # vector code\n _idx = _array_default_neurons__spikespace[:_array_default_neurons__spikespace[-1]]\n _vectorisation_idx = _idx\n v = v_rst\n g = 0.0\n _array_default_neurons_g[_idx] = g\n _array_default_neurons_v[_idx] = v\n",
"name": "default_neurons_spike_resetter_codeobject"
}
],
"name": "default_neurons_spike_resetter",
"order": 0,
"type": "Resetter",
"when": "resets"
},
{
"abstract_code": "_to_record_v = _source_v\n_to_record_g = _source_g\n_to_record_lastspike = _source_lastspike\n_to_record_not_refractory = _source_not_refractory",
"active": true,
"code_objects": [
{
"generated_code": "after_run:\n import numpy as _numpy\n from brian2.codegen.runtime.numpy_rt.numpy_rt import LazyArange\n # EMPTY_CODE_BLOCK -- overwrite in child template\nbefore_run:\n import numpy as _numpy\n from brian2.codegen.runtime.numpy_rt.numpy_rt import LazyArange\n # EMPTY_CODE_BLOCK -- overwrite in child template\nrun:\n import numpy as _numpy\n from brian2.codegen.runtime.numpy_rt.numpy_rt import LazyArange\n # Resize dynamic arrays\n _new_len = len(_dynamic_array_oracle_end_state_t) + 1\n _owner.resize(_new_len)\n # Store values\n _dynamic_array_oracle_end_state_t[-1] = _array_defaultclock_t[0]\n # scalar code\n _vectorisation_idx = 1\n # vector code\n _vectorisation_idx = _array_oracle_end_state__indices\n _idx = _array_oracle_end_state__indices\n _source_g = _array_default_neurons_g[_idx]\n _source_not_refractory = _array_default_neurons_not_refractory[_idx]\n _source_v = _array_default_neurons_v[_idx]\n _source_lastspike = _array_default_neurons_lastspike[_idx]\n _to_record_v = _source_v\n _to_record_g = _source_g\n _to_record_lastspike = _source_lastspike\n _to_record_not_refractory = _source_not_refractory\n _dynamic_array_oracle_end_state_v[-1, :] = _to_record_v\n _dynamic_array_oracle_end_state_g[-1, :] = _to_record_g\n _dynamic_array_oracle_end_state_lastspike[-1, :] = _to_record_lastspike\n _dynamic_array_oracle_end_state_not_refractory[-1, :] = _to_record_not_refractory\n",
"name": "oracle_end_state_codeobject"
}
],
"name": "oracle_end_state",
"order": 0,
"type": "StateMonitor",
"when": "end"
},
{
"active": true,
"code_objects": [],
"name": "zz_oracle_queue_installer",
"order": 1000000,
"type": "QueueInstaller",
"when": "end"
}
]
@@ -0,0 +1,129 @@
global_neuron_idx,local_index
5,0
21,1
44,2
494,3
775,4
1572,5
6667,6
15460,7
18811,8
40937,9
41813,10
42005,11
45077,12
45449,13
47004,14
47028,15
47491,16
47754,17
47782,18
48155,19
48221,20
48947,21
49476,22
49706,23
49809,24
50350,25
50455,26
50561,27
50622,28
50734,29
51102,30
51157,31
51608,32
52222,33
52352,34
52494,35
52515,36
53063,37
53324,38
54010,39
55100,40
56539,41
57201,42
57252,43
57612,44
59164,45
59365,46
60182,47
60450,48
61164,49
61707,50
61721,51
61804,52
62257,53
62700,54
62734,55
62795,56
63041,57
63173,58
63287,59
63339,60
63918,61
64210,62
64233,63
64335,64
64514,65
65262,66
65848,67
66225,68
66237,69
66541,70
66598,71
67072,72
67241,73
67284,74
67324,75
67373,76
67453,77
67537,78
67594,79
68074,80
68199,81
68506,82
68617,83
68656,84
68785,85
68856,86
69139,87
69462,88
69516,89
69809,90
69860,91
69887,92
70316,93
70626,94
70662,95
70897,96
70959,97
70995,98
71060,99
71215,100
71267,101
71440,102
71456,103
72060,104
72275,105
72322,106
72365,107
72473,108
72485,109
73026,110
73544,111
74878,112
74995,113
77390,114
78506,115
84964,116
87611,117
88823,118
89271,119
91986,120
96731,121
96909,122
97175,123
104999,124
105260,125
137444,126
140350,127
1 global_neuron_idx local_index
2 5 0
3 21 1
4 44 2
5 494 3
6 775 4
7 1572 5
8 6667 6
9 15460 7
10 18811 8
11 40937 9
12 41813 10
13 42005 11
14 45077 12
15 45449 13
16 47004 14
17 47028 15
18 47491 16
19 47754 17
20 47782 18
21 48155 19
22 48221 20
23 48947 21
24 49476 22
25 49706 23
26 49809 24
27 50350 25
28 50455 26
29 50561 27
30 50622 28
31 50734 29
32 51102 30
33 51157 31
34 51608 32
35 52222 33
36 52352 34
37 52494 35
38 52515 36
39 53063 37
40 53324 38
41 54010 39
42 55100 40
43 56539 41
44 57201 42
45 57252 43
46 57612 44
47 59164 45
48 59365 46
49 60182 47
50 60450 48
51 61164 49
52 61707 50
53 61721 51
54 61804 52
55 62257 53
56 62700 54
57 62734 55
58 62795 56
59 63041 57
60 63173 58
61 63287 59
62 63339 60
63 63918 61
64 64210 62
65 64233 63
66 64335 64
67 64514 65
68 65262 66
69 65848 67
70 66225 68
71 66237 69
72 66541 70
73 66598 71
74 67072 72
75 67241 73
76 67284 74
77 67324 75
78 67373 76
79 67453 77
80 67537 78
81 67594 79
82 68074 80
83 68199 81
84 68506 82
85 68617 83
86 68656 84
87 68785 85
88 68856 86
89 69139 87
90 69462 88
91 69516 89
92 69809 90
93 69860 91
94 69887 92
95 70316 93
96 70626 94
97 70662 95
98 70897 96
99 70959 97
100 70995 98
101 71060 99
102 71215 100
103 71267 101
104 71440 102
105 71456 103
106 72060 104
107 72275 105
108 72322 106
109 72365 107
110 72473 108
111 72485 109
112 73026 110
113 73544 111
114 74878 112
115 74995 113
116 77390 114
117 78506 115
118 84964 116
119 87611 117
120 88823 118
121 89271 119
122 91986 120
123 96731 121
124 96909 122
125 97175 123
126 104999 124
127 105260 125
128 137444 126
129 140350 127
@@ -0,0 +1,122 @@
[
{
"active": true,
"code_objects": [],
"name": "default_neurons",
"order": 0,
"type": "NeuronGroup",
"when": "start"
},
{
"active": true,
"code_objects": [],
"name": "default_synapses",
"order": 0,
"type": "Synapses",
"when": "start"
},
{
"abstract_code": "not_refractory = timestep(t - lastspike, dt) >= timestep(rfc, dt)\n_g = g*exp(-dt*int(not_refractory)/tau)\n_v = g*tau*(-exp(dt*int(not_refractory)/t_mbr) + exp(dt*int(not_refractory)/tau))*exp(-dt*int(not_refractory)/t_mbr)*exp(-dt*int(not_refractory)/tau)/(t_mbr - tau) + v*exp(-dt*int(not_refractory)/t_mbr) + v_0 - v_0*exp(-dt*int(not_refractory)/t_mbr)\ng = _g\nv = _v",
"active": true,
"code_objects": [
{
"generated_code": "after_run:\n import numpy as _numpy\n from brian2.codegen.runtime.numpy_rt.numpy_rt import LazyArange\n # EMPTY_CODE_BLOCK -- overwrite in child template\nbefore_run:\n import numpy as _numpy\n from brian2.codegen.runtime.numpy_rt.numpy_rt import LazyArange\n # EMPTY_CODE_BLOCK -- overwrite in child template\nrun:\n import numpy as _numpy\n from brian2.codegen.runtime.numpy_rt.numpy_rt import LazyArange\n # scalar code\n _vectorisation_idx = 1\n dt = _array_defaultclock_dt[0]\n _lio_1 = (- dt) / tau\n _lio_2 = exp(_lio_1)\n _lio_3 = tau / (t_mbr - tau)\n _lio_4 = dt / t_mbr\n _lio_5 = dt / tau\n _lio_6 = (- dt) / t_mbr\n _lio_7 = v_0 - v_0\n _lio_8 = v_0 - (v_0 * exp(_lio_6))\n _lio_9 = ((_lio_3 * ((- exp(_lio_4)) + exp(_lio_5))) * exp(_lio_6)) * exp(_lio_1)\n _lio_10 = exp(_lio_6)\n # vector code\n _vectorisation_idx = LazyArange(N)\n g = _array_default_neurons_g.copy()\n lastspike = _array_default_neurons_lastspike\n rfc = _array_default_neurons_rfc\n v = _array_default_neurons_v.copy()\n t = _array_defaultclock_t[0]\n not_refractory = _array_default_neurons_not_refractory.copy()\n dt = _array_defaultclock_dt[0]\n not_refractory = timestep(t - lastspike, dt) >= timestep(rfc, dt)\n _g = _numpy.where(not_refractory, _lio_2 * g, g)\n _v = _numpy.where(not_refractory, _lio_8 + ((_lio_9 * g) + (_lio_10 * v)), _lio_7 + v)\n g[not_refractory] = _g[not_refractory]\n v[not_refractory] = _v[not_refractory]\n _array_default_neurons_g[:] = g\n _array_default_neurons_not_refractory[:] = not_refractory\n _array_default_neurons_v[:] = v\n",
"name": "default_neurons_stateupdater_codeobject_6"
}
],
"name": "default_neurons_stateupdater",
"order": 0,
"type": "StateUpdater",
"when": "groups"
},
{
"active": true,
"code_objects": [],
"name": "oracle_common_requests",
"order": 0,
"type": "NetworkOperation",
"when": "before_thresholds"
},
{
"abstract_code": "_cond = (v > v_th) and not_refractory",
"active": true,
"code_objects": [
{
"generated_code": "after_run:\n import numpy as _numpy\n from brian2.codegen.runtime.numpy_rt.numpy_rt import LazyArange\n _array_default_neurons__spikespace[-1] = 0\nbefore_run:\n import numpy as _numpy\n from brian2.codegen.runtime.numpy_rt.numpy_rt import LazyArange\n # EMPTY_CODE_BLOCK -- overwrite in child template\nrun:\n import numpy as _numpy\n from brian2.codegen.runtime.numpy_rt.numpy_rt import LazyArange\n numpy_True = _numpy.bool_(True)\n numpy_False = _numpy.bool_(False)\n # scalar code\n _vectorisation_idx = 1\n # vector code\n _vectorisation_idx = LazyArange(N)\n not_refractory = _array_default_neurons_not_refractory\n v = _array_default_neurons_v\n _cond = (v > v_th) & not_refractory\n if _cond is True or _cond is numpy_True:\n _events = _numpy.arange(N)\n elif _cond is False or _cond is numpy_False:\n _events = _numpy.array([])\n else:\n _events, = _cond.nonzero()\n _array_default_neurons__spikespace[-1] = len(_events)\n _array_default_neurons__spikespace[:len(_events)] = _events\n # Set the neuron to refractory\n _array_default_neurons_not_refractory[_events] = False\n _array_default_neurons_lastspike[_events] = _array_defaultclock_t[0]\n",
"name": "default_neurons_spike_thresholder_codeobject_6"
}
],
"name": "default_neurons_spike_thresholder",
"order": 0,
"type": "Thresholder",
"when": "thresholds"
},
{
"abstract_code": "_to_record_i = _source_i\n_to_record_t = _source_t",
"active": true,
"code_objects": [
{
"generated_code": "after_run:\n import numpy as _numpy\n from brian2.codegen.runtime.numpy_rt.numpy_rt import LazyArange\n # EMPTY_CODE_BLOCK -- overwrite in child template\nbefore_run:\n import numpy as _numpy\n from brian2.codegen.runtime.numpy_rt.numpy_rt import LazyArange\n # EMPTY_CODE_BLOCK -- overwrite in child template\nrun:\n import numpy as _numpy\n from brian2.codegen.runtime.numpy_rt.numpy_rt import LazyArange\n _n_events = _array_default_neurons__spikespace[-1]\n if _n_events > 0:\n _events = _array_default_neurons__spikespace[:_n_events]\n # Take subgroups into account\n if _source_start != 0 or _source_stop != _source_N:\n _events = _events[(_events >= _source_start) & (_events < _source_stop)]\n _n_events = len(_events)\n if _n_events > 0:\n _vectorisation_idx = 1\n _curlen = _array_spikemonitor_N[0]\n _newlen = _curlen + _n_events\n _owner.resize(_newlen)\n _array_spikemonitor_N[0] = _newlen\n _vectorisation_idx = _events\n _idx = _events\n _source_t = _array_defaultclock_t[0]\n _source_i = _array_default_neurons_i[_idx]\n _to_record_i = _source_i\n _to_record_t = _source_t\n _dynamic_array_spikemonitor_t[_curlen:_newlen] = _to_record_t\n _dynamic_array_spikemonitor_i[_curlen:_newlen] = _to_record_i\n _array_spikemonitor_count[_events - _source_start] += 1\n",
"name": "spikemonitor_codeobject_1"
}
],
"name": "spikemonitor",
"order": 1,
"type": "SpikeMonitor",
"when": "thresholds"
},
{
"abstract_code": "g += w\n",
"active": true,
"code_objects": [
{
"generated_code": "after_run:\n import numpy as _numpy\n from brian2.codegen.runtime.numpy_rt.numpy_rt import LazyArange\n # EMPTY_CODE_BLOCK -- overwrite in child template\nbefore_run:\n import numpy as _numpy\n from brian2.codegen.runtime.numpy_rt.numpy_rt import LazyArange\n _owner.initialise_queue()\nrun:\n import numpy as _numpy\n from brian2.codegen.runtime.numpy_rt.numpy_rt import LazyArange\n _owner.push_spikes()\n",
"name": "default_synapses_pre_push_spikes"
},
{
"generated_code": "after_run:\n import numpy as _numpy\n from brian2.codegen.runtime.numpy_rt.numpy_rt import LazyArange\n # EMPTY_CODE_BLOCK -- overwrite in child template\nbefore_run:\n import numpy as _numpy\n from brian2.codegen.runtime.numpy_rt.numpy_rt import LazyArange\n # EMPTY_CODE_BLOCK -- overwrite in child template\nrun:\n import numpy as _numpy\n from brian2.codegen.runtime.numpy_rt.numpy_rt import LazyArange\n _spiking_synapses = _queue.peek()\n if len(_spiking_synapses):\n # scalar code\n # vector code\n _idx = _spiking_synapses\n _vectorisation_idx = _idx\n # Abstract code: g += w\n _postsynaptic_idx = _array_default_synapses__synaptic_post[_idx]\n not_refractory = _array_default_neurons_not_refractory[_postsynaptic_idx]\n w = _array_default_synapses_w[_idx]\n _numpy.add.at(_array_default_neurons_g, _postsynaptic_idx[not_refractory], w[not_refractory])\n # Advance the spike queue\n _queue.advance()\n",
"name": "default_synapses_pre_codeobject_6"
}
],
"name": "default_synapses_pre",
"order": -1,
"type": "SynapticPathway",
"when": "synapses"
},
{
"abstract_code": "v = v_rst; w = 0; g = 0 * mV",
"active": true,
"code_objects": [
{
"generated_code": "after_run:\n import numpy as _numpy\n from brian2.codegen.runtime.numpy_rt.numpy_rt import LazyArange\n # EMPTY_CODE_BLOCK -- overwrite in child template\nbefore_run:\n import numpy as _numpy\n from brian2.codegen.runtime.numpy_rt.numpy_rt import LazyArange\n # EMPTY_CODE_BLOCK -- overwrite in child template\nrun:\n import numpy as _numpy\n from brian2.codegen.runtime.numpy_rt.numpy_rt import LazyArange\n # scalar code\n _vectorisation_idx = 1\n w = 0\n # vector code\n _idx = _array_default_neurons__spikespace[:_array_default_neurons__spikespace[-1]]\n _vectorisation_idx = _idx\n v = v_rst\n g = 0.0\n _array_default_neurons_g[_idx] = g\n _array_default_neurons_v[_idx] = v\n",
"name": "default_neurons_spike_resetter_codeobject_6"
}
],
"name": "default_neurons_spike_resetter",
"order": 0,
"type": "Resetter",
"when": "resets"
},
{
"abstract_code": "_to_record_v = _source_v\n_to_record_g = _source_g\n_to_record_lastspike = _source_lastspike\n_to_record_not_refractory = _source_not_refractory",
"active": true,
"code_objects": [
{
"generated_code": "after_run:\n import numpy as _numpy\n from brian2.codegen.runtime.numpy_rt.numpy_rt import LazyArange\n # EMPTY_CODE_BLOCK -- overwrite in child template\nbefore_run:\n import numpy as _numpy\n from brian2.codegen.runtime.numpy_rt.numpy_rt import LazyArange\n # EMPTY_CODE_BLOCK -- overwrite in child template\nrun:\n import numpy as _numpy\n from brian2.codegen.runtime.numpy_rt.numpy_rt import LazyArange\n # Resize dynamic arrays\n _new_len = len(_dynamic_array_oracle_end_state_t) + 1\n _owner.resize(_new_len)\n # Store values\n _dynamic_array_oracle_end_state_t[-1] = _array_defaultclock_t[0]\n # scalar code\n _vectorisation_idx = 1\n # vector code\n _vectorisation_idx = _array_oracle_end_state__indices\n _idx = _array_oracle_end_state__indices\n _source_g = _array_default_neurons_g[_idx]\n _source_not_refractory = _array_default_neurons_not_refractory[_idx]\n _source_v = _array_default_neurons_v[_idx]\n _source_lastspike = _array_default_neurons_lastspike[_idx]\n _to_record_v = _source_v\n _to_record_g = _source_g\n _to_record_lastspike = _source_lastspike\n _to_record_not_refractory = _source_not_refractory\n _dynamic_array_oracle_end_state_v[-1, :] = _to_record_v\n _dynamic_array_oracle_end_state_g[-1, :] = _to_record_g\n _dynamic_array_oracle_end_state_lastspike[-1, :] = _to_record_lastspike\n _dynamic_array_oracle_end_state_not_refractory[-1, :] = _to_record_not_refractory\n",
"name": "oracle_end_state_codeobject_1"
}
],
"name": "oracle_end_state",
"order": 0,
"type": "StateMonitor",
"when": "end"
},
{
"active": true,
"code_objects": [],
"name": "zz_oracle_queue_installer",
"order": 1000000,
"type": "QueueInstaller",
"when": "end"
}
]
@@ -0,0 +1,48 @@
{
"all_neurons_keep_original_rfc": true,
"completeness_sha256": "1f01bd89fa27a1fc11336336d420c1100171017febe074713369fcf51db27363",
"connectivity_sha256": "21e51e4ecca6476d5116cfbf140b1fdd5a4a0a8ee976158f801dee8003f91ae2",
"dt_ms": 0.1,
"parameter_checks": {
"membrane_tau_ms": {
"author": 20.0,
"case": 20.0
},
"refractory_ms": {
"author": 2.2,
"case": 2.2
},
"reset_potential_mv": {
"author": -52.0,
"case": -52.0
},
"resting_potential_mv": {
"author": -52.0,
"case": -52.0
},
"synaptic_delay_ms": {
"author": 1.8,
"case": 1.8
},
"synaptic_tau_ms": {
"author": 5.0,
"case": 5.0
},
"threshold_mv": {
"author": -45.0,
"case": -45.0
},
"w_syn_mv_per_anatomical_synapse": {
"author": 0.275,
"case": 0.275
}
},
"poisson_helper_used": false,
"precision": "float64",
"queue_trace_enabled": true,
"request_interface": "before_thresholds; v=v_th+1mV only if not_refractory",
"source_parameters_modified": false,
"source_sha256": "fc45837d7122c6ce2a7f3f2f23c515992e4b232aadb919efabb72337fac88e4e",
"state_units": "SI volts, original dtype",
"steps": 500
}
@@ -0,0 +1,14 @@
{
"accepted_due_events": 556,
"advance_calls": 500,
"all_due_events_preserved": true,
"due_events": 626,
"installations": [
"default_synapses_pre_codeobject",
"default_synapses_pre_codeobject_6"
],
"ordering": "raw anatomical queue.peek local edge-index sequence; no sorting or filtering",
"peek_calls": 500,
"proxy_contract": "peek returns original object; advance and all other methods forward unchanged",
"trace_enabled": true
}
@@ -0,0 +1,11 @@
{
"schedule": [
"start",
"groups",
"thresholds",
"synapses",
"resets",
"end"
],
"summary": " object | part of | Clock dt | when | order | active\n------------------------------------------------+---------------------------------+----------------------+-------------------+---------+-------\ndefault_neurons_stateupdater (StateUpdater) | default_neurons (NeuronGroup) | 100. us (every step) | groups | 0 | yes \noracle_common_requests (NetworkOperation) | -- | 100. us (every step) | before_thresholds | 0 | yes \ndefault_neurons_spike_thresholder (Thresholder) | default_neurons (NeuronGroup) | 100. us (every step) | thresholds | 0 | yes \nspikemonitor (SpikeMonitor) | spikemonitor (SpikeMonitor) | 100. us (every step) | thresholds | 1 | yes \ndefault_synapses_pre (SynapticPathway) | default_synapses (Synapses) | 100. us (every step) | synapses | -1 | yes \ndefault_neurons_spike_resetter (Resetter) | default_neurons (NeuronGroup) | 100. us (every step) | resets | 0 | yes \noracle_end_state (StateMonitor) | oracle_end_state (StateMonitor) | 100. us (every step) | end | 0 | yes \nzz_oracle_queue_installer (QueueInstaller) | -- | 100. us (every step) | end | 1000000 | yes "
}
@@ -0,0 +1,33 @@
{
"arrival_arrays_excluded": "An unwrapped queue is deliberately not observed",
"exact_arrays": {
"applicable_count": true,
"coefficients": true,
"counts": true,
"external_accepted": true,
"external_step": true,
"external_target": true,
"external_weights": true,
"fired": true,
"g": true,
"history": true,
"initial_g": true,
"initial_v": true,
"local_idx": true,
"neuron_idx": true,
"nodes": true,
"not_refractory": true,
"ref": true,
"ref_history": true,
"rejected_count": true,
"request_accepted": true,
"request_attempted": true,
"request_count": true,
"request_rejected": true,
"step": true,
"v": true,
"weights": true
},
"pass": true,
"performed": true
}
@@ -0,0 +1,18 @@
{
"applicable_requests": 96,
"coefficient_file": "/data/digital-drosophila/experiments/phase4ae-author-runtime/oracle/mixed_high_indegree-float64/coefficients.json",
"complete": true,
"due_arrivals": 626,
"edges": 266,
"name": "mixed_high_indegree",
"nodes": 128,
"precision": "float64",
"queue_proxy_validated": true,
"queue_trace_enabled": true,
"rejected_requests": 0,
"requests": 96,
"source_unchanged": true,
"spikes": 106,
"state_file": "/data/digital-drosophila/experiments/phase4ae-author-runtime/oracle/mixed_high_indegree-float64/state.npz",
"steps": 500
}
@@ -0,0 +1,72 @@
{
"c0": -0.00025935108198051754,
"cg": 0.004937935295309027,
"cv": 0.9950124791926823,
"gd": 0.9801986733067553,
"metadata": {
"constant_values_are_double": true,
"float32_execution_note": "Brian NumPy scalar/array promotion and operation order must be matched separately; double coefficients alone do not assert float64 intermediate array arithmetic.",
"g_expression": "gd * old_g",
"hex": {
"c0": "-0x1.0ff306a505980p-12",
"cg": "0x1.439cce9a65d5bp-8",
"cv": "0x1.fd7246927d28bp-1",
"gd": "0x1.f5dc99badec5bp-1",
"reset": "-0x1.a9fbe76c8b43ap-5",
"seed_volt": "-0x1.6872b020c49bap-5",
"threshold": "-0x1.70a3d70a3d70ap-5"
},
"names": {
"c0": "_lio_8",
"cg": "_lio_9",
"cv": "_lio_10",
"gd": "_lio_2"
},
"provenance": {
"c0": {
"code_object": "default_neurons_stateupdater_codeobject_5",
"name": "_lio_8",
"namespace_dtype": "float64",
"source": "CodeObject.namespace"
},
"cg": {
"code_object": "default_neurons_stateupdater_codeobject_5",
"name": "_lio_9",
"namespace_dtype": "float64",
"source": "CodeObject.namespace"
},
"cv": {
"code_object": "default_neurons_stateupdater_codeobject_5",
"name": "_lio_10",
"namespace_dtype": "float64",
"source": "CodeObject.namespace"
},
"gd": {
"code_object": "default_neurons_stateupdater_codeobject_5",
"name": "_lio_2",
"namespace_dtype": "float64",
"source": "CodeObject.namespace"
},
"reset": {
"code_object": "default_neurons_spike_resetter_codeobject_5",
"name": "v_rst",
"namespace_dtype": "float64",
"source": "CodeObject.namespace"
},
"seed_volt": {
"source": "common request interface: unchanged v_th + 1 mV"
},
"threshold": {
"code_object": "default_neurons_spike_thresholder_codeobject_5",
"name": "v_th",
"namespace_dtype": "float64",
"source": "CodeObject.namespace"
}
},
"units": "SI volts and dimensionless coefficients",
"voltage_expression": "c0 + ((cg * old_g) + (cv * old_v))"
},
"reset": -0.052000000000000005,
"seed_volt": -0.044,
"threshold": -0.045
}
@@ -0,0 +1,114 @@
[
{
"active": true,
"code_objects": [],
"name": "default_neurons",
"order": 0,
"type": "NeuronGroup",
"when": "start"
},
{
"active": true,
"code_objects": [],
"name": "default_synapses",
"order": 0,
"type": "Synapses",
"when": "start"
},
{
"abstract_code": "not_refractory = timestep(t - lastspike, dt) >= timestep(rfc, dt)\n_g = g*exp(-dt*int(not_refractory)/tau)\n_v = g*tau*(-exp(dt*int(not_refractory)/t_mbr) + exp(dt*int(not_refractory)/tau))*exp(-dt*int(not_refractory)/t_mbr)*exp(-dt*int(not_refractory)/tau)/(t_mbr - tau) + v*exp(-dt*int(not_refractory)/t_mbr) + v_0 - v_0*exp(-dt*int(not_refractory)/t_mbr)\ng = _g\nv = _v",
"active": true,
"code_objects": [
{
"generated_code": "after_run:\n import numpy as _numpy\n from brian2.codegen.runtime.numpy_rt.numpy_rt import LazyArange\n # EMPTY_CODE_BLOCK -- overwrite in child template\nbefore_run:\n import numpy as _numpy\n from brian2.codegen.runtime.numpy_rt.numpy_rt import LazyArange\n # EMPTY_CODE_BLOCK -- overwrite in child template\nrun:\n import numpy as _numpy\n from brian2.codegen.runtime.numpy_rt.numpy_rt import LazyArange\n # scalar code\n _vectorisation_idx = 1\n dt = _array_defaultclock_dt[0]\n _lio_1 = (- dt) / tau\n _lio_2 = exp(_lio_1)\n _lio_3 = tau / (t_mbr - tau)\n _lio_4 = dt / t_mbr\n _lio_5 = dt / tau\n _lio_6 = (- dt) / t_mbr\n _lio_7 = v_0 - v_0\n _lio_8 = v_0 - (v_0 * exp(_lio_6))\n _lio_9 = ((_lio_3 * ((- exp(_lio_4)) + exp(_lio_5))) * exp(_lio_6)) * exp(_lio_1)\n _lio_10 = exp(_lio_6)\n # vector code\n _vectorisation_idx = LazyArange(N)\n g = _array_default_neurons_g.copy()\n lastspike = _array_default_neurons_lastspike\n rfc = _array_default_neurons_rfc\n v = _array_default_neurons_v.copy()\n t = _array_defaultclock_t[0]\n not_refractory = _array_default_neurons_not_refractory.copy()\n dt = _array_defaultclock_dt[0]\n not_refractory = timestep(t - lastspike, dt) >= timestep(rfc, dt)\n _g = _numpy.where(not_refractory, _lio_2 * g, g)\n _v = _numpy.where(not_refractory, _lio_8 + ((_lio_9 * g) + (_lio_10 * v)), _lio_7 + v)\n g[not_refractory] = _g[not_refractory]\n v[not_refractory] = _v[not_refractory]\n _array_default_neurons_g[:] = g\n _array_default_neurons_not_refractory[:] = not_refractory\n _array_default_neurons_v[:] = v\n",
"name": "default_neurons_stateupdater_codeobject"
}
],
"name": "default_neurons_stateupdater",
"order": 0,
"type": "StateUpdater",
"when": "groups"
},
{
"active": true,
"code_objects": [],
"name": "oracle_common_requests",
"order": 0,
"type": "NetworkOperation",
"when": "before_thresholds"
},
{
"abstract_code": "_cond = (v > v_th) and not_refractory",
"active": true,
"code_objects": [
{
"generated_code": "after_run:\n import numpy as _numpy\n from brian2.codegen.runtime.numpy_rt.numpy_rt import LazyArange\n _array_default_neurons__spikespace[-1] = 0\nbefore_run:\n import numpy as _numpy\n from brian2.codegen.runtime.numpy_rt.numpy_rt import LazyArange\n # EMPTY_CODE_BLOCK -- overwrite in child template\nrun:\n import numpy as _numpy\n from brian2.codegen.runtime.numpy_rt.numpy_rt import LazyArange\n numpy_True = _numpy.bool_(True)\n numpy_False = _numpy.bool_(False)\n # scalar code\n _vectorisation_idx = 1\n # vector code\n _vectorisation_idx = LazyArange(N)\n not_refractory = _array_default_neurons_not_refractory\n v = _array_default_neurons_v\n _cond = (v > v_th) & not_refractory\n if _cond is True or _cond is numpy_True:\n _events = _numpy.arange(N)\n elif _cond is False or _cond is numpy_False:\n _events = _numpy.array([])\n else:\n _events, = _cond.nonzero()\n _array_default_neurons__spikespace[-1] = len(_events)\n _array_default_neurons__spikespace[:len(_events)] = _events\n # Set the neuron to refractory\n _array_default_neurons_not_refractory[_events] = False\n _array_default_neurons_lastspike[_events] = _array_defaultclock_t[0]\n",
"name": "default_neurons_spike_thresholder_codeobject"
}
],
"name": "default_neurons_spike_thresholder",
"order": 0,
"type": "Thresholder",
"when": "thresholds"
},
{
"abstract_code": "_to_record_i = _source_i\n_to_record_t = _source_t",
"active": true,
"code_objects": [
{
"generated_code": "after_run:\n import numpy as _numpy\n from brian2.codegen.runtime.numpy_rt.numpy_rt import LazyArange\n # EMPTY_CODE_BLOCK -- overwrite in child template\nbefore_run:\n import numpy as _numpy\n from brian2.codegen.runtime.numpy_rt.numpy_rt import LazyArange\n # EMPTY_CODE_BLOCK -- overwrite in child template\nrun:\n import numpy as _numpy\n from brian2.codegen.runtime.numpy_rt.numpy_rt import LazyArange\n _n_events = _array_default_neurons__spikespace[-1]\n if _n_events > 0:\n _events = _array_default_neurons__spikespace[:_n_events]\n # Take subgroups into account\n if _source_start != 0 or _source_stop != _source_N:\n _events = _events[(_events >= _source_start) & (_events < _source_stop)]\n _n_events = len(_events)\n if _n_events > 0:\n _vectorisation_idx = 1\n _curlen = _array_spikemonitor_N[0]\n _newlen = _curlen + _n_events\n _owner.resize(_newlen)\n _array_spikemonitor_N[0] = _newlen\n _vectorisation_idx = _events\n _idx = _events\n _source_t = _array_defaultclock_t[0]\n _source_i = _array_default_neurons_i[_idx]\n _to_record_i = _source_i\n _to_record_t = _source_t\n _dynamic_array_spikemonitor_t[_curlen:_newlen] = _to_record_t\n _dynamic_array_spikemonitor_i[_curlen:_newlen] = _to_record_i\n _array_spikemonitor_count[_events - _source_start] += 1\n",
"name": "spikemonitor_codeobject"
}
],
"name": "spikemonitor",
"order": 1,
"type": "SpikeMonitor",
"when": "thresholds"
},
{
"abstract_code": "g += w\n",
"active": true,
"code_objects": [
{
"generated_code": "after_run:\n import numpy as _numpy\n from brian2.codegen.runtime.numpy_rt.numpy_rt import LazyArange\n # EMPTY_CODE_BLOCK -- overwrite in child template\nbefore_run:\n import numpy as _numpy\n from brian2.codegen.runtime.numpy_rt.numpy_rt import LazyArange\n _owner.initialise_queue()\nrun:\n import numpy as _numpy\n from brian2.codegen.runtime.numpy_rt.numpy_rt import LazyArange\n _owner.push_spikes()\n",
"name": "default_synapses_pre_push_spikes"
},
{
"generated_code": "after_run:\n import numpy as _numpy\n from brian2.codegen.runtime.numpy_rt.numpy_rt import LazyArange\n # EMPTY_CODE_BLOCK -- overwrite in child template\nbefore_run:\n import numpy as _numpy\n from brian2.codegen.runtime.numpy_rt.numpy_rt import LazyArange\n # EMPTY_CODE_BLOCK -- overwrite in child template\nrun:\n import numpy as _numpy\n from brian2.codegen.runtime.numpy_rt.numpy_rt import LazyArange\n _spiking_synapses = _queue.peek()\n if len(_spiking_synapses):\n # scalar code\n # vector code\n _idx = _spiking_synapses\n _vectorisation_idx = _idx\n # Abstract code: g += w\n _postsynaptic_idx = _array_default_synapses__synaptic_post[_idx]\n not_refractory = _array_default_neurons_not_refractory[_postsynaptic_idx]\n w = _array_default_synapses_w[_idx]\n _numpy.add.at(_array_default_neurons_g, _postsynaptic_idx[not_refractory], w[not_refractory])\n # Advance the spike queue\n _queue.advance()\n",
"name": "default_synapses_pre_codeobject"
}
],
"name": "default_synapses_pre",
"order": -1,
"type": "SynapticPathway",
"when": "synapses"
},
{
"abstract_code": "v = v_rst; w = 0; g = 0 * mV",
"active": true,
"code_objects": [
{
"generated_code": "after_run:\n import numpy as _numpy\n from brian2.codegen.runtime.numpy_rt.numpy_rt import LazyArange\n # EMPTY_CODE_BLOCK -- overwrite in child template\nbefore_run:\n import numpy as _numpy\n from brian2.codegen.runtime.numpy_rt.numpy_rt import LazyArange\n # EMPTY_CODE_BLOCK -- overwrite in child template\nrun:\n import numpy as _numpy\n from brian2.codegen.runtime.numpy_rt.numpy_rt import LazyArange\n # scalar code\n _vectorisation_idx = 1\n w = 0\n # vector code\n _idx = _array_default_neurons__spikespace[:_array_default_neurons__spikespace[-1]]\n _vectorisation_idx = _idx\n v = v_rst\n g = 0.0\n _array_default_neurons_g[_idx] = g\n _array_default_neurons_v[_idx] = v\n",
"name": "default_neurons_spike_resetter_codeobject"
}
],
"name": "default_neurons_spike_resetter",
"order": 0,
"type": "Resetter",
"when": "resets"
},
{
"abstract_code": "_to_record_v = _source_v\n_to_record_g = _source_g\n_to_record_lastspike = _source_lastspike\n_to_record_not_refractory = _source_not_refractory",
"active": true,
"code_objects": [
{
"generated_code": "after_run:\n import numpy as _numpy\n from brian2.codegen.runtime.numpy_rt.numpy_rt import LazyArange\n # EMPTY_CODE_BLOCK -- overwrite in child template\nbefore_run:\n import numpy as _numpy\n from brian2.codegen.runtime.numpy_rt.numpy_rt import LazyArange\n # EMPTY_CODE_BLOCK -- overwrite in child template\nrun:\n import numpy as _numpy\n from brian2.codegen.runtime.numpy_rt.numpy_rt import LazyArange\n # Resize dynamic arrays\n _new_len = len(_dynamic_array_oracle_end_state_t) + 1\n _owner.resize(_new_len)\n # Store values\n _dynamic_array_oracle_end_state_t[-1] = _array_defaultclock_t[0]\n # scalar code\n _vectorisation_idx = 1\n # vector code\n _vectorisation_idx = _array_oracle_end_state__indices\n _idx = _array_oracle_end_state__indices\n _source_g = _array_default_neurons_g[_idx]\n _source_not_refractory = _array_default_neurons_not_refractory[_idx]\n _source_v = _array_default_neurons_v[_idx]\n _source_lastspike = _array_default_neurons_lastspike[_idx]\n _to_record_v = _source_v\n _to_record_g = _source_g\n _to_record_lastspike = _source_lastspike\n _to_record_not_refractory = _source_not_refractory\n _dynamic_array_oracle_end_state_v[-1, :] = _to_record_v\n _dynamic_array_oracle_end_state_g[-1, :] = _to_record_g\n _dynamic_array_oracle_end_state_lastspike[-1, :] = _to_record_lastspike\n _dynamic_array_oracle_end_state_not_refractory[-1, :] = _to_record_not_refractory\n",
"name": "oracle_end_state_codeobject"
}
],
"name": "oracle_end_state",
"order": 0,
"type": "StateMonitor",
"when": "end"
}
]
@@ -0,0 +1,129 @@
global_neuron_idx,local_index
5,0
21,1
44,2
494,3
775,4
1572,5
6667,6
15460,7
18811,8
40937,9
41813,10
42005,11
45077,12
45449,13
47004,14
47028,15
47491,16
47754,17
47782,18
48155,19
48221,20
48947,21
49476,22
49706,23
49809,24
50350,25
50455,26
50561,27
50622,28
50734,29
51102,30
51157,31
51608,32
52222,33
52352,34
52494,35
52515,36
53063,37
53324,38
54010,39
55100,40
56539,41
57201,42
57252,43
57612,44
59164,45
59365,46
60182,47
60450,48
61164,49
61707,50
61721,51
61804,52
62257,53
62700,54
62734,55
62795,56
63041,57
63173,58
63287,59
63339,60
63918,61
64210,62
64233,63
64335,64
64514,65
65262,66
65848,67
66225,68
66237,69
66541,70
66598,71
67072,72
67241,73
67284,74
67324,75
67373,76
67453,77
67537,78
67594,79
68074,80
68199,81
68506,82
68617,83
68656,84
68785,85
68856,86
69139,87
69462,88
69516,89
69809,90
69860,91
69887,92
70316,93
70626,94
70662,95
70897,96
70959,97
70995,98
71060,99
71215,100
71267,101
71440,102
71456,103
72060,104
72275,105
72322,106
72365,107
72473,108
72485,109
73026,110
73544,111
74878,112
74995,113
77390,114
78506,115
84964,116
87611,117
88823,118
89271,119
91986,120
96731,121
96909,122
97175,123
104999,124
105260,125
137444,126
140350,127
1 global_neuron_idx local_index
2 5 0
3 21 1
4 44 2
5 494 3
6 775 4
7 1572 5
8 6667 6
9 15460 7
10 18811 8
11 40937 9
12 41813 10
13 42005 11
14 45077 12
15 45449 13
16 47004 14
17 47028 15
18 47491 16
19 47754 17
20 47782 18
21 48155 19
22 48221 20
23 48947 21
24 49476 22
25 49706 23
26 49809 24
27 50350 25
28 50455 26
29 50561 27
30 50622 28
31 50734 29
32 51102 30
33 51157 31
34 51608 32
35 52222 33
36 52352 34
37 52494 35
38 52515 36
39 53063 37
40 53324 38
41 54010 39
42 55100 40
43 56539 41
44 57201 42
45 57252 43
46 57612 44
47 59164 45
48 59365 46
49 60182 47
50 60450 48
51 61164 49
52 61707 50
53 61721 51
54 61804 52
55 62257 53
56 62700 54
57 62734 55
58 62795 56
59 63041 57
60 63173 58
61 63287 59
62 63339 60
63 63918 61
64 64210 62
65 64233 63
66 64335 64
67 64514 65
68 65262 66
69 65848 67
70 66225 68
71 66237 69
72 66541 70
73 66598 71
74 67072 72
75 67241 73
76 67284 74
77 67324 75
78 67373 76
79 67453 77
80 67537 78
81 67594 79
82 68074 80
83 68199 81
84 68506 82
85 68617 83
86 68656 84
87 68785 85
88 68856 86
89 69139 87
90 69462 88
91 69516 89
92 69809 90
93 69860 91
94 69887 92
95 70316 93
96 70626 94
97 70662 95
98 70897 96
99 70959 97
100 70995 98
101 71060 99
102 71215 100
103 71267 101
104 71440 102
105 71456 103
106 72060 104
107 72275 105
108 72322 106
109 72365 107
110 72473 108
111 72485 109
112 73026 110
113 73544 111
114 74878 112
115 74995 113
116 77390 114
117 78506 115
118 84964 116
119 87611 117
120 88823 118
121 89271 119
122 91986 120
123 96731 121
124 96909 122
125 97175 123
126 104999 124
127 105260 125
128 137444 126
129 140350 127
@@ -0,0 +1,114 @@
[
{
"active": true,
"code_objects": [],
"name": "default_neurons",
"order": 0,
"type": "NeuronGroup",
"when": "start"
},
{
"active": true,
"code_objects": [],
"name": "default_synapses",
"order": 0,
"type": "Synapses",
"when": "start"
},
{
"abstract_code": "not_refractory = timestep(t - lastspike, dt) >= timestep(rfc, dt)\n_g = g*exp(-dt*int(not_refractory)/tau)\n_v = g*tau*(-exp(dt*int(not_refractory)/t_mbr) + exp(dt*int(not_refractory)/tau))*exp(-dt*int(not_refractory)/t_mbr)*exp(-dt*int(not_refractory)/tau)/(t_mbr - tau) + v*exp(-dt*int(not_refractory)/t_mbr) + v_0 - v_0*exp(-dt*int(not_refractory)/t_mbr)\ng = _g\nv = _v",
"active": true,
"code_objects": [
{
"generated_code": "after_run:\n import numpy as _numpy\n from brian2.codegen.runtime.numpy_rt.numpy_rt import LazyArange\n # EMPTY_CODE_BLOCK -- overwrite in child template\nbefore_run:\n import numpy as _numpy\n from brian2.codegen.runtime.numpy_rt.numpy_rt import LazyArange\n # EMPTY_CODE_BLOCK -- overwrite in child template\nrun:\n import numpy as _numpy\n from brian2.codegen.runtime.numpy_rt.numpy_rt import LazyArange\n # scalar code\n _vectorisation_idx = 1\n dt = _array_defaultclock_dt[0]\n _lio_1 = (- dt) / tau\n _lio_2 = exp(_lio_1)\n _lio_3 = tau / (t_mbr - tau)\n _lio_4 = dt / t_mbr\n _lio_5 = dt / tau\n _lio_6 = (- dt) / t_mbr\n _lio_7 = v_0 - v_0\n _lio_8 = v_0 - (v_0 * exp(_lio_6))\n _lio_9 = ((_lio_3 * ((- exp(_lio_4)) + exp(_lio_5))) * exp(_lio_6)) * exp(_lio_1)\n _lio_10 = exp(_lio_6)\n # vector code\n _vectorisation_idx = LazyArange(N)\n g = _array_default_neurons_g.copy()\n lastspike = _array_default_neurons_lastspike\n rfc = _array_default_neurons_rfc\n v = _array_default_neurons_v.copy()\n t = _array_defaultclock_t[0]\n not_refractory = _array_default_neurons_not_refractory.copy()\n dt = _array_defaultclock_dt[0]\n not_refractory = timestep(t - lastspike, dt) >= timestep(rfc, dt)\n _g = _numpy.where(not_refractory, _lio_2 * g, g)\n _v = _numpy.where(not_refractory, _lio_8 + ((_lio_9 * g) + (_lio_10 * v)), _lio_7 + v)\n g[not_refractory] = _g[not_refractory]\n v[not_refractory] = _v[not_refractory]\n _array_default_neurons_g[:] = g\n _array_default_neurons_not_refractory[:] = not_refractory\n _array_default_neurons_v[:] = v\n",
"name": "default_neurons_stateupdater_codeobject_5"
}
],
"name": "default_neurons_stateupdater",
"order": 0,
"type": "StateUpdater",
"when": "groups"
},
{
"active": true,
"code_objects": [],
"name": "oracle_common_requests",
"order": 0,
"type": "NetworkOperation",
"when": "before_thresholds"
},
{
"abstract_code": "_cond = (v > v_th) and not_refractory",
"active": true,
"code_objects": [
{
"generated_code": "after_run:\n import numpy as _numpy\n from brian2.codegen.runtime.numpy_rt.numpy_rt import LazyArange\n _array_default_neurons__spikespace[-1] = 0\nbefore_run:\n import numpy as _numpy\n from brian2.codegen.runtime.numpy_rt.numpy_rt import LazyArange\n # EMPTY_CODE_BLOCK -- overwrite in child template\nrun:\n import numpy as _numpy\n from brian2.codegen.runtime.numpy_rt.numpy_rt import LazyArange\n numpy_True = _numpy.bool_(True)\n numpy_False = _numpy.bool_(False)\n # scalar code\n _vectorisation_idx = 1\n # vector code\n _vectorisation_idx = LazyArange(N)\n not_refractory = _array_default_neurons_not_refractory\n v = _array_default_neurons_v\n _cond = (v > v_th) & not_refractory\n if _cond is True or _cond is numpy_True:\n _events = _numpy.arange(N)\n elif _cond is False or _cond is numpy_False:\n _events = _numpy.array([])\n else:\n _events, = _cond.nonzero()\n _array_default_neurons__spikespace[-1] = len(_events)\n _array_default_neurons__spikespace[:len(_events)] = _events\n # Set the neuron to refractory\n _array_default_neurons_not_refractory[_events] = False\n _array_default_neurons_lastspike[_events] = _array_defaultclock_t[0]\n",
"name": "default_neurons_spike_thresholder_codeobject_5"
}
],
"name": "default_neurons_spike_thresholder",
"order": 0,
"type": "Thresholder",
"when": "thresholds"
},
{
"abstract_code": "_to_record_i = _source_i\n_to_record_t = _source_t",
"active": true,
"code_objects": [
{
"generated_code": "after_run:\n import numpy as _numpy\n from brian2.codegen.runtime.numpy_rt.numpy_rt import LazyArange\n # EMPTY_CODE_BLOCK -- overwrite in child template\nbefore_run:\n import numpy as _numpy\n from brian2.codegen.runtime.numpy_rt.numpy_rt import LazyArange\n # EMPTY_CODE_BLOCK -- overwrite in child template\nrun:\n import numpy as _numpy\n from brian2.codegen.runtime.numpy_rt.numpy_rt import LazyArange\n _n_events = _array_default_neurons__spikespace[-1]\n if _n_events > 0:\n _events = _array_default_neurons__spikespace[:_n_events]\n # Take subgroups into account\n if _source_start != 0 or _source_stop != _source_N:\n _events = _events[(_events >= _source_start) & (_events < _source_stop)]\n _n_events = len(_events)\n if _n_events > 0:\n _vectorisation_idx = 1\n _curlen = _array_spikemonitor_N[0]\n _newlen = _curlen + _n_events\n _owner.resize(_newlen)\n _array_spikemonitor_N[0] = _newlen\n _vectorisation_idx = _events\n _idx = _events\n _source_t = _array_defaultclock_t[0]\n _source_i = _array_default_neurons_i[_idx]\n _to_record_i = _source_i\n _to_record_t = _source_t\n _dynamic_array_spikemonitor_t[_curlen:_newlen] = _to_record_t\n _dynamic_array_spikemonitor_i[_curlen:_newlen] = _to_record_i\n _array_spikemonitor_count[_events - _source_start] += 1\n",
"name": "spikemonitor_codeobject_1"
}
],
"name": "spikemonitor",
"order": 1,
"type": "SpikeMonitor",
"when": "thresholds"
},
{
"abstract_code": "g += w\n",
"active": true,
"code_objects": [
{
"generated_code": "after_run:\n import numpy as _numpy\n from brian2.codegen.runtime.numpy_rt.numpy_rt import LazyArange\n # EMPTY_CODE_BLOCK -- overwrite in child template\nbefore_run:\n import numpy as _numpy\n from brian2.codegen.runtime.numpy_rt.numpy_rt import LazyArange\n _owner.initialise_queue()\nrun:\n import numpy as _numpy\n from brian2.codegen.runtime.numpy_rt.numpy_rt import LazyArange\n _owner.push_spikes()\n",
"name": "default_synapses_pre_push_spikes"
},
{
"generated_code": "after_run:\n import numpy as _numpy\n from brian2.codegen.runtime.numpy_rt.numpy_rt import LazyArange\n # EMPTY_CODE_BLOCK -- overwrite in child template\nbefore_run:\n import numpy as _numpy\n from brian2.codegen.runtime.numpy_rt.numpy_rt import LazyArange\n # EMPTY_CODE_BLOCK -- overwrite in child template\nrun:\n import numpy as _numpy\n from brian2.codegen.runtime.numpy_rt.numpy_rt import LazyArange\n _spiking_synapses = _queue.peek()\n if len(_spiking_synapses):\n # scalar code\n # vector code\n _idx = _spiking_synapses\n _vectorisation_idx = _idx\n # Abstract code: g += w\n _postsynaptic_idx = _array_default_synapses__synaptic_post[_idx]\n not_refractory = _array_default_neurons_not_refractory[_postsynaptic_idx]\n w = _array_default_synapses_w[_idx]\n _numpy.add.at(_array_default_neurons_g, _postsynaptic_idx[not_refractory], w[not_refractory])\n # Advance the spike queue\n _queue.advance()\n",
"name": "default_synapses_pre_codeobject_5"
}
],
"name": "default_synapses_pre",
"order": -1,
"type": "SynapticPathway",
"when": "synapses"
},
{
"abstract_code": "v = v_rst; w = 0; g = 0 * mV",
"active": true,
"code_objects": [
{
"generated_code": "after_run:\n import numpy as _numpy\n from brian2.codegen.runtime.numpy_rt.numpy_rt import LazyArange\n # EMPTY_CODE_BLOCK -- overwrite in child template\nbefore_run:\n import numpy as _numpy\n from brian2.codegen.runtime.numpy_rt.numpy_rt import LazyArange\n # EMPTY_CODE_BLOCK -- overwrite in child template\nrun:\n import numpy as _numpy\n from brian2.codegen.runtime.numpy_rt.numpy_rt import LazyArange\n # scalar code\n _vectorisation_idx = 1\n w = 0\n # vector code\n _idx = _array_default_neurons__spikespace[:_array_default_neurons__spikespace[-1]]\n _vectorisation_idx = _idx\n v = v_rst\n g = 0.0\n _array_default_neurons_g[_idx] = g\n _array_default_neurons_v[_idx] = v\n",
"name": "default_neurons_spike_resetter_codeobject_5"
}
],
"name": "default_neurons_spike_resetter",
"order": 0,
"type": "Resetter",
"when": "resets"
},
{
"abstract_code": "_to_record_v = _source_v\n_to_record_g = _source_g\n_to_record_lastspike = _source_lastspike\n_to_record_not_refractory = _source_not_refractory",
"active": true,
"code_objects": [
{
"generated_code": "after_run:\n import numpy as _numpy\n from brian2.codegen.runtime.numpy_rt.numpy_rt import LazyArange\n # EMPTY_CODE_BLOCK -- overwrite in child template\nbefore_run:\n import numpy as _numpy\n from brian2.codegen.runtime.numpy_rt.numpy_rt import LazyArange\n # EMPTY_CODE_BLOCK -- overwrite in child template\nrun:\n import numpy as _numpy\n from brian2.codegen.runtime.numpy_rt.numpy_rt import LazyArange\n # Resize dynamic arrays\n _new_len = len(_dynamic_array_oracle_end_state_t) + 1\n _owner.resize(_new_len)\n # Store values\n _dynamic_array_oracle_end_state_t[-1] = _array_defaultclock_t[0]\n # scalar code\n _vectorisation_idx = 1\n # vector code\n _vectorisation_idx = _array_oracle_end_state__indices\n _idx = _array_oracle_end_state__indices\n _source_g = _array_default_neurons_g[_idx]\n _source_not_refractory = _array_default_neurons_not_refractory[_idx]\n _source_v = _array_default_neurons_v[_idx]\n _source_lastspike = _array_default_neurons_lastspike[_idx]\n _to_record_v = _source_v\n _to_record_g = _source_g\n _to_record_lastspike = _source_lastspike\n _to_record_not_refractory = _source_not_refractory\n _dynamic_array_oracle_end_state_v[-1, :] = _to_record_v\n _dynamic_array_oracle_end_state_g[-1, :] = _to_record_g\n _dynamic_array_oracle_end_state_lastspike[-1, :] = _to_record_lastspike\n _dynamic_array_oracle_end_state_not_refractory[-1, :] = _to_record_not_refractory\n",
"name": "oracle_end_state_codeobject_1"
}
],
"name": "oracle_end_state",
"order": 0,
"type": "StateMonitor",
"when": "end"
}
]
@@ -0,0 +1,48 @@
{
"all_neurons_keep_original_rfc": true,
"completeness_sha256": "1f01bd89fa27a1fc11336336d420c1100171017febe074713369fcf51db27363",
"connectivity_sha256": "21e51e4ecca6476d5116cfbf140b1fdd5a4a0a8ee976158f801dee8003f91ae2",
"dt_ms": 0.1,
"parameter_checks": {
"membrane_tau_ms": {
"author": 20.0,
"case": 20.0
},
"refractory_ms": {
"author": 2.2,
"case": 2.2
},
"reset_potential_mv": {
"author": -52.0,
"case": -52.0
},
"resting_potential_mv": {
"author": -52.0,
"case": -52.0
},
"synaptic_delay_ms": {
"author": 1.8,
"case": 1.8
},
"synaptic_tau_ms": {
"author": 5.0,
"case": 5.0
},
"threshold_mv": {
"author": -45.0,
"case": -45.0
},
"w_syn_mv_per_anatomical_synapse": {
"author": 0.275,
"case": 0.275
}
},
"poisson_helper_used": false,
"precision": "float64",
"queue_trace_enabled": false,
"request_interface": "before_thresholds; v=v_th+1mV only if not_refractory",
"source_parameters_modified": false,
"source_sha256": "fc45837d7122c6ce2a7f3f2f23c515992e4b232aadb919efabb72337fac88e4e",
"state_units": "SI volts, original dtype",
"steps": 500
}
@@ -0,0 +1,11 @@
{
"accepted_due_events": 0,
"advance_calls": 0,
"all_due_events_preserved": null,
"due_events": 0,
"installations": [],
"ordering": "raw anatomical queue.peek local edge-index sequence; no sorting or filtering",
"peek_calls": 0,
"proxy_contract": "peek returns original object; advance and all other methods forward unchanged",
"trace_enabled": false
}
@@ -0,0 +1,11 @@
{
"schedule": [
"start",
"groups",
"thresholds",
"synapses",
"resets",
"end"
],
"summary": " object | part of | Clock dt | when | order | active\n------------------------------------------------+---------------------------------+----------------------+-------------------+-------+-------\ndefault_neurons_stateupdater (StateUpdater) | default_neurons (NeuronGroup) | 100. us (every step) | groups | 0 | yes \noracle_common_requests (NetworkOperation) | -- | 100. us (every step) | before_thresholds | 0 | yes \ndefault_neurons_spike_thresholder (Thresholder) | default_neurons (NeuronGroup) | 100. us (every step) | thresholds | 0 | yes \nspikemonitor (SpikeMonitor) | spikemonitor (SpikeMonitor) | 100. us (every step) | thresholds | 1 | yes \ndefault_synapses_pre (SynapticPathway) | default_synapses (Synapses) | 100. us (every step) | synapses | -1 | yes \ndefault_neurons_spike_resetter (Resetter) | default_neurons (NeuronGroup) | 100. us (every step) | resets | 0 | yes \noracle_end_state (StateMonitor) | oracle_end_state (StateMonitor) | 100. us (every step) | end | 0 | yes "
}