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,35 @@
{
"author_commit": "91bdd1e7dcf193f3e7ca5a8933497fcef63b7960",
"author_path": "/data/digital-drosophila/experiments/phase4ad-author-semantics/external-resources/model.py",
"author_sha256": "fc45837d7122c6ce2a7f3f2f23c515992e4b232aadb919efabb72337fac88e4e",
"case_arrays_sha256": "f3a900e9032754619549005131283cbaf87fdaa9093887a90a295589dac590fb",
"case_spec_sha256": "90850d6968a7832e415d0966b57e216a65f5ba8f63e488e497148b6525806d79",
"common_interface_preserved": true,
"learning": false,
"original_poi_interface_adopted": false,
"precision": "float32",
"spec": {
"description": "256-source signed fan-in, labelled duplicate/loop; refractory requests and external writes.",
"dt_ms": 0.1,
"duration_ms": 60.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": "fanin_bursts",
"selection": null,
"steps": 600,
"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_2",
"name": "_lio_8",
"namespace_dtype": "float64",
"source": "CodeObject.namespace"
},
"cg": {
"code_object": "default_neurons_stateupdater_codeobject_2",
"name": "_lio_9",
"namespace_dtype": "float64",
"source": "CodeObject.namespace"
},
"cv": {
"code_object": "default_neurons_stateupdater_codeobject_2",
"name": "_lio_10",
"namespace_dtype": "float64",
"source": "CodeObject.namespace"
},
"gd": {
"code_object": "default_neurons_stateupdater_codeobject_2",
"name": "_lio_2",
"namespace_dtype": "float64",
"source": "CodeObject.namespace"
},
"reset": {
"code_object": "default_neurons_spike_resetter_codeobject_2",
"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_2",
"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_2",
"name": "_lio_8",
"namespace_dtype": "float64",
"source": "CodeObject.namespace"
},
"cg": {
"code_object": "default_neurons_stateupdater_codeobject_2",
"name": "_lio_9",
"namespace_dtype": "float64",
"source": "CodeObject.namespace"
},
"cv": {
"code_object": "default_neurons_stateupdater_codeobject_2",
"name": "_lio_10",
"namespace_dtype": "float64",
"source": "CodeObject.namespace"
},
"gd": {
"code_object": "default_neurons_stateupdater_codeobject_2",
"name": "_lio_2",
"namespace_dtype": "float64",
"source": "CodeObject.namespace"
},
"reset": {
"code_object": "default_neurons_spike_resetter_codeobject_2",
"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_2",
"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,162 @@
[
{
"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"
},
{
"active": true,
"code_objects": [],
"name": "zz_external_arrivals",
"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": "",
"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 _the_period = _array_zz_external_sources__period_bins[0]\n _timebin = _array_defaultclock_timestep[0]\n _n_spikes = 0\n _lastindex_before = _array_zz_external_sources__lastindex[0]\n if _the_period > 0:\n _timebin %= _the_period\n # If there is a periodicity in the SpikeGenerator, we need to reset the\n # lastindex when the period has passed\n if _lastindex_before > 0 and _array_zz_external_sources__timebins[_lastindex_before - 1] >= _timebin:\n _lastindex_before = 0\n _n_spikes = _numpy.searchsorted(_array_zz_external_sources__timebins[_lastindex_before:],\n _timebin, side='right')\n _array_zz_external_sources__lastindex[0] = _lastindex_before + _n_spikes\n _indices = _array_zz_external_sources_neuron_index[_lastindex_before:_lastindex_before+_n_spikes]\n _array_zz_external_sources__spikespace[:_n_spikes] = _indices\n _array_zz_external_sources__spikespace[-1] = _n_spikes\n",
"name": "zz_external_sources_codeobject"
}
],
"name": "zz_external_sources",
"order": 0,
"type": "SpikeGeneratorGroup",
"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": "g_post += 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": "zz_external_arrivals_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_post += w\n _postsynaptic_idx = _array_zz_external_arrivals__synaptic_post[_idx]\n not_refractory = _array_default_neurons_not_refractory[_postsynaptic_idx]\n w = _array_zz_external_arrivals_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": "zz_external_arrivals_pre_codeobject"
}
],
"name": "zz_external_arrivals_pre",
"order": 0,
"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,258 @@
global_neuron_idx,local_index
-257,0
-256,1
-255,2
-254,3
-253,4
-252,5
-251,6
-250,7
-249,8
-248,9
-247,10
-246,11
-245,12
-244,13
-243,14
-242,15
-241,16
-240,17
-239,18
-238,19
-237,20
-236,21
-235,22
-234,23
-233,24
-232,25
-231,26
-230,27
-229,28
-228,29
-227,30
-226,31
-225,32
-224,33
-223,34
-222,35
-221,36
-220,37
-219,38
-218,39
-217,40
-216,41
-215,42
-214,43
-213,44
-212,45
-211,46
-210,47
-209,48
-208,49
-207,50
-206,51
-205,52
-204,53
-203,54
-202,55
-201,56
-200,57
-199,58
-198,59
-197,60
-196,61
-195,62
-194,63
-193,64
-192,65
-191,66
-190,67
-189,68
-188,69
-187,70
-186,71
-185,72
-184,73
-183,74
-182,75
-181,76
-180,77
-179,78
-178,79
-177,80
-176,81
-175,82
-174,83
-173,84
-172,85
-171,86
-170,87
-169,88
-168,89
-167,90
-166,91
-165,92
-164,93
-163,94
-162,95
-161,96
-160,97
-159,98
-158,99
-157,100
-156,101
-155,102
-154,103
-153,104
-152,105
-151,106
-150,107
-149,108
-148,109
-147,110
-146,111
-145,112
-144,113
-143,114
-142,115
-141,116
-140,117
-139,118
-138,119
-137,120
-136,121
-135,122
-134,123
-133,124
-132,125
-131,126
-130,127
-129,128
-128,129
-127,130
-126,131
-125,132
-124,133
-123,134
-122,135
-121,136
-120,137
-119,138
-118,139
-117,140
-116,141
-115,142
-114,143
-113,144
-112,145
-111,146
-110,147
-109,148
-108,149
-107,150
-106,151
-105,152
-104,153
-103,154
-102,155
-101,156
-100,157
-99,158
-98,159
-97,160
-96,161
-95,162
-94,163
-93,164
-92,165
-91,166
-90,167
-89,168
-88,169
-87,170
-86,171
-85,172
-84,173
-83,174
-82,175
-81,176
-80,177
-79,178
-78,179
-77,180
-76,181
-75,182
-74,183
-73,184
-72,185
-71,186
-70,187
-69,188
-68,189
-67,190
-66,191
-65,192
-64,193
-63,194
-62,195
-61,196
-60,197
-59,198
-58,199
-57,200
-56,201
-55,202
-54,203
-53,204
-52,205
-51,206
-50,207
-49,208
-48,209
-47,210
-46,211
-45,212
-44,213
-43,214
-42,215
-41,216
-40,217
-39,218
-38,219
-37,220
-36,221
-35,222
-34,223
-33,224
-32,225
-31,226
-30,227
-29,228
-28,229
-27,230
-26,231
-25,232
-24,233
-23,234
-22,235
-21,236
-20,237
-19,238
-18,239
-17,240
-16,241
-15,242
-14,243
-13,244
-12,245
-11,246
-10,247
-9,248
-8,249
-7,250
-6,251
-5,252
-4,253
-3,254
-2,255
-1,256
1 global_neuron_idx local_index
2 -257 0
3 -256 1
4 -255 2
5 -254 3
6 -253 4
7 -252 5
8 -251 6
9 -250 7
10 -249 8
11 -248 9
12 -247 10
13 -246 11
14 -245 12
15 -244 13
16 -243 14
17 -242 15
18 -241 16
19 -240 17
20 -239 18
21 -238 19
22 -237 20
23 -236 21
24 -235 22
25 -234 23
26 -233 24
27 -232 25
28 -231 26
29 -230 27
30 -229 28
31 -228 29
32 -227 30
33 -226 31
34 -225 32
35 -224 33
36 -223 34
37 -222 35
38 -221 36
39 -220 37
40 -219 38
41 -218 39
42 -217 40
43 -216 41
44 -215 42
45 -214 43
46 -213 44
47 -212 45
48 -211 46
49 -210 47
50 -209 48
51 -208 49
52 -207 50
53 -206 51
54 -205 52
55 -204 53
56 -203 54
57 -202 55
58 -201 56
59 -200 57
60 -199 58
61 -198 59
62 -197 60
63 -196 61
64 -195 62
65 -194 63
66 -193 64
67 -192 65
68 -191 66
69 -190 67
70 -189 68
71 -188 69
72 -187 70
73 -186 71
74 -185 72
75 -184 73
76 -183 74
77 -182 75
78 -181 76
79 -180 77
80 -179 78
81 -178 79
82 -177 80
83 -176 81
84 -175 82
85 -174 83
86 -173 84
87 -172 85
88 -171 86
89 -170 87
90 -169 88
91 -168 89
92 -167 90
93 -166 91
94 -165 92
95 -164 93
96 -163 94
97 -162 95
98 -161 96
99 -160 97
100 -159 98
101 -158 99
102 -157 100
103 -156 101
104 -155 102
105 -154 103
106 -153 104
107 -152 105
108 -151 106
109 -150 107
110 -149 108
111 -148 109
112 -147 110
113 -146 111
114 -145 112
115 -144 113
116 -143 114
117 -142 115
118 -141 116
119 -140 117
120 -139 118
121 -138 119
122 -137 120
123 -136 121
124 -135 122
125 -134 123
126 -133 124
127 -132 125
128 -131 126
129 -130 127
130 -129 128
131 -128 129
132 -127 130
133 -126 131
134 -125 132
135 -124 133
136 -123 134
137 -122 135
138 -121 136
139 -120 137
140 -119 138
141 -118 139
142 -117 140
143 -116 141
144 -115 142
145 -114 143
146 -113 144
147 -112 145
148 -111 146
149 -110 147
150 -109 148
151 -108 149
152 -107 150
153 -106 151
154 -105 152
155 -104 153
156 -103 154
157 -102 155
158 -101 156
159 -100 157
160 -99 158
161 -98 159
162 -97 160
163 -96 161
164 -95 162
165 -94 163
166 -93 164
167 -92 165
168 -91 166
169 -90 167
170 -89 168
171 -88 169
172 -87 170
173 -86 171
174 -85 172
175 -84 173
176 -83 174
177 -82 175
178 -81 176
179 -80 177
180 -79 178
181 -78 179
182 -77 180
183 -76 181
184 -75 182
185 -74 183
186 -73 184
187 -72 185
188 -71 186
189 -70 187
190 -69 188
191 -68 189
192 -67 190
193 -66 191
194 -65 192
195 -64 193
196 -63 194
197 -62 195
198 -61 196
199 -60 197
200 -59 198
201 -58 199
202 -57 200
203 -56 201
204 -55 202
205 -54 203
206 -53 204
207 -52 205
208 -51 206
209 -50 207
210 -49 208
211 -48 209
212 -47 210
213 -46 211
214 -45 212
215 -44 213
216 -43 214
217 -42 215
218 -41 216
219 -40 217
220 -39 218
221 -38 219
222 -37 220
223 -36 221
224 -35 222
225 -34 223
226 -33 224
227 -32 225
228 -31 226
229 -30 227
230 -29 228
231 -28 229
232 -27 230
233 -26 231
234 -25 232
235 -24 233
236 -23 234
237 -22 235
238 -21 236
239 -20 237
240 -19 238
241 -18 239
242 -17 240
243 -16 241
244 -15 242
245 -14 243
246 -13 244
247 -12 245
248 -11 246
249 -10 247
250 -9 248
251 -8 249
252 -7 250
253 -6 251
254 -5 252
255 -4 253
256 -3 254
257 -2 255
258 -1 256
@@ -0,0 +1,162 @@
[
{
"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"
},
{
"active": true,
"code_objects": [],
"name": "zz_external_arrivals",
"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_2"
}
],
"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_2"
}
],
"name": "default_neurons_spike_thresholder",
"order": 0,
"type": "Thresholder",
"when": "thresholds"
},
{
"abstract_code": "",
"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 _the_period = _array_zz_external_sources__period_bins[0]\n _timebin = _array_defaultclock_timestep[0]\n _n_spikes = 0\n _lastindex_before = _array_zz_external_sources__lastindex[0]\n if _the_period > 0:\n _timebin %= _the_period\n # If there is a periodicity in the SpikeGenerator, we need to reset the\n # lastindex when the period has passed\n if _lastindex_before > 0 and _array_zz_external_sources__timebins[_lastindex_before - 1] >= _timebin:\n _lastindex_before = 0\n _n_spikes = _numpy.searchsorted(_array_zz_external_sources__timebins[_lastindex_before:],\n _timebin, side='right')\n _array_zz_external_sources__lastindex[0] = _lastindex_before + _n_spikes\n _indices = _array_zz_external_sources_neuron_index[_lastindex_before:_lastindex_before+_n_spikes]\n _array_zz_external_sources__spikespace[:_n_spikes] = _indices\n _array_zz_external_sources__spikespace[-1] = _n_spikes\n",
"name": "zz_external_sources_codeobject_2"
}
],
"name": "zz_external_sources",
"order": 0,
"type": "SpikeGeneratorGroup",
"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_2"
}
],
"name": "default_synapses_pre",
"order": -1,
"type": "SynapticPathway",
"when": "synapses"
},
{
"abstract_code": "g_post += 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": "zz_external_arrivals_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_post += w\n _postsynaptic_idx = _array_zz_external_arrivals__synaptic_post[_idx]\n not_refractory = _array_default_neurons_not_refractory[_postsynaptic_idx]\n w = _array_zz_external_arrivals_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": "zz_external_arrivals_pre_codeobject_2"
}
],
"name": "zz_external_arrivals_pre",
"order": 0,
"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_2"
}
],
"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": "d8163907696aec1bf853ecccbe301c50efb4abd5b1c76b9a3dfa34f0e9e36c20",
"connectivity_sha256": "87dfbd207929725101477715d0684af71971d93cb279c3e195704b2b939b3f86",
"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": "float32",
"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": 600
}
@@ -0,0 +1,14 @@
{
"accepted_due_events": 1285,
"advance_calls": 600,
"all_due_events_preserved": true,
"due_events": 1545,
"installations": [
"default_synapses_pre_codeobject",
"default_synapses_pre_codeobject_2"
],
"ordering": "raw anatomical queue.peek local edge-index sequence; no sorting or filtering",
"peek_calls": 600,
"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 \nzz_external_sources (SpikeGeneratorGroup) | zz_external_sources (SpikeGeneratorGroup) | 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 \nzz_external_arrivals_pre (SynapticPathway) | zz_external_arrivals (Synapses) | 100. us (every step) | synapses | 0 | 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": 1537,
"coefficient_file": "/data/digital-drosophila/experiments/phase4ae-author-runtime/oracle/fanin_bursts-float32/coefficients.json",
"complete": true,
"due_arrivals": 1545,
"edges": 258,
"name": "fanin_bursts",
"nodes": 257,
"precision": "float32",
"queue_proxy_validated": true,
"queue_trace_enabled": true,
"rejected_requests": 512,
"requests": 2049,
"source_unchanged": true,
"spikes": 1539,
"state_file": "/data/digital-drosophila/experiments/phase4ae-author-runtime/oracle/fanin_bursts-float32/state.npz",
"steps": 600
}
@@ -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_3",
"name": "_lio_8",
"namespace_dtype": "float64",
"source": "CodeObject.namespace"
},
"cg": {
"code_object": "default_neurons_stateupdater_codeobject_3",
"name": "_lio_9",
"namespace_dtype": "float64",
"source": "CodeObject.namespace"
},
"cv": {
"code_object": "default_neurons_stateupdater_codeobject_3",
"name": "_lio_10",
"namespace_dtype": "float64",
"source": "CodeObject.namespace"
},
"gd": {
"code_object": "default_neurons_stateupdater_codeobject_3",
"name": "_lio_2",
"namespace_dtype": "float64",
"source": "CodeObject.namespace"
},
"reset": {
"code_object": "default_neurons_spike_resetter_codeobject_3",
"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_3",
"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,154 @@
[
{
"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"
},
{
"active": true,
"code_objects": [],
"name": "zz_external_arrivals",
"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": "",
"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 _the_period = _array_zz_external_sources__period_bins[0]\n _timebin = _array_defaultclock_timestep[0]\n _n_spikes = 0\n _lastindex_before = _array_zz_external_sources__lastindex[0]\n if _the_period > 0:\n _timebin %= _the_period\n # If there is a periodicity in the SpikeGenerator, we need to reset the\n # lastindex when the period has passed\n if _lastindex_before > 0 and _array_zz_external_sources__timebins[_lastindex_before - 1] >= _timebin:\n _lastindex_before = 0\n _n_spikes = _numpy.searchsorted(_array_zz_external_sources__timebins[_lastindex_before:],\n _timebin, side='right')\n _array_zz_external_sources__lastindex[0] = _lastindex_before + _n_spikes\n _indices = _array_zz_external_sources_neuron_index[_lastindex_before:_lastindex_before+_n_spikes]\n _array_zz_external_sources__spikespace[:_n_spikes] = _indices\n _array_zz_external_sources__spikespace[-1] = _n_spikes\n",
"name": "zz_external_sources_codeobject"
}
],
"name": "zz_external_sources",
"order": 0,
"type": "SpikeGeneratorGroup",
"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": "g_post += 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": "zz_external_arrivals_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_post += w\n _postsynaptic_idx = _array_zz_external_arrivals__synaptic_post[_idx]\n not_refractory = _array_default_neurons_not_refractory[_postsynaptic_idx]\n w = _array_zz_external_arrivals_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": "zz_external_arrivals_pre_codeobject"
}
],
"name": "zz_external_arrivals_pre",
"order": 0,
"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,258 @@
global_neuron_idx,local_index
-257,0
-256,1
-255,2
-254,3
-253,4
-252,5
-251,6
-250,7
-249,8
-248,9
-247,10
-246,11
-245,12
-244,13
-243,14
-242,15
-241,16
-240,17
-239,18
-238,19
-237,20
-236,21
-235,22
-234,23
-233,24
-232,25
-231,26
-230,27
-229,28
-228,29
-227,30
-226,31
-225,32
-224,33
-223,34
-222,35
-221,36
-220,37
-219,38
-218,39
-217,40
-216,41
-215,42
-214,43
-213,44
-212,45
-211,46
-210,47
-209,48
-208,49
-207,50
-206,51
-205,52
-204,53
-203,54
-202,55
-201,56
-200,57
-199,58
-198,59
-197,60
-196,61
-195,62
-194,63
-193,64
-192,65
-191,66
-190,67
-189,68
-188,69
-187,70
-186,71
-185,72
-184,73
-183,74
-182,75
-181,76
-180,77
-179,78
-178,79
-177,80
-176,81
-175,82
-174,83
-173,84
-172,85
-171,86
-170,87
-169,88
-168,89
-167,90
-166,91
-165,92
-164,93
-163,94
-162,95
-161,96
-160,97
-159,98
-158,99
-157,100
-156,101
-155,102
-154,103
-153,104
-152,105
-151,106
-150,107
-149,108
-148,109
-147,110
-146,111
-145,112
-144,113
-143,114
-142,115
-141,116
-140,117
-139,118
-138,119
-137,120
-136,121
-135,122
-134,123
-133,124
-132,125
-131,126
-130,127
-129,128
-128,129
-127,130
-126,131
-125,132
-124,133
-123,134
-122,135
-121,136
-120,137
-119,138
-118,139
-117,140
-116,141
-115,142
-114,143
-113,144
-112,145
-111,146
-110,147
-109,148
-108,149
-107,150
-106,151
-105,152
-104,153
-103,154
-102,155
-101,156
-100,157
-99,158
-98,159
-97,160
-96,161
-95,162
-94,163
-93,164
-92,165
-91,166
-90,167
-89,168
-88,169
-87,170
-86,171
-85,172
-84,173
-83,174
-82,175
-81,176
-80,177
-79,178
-78,179
-77,180
-76,181
-75,182
-74,183
-73,184
-72,185
-71,186
-70,187
-69,188
-68,189
-67,190
-66,191
-65,192
-64,193
-63,194
-62,195
-61,196
-60,197
-59,198
-58,199
-57,200
-56,201
-55,202
-54,203
-53,204
-52,205
-51,206
-50,207
-49,208
-48,209
-47,210
-46,211
-45,212
-44,213
-43,214
-42,215
-41,216
-40,217
-39,218
-38,219
-37,220
-36,221
-35,222
-34,223
-33,224
-32,225
-31,226
-30,227
-29,228
-28,229
-27,230
-26,231
-25,232
-24,233
-23,234
-22,235
-21,236
-20,237
-19,238
-18,239
-17,240
-16,241
-15,242
-14,243
-13,244
-12,245
-11,246
-10,247
-9,248
-8,249
-7,250
-6,251
-5,252
-4,253
-3,254
-2,255
-1,256
1 global_neuron_idx local_index
2 -257 0
3 -256 1
4 -255 2
5 -254 3
6 -253 4
7 -252 5
8 -251 6
9 -250 7
10 -249 8
11 -248 9
12 -247 10
13 -246 11
14 -245 12
15 -244 13
16 -243 14
17 -242 15
18 -241 16
19 -240 17
20 -239 18
21 -238 19
22 -237 20
23 -236 21
24 -235 22
25 -234 23
26 -233 24
27 -232 25
28 -231 26
29 -230 27
30 -229 28
31 -228 29
32 -227 30
33 -226 31
34 -225 32
35 -224 33
36 -223 34
37 -222 35
38 -221 36
39 -220 37
40 -219 38
41 -218 39
42 -217 40
43 -216 41
44 -215 42
45 -214 43
46 -213 44
47 -212 45
48 -211 46
49 -210 47
50 -209 48
51 -208 49
52 -207 50
53 -206 51
54 -205 52
55 -204 53
56 -203 54
57 -202 55
58 -201 56
59 -200 57
60 -199 58
61 -198 59
62 -197 60
63 -196 61
64 -195 62
65 -194 63
66 -193 64
67 -192 65
68 -191 66
69 -190 67
70 -189 68
71 -188 69
72 -187 70
73 -186 71
74 -185 72
75 -184 73
76 -183 74
77 -182 75
78 -181 76
79 -180 77
80 -179 78
81 -178 79
82 -177 80
83 -176 81
84 -175 82
85 -174 83
86 -173 84
87 -172 85
88 -171 86
89 -170 87
90 -169 88
91 -168 89
92 -167 90
93 -166 91
94 -165 92
95 -164 93
96 -163 94
97 -162 95
98 -161 96
99 -160 97
100 -159 98
101 -158 99
102 -157 100
103 -156 101
104 -155 102
105 -154 103
106 -153 104
107 -152 105
108 -151 106
109 -150 107
110 -149 108
111 -148 109
112 -147 110
113 -146 111
114 -145 112
115 -144 113
116 -143 114
117 -142 115
118 -141 116
119 -140 117
120 -139 118
121 -138 119
122 -137 120
123 -136 121
124 -135 122
125 -134 123
126 -133 124
127 -132 125
128 -131 126
129 -130 127
130 -129 128
131 -128 129
132 -127 130
133 -126 131
134 -125 132
135 -124 133
136 -123 134
137 -122 135
138 -121 136
139 -120 137
140 -119 138
141 -118 139
142 -117 140
143 -116 141
144 -115 142
145 -114 143
146 -113 144
147 -112 145
148 -111 146
149 -110 147
150 -109 148
151 -108 149
152 -107 150
153 -106 151
154 -105 152
155 -104 153
156 -103 154
157 -102 155
158 -101 156
159 -100 157
160 -99 158
161 -98 159
162 -97 160
163 -96 161
164 -95 162
165 -94 163
166 -93 164
167 -92 165
168 -91 166
169 -90 167
170 -89 168
171 -88 169
172 -87 170
173 -86 171
174 -85 172
175 -84 173
176 -83 174
177 -82 175
178 -81 176
179 -80 177
180 -79 178
181 -78 179
182 -77 180
183 -76 181
184 -75 182
185 -74 183
186 -73 184
187 -72 185
188 -71 186
189 -70 187
190 -69 188
191 -68 189
192 -67 190
193 -66 191
194 -65 192
195 -64 193
196 -63 194
197 -62 195
198 -61 196
199 -60 197
200 -59 198
201 -58 199
202 -57 200
203 -56 201
204 -55 202
205 -54 203
206 -53 204
207 -52 205
208 -51 206
209 -50 207
210 -49 208
211 -48 209
212 -47 210
213 -46 211
214 -45 212
215 -44 213
216 -43 214
217 -42 215
218 -41 216
219 -40 217
220 -39 218
221 -38 219
222 -37 220
223 -36 221
224 -35 222
225 -34 223
226 -33 224
227 -32 225
228 -31 226
229 -30 227
230 -29 228
231 -28 229
232 -27 230
233 -26 231
234 -25 232
235 -24 233
236 -23 234
237 -22 235
238 -21 236
239 -20 237
240 -19 238
241 -18 239
242 -17 240
243 -16 241
244 -15 242
245 -14 243
246 -13 244
247 -12 245
248 -11 246
249 -10 247
250 -9 248
251 -8 249
252 -7 250
253 -6 251
254 -5 252
255 -4 253
256 -3 254
257 -2 255
258 -1 256
@@ -0,0 +1,154 @@
[
{
"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"
},
{
"active": true,
"code_objects": [],
"name": "zz_external_arrivals",
"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_3"
}
],
"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_3"
}
],
"name": "default_neurons_spike_thresholder",
"order": 0,
"type": "Thresholder",
"when": "thresholds"
},
{
"abstract_code": "",
"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 _the_period = _array_zz_external_sources__period_bins[0]\n _timebin = _array_defaultclock_timestep[0]\n _n_spikes = 0\n _lastindex_before = _array_zz_external_sources__lastindex[0]\n if _the_period > 0:\n _timebin %= _the_period\n # If there is a periodicity in the SpikeGenerator, we need to reset the\n # lastindex when the period has passed\n if _lastindex_before > 0 and _array_zz_external_sources__timebins[_lastindex_before - 1] >= _timebin:\n _lastindex_before = 0\n _n_spikes = _numpy.searchsorted(_array_zz_external_sources__timebins[_lastindex_before:],\n _timebin, side='right')\n _array_zz_external_sources__lastindex[0] = _lastindex_before + _n_spikes\n _indices = _array_zz_external_sources_neuron_index[_lastindex_before:_lastindex_before+_n_spikes]\n _array_zz_external_sources__spikespace[:_n_spikes] = _indices\n _array_zz_external_sources__spikespace[-1] = _n_spikes\n",
"name": "zz_external_sources_codeobject_3"
}
],
"name": "zz_external_sources",
"order": 0,
"type": "SpikeGeneratorGroup",
"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_3"
}
],
"name": "default_synapses_pre",
"order": -1,
"type": "SynapticPathway",
"when": "synapses"
},
{
"abstract_code": "g_post += 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": "zz_external_arrivals_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_post += w\n _postsynaptic_idx = _array_zz_external_arrivals__synaptic_post[_idx]\n not_refractory = _array_default_neurons_not_refractory[_postsynaptic_idx]\n w = _array_zz_external_arrivals_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": "zz_external_arrivals_pre_codeobject_3"
}
],
"name": "zz_external_arrivals_pre",
"order": 0,
"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_3"
}
],
"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": "d8163907696aec1bf853ecccbe301c50efb4abd5b1c76b9a3dfa34f0e9e36c20",
"connectivity_sha256": "87dfbd207929725101477715d0684af71971d93cb279c3e195704b2b939b3f86",
"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": "float32",
"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": 600
}
@@ -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 \nzz_external_sources (SpikeGeneratorGroup) | zz_external_sources (SpikeGeneratorGroup) | 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 \nzz_external_arrivals_pre (SynapticPathway) | zz_external_arrivals (Synapses) | 100. us (every step) | synapses | 0 | 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 "
}
@@ -0,0 +1,35 @@
{
"author_commit": "91bdd1e7dcf193f3e7ca5a8933497fcef63b7960",
"author_path": "/data/digital-drosophila/experiments/phase4ad-author-semantics/external-resources/model.py",
"author_sha256": "fc45837d7122c6ce2a7f3f2f23c515992e4b232aadb919efabb72337fac88e4e",
"case_arrays_sha256": "f3a900e9032754619549005131283cbaf87fdaa9093887a90a295589dac590fb",
"case_spec_sha256": "90850d6968a7832e415d0966b57e216a65f5ba8f63e488e497148b6525806d79",
"common_interface_preserved": true,
"learning": false,
"original_poi_interface_adopted": false,
"precision": "float64",
"spec": {
"description": "256-source signed fan-in, labelled duplicate/loop; refractory requests and external writes.",
"dt_ms": 0.1,
"duration_ms": 60.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": "fanin_bursts",
"selection": null,
"steps": 600,
"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_1",
"name": "_lio_8",
"namespace_dtype": "float64",
"source": "CodeObject.namespace"
},
"cg": {
"code_object": "default_neurons_stateupdater_codeobject_1",
"name": "_lio_9",
"namespace_dtype": "float64",
"source": "CodeObject.namespace"
},
"cv": {
"code_object": "default_neurons_stateupdater_codeobject_1",
"name": "_lio_10",
"namespace_dtype": "float64",
"source": "CodeObject.namespace"
},
"gd": {
"code_object": "default_neurons_stateupdater_codeobject_1",
"name": "_lio_2",
"namespace_dtype": "float64",
"source": "CodeObject.namespace"
},
"reset": {
"code_object": "default_neurons_spike_resetter_codeobject_1",
"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_1",
"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_1",
"name": "_lio_8",
"namespace_dtype": "float64",
"source": "CodeObject.namespace"
},
"cg": {
"code_object": "default_neurons_stateupdater_codeobject_1",
"name": "_lio_9",
"namespace_dtype": "float64",
"source": "CodeObject.namespace"
},
"cv": {
"code_object": "default_neurons_stateupdater_codeobject_1",
"name": "_lio_10",
"namespace_dtype": "float64",
"source": "CodeObject.namespace"
},
"gd": {
"code_object": "default_neurons_stateupdater_codeobject_1",
"name": "_lio_2",
"namespace_dtype": "float64",
"source": "CodeObject.namespace"
},
"reset": {
"code_object": "default_neurons_spike_resetter_codeobject_1",
"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_1",
"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,162 @@
[
{
"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"
},
{
"active": true,
"code_objects": [],
"name": "zz_external_arrivals",
"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": "",
"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 _the_period = _array_zz_external_sources__period_bins[0]\n _timebin = _array_defaultclock_timestep[0]\n _n_spikes = 0\n _lastindex_before = _array_zz_external_sources__lastindex[0]\n if _the_period > 0:\n _timebin %= _the_period\n # If there is a periodicity in the SpikeGenerator, we need to reset the\n # lastindex when the period has passed\n if _lastindex_before > 0 and _array_zz_external_sources__timebins[_lastindex_before - 1] >= _timebin:\n _lastindex_before = 0\n _n_spikes = _numpy.searchsorted(_array_zz_external_sources__timebins[_lastindex_before:],\n _timebin, side='right')\n _array_zz_external_sources__lastindex[0] = _lastindex_before + _n_spikes\n _indices = _array_zz_external_sources_neuron_index[_lastindex_before:_lastindex_before+_n_spikes]\n _array_zz_external_sources__spikespace[:_n_spikes] = _indices\n _array_zz_external_sources__spikespace[-1] = _n_spikes\n",
"name": "zz_external_sources_codeobject"
}
],
"name": "zz_external_sources",
"order": 0,
"type": "SpikeGeneratorGroup",
"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": "g_post += 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": "zz_external_arrivals_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_post += w\n _postsynaptic_idx = _array_zz_external_arrivals__synaptic_post[_idx]\n not_refractory = _array_default_neurons_not_refractory[_postsynaptic_idx]\n w = _array_zz_external_arrivals_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": "zz_external_arrivals_pre_codeobject"
}
],
"name": "zz_external_arrivals_pre",
"order": 0,
"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,258 @@
global_neuron_idx,local_index
-257,0
-256,1
-255,2
-254,3
-253,4
-252,5
-251,6
-250,7
-249,8
-248,9
-247,10
-246,11
-245,12
-244,13
-243,14
-242,15
-241,16
-240,17
-239,18
-238,19
-237,20
-236,21
-235,22
-234,23
-233,24
-232,25
-231,26
-230,27
-229,28
-228,29
-227,30
-226,31
-225,32
-224,33
-223,34
-222,35
-221,36
-220,37
-219,38
-218,39
-217,40
-216,41
-215,42
-214,43
-213,44
-212,45
-211,46
-210,47
-209,48
-208,49
-207,50
-206,51
-205,52
-204,53
-203,54
-202,55
-201,56
-200,57
-199,58
-198,59
-197,60
-196,61
-195,62
-194,63
-193,64
-192,65
-191,66
-190,67
-189,68
-188,69
-187,70
-186,71
-185,72
-184,73
-183,74
-182,75
-181,76
-180,77
-179,78
-178,79
-177,80
-176,81
-175,82
-174,83
-173,84
-172,85
-171,86
-170,87
-169,88
-168,89
-167,90
-166,91
-165,92
-164,93
-163,94
-162,95
-161,96
-160,97
-159,98
-158,99
-157,100
-156,101
-155,102
-154,103
-153,104
-152,105
-151,106
-150,107
-149,108
-148,109
-147,110
-146,111
-145,112
-144,113
-143,114
-142,115
-141,116
-140,117
-139,118
-138,119
-137,120
-136,121
-135,122
-134,123
-133,124
-132,125
-131,126
-130,127
-129,128
-128,129
-127,130
-126,131
-125,132
-124,133
-123,134
-122,135
-121,136
-120,137
-119,138
-118,139
-117,140
-116,141
-115,142
-114,143
-113,144
-112,145
-111,146
-110,147
-109,148
-108,149
-107,150
-106,151
-105,152
-104,153
-103,154
-102,155
-101,156
-100,157
-99,158
-98,159
-97,160
-96,161
-95,162
-94,163
-93,164
-92,165
-91,166
-90,167
-89,168
-88,169
-87,170
-86,171
-85,172
-84,173
-83,174
-82,175
-81,176
-80,177
-79,178
-78,179
-77,180
-76,181
-75,182
-74,183
-73,184
-72,185
-71,186
-70,187
-69,188
-68,189
-67,190
-66,191
-65,192
-64,193
-63,194
-62,195
-61,196
-60,197
-59,198
-58,199
-57,200
-56,201
-55,202
-54,203
-53,204
-52,205
-51,206
-50,207
-49,208
-48,209
-47,210
-46,211
-45,212
-44,213
-43,214
-42,215
-41,216
-40,217
-39,218
-38,219
-37,220
-36,221
-35,222
-34,223
-33,224
-32,225
-31,226
-30,227
-29,228
-28,229
-27,230
-26,231
-25,232
-24,233
-23,234
-22,235
-21,236
-20,237
-19,238
-18,239
-17,240
-16,241
-15,242
-14,243
-13,244
-12,245
-11,246
-10,247
-9,248
-8,249
-7,250
-6,251
-5,252
-4,253
-3,254
-2,255
-1,256
1 global_neuron_idx local_index
2 -257 0
3 -256 1
4 -255 2
5 -254 3
6 -253 4
7 -252 5
8 -251 6
9 -250 7
10 -249 8
11 -248 9
12 -247 10
13 -246 11
14 -245 12
15 -244 13
16 -243 14
17 -242 15
18 -241 16
19 -240 17
20 -239 18
21 -238 19
22 -237 20
23 -236 21
24 -235 22
25 -234 23
26 -233 24
27 -232 25
28 -231 26
29 -230 27
30 -229 28
31 -228 29
32 -227 30
33 -226 31
34 -225 32
35 -224 33
36 -223 34
37 -222 35
38 -221 36
39 -220 37
40 -219 38
41 -218 39
42 -217 40
43 -216 41
44 -215 42
45 -214 43
46 -213 44
47 -212 45
48 -211 46
49 -210 47
50 -209 48
51 -208 49
52 -207 50
53 -206 51
54 -205 52
55 -204 53
56 -203 54
57 -202 55
58 -201 56
59 -200 57
60 -199 58
61 -198 59
62 -197 60
63 -196 61
64 -195 62
65 -194 63
66 -193 64
67 -192 65
68 -191 66
69 -190 67
70 -189 68
71 -188 69
72 -187 70
73 -186 71
74 -185 72
75 -184 73
76 -183 74
77 -182 75
78 -181 76
79 -180 77
80 -179 78
81 -178 79
82 -177 80
83 -176 81
84 -175 82
85 -174 83
86 -173 84
87 -172 85
88 -171 86
89 -170 87
90 -169 88
91 -168 89
92 -167 90
93 -166 91
94 -165 92
95 -164 93
96 -163 94
97 -162 95
98 -161 96
99 -160 97
100 -159 98
101 -158 99
102 -157 100
103 -156 101
104 -155 102
105 -154 103
106 -153 104
107 -152 105
108 -151 106
109 -150 107
110 -149 108
111 -148 109
112 -147 110
113 -146 111
114 -145 112
115 -144 113
116 -143 114
117 -142 115
118 -141 116
119 -140 117
120 -139 118
121 -138 119
122 -137 120
123 -136 121
124 -135 122
125 -134 123
126 -133 124
127 -132 125
128 -131 126
129 -130 127
130 -129 128
131 -128 129
132 -127 130
133 -126 131
134 -125 132
135 -124 133
136 -123 134
137 -122 135
138 -121 136
139 -120 137
140 -119 138
141 -118 139
142 -117 140
143 -116 141
144 -115 142
145 -114 143
146 -113 144
147 -112 145
148 -111 146
149 -110 147
150 -109 148
151 -108 149
152 -107 150
153 -106 151
154 -105 152
155 -104 153
156 -103 154
157 -102 155
158 -101 156
159 -100 157
160 -99 158
161 -98 159
162 -97 160
163 -96 161
164 -95 162
165 -94 163
166 -93 164
167 -92 165
168 -91 166
169 -90 167
170 -89 168
171 -88 169
172 -87 170
173 -86 171
174 -85 172
175 -84 173
176 -83 174
177 -82 175
178 -81 176
179 -80 177
180 -79 178
181 -78 179
182 -77 180
183 -76 181
184 -75 182
185 -74 183
186 -73 184
187 -72 185
188 -71 186
189 -70 187
190 -69 188
191 -68 189
192 -67 190
193 -66 191
194 -65 192
195 -64 193
196 -63 194
197 -62 195
198 -61 196
199 -60 197
200 -59 198
201 -58 199
202 -57 200
203 -56 201
204 -55 202
205 -54 203
206 -53 204
207 -52 205
208 -51 206
209 -50 207
210 -49 208
211 -48 209
212 -47 210
213 -46 211
214 -45 212
215 -44 213
216 -43 214
217 -42 215
218 -41 216
219 -40 217
220 -39 218
221 -38 219
222 -37 220
223 -36 221
224 -35 222
225 -34 223
226 -33 224
227 -32 225
228 -31 226
229 -30 227
230 -29 228
231 -28 229
232 -27 230
233 -26 231
234 -25 232
235 -24 233
236 -23 234
237 -22 235
238 -21 236
239 -20 237
240 -19 238
241 -18 239
242 -17 240
243 -16 241
244 -15 242
245 -14 243
246 -13 244
247 -12 245
248 -11 246
249 -10 247
250 -9 248
251 -8 249
252 -7 250
253 -6 251
254 -5 252
255 -4 253
256 -3 254
257 -2 255
258 -1 256
@@ -0,0 +1,162 @@
[
{
"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"
},
{
"active": true,
"code_objects": [],
"name": "zz_external_arrivals",
"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_1"
}
],
"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_1"
}
],
"name": "default_neurons_spike_thresholder",
"order": 0,
"type": "Thresholder",
"when": "thresholds"
},
{
"abstract_code": "",
"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 _the_period = _array_zz_external_sources__period_bins[0]\n _timebin = _array_defaultclock_timestep[0]\n _n_spikes = 0\n _lastindex_before = _array_zz_external_sources__lastindex[0]\n if _the_period > 0:\n _timebin %= _the_period\n # If there is a periodicity in the SpikeGenerator, we need to reset the\n # lastindex when the period has passed\n if _lastindex_before > 0 and _array_zz_external_sources__timebins[_lastindex_before - 1] >= _timebin:\n _lastindex_before = 0\n _n_spikes = _numpy.searchsorted(_array_zz_external_sources__timebins[_lastindex_before:],\n _timebin, side='right')\n _array_zz_external_sources__lastindex[0] = _lastindex_before + _n_spikes\n _indices = _array_zz_external_sources_neuron_index[_lastindex_before:_lastindex_before+_n_spikes]\n _array_zz_external_sources__spikespace[:_n_spikes] = _indices\n _array_zz_external_sources__spikespace[-1] = _n_spikes\n",
"name": "zz_external_sources_codeobject_1"
}
],
"name": "zz_external_sources",
"order": 0,
"type": "SpikeGeneratorGroup",
"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_1"
}
],
"name": "default_synapses_pre",
"order": -1,
"type": "SynapticPathway",
"when": "synapses"
},
{
"abstract_code": "g_post += 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": "zz_external_arrivals_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_post += w\n _postsynaptic_idx = _array_zz_external_arrivals__synaptic_post[_idx]\n not_refractory = _array_default_neurons_not_refractory[_postsynaptic_idx]\n w = _array_zz_external_arrivals_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": "zz_external_arrivals_pre_codeobject_1"
}
],
"name": "zz_external_arrivals_pre",
"order": 0,
"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_1"
}
],
"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": "d8163907696aec1bf853ecccbe301c50efb4abd5b1c76b9a3dfa34f0e9e36c20",
"connectivity_sha256": "87dfbd207929725101477715d0684af71971d93cb279c3e195704b2b939b3f86",
"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": 600
}
@@ -0,0 +1,14 @@
{
"accepted_due_events": 1285,
"advance_calls": 600,
"all_due_events_preserved": true,
"due_events": 1545,
"installations": [
"default_synapses_pre_codeobject",
"default_synapses_pre_codeobject_1"
],
"ordering": "raw anatomical queue.peek local edge-index sequence; no sorting or filtering",
"peek_calls": 600,
"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 \nzz_external_sources (SpikeGeneratorGroup) | zz_external_sources (SpikeGeneratorGroup) | 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 \nzz_external_arrivals_pre (SynapticPathway) | zz_external_arrivals (Synapses) | 100. us (every step) | synapses | 0 | 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": 1537,
"coefficient_file": "/data/digital-drosophila/experiments/phase4ae-author-runtime/oracle/fanin_bursts-float64/coefficients.json",
"complete": true,
"due_arrivals": 1545,
"edges": 258,
"name": "fanin_bursts",
"nodes": 257,
"precision": "float64",
"queue_proxy_validated": true,
"queue_trace_enabled": true,
"rejected_requests": 512,
"requests": 2049,
"source_unchanged": true,
"spikes": 1539,
"state_file": "/data/digital-drosophila/experiments/phase4ae-author-runtime/oracle/fanin_bursts-float64/state.npz",
"steps": 600
}
@@ -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_2",
"name": "_lio_8",
"namespace_dtype": "float64",
"source": "CodeObject.namespace"
},
"cg": {
"code_object": "default_neurons_stateupdater_codeobject_2",
"name": "_lio_9",
"namespace_dtype": "float64",
"source": "CodeObject.namespace"
},
"cv": {
"code_object": "default_neurons_stateupdater_codeobject_2",
"name": "_lio_10",
"namespace_dtype": "float64",
"source": "CodeObject.namespace"
},
"gd": {
"code_object": "default_neurons_stateupdater_codeobject_2",
"name": "_lio_2",
"namespace_dtype": "float64",
"source": "CodeObject.namespace"
},
"reset": {
"code_object": "default_neurons_spike_resetter_codeobject_2",
"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_2",
"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,154 @@
[
{
"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"
},
{
"active": true,
"code_objects": [],
"name": "zz_external_arrivals",
"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": "",
"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 _the_period = _array_zz_external_sources__period_bins[0]\n _timebin = _array_defaultclock_timestep[0]\n _n_spikes = 0\n _lastindex_before = _array_zz_external_sources__lastindex[0]\n if _the_period > 0:\n _timebin %= _the_period\n # If there is a periodicity in the SpikeGenerator, we need to reset the\n # lastindex when the period has passed\n if _lastindex_before > 0 and _array_zz_external_sources__timebins[_lastindex_before - 1] >= _timebin:\n _lastindex_before = 0\n _n_spikes = _numpy.searchsorted(_array_zz_external_sources__timebins[_lastindex_before:],\n _timebin, side='right')\n _array_zz_external_sources__lastindex[0] = _lastindex_before + _n_spikes\n _indices = _array_zz_external_sources_neuron_index[_lastindex_before:_lastindex_before+_n_spikes]\n _array_zz_external_sources__spikespace[:_n_spikes] = _indices\n _array_zz_external_sources__spikespace[-1] = _n_spikes\n",
"name": "zz_external_sources_codeobject"
}
],
"name": "zz_external_sources",
"order": 0,
"type": "SpikeGeneratorGroup",
"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": "g_post += 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": "zz_external_arrivals_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_post += w\n _postsynaptic_idx = _array_zz_external_arrivals__synaptic_post[_idx]\n not_refractory = _array_default_neurons_not_refractory[_postsynaptic_idx]\n w = _array_zz_external_arrivals_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": "zz_external_arrivals_pre_codeobject"
}
],
"name": "zz_external_arrivals_pre",
"order": 0,
"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,258 @@
global_neuron_idx,local_index
-257,0
-256,1
-255,2
-254,3
-253,4
-252,5
-251,6
-250,7
-249,8
-248,9
-247,10
-246,11
-245,12
-244,13
-243,14
-242,15
-241,16
-240,17
-239,18
-238,19
-237,20
-236,21
-235,22
-234,23
-233,24
-232,25
-231,26
-230,27
-229,28
-228,29
-227,30
-226,31
-225,32
-224,33
-223,34
-222,35
-221,36
-220,37
-219,38
-218,39
-217,40
-216,41
-215,42
-214,43
-213,44
-212,45
-211,46
-210,47
-209,48
-208,49
-207,50
-206,51
-205,52
-204,53
-203,54
-202,55
-201,56
-200,57
-199,58
-198,59
-197,60
-196,61
-195,62
-194,63
-193,64
-192,65
-191,66
-190,67
-189,68
-188,69
-187,70
-186,71
-185,72
-184,73
-183,74
-182,75
-181,76
-180,77
-179,78
-178,79
-177,80
-176,81
-175,82
-174,83
-173,84
-172,85
-171,86
-170,87
-169,88
-168,89
-167,90
-166,91
-165,92
-164,93
-163,94
-162,95
-161,96
-160,97
-159,98
-158,99
-157,100
-156,101
-155,102
-154,103
-153,104
-152,105
-151,106
-150,107
-149,108
-148,109
-147,110
-146,111
-145,112
-144,113
-143,114
-142,115
-141,116
-140,117
-139,118
-138,119
-137,120
-136,121
-135,122
-134,123
-133,124
-132,125
-131,126
-130,127
-129,128
-128,129
-127,130
-126,131
-125,132
-124,133
-123,134
-122,135
-121,136
-120,137
-119,138
-118,139
-117,140
-116,141
-115,142
-114,143
-113,144
-112,145
-111,146
-110,147
-109,148
-108,149
-107,150
-106,151
-105,152
-104,153
-103,154
-102,155
-101,156
-100,157
-99,158
-98,159
-97,160
-96,161
-95,162
-94,163
-93,164
-92,165
-91,166
-90,167
-89,168
-88,169
-87,170
-86,171
-85,172
-84,173
-83,174
-82,175
-81,176
-80,177
-79,178
-78,179
-77,180
-76,181
-75,182
-74,183
-73,184
-72,185
-71,186
-70,187
-69,188
-68,189
-67,190
-66,191
-65,192
-64,193
-63,194
-62,195
-61,196
-60,197
-59,198
-58,199
-57,200
-56,201
-55,202
-54,203
-53,204
-52,205
-51,206
-50,207
-49,208
-48,209
-47,210
-46,211
-45,212
-44,213
-43,214
-42,215
-41,216
-40,217
-39,218
-38,219
-37,220
-36,221
-35,222
-34,223
-33,224
-32,225
-31,226
-30,227
-29,228
-28,229
-27,230
-26,231
-25,232
-24,233
-23,234
-22,235
-21,236
-20,237
-19,238
-18,239
-17,240
-16,241
-15,242
-14,243
-13,244
-12,245
-11,246
-10,247
-9,248
-8,249
-7,250
-6,251
-5,252
-4,253
-3,254
-2,255
-1,256
1 global_neuron_idx local_index
2 -257 0
3 -256 1
4 -255 2
5 -254 3
6 -253 4
7 -252 5
8 -251 6
9 -250 7
10 -249 8
11 -248 9
12 -247 10
13 -246 11
14 -245 12
15 -244 13
16 -243 14
17 -242 15
18 -241 16
19 -240 17
20 -239 18
21 -238 19
22 -237 20
23 -236 21
24 -235 22
25 -234 23
26 -233 24
27 -232 25
28 -231 26
29 -230 27
30 -229 28
31 -228 29
32 -227 30
33 -226 31
34 -225 32
35 -224 33
36 -223 34
37 -222 35
38 -221 36
39 -220 37
40 -219 38
41 -218 39
42 -217 40
43 -216 41
44 -215 42
45 -214 43
46 -213 44
47 -212 45
48 -211 46
49 -210 47
50 -209 48
51 -208 49
52 -207 50
53 -206 51
54 -205 52
55 -204 53
56 -203 54
57 -202 55
58 -201 56
59 -200 57
60 -199 58
61 -198 59
62 -197 60
63 -196 61
64 -195 62
65 -194 63
66 -193 64
67 -192 65
68 -191 66
69 -190 67
70 -189 68
71 -188 69
72 -187 70
73 -186 71
74 -185 72
75 -184 73
76 -183 74
77 -182 75
78 -181 76
79 -180 77
80 -179 78
81 -178 79
82 -177 80
83 -176 81
84 -175 82
85 -174 83
86 -173 84
87 -172 85
88 -171 86
89 -170 87
90 -169 88
91 -168 89
92 -167 90
93 -166 91
94 -165 92
95 -164 93
96 -163 94
97 -162 95
98 -161 96
99 -160 97
100 -159 98
101 -158 99
102 -157 100
103 -156 101
104 -155 102
105 -154 103
106 -153 104
107 -152 105
108 -151 106
109 -150 107
110 -149 108
111 -148 109
112 -147 110
113 -146 111
114 -145 112
115 -144 113
116 -143 114
117 -142 115
118 -141 116
119 -140 117
120 -139 118
121 -138 119
122 -137 120
123 -136 121
124 -135 122
125 -134 123
126 -133 124
127 -132 125
128 -131 126
129 -130 127
130 -129 128
131 -128 129
132 -127 130
133 -126 131
134 -125 132
135 -124 133
136 -123 134
137 -122 135
138 -121 136
139 -120 137
140 -119 138
141 -118 139
142 -117 140
143 -116 141
144 -115 142
145 -114 143
146 -113 144
147 -112 145
148 -111 146
149 -110 147
150 -109 148
151 -108 149
152 -107 150
153 -106 151
154 -105 152
155 -104 153
156 -103 154
157 -102 155
158 -101 156
159 -100 157
160 -99 158
161 -98 159
162 -97 160
163 -96 161
164 -95 162
165 -94 163
166 -93 164
167 -92 165
168 -91 166
169 -90 167
170 -89 168
171 -88 169
172 -87 170
173 -86 171
174 -85 172
175 -84 173
176 -83 174
177 -82 175
178 -81 176
179 -80 177
180 -79 178
181 -78 179
182 -77 180
183 -76 181
184 -75 182
185 -74 183
186 -73 184
187 -72 185
188 -71 186
189 -70 187
190 -69 188
191 -68 189
192 -67 190
193 -66 191
194 -65 192
195 -64 193
196 -63 194
197 -62 195
198 -61 196
199 -60 197
200 -59 198
201 -58 199
202 -57 200
203 -56 201
204 -55 202
205 -54 203
206 -53 204
207 -52 205
208 -51 206
209 -50 207
210 -49 208
211 -48 209
212 -47 210
213 -46 211
214 -45 212
215 -44 213
216 -43 214
217 -42 215
218 -41 216
219 -40 217
220 -39 218
221 -38 219
222 -37 220
223 -36 221
224 -35 222
225 -34 223
226 -33 224
227 -32 225
228 -31 226
229 -30 227
230 -29 228
231 -28 229
232 -27 230
233 -26 231
234 -25 232
235 -24 233
236 -23 234
237 -22 235
238 -21 236
239 -20 237
240 -19 238
241 -18 239
242 -17 240
243 -16 241
244 -15 242
245 -14 243
246 -13 244
247 -12 245
248 -11 246
249 -10 247
250 -9 248
251 -8 249
252 -7 250
253 -6 251
254 -5 252
255 -4 253
256 -3 254
257 -2 255
258 -1 256
@@ -0,0 +1,154 @@
[
{
"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"
},
{
"active": true,
"code_objects": [],
"name": "zz_external_arrivals",
"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_2"
}
],
"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_2"
}
],
"name": "default_neurons_spike_thresholder",
"order": 0,
"type": "Thresholder",
"when": "thresholds"
},
{
"abstract_code": "",
"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 _the_period = _array_zz_external_sources__period_bins[0]\n _timebin = _array_defaultclock_timestep[0]\n _n_spikes = 0\n _lastindex_before = _array_zz_external_sources__lastindex[0]\n if _the_period > 0:\n _timebin %= _the_period\n # If there is a periodicity in the SpikeGenerator, we need to reset the\n # lastindex when the period has passed\n if _lastindex_before > 0 and _array_zz_external_sources__timebins[_lastindex_before - 1] >= _timebin:\n _lastindex_before = 0\n _n_spikes = _numpy.searchsorted(_array_zz_external_sources__timebins[_lastindex_before:],\n _timebin, side='right')\n _array_zz_external_sources__lastindex[0] = _lastindex_before + _n_spikes\n _indices = _array_zz_external_sources_neuron_index[_lastindex_before:_lastindex_before+_n_spikes]\n _array_zz_external_sources__spikespace[:_n_spikes] = _indices\n _array_zz_external_sources__spikespace[-1] = _n_spikes\n",
"name": "zz_external_sources_codeobject_2"
}
],
"name": "zz_external_sources",
"order": 0,
"type": "SpikeGeneratorGroup",
"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_2"
}
],
"name": "default_synapses_pre",
"order": -1,
"type": "SynapticPathway",
"when": "synapses"
},
{
"abstract_code": "g_post += 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": "zz_external_arrivals_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_post += w\n _postsynaptic_idx = _array_zz_external_arrivals__synaptic_post[_idx]\n not_refractory = _array_default_neurons_not_refractory[_postsynaptic_idx]\n w = _array_zz_external_arrivals_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": "zz_external_arrivals_pre_codeobject_2"
}
],
"name": "zz_external_arrivals_pre",
"order": 0,
"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_2"
}
],
"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": "d8163907696aec1bf853ecccbe301c50efb4abd5b1c76b9a3dfa34f0e9e36c20",
"connectivity_sha256": "87dfbd207929725101477715d0684af71971d93cb279c3e195704b2b939b3f86",
"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": 600
}
@@ -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 \nzz_external_sources (SpikeGeneratorGroup) | zz_external_sources (SpikeGeneratorGroup) | 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 \nzz_external_arrivals_pre (SynapticPathway) | zz_external_arrivals (Synapses) | 100. us (every step) | synapses | 0 | 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 "
}
@@ -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": "02ab938969b4369b1e08bc4a82e8c5fe68683f7318baf5eb052098d63fab0302",
"case_spec_sha256": "eab2c18f120fd3e9f067f489cee0a4c07477607facf3094083d3e3fa60bfd1ef",
"common_interface_preserved": true,
"learning": false,
"original_poi_interface_adopted": false,
"precision": "float32",
"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": "highest_indegree",
"selection": {
"global_in_degree": 11526,
"negative_in_edges": 1403,
"positive_in_edges": 10076,
"stimulated_neuron_idx": [
494,
775,
1572,
61804,
62257,
62700,
62795,
63041,
65262,
66225,
66237,
67241,
67324,
68856,
70626,
137444
],
"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_4",
"name": "_lio_8",
"namespace_dtype": "float64",
"source": "CodeObject.namespace"
},
"cg": {
"code_object": "default_neurons_stateupdater_codeobject_4",
"name": "_lio_9",
"namespace_dtype": "float64",
"source": "CodeObject.namespace"
},
"cv": {
"code_object": "default_neurons_stateupdater_codeobject_4",
"name": "_lio_10",
"namespace_dtype": "float64",
"source": "CodeObject.namespace"
},
"gd": {
"code_object": "default_neurons_stateupdater_codeobject_4",
"name": "_lio_2",
"namespace_dtype": "float64",
"source": "CodeObject.namespace"
},
"reset": {
"code_object": "default_neurons_spike_resetter_codeobject_4",
"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_4",
"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_4",
"name": "_lio_8",
"namespace_dtype": "float64",
"source": "CodeObject.namespace"
},
"cg": {
"code_object": "default_neurons_stateupdater_codeobject_4",
"name": "_lio_9",
"namespace_dtype": "float64",
"source": "CodeObject.namespace"
},
"cv": {
"code_object": "default_neurons_stateupdater_codeobject_4",
"name": "_lio_10",
"namespace_dtype": "float64",
"source": "CodeObject.namespace"
},
"gd": {
"code_object": "default_neurons_stateupdater_codeobject_4",
"name": "_lio_2",
"namespace_dtype": "float64",
"source": "CodeObject.namespace"
},
"reset": {
"code_object": "default_neurons_spike_resetter_codeobject_4",
"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_4",
"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
494,2
775,3
1572,4
52515,5
57252,6
59937,7
60155,8
60450,9
60737,10
61164,11
61387,12
61721,13
61804,14
61941,15
62257,16
62700,17
62734,18
62795,19
62888,20
63041,21
63106,22
63173,23
63287,24
63339,25
63918,26
64210,27
64233,28
64443,29
64514,30
65001,31
65235,32
65262,33
65374,34
65565,35
65691,36
65742,37
66003,38
66127,39
66225,40
66237,41
66541,42
66598,43
66843,44
66958,45
67072,46
67135,47
67241,48
67284,49
67324,50
67373,51
67453,52
67483,53
67537,54
67594,55
68056,56
68074,57
68192,58
68199,59
68355,60
68543,61
68617,62
68656,63
68838,64
68856,65
68869,66
69139,67
69415,68
69516,69
69540,70
69809,71
69860,72
69966,73
69982,74
70036,75
70202,76
70316,77
70561,78
70626,79
70744,80
70783,81
70897,82
70977,83
70995,84
71060,85
71120,86
71215,87
71267,88
71346,89
71440,90
71456,91
71738,92
72060,93
72219,94
72322,95
72365,96
72473,97
72485,98
72578,99
73026,100
73221,101
73544,102
73653,103
73903,104
74495,105
74818,106
74995,107
75925,108
76961,109
77090,110
77291,111
77444,112
78506,113
78574,114
80691,115
85419,116
91986,117
97175,118
98515,119
101566,120
102237,121
104598,122
105190,123
105260,124
106136,125
137444,126
140350,127
1 global_neuron_idx local_index
2 5 0
3 21 1
4 494 2
5 775 3
6 1572 4
7 52515 5
8 57252 6
9 59937 7
10 60155 8
11 60450 9
12 60737 10
13 61164 11
14 61387 12
15 61721 13
16 61804 14
17 61941 15
18 62257 16
19 62700 17
20 62734 18
21 62795 19
22 62888 20
23 63041 21
24 63106 22
25 63173 23
26 63287 24
27 63339 25
28 63918 26
29 64210 27
30 64233 28
31 64443 29
32 64514 30
33 65001 31
34 65235 32
35 65262 33
36 65374 34
37 65565 35
38 65691 36
39 65742 37
40 66003 38
41 66127 39
42 66225 40
43 66237 41
44 66541 42
45 66598 43
46 66843 44
47 66958 45
48 67072 46
49 67135 47
50 67241 48
51 67284 49
52 67324 50
53 67373 51
54 67453 52
55 67483 53
56 67537 54
57 67594 55
58 68056 56
59 68074 57
60 68192 58
61 68199 59
62 68355 60
63 68543 61
64 68617 62
65 68656 63
66 68838 64
67 68856 65
68 68869 66
69 69139 67
70 69415 68
71 69516 69
72 69540 70
73 69809 71
74 69860 72
75 69966 73
76 69982 74
77 70036 75
78 70202 76
79 70316 77
80 70561 78
81 70626 79
82 70744 80
83 70783 81
84 70897 82
85 70977 83
86 70995 84
87 71060 85
88 71120 86
89 71215 87
90 71267 88
91 71346 89
92 71440 90
93 71456 91
94 71738 92
95 72060 93
96 72219 94
97 72322 95
98 72365 96
99 72473 97
100 72485 98
101 72578 99
102 73026 100
103 73221 101
104 73544 102
105 73653 103
106 73903 104
107 74495 105
108 74818 106
109 74995 107
110 75925 108
111 76961 109
112 77090 110
113 77291 111
114 77444 112
115 78506 113
116 78574 114
117 80691 115
118 85419 116
119 91986 117
120 97175 118
121 98515 119
122 101566 120
123 102237 121
124 104598 122
125 105190 123
126 105260 124
127 106136 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_4"
}
],
"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_4"
}
],
"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_4"
}
],
"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_4"
}
],
"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": "e90a4d12741fbd0bd0b5fdcf447c2664f7dfcdba7930f4e9e7f05811f0b530f4",
"connectivity_sha256": "1228ee73ad73051748dd1db62b5063c005471667fd8baacd6a9e76b134024800",
"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": "float32",
"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": 839,
"advance_calls": 500,
"all_due_events_preserved": true,
"due_events": 930,
"installations": [
"default_synapses_pre_codeobject",
"default_synapses_pre_codeobject_4"
],
"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/highest_indegree-float32/coefficients.json",
"complete": true,
"due_arrivals": 930,
"edges": 320,
"name": "highest_indegree",
"nodes": 128,
"precision": "float32",
"queue_proxy_validated": true,
"queue_trace_enabled": true,
"rejected_requests": 0,
"requests": 96,
"source_unchanged": true,
"spikes": 101,
"state_file": "/data/digital-drosophila/experiments/phase4ae-author-runtime/oracle/highest_indegree-float32/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
494,2
775,3
1572,4
52515,5
57252,6
59937,7
60155,8
60450,9
60737,10
61164,11
61387,12
61721,13
61804,14
61941,15
62257,16
62700,17
62734,18
62795,19
62888,20
63041,21
63106,22
63173,23
63287,24
63339,25
63918,26
64210,27
64233,28
64443,29
64514,30
65001,31
65235,32
65262,33
65374,34
65565,35
65691,36
65742,37
66003,38
66127,39
66225,40
66237,41
66541,42
66598,43
66843,44
66958,45
67072,46
67135,47
67241,48
67284,49
67324,50
67373,51
67453,52
67483,53
67537,54
67594,55
68056,56
68074,57
68192,58
68199,59
68355,60
68543,61
68617,62
68656,63
68838,64
68856,65
68869,66
69139,67
69415,68
69516,69
69540,70
69809,71
69860,72
69966,73
69982,74
70036,75
70202,76
70316,77
70561,78
70626,79
70744,80
70783,81
70897,82
70977,83
70995,84
71060,85
71120,86
71215,87
71267,88
71346,89
71440,90
71456,91
71738,92
72060,93
72219,94
72322,95
72365,96
72473,97
72485,98
72578,99
73026,100
73221,101
73544,102
73653,103
73903,104
74495,105
74818,106
74995,107
75925,108
76961,109
77090,110
77291,111
77444,112
78506,113
78574,114
80691,115
85419,116
91986,117
97175,118
98515,119
101566,120
102237,121
104598,122
105190,123
105260,124
106136,125
137444,126
140350,127
1 global_neuron_idx local_index
2 5 0
3 21 1
4 494 2
5 775 3
6 1572 4
7 52515 5
8 57252 6
9 59937 7
10 60155 8
11 60450 9
12 60737 10
13 61164 11
14 61387 12
15 61721 13
16 61804 14
17 61941 15
18 62257 16
19 62700 17
20 62734 18
21 62795 19
22 62888 20
23 63041 21
24 63106 22
25 63173 23
26 63287 24
27 63339 25
28 63918 26
29 64210 27
30 64233 28
31 64443 29
32 64514 30
33 65001 31
34 65235 32
35 65262 33
36 65374 34
37 65565 35
38 65691 36
39 65742 37
40 66003 38
41 66127 39
42 66225 40
43 66237 41
44 66541 42
45 66598 43
46 66843 44
47 66958 45
48 67072 46
49 67135 47
50 67241 48
51 67284 49
52 67324 50
53 67373 51
54 67453 52
55 67483 53
56 67537 54
57 67594 55
58 68056 56
59 68074 57
60 68192 58
61 68199 59
62 68355 60
63 68543 61
64 68617 62
65 68656 63
66 68838 64
67 68856 65
68 68869 66
69 69139 67
70 69415 68
71 69516 69
72 69540 70
73 69809 71
74 69860 72
75 69966 73
76 69982 74
77 70036 75
78 70202 76
79 70316 77
80 70561 78
81 70626 79
82 70744 80
83 70783 81
84 70897 82
85 70977 83
86 70995 84
87 71060 85
88 71120 86
89 71215 87
90 71267 88
91 71346 89
92 71440 90
93 71456 91
94 71738 92
95 72060 93
96 72219 94
97 72322 95
98 72365 96
99 72473 97
100 72485 98
101 72578 99
102 73026 100
103 73221 101
104 73544 102
105 73653 103
106 73903 104
107 74495 105
108 74818 106
109 74995 107
110 75925 108
111 76961 109
112 77090 110
113 77291 111
114 77444 112
115 78506 113
116 78574 114
117 80691 115
118 85419 116
119 91986 117
120 97175 118
121 98515 119
122 101566 120
123 102237 121
124 104598 122
125 105190 123
126 105260 124
127 106136 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": "e90a4d12741fbd0bd0b5fdcf447c2664f7dfcdba7930f4e9e7f05811f0b530f4",
"connectivity_sha256": "1228ee73ad73051748dd1db62b5063c005471667fd8baacd6a9e76b134024800",
"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": "float32",
"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 "
}
@@ -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": "02ab938969b4369b1e08bc4a82e8c5fe68683f7318baf5eb052098d63fab0302",
"case_spec_sha256": "eab2c18f120fd3e9f067f489cee0a4c07477607facf3094083d3e3fa60bfd1ef",
"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": "highest_indegree",
"selection": {
"global_in_degree": 11526,
"negative_in_edges": 1403,
"positive_in_edges": 10076,
"stimulated_neuron_idx": [
494,
775,
1572,
61804,
62257,
62700,
62795,
63041,
65262,
66225,
66237,
67241,
67324,
68856,
70626,
137444
],
"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_3",
"name": "_lio_8",
"namespace_dtype": "float64",
"source": "CodeObject.namespace"
},
"cg": {
"code_object": "default_neurons_stateupdater_codeobject_3",
"name": "_lio_9",
"namespace_dtype": "float64",
"source": "CodeObject.namespace"
},
"cv": {
"code_object": "default_neurons_stateupdater_codeobject_3",
"name": "_lio_10",
"namespace_dtype": "float64",
"source": "CodeObject.namespace"
},
"gd": {
"code_object": "default_neurons_stateupdater_codeobject_3",
"name": "_lio_2",
"namespace_dtype": "float64",
"source": "CodeObject.namespace"
},
"reset": {
"code_object": "default_neurons_spike_resetter_codeobject_3",
"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_3",
"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_3",
"name": "_lio_8",
"namespace_dtype": "float64",
"source": "CodeObject.namespace"
},
"cg": {
"code_object": "default_neurons_stateupdater_codeobject_3",
"name": "_lio_9",
"namespace_dtype": "float64",
"source": "CodeObject.namespace"
},
"cv": {
"code_object": "default_neurons_stateupdater_codeobject_3",
"name": "_lio_10",
"namespace_dtype": "float64",
"source": "CodeObject.namespace"
},
"gd": {
"code_object": "default_neurons_stateupdater_codeobject_3",
"name": "_lio_2",
"namespace_dtype": "float64",
"source": "CodeObject.namespace"
},
"reset": {
"code_object": "default_neurons_spike_resetter_codeobject_3",
"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_3",
"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
494,2
775,3
1572,4
52515,5
57252,6
59937,7
60155,8
60450,9
60737,10
61164,11
61387,12
61721,13
61804,14
61941,15
62257,16
62700,17
62734,18
62795,19
62888,20
63041,21
63106,22
63173,23
63287,24
63339,25
63918,26
64210,27
64233,28
64443,29
64514,30
65001,31
65235,32
65262,33
65374,34
65565,35
65691,36
65742,37
66003,38
66127,39
66225,40
66237,41
66541,42
66598,43
66843,44
66958,45
67072,46
67135,47
67241,48
67284,49
67324,50
67373,51
67453,52
67483,53
67537,54
67594,55
68056,56
68074,57
68192,58
68199,59
68355,60
68543,61
68617,62
68656,63
68838,64
68856,65
68869,66
69139,67
69415,68
69516,69
69540,70
69809,71
69860,72
69966,73
69982,74
70036,75
70202,76
70316,77
70561,78
70626,79
70744,80
70783,81
70897,82
70977,83
70995,84
71060,85
71120,86
71215,87
71267,88
71346,89
71440,90
71456,91
71738,92
72060,93
72219,94
72322,95
72365,96
72473,97
72485,98
72578,99
73026,100
73221,101
73544,102
73653,103
73903,104
74495,105
74818,106
74995,107
75925,108
76961,109
77090,110
77291,111
77444,112
78506,113
78574,114
80691,115
85419,116
91986,117
97175,118
98515,119
101566,120
102237,121
104598,122
105190,123
105260,124
106136,125
137444,126
140350,127
1 global_neuron_idx local_index
2 5 0
3 21 1
4 494 2
5 775 3
6 1572 4
7 52515 5
8 57252 6
9 59937 7
10 60155 8
11 60450 9
12 60737 10
13 61164 11
14 61387 12
15 61721 13
16 61804 14
17 61941 15
18 62257 16
19 62700 17
20 62734 18
21 62795 19
22 62888 20
23 63041 21
24 63106 22
25 63173 23
26 63287 24
27 63339 25
28 63918 26
29 64210 27
30 64233 28
31 64443 29
32 64514 30
33 65001 31
34 65235 32
35 65262 33
36 65374 34
37 65565 35
38 65691 36
39 65742 37
40 66003 38
41 66127 39
42 66225 40
43 66237 41
44 66541 42
45 66598 43
46 66843 44
47 66958 45
48 67072 46
49 67135 47
50 67241 48
51 67284 49
52 67324 50
53 67373 51
54 67453 52
55 67483 53
56 67537 54
57 67594 55
58 68056 56
59 68074 57
60 68192 58
61 68199 59
62 68355 60
63 68543 61
64 68617 62
65 68656 63
66 68838 64
67 68856 65
68 68869 66
69 69139 67
70 69415 68
71 69516 69
72 69540 70
73 69809 71
74 69860 72
75 69966 73
76 69982 74
77 70036 75
78 70202 76
79 70316 77
80 70561 78
81 70626 79
82 70744 80
83 70783 81
84 70897 82
85 70977 83
86 70995 84
87 71060 85
88 71120 86
89 71215 87
90 71267 88
91 71346 89
92 71440 90
93 71456 91
94 71738 92
95 72060 93
96 72219 94
97 72322 95
98 72365 96
99 72473 97
100 72485 98
101 72578 99
102 73026 100
103 73221 101
104 73544 102
105 73653 103
106 73903 104
107 74495 105
108 74818 106
109 74995 107
110 75925 108
111 76961 109
112 77090 110
113 77291 111
114 77444 112
115 78506 113
116 78574 114
117 80691 115
118 85419 116
119 91986 117
120 97175 118
121 98515 119
122 101566 120
123 102237 121
124 104598 122
125 105190 123
126 105260 124
127 106136 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_3"
}
],
"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_3"
}
],
"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_3"
}
],
"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_3"
}
],
"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": "e90a4d12741fbd0bd0b5fdcf447c2664f7dfcdba7930f4e9e7f05811f0b530f4",
"connectivity_sha256": "1228ee73ad73051748dd1db62b5063c005471667fd8baacd6a9e76b134024800",
"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": 839,
"advance_calls": 500,
"all_due_events_preserved": true,
"due_events": 930,
"installations": [
"default_synapses_pre_codeobject",
"default_synapses_pre_codeobject_3"
],
"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/highest_indegree-float64/coefficients.json",
"complete": true,
"due_arrivals": 930,
"edges": 320,
"name": "highest_indegree",
"nodes": 128,
"precision": "float64",
"queue_proxy_validated": true,
"queue_trace_enabled": true,
"rejected_requests": 0,
"requests": 96,
"source_unchanged": true,
"spikes": 101,
"state_file": "/data/digital-drosophila/experiments/phase4ae-author-runtime/oracle/highest_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_4",
"name": "_lio_8",
"namespace_dtype": "float64",
"source": "CodeObject.namespace"
},
"cg": {
"code_object": "default_neurons_stateupdater_codeobject_4",
"name": "_lio_9",
"namespace_dtype": "float64",
"source": "CodeObject.namespace"
},
"cv": {
"code_object": "default_neurons_stateupdater_codeobject_4",
"name": "_lio_10",
"namespace_dtype": "float64",
"source": "CodeObject.namespace"
},
"gd": {
"code_object": "default_neurons_stateupdater_codeobject_4",
"name": "_lio_2",
"namespace_dtype": "float64",
"source": "CodeObject.namespace"
},
"reset": {
"code_object": "default_neurons_spike_resetter_codeobject_4",
"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_4",
"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
494,2
775,3
1572,4
52515,5
57252,6
59937,7
60155,8
60450,9
60737,10
61164,11
61387,12
61721,13
61804,14
61941,15
62257,16
62700,17
62734,18
62795,19
62888,20
63041,21
63106,22
63173,23
63287,24
63339,25
63918,26
64210,27
64233,28
64443,29
64514,30
65001,31
65235,32
65262,33
65374,34
65565,35
65691,36
65742,37
66003,38
66127,39
66225,40
66237,41
66541,42
66598,43
66843,44
66958,45
67072,46
67135,47
67241,48
67284,49
67324,50
67373,51
67453,52
67483,53
67537,54
67594,55
68056,56
68074,57
68192,58
68199,59
68355,60
68543,61
68617,62
68656,63
68838,64
68856,65
68869,66
69139,67
69415,68
69516,69
69540,70
69809,71
69860,72
69966,73
69982,74
70036,75
70202,76
70316,77
70561,78
70626,79
70744,80
70783,81
70897,82
70977,83
70995,84
71060,85
71120,86
71215,87
71267,88
71346,89
71440,90
71456,91
71738,92
72060,93
72219,94
72322,95
72365,96
72473,97
72485,98
72578,99
73026,100
73221,101
73544,102
73653,103
73903,104
74495,105
74818,106
74995,107
75925,108
76961,109
77090,110
77291,111
77444,112
78506,113
78574,114
80691,115
85419,116
91986,117
97175,118
98515,119
101566,120
102237,121
104598,122
105190,123
105260,124
106136,125
137444,126
140350,127
1 global_neuron_idx local_index
2 5 0
3 21 1
4 494 2
5 775 3
6 1572 4
7 52515 5
8 57252 6
9 59937 7
10 60155 8
11 60450 9
12 60737 10
13 61164 11
14 61387 12
15 61721 13
16 61804 14
17 61941 15
18 62257 16
19 62700 17
20 62734 18
21 62795 19
22 62888 20
23 63041 21
24 63106 22
25 63173 23
26 63287 24
27 63339 25
28 63918 26
29 64210 27
30 64233 28
31 64443 29
32 64514 30
33 65001 31
34 65235 32
35 65262 33
36 65374 34
37 65565 35
38 65691 36
39 65742 37
40 66003 38
41 66127 39
42 66225 40
43 66237 41
44 66541 42
45 66598 43
46 66843 44
47 66958 45
48 67072 46
49 67135 47
50 67241 48
51 67284 49
52 67324 50
53 67373 51
54 67453 52
55 67483 53
56 67537 54
57 67594 55
58 68056 56
59 68074 57
60 68192 58
61 68199 59
62 68355 60
63 68543 61
64 68617 62
65 68656 63
66 68838 64
67 68856 65
68 68869 66
69 69139 67
70 69415 68
71 69516 69
72 69540 70
73 69809 71
74 69860 72
75 69966 73
76 69982 74
77 70036 75
78 70202 76
79 70316 77
80 70561 78
81 70626 79
82 70744 80
83 70783 81
84 70897 82
85 70977 83
86 70995 84
87 71060 85
88 71120 86
89 71215 87
90 71267 88
91 71346 89
92 71440 90
93 71456 91
94 71738 92
95 72060 93
96 72219 94
97 72322 95
98 72365 96
99 72473 97
100 72485 98
101 72578 99
102 73026 100
103 73221 101
104 73544 102
105 73653 103
106 73903 104
107 74495 105
108 74818 106
109 74995 107
110 75925 108
111 76961 109
112 77090 110
113 77291 111
114 77444 112
115 78506 113
116 78574 114
117 80691 115
118 85419 116
119 91986 117
120 97175 118
121 98515 119
122 101566 120
123 102237 121
124 104598 122
125 105190 123
126 105260 124
127 106136 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_4"
}
],
"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_4"
}
],
"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_4"
}
],
"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_4"
}
],
"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": "e90a4d12741fbd0bd0b5fdcf447c2664f7dfcdba7930f4e9e7f05811f0b530f4",
"connectivity_sha256": "1228ee73ad73051748dd1db62b5063c005471667fd8baacd6a9e76b134024800",
"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 "
}
@@ -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": "float32",
"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_7",
"name": "_lio_8",
"namespace_dtype": "float64",
"source": "CodeObject.namespace"
},
"cg": {
"code_object": "default_neurons_stateupdater_codeobject_7",
"name": "_lio_9",
"namespace_dtype": "float64",
"source": "CodeObject.namespace"
},
"cv": {
"code_object": "default_neurons_stateupdater_codeobject_7",
"name": "_lio_10",
"namespace_dtype": "float64",
"source": "CodeObject.namespace"
},
"gd": {
"code_object": "default_neurons_stateupdater_codeobject_7",
"name": "_lio_2",
"namespace_dtype": "float64",
"source": "CodeObject.namespace"
},
"reset": {
"code_object": "default_neurons_spike_resetter_codeobject_7",
"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_7",
"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_7",
"name": "_lio_8",
"namespace_dtype": "float64",
"source": "CodeObject.namespace"
},
"cg": {
"code_object": "default_neurons_stateupdater_codeobject_7",
"name": "_lio_9",
"namespace_dtype": "float64",
"source": "CodeObject.namespace"
},
"cv": {
"code_object": "default_neurons_stateupdater_codeobject_7",
"name": "_lio_10",
"namespace_dtype": "float64",
"source": "CodeObject.namespace"
},
"gd": {
"code_object": "default_neurons_stateupdater_codeobject_7",
"name": "_lio_2",
"namespace_dtype": "float64",
"source": "CodeObject.namespace"
},
"reset": {
"code_object": "default_neurons_spike_resetter_codeobject_7",
"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_7",
"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_7"
}
],
"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_7"
}
],
"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_7"
}
],
"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_7"
}
],
"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": "float32",
"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_7"
],
"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-float32/coefficients.json",
"complete": true,
"due_arrivals": 626,
"edges": 266,
"name": "mixed_high_indegree",
"nodes": 128,
"precision": "float32",
"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-float32/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_8",
"name": "_lio_8",
"namespace_dtype": "float64",
"source": "CodeObject.namespace"
},
"cg": {
"code_object": "default_neurons_stateupdater_codeobject_8",
"name": "_lio_9",
"namespace_dtype": "float64",
"source": "CodeObject.namespace"
},
"cv": {
"code_object": "default_neurons_stateupdater_codeobject_8",
"name": "_lio_10",
"namespace_dtype": "float64",
"source": "CodeObject.namespace"
},
"gd": {
"code_object": "default_neurons_stateupdater_codeobject_8",
"name": "_lio_2",
"namespace_dtype": "float64",
"source": "CodeObject.namespace"
},
"reset": {
"code_object": "default_neurons_spike_resetter_codeobject_8",
"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_8",
"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_8"
}
],
"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_8"
}
],
"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_8"
}
],
"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_8"
}
],
"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": "float32",
"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 "
}
@@ -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"
}
]

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