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 = ""