Skip to content

Commit d4fad08

Browse files
authored
Remove inline-aliases-convolution concept (#1303)
1 parent d977b57 commit d4fad08

File tree

11 files changed

+91
-172
lines changed

11 files changed

+91
-172
lines changed

doc/nestml_language/nestml_language_concepts.rst

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1000,21 +1000,6 @@ The ``recordable`` keyword can be used to make the variable in inline expression
10001000
...
10011001
recordable inline V_m mV = V_rel + E_L
10021002
1003-
During simulation, one or more state variables are used to maintain the dynamical state of each convolution across time. To be able to reference these variables from within the model, a special case occurs when an inline expression is defined as a convolution and marked ``recordable``:
1004-
1005-
.. code-block:: nestml
1006-
1007-
recordable inline I_syn pA = convolve(alpha_kernel, spiking_input_port) * pA
1008-
1009-
Then, the state variables corresponding to this convolution can be referenced in the rest of the model, for instance:
1010-
1011-
.. code-block:: nestml
1012-
1013-
update:
1014-
# reset the state of synaptic integration
1015-
I_syn = 0 pA
1016-
I_syn' = 0 * s**-1
1017-
10181003
10191004
Kernel functions
10201005
~~~~~~~~~~~~~~~~

doc/nestml_language/neurons_in_nestml.rst

Lines changed: 0 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -138,49 +138,6 @@ The incoming spikes could have been equivalently handled with an ``onReceive`` e
138138
Note that in this example, the intended physical unit (pA) was assigned by multiplying the type of the input port ``spikes`` (which is 1/s) by pA·s, resulting in a unit of pA for ``I_syn``.
139139

140140

141-
(Re)setting synaptic integration state
142-
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
143-
144-
When convolutions are used, additional state variables are required for each pair *(shape, spike input port)* that appears as the parameters in a convolution. These variables track the dynamical state of that kernel, for that input port. The number of variables created corresponds to the dimensionality of the kernel. For example, in the code block above, the one-dimensional kernel ``G`` is used in a convolution with spiking input port ``spikes``. During code generation, a new state variable called ``G__conv__spikes`` is created for this combination, by joining together the name of the kernel with the name of the spike buffer using (by default) the string “__conv__”. If the same kernel is used later in a convolution with another spiking input port, say ``spikes_GABA``, then the resulting generated variable would be called ``G__conv__spikes_GABA``, allowing independent synaptic integration between input ports but allowing the same kernel to be used more than once.
145-
146-
The process of generating extra state variables for keeping track of convolution state is normally hidden from the user. For some models, however, it might be required to set or reset the state of synaptic integration, which is stored in these internally generated variables. For example, we might want to set the synaptic current (and its rate of change) to 0 when firing a dendritic action potential. Although we would like to set the generated variable ``G__conv__spikes`` to 0 in the running example, a variable by this name is only generated during code generation, and does not exist in the namespace of the NESTML model to begin with. To still allow referring to this state in the context of the model, it is recommended to use an inline expression, with only a convolution on the right-hand side.
147-
148-
For example, suppose we define:
149-
150-
.. code-block:: nestml
151-
152-
inline g_dend pA = convolve(G, spikes)
153-
154-
Then the name ``g_dend`` can be used as a target for assignment:
155-
156-
.. code-block:: nestml
157-
158-
update:
159-
g_dend = 42 pA
160-
161-
This also works for higher-order kernels, e.g. for the second-order alpha kernel :math:`H(t)`:
162-
163-
.. code-block:: nestml
164-
165-
kernel H'' = (-2/tau_syn) * H' - 1/tau_syn**2) * H
166-
167-
We can define an inline expression with the same port as before, ``spikes``:
168-
169-
.. code-block:: nestml
170-
171-
inline h_dend pA = convolve(H, spikes)
172-
173-
The name ``h_dend`` now acts as an alias for this particular convolution. We can now assign to the inline defined variable up to the order of the kernel:
174-
175-
.. code-block:: nestml
176-
177-
update:
178-
h_dend = 42 pA
179-
h_dend' = 10 pA/ms
180-
181-
For more information, see the :doc:`Active dendrite tutorial </tutorials/active_dendrite/nestml_active_dendrite_tutorial>`.
182-
183-
184141
Multiple input ports
185142
^^^^^^^^^^^^^^^^^^^^
186143

doc/tutorials/active_dendrite/nestml_active_dendrite_tutorial.ipynb

Lines changed: 49 additions & 50 deletions
Large diffs are not rendered by default.

doc/tutorials/sequence_learning/iaf_psc_exp_nonlineardendrite_neuron.nestml

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -74,8 +74,8 @@ model iaf_psc_exp_nonlineardendrite_neuron:
7474
t_ref ms = 10 ms # refractory period
7575
ref_timeout_ticks integer = steps(t_ref)
7676

77-
I_dend_incr pA/ms = pA * exp(1) / tau_syn2
78-
77+
internals:
78+
unit_psr pA/ms = pA * exp(1) / tau_syn2 # Unitary postsynaptic response amplitude
7979

8080
input:
8181
I_1 <- spike
@@ -86,7 +86,7 @@ model iaf_psc_exp_nonlineardendrite_neuron:
8686
spike
8787

8888
onReceive(I_2):
89-
I_dend$ += I_2 * s * I_dend_incr
89+
I_dend$ += unit_psr * I_2 * s
9090

9191
update:
9292
# solve ODEs
@@ -126,6 +126,7 @@ model iaf_psc_exp_nonlineardendrite_neuron:
126126
V_m = V_reset
127127
dAP_counts = 0
128128
I_dend = 0 pA
129+
I_dend$ = 0 pA/s
129130
active_dendrite = false
130131
active_dendrite_readout = 0.
131132
else:
@@ -135,4 +136,5 @@ model iaf_psc_exp_nonlineardendrite_neuron:
135136
active_dendrite_readout = 0.
136137
dAP_counts = 0
137138
I_dend = 0 pA
139+
I_dend$ = 0 pA/s
138140

doc/tutorials/sequence_learning/sequence_learning.ipynb

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -431,8 +431,6 @@
431431
" p[\"soma_params\"][\"tau_dAP\"] = 60. # time window over which the dendritic current clamp is active\n",
432432
" p[\"soma_params\"][\"theta_dAP\"] = 59. # current threshold for a dendritic action potential\n",
433433
" \n",
434-
" p[\"soma_params\"][\"I_dend_incr\"] = 2.71 / (p[\"soma_params\"][\"tau_syn2\"])\n",
435-
" \n",
436434
" p[\"fixed_somatic_delay\"] = 2 # this is an approximate time of how long it takes the soma to fire\n",
437435
" # upon receiving an external stimulus \n",
438436
" \n",
@@ -892,8 +890,6 @@
892890
" p[\"fixed_somatic_delay\"] = 2 # this is an approximate time of how long it takes the soma to fire\n",
893891
" # upon receiving an external stimulus \n",
894892
" \n",
895-
" p[\"soma_params\"][\"I_dend_incr\"] = 2.71 / (p[\"soma_params\"][\"tau_syn2\"])\n",
896-
"\n",
897893
" # synaptic parameters\n",
898894
" p[\"J_EX_psp\"] = 1.1 * p[\"soma_params\"][\"V_th\"] # somatic PSP as a response to an external input\n",
899895
" p[\"convergence\"] = 5\n",
@@ -2410,8 +2406,6 @@
24102406
" p[\"soma_params\"][\"tau_dAP\"] = 60. # time window over which the dendritic current clamp is active\n",
24112407
" p[\"soma_params\"][\"theta_dAP\"] = 59. # current threshold for a dendritic action potential\n",
24122408
" \n",
2413-
" p[\"soma_params\"][\"I_dend_incr\"] = 2.71 / (p[\"soma_params\"][\"tau_syn2\"])\n",
2414-
" \n",
24152409
" p[\"fixed_somatic_delay\"] = 2 # this is an approximate time of how long it takes the soma to fire\n",
24162410
" # upon receiving an external stimulus \n",
24172411
" \n",
@@ -2623,7 +2617,7 @@
26232617
"PSC maximum J_EX: 4112.209148 pA\n",
26242618
"PSC maximum J_IE: 581.197349 pA\n",
26252619
"PSC maximum J_EI: -12915.496650 pA\n",
2626-
"Model parameters: {'dt': 0.1, 'print_simulation_progress': False, 'soma_model': 'iaf_psc_exp_nonlineardendrite_neuron_nestml__with_stdsp_synapse_nestml', 'soma_params': {'C_m': 250.0, 'E_L': 0.0, 'V_m': 0.0, 'V_reset': 0.0, 'V_th': 20.0, 't_ref': 10.0, 'tau_m': 10.0, 'tau_syn1': 2.0, 'tau_syn2': 5.0, 'tau_syn3': 1.0, 'I_p': 200.0, 'tau_dAP': 60.0, 'theta_dAP': 59.0, 'I_dend_incr': 0.542}, 'fixed_somatic_delay': 2, 'M': 6, 'n_E': 150, 'n_I': 1, 'L': 1, 'pattern_size': 20, 'inhibit_model': 'iaf_psc_exp', 'inhibit_params': {'C_m': 250.0, 'E_L': 0.0, 'I_e': 0.0, 'V_m': 0.0, 'V_reset': 0.0, 'V_th': 15.0, 't_ref': 2.0, 'tau_m': 5.0, 'tau_syn_ex': 0.5, 'tau_syn_in': 1.65}, 'J_EX_psp': 22.0, 'J_IE_psp': 0.9, 'J_EI_psp': -40.0, 'convergence': 5, 'rule': 'fixed_indegree', 'connection_prob': 0.2, 'syn_dict_ee': {'weight': 0.01, 'synapse_model': 'stdsp_synapse_nestml__with_iaf_psc_exp_nonlineardendrite_neuron_nestml', 'permanence_threshold': 10.0, 'tau_pre_trace': 20.0, 'delay': 2.0, 'receptor_type': 2, 'lambda_plus': 0.08, 'zt': 1.0, 'lambda_h': 0.014, 'Wmax': 12.98, 'permanence_max': 20.0, 'permanence_min': 1.0, 'lambda_minus': 0.0015, 'dt_min': 4.0, 'permanence': <nest.lib.hl_api_types.Parameter object at 0x7f4733fb5450>, 'dt_max': 80.0}, 'permanence_min': 0.0, 'permanence_max': 8.0, 'calibration': 0.0, 'conn_dict_ex': {'rule': 'all_to_all'}, 'syn_dict_ex': {'receptor_type': 1, 'delay': 0.1, 'weight': 4112.209148358356}, 'conn_dict_edx': {'rule': 'fixed_outdegree', 'outdegree': 21}, 'syn_dict_edx': {'receptor_type': 2, 'delay': 0.1, 'weight': 82.6}, 'syn_dict_ie': {'synapse_model': 'static_synapse', 'delay': 0.1, 'weight': 581.1973492566976}, 'syn_dict_ei': {'synapse_model': 'static_synapse', 'delay': 0.1, 'receptor_type': 3, 'weight': -12915.496650148836}, 'DeltaT': 40.0, 'excitation_start': 30.0, 'time_dend_to_somatic': 20.0, 'DeltaT_cue': 80.0, 'overwrite_files': True, 'seed': 111, 'pad_time': 5.0, 'idend_recording_interval': 1.0, 'idend_record_time': 8.0, 'evaluate_performance': True, 'evaluate_replay': False, 'record_idend_last_episode': True, 'store_connections': True, 'load_connections': False, 'sparse_first_char': False, 'active_weight_recorder': False, 'task': {'task_name': 'hard_coded', 'task_type': 1, 'vocab_size': 6, 'seed': 111, 'store_training_data': True}, 'learning_episodes': 40, 'episodes_to_testing': 1, 'conn_dict_ee': {'rule': 'fixed_indegree', 'indegree': 180, 'allow_autapses': False, 'allow_multapses': False}, 'R_m_soma': 0.04, 'R_m_inhibit': 0.02, 'DeltaT_seq': 100.0}\n",
2620+
"Model parameters: {'dt': 0.1, 'print_simulation_progress': False, 'soma_model': 'iaf_psc_exp_nonlineardendrite_neuron_nestml__with_stdsp_synapse_nestml', 'soma_params': {'C_m': 250.0, 'E_L': 0.0, 'V_m': 0.0, 'V_reset': 0.0, 'V_th': 20.0, 't_ref': 10.0, 'tau_m': 10.0, 'tau_syn1': 2.0, 'tau_syn2': 5.0, 'tau_syn3': 1.0, 'I_p': 200.0, 'tau_dAP': 60.0, 'theta_dAP': 59.0, 'unit_psr': 0.542}, 'fixed_somatic_delay': 2, 'M': 6, 'n_E': 150, 'n_I': 1, 'L': 1, 'pattern_size': 20, 'inhibit_model': 'iaf_psc_exp', 'inhibit_params': {'C_m': 250.0, 'E_L': 0.0, 'I_e': 0.0, 'V_m': 0.0, 'V_reset': 0.0, 'V_th': 15.0, 't_ref': 2.0, 'tau_m': 5.0, 'tau_syn_ex': 0.5, 'tau_syn_in': 1.65}, 'J_EX_psp': 22.0, 'J_IE_psp': 0.9, 'J_EI_psp': -40.0, 'convergence': 5, 'rule': 'fixed_indegree', 'connection_prob': 0.2, 'syn_dict_ee': {'weight': 0.01, 'synapse_model': 'stdsp_synapse_nestml__with_iaf_psc_exp_nonlineardendrite_neuron_nestml', 'permanence_threshold': 10.0, 'tau_pre_trace': 20.0, 'delay': 2.0, 'receptor_type': 2, 'lambda_plus': 0.08, 'zt': 1.0, 'lambda_h': 0.014, 'Wmax': 12.98, 'permanence_max': 20.0, 'permanence_min': 1.0, 'lambda_minus': 0.0015, 'dt_min': 4.0, 'permanence': <nest.lib.hl_api_types.Parameter object at 0x7f4733fb5450>, 'dt_max': 80.0}, 'permanence_min': 0.0, 'permanence_max': 8.0, 'calibration': 0.0, 'conn_dict_ex': {'rule': 'all_to_all'}, 'syn_dict_ex': {'receptor_type': 1, 'delay': 0.1, 'weight': 4112.209148358356}, 'conn_dict_edx': {'rule': 'fixed_outdegree', 'outdegree': 21}, 'syn_dict_edx': {'receptor_type': 2, 'delay': 0.1, 'weight': 82.6}, 'syn_dict_ie': {'synapse_model': 'static_synapse', 'delay': 0.1, 'weight': 581.1973492566976}, 'syn_dict_ei': {'synapse_model': 'static_synapse', 'delay': 0.1, 'receptor_type': 3, 'weight': -12915.496650148836}, 'DeltaT': 40.0, 'excitation_start': 30.0, 'time_dend_to_somatic': 20.0, 'DeltaT_cue': 80.0, 'overwrite_files': True, 'seed': 111, 'pad_time': 5.0, 'idend_recording_interval': 1.0, 'idend_record_time': 8.0, 'evaluate_performance': True, 'evaluate_replay': False, 'record_idend_last_episode': True, 'store_connections': True, 'load_connections': False, 'sparse_first_char': False, 'active_weight_recorder': False, 'task': {'task_name': 'hard_coded', 'task_type': 1, 'vocab_size': 6, 'seed': 111, 'store_training_data': True}, 'learning_episodes': 40, 'episodes_to_testing': 1, 'conn_dict_ee': {'rule': 'fixed_indegree', 'indegree': 180, 'allow_autapses': False, 'allow_multapses': False}, 'R_m_soma': 0.04, 'R_m_inhibit': 0.02, 'DeltaT_seq': 100.0}\n",
26272621
"\n",
26282622
"Duration of a sequence set 440 ms\n",
26292623
"\n",
@@ -3502,7 +3496,7 @@
35023496
"PSC maximum J_EX: 4112.209148 pA\n",
35033497
"PSC maximum J_IE: 77.492980 pA\n",
35043498
"PSC maximum J_EI: -12915.496650 pA\n",
3505-
"Model parameters: {'dt': 0.1, 'print_simulation_progress': False, 'soma_model': 'iaf_psc_exp_nonlineardendrite_neuron_nestml__with_stdsp_synapse_nestml', 'soma_params': {'C_m': 250.0, 'E_L': 0.0, 'V_m': 0.0, 'V_reset': 0.0, 'V_th': 5.0, 't_ref': 10.0, 'tau_m': 10.0, 'tau_syn1': 2.0, 'tau_syn2': 5.0, 'tau_syn3': 1.0, 'I_p': 200.0, 'tau_dAP': 60.0, 'theta_dAP': 41.3, 'I_dend_incr': 0.542}, 'fixed_somatic_delay': 2, 'M': 6, 'n_E': 150, 'n_I': 1, 'L': 1, 'pattern_size': 20, 'inhibit_model': 'iaf_psc_exp', 'inhibit_params': {'C_m': 250.0, 'E_L': 0.0, 'I_e': 0.0, 'V_m': 0.0, 'V_reset': 0.0, 'V_th': 15.0, 't_ref': 2.0, 'tau_m': 5.0, 'tau_syn_ex': 0.5, 'tau_syn_in': 1.65}, 'J_EX_psp': 22.0, 'J_IE_psp': 0.12, 'J_EI_psp': -40.0, 'convergence': 5, 'rule': 'fixed_indegree', 'connection_prob': 0.2, 'syn_dict_ee': {'weight': 0.01, 'synapse_model': 'static_synapse', 'permanence_threshold': 10.0, 'tau_pre_trace': 20.0, 'delay': 2.0, 'receptor_type': 2, 'lambda_plus': 0.08, 'zt': 1.0, 'lambda_h': 0.014, 'Wmax': 12.98, 'permanence_max': 20.0, 'permanence_min': 1.0, 'lambda_minus': 0.0015, 'dt_min': 4.0, 'permanence': <nest.lib.hl_api_types.Parameter object at 0x7f46d10b76d0>, 'dt_max': -80.0}, 'permanence_min': 0.0, 'permanence_max': 8.0, 'calibration': 0.0, 'conn_dict_ex': {'rule': 'all_to_all'}, 'syn_dict_ex': {'receptor_type': 1, 'delay': 0.1, 'weight': 4112.209148358356}, 'conn_dict_edx': {'rule': 'fixed_outdegree', 'outdegree': 21}, 'syn_dict_edx': {'receptor_type': 2, 'delay': 0.1, 'weight': 82.6}, 'syn_dict_ie': {'synapse_model': 'static_synapse', 'delay': 0.1, 'weight': 77.49297990089302}, 'syn_dict_ei': {'synapse_model': 'static_synapse', 'delay': 0.1, 'receptor_type': 3, 'weight': -12915.496650148836}, 'DeltaT': 40.0, 'excitation_start': 30.0, 'time_dend_to_somatic': 20.0, 'DeltaT_cue': 250.0, 'overwrite_files': True, 'seed': 111, 'pad_time': 5.0, 'idend_recording_interval': 0.1, 'idend_record_time': 8.0, 'evaluate_performance': False, 'evaluate_replay': True, 'record_idend_last_episode': True, 'store_connections': False, 'load_connections': True, 'sparse_first_char': False, 'active_weight_recorder': False, 'task': {'task_name': 'hard_coded', 'task_type': 1, 'vocab_size': 6, 'seed': 111, 'store_training_data': True}, 'learning_episodes': 4, 'episodes_to_testing': 1, 'store_training_data': False, 'conn_dict_ee': {'rule': 'fixed_indegree', 'indegree': 180, 'allow_autapses': False, 'allow_multapses': False}, 'R_m_soma': 0.04, 'R_m_inhibit': 0.02, 'DeltaT_seq': 100.0}\n",
3499+
"Model parameters: {'dt': 0.1, 'print_simulation_progress': False, 'soma_model': 'iaf_psc_exp_nonlineardendrite_neuron_nestml__with_stdsp_synapse_nestml', 'soma_params': {'C_m': 250.0, 'E_L': 0.0, 'V_m': 0.0, 'V_reset': 0.0, 'V_th': 5.0, 't_ref': 10.0, 'tau_m': 10.0, 'tau_syn1': 2.0, 'tau_syn2': 5.0, 'tau_syn3': 1.0, 'I_p': 200.0, 'tau_dAP': 60.0, 'theta_dAP': 41.3, 'unit_psr': 0.542}, 'fixed_somatic_delay': 2, 'M': 6, 'n_E': 150, 'n_I': 1, 'L': 1, 'pattern_size': 20, 'inhibit_model': 'iaf_psc_exp', 'inhibit_params': {'C_m': 250.0, 'E_L': 0.0, 'I_e': 0.0, 'V_m': 0.0, 'V_reset': 0.0, 'V_th': 15.0, 't_ref': 2.0, 'tau_m': 5.0, 'tau_syn_ex': 0.5, 'tau_syn_in': 1.65}, 'J_EX_psp': 22.0, 'J_IE_psp': 0.12, 'J_EI_psp': -40.0, 'convergence': 5, 'rule': 'fixed_indegree', 'connection_prob': 0.2, 'syn_dict_ee': {'weight': 0.01, 'synapse_model': 'static_synapse', 'permanence_threshold': 10.0, 'tau_pre_trace': 20.0, 'delay': 2.0, 'receptor_type': 2, 'lambda_plus': 0.08, 'zt': 1.0, 'lambda_h': 0.014, 'Wmax': 12.98, 'permanence_max': 20.0, 'permanence_min': 1.0, 'lambda_minus': 0.0015, 'dt_min': 4.0, 'permanence': <nest.lib.hl_api_types.Parameter object at 0x7f46d10b76d0>, 'dt_max': -80.0}, 'permanence_min': 0.0, 'permanence_max': 8.0, 'calibration': 0.0, 'conn_dict_ex': {'rule': 'all_to_all'}, 'syn_dict_ex': {'receptor_type': 1, 'delay': 0.1, 'weight': 4112.209148358356}, 'conn_dict_edx': {'rule': 'fixed_outdegree', 'outdegree': 21}, 'syn_dict_edx': {'receptor_type': 2, 'delay': 0.1, 'weight': 82.6}, 'syn_dict_ie': {'synapse_model': 'static_synapse', 'delay': 0.1, 'weight': 77.49297990089302}, 'syn_dict_ei': {'synapse_model': 'static_synapse', 'delay': 0.1, 'receptor_type': 3, 'weight': -12915.496650148836}, 'DeltaT': 40.0, 'excitation_start': 30.0, 'time_dend_to_somatic': 20.0, 'DeltaT_cue': 250.0, 'overwrite_files': True, 'seed': 111, 'pad_time': 5.0, 'idend_recording_interval': 0.1, 'idend_record_time': 8.0, 'evaluate_performance': False, 'evaluate_replay': True, 'record_idend_last_episode': True, 'store_connections': False, 'load_connections': True, 'sparse_first_char': False, 'active_weight_recorder': False, 'task': {'task_name': 'hard_coded', 'task_type': 1, 'vocab_size': 6, 'seed': 111, 'store_training_data': True}, 'learning_episodes': 4, 'episodes_to_testing': 1, 'store_training_data': False, 'conn_dict_ee': {'rule': 'fixed_indegree', 'indegree': 180, 'allow_autapses': False, 'allow_multapses': False}, 'R_m_soma': 0.04, 'R_m_inhibit': 0.02, 'DeltaT_seq': 100.0}\n",
35063500
"\n",
35073501
"Duration of a sequence set 440 ms\n",
35083502
"\n",

pynestml/cocos/co_co_all_variables_defined.py

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -68,17 +68,6 @@ def check_co_co(cls, node: ASTModel):
6868
inline_expr_names.extend([inline_expr.variable_name for inline_expr in equations_block.get_inline_expressions()])
6969
inline_exprs.extend(equations_block.get_inline_expressions())
7070

71-
if var.get_name() in inline_expr_names:
72-
inline_expr_idx = inline_expr_names.index(var.get_name())
73-
inline_expr = inline_exprs[inline_expr_idx]
74-
from pynestml.utils.ast_utils import ASTUtils
75-
if ASTUtils.inline_aliases_convolution(inline_expr):
76-
symbol2 = node.get_scope().resolve_to_symbol(var.get_name(), SymbolKind.VARIABLE)
77-
if symbol2 is not None:
78-
# actually, no problem detected, skip error
79-
# XXX: TODO: check that differential order is less than or equal to that of the kernel
80-
continue
81-
8271
# check if this symbol is actually a type, e.g. "mV" in the expression "(1 + 2) * mV"
8372
symbol2 = var.get_scope().resolve_to_symbol(var.get_complete_name(), SymbolKind.TYPE)
8473
if symbol2 is not None:

pynestml/codegeneration/resources_nest/point_neuron/common/NeuronHeader.jinja2

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -216,7 +216,7 @@ public:
216216
double {{ var }}_;
217217

218218
{%- set inline = utils.get_inline_expression_by_constructed_rhs_name(paired_synapse_original_model, var) %}
219-
{%- if inline and utils.inline_aliases_convolution(inline) %}
219+
{%- if inline %}
220220
double get_{{ inline.get_variable_name() + "__for_" + paired_synapse_original_model.get_name() }}() const // getter for an inline expression
221221
{%- else %}
222222
double get_{{ var }}() const

0 commit comments

Comments
 (0)