From 9ada4ed072ac63f99e2a5868de69d8d961d0d633 Mon Sep 17 00:00:00 2001
From: Pooja Babu
Date: Thu, 22 Jun 2023 11:37:42 +0200
Subject: [PATCH 01/12] Replace NEST typedefs in templates with plain C++
datatypes
---
.../point_neuron/common/NeuronHeader.jinja2 | 44 ++++++++++
.../common/SynapseHeader.h.jinja2 | 83 ++++++++++++++++++-
2 files changed, 123 insertions(+), 4 deletions(-)
diff --git a/pynestml/codegeneration/resources_nest/point_neuron/common/NeuronHeader.jinja2 b/pynestml/codegeneration/resources_nest/point_neuron/common/NeuronHeader.jinja2
index ea213f57b..cb826d7b2 100644
--- a/pynestml/codegeneration/resources_nest/point_neuron/common/NeuronHeader.jinja2
+++ b/pynestml/codegeneration/resources_nest/point_neuron/common/NeuronHeader.jinja2
@@ -231,7 +231,11 @@ public:
/**
* Used to validate that we can send {{ output_event.OutputEvent() }} to desired target:port.
**/
+{%- if not (nest_version.startswith("v2") or nest_version.startswith("v3.0") or nest_version.startswith("v3.1") or nest_version.startswith("v3.2") or nest_version.startswith("v3.3") or nest_version.startswith("v3.4")) %}
+ size_t send_test_event(nest::Node& target, size_t receptor_type, nest::synindex, bool) override;
+{%- else %}
nest::port send_test_event(nest::Node& target, nest::rport receptor_type, nest::synindex, bool) override;
+{%- endif %}
// -------------------------------------------------------------------------
// Functions handling incoming events.
@@ -248,12 +252,24 @@ public:
void handle(nest::DataLoggingRequest &) override;//! allow recording with multimeter
{%- if has_spike_input %}
+{%- if not (nest_version.startswith("v2") or nest_version.startswith("v3.0") or nest_version.startswith("v3.1") or nest_version.startswith("v3.2") or nest_version.startswith("v3.3") or nest_version.startswith("v3.4")) %}
+ size_t handles_test_event(nest::SpikeEvent&, size_t) override;
+{%- else %}
nest::port handles_test_event(nest::SpikeEvent&, nest::port) override;
{%- endif %}
+{%- endif %}
{%- if has_continuous_input %}
+{%- if not (nest_version.startswith("v2") or nest_version.startswith("v3.0") or nest_version.startswith("v3.1") or nest_version.startswith("v3.2") or nest_version.startswith("v3.3") or nest_version.startswith("v3.4")) %}
+ size_t handles_test_event(nest::CurrentEvent&, size_t) override;
+{%- else %}
nest::port handles_test_event(nest::CurrentEvent&, nest::port) override;
{%- endif %}
+{%- endif %}
+{%- if not (nest_version.startswith("v2") or nest_version.startswith("v3.0") or nest_version.startswith("v3.1") or nest_version.startswith("v3.2") or nest_version.startswith("v3.3") or nest_version.startswith("v3.4")) %}
+ size_t handles_test_event(nest::DataLoggingRequest&, size_t) override;
+{%- else %}
nest::port handles_test_event(nest::DataLoggingRequest&, nest::port) override;
+{%- endif %}
// -------------------------------------------------------------------------
// Functions for getting/setting parameters and state values.
@@ -392,13 +408,25 @@ private:
* @note Excluded lower and upper bounds are defined as MIN_, MAX_.
* Excluding port 0 avoids accidental connections.
**/
+{%- if not (nest_version.startswith("v2") or nest_version.startswith("v3.0") or nest_version.startswith("v3.1") or nest_version.startswith("v3.2") or nest_version.startswith("v3.3") or nest_version.startswith("v3.4")) %}
+ static const size_t MIN_SPIKE_RECEPTOR = 1;
+{%- else %}
static const nest::port MIN_SPIKE_RECEPTOR = 1;
+{%- endif %}
{%- set ns = namespace(count=1) %}
+{%- else %}
+{%- if not (nest_version.startswith("v2") or nest_version.startswith("v3.0") or nest_version.startswith("v3.1") or nest_version.startswith("v3.2") or nest_version.startswith("v3.3") or nest_version.startswith("v3.4")) %}
+ static const size_t MIN_SPIKE_RECEPTOR = 0;
{%- else %}
static const nest::port MIN_SPIKE_RECEPTOR = 0;
+{%- endif %}
{%- set ns = namespace(count=0) %}
{%- endif %}
+{%- if not (nest_version.startswith("v2") or nest_version.startswith("v3.0") or nest_version.startswith("v3.1") or nest_version.startswith("v3.2") or nest_version.startswith("v3.3") or nest_version.startswith("v3.4")) %}
+ static const size_t PORT_NOT_AVAILABLE = -1;
+{%- else %}
static const nest::port PORT_NOT_AVAILABLE = -1;
+{%- endif %}
enum SynapseTypes
{
@@ -772,7 +800,11 @@ private:
}; /* neuron {{neuronName}} */
+{%- if not (nest_version.startswith("v2") or nest_version.startswith("v3.0") or nest_version.startswith("v3.1") or nest_version.startswith("v3.2") or nest_version.startswith("v3.3") or nest_version.startswith("v3.4")) %}
+inline size_t {{neuronName}}::send_test_event(nest::Node& target, size_t receptor_type, nest::synindex, bool)
+{%- else %}
inline nest::port {{neuronName}}::send_test_event(nest::Node& target, nest::rport receptor_type, nest::synindex, bool)
+{%- endif %}
{
// You should usually not change the code in this function.
// It confirms that the target of connection @c c accepts @c {{ output_event.OutputEvent() }} on
@@ -783,7 +815,11 @@ inline nest::port {{neuronName}}::send_test_event(nest::Node& target, nest::rpor
}
{%- if has_spike_input %}
+{%- if not (nest_version.startswith("v2") or nest_version.startswith("v3.0") or nest_version.startswith("v3.1") or nest_version.startswith("v3.2") or nest_version.startswith("v3.3") or nest_version.startswith("v3.4")) %}
+inline size_t {{neuronName}}::handles_test_event(nest::SpikeEvent&, size_t receptor_type)
+{%- else %}
inline nest::port {{neuronName}}::handles_test_event(nest::SpikeEvent&, nest::port receptor_type)
+{%- endif %}
{
{%- if (neuron.get_multiple_receptors())|length > 1 or neuron.is_multisynapse_spikes() %}
assert( B_.spike_inputs_.size() == NUM_SPIKE_RECEPTORS );
@@ -807,7 +843,11 @@ inline nest::port {{neuronName}}::handles_test_event(nest::SpikeEvent&, nest::po
{%- endif %}
{%- if has_continuous_input %}
+{%- if not (nest_version.startswith("v2") or nest_version.startswith("v3.0") or nest_version.startswith("v3.1") or nest_version.startswith("v3.2") or nest_version.startswith("v3.3") or nest_version.startswith("v3.4")) %}
+inline size_t {{neuronName}}::handles_test_event(nest::CurrentEvent&, size_t receptor_type)
+{%- else %}
inline nest::port {{neuronName}}::handles_test_event(nest::CurrentEvent&, nest::port receptor_type)
+{%- endif %}
{
// You should usually not change the code in this function.
// It confirms to the connection management system that we are able
@@ -821,7 +861,11 @@ inline nest::port {{neuronName}}::handles_test_event(nest::CurrentEvent&, nest::
}
{%- endif %}
+{%- if not (nest_version.startswith("v2") or nest_version.startswith("v3.0") or nest_version.startswith("v3.1") or nest_version.startswith("v3.2") or nest_version.startswith("v3.3") or nest_version.startswith("v3.4")) %}
+inline size_t {{neuronName}}::handles_test_event(nest::DataLoggingRequest& dlr, size_t receptor_type)
+{%- else %}
inline nest::port {{neuronName}}::handles_test_event(nest::DataLoggingRequest& dlr, nest::port receptor_type)
+{%- endif %}
{
// You should usually not change the code in this function.
// It confirms to the connection management system that we are able
diff --git a/pynestml/codegeneration/resources_nest/point_neuron/common/SynapseHeader.h.jinja2 b/pynestml/codegeneration/resources_nest/point_neuron/common/SynapseHeader.h.jinja2
index 6f98382ee..5d1b12143 100644
--- a/pynestml/codegeneration/resources_nest/point_neuron/common/SynapseHeader.h.jinja2
+++ b/pynestml/codegeneration/resources_nest/point_neuron/common/SynapseHeader.h.jinja2
@@ -165,7 +165,11 @@ public:
long vtnode_id;
if ( updateValue< long >( d, names::vt, vtnode_id ) )
{
+{%- if not (nest_version.startswith("v2") or nest_version.startswith("v3.0") or nest_version.startswith("v3.1") or nest_version.startswith("v3.2") or nest_version.startswith("v3.3") or nest_version.startswith("v3.4")) %}
+ const size_t tid = kernel().vp_manager.get_thread_id();
+{%- else %}
const thread tid = kernel().vp_manager.get_thread_id();
+{%- endif %}
{%- if nest_version.startswith("v2") %}
Node* vt = kernel().node_manager.get_node( vtnode_id, tid );
{%- else %}
@@ -223,11 +227,18 @@ class {{synapseName}} : public Connection< targetidentifierT >
{% endif %}
{%- if vt_ports is defined and vt_ports|length > 0 %}
public:
+{%- if not (nest_version.startswith("v2") or nest_version.startswith("v3.0") or nest_version.startswith("v3.1") or nest_version.startswith("v3.2") or nest_version.startswith("v3.3") or nest_version.startswith("v3.4")) %}
+ void trigger_update_weight( size_t t,
+ const std::vector< spikecounter >& vt_spikes,
+ double t_trig,
+ const {{synapseName}}CommonSynapseProperties& cp );
+{%- else %}
void trigger_update_weight( thread t,
const std::vector< spikecounter >& vt_spikes,
double t_trig,
const {{synapseName}}CommonSynapseProperties& cp );
{%- endif %}
+{%- endif %}
private:
double t_lastspike_;
{%- if vt_ports is defined and vt_ports|length > 0 %}
@@ -236,7 +247,11 @@ private:
// vt_spikes_idx_ refers to the vt spike that has just been processed after trigger_update_weight
// a pseudo vt spike at t_trig is stored at index 0 and vt_spikes_idx_ = 0
+{%- if not (nest_version.startswith("v2") or nest_version.startswith("v3.0") or nest_version.startswith("v3.1") or nest_version.startswith("v3.2") or nest_version.startswith("v3.3") or nest_version.startswith("v3.4")) %}
+ size_t vt_spikes_idx_;
+{%- else %}
index vt_spikes_idx_;
+{%- endif %}
{%- endif %}
/**
@@ -270,7 +285,7 @@ private:
{# N.B. numeric solver contains all state variables, including those that will be solved by analytic solver#}
{%- if uses_numeric_solver %}
// numeric solver state variables
-{%- for variable_name in numeric_state_variables: %}
+{%- for variable_name in numeric_state_variables %}
{{variable_name}},
{%- endfor %}
{%- endif %}
@@ -471,8 +486,13 @@ public:
// Ensure proper overriding of overloaded virtual functions.
// Return values from functions are ignored.
using ConnTestDummyNodeBase::handles_test_event;
+{%- if not (nest_version.startswith("v2") or nest_version.startswith("v3.0") or nest_version.startswith("v3.1") or nest_version.startswith("v3.2") or nest_version.startswith("v3.3") or nest_version.startswith("v3.4")) %}
+ size_t
+ handles_test_event( SpikeEvent&, size_t ) override
+{%- else %}
port
handles_test_event( SpikeEvent&, rport ) override
+{%- endif %}
{
{%- if nest_version.startswith("v2") or nest_version.startswith("v3.0") or nest_version.startswith("v3.1") or nest_version.startswith("v3.2") or nest_version.startswith("v3.3") %}
return invalid_port_;
@@ -480,56 +500,91 @@ public:
return invalid_port;
{%- endif %}
}
+{%- if not (nest_version.startswith("v2") or nest_version.startswith("v3.0") or nest_version.startswith("v3.1") or nest_version.startswith("v3.2") or nest_version.startswith("v3.3") or nest_version.startswith("v3.4")) %}
+ size_t
+ handles_test_event( RateEvent&, size_t ) override
+{%- else %}
port
handles_test_event( RateEvent&, rport ) override
+{%- endif %}
{
{%- if nest_version.startswith("v2") or nest_version.startswith("v3.0") or nest_version.startswith("v3.1") or nest_version.startswith("v3.2") or nest_version.startswith("v3.3") %}
return invalid_port_;
{%- else %}
return invalid_port;
{%- endif %} }
+{%- if not (nest_version.startswith("v2") or nest_version.startswith("v3.0") or nest_version.startswith("v3.1") or nest_version.startswith("v3.2") or nest_version.startswith("v3.3") or nest_version.startswith("v3.4")) %}
+ size_t
+ handles_test_event( DataLoggingRequest&, size_t ) override
+ {
+{%- else %}
port
handles_test_event( DataLoggingRequest&, rport ) override
- {
+{%- endif %}
{%- if nest_version.startswith("v2") or nest_version.startswith("v3.0") or nest_version.startswith("v3.1") or nest_version.startswith("v3.2") or nest_version.startswith("v3.3") %}
return invalid_port_;
{%- else %}
return invalid_port;
{%- endif %} }
+{%- if not (nest_version.startswith("v2") or nest_version.startswith("v3.0") or nest_version.startswith("v3.1") or nest_version.startswith("v3.2") or nest_version.startswith("v3.3") or nest_version.startswith("v3.4")) %}
+ size_t
+ handles_test_event( CurrentEvent&, size_t ) override
+ {
+{%- else %}
port
handles_test_event( CurrentEvent&, rport ) override
- {
+{%- endif %}
{%- if nest_version.startswith("v2") or nest_version.startswith("v3.0") or nest_version.startswith("v3.1") or nest_version.startswith("v3.2") or nest_version.startswith("v3.3") %}
return invalid_port_;
{%- else %}
return invalid_port;
{%- endif %} }
+{%- if not (nest_version.startswith("v2") or nest_version.startswith("v3.0") or nest_version.startswith("v3.1") or nest_version.startswith("v3.2") or nest_version.startswith("v3.3") or nest_version.startswith("v3.4")) %}
+ size_t
+ handles_test_event( ConductanceEvent&, size_t ) override
+ {
+{%- else %}
port
handles_test_event( ConductanceEvent&, rport ) override
- {
+{%- endif %}
{%- if nest_version.startswith("v2") or nest_version.startswith("v3.0") or nest_version.startswith("v3.1") or nest_version.startswith("v3.2") or nest_version.startswith("v3.3") %}
return invalid_port_;
{%- else %}
return invalid_port;
{%- endif %} }
+{%- if not (nest_version.startswith("v2") or nest_version.startswith("v3.0") or nest_version.startswith("v3.1") or nest_version.startswith("v3.2") or nest_version.startswith("v3.3") or nest_version.startswith("v3.4")) %}
+ size_t
+ handles_test_event( DoubleDataEvent&, size_t ) override
+{%- else %}
port
handles_test_event( DoubleDataEvent&, rport ) override
+{%- endif %}
{
{%- if nest_version.startswith("v2") or nest_version.startswith("v3.0") or nest_version.startswith("v3.1") or nest_version.startswith("v3.2") or nest_version.startswith("v3.3") %}
return invalid_port_;
{%- else %}
return invalid_port;
{%- endif %} }
+{%- if not (nest_version.startswith("v2") or nest_version.startswith("v3.0") or nest_version.startswith("v3.1") or nest_version.startswith("v3.2") or nest_version.startswith("v3.3") or nest_version.startswith("v3.4")) %}
+ size_t
+ handles_test_event( DSSpikeEvent&, size_t ) override
+{%- else %}
port
handles_test_event( DSSpikeEvent&, rport ) override
+{%- endif %}
{
{%- if nest_version.startswith("v2") or nest_version.startswith("v3.0") or nest_version.startswith("v3.1") or nest_version.startswith("v3.2") or nest_version.startswith("v3.3") %}
return invalid_port_;
{%- else %}
return invalid_port;
{%- endif %} }
+{%- if not (nest_version.startswith("v2") or nest_version.startswith("v3.0") or nest_version.startswith("v3.1") or nest_version.startswith("v3.2") or nest_version.startswith("v3.3") or nest_version.startswith("v3.4")) %}
+ size_t
+ handles_test_event( DSCurrentEvent&, size_t ) override
+{%- else %}
port
handles_test_event( DSCurrentEvent&, rport ) override
+{%- endif %}
{
{%- if nest_version.startswith("v2") or nest_version.startswith("v3.0") or nest_version.startswith("v3.1") or nest_version.startswith("v3.2") or nest_version.startswith("v3.3") %}
return invalid_port_;
@@ -558,11 +613,19 @@ public:
assert(0);
}
+{%- if not (nest_version.startswith("v2") or nest_version.startswith("v3.0") or nest_version.startswith("v3.1") or nest_version.startswith("v3.2") or nest_version.startswith("v3.3") or nest_version.startswith("v3.4")) %}
+ void
+ check_connection( Node& s,
+ Node& t,
+ size_t receptor_type,
+ const CommonPropertiesType& cp )
+{%- else %}
void
check_connection( Node& s,
Node& t,
rport receptor_type,
const CommonPropertiesType& cp )
+{%- endif %}
{
ConnTestDummyNode dummy_target;
ConnectionBase::check_connection_( dummy_target, s, t, receptor_type );
@@ -587,8 +650,13 @@ public:
t.register_stdp_connection( t_lastspike_ - get_delay(), get_delay() );
}
+{%- if not (nest_version.startswith("v2") or nest_version.startswith("v3.0") or nest_version.startswith("v3.1") or nest_version.startswith("v3.2") or nest_version.startswith("v3.3") or nest_version.startswith("v3.4")) %}
+ void
+ send( Event& e, const size_t tid, const {{synapseName}}CommonSynapseProperties& cp )
+{%- else %}
void
send( Event& e, const thread tid, const {{synapseName}}CommonSynapseProperties& cp )
+{%- endif %}
{
const double __resolution = nest::Time::get_resolution().get_ms(); // do not remove, this is necessary for the resolution() function
@@ -1185,11 +1253,18 @@ inline void
* Update to end of timestep ``t_trig``, while processing vt spikes and post spikes
**/
template < typename targetidentifierT >
+{%- if not (nest_version.startswith("v2") or nest_version.startswith("v3.0") or nest_version.startswith("v3.1") or nest_version.startswith("v3.2") or nest_version.startswith("v3.3") or nest_version.startswith("v3.4")) %}
inline void
+{{synapseName}}< targetidentifierT >::trigger_update_weight( size_t t,
+ const std::vector< spikecounter >& vt_spikes,
+ const double t_trig,
+ const CommonPropertiesType& cp )
+{%- else %}
{{synapseName}}< targetidentifierT >::trigger_update_weight( thread t,
const std::vector< spikecounter >& vt_spikes,
const double t_trig,
const CommonPropertiesType& cp )
+{%- endif %}
{
// propagate all state variables in the synapse to time t_trig
#ifdef DEBUG
From cd4753aa4a217fd8d248846a4c8cecf717129276 Mon Sep 17 00:00:00 2001
From: Pooja Babu
Date: Thu, 22 Jun 2023 12:28:39 +0200
Subject: [PATCH 02/12] Fix build errors
---
.../point_neuron/common/NeuronClass.jinja2 | 2 +-
.../point_neuron/common/SynapseHeader.h.jinja2 | 10 +++++-----
2 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/pynestml/codegeneration/resources_nest/point_neuron/common/NeuronClass.jinja2 b/pynestml/codegeneration/resources_nest/point_neuron/common/NeuronClass.jinja2
index 38b2c3e54..71e7bdd5a 100644
--- a/pynestml/codegeneration/resources_nest/point_neuron/common/NeuronClass.jinja2
+++ b/pynestml/codegeneration/resources_nest/point_neuron/common/NeuronClass.jinja2
@@ -576,7 +576,7 @@ void {{neuronName}}::handle(nest::DataLoggingRequest& e)
void {{neuronName}}::handle(nest::SpikeEvent &e)
{
assert(e.get_delay_steps() > 0);
- assert( e.get_rport() < static_cast< int >( B_.spike_inputs_.size() ) );
+ assert( e.get_rport() < B_.spike_inputs_.size() );
double weight = e.get_weight();
size_t nestml_buffer_idx = 0;
diff --git a/pynestml/codegeneration/resources_nest/point_neuron/common/SynapseHeader.h.jinja2 b/pynestml/codegeneration/resources_nest/point_neuron/common/SynapseHeader.h.jinja2
index 5d1b12143..1c8f60b51 100644
--- a/pynestml/codegeneration/resources_nest/point_neuron/common/SynapseHeader.h.jinja2
+++ b/pynestml/codegeneration/resources_nest/point_neuron/common/SynapseHeader.h.jinja2
@@ -516,11 +516,11 @@ public:
{%- if not (nest_version.startswith("v2") or nest_version.startswith("v3.0") or nest_version.startswith("v3.1") or nest_version.startswith("v3.2") or nest_version.startswith("v3.3") or nest_version.startswith("v3.4")) %}
size_t
handles_test_event( DataLoggingRequest&, size_t ) override
- {
{%- else %}
port
handles_test_event( DataLoggingRequest&, rport ) override
{%- endif %}
+ {
{%- if nest_version.startswith("v2") or nest_version.startswith("v3.0") or nest_version.startswith("v3.1") or nest_version.startswith("v3.2") or nest_version.startswith("v3.3") %}
return invalid_port_;
{%- else %}
@@ -528,12 +528,12 @@ public:
{%- endif %} }
{%- if not (nest_version.startswith("v2") or nest_version.startswith("v3.0") or nest_version.startswith("v3.1") or nest_version.startswith("v3.2") or nest_version.startswith("v3.3") or nest_version.startswith("v3.4")) %}
size_t
- handles_test_event( CurrentEvent&, size_t ) override
- {
+ handles_test_event( CurrentEvent&, size_t ) overri
{%- else %}
port
handles_test_event( CurrentEvent&, rport ) override
{%- endif %}
+ {
{%- if nest_version.startswith("v2") or nest_version.startswith("v3.0") or nest_version.startswith("v3.1") or nest_version.startswith("v3.2") or nest_version.startswith("v3.3") %}
return invalid_port_;
{%- else %}
@@ -541,12 +541,12 @@ public:
{%- endif %} }
{%- if not (nest_version.startswith("v2") or nest_version.startswith("v3.0") or nest_version.startswith("v3.1") or nest_version.startswith("v3.2") or nest_version.startswith("v3.3") or nest_version.startswith("v3.4")) %}
size_t
- handles_test_event( ConductanceEvent&, size_t ) override
- {
+ handles_test_event( ConductanceEvent&, size_t ) overrid
{%- else %}
port
handles_test_event( ConductanceEvent&, rport ) override
{%- endif %}
+ {
{%- if nest_version.startswith("v2") or nest_version.startswith("v3.0") or nest_version.startswith("v3.1") or nest_version.startswith("v3.2") or nest_version.startswith("v3.3") %}
return invalid_port_;
{%- else %}
From b272c27bfc8e523729600c5eb7881c34ed6b17c7 Mon Sep 17 00:00:00 2001
From: Pooja Babu
Date: Thu, 22 Jun 2023 14:06:02 +0200
Subject: [PATCH 03/12] Fix build errors
---
.../resources_nest/point_neuron/common/SynapseHeader.h.jinja2 | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/pynestml/codegeneration/resources_nest/point_neuron/common/SynapseHeader.h.jinja2 b/pynestml/codegeneration/resources_nest/point_neuron/common/SynapseHeader.h.jinja2
index 1c8f60b51..481835855 100644
--- a/pynestml/codegeneration/resources_nest/point_neuron/common/SynapseHeader.h.jinja2
+++ b/pynestml/codegeneration/resources_nest/point_neuron/common/SynapseHeader.h.jinja2
@@ -528,7 +528,7 @@ public:
{%- endif %} }
{%- if not (nest_version.startswith("v2") or nest_version.startswith("v3.0") or nest_version.startswith("v3.1") or nest_version.startswith("v3.2") or nest_version.startswith("v3.3") or nest_version.startswith("v3.4")) %}
size_t
- handles_test_event( CurrentEvent&, size_t ) overri
+ handles_test_event( CurrentEvent&, size_t ) override
{%- else %}
port
handles_test_event( CurrentEvent&, rport ) override
@@ -541,7 +541,7 @@ public:
{%- endif %} }
{%- if not (nest_version.startswith("v2") or nest_version.startswith("v3.0") or nest_version.startswith("v3.1") or nest_version.startswith("v3.2") or nest_version.startswith("v3.3") or nest_version.startswith("v3.4")) %}
size_t
- handles_test_event( ConductanceEvent&, size_t ) overrid
+ handles_test_event( ConductanceEvent&, size_t ) override
{%- else %}
port
handles_test_event( ConductanceEvent&, rport ) override
From ddf040369cb71eed969dab613d967d71b606df6c Mon Sep 17 00:00:00 2001
From: Pooja Babu
Date: Mon, 26 Jun 2023 13:23:46 +0200
Subject: [PATCH 04/12] Query NEST version
---
pynestml/codegeneration/nest_tools.py | 24 ++----------------------
1 file changed, 2 insertions(+), 22 deletions(-)
diff --git a/pynestml/codegeneration/nest_tools.py b/pynestml/codegeneration/nest_tools.py
index b0e9fa9d0..81bb6b0f4 100644
--- a/pynestml/codegeneration/nest_tools.py
+++ b/pynestml/codegeneration/nest_tools.py
@@ -50,29 +50,9 @@ def detect_nest_version(cls) -> str:
vt = nest.Create("volume_transmitter")
- try:
- neuron = nest.Create("hh_psc_alpha_clopath")
- neurons = nest.Create("iaf_psc_exp", 2)
- nest.Connect(neurons[0], neurons[1], syn_spec={"synapse_model": "stdp_synapse",
- "weight": 1., "delay": 1.})
- syn = nest.GetConnections(target=neurons[1], synapse_model="stdp_synapse")
- except Exception:
- pass
-
- if "DataConnect" in dir(nest):
- nest_version = "v2.20.2"
- elif "kernel_status" not in dir(nest): # added in v3.1
- nest_version = "v3.0"
- elif "Kplus" in syn.get().keys(): # "Kplus" trace variable is made accessible via get_status() in master
+ nest_version = "v" + nest.__version__
+ if "post0.dev0" in nest_version:
nest_version = "master"
- elif "prepared" in nest.GetKernelStatus().keys(): # "prepared" key was added after v3.3 release
- nest_version = "v3.4"
- elif "tau_u_bar_minus" in neuron.get().keys(): # added in v3.3
- nest_version = "v3.3"
- elif "tau_Ca" in vt.get().keys(): # removed in v3.2
- nest_version = "v3.1"
- else:
- nest_version = "v3.2"
except ModuleNotFoundError:
nest_version = ""
From 09e347b7e6289d8b0f2fb4e75c437989b82e4ec3 Mon Sep 17 00:00:00 2001
From: Pooja Babu
Date: Mon, 26 Jun 2023 14:54:08 +0200
Subject: [PATCH 05/12] Update NEST version for 2.20.2
---
pynestml/codegeneration/nest_tools.py | 12 +++++++-----
1 file changed, 7 insertions(+), 5 deletions(-)
diff --git a/pynestml/codegeneration/nest_tools.py b/pynestml/codegeneration/nest_tools.py
index 81bb6b0f4..b38336932 100644
--- a/pynestml/codegeneration/nest_tools.py
+++ b/pynestml/codegeneration/nest_tools.py
@@ -48,11 +48,13 @@ def detect_nest_version(cls) -> str:
try:
import nest
- vt = nest.Create("volume_transmitter")
-
- nest_version = "v" + nest.__version__
- if "post0.dev0" in nest_version:
- nest_version = "master"
+ try:
+ if "DataConnect" in dir(nest):
+ nest_version = "v2.20.2"
+ else:
+ nest_version = "v" + nest.__version__
+ except:
+ pass
except ModuleNotFoundError:
nest_version = ""
From 8c1b5636b7ba4fb5948a095560fa87ee6955b163 Mon Sep 17 00:00:00 2001
From: Pooja Babu
Date: Tue, 27 Jun 2023 13:05:21 +0200
Subject: [PATCH 06/12] Fix build error
---
pynestml/codegeneration/nest_tools.py | 2 ++
1 file changed, 2 insertions(+)
diff --git a/pynestml/codegeneration/nest_tools.py b/pynestml/codegeneration/nest_tools.py
index b38336932..ff49c64b9 100644
--- a/pynestml/codegeneration/nest_tools.py
+++ b/pynestml/codegeneration/nest_tools.py
@@ -53,6 +53,8 @@ def detect_nest_version(cls) -> str:
nest_version = "v2.20.2"
else:
nest_version = "v" + nest.__version__
+ if "post0.dev0" in nest_version:
+ nest_version = "master"
except:
pass
From cff8a46e1baf3fcfed27d8a17a56e91a0ccae463 Mon Sep 17 00:00:00 2001
From: Pooja Babu
Date: Tue, 27 Jun 2023 13:56:18 +0200
Subject: [PATCH 07/12] Add v3.5_rc1 to the build matrix
---
.github/workflows/nestml-build.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.github/workflows/nestml-build.yml b/.github/workflows/nestml-build.yml
index 48b3b37ac..8c213d51f 100644
--- a/.github/workflows/nestml-build.yml
+++ b/.github/workflows/nestml-build.yml
@@ -119,7 +119,7 @@ jobs:
runs-on: ubuntu-latest
strategy:
matrix:
- nest_branch: ["v2.20.2", "v3.0", "v3.1", "v3.2", "v3.3", "v3.4", "master"]
+ nest_branch: ["v2.20.2", "v3.0", "v3.1", "v3.2", "v3.3", "v3.4", "v3.5_rc1", "master"]
fail-fast: false
steps:
# Checkout the repository contents
From e2912f9d0c623ed4c84e1bb0d32bb495a9a45fa9 Mon Sep 17 00:00:00 2001
From: Pooja Babu
Date: Mon, 3 Jul 2023 14:35:41 +0200
Subject: [PATCH 08/12] Update the NEST version to 3.5 in build matrix
---
.github/workflows/nestml-build.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.github/workflows/nestml-build.yml b/.github/workflows/nestml-build.yml
index 8c213d51f..198c6848a 100644
--- a/.github/workflows/nestml-build.yml
+++ b/.github/workflows/nestml-build.yml
@@ -119,7 +119,7 @@ jobs:
runs-on: ubuntu-latest
strategy:
matrix:
- nest_branch: ["v2.20.2", "v3.0", "v3.1", "v3.2", "v3.3", "v3.4", "v3.5_rc1", "master"]
+ nest_branch: ["v2.20.2", "v3.0", "v3.1", "v3.2", "v3.3", "v3.4", "v3.5", "master"]
fail-fast: false
steps:
# Checkout the repository contents
From 7b5e1a0f9d3c0b44d2a562e095efaf19a15eac41 Mon Sep 17 00:00:00 2001
From: Pooja Babu
Date: Tue, 4 Jul 2023 12:10:50 +0200
Subject: [PATCH 09/12] Fix NEST versioning
---
pynestml/codegeneration/nest_tools.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pynestml/codegeneration/nest_tools.py b/pynestml/codegeneration/nest_tools.py
index ff49c64b9..afc030a28 100644
--- a/pynestml/codegeneration/nest_tools.py
+++ b/pynestml/codegeneration/nest_tools.py
@@ -52,7 +52,7 @@ def detect_nest_version(cls) -> str:
if "DataConnect" in dir(nest):
nest_version = "v2.20.2"
else:
- nest_version = "v" + nest.__version__
+ nest_version = "v" + nest.ll_api.sli_func("statusdict/version ::")
if "post0.dev0" in nest_version:
nest_version = "master"
except:
From 6f896d86852dda7e9fde4456801691ce8b31a3b2 Mon Sep 17 00:00:00 2001
From: Pooja Babu
Date: Tue, 4 Jul 2023 15:02:05 +0200
Subject: [PATCH 10/12] Fix NEST versioning
---
pynestml/codegeneration/nest_tools.py | 30 +++++++++++++++++++++------
1 file changed, 24 insertions(+), 6 deletions(-)
diff --git a/pynestml/codegeneration/nest_tools.py b/pynestml/codegeneration/nest_tools.py
index afc030a28..28da4780d 100644
--- a/pynestml/codegeneration/nest_tools.py
+++ b/pynestml/codegeneration/nest_tools.py
@@ -48,16 +48,34 @@ def detect_nest_version(cls) -> str:
try:
import nest
+ vt = nest.Create("volume_transmitter")
+
try:
+ neuron = nest.Create("hh_psc_alpha_clopath")
+ neurons = nest.Create("iaf_psc_exp", 2)
+ nest.Connect(neurons[0], neurons[1], syn_spec={"synapse_model": "stdp_synapse",
+ "weight": 1., "delay": 1.})
+ syn = nest.GetConnections(target=neurons[1], synapse_model="stdp_synapse")
+ except Exception:
+ pass
+
+ nest_version = "v" + nest.__version__
+ if nest_version.startswith("v3.5"):
+ if "post0.dev0" in nest_version:
+ nest_version = "master"
+ else:
if "DataConnect" in dir(nest):
nest_version = "v2.20.2"
+ elif "kernel_status" not in dir(nest): # added in v3.1
+ nest_version = "v3.0"
+ elif "prepared" in nest.GetKernelStatus().keys(): # "prepared" key was added after v3.3 release
+ nest_version = "v3.4"
+ elif "tau_u_bar_minus" in neuron.get().keys(): # added in v3.3
+ nest_version = "v3.3"
+ elif "tau_Ca" in vt.get().keys(): # removed in v3.2
+ nest_version = "v3.1"
else:
- nest_version = "v" + nest.ll_api.sli_func("statusdict/version ::")
- if "post0.dev0" in nest_version:
- nest_version = "master"
- except:
- pass
-
+ nest_version = "v3.2"
except ModuleNotFoundError:
nest_version = ""
From ba99e40cf814aa982918bdcf70f0ae9a6406d8c0 Mon Sep 17 00:00:00 2001
From: Pooja Babu
Date: Tue, 4 Jul 2023 15:04:52 +0200
Subject: [PATCH 11/12] Fix pycodestyle error
---
pynestml/codegeneration/nest_tools.py | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/pynestml/codegeneration/nest_tools.py b/pynestml/codegeneration/nest_tools.py
index 28da4780d..a271f4f0b 100644
--- a/pynestml/codegeneration/nest_tools.py
+++ b/pynestml/codegeneration/nest_tools.py
@@ -58,12 +58,12 @@ def detect_nest_version(cls) -> str:
syn = nest.GetConnections(target=neurons[1], synapse_model="stdp_synapse")
except Exception:
pass
-
+
nest_version = "v" + nest.__version__
if nest_version.startswith("v3.5"):
if "post0.dev0" in nest_version:
nest_version = "master"
- else:
+ else:
if "DataConnect" in dir(nest):
nest_version = "v2.20.2"
elif "kernel_status" not in dir(nest): # added in v3.1
From 0fe8d1282dd3a2f79271c091b90e99a9b0c2f34c Mon Sep 17 00:00:00 2001
From: Pooja Babu
Date: Tue, 4 Jul 2023 15:04:52 +0200
Subject: [PATCH 12/12] Fix pycodestyle error
---
pynestml/codegeneration/nest_tools.py | 33 ++++++++++++++-------------
1 file changed, 17 insertions(+), 16 deletions(-)
diff --git a/pynestml/codegeneration/nest_tools.py b/pynestml/codegeneration/nest_tools.py
index 28da4780d..68718a723 100644
--- a/pynestml/codegeneration/nest_tools.py
+++ b/pynestml/codegeneration/nest_tools.py
@@ -58,24 +58,25 @@ def detect_nest_version(cls) -> str:
syn = nest.GetConnections(target=neurons[1], synapse_model="stdp_synapse")
except Exception:
pass
-
- nest_version = "v" + nest.__version__
- if nest_version.startswith("v3.5"):
- if "post0.dev0" in nest_version:
- nest_version = "master"
- else:
- if "DataConnect" in dir(nest):
+
+ if "DataConnect" in dir(nest):
nest_version = "v2.20.2"
- elif "kernel_status" not in dir(nest): # added in v3.1
- nest_version = "v3.0"
- elif "prepared" in nest.GetKernelStatus().keys(): # "prepared" key was added after v3.3 release
- nest_version = "v3.4"
- elif "tau_u_bar_minus" in neuron.get().keys(): # added in v3.3
- nest_version = "v3.3"
- elif "tau_Ca" in vt.get().keys(): # removed in v3.2
- nest_version = "v3.1"
+ else:
+ nest_version = "v" + nest.__version__
+ if nest_version.startswith("v3.5"):
+ if "post0.dev0" in nest_version:
+ nest_version = "master"
else:
- nest_version = "v3.2"
+ if "kernel_status" not in dir(nest): # added in v3.1
+ nest_version = "v3.0"
+ elif "prepared" in nest.GetKernelStatus().keys(): # "prepared" key was added after v3.3 release
+ nest_version = "v3.4"
+ elif "tau_u_bar_minus" in neuron.get().keys(): # added in v3.3
+ nest_version = "v3.3"
+ elif "tau_Ca" in vt.get().keys(): # removed in v3.2
+ nest_version = "v3.1"
+ else:
+ nest_version = "v3.2"
except ModuleNotFoundError:
nest_version = ""