diff --git a/pynestml/codegeneration/resources_nest/point_neuron/common/NeuronClass.jinja2 b/pynestml/codegeneration/resources_nest/point_neuron/common/NeuronClass.jinja2 index 9aee4c9cc..404e89d1e 100644 --- a/pynestml/codegeneration/resources_nest/point_neuron/common/NeuronClass.jinja2 +++ b/pynestml/codegeneration/resources_nest/point_neuron/common/NeuronClass.jinja2 @@ -1114,12 +1114,17 @@ void {{ neuronName }}::handle(nest::SpikeEvent &e) } else { + // Get the buffer index for inhibitory port nestml_buffer_idx = std::get<1>(rport_to_nestml_buffer_idx[e.get_rport()]); - if ( nestml_buffer_idx == {{ neuronName }}::PORT_NOT_AVAILABLE ) + if ( nestml_buffer_idx != {{ neuronName }}::PORT_NOT_AVAILABLE ) { + weight = -weight; + } + else + { + // spiking input port with negative weight, no change in the sign of weight nestml_buffer_idx = std::get<0>(rport_to_nestml_buffer_idx[e.get_rport()]); } - weight = -weight; } {%- endif %} B_.spike_inputs_[ nestml_buffer_idx - MIN_SPIKE_RECEPTOR ].add_value( diff --git a/tests/nest_tests/input_ports_test.py b/tests/nest_tests/input_ports_test.py index 0d26c79ad..888c78259 100644 --- a/tests/nest_tests/input_ports_test.py +++ b/tests/nest_tests/input_ports_test.py @@ -87,16 +87,16 @@ def test_input_ports(self): connections = nest.GetConnections(target=neuron) # corresponds to ``bar += NMDA_spikes + 2 * AMPA_spikes - 3 * GABA_spikes`` in the update block - assert events["bar"][-1] == len(spike_times[0]) * abs(connections.get("weight")[0]) \ + assert events["bar"][-1] == len(spike_times[0]) * connections.get("weight")[0] \ + 2 * len(spike_times[1]) * abs(connections.get("weight")[1]) \ - 3 * len(spike_times[2]) * abs(connections.get("weight")[2]) # corresponds to ``foo_spikes += foo[0] + 5.5 * foo[1]`` in the update block - assert events["foo_spikes"][-1] == len(spike_times[3]) * abs(connections.get("weight")[3]) \ + assert events["foo_spikes"][-1] == len(spike_times[3]) * connections.get("weight")[3] \ + 5.5 * len(spike_times[4]) * abs(connections.get("weight")[4]) # corresponds to ``my_spikes_ip += my_spikes[0] + my_spikes[1] - my_spikes2[1]`` in the update block - assert events["my_spikes_ip"][-1] == len(spike_times[5]) * abs(connections.get("weight")[5]) \ + assert events["my_spikes_ip"][-1] == len(spike_times[5]) * connections.get("weight")[5] \ + len(spike_times[6]) * abs(connections.get("weight")[6]) \ - len(spike_times[7]) * abs(connections.get("weight")[7]) diff --git a/tests/nest_tests/resources/iaf_psc_exp_multisynapse.nestml b/tests/nest_tests/resources/iaf_psc_exp_multisynapse.nestml index 2c73778ba..e05b89249 100644 --- a/tests/nest_tests/resources/iaf_psc_exp_multisynapse.nestml +++ b/tests/nest_tests/resources/iaf_psc_exp_multisynapse.nestml @@ -21,7 +21,7 @@ model iaf_psc_exp_multisynapse_neuron: kernel I_kernel2 = (e / tau_syn2) * t * exp(-t / tau_syn2) kernel I_kernel3 = -exp(-t / tau_syn3) - recordable inline I_syn pA = (convolve(I_kernel1, spikes1) - convolve(I_kernel2, spikes2) + convolve(I_kernel3, spikes3)) * pA + recordable inline I_syn pA = (convolve(I_kernel1, spikes1) + convolve(I_kernel2, spikes2) + convolve(I_kernel3, spikes3)) * pA V_m' = -(V_m - E_L) / tau_m + (I_syn + I_e + I_stim) / C_m diff --git a/tests/nest_tests/resources/iaf_psc_exp_multisynapse_vectors.nestml b/tests/nest_tests/resources/iaf_psc_exp_multisynapse_vectors.nestml index 305fcf53e..6219c2681 100644 --- a/tests/nest_tests/resources/iaf_psc_exp_multisynapse_vectors.nestml +++ b/tests/nest_tests/resources/iaf_psc_exp_multisynapse_vectors.nestml @@ -21,7 +21,7 @@ model iaf_psc_exp_multisynapse_vectors_neuron: kernel I_kernel2 = exp(-1/tau_syn2*t) kernel I_kernel3 = -exp(-1/tau_syn3*t) - inline I_syn pA = (convolve(I_kernel1, spikes[0]) - convolve(I_kernel2, spikes[1]) + convolve(I_kernel3, spikes[2])) * pA + inline I_syn pA = (convolve(I_kernel1, spikes[0]) + convolve(I_kernel2, spikes[1]) + convolve(I_kernel3, spikes[2])) * pA V_m' = -(V_m - E_L) / tau_m + (I_syn + I_e + I_stim) / C_m diff --git a/tests/nest_tests/test_multisynapse.py b/tests/nest_tests/test_multisynapse.py index 60fc50abe..b9c47061a 100644 --- a/tests/nest_tests/test_multisynapse.py +++ b/tests/nest_tests/test_multisynapse.py @@ -69,7 +69,7 @@ def test_multisynapse(self): nest.Connect(sg, neuron, syn_spec={"receptor_type": receptor_types["SPIKES1"], "weight": 1000., "delay": 0.1}) sg2 = nest.Create("spike_generator", params={"spike_times": [40., 60.]}) - nest.Connect(sg2, neuron, syn_spec={"receptor_type": receptor_types["SPIKES2"], "weight": 1000., "delay": 0.1}) + nest.Connect(sg2, neuron, syn_spec={"receptor_type": receptor_types["SPIKES2"], "weight": -1000., "delay": 0.1}) sg3 = nest.Create("spike_generator", params={"spike_times": [30., 70.]}) nest.Connect(sg3, neuron, syn_spec={"receptor_type": receptor_types["SPIKES3"], "weight": 500., "delay": 0.1}) @@ -150,7 +150,7 @@ def test_multisynapse_with_vector_input_ports(self): nest.Connect(sg, neuron, syn_spec={"receptor_type": receptor_types["SPIKES_0"], "weight": 1000., "delay": 0.1}) sg2 = nest.Create("spike_generator", params={"spike_times": [40., 60.]}) - nest.Connect(sg2, neuron, syn_spec={"receptor_type": receptor_types["SPIKES_1"], "weight": 1000., "delay": 0.1}) + nest.Connect(sg2, neuron, syn_spec={"receptor_type": receptor_types["SPIKES_1"], "weight": -1000., "delay": 0.1}) sg3 = nest.Create("spike_generator", params={"spike_times": [30., 70.]}) nest.Connect(sg3, neuron, syn_spec={"receptor_type": receptor_types["SPIKES_2"], "weight": 500., "delay": 0.1})