Triplet STDP synapse tutorial

In this tutorial, we will learn to formulate triplet rule (which considers sets of three spikes, i.e., two presynaptic and one postsynaptic spikes or two postsynaptic and one presynaptic spikes) for Spike Timing-Dependent Plasticity (STDP) learning model using NESTML and simulate it with NEST simulator.

[1]:
%matplotlib inline
import matplotlib.pyplot as plt
import nest
import numpy as np
import os
import re

from pynestml.codegeneration.nest_code_generator_utils import NESTCodeGeneratorUtils

np.set_printoptions(suppress=True)
/home/charl/.local/lib/python3.11/site-packages/matplotlib/projections/__init__.py:63: UserWarning: Unable to import Axes3D. This may be due to multiple versions of Matplotlib being installed (e.g. as a system package and as a pip package). As a result, the 3D projection is not available.
  warnings.warn("Unable to import Axes3D. This may be due to multiple versions of "

              -- N E S T --
  Copyright (C) 2004 The NEST Initiative

 Version: 3.6.0-post0.dev0
 Built: Mar 26 2024 08:52:51

 This program is provided AS IS and comes with
 NO WARRANTY. See the file LICENSE for details.

 Problems or suggestions?
   Visit https://www.nest-simulator.org

 Type 'nest.help()' to find out more about NEST.

Early experiments in Bi and Poo (1998) [1] have shown that a sequence of \(n\) pairs of “pre then post” spikes result in synaptic potentiation and \(n\) pairs of “post then pre” result in synaptic depression. Later experiments have shown that these pairs of spikes do not necessarily describe the synaptic plasiticity behavior. Other variables like calcium concentration or postsynaptic membrane potential play an important role in potentiation or depression.

Experiments conducted by Wang et al., [2] and Sjöström et al., [3] using triplet and quadruplets of spikes show that the classical spike-dependent synaptic plasticity alone cannot explain the results of the experiments. The triplet STDP model formulated by Pfister and Gerstner in [4] assume that a combination of pairs and triplets of spikes triggers the synaptic plasticity and thus reproduce the experimental results.

Triplet STDP model

The synaptic transmission is formulated by a set of four differential equations as defined below.

\begin{equation} \frac{dr_1}{dt} = -\frac{r_1(t)}{\tau_+} \quad \text{if } t = t^{pre}, \text{ then } r_1 \rightarrow r_1+1 \end{equation}

\begin{equation} \frac{dr_2}{dt} = -\frac{r_2(t)}{\tau_x} \quad \text{if } t = t^{pre}, \text{ then } r_2 \rightarrow r_2+1 \end{equation}

\begin{equation} \frac{do_1}{dt} = -\frac{o_1(t)}{\tau_-} \quad \text{if } t = t^{post}, \text{ then } o_1 \rightarrow o_1+1 \end{equation}

\begin{equation} \frac{do_2}{dt} = -\frac{o_2(t)}{\tau_y} \quad \text{if } t = t^{post}, \text{ then } o_2 \rightarrow o_2+1 \end{equation}

Here, \(r_1\) and \(r_2\) are the trace variables that detect the presynaptic events when a spike occurs at the presynaptic neuron at time \(t^{pre}\). These variables increase when a presynaptic spike occurs and decrease back to 0 otherwise with time constants \(\tau_+\) and \(\tau_x\) respectively. Similarly, the variables \(o_1\) and \(o_2\) denote the trace variables that detect the postsynaptic events at a spike time \(t^{post}\). In the absence of a postsynaptic spike, the vairables decrease their value with a time constant \(\tau_-\) and \(\tau_y\) respectively. Presynaptic variables, for example, can be the amount of glutamate bound and the postsynaptic receptors can determine the influx of calcium concentration through voltage-gated \(Ca^{2+}\) channels.

The weight change in the model is formulated as a function of the four trace variables defined above. The weight of the synapse decreases after the presynaptic spikes arrives at \(t^{pre}\) by an amount proportional to the postsynaptic variable \(o_1\) but also depends on the second presynaptic variable \(r_2\).

\begin{equation} w(t) \rightarrow w(t) - o_1(t)[A_2^- + A_3^- r_2(t - \epsilon)] \quad \text{if } t = t^{pre} \end{equation}

Similarly, a postsynaptic spike at time \(t^{post}\) increases the weight of the synapse and is dependent on the presynaptic variable \(r_1\) and the postsynaptic variable \(o_2\).

\begin{equation} w(t) \rightarrow w(t) + r_1(t)[A_2^+ + A_3^+ o_2(t - \epsilon)] \quad \text{if } t = t^{post} \end{equation}

Here, \(A_2^+\) and \(A_2^-\) denote the amplitude of the weight change whenever there is a pre-post pair or a post-pre pair. Similarly, \(A_3^+\) and \(A_3^-\) denote the amplitude of the triplet term for potentiation and depression, respectively.

image.png

Generating code with NESTML

Triplet STDP model in NESTML

In this tutorial, we will use a very simple integrate-and-fire model, where arriving spikes cause an instantaneous increment of the membrane potential, the “iaf_psc_delta” model. It is already provided with NESTML in the models/neurons directory.

We will be formulating two types of interactions between the spikes, namely All-to-All interaction and Nearest-spike interaction.

\(\textit{All-to-All Interaction}\) - Each postsynaptic spike interacts with all previous postsynaptic spikes and vice versa. All the internal variables \(r_1, r_2, o_1,\) and \(o_2\) accumulate over several postsynaptic spike timimgs.

4cd6293f6dd3444fbd7f526932202552

[2]:
nestml_triplet_stdp_model = '''
model stdp_triplet_synapse:

    state:
        w nS = 1 nS

        tr_r1 real = 0.
        tr_r2 real = 0.
        tr_o1 real = 0.
        tr_o2 real = 0.

    parameters:
        d ms = 1 ms  @nest::delay

        tau_plus ms = 16.8 ms  # time constant for tr_r1
        tau_x ms = 101 ms  # time constant for tr_r2
        tau_minus ms = 33.7 ms  # time constant for tr_o1
        tau_y ms = 125 ms  # time constant for tr_o2

        A2_plus real = 7.5e-10
        A3_plus real = 9.3e-3
        A2_minus real = 7e-3
        A3_minus real = 2.3e-4

        Wmax nS = 100 nS
        Wmin nS = 0 nS

    equations:
        tr_r1' = -tr_r1 / tau_plus
        tr_r2' = -tr_r2 / tau_x
        tr_o1' = -tr_o1 / tau_minus
        tr_o2' = -tr_o2 / tau_y

    input:
        pre_spikes <- spike
        post_spikes <- spike

    output:
        spike

    onReceive(post_spikes):
        # increment post trace values
        tr_o1 += 1
        tr_o2 += 1

        # potentiate synapse
        w_ nS = w + tr_r1 * ( A2_plus + A3_plus * tr_o2 )
        w = min(Wmax, w_)

    onReceive(pre_spikes):
        # increment pre trace values
        tr_r1 += 1
        tr_r2 += 1

        # depress synapse
        w_ nS = w  -  tr_o1 * ( A2_minus + A3_minus * tr_r2 )
        w = max(Wmin, w_)

        # deliver spike to postsynaptic partner
        emit_spike(w, d)

    update:
        integrate_odes()
'''
[3]:
%pdb
# Generate code for All-to-All spike interaction
module_name, neuron_model_name, synapse_model_name = NESTCodeGeneratorUtils.generate_code_for("../../../models/neurons/iaf_psc_delta_neuron.nestml",
                                                                                              nestml_triplet_stdp_model,
                                                                                              post_ports=["post_spikes"],
                                                                                              logging_level="DEBUG")
Automatic pdb calling has been turned ON
[1,GLOBAL, INFO]: List of files that will be processed:
[2,GLOBAL, INFO]: /home/charl/julich/nestml-fork-integrate_specific_odes/nestml/doc/tutorials/triplet_stdp_synapse/iaf_psc_delta_neuron.nestml
[3,GLOBAL, INFO]: /home/charl/julich/nestml-fork-integrate_specific_odes/nestml/doc/tutorials/triplet_stdp_synapse/stdp_triplet_synapse.nestml
[4,GLOBAL, INFO]: Target platform code will be generated in directory: '/home/charl/julich/nestml-fork-integrate_specific_odes/nestml/doc/tutorials/triplet_stdp_synapse/target'
[5,GLOBAL, INFO]: Target platform code will be installed in directory: '/tmp/nestml_target_yocmq5xi'

              -- N E S T --
  Copyright (C) 2004 The NEST Initiative

 Version: 3.6.0-post0.dev0
 Built: Mar 26 2024 08:52:51

 This program is provided AS IS and comes with
 NO WARRANTY. See the file LICENSE for details.

 Problems or suggestions?
   Visit https://www.nest-simulator.org

 Type 'nest.help()' to find out more about NEST.

[6,GLOBAL, INFO]: The NEST Simulator version was automatically detected as: master
[7,GLOBAL, INFO]: Given template root path is not an absolute path. Creating the absolute path with default templates directory '/home/charl/julich/nestml-fork-integrate_specific_odes/nestml/pynestml/codegeneration/resources_nest/point_neuron'
[8,GLOBAL, INFO]: Given template root path is not an absolute path. Creating the absolute path with default templates directory '/home/charl/julich/nestml-fork-integrate_specific_odes/nestml/pynestml/codegeneration/resources_nest/point_neuron'
[9,GLOBAL, INFO]: Given template root path is not an absolute path. Creating the absolute path with default templates directory '/home/charl/julich/nestml-fork-integrate_specific_odes/nestml/pynestml/codegeneration/resources_nest/point_neuron'
[10,GLOBAL, INFO]: The NEST Simulator installation path was automatically detected as: /home/charl/julich/nest-simulator-install
[11,GLOBAL, INFO]: Start processing '/home/charl/julich/nestml-fork-integrate_specific_odes/nestml/doc/tutorials/triplet_stdp_synapse/iaf_psc_delta_neuron.nestml'!
[12,iaf_psc_delta_neuron_nestml, DEBUG, [43:0;94:0]]: Start building symbol table!
[13,iaf_psc_delta_neuron_nestml, INFO, [51:79;51:79]]: Implicit magnitude conversion from pA to pA buffer with factor 1.0
[14,iaf_psc_delta_neuron_nestml, INFO, [51:15;51:74]]: Implicit magnitude conversion from mV / ms to pA / pF with factor 1.0
[15,GLOBAL, INFO]: Start processing '/home/charl/julich/nestml-fork-integrate_specific_odes/nestml/doc/tutorials/triplet_stdp_synapse/stdp_triplet_synapse.nestml'!
[16,stdp_triplet_synapse_nestml, DEBUG, [2:0;63:0]]: Start building symbol table!
[17,stdp_triplet_synapse_nestml, WARNING, [13:8;13:28]]: Variable 'd' has the same name as a physical unit!
[18,stdp_triplet_synapse_nestml, INFO, [43:17;43:17]]: Implicit casting from (compatible) type 'integer' to 'real'.
[19,stdp_triplet_synapse_nestml, INFO, [44:17;44:17]]: Implicit casting from (compatible) type 'integer' to 'real'.
[20,stdp_triplet_synapse_nestml, WARNING, [47:16;47:16]]: Implicit casting from (compatible) type 'nS' to 'real'.
[21,stdp_triplet_synapse_nestml, INFO, [52:17;52:17]]: Implicit casting from (compatible) type 'integer' to 'real'.
[22,stdp_triplet_synapse_nestml, INFO, [53:17;53:17]]: Implicit casting from (compatible) type 'integer' to 'real'.
[23,stdp_triplet_synapse_nestml, WARNING, [56:16;56:16]]: Implicit casting from (compatible) type 'nS' to 'real'.
[24,iaf_psc_delta_neuron_nestml, DEBUG, [43:0;94:0]]: Start building symbol table!
[25,stdp_triplet_synapse_nestml, DEBUG, [2:0;63:0]]: Start building symbol table!
[26,stdp_triplet_synapse_nestml, WARNING, [13:8;13:28]]: Variable 'd' has the same name as a physical unit!
[27,stdp_triplet_synapse_nestml, INFO, [43:17;43:17]]: Implicit casting from (compatible) type 'integer' to 'real'.
[28,stdp_triplet_synapse_nestml, INFO, [44:17;44:17]]: Implicit casting from (compatible) type 'integer' to 'real'.
[29,stdp_triplet_synapse_nestml, INFO, [52:17;52:17]]: Implicit casting from (compatible) type 'integer' to 'real'.
[30,stdp_triplet_synapse_nestml, INFO, [53:17;53:17]]: Implicit casting from (compatible) type 'integer' to 'real'.
[31,iaf_psc_delta_neuron_nestml, DEBUG, [43:0;94:0]]: Start building symbol table!
[32,iaf_psc_delta_neuron_nestml, INFO, [51:79;51:79]]: Implicit magnitude conversion from pA to pA buffer with factor 1.0
[33,iaf_psc_delta_neuron_nestml, INFO, [51:15;51:74]]: Implicit magnitude conversion from mV / ms to pA / pF with factor 1.0
[34,stdp_triplet_synapse_nestml, DEBUG, [2:0;63:0]]: Start building symbol table!
[35,stdp_triplet_synapse_nestml, WARNING, [13:8;13:28]]: Variable 'd' has the same name as a physical unit!
[36,stdp_triplet_synapse_nestml, INFO, [43:17;43:17]]: Implicit casting from (compatible) type 'integer' to 'real'.
[37,stdp_triplet_synapse_nestml, INFO, [44:17;44:17]]: Implicit casting from (compatible) type 'integer' to 'real'.
[38,stdp_triplet_synapse_nestml, WARNING, [47:16;47:16]]: Implicit casting from (compatible) type 'nS' to 'real'.
[39,stdp_triplet_synapse_nestml, INFO, [52:17;52:17]]: Implicit casting from (compatible) type 'integer' to 'real'.
[40,stdp_triplet_synapse_nestml, INFO, [53:17;53:17]]: Implicit casting from (compatible) type 'integer' to 'real'.
[41,stdp_triplet_synapse_nestml, WARNING, [56:16;56:16]]: Implicit casting from (compatible) type 'nS' to 'real'.
[42,GLOBAL, INFO]: State variables that will be moved from synapse to neuron: ['tr_o1', 'tr_o2']
[43,GLOBAL, INFO]: Parameters that will be copied from synapse to neuron: ['tau_y', 'tau_minus']
[44,GLOBAL, INFO]: Moving state var defining equation(s) tr_o1
[45,GLOBAL, INFO]: Moving state var defining equation(s) tr_o2
[46,GLOBAL, INFO]: Moving state variables for equation(s) tr_o1
[47,GLOBAL, INFO]: Moving definition of tr_o1 from synapse to neuron
[48,GLOBAL, INFO]: Moving state variables for equation(s) tr_o2
[49,GLOBAL, INFO]: Moving definition of tr_o2 from synapse to neuron
[50,GLOBAL, INFO]:      Moving statement # increment post trace values
tr_o1 += 1
[51,GLOBAL, INFO]:      Moving statement tr_o2 += 1
[52,GLOBAL, INFO]: In synapse: replacing ``continuous`` type input ports that are connected to postsynaptic neuron with suffixed external variable references
[53,GLOBAL, INFO]: Copying parameters from synapse to neuron...
[54,GLOBAL, INFO]: Copying definition of tau_y from synapse to neuron
[55,GLOBAL, INFO]: Copying definition of tau_minus from synapse to neuron
[56,GLOBAL, INFO]: Adding suffix to variables in spike updates
[57,GLOBAL, INFO]: In synapse: replacing variables with suffixed external variable references
[58,GLOBAL, INFO]:      • Replacing variable tr_o1
[59,GLOBAL, INFO]: ASTSimpleExpression replacement made (var = tr_o1__for_stdp_triplet_synapse_nestml) in expression: tr_o1 * (A2_minus + A3_minus * tr_r2)
[60,GLOBAL, INFO]:      • Replacing variable tr_o2
[61,GLOBAL, INFO]: ASTSimpleExpression replacement made (var = tr_o2__for_stdp_triplet_synapse_nestml) in expression: A3_plus * tr_o2
[62,iaf_psc_delta_neuron_nestml__with_stdp_triplet_synapse_nestml, DEBUG, [43:0;94:0]]: Start building symbol table!
[63,stdp_triplet_synapse_nestml__with_iaf_psc_delta_neuron_nestml, DEBUG, [2:0;63:0]]: Start building symbol table!
[64,stdp_triplet_synapse_nestml__with_iaf_psc_delta_neuron_nestml, WARNING, [13:8;13:28]]: Variable 'd' has the same name as a physical unit!
[65,stdp_triplet_synapse_nestml__with_iaf_psc_delta_neuron_nestml, INFO, [52:17;52:17]]: Implicit casting from (compatible) type 'integer' to 'real'.
[66,stdp_triplet_synapse_nestml__with_iaf_psc_delta_neuron_nestml, INFO, [53:17;53:17]]: Implicit casting from (compatible) type 'integer' to 'real'.
INFO:Analysing input:
INFO:{
    "dynamics": [
        {
            "expression": "V_m' = (-(V_m - E_L)) / tau_m + 0 * (1.0 / 1.0) + (I_e + I_stim) / C_m",
            "initial_values": {
                "V_m": "E_L"
            }
        }
    ],
    "options": {
        "output_timestep_symbol": "__h"
    },
    "parameters": {
        "C_m": "250",
        "E_L": "(-70)",
        "I_e": "0",
        "V_min": "(-oo) * 1",
        "V_reset": "(-70)",
        "V_th": "(-55)",
        "refr_T": "2",
        "tau_m": "10",
        "tau_syn": "2"
    }
}
INFO:Processing global options...
INFO:Processing input shapes...
INFO:
Processing differential-equation form shape V_m with defining expression = "(-(V_m - E_L)) / tau_m + 0 * (1.0 / 1.0) + (I_e + I_stim) / C_m"
DEBUG:Splitting expression (E_L - V_m)/tau_m + (I_e + I_stim)/C_m (symbols [V_m])
DEBUG:  linear factors: Matrix([[-1/tau_m]])
DEBUG:  inhomogeneous term: E_L/tau_m + I_e/C_m
DEBUG:  nonlinear term: I_stim/C_m
DEBUG:Created Shape with symbol V_m, derivative_factors = [-1/tau_m], inhom_term = E_L/tau_m + I_e/C_m, nonlin_term = I_stim/C_m
INFO:   Returning shape: Shape "V_m" of order 1
INFO:Shape V_m: reconstituting expression E_L/tau_m - V_m/tau_m + I_e/C_m + I_stim/C_m
INFO:All known variables: [V_m], all parameters used in ODEs: {I_stim, C_m, tau_m, I_e, E_L}
INFO:No numerical value specified for parameter "I_stim"
INFO:
Processing differential-equation form shape V_m with defining expression = "(-(V_m - E_L)) / tau_m + 0 * (1.0 / 1.0) + (I_e + I_stim) / C_m"
DEBUG:Splitting expression (E_L - V_m)/tau_m + (I_e + I_stim)/C_m (symbols [V_m, V_m])
DEBUG:  linear factors: Matrix([[-1/tau_m], [0]])
DEBUG:  inhomogeneous term: E_L/tau_m + I_e/C_m + I_stim/C_m
DEBUG:  nonlinear term: 0.0
DEBUG:Created Shape with symbol V_m, derivative_factors = [-1/tau_m], inhom_term = E_L/tau_m + I_e/C_m + I_stim/C_m, nonlin_term = 0
INFO:   Returning shape: Shape "V_m" of order 1
INFO:Shape V_m: reconstituting expression E_L/tau_m - V_m/tau_m + I_e/C_m + I_stim/C_m
DEBUG:Splitting expression E_L/tau_m - V_m/tau_m + I_e/C_m + I_stim/C_m (symbols Matrix([[V_m]]))
DEBUG:  linear factors: Matrix([[-1/tau_m]])
DEBUG:  inhomogeneous term: E_L/tau_m + I_e/C_m + I_stim/C_m
DEBUG:  nonlinear term: 0.0
DEBUG:Initializing system of shapes with x = Matrix([[V_m]]), A = Matrix([[-1/tau_m]]), b = Matrix([[E_L/tau_m + I_e/C_m + I_stim/C_m]]), c = Matrix([[0.0]])
INFO:Finding analytically solvable equations...
INFO:Saving dependency graph plot to /tmp/ode_dependency_graph.dot
DEBUG:os.makedirs('/tmp')
DEBUG:write lines to '/tmp/ode_dependency_graph.dot'
DEBUG:run [PosixPath('dot'), '-Kdot', '-Tpdf', '-O', 'ode_dependency_graph.dot']
[67,GLOBAL, INFO]: Successfully constructed neuron-synapse pair iaf_psc_delta_neuron_nestml__with_stdp_triplet_synapse_nestml, stdp_triplet_synapse_nestml__with_iaf_psc_delta_neuron_nestml
[68,GLOBAL, INFO]: Analysing/transforming model 'iaf_psc_delta_neuron_nestml'
[69,iaf_psc_delta_neuron_nestml, INFO, [43:0;94:0]]: Starts processing of the model 'iaf_psc_delta_neuron_nestml'
INFO:Shape V_m: reconstituting expression E_L/tau_m - V_m/tau_m + I_e/C_m + I_stim/C_m
DEBUG:Splitting expression E_L/tau_m - V_m/tau_m + I_e/C_m + I_stim/C_m (symbols [V_m])
DEBUG:  linear factors: Matrix([[-1/tau_m]])
DEBUG:  inhomogeneous term: E_L/tau_m + I_e/C_m + I_stim/C_m
DEBUG:  nonlinear term: 0.0
INFO:Saving dependency graph plot to /tmp/ode_dependency_graph_analytically_solvable_before_propagated.dot
DEBUG:os.makedirs('/tmp')
DEBUG:write lines to '/tmp/ode_dependency_graph_analytically_solvable_before_propagated.dot'
DEBUG:run [PosixPath('dot'), '-Kdot', '-Tpdf', '-O', 'ode_dependency_graph_analytically_solvable_before_propagated.dot']
INFO:Saving dependency graph plot to /tmp/ode_dependency_graph_analytically_solvable.dot
DEBUG:os.makedirs('/tmp')
DEBUG:write lines to '/tmp/ode_dependency_graph_analytically_solvable.dot'
DEBUG:run [PosixPath('dot'), '-Kdot', '-Tpdf', '-O', 'ode_dependency_graph_analytically_solvable.dot']
INFO:Generating propagators for the following symbols: V_m
DEBUG:Initializing system of shapes with x = Matrix([[V_m]]), A = Matrix([[-1/tau_m]]), b = Matrix([[E_L/tau_m + I_e/C_m + I_stim/C_m]]), c = Matrix([[0]])
DEBUG:System of equations:
DEBUG:x = Matrix([[V_m]])
DEBUG:A = Matrix([[-1/tau_m]])
DEBUG:b = Matrix([[E_L/tau_m + I_e/C_m + I_stim/C_m]])
DEBUG:c = Matrix([[0]])
INFO:update_expr[V_m] = -E_L*__P__V_m__V_m + E_L + V_m*__P__V_m__V_m - I_e*__P__V_m__V_m*tau_m/C_m + I_e*tau_m/C_m - I_stim*__P__V_m__V_m*tau_m/C_m + I_stim*tau_m/C_m
WARNING:Not preserving expression for variable "V_m" as it is solved by propagator solver
INFO:In ode-toolbox: returning outdict =
INFO:[
    {
        "initial_values": {
            "V_m": "E_L"
        },
        "parameters": {
            "C_m": "250.000000000000",
            "E_L": "-70.0000000000000",
            "I_e": "0",
            "tau_m": "10.0000000000000"
        },
        "propagators": {
            "__P__V_m__V_m": "exp(-__h/tau_m)"
        },
        "solver": "analytical",
        "state_variables": [
            "V_m"
        ],
        "update_expressions": {
            "V_m": "-E_L*__P__V_m__V_m + E_L + V_m*__P__V_m__V_m - I_e*__P__V_m__V_m*tau_m/C_m + I_e*tau_m/C_m - I_stim*__P__V_m__V_m*tau_m/C_m + I_stim*tau_m/C_m"
        }
    }
]
[70,iaf_psc_delta_neuron_nestml, DEBUG, [43:0;94:0]]: Start building symbol table!
INFO:Analysing input:
INFO:{
    "dynamics": [
        {
            "expression": "V_m' = (-(V_m - E_L)) / tau_m + 0 * (1.0 / 1.0) + (I_e + I_stim) / C_m",
            "initial_values": {
                "V_m": "E_L"
            }
        },
        {
            "expression": "tr_o1__for_stdp_triplet_synapse_nestml' = (-tr_o1__for_stdp_triplet_synapse_nestml) / tau_minus__for_stdp_triplet_synapse_nestml",
            "initial_values": {
                "tr_o1__for_stdp_triplet_synapse_nestml": "0.0"
            }
        },
        {
            "expression": "tr_o2__for_stdp_triplet_synapse_nestml' = (-tr_o2__for_stdp_triplet_synapse_nestml) / tau_y__for_stdp_triplet_synapse_nestml",
            "initial_values": {
                "tr_o2__for_stdp_triplet_synapse_nestml": "0.0"
            }
        }
    ],
    "options": {
        "output_timestep_symbol": "__h"
    },
    "parameters": {
        "C_m": "250",
        "E_L": "(-70)",
        "I_e": "0",
        "V_min": "(-oo) * 1",
        "V_reset": "(-70)",
        "V_th": "(-55)",
        "refr_T": "2",
        "tau_m": "10",
        "tau_minus__for_stdp_triplet_synapse_nestml": "33.7",
        "tau_syn": "2",
        "tau_y__for_stdp_triplet_synapse_nestml": "125"
    }
}
INFO:Processing global options...
INFO:Processing input shapes...
INFO:
Processing differential-equation form shape V_m with defining expression = "(-(V_m - E_L)) / tau_m + 0 * (1.0 / 1.0) + (I_e + I_stim) / C_m"
DEBUG:Splitting expression (E_L - V_m)/tau_m + (I_e + I_stim)/C_m (symbols [V_m])
DEBUG:  linear factors: Matrix([[-1/tau_m]])
DEBUG:  inhomogeneous term: E_L/tau_m + I_e/C_m
DEBUG:  nonlinear term: I_stim/C_m
DEBUG:Created Shape with symbol V_m, derivative_factors = [-1/tau_m], inhom_term = E_L/tau_m + I_e/C_m, nonlin_term = I_stim/C_m
INFO:   Returning shape: Shape "V_m" of order 1
INFO:Shape V_m: reconstituting expression E_L/tau_m - V_m/tau_m + I_e/C_m + I_stim/C_m
INFO:
Processing differential-equation form shape tr_o1__for_stdp_triplet_synapse_nestml with defining expression = "(-tr_o1__for_stdp_triplet_synapse_nestml) / tau_minus__for_stdp_triplet_synapse_nestml"
DEBUG:Splitting expression -tr_o1__for_stdp_triplet_synapse_nestml/tau_minus__for_stdp_triplet_synapse_nestml (symbols [tr_o1__for_stdp_triplet_synapse_nestml])
DEBUG:  linear factors: Matrix([[-1/tau_minus__for_stdp_triplet_synapse_nestml]])
DEBUG:  inhomogeneous term: 0.0
DEBUG:  nonlinear term: 0.0
DEBUG:Created Shape with symbol tr_o1__for_stdp_triplet_synapse_nestml, derivative_factors = [-1/tau_minus__for_stdp_triplet_synapse_nestml], inhom_term = 0.0, nonlin_term = 0.0
INFO:   Returning shape: Shape "tr_o1__for_stdp_triplet_synapse_nestml" of order 1
INFO:Shape tr_o1__for_stdp_triplet_synapse_nestml: reconstituting expression -tr_o1__for_stdp_triplet_synapse_nestml/tau_minus__for_stdp_triplet_synapse_nestml
INFO:
Processing differential-equation form shape tr_o2__for_stdp_triplet_synapse_nestml with defining expression = "(-tr_o2__for_stdp_triplet_synapse_nestml) / tau_y__for_stdp_triplet_synapse_nestml"
DEBUG:Splitting expression -tr_o2__for_stdp_triplet_synapse_nestml/tau_y__for_stdp_triplet_synapse_nestml (symbols [tr_o2__for_stdp_triplet_synapse_nestml])
DEBUG:  linear factors: Matrix([[-1/tau_y__for_stdp_triplet_synapse_nestml]])
DEBUG:  inhomogeneous term: 0.0
DEBUG:  nonlinear term: 0.0
DEBUG:Created Shape with symbol tr_o2__for_stdp_triplet_synapse_nestml, derivative_factors = [-1/tau_y__for_stdp_triplet_synapse_nestml], inhom_term = 0.0, nonlin_term = 0.0
INFO:   Returning shape: Shape "tr_o2__for_stdp_triplet_synapse_nestml" of order 1
INFO:Shape tr_o2__for_stdp_triplet_synapse_nestml: reconstituting expression -tr_o2__for_stdp_triplet_synapse_nestml/tau_y__for_stdp_triplet_synapse_nestml
INFO:All known variables: [V_m, tr_o1__for_stdp_triplet_synapse_nestml, tr_o2__for_stdp_triplet_synapse_nestml], all parameters used in ODEs: {tau_y__for_stdp_triplet_synapse_nestml, I_stim, tau_m, E_L, C_m, tau_minus__for_stdp_triplet_synapse_nestml, I_e}
INFO:No numerical value specified for parameter "I_stim"
INFO:
Processing differential-equation form shape V_m with defining expression = "(-(V_m - E_L)) / tau_m + 0 * (1.0 / 1.0) + (I_e + I_stim) / C_m"
DEBUG:Splitting expression (E_L - V_m)/tau_m + (I_e + I_stim)/C_m (symbols [V_m, tr_o1__for_stdp_triplet_synapse_nestml, tr_o2__for_stdp_triplet_synapse_nestml, V_m])
DEBUG:  linear factors: Matrix([[-1/tau_m], [0], [0], [0]])
DEBUG:  inhomogeneous term: E_L/tau_m + I_e/C_m + I_stim/C_m
DEBUG:  nonlinear term: 0.0
DEBUG:Created Shape with symbol V_m, derivative_factors = [-1/tau_m], inhom_term = E_L/tau_m + I_e/C_m + I_stim/C_m, nonlin_term = 0
INFO:   Returning shape: Shape "V_m" of order 1
INFO:
Processing differential-equation form shape tr_o1__for_stdp_triplet_synapse_nestml with defining expression = "(-tr_o1__for_stdp_triplet_synapse_nestml) / tau_minus__for_stdp_triplet_synapse_nestml"
DEBUG:Splitting expression -tr_o1__for_stdp_triplet_synapse_nestml/tau_minus__for_stdp_triplet_synapse_nestml (symbols [V_m, tr_o1__for_stdp_triplet_synapse_nestml, tr_o2__for_stdp_triplet_synapse_nestml, V_m, tr_o1__for_stdp_triplet_synapse_nestml])
DEBUG:  linear factors: Matrix([[0], [-1/tau_minus__for_stdp_triplet_synapse_nestml], [0], [0], [0]])
DEBUG:  inhomogeneous term: 0.0
DEBUG:  nonlinear term: 0.0
DEBUG:Created Shape with symbol tr_o1__for_stdp_triplet_synapse_nestml, derivative_factors = [-1/tau_minus__for_stdp_triplet_synapse_nestml], inhom_term = 0.0, nonlin_term = 0
INFO:   Returning shape: Shape "tr_o1__for_stdp_triplet_synapse_nestml" of order 1
INFO:
Processing differential-equation form shape tr_o2__for_stdp_triplet_synapse_nestml with defining expression = "(-tr_o2__for_stdp_triplet_synapse_nestml) / tau_y__for_stdp_triplet_synapse_nestml"
DEBUG:Splitting expression -tr_o2__for_stdp_triplet_synapse_nestml/tau_y__for_stdp_triplet_synapse_nestml (symbols [V_m, tr_o1__for_stdp_triplet_synapse_nestml, tr_o2__for_stdp_triplet_synapse_nestml, V_m, tr_o1__for_stdp_triplet_synapse_nestml, tr_o2__for_stdp_triplet_synapse_nestml])
DEBUG:  linear factors: Matrix([[0], [0], [-1/tau_y__for_stdp_triplet_synapse_nestml], [0], [0], [0]])
DEBUG:  inhomogeneous term: 0.0
DEBUG:  nonlinear term: 0.0
DEBUG:Created Shape with symbol tr_o2__for_stdp_triplet_synapse_nestml, derivative_factors = [-1/tau_y__for_stdp_triplet_synapse_nestml], inhom_term = 0.0, nonlin_term = 0
INFO:   Returning shape: Shape "tr_o2__for_stdp_triplet_synapse_nestml" of order 1
INFO:Shape V_m: reconstituting expression E_L/tau_m - V_m/tau_m + I_e/C_m + I_stim/C_m
DEBUG:Splitting expression E_L/tau_m - V_m/tau_m + I_e/C_m + I_stim/C_m (symbols Matrix([[V_m], [tr_o1__for_stdp_triplet_synapse_nestml], [tr_o2__for_stdp_triplet_synapse_nestml]]))
DEBUG:  linear factors: Matrix([[-1/tau_m], [0], [0]])
DEBUG:  inhomogeneous term: E_L/tau_m + I_e/C_m + I_stim/C_m
DEBUG:  nonlinear term: 0.0
[71,GLOBAL, INFO]: Analysing/transforming model 'iaf_psc_delta_neuron_nestml__with_stdp_triplet_synapse_nestml'
[72,iaf_psc_delta_neuron_nestml__with_stdp_triplet_synapse_nestml, INFO, [43:0;94:0]]: Starts processing of the model 'iaf_psc_delta_neuron_nestml__with_stdp_triplet_synapse_nestml'
INFO:Shape tr_o1__for_stdp_triplet_synapse_nestml: reconstituting expression -tr_o1__for_stdp_triplet_synapse_nestml/tau_minus__for_stdp_triplet_synapse_nestml
DEBUG:Splitting expression -tr_o1__for_stdp_triplet_synapse_nestml/tau_minus__for_stdp_triplet_synapse_nestml (symbols Matrix([[V_m], [tr_o1__for_stdp_triplet_synapse_nestml], [tr_o2__for_stdp_triplet_synapse_nestml]]))
DEBUG:  linear factors: Matrix([[0], [-1/tau_minus__for_stdp_triplet_synapse_nestml], [0]])
DEBUG:  inhomogeneous term: 0.0
DEBUG:  nonlinear term: 0.0
INFO:Shape tr_o2__for_stdp_triplet_synapse_nestml: reconstituting expression -tr_o2__for_stdp_triplet_synapse_nestml/tau_y__for_stdp_triplet_synapse_nestml
DEBUG:Splitting expression -tr_o2__for_stdp_triplet_synapse_nestml/tau_y__for_stdp_triplet_synapse_nestml (symbols Matrix([[V_m], [tr_o1__for_stdp_triplet_synapse_nestml], [tr_o2__for_stdp_triplet_synapse_nestml]]))
DEBUG:  linear factors: Matrix([[0], [0], [-1/tau_y__for_stdp_triplet_synapse_nestml]])
DEBUG:  inhomogeneous term: 0.0
DEBUG:  nonlinear term: 0.0
DEBUG:Initializing system of shapes with x = Matrix([[V_m], [tr_o1__for_stdp_triplet_synapse_nestml], [tr_o2__for_stdp_triplet_synapse_nestml]]), A = Matrix([[-1/tau_m, 0, 0], [0, -1/tau_minus__for_stdp_triplet_synapse_nestml, 0], [0, 0, -1/tau_y__for_stdp_triplet_synapse_nestml]]), b = Matrix([[E_L/tau_m + I_e/C_m + I_stim/C_m], [0.0], [0.0]]), c = Matrix([[0.0], [0.0], [0.0]])
INFO:Finding analytically solvable equations...
INFO:Saving dependency graph plot to /tmp/ode_dependency_graph.dot
DEBUG:os.makedirs('/tmp')
DEBUG:write lines to '/tmp/ode_dependency_graph.dot'
DEBUG:run [PosixPath('dot'), '-Kdot', '-Tpdf', '-O', 'ode_dependency_graph.dot']
INFO:Shape V_m: reconstituting expression E_L/tau_m - V_m/tau_m + I_e/C_m + I_stim/C_m
DEBUG:Splitting expression E_L/tau_m - V_m/tau_m + I_e/C_m + I_stim/C_m (symbols [V_m, tr_o1__for_stdp_triplet_synapse_nestml, tr_o2__for_stdp_triplet_synapse_nestml])
DEBUG:  linear factors: Matrix([[-1/tau_m], [0], [0]])
DEBUG:  inhomogeneous term: E_L/tau_m + I_e/C_m + I_stim/C_m
DEBUG:  nonlinear term: 0.0
INFO:Shape tr_o1__for_stdp_triplet_synapse_nestml: reconstituting expression -tr_o1__for_stdp_triplet_synapse_nestml/tau_minus__for_stdp_triplet_synapse_nestml
DEBUG:Splitting expression -tr_o1__for_stdp_triplet_synapse_nestml/tau_minus__for_stdp_triplet_synapse_nestml (symbols [V_m, tr_o1__for_stdp_triplet_synapse_nestml, tr_o2__for_stdp_triplet_synapse_nestml])
DEBUG:  linear factors: Matrix([[0], [-1/tau_minus__for_stdp_triplet_synapse_nestml], [0]])
DEBUG:  inhomogeneous term: 0.0
DEBUG:  nonlinear term: 0.0
INFO:Shape tr_o2__for_stdp_triplet_synapse_nestml: reconstituting expression -tr_o2__for_stdp_triplet_synapse_nestml/tau_y__for_stdp_triplet_synapse_nestml
DEBUG:Splitting expression -tr_o2__for_stdp_triplet_synapse_nestml/tau_y__for_stdp_triplet_synapse_nestml (symbols [V_m, tr_o1__for_stdp_triplet_synapse_nestml, tr_o2__for_stdp_triplet_synapse_nestml])
DEBUG:  linear factors: Matrix([[0], [0], [-1/tau_y__for_stdp_triplet_synapse_nestml]])
DEBUG:  inhomogeneous term: 0.0
DEBUG:  nonlinear term: 0.0
INFO:Saving dependency graph plot to /tmp/ode_dependency_graph_analytically_solvable_before_propagated.dot
DEBUG:os.makedirs('/tmp')
DEBUG:write lines to '/tmp/ode_dependency_graph_analytically_solvable_before_propagated.dot'
DEBUG:run [PosixPath('dot'), '-Kdot', '-Tpdf', '-O', 'ode_dependency_graph_analytically_solvable_before_propagated.dot']
INFO:Saving dependency graph plot to /tmp/ode_dependency_graph_analytically_solvable.dot
DEBUG:os.makedirs('/tmp')
DEBUG:write lines to '/tmp/ode_dependency_graph_analytically_solvable.dot'
DEBUG:run [PosixPath('dot'), '-Kdot', '-Tpdf', '-O', 'ode_dependency_graph_analytically_solvable.dot']
INFO:Generating propagators for the following symbols: V_m, tr_o1__for_stdp_triplet_synapse_nestml, tr_o2__for_stdp_triplet_synapse_nestml
DEBUG:Initializing system of shapes with x = Matrix([[V_m], [tr_o1__for_stdp_triplet_synapse_nestml], [tr_o2__for_stdp_triplet_synapse_nestml]]), A = Matrix([[-1/tau_m, 0, 0], [0, -1/tau_minus__for_stdp_triplet_synapse_nestml, 0], [0, 0, -1/tau_y__for_stdp_triplet_synapse_nestml]]), b = Matrix([[E_L/tau_m + I_e/C_m + I_stim/C_m], [0.0], [0.0]]), c = Matrix([[0], [0], [0]])
DEBUG:System of equations:
DEBUG:x = Matrix([[V_m], [tr_o1__for_stdp_triplet_synapse_nestml], [tr_o2__for_stdp_triplet_synapse_nestml]])
DEBUG:A = Matrix([
[-1/tau_m,                                             0,                                         0],
[       0, -1/tau_minus__for_stdp_triplet_synapse_nestml,                                         0],
[       0,                                             0, -1/tau_y__for_stdp_triplet_synapse_nestml]])
DEBUG:b = Matrix([[E_L/tau_m + I_e/C_m + I_stim/C_m], [0.0], [0.0]])
DEBUG:c = Matrix([[0], [0], [0]])
INFO:update_expr[V_m] = -E_L*__P__V_m__V_m + E_L + V_m*__P__V_m__V_m - I_e*__P__V_m__V_m*tau_m/C_m + I_e*tau_m/C_m - I_stim*__P__V_m__V_m*tau_m/C_m + I_stim*tau_m/C_m
INFO:update_expr[tr_o1__for_stdp_triplet_synapse_nestml] = __P__tr_o1__for_stdp_triplet_synapse_nestml__tr_o1__for_stdp_triplet_synapse_nestml*tr_o1__for_stdp_triplet_synapse_nestml
INFO:update_expr[tr_o2__for_stdp_triplet_synapse_nestml] = __P__tr_o2__for_stdp_triplet_synapse_nestml__tr_o2__for_stdp_triplet_synapse_nestml*tr_o2__for_stdp_triplet_synapse_nestml
WARNING:Not preserving expression for variable "V_m" as it is solved by propagator solver
WARNING:Not preserving expression for variable "tr_o1__for_stdp_triplet_synapse_nestml" as it is solved by propagator solver
WARNING:Not preserving expression for variable "tr_o2__for_stdp_triplet_synapse_nestml" as it is solved by propagator solver
INFO:In ode-toolbox: returning outdict =
INFO:[
    {
        "initial_values": {
            "V_m": "E_L",
            "tr_o1__for_stdp_triplet_synapse_nestml": "0.0",
            "tr_o2__for_stdp_triplet_synapse_nestml": "0.0"
        },
        "parameters": {
            "C_m": "250.000000000000",
            "E_L": "-70.0000000000000",
            "I_e": "0",
            "tau_m": "10.0000000000000",
            "tau_minus__for_stdp_triplet_synapse_nestml": "33.7000000000000",
            "tau_y__for_stdp_triplet_synapse_nestml": "125.000000000000"
        },
        "propagators": {
            "__P__V_m__V_m": "exp(-__h/tau_m)",
            "__P__tr_o1__for_stdp_triplet_synapse_nestml__tr_o1__for_stdp_triplet_synapse_nestml": "exp(-__h/tau_minus__for_stdp_triplet_synapse_nestml)",
            "__P__tr_o2__for_stdp_triplet_synapse_nestml__tr_o2__for_stdp_triplet_synapse_nestml": "exp(-__h/tau_y__for_stdp_triplet_synapse_nestml)"
        },
        "solver": "analytical",
        "state_variables": [
            "V_m",
            "tr_o1__for_stdp_triplet_synapse_nestml",
            "tr_o2__for_stdp_triplet_synapse_nestml"
        ],
        "update_expressions": {
            "V_m": "-E_L*__P__V_m__V_m + E_L + V_m*__P__V_m__V_m - I_e*__P__V_m__V_m*tau_m/C_m + I_e*tau_m/C_m - I_stim*__P__V_m__V_m*tau_m/C_m + I_stim*tau_m/C_m",
            "tr_o1__for_stdp_triplet_synapse_nestml": "__P__tr_o1__for_stdp_triplet_synapse_nestml__tr_o1__for_stdp_triplet_synapse_nestml*tr_o1__for_stdp_triplet_synapse_nestml",
            "tr_o2__for_stdp_triplet_synapse_nestml": "__P__tr_o2__for_stdp_triplet_synapse_nestml__tr_o2__for_stdp_triplet_synapse_nestml*tr_o2__for_stdp_triplet_synapse_nestml"
        }
    }
]
[73,iaf_psc_delta_neuron_nestml__with_stdp_triplet_synapse_nestml, DEBUG, [43:0;94:0]]: Start building symbol table!
INFO:Analysing input:
INFO:{
    "dynamics": [
        {
            "expression": "tr_r1' = (-tr_r1) / tau_plus",
            "initial_values": {
                "tr_r1": "0.0"
            }
        },
        {
            "expression": "tr_r2' = (-tr_r2) / tau_x",
            "initial_values": {
                "tr_r2": "0.0"
            }
        }
    ],
    "options": {
        "output_timestep_symbol": "__h"
    },
    "parameters": {
        "A2_minus": "0.007",
        "A2_plus": "7.5e-10",
        "A3_minus": "0.00023",
        "A3_plus": "0.0093",
        "Wmax": "100",
        "Wmin": "0",
        "d": "1",
        "tau_minus": "33.7",
        "tau_plus": "16.8",
        "tau_x": "101",
        "tau_y": "125"
    }
}
INFO:Processing global options...
INFO:Processing input shapes...
INFO:
Processing differential-equation form shape tr_r1 with defining expression = "(-tr_r1) / tau_plus"
DEBUG:Splitting expression -tr_r1/tau_plus (symbols [tr_r1])
DEBUG:  linear factors: Matrix([[-1/tau_plus]])
DEBUG:  inhomogeneous term: 0.0
DEBUG:  nonlinear term: 0.0
DEBUG:Created Shape with symbol tr_r1, derivative_factors = [-1/tau_plus], inhom_term = 0.0, nonlin_term = 0.0
INFO:   Returning shape: Shape "tr_r1" of order 1
INFO:Shape tr_r1: reconstituting expression -tr_r1/tau_plus
INFO:
Processing differential-equation form shape tr_r2 with defining expression = "(-tr_r2) / tau_x"
DEBUG:Splitting expression -tr_r2/tau_x (symbols [tr_r2])
DEBUG:  linear factors: Matrix([[-1/tau_x]])
DEBUG:  inhomogeneous term: 0.0
DEBUG:  nonlinear term: 0.0
DEBUG:Created Shape with symbol tr_r2, derivative_factors = [-1/tau_x], inhom_term = 0.0, nonlin_term = 0.0
INFO:   Returning shape: Shape "tr_r2" of order 1
INFO:Shape tr_r2: reconstituting expression -tr_r2/tau_x
INFO:All known variables: [tr_r1, tr_r2], all parameters used in ODEs: {tau_x, tau_plus}
INFO:
Processing differential-equation form shape tr_r1 with defining expression = "(-tr_r1) / tau_plus"
DEBUG:Splitting expression -tr_r1/tau_plus (symbols [tr_r1, tr_r2, tr_r1])
DEBUG:  linear factors: Matrix([[-1/tau_plus], [0], [0]])
DEBUG:  inhomogeneous term: 0.0
DEBUG:  nonlinear term: 0.0
DEBUG:Created Shape with symbol tr_r1, derivative_factors = [-1/tau_plus], inhom_term = 0.0, nonlin_term = 0
INFO:   Returning shape: Shape "tr_r1" of order 1
INFO:
Processing differential-equation form shape tr_r2 with defining expression = "(-tr_r2) / tau_x"
DEBUG:Splitting expression -tr_r2/tau_x (symbols [tr_r1, tr_r2, tr_r1, tr_r2])
DEBUG:  linear factors: Matrix([[0], [-1/tau_x], [0], [0]])
DEBUG:  inhomogeneous term: 0.0
DEBUG:  nonlinear term: 0.0
DEBUG:Created Shape with symbol tr_r2, derivative_factors = [-1/tau_x], inhom_term = 0.0, nonlin_term = 0
INFO:   Returning shape: Shape "tr_r2" of order 1
INFO:Shape tr_r1: reconstituting expression -tr_r1/tau_plus
DEBUG:Splitting expression -tr_r1/tau_plus (symbols Matrix([[tr_r1], [tr_r2]]))
DEBUG:  linear factors: Matrix([[-1/tau_plus], [0]])
DEBUG:  inhomogeneous term: 0.0
DEBUG:  nonlinear term: 0.0
INFO:Shape tr_r2: reconstituting expression -tr_r2/tau_x
DEBUG:Splitting expression -tr_r2/tau_x (symbols Matrix([[tr_r1], [tr_r2]]))
DEBUG:  linear factors: Matrix([[0], [-1/tau_x]])
DEBUG:  inhomogeneous term: 0.0
DEBUG:  nonlinear term: 0.0
DEBUG:Initializing system of shapes with x = Matrix([[tr_r1], [tr_r2]]), A = Matrix([[-1/tau_plus, 0], [0, -1/tau_x]]), b = Matrix([[0.0], [0.0]]), c = Matrix([[0.0], [0.0]])
INFO:Finding analytically solvable equations...
INFO:Saving dependency graph plot to /tmp/ode_dependency_graph.dot
DEBUG:os.makedirs('/tmp')
DEBUG:write lines to '/tmp/ode_dependency_graph.dot'
DEBUG:run [PosixPath('dot'), '-Kdot', '-Tpdf', '-O', 'ode_dependency_graph.dot']
[74,GLOBAL, INFO]: Analysing/transforming synapse stdp_triplet_synapse_nestml__with_iaf_psc_delta_neuron_nestml.
[75,stdp_triplet_synapse_nestml__with_iaf_psc_delta_neuron_nestml, INFO, [2:0;63:0]]: Starts processing of the model 'stdp_triplet_synapse_nestml__with_iaf_psc_delta_neuron_nestml'
INFO:Shape tr_r1: reconstituting expression -tr_r1/tau_plus
DEBUG:Splitting expression -tr_r1/tau_plus (symbols [tr_r1, tr_r2])
DEBUG:  linear factors: Matrix([[-1/tau_plus], [0]])
DEBUG:  inhomogeneous term: 0.0
DEBUG:  nonlinear term: 0.0
INFO:Shape tr_r2: reconstituting expression -tr_r2/tau_x
DEBUG:Splitting expression -tr_r2/tau_x (symbols [tr_r1, tr_r2])
DEBUG:  linear factors: Matrix([[0], [-1/tau_x]])
DEBUG:  inhomogeneous term: 0.0
DEBUG:  nonlinear term: 0.0
INFO:Saving dependency graph plot to /tmp/ode_dependency_graph_analytically_solvable_before_propagated.dot
DEBUG:os.makedirs('/tmp')
DEBUG:write lines to '/tmp/ode_dependency_graph_analytically_solvable_before_propagated.dot'
DEBUG:run [PosixPath('dot'), '-Kdot', '-Tpdf', '-O', 'ode_dependency_graph_analytically_solvable_before_propagated.dot']
INFO:Saving dependency graph plot to /tmp/ode_dependency_graph_analytically_solvable.dot
DEBUG:os.makedirs('/tmp')
DEBUG:write lines to '/tmp/ode_dependency_graph_analytically_solvable.dot'
DEBUG:run [PosixPath('dot'), '-Kdot', '-Tpdf', '-O', 'ode_dependency_graph_analytically_solvable.dot']
INFO:Generating propagators for the following symbols: tr_r1, tr_r2
DEBUG:Initializing system of shapes with x = Matrix([[tr_r1], [tr_r2]]), A = Matrix([[-1/tau_plus, 0], [0, -1/tau_x]]), b = Matrix([[0.0], [0.0]]), c = Matrix([[0], [0]])
DEBUG:System of equations:
DEBUG:x = Matrix([[tr_r1], [tr_r2]])
DEBUG:A = Matrix([
[-1/tau_plus,        0],
[          0, -1/tau_x]])
DEBUG:b = Matrix([[0.0], [0.0]])
DEBUG:c = Matrix([[0], [0]])
INFO:update_expr[tr_r1] = __P__tr_r1__tr_r1*tr_r1
INFO:update_expr[tr_r2] = __P__tr_r2__tr_r2*tr_r2
WARNING:Not preserving expression for variable "tr_r1" as it is solved by propagator solver
WARNING:Not preserving expression for variable "tr_r2" as it is solved by propagator solver
INFO:In ode-toolbox: returning outdict =
INFO:[
    {
        "initial_values": {
            "tr_r1": "0.0",
            "tr_r2": "0.0"
        },
        "parameters": {
            "tau_plus": "16.8000000000000",
            "tau_x": "101.000000000000"
        },
        "propagators": {
            "__P__tr_r1__tr_r1": "exp(-__h/tau_plus)",
            "__P__tr_r2__tr_r2": "exp(-__h/tau_x)"
        },
        "solver": "analytical",
        "state_variables": [
            "tr_r1",
            "tr_r2"
        ],
        "update_expressions": {
            "tr_r1": "__P__tr_r1__tr_r1*tr_r1",
            "tr_r2": "__P__tr_r2__tr_r2*tr_r2"
        }
    }
]
[76,stdp_triplet_synapse_nestml__with_iaf_psc_delta_neuron_nestml, DEBUG, [2:0;63:0]]: Start building symbol table!
[77,stdp_triplet_synapse_nestml__with_iaf_psc_delta_neuron_nestml, WARNING, [13:8;13:28]]: Variable 'd' has the same name as a physical unit!
[78,stdp_triplet_synapse_nestml__with_iaf_psc_delta_neuron_nestml, INFO, [52:17;52:17]]: Implicit casting from (compatible) type 'integer' to 'real'.
[79,stdp_triplet_synapse_nestml__with_iaf_psc_delta_neuron_nestml, INFO, [53:17;53:17]]: Implicit casting from (compatible) type 'integer' to 'real'.
[80,stdp_triplet_synapse_nestml__with_iaf_psc_delta_neuron_nestml, DEBUG, [2:0;63:0]]: Start building symbol table!
[81,stdp_triplet_synapse_nestml__with_iaf_psc_delta_neuron_nestml, WARNING, [13:8;13:28]]: Variable 'd' has the same name as a physical unit!
[82,stdp_triplet_synapse_nestml__with_iaf_psc_delta_neuron_nestml, INFO, [52:17;52:17]]: Implicit casting from (compatible) type 'integer' to 'real'.
[83,stdp_triplet_synapse_nestml__with_iaf_psc_delta_neuron_nestml, INFO, [53:17;53:17]]: Implicit casting from (compatible) type 'integer' to 'real'.
[84,GLOBAL, INFO]: Rendering template /home/charl/julich/nestml-fork-integrate_specific_odes/nestml/doc/tutorials/triplet_stdp_synapse/target/iaf_psc_delta_neuron_nestml.cpp
[85,GLOBAL, INFO]: Rendering template /home/charl/julich/nestml-fork-integrate_specific_odes/nestml/doc/tutorials/triplet_stdp_synapse/target/iaf_psc_delta_neuron_nestml.h
[86,iaf_psc_delta_neuron_nestml, INFO, [43:0;94:0]]: Successfully generated code for the model: 'iaf_psc_delta_neuron_nestml' in: '/home/charl/julich/nestml-fork-integrate_specific_odes/nestml/doc/tutorials/triplet_stdp_synapse/target' !
[87,GLOBAL, INFO]: Rendering template /home/charl/julich/nestml-fork-integrate_specific_odes/nestml/doc/tutorials/triplet_stdp_synapse/target/iaf_psc_delta_neuron_nestml__with_stdp_triplet_synapse_nestml.cpp
[88,GLOBAL, INFO]: Rendering template /home/charl/julich/nestml-fork-integrate_specific_odes/nestml/doc/tutorials/triplet_stdp_synapse/target/iaf_psc_delta_neuron_nestml__with_stdp_triplet_synapse_nestml.h
[89,iaf_psc_delta_neuron_nestml__with_stdp_triplet_synapse_nestml, INFO, [43:0;94:0]]: Successfully generated code for the model: 'iaf_psc_delta_neuron_nestml__with_stdp_triplet_synapse_nestml' in: '/home/charl/julich/nestml-fork-integrate_specific_odes/nestml/doc/tutorials/triplet_stdp_synapse/target' !
[90,GLOBAL, INFO]: Rendering template /home/charl/julich/nestml-fork-integrate_specific_odes/nestml/doc/tutorials/triplet_stdp_synapse/target/stdp_triplet_synapse_nestml__with_iaf_psc_delta_neuron_nestml.h
[91,stdp_triplet_synapse_nestml__with_iaf_psc_delta_neuron_nestml, INFO, [2:0;63:0]]: Successfully generated code for the model: 'stdp_triplet_synapse_nestml__with_iaf_psc_delta_neuron_nestml' in: '/home/charl/julich/nestml-fork-integrate_specific_odes/nestml/doc/tutorials/triplet_stdp_synapse/target' !
[92,GLOBAL, INFO]: Rendering template /home/charl/julich/nestml-fork-integrate_specific_odes/nestml/doc/tutorials/triplet_stdp_synapse/target/nestml_3c70a8ed53be4c46854ae5b0aa248ab9_module.cpp
[93,GLOBAL, INFO]: Rendering template /home/charl/julich/nestml-fork-integrate_specific_odes/nestml/doc/tutorials/triplet_stdp_synapse/target/nestml_3c70a8ed53be4c46854ae5b0aa248ab9_module.h
[94,GLOBAL, INFO]: Rendering template /home/charl/julich/nestml-fork-integrate_specific_odes/nestml/doc/tutorials/triplet_stdp_synapse/target/CMakeLists.txt
[95,GLOBAL, INFO]: Successfully generated NEST module code in '/home/charl/julich/nestml-fork-integrate_specific_odes/nestml/doc/tutorials/triplet_stdp_synapse/target' !
CMake Warning (dev) at CMakeLists.txt:95 (project):
  cmake_minimum_required() should be called prior to this top-level project()
  call.  Please see the cmake-commands(7) manual for usage documentation of
  both commands.
This warning is for project developers.  Use -Wno-dev to suppress it.

-- The CXX compiler identification is GNU 12.3.0
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done

-------------------------------------------------------
nestml_3c70a8ed53be4c46854ae5b0aa248ab9_module Configuration Summary
-------------------------------------------------------

C++ compiler         : /usr/bin/c++
Build static libs    : OFF
C++ compiler flags   :
NEST compiler flags  :  -std=c++17 -Wall -fopenmp -O2 -fdiagnostics-color=auto
NEST include dirs    :  -I/home/charl/julich/nest-simulator-install/include/nest -I/usr/include -I/usr/include -I/usr/include
NEST libraries flags : -L/home/charl/julich/nest-simulator-install/lib/nest -lnest -lsli /usr/lib/x86_64-linux-gnu/libltdl.so  /usr/lib/x86_64-linux-gnu/libgsl.so /usr/lib/x86_64-linux-gnu/libgslcblas.so    /usr/lib/gcc/x86_64-linux-gnu/12/libgomp.so /usr/lib/x86_64-linux-gnu/libpthread.a

-------------------------------------------------------

You can now build and install 'nestml_3c70a8ed53be4c46854ae5b0aa248ab9_module' using
  make
  make install

The library file libnestml_3c70a8ed53be4c46854ae5b0aa248ab9_module.so will be installed to
  /tmp/nestml_target_yocmq5xi
The module can be loaded into NEST using
  (nestml_3c70a8ed53be4c46854ae5b0aa248ab9_module) Install       (in SLI)
  nest.Install(nestml_3c70a8ed53be4c46854ae5b0aa248ab9_module)   (in PyNEST)

CMake Warning (dev) in CMakeLists.txt:
  No cmake_minimum_required command is present.  A line of code such as

    cmake_minimum_required(VERSION 3.26)

  should be added at the top of the file.  The version specified may be lower
  if you wish to support older CMake versions for this project.  For more
  information run "cmake --help-policy CMP0000".
This warning is for project developers.  Use -Wno-dev to suppress it.

-- Configuring done (0.5s)
-- Generating done (0.0s)
-- Build files have been written to: /home/charl/julich/nestml-fork-integrate_specific_odes/nestml/doc/tutorials/triplet_stdp_synapse/target
[ 25%] Building CXX object CMakeFiles/nestml_3c70a8ed53be4c46854ae5b0aa248ab9_module_module.dir/nestml_3c70a8ed53be4c46854ae5b0aa248ab9_module.o
[ 50%] Building CXX object CMakeFiles/nestml_3c70a8ed53be4c46854ae5b0aa248ab9_module_module.dir/iaf_psc_delta_neuron_nestml.o
[ 75%] Building CXX object CMakeFiles/nestml_3c70a8ed53be4c46854ae5b0aa248ab9_module_module.dir/iaf_psc_delta_neuron_nestml__with_stdp_triplet_synapse_nestml.o
/home/charl/julich/nestml-fork-integrate_specific_odes/nestml/doc/tutorials/triplet_stdp_synapse/target/iaf_psc_delta_neuron_nestml.cpp: In member function ‘void iaf_psc_delta_neuron_nestml::init_state_internal_()’:
/home/charl/julich/nestml-fork-integrate_specific_odes/nestml/doc/tutorials/triplet_stdp_synapse/target/iaf_psc_delta_neuron_nestml.cpp:173:16: warning: unused variable ‘__resolution’ [-Wunused-variable]
  173 |   const double __resolution = nest::Time::get_resolution().get_ms();  // do not remove, this is necessary for the resolution() function
      |                ^~~~~~~~~~~~
/home/charl/julich/nestml-fork-integrate_specific_odes/nestml/doc/tutorials/triplet_stdp_synapse/target/iaf_psc_delta_neuron_nestml.cpp: In member function ‘virtual void iaf_psc_delta_neuron_nestml::update(const nest::Time&, long int, long int)’:
/home/charl/julich/nestml-fork-integrate_specific_odes/nestml/doc/tutorials/triplet_stdp_synapse/target/iaf_psc_delta_neuron_nestml.cpp:266:24: warning: comparison of integer expressions of different signedness: ‘long int’ and ‘const size_t’ {aka ‘const long unsigned int’} [-Wsign-compare]
  266 |     for (long i = 0; i < NUM_SPIKE_RECEPTORS; ++i)
      |                      ~~^~~~~~~~~~~~~~~~~~~~~
/home/charl/julich/nestml-fork-integrate_specific_odes/nestml/doc/tutorials/triplet_stdp_synapse/target/iaf_psc_delta_neuron_nestml.cpp:261:10: warning: variable ‘get_t’ set but not used [-Wunused-but-set-variable]
  261 |     auto get_t = [origin, lag](){ return nest::Time( nest::Time::step( origin.get_steps() + lag + 1) ).get_ms(); };
      |          ^~~~~
/home/charl/julich/nestml-fork-integrate_specific_odes/nestml/doc/tutorials/triplet_stdp_synapse/target/iaf_psc_delta_neuron_nestml__with_stdp_triplet_synapse_nestml.cpp: In member function ‘void iaf_psc_delta_neuron_nestml__with_stdp_triplet_synapse_nestml::init_state_internal_()’:
/home/charl/julich/nestml-fork-integrate_specific_odes/nestml/doc/tutorials/triplet_stdp_synapse/target/iaf_psc_delta_neuron_nestml__with_stdp_triplet_synapse_nestml.cpp:188:16: warning: unused variable ‘__resolution’ [-Wunused-variable]
  188 |   const double __resolution = nest::Time::get_resolution().get_ms();  // do not remove, this is necessary for the resolution() function
      |                ^~~~~~~~~~~~
/home/charl/julich/nestml-fork-integrate_specific_odes/nestml/doc/tutorials/triplet_stdp_synapse/target/iaf_psc_delta_neuron_nestml__with_stdp_triplet_synapse_nestml.cpp: In member function ‘virtual void iaf_psc_delta_neuron_nestml__with_stdp_triplet_synapse_nestml::update(const nest::Time&, long int, long int)’:
/home/charl/julich/nestml-fork-integrate_specific_odes/nestml/doc/tutorials/triplet_stdp_synapse/target/iaf_psc_delta_neuron_nestml__with_stdp_triplet_synapse_nestml.cpp:297:24: warning: comparison of integer expressions of different signedness: ‘long int’ and ‘const size_t’ {aka ‘const long unsigned int’} [-Wsign-compare]
  297 |     for (long i = 0; i < NUM_SPIKE_RECEPTORS; ++i)
      |                      ~~^~~~~~~~~~~~~~~~~~~~~
/home/charl/julich/nestml-fork-integrate_specific_odes/nestml/doc/tutorials/triplet_stdp_synapse/target/iaf_psc_delta_neuron_nestml__with_stdp_triplet_synapse_nestml.cpp:292:10: warning: variable ‘get_t’ set but not used [-Wunused-but-set-variable]
  292 |     auto get_t = [origin, lag](){ return nest::Time( nest::Time::step( origin.get_steps() + lag + 1) ).get_ms(); };
      |          ^~~~~
In file included from /home/charl/julich/nestml-fork-integrate_specific_odes/nestml/doc/tutorials/triplet_stdp_synapse/target/nestml_3c70a8ed53be4c46854ae5b0aa248ab9_module.cpp:36:
/home/charl/julich/nestml-fork-integrate_specific_odes/nestml/doc/tutorials/triplet_stdp_synapse/target/stdp_triplet_synapse_nestml__with_iaf_psc_delta_neuron_nestml.h: In instantiation of ‘nest::stdp_triplet_synapse_nestml__with_iaf_psc_delta_neuron_nestml<targetidentifierT>::stdp_triplet_synapse_nestml__with_iaf_psc_delta_neuron_nestml() [with targetidentifierT = nest::TargetIdentifierPtrRport]’:
/home/charl/julich/nest-simulator-install/include/nest/connector_model.h:164:25:   required from ‘nest::GenericConnectorModel<ConnectionT>::GenericConnectorModel(std::string) [with ConnectionT = nest::stdp_triplet_synapse_nestml__with_iaf_psc_delta_neuron_nestml<nest::TargetIdentifierPtrRport>; std::string = std::__cxx11::basic_string<char>]’
/home/charl/julich/nest-simulator-install/include/nest/model_manager_impl.h:62:5:   required from ‘void nest::ModelManager::register_connection_model(const std::string&) [with ConnectionT = nest::stdp_triplet_synapse_nestml__with_iaf_psc_delta_neuron_nestml; std::string = std::__cxx11::basic_string<char>]’
/home/charl/julich/nest-simulator-install/include/nest/nest_impl.h:37:70:   required from ‘void nest::register_connection_model(const std::string&) [with ConnectorModelT = stdp_triplet_synapse_nestml__with_iaf_psc_delta_neuron_nestml; std::string = std::__cxx11::basic_string<char>]’
/home/charl/julich/nestml-fork-integrate_specific_odes/nestml/doc/tutorials/triplet_stdp_synapse/target/stdp_triplet_synapse_nestml__with_iaf_psc_delta_neuron_nestml.h:603:99:   required from here
/home/charl/julich/nestml-fork-integrate_specific_odes/nestml/doc/tutorials/triplet_stdp_synapse/target/stdp_triplet_synapse_nestml__with_iaf_psc_delta_neuron_nestml.h:731:16: warning: unused variable ‘__resolution’ [-Wunused-variable]
  731 |   const double __resolution = nest::Time::get_resolution().get_ms();  // do not remove, this is necessary for the resolution() function
      |                ^~~~~~~~~~~~
/home/charl/julich/nestml-fork-integrate_specific_odes/nestml/doc/tutorials/triplet_stdp_synapse/target/stdp_triplet_synapse_nestml__with_iaf_psc_delta_neuron_nestml.h: In instantiation of ‘void nest::stdp_triplet_synapse_nestml__with_iaf_psc_delta_neuron_nestml<targetidentifierT>::recompute_internal_variables() [with targetidentifierT = nest::TargetIdentifierPtrRport]’:
/home/charl/julich/nestml-fork-integrate_specific_odes/nestml/doc/tutorials/triplet_stdp_synapse/target/stdp_triplet_synapse_nestml__with_iaf_psc_delta_neuron_nestml.h:745:3:   required from ‘nest::stdp_triplet_synapse_nestml__with_iaf_psc_delta_neuron_nestml<targetidentifierT>::stdp_triplet_synapse_nestml__with_iaf_psc_delta_neuron_nestml() [with targetidentifierT = nest::TargetIdentifierPtrRport]’
/home/charl/julich/nest-simulator-install/include/nest/connector_model.h:164:25:   required from ‘nest::GenericConnectorModel<ConnectionT>::GenericConnectorModel(std::string) [with ConnectionT = nest::stdp_triplet_synapse_nestml__with_iaf_psc_delta_neuron_nestml<nest::TargetIdentifierPtrRport>; std::string = std::__cxx11::basic_string<char>]’
/home/charl/julich/nest-simulator-install/include/nest/model_manager_impl.h:62:5:   required from ‘void nest::ModelManager::register_connection_model(const std::string&) [with ConnectionT = nest::stdp_triplet_synapse_nestml__with_iaf_psc_delta_neuron_nestml; std::string = std::__cxx11::basic_string<char>]’
/home/charl/julich/nest-simulator-install/include/nest/nest_impl.h:37:70:   required from ‘void nest::register_connection_model(const std::string&) [with ConnectorModelT = stdp_triplet_synapse_nestml__with_iaf_psc_delta_neuron_nestml; std::string = std::__cxx11::basic_string<char>]’
/home/charl/julich/nestml-fork-integrate_specific_odes/nestml/doc/tutorials/triplet_stdp_synapse/target/stdp_triplet_synapse_nestml__with_iaf_psc_delta_neuron_nestml.h:603:99:   required from here
/home/charl/julich/nestml-fork-integrate_specific_odes/nestml/doc/tutorials/triplet_stdp_synapse/target/stdp_triplet_synapse_nestml__with_iaf_psc_delta_neuron_nestml.h:718:16: warning: unused variable ‘__resolution’ [-Wunused-variable]
  718 |   const double __resolution = nest::Time::get_resolution().get_ms();  // do not remove, this is necessary for the resolution() function
      |                ^~~~~~~~~~~~
/home/charl/julich/nestml-fork-integrate_specific_odes/nestml/doc/tutorials/triplet_stdp_synapse/target/stdp_triplet_synapse_nestml__with_iaf_psc_delta_neuron_nestml.h: In instantiation of ‘nest::stdp_triplet_synapse_nestml__with_iaf_psc_delta_neuron_nestml<targetidentifierT>::stdp_triplet_synapse_nestml__with_iaf_psc_delta_neuron_nestml() [with targetidentifierT = nest::TargetIdentifierIndex]’:
/home/charl/julich/nest-simulator-install/include/nest/connector_model.h:164:25:   required from ‘nest::GenericConnectorModel<ConnectionT>::GenericConnectorModel(std::string) [with ConnectionT = nest::stdp_triplet_synapse_nestml__with_iaf_psc_delta_neuron_nestml<nest::TargetIdentifierIndex>; std::string = std::__cxx11::basic_string<char>]’
/home/charl/julich/nest-simulator-install/include/nest/model_manager_impl.h:103:34:   required from ‘void nest::ModelManager::register_specific_connection_model_(const std::string&) [with CompleteConnecionT = nest::stdp_triplet_synapse_nestml__with_iaf_psc_delta_neuron_nestml<nest::TargetIdentifierIndex>; std::string = std::__cxx11::basic_string<char>]’
/home/charl/julich/nest-simulator-install/include/nest/model_manager_impl.h:67:80:   required from ‘void nest::ModelManager::register_connection_model(const std::string&) [with ConnectionT = nest::stdp_triplet_synapse_nestml__with_iaf_psc_delta_neuron_nestml; std::string = std::__cxx11::basic_string<char>]’
/home/charl/julich/nest-simulator-install/include/nest/nest_impl.h:37:70:   required from ‘void nest::register_connection_model(const std::string&) [with ConnectorModelT = stdp_triplet_synapse_nestml__with_iaf_psc_delta_neuron_nestml; std::string = std::__cxx11::basic_string<char>]’
/home/charl/julich/nestml-fork-integrate_specific_odes/nestml/doc/tutorials/triplet_stdp_synapse/target/stdp_triplet_synapse_nestml__with_iaf_psc_delta_neuron_nestml.h:603:99:   required from here
/home/charl/julich/nestml-fork-integrate_specific_odes/nestml/doc/tutorials/triplet_stdp_synapse/target/stdp_triplet_synapse_nestml__with_iaf_psc_delta_neuron_nestml.h:731:16: warning: unused variable ‘__resolution’ [-Wunused-variable]
  731 |   const double __resolution = nest::Time::get_resolution().get_ms();  // do not remove, this is necessary for the resolution() function
      |                ^~~~~~~~~~~~
/home/charl/julich/nestml-fork-integrate_specific_odes/nestml/doc/tutorials/triplet_stdp_synapse/target/stdp_triplet_synapse_nestml__with_iaf_psc_delta_neuron_nestml.h: In instantiation of ‘void nest::stdp_triplet_synapse_nestml__with_iaf_psc_delta_neuron_nestml<targetidentifierT>::recompute_internal_variables() [with targetidentifierT = nest::TargetIdentifierIndex]’:
/home/charl/julich/nestml-fork-integrate_specific_odes/nestml/doc/tutorials/triplet_stdp_synapse/target/stdp_triplet_synapse_nestml__with_iaf_psc_delta_neuron_nestml.h:745:3:   required from ‘nest::stdp_triplet_synapse_nestml__with_iaf_psc_delta_neuron_nestml<targetidentifierT>::stdp_triplet_synapse_nestml__with_iaf_psc_delta_neuron_nestml() [with targetidentifierT = nest::TargetIdentifierIndex]’
/home/charl/julich/nest-simulator-install/include/nest/connector_model.h:164:25:   required from ‘nest::GenericConnectorModel<ConnectionT>::GenericConnectorModel(std::string) [with ConnectionT = nest::stdp_triplet_synapse_nestml__with_iaf_psc_delta_neuron_nestml<nest::TargetIdentifierIndex>; std::string = std::__cxx11::basic_string<char>]’
/home/charl/julich/nest-simulator-install/include/nest/model_manager_impl.h:103:34:   required from ‘void nest::ModelManager::register_specific_connection_model_(const std::string&) [with CompleteConnecionT = nest::stdp_triplet_synapse_nestml__with_iaf_psc_delta_neuron_nestml<nest::TargetIdentifierIndex>; std::string = std::__cxx11::basic_string<char>]’
/home/charl/julich/nest-simulator-install/include/nest/model_manager_impl.h:67:80:   required from ‘void nest::ModelManager::register_connection_model(const std::string&) [with ConnectionT = nest::stdp_triplet_synapse_nestml__with_iaf_psc_delta_neuron_nestml; std::string = std::__cxx11::basic_string<char>]’
/home/charl/julich/nest-simulator-install/include/nest/nest_impl.h:37:70:   required from ‘void nest::register_connection_model(const std::string&) [with ConnectorModelT = stdp_triplet_synapse_nestml__with_iaf_psc_delta_neuron_nestml; std::string = std::__cxx11::basic_string<char>]’
/home/charl/julich/nestml-fork-integrate_specific_odes/nestml/doc/tutorials/triplet_stdp_synapse/target/stdp_triplet_synapse_nestml__with_iaf_psc_delta_neuron_nestml.h:603:99:   required from here
/home/charl/julich/nestml-fork-integrate_specific_odes/nestml/doc/tutorials/triplet_stdp_synapse/target/stdp_triplet_synapse_nestml__with_iaf_psc_delta_neuron_nestml.h:718:16: warning: unused variable ‘__resolution’ [-Wunused-variable]
  718 |   const double __resolution = nest::Time::get_resolution().get_ms();  // do not remove, this is necessary for the resolution() function
      |                ^~~~~~~~~~~~
/home/charl/julich/nestml-fork-integrate_specific_odes/nestml/doc/tutorials/triplet_stdp_synapse/target/stdp_triplet_synapse_nestml__with_iaf_psc_delta_neuron_nestml.h: In instantiation of ‘bool nest::stdp_triplet_synapse_nestml__with_iaf_psc_delta_neuron_nestml<targetidentifierT>::send(nest::Event&, size_t, const nest::stdp_triplet_synapse_nestml__with_iaf_psc_delta_neuron_nestmlCommonSynapseProperties&) [with targetidentifierT = nest::TargetIdentifierPtrRport; size_t = long unsigned int]’:
/home/charl/julich/nest-simulator-install/include/nest/connector_base.h:391:22:   required from ‘void nest::Connector<ConnectionT>::send_to_all(size_t, const std::vector<nest::ConnectorModel*>&, nest::Event&) [with ConnectionT = nest::stdp_triplet_synapse_nestml__with_iaf_psc_delta_neuron_nestml<nest::TargetIdentifierPtrRport>; size_t = long unsigned int]’
/home/charl/julich/nest-simulator-install/include/nest/connector_base.h:383:3:   required from here
/home/charl/julich/nestml-fork-integrate_specific_odes/nestml/doc/tutorials/triplet_stdp_synapse/target/stdp_triplet_synapse_nestml__with_iaf_psc_delta_neuron_nestml.h:518:14: warning: variable ‘get_t’ set but not used [-Wunused-but-set-variable]
  518 |         auto get_t = [_tr_t](){ return _tr_t; };   // do not remove, this is in case the predefined time variable ``t`` is used in the NESTML model
      |              ^~~~~
/home/charl/julich/nestml-fork-integrate_specific_odes/nestml/doc/tutorials/triplet_stdp_synapse/target/stdp_triplet_synapse_nestml__with_iaf_psc_delta_neuron_nestml.h:543:14: warning: variable ‘get_t’ set but not used [-Wunused-but-set-variable]
  543 |         auto get_t = [__t_spike](){ return __t_spike; };    // do not remove, this is in case the predefined time variable ``t`` is used in the NESTML model
      |              ^~~~~
/home/charl/julich/nestml-fork-integrate_specific_odes/nestml/doc/tutorials/triplet_stdp_synapse/target/stdp_triplet_synapse_nestml__with_iaf_psc_delta_neuron_nestml.h:580:14: warning: variable ‘get_t’ set but not used [-Wunused-but-set-variable]
  580 |         auto get_t = [__t_spike](){ return __t_spike; };    // do not remove, this is in case the predefined time variable ``t`` is used in the NESTML model
      |              ^~~~~
/home/charl/julich/nestml-fork-integrate_specific_odes/nestml/doc/tutorials/triplet_stdp_synapse/target/stdp_triplet_synapse_nestml__with_iaf_psc_delta_neuron_nestml.h:451:18: warning: unused variable ‘__resolution’ [-Wunused-variable]
  451 |     const double __resolution = nest::Time::get_resolution().get_ms();  // do not remove, this is necessary for the resolution() function
      |                  ^~~~~~~~~~~~
/home/charl/julich/nestml-fork-integrate_specific_odes/nestml/doc/tutorials/triplet_stdp_synapse/target/stdp_triplet_synapse_nestml__with_iaf_psc_delta_neuron_nestml.h:453:10: warning: variable ‘get_thread’ set but not used [-Wunused-but-set-variable]
  453 |     auto get_thread = [tid]()
      |          ^~~~~~~~~~
/home/charl/julich/nestml-fork-integrate_specific_odes/nestml/doc/tutorials/triplet_stdp_synapse/target/stdp_triplet_synapse_nestml__with_iaf_psc_delta_neuron_nestml.h: In instantiation of ‘bool nest::stdp_triplet_synapse_nestml__with_iaf_psc_delta_neuron_nestml<targetidentifierT>::send(nest::Event&, size_t, const nest::stdp_triplet_synapse_nestml__with_iaf_psc_delta_neuron_nestmlCommonSynapseProperties&) [with targetidentifierT = nest::TargetIdentifierIndex; size_t = long unsigned int]’:
/home/charl/julich/nest-simulator-install/include/nest/connector_base.h:391:22:   required from ‘void nest::Connector<ConnectionT>::send_to_all(size_t, const std::vector<nest::ConnectorModel*>&, nest::Event&) [with ConnectionT = nest::stdp_triplet_synapse_nestml__with_iaf_psc_delta_neuron_nestml<nest::TargetIdentifierIndex>; size_t = long unsigned int]’
/home/charl/julich/nest-simulator-install/include/nest/connector_base.h:383:3:   required from here
/home/charl/julich/nestml-fork-integrate_specific_odes/nestml/doc/tutorials/triplet_stdp_synapse/target/stdp_triplet_synapse_nestml__with_iaf_psc_delta_neuron_nestml.h:518:14: warning: variable ‘get_t’ set but not used [-Wunused-but-set-variable]
  518 |         auto get_t = [_tr_t](){ return _tr_t; };   // do not remove, this is in case the predefined time variable ``t`` is used in the NESTML model
      |              ^~~~~
/home/charl/julich/nestml-fork-integrate_specific_odes/nestml/doc/tutorials/triplet_stdp_synapse/target/stdp_triplet_synapse_nestml__with_iaf_psc_delta_neuron_nestml.h:543:14: warning: variable ‘get_t’ set but not used [-Wunused-but-set-variable]
  543 |         auto get_t = [__t_spike](){ return __t_spike; };    // do not remove, this is in case the predefined time variable ``t`` is used in the NESTML model
      |              ^~~~~
/home/charl/julich/nestml-fork-integrate_specific_odes/nestml/doc/tutorials/triplet_stdp_synapse/target/stdp_triplet_synapse_nestml__with_iaf_psc_delta_neuron_nestml.h:580:14: warning: variable ‘get_t’ set but not used [-Wunused-but-set-variable]
  580 |         auto get_t = [__t_spike](){ return __t_spike; };    // do not remove, this is in case the predefined time variable ``t`` is used in the NESTML model
      |              ^~~~~
/home/charl/julich/nestml-fork-integrate_specific_odes/nestml/doc/tutorials/triplet_stdp_synapse/target/stdp_triplet_synapse_nestml__with_iaf_psc_delta_neuron_nestml.h:451:18: warning: unused variable ‘__resolution’ [-Wunused-variable]
  451 |     const double __resolution = nest::Time::get_resolution().get_ms();  // do not remove, this is necessary for the resolution() function
      |                  ^~~~~~~~~~~~
/home/charl/julich/nestml-fork-integrate_specific_odes/nestml/doc/tutorials/triplet_stdp_synapse/target/stdp_triplet_synapse_nestml__with_iaf_psc_delta_neuron_nestml.h:453:10: warning: variable ‘get_thread’ set but not used [-Wunused-but-set-variable]
  453 |     auto get_thread = [tid]()
      |          ^~~~~~~~~~
/home/charl/julich/nestml-fork-integrate_specific_odes/nestml/doc/tutorials/triplet_stdp_synapse/target/stdp_triplet_synapse_nestml__with_iaf_psc_delta_neuron_nestml.h: In instantiation of ‘void nest::stdp_triplet_synapse_nestml__with_iaf_psc_delta_neuron_nestml<targetidentifierT>::update_internal_state_(double, double, const nest::stdp_triplet_synapse_nestml__with_iaf_psc_delta_neuron_nestmlCommonSynapseProperties&) [with targetidentifierT = nest::TargetIdentifierPtrRport]’:
/home/charl/julich/nestml-fork-integrate_specific_odes/nestml/doc/tutorials/triplet_stdp_synapse/target/stdp_triplet_synapse_nestml__with_iaf_psc_delta_neuron_nestml.h:513:9:   required from ‘bool nest::stdp_triplet_synapse_nestml__with_iaf_psc_delta_neuron_nestml<targetidentifierT>::send(nest::Event&, size_t, const nest::stdp_triplet_synapse_nestml__with_iaf_psc_delta_neuron_nestmlCommonSynapseProperties&) [with targetidentifierT = nest::TargetIdentifierPtrRport; size_t = long unsigned int]’
/home/charl/julich/nest-simulator-install/include/nest/connector_base.h:391:22:   required from ‘void nest::Connector<ConnectionT>::send_to_all(size_t, const std::vector<nest::ConnectorModel*>&, nest::Event&) [with ConnectionT = nest::stdp_triplet_synapse_nestml__with_iaf_psc_delta_neuron_nestml<nest::TargetIdentifierPtrRport>; size_t = long unsigned int]’
/home/charl/julich/nest-simulator-install/include/nest/connector_base.h:383:3:   required from here
/home/charl/julich/nestml-fork-integrate_specific_odes/nestml/doc/tutorials/triplet_stdp_synapse/target/stdp_triplet_synapse_nestml__with_iaf_psc_delta_neuron_nestml.h:799:18: warning: unused variable ‘__resolution’ [-Wunused-variable]
  799 |     const double __resolution = timestep;  // do not remove, this is necessary for the resolution() function
      |                  ^~~~~~~~~~~~
/home/charl/julich/nestml-fork-integrate_specific_odes/nestml/doc/tutorials/triplet_stdp_synapse/target/stdp_triplet_synapse_nestml__with_iaf_psc_delta_neuron_nestml.h:800:10: warning: variable ‘get_t’ set but not used [-Wunused-but-set-variable]
  800 |     auto get_t = [t_start](){ return t_start; };   // do not remove, this is in case the predefined time variable ``t`` is used in the NESTML model
      |          ^~~~~
/home/charl/julich/nestml-fork-integrate_specific_odes/nestml/doc/tutorials/triplet_stdp_synapse/target/stdp_triplet_synapse_nestml__with_iaf_psc_delta_neuron_nestml.h: In instantiation of ‘void nest::stdp_triplet_synapse_nestml__with_iaf_psc_delta_neuron_nestml<targetidentifierT>::update_internal_state_(double, double, const nest::stdp_triplet_synapse_nestml__with_iaf_psc_delta_neuron_nestmlCommonSynapseProperties&) [with targetidentifierT = nest::TargetIdentifierIndex]’:
/home/charl/julich/nestml-fork-integrate_specific_odes/nestml/doc/tutorials/triplet_stdp_synapse/target/stdp_triplet_synapse_nestml__with_iaf_psc_delta_neuron_nestml.h:513:9:   required from ‘bool nest::stdp_triplet_synapse_nestml__with_iaf_psc_delta_neuron_nestml<targetidentifierT>::send(nest::Event&, size_t, const nest::stdp_triplet_synapse_nestml__with_iaf_psc_delta_neuron_nestmlCommonSynapseProperties&) [with targetidentifierT = nest::TargetIdentifierIndex; size_t = long unsigned int]’
/home/charl/julich/nest-simulator-install/include/nest/connector_base.h:391:22:   required from ‘void nest::Connector<ConnectionT>::send_to_all(size_t, const std::vector<nest::ConnectorModel*>&, nest::Event&) [with ConnectionT = nest::stdp_triplet_synapse_nestml__with_iaf_psc_delta_neuron_nestml<nest::TargetIdentifierIndex>; size_t = long unsigned int]’
/home/charl/julich/nest-simulator-install/include/nest/connector_base.h:383:3:   required from here
/home/charl/julich/nestml-fork-integrate_specific_odes/nestml/doc/tutorials/triplet_stdp_synapse/target/stdp_triplet_synapse_nestml__with_iaf_psc_delta_neuron_nestml.h:799:18: warning: unused variable ‘__resolution’ [-Wunused-variable]
  799 |     const double __resolution = timestep;  // do not remove, this is necessary for the resolution() function
      |                  ^~~~~~~~~~~~
/home/charl/julich/nestml-fork-integrate_specific_odes/nestml/doc/tutorials/triplet_stdp_synapse/target/stdp_triplet_synapse_nestml__with_iaf_psc_delta_neuron_nestml.h:800:10: warning: variable ‘get_t’ set but not used [-Wunused-but-set-variable]
  800 |     auto get_t = [t_start](){ return t_start; };   // do not remove, this is in case the predefined time variable ``t`` is used in the NESTML model
      |          ^~~~~
[100%] Linking CXX shared module nestml_3c70a8ed53be4c46854ae5b0aa248ab9_module.so
[100%] Built target nestml_3c70a8ed53be4c46854ae5b0aa248ab9_module_module
[100%] Built target nestml_3c70a8ed53be4c46854ae5b0aa248ab9_module_module
Install the project...
-- Install configuration: ""
-- Installing: /tmp/nestml_target_yocmq5xi/nestml_3c70a8ed53be4c46854ae5b0aa248ab9_module.so
/home/charl/julich/nestml-fork-integrate_specific_odes/nestml/doc/tutorials/triplet_stdp_synapse/target/stdp_tripletb1d27d2bd4604585bbb6bb0e9e18dc93_synapse_nestml__with_iaf_psc_deltab1d27d2bd4604585bbb6bb0e9e18dc93_neuron_nestml.h: In instantiation of ‘void nest::stdp_tripletb1d27d2bd4604585bbb6bb0e9e18dc93_synapse_nestml__with_iaf_psc_deltab1d27d2bd4604585bbb6bb0e9e18dc93_neuron_nestml<targetidentifierT>::send(nest::Event&, size_t, const nest::stdp_tripletb1d27d2bd4604585bbb6bb0e9e18dc93_synapse_nestml__with_iaf_psc_deltab1d27d2bd4604585bbb6bb0e9e18dc93_neuron_nestmlCommonSynapseProperties&) [with targetidentifierT = nest::TargetIdentifierPtrRport; size_t = long unsigned int]’:
/home/charl/julich/nest-simulator-install/include/nest/connector_base.h:381:22:   required from ‘void nest::Connector<ConnectionT>::send_to_all(size_t, const std::vector<nest::ConnectorModel*>&, nest::Event&) [with ConnectionT = nest::stdp_tripletb1d27d2bd4604585bbb6bb0e9e18dc93_synapse_nestml__with_iaf_psc_deltab1d27d2bd4604585bbb6bb0e9e18dc93_neuron_nestml<nest::TargetIdentifierPtrRport>; size_t = long unsigned int]’
/home/charl/julich/nest-simulator-install/include/nest/connector_base.h:373:3:   required from here
/home/charl/julich/nestml-fork-integrate_specific_odes/nestml/doc/tutorials/triplet_stdp_synapse/target/stdp_tripletb1d27d2bd4604585bbb6bb0e9e18dc93_synapse_nestml__with_iaf_psc_deltab1d27d2bd4604585bbb6bb0e9e18dc93_neuron_nestml.h:517:14: warning: variable ‘get_t’ set but not used [-Wunused-but-set-variable]
  517 |         auto get_t = [_tr_t](){ return _tr_t; };   // do not remove, this is in case the predefined time variable ``t`` is used in the NESTML model
      |              ^~~~~
/home/charl/julich/nestml-fork-integrate_specific_odes/nestml/doc/tutorials/triplet_stdp_synapse/target/stdp_tripletb1d27d2bd4604585bbb6bb0e9e18dc93_synapse_nestml__with_iaf_psc_deltab1d27d2bd4604585bbb6bb0e9e18dc93_neuron_nestml.h:542:14: warning: variable ‘get_t’ set but not used [-Wunused-but-set-variable]
  542 |         auto get_t = [__t_spike](){ return __t_spike; };    // do not remove, this is in case the predefined time variable ``t`` is used in the NESTML model
      |              ^~~~~
/home/charl/julich/nestml-fork-integrate_specific_odes/nestml/doc/tutorials/triplet_stdp_synapse/target/stdp_tripletb1d27d2bd4604585bbb6bb0e9e18dc93_synapse_nestml__with_iaf_psc_deltab1d27d2bd4604585bbb6bb0e9e18dc93_neuron_nestml.h:579:14: warning: variable ‘get_t’ set but not used [-Wunused-but-set-variable]
  579 |         auto get_t = [__t_spike](){ return __t_spike; };    // do not remove, this is in case the predefined time variable ``t`` is used in the NESTML model
      |              ^~~~~
/home/charl/julich/nestml-fork-integrate_specific_odes/nestml/doc/tutorials/triplet_stdp_synapse/target/stdp_tripletb1d27d2bd4604585bbb6bb0e9e18dc93_synapse_nestml__with_iaf_psc_deltab1d27d2bd4604585bbb6bb0e9e18dc93_neuron_nestml.h:450:18: warning: unused variable ‘__resolution’ [-Wunused-variable]
  450 |     const double __resolution = nest::Time::get_resolution().get_ms();  // do not remove, this is necessary for the resolution() function
      |                  ^~~~~~~~~~~~
/home/charl/julich/nestml-fork-integrate_specific_odes/nestml/doc/tutorials/triplet_stdp_synapse/target/stdp_tripletb1d27d2bd4604585bbb6bb0e9e18dc93_synapse_nestml__with_iaf_psc_deltab1d27d2bd4604585bbb6bb0e9e18dc93_neuron_nestml.h:452:10: warning: variable ‘get_thread’ set but not used [-Wunused-but-set-variable]
  452 |     auto get_thread = [tid]()
      |          ^~~~~~~~~~
/home/charl/julich/nestml-fork-integrate_specific_odes/nestml/doc/tutorials/triplet_stdp_synapse/target/stdp_tripletb1d27d2bd4604585bbb6bb0e9e18dc93_synapse_nestml__with_iaf_psc_deltab1d27d2bd4604585bbb6bb0e9e18dc93_neuron_nestml.h: In instantiation of ‘void nest::stdp_tripletb1d27d2bd4604585bbb6bb0e9e18dc93_synapse_nestml__with_iaf_psc_deltab1d27d2bd4604585bbb6bb0e9e18dc93_neuron_nestml<targetidentifierT>::send(nest::Event&, size_t, const nest::stdp_tripletb1d27d2bd4604585bbb6bb0e9e18dc93_synapse_nestml__with_iaf_psc_deltab1d27d2bd4604585bbb6bb0e9e18dc93_neuron_nestmlCommonSynapseProperties&) [with targetidentifierT = nest::TargetIdentifierIndex; size_t = long unsigned int]’:
/home/charl/julich/nest-simulator-install/include/nest/connector_base.h:381:22:   required from ‘void nest::Connector<ConnectionT>::send_to_all(size_t, const std::vector<nest::ConnectorModel*>&, nest::Event&) [with ConnectionT = nest::stdp_tripletb1d27d2bd4604585bbb6bb0e9e18dc93_synapse_nestml__with_iaf_psc_deltab1d27d2bd4604585bbb6bb0e9e18dc93_neuron_nestml<nest::TargetIdentifierIndex>; size_t = long unsigned int]’
/home/charl/julich/nest-simulator-install/include/nest/connector_base.h:373:3:   required from here
/home/charl/julich/nestml-fork-integrate_specific_odes/nestml/doc/tutorials/triplet_stdp_synapse/target/stdp_tripletb1d27d2bd4604585bbb6bb0e9e18dc93_synapse_nestml__with_iaf_psc_deltab1d27d2bd4604585bbb6bb0e9e18dc93_neuron_nestml.h:517:14: warning: variable ‘get_t’ set but not used [-Wunused-but-set-variable]
  517 |         auto get_t = [_tr_t](){ return _tr_t; };   // do not remove, this is in case the predefined time variable ``t`` is used in the NESTML model
      |              ^~~~~
/home/charl/julich/nestml-fork-integrate_specific_odes/nestml/doc/tutorials/triplet_stdp_synapse/target/stdp_tripletb1d27d2bd4604585bbb6bb0e9e18dc93_synapse_nestml__with_iaf_psc_deltab1d27d2bd4604585bbb6bb0e9e18dc93_neuron_nestml.h:542:14: warning: variable ‘get_t’ set but not used [-Wunused-but-set-variable]
  542 |         auto get_t = [__t_spike](){ return __t_spike; };    // do not remove, this is in case the predefined time variable ``t`` is used in the NESTML model
      |              ^~~~~
/home/charl/julich/nestml-fork-integrate_specific_odes/nestml/doc/tutorials/triplet_stdp_synapse/target/stdp_tripletb1d27d2bd4604585bbb6bb0e9e18dc93_synapse_nestml__with_iaf_psc_deltab1d27d2bd4604585bbb6bb0e9e18dc93_neuron_nestml.h:579:14: warning: variable ‘get_t’ set but not used [-Wunused-but-set-variable]
  579 |         auto get_t = [__t_spike](){ return __t_spike; };    // do not remove, this is in case the predefined time variable ``t`` is used in the NESTML model
      |              ^~~~~
/home/charl/julich/nestml-fork-integrate_specific_odes/nestml/doc/tutorials/triplet_stdp_synapse/target/stdp_tripletb1d27d2bd4604585bbb6bb0e9e18dc93_synapse_nestml__with_iaf_psc_deltab1d27d2bd4604585bbb6bb0e9e18dc93_neuron_nestml.h:450:18: warning: unused variable ‘__resolution’ [-Wunused-variable]
  450 |     const double __resolution = nest::Time::get_resolution().get_ms();  // do not remove, this is necessary for the resolution() function
      |                  ^~~~~~~~~~~~
/home/charl/julich/nestml-fork-integrate_specific_odes/nestml/doc/tutorials/triplet_stdp_synapse/target/stdp_tripletb1d27d2bd4604585bbb6bb0e9e18dc93_synapse_nestml__with_iaf_psc_deltab1d27d2bd4604585bbb6bb0e9e18dc93_neuron_nestml.h:452:10: warning: variable ‘get_thread’ set but not used [-Wunused-but-set-variable]
  452 |     auto get_thread = [tid]()
      |          ^~~~~~~~~~
/home/charl/julich/nestml-fork-integrate_specific_odes/nestml/doc/tutorials/triplet_stdp_synapse/target/stdp_tripletb1d27d2bd4604585bbb6bb0e9e18dc93_synapse_nestml__with_iaf_psc_deltab1d27d2bd4604585bbb6bb0e9e18dc93_neuron_nestml.h: In instantiation of ‘void nest::stdp_tripletb1d27d2bd4604585bbb6bb0e9e18dc93_synapse_nestml__with_iaf_psc_deltab1d27d2bd4604585bbb6bb0e9e18dc93_neuron_nestml<targetidentifierT>::update_internal_state_(double, double, const nest::stdp_tripletb1d27d2bd4604585bbb6bb0e9e18dc93_synapse_nestml__with_iaf_psc_deltab1d27d2bd4604585bbb6bb0e9e18dc93_neuron_nestmlCommonSynapseProperties&) [with targetidentifierT = nest::TargetIdentifierPtrRport]’:
/home/charl/julich/nestml-fork-integrate_specific_odes/nestml/doc/tutorials/triplet_stdp_synapse/target/stdp_tripletb1d27d2bd4604585bbb6bb0e9e18dc93_synapse_nestml__with_iaf_psc_deltab1d27d2bd4604585bbb6bb0e9e18dc93_neuron_nestml.h:512:9:   required from ‘void nest::stdp_tripletb1d27d2bd4604585bbb6bb0e9e18dc93_synapse_nestml__with_iaf_psc_deltab1d27d2bd4604585bbb6bb0e9e18dc93_neuron_nestml<targetidentifierT>::send(nest::Event&, size_t, const nest::stdp_tripletb1d27d2bd4604585bbb6bb0e9e18dc93_synapse_nestml__with_iaf_psc_deltab1d27d2bd4604585bbb6bb0e9e18dc93_neuron_nestmlCommonSynapseProperties&) [with targetidentifierT = nest::TargetIdentifierPtrRport; size_t = long unsigned int]’
/home/charl/julich/nest-simulator-install/include/nest/connector_base.h:381:22:   required from ‘void nest::Connector<ConnectionT>::send_to_all(size_t, const std::vector<nest::ConnectorModel*>&, nest::Event&) [with ConnectionT = nest::stdp_tripletb1d27d2bd4604585bbb6bb0e9e18dc93_synapse_nestml__with_iaf_psc_deltab1d27d2bd4604585bbb6bb0e9e18dc93_neuron_nestml<nest::TargetIdentifierPtrRport>; size_t = long unsigned int]’
/home/charl/julich/nest-simulator-install/include/nest/connector_base.h:373:3:   required from here
/home/charl/julich/nestml-fork-integrate_specific_odes/nestml/doc/tutorials/triplet_stdp_synapse/target/stdp_tripletb1d27d2bd4604585bbb6bb0e9e18dc93_synapse_nestml__with_iaf_psc_deltab1d27d2bd4604585bbb6bb0e9e18dc93_neuron_nestml.h:792:18: warning: unused variable ‘__resolution’ [-Wunused-variable]
  792 |     const double __resolution = timestep;  // do not remove, this is necessary for the resolution() function
      |                  ^~~~~~~~~~~~
/home/charl/julich/nestml-fork-integrate_specific_odes/nestml/doc/tutorials/triplet_stdp_synapse/target/stdp_tripletb1d27d2bd4604585bbb6bb0e9e18dc93_synapse_nestml__with_iaf_psc_deltab1d27d2bd4604585bbb6bb0e9e18dc93_neuron_nestml.h:793:10: warning: variable ‘get_t’ set but not used [-Wunused-but-set-variable]
  793 |     auto get_t = [t_start](){ return t_start; };   // do not remove, this is in case the predefined time variable ``t`` is used in the NESTML model
      |          ^~~~~
/home/charl/julich/nestml-fork-integrate_specific_odes/nestml/doc/tutorials/triplet_stdp_synapse/target/stdp_tripletb1d27d2bd4604585bbb6bb0e9e18dc93_synapse_nestml__with_iaf_psc_deltab1d27d2bd4604585bbb6bb0e9e18dc93_neuron_nestml.h: In instantiation of ‘void nest::stdp_tripletb1d27d2bd4604585bbb6bb0e9e18dc93_synapse_nestml__with_iaf_psc_deltab1d27d2bd4604585bbb6bb0e9e18dc93_neuron_nestml<targetidentifierT>::update_internal_state_(double, double, const nest::stdp_tripletb1d27d2bd4604585bbb6bb0e9e18dc93_synapse_nestml__with_iaf_psc_deltab1d27d2bd4604585bbb6bb0e9e18dc93_neuron_nestmlCommonSynapseProperties&) [with targetidentifierT = nest::TargetIdentifierIndex]’:
/home/charl/julich/nestml-fork-integrate_specific_odes/nestml/doc/tutorials/triplet_stdp_synapse/target/stdp_tripletb1d27d2bd4604585bbb6bb0e9e18dc93_synapse_nestml__with_iaf_psc_deltab1d27d2bd4604585bbb6bb0e9e18dc93_neuron_nestml.h:512:9:   required from ‘void nest::stdp_tripletb1d27d2bd4604585bbb6bb0e9e18dc93_synapse_nestml__with_iaf_psc_deltab1d27d2bd4604585bbb6bb0e9e18dc93_neuron_nestml<targetidentifierT>::send(nest::Event&, size_t, const nest::stdp_tripletb1d27d2bd4604585bbb6bb0e9e18dc93_synapse_nestml__with_iaf_psc_deltab1d27d2bd4604585bbb6bb0e9e18dc93_neuron_nestmlCommonSynapseProperties&) [with targetidentifierT = nest::TargetIdentifierIndex; size_t = long unsigned int]’
/home/charl/julich/nest-simulator-install/include/nest/connector_base.h:381:22:   required from ‘void nest::Connector<ConnectionT>::send_to_all(size_t, const std::vector<nest::ConnectorModel*>&, nest::Event&) [with ConnectionT = nest::stdp_tripletb1d27d2bd4604585bbb6bb0e9e18dc93_synapse_nestml__with_iaf_psc_deltab1d27d2bd4604585bbb6bb0e9e18dc93_neuron_nestml<nest::TargetIdentifierIndex>; size_t = long unsigned int]’
/home/charl/julich/nest-simulator-install/include/nest/connector_base.h:373:3:   required from here
/home/charl/julich/nestml-fork-integrate_specific_odes/nestml/doc/tutorials/triplet_stdp_synapse/target/stdp_tripletb1d27d2bd4604585bbb6bb0e9e18dc93_synapse_nestml__with_iaf_psc_deltab1d27d2bd4604585bbb6bb0e9e18dc93_neuron_nestml.h:792:18: warning: unused variable ‘__resolution’ [-Wunused-variable]
  792 |     const double __resolution = timestep;  // do not remove, this is necessary for the resolution() function
      |                  ^~~~~~~~~~~~
/home/charl/julich/nestml-fork-integrate_specific_odes/nestml/doc/tutorials/triplet_stdp_synapse/target/stdp_tripletb1d27d2bd4604585bbb6bb0e9e18dc93_synapse_nestml__with_iaf_psc_deltab1d27d2bd4604585bbb6bb0e9e18dc93_neuron_nestml.h:793:10: warning: variable ‘get_t’ set but not used [-Wunused-but-set-variable]
  793 |     auto get_t = [t_start](){ return t_start; };   // do not remove, this is in case the predefined time variable ``t`` is used in the NESTML model
      |          ^~~~~
[100%] Linking CXX shared module nestml_b1d27d2bd4604585bbb6bb0e9e18dc93_module.so
[100%] Built target nestml_b1d27d2bd4604585bbb6bb0e9e18dc93_module_module
[100%] Built target nestml_b1d27d2bd4604585bbb6bb0e9e18dc93_module_module
Install the project...
-- Install configuration: ""
-- Installing: /home/charl/julich/nest-simulator-install/lib/nest/nestml_b1d27d2bd4604585bbb6bb0e9e18dc93_module.so

Oct 19 05:01:52 Install [Info]:
    loaded module nestml_b1d27d2bd4604585bbb6bb0e9e18dc93_module

\(\textit{Nearest spike Interation}\) - Each postsynaptic spike interacts with only the last spike. Hence no accumulation of the trace variables occurs. The variables saturate at 1. This is achieved by updating the variables to the value of 1 instead of updating by at step of 1. In this way, the synapse forgets all other previous spikes and keeps only the memory of the last one.

959f5251a00a49cba1e573297196d77c

[4]:
nestml_triplet_stdp_nn_model = '''
model stdp_triplet_nn_synapse:

    state:
        w nS = 1 nS

        tr_r1 real = 0.
        tr_r2 real = 0.
        tr_o1 real = 0.
        tr_o2 real = 0.

    parameters:
        d ms = 1 ms  @nest::delay

        tau_plus ms = 16.8 ms  # time constant for tr_r1
        tau_x ms = 101 ms  # time constant for tr_r2
        tau_minus ms = 33.7 ms  # time constant for tr_o1
        tau_y ms = 125 ms  # time constant for tr_o2

        A2_plus real = 7.5e-10
        A3_plus real = 9.3e-3
        A2_minus real = 7e-3
        A3_minus real = 2.3e-4

        Wmax nS = 100 nS
        Wmin nS = 0 nS

    equations:
        tr_r1' = -tr_r1 / tau_plus
        tr_r2' = -tr_r2 / tau_x
        tr_o1' = -tr_o1 / tau_minus
        tr_o2' = -tr_o2 / tau_y

    input:
        pre_spikes <- spike
        post_spikes <- spike

    output:
        spike

    onReceive(post_spikes):
        # increment post trace values
        tr_o1 = 1
        tr_o2 = 1

        # potentiate synapse
        #w_ nS = Wmax * ( w / Wmax + tr_r1 * ( A2_plus + A3_plus * tr_o2 ) )
        w_ nS = w + tr_r1 * ( A2_plus + A3_plus * tr_o2 )
        w = min(Wmax, w_)

    onReceive(pre_spikes):
        # increment pre trace values
        tr_r1 = 1
        tr_r2 = 1

        # depress synapse
        #w_ nS = Wmax * ( w / Wmax  -  tr_o1 * ( A2_minus + A3_minus * tr_r2 ) )
        w_ nS = w  -  tr_o1 * ( A2_minus + A3_minus * tr_r2 )
        w = max(Wmin, w_)

        # deliver spike to postsynaptic partner
        emit_spike(w, d)

    update:
        integrate_odes()
'''
[5]:
# Generate code for nearest spike interaction model
module_name_nn, neuron_model_name_nn, synapse_model_name_nn = \
    NESTCodeGeneratorUtils.generate_code_for("../../../models/neurons/iaf_psc_delta_neuron.nestml",
                                             nestml_triplet_stdp_nn_model,
                                             post_ports=["post_spikes"])

              -- N E S T --
  Copyright (C) 2004 The NEST Initiative

 Version: 3.6.0-post0.dev0
 Built: Mar 26 2024 08:52:51

 This program is provided AS IS and comes with
 NO WARRANTY. See the file LICENSE for details.

 Problems or suggestions?
   Visit https://www.nest-simulator.org

 Type 'nest.help()' to find out more about NEST.

[17,stdp_triplet_nn_synapse_nestml, WARNING, [13:8;13:28]]: Variable 'd' has the same name as a physical unit!
[20,stdp_triplet_nn_synapse_nestml, WARNING, [48:16;48:16]]: Implicit casting from (compatible) type 'nS' to 'real'.
[23,stdp_triplet_nn_synapse_nestml, WARNING, [58:16;58:16]]: Implicit casting from (compatible) type 'nS' to 'real'.
[26,stdp_triplet_nn_synapse_nestml, WARNING, [13:8;13:28]]: Variable 'd' has the same name as a physical unit!
[35,stdp_triplet_nn_synapse_nestml, WARNING, [13:8;13:28]]: Variable 'd' has the same name as a physical unit!
[38,stdp_triplet_nn_synapse_nestml, WARNING, [48:16;48:16]]: Implicit casting from (compatible) type 'nS' to 'real'.
[41,stdp_triplet_nn_synapse_nestml, WARNING, [58:16;58:16]]: Implicit casting from (compatible) type 'nS' to 'real'.
[64,stdp_triplet_nn_synapse_nestml__with_iaf_psc_delta_neuron_nestml, WARNING, [13:8;13:28]]: Variable 'd' has the same name as a physical unit!
WARNING:Not preserving expression for variable "V_m" as it is solved by propagator solver
WARNING:Not preserving expression for variable "V_m" as it is solved by propagator solver
WARNING:Not preserving expression for variable "tr_o1__for_stdp_triplet_nn_synapse_nestml" as it is solved by propagator solver
WARNING:Not preserving expression for variable "tr_o2__for_stdp_triplet_nn_synapse_nestml" as it is solved by propagator solver
WARNING:Not preserving expression for variable "tr_r1" as it is solved by propagator solver
WARNING:Not preserving expression for variable "tr_r2" as it is solved by propagator solver
[77,stdp_triplet_nn_synapse_nestml__with_iaf_psc_delta_neuron_nestml, WARNING, [13:8;13:28]]: Variable 'd' has the same name as a physical unit!
[81,stdp_triplet_nn_synapse_nestml__with_iaf_psc_delta_neuron_nestml, WARNING, [13:8;13:28]]: Variable 'd' has the same name as a physical unit!
CMake Warning (dev) at CMakeLists.txt:95 (project):
  cmake_minimum_required() should be called prior to this top-level project()
  call.  Please see the cmake-commands(7) manual for usage documentation of
  both commands.
This warning is for project developers.  Use -Wno-dev to suppress it.

-- The CXX compiler identification is GNU 12.3.0
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done

-------------------------------------------------------
nestml_4940100b28f446be95429cd7b36f439e_module Configuration Summary
-------------------------------------------------------

C++ compiler         : /usr/bin/c++
Build static libs    : OFF
C++ compiler flags   :
NEST compiler flags  :  -std=c++17 -Wall -fopenmp -O2 -fdiagnostics-color=auto
NEST include dirs    :  -I/home/charl/julich/nest-simulator-install/include/nest -I/usr/include -I/usr/include -I/usr/include
NEST libraries flags : -L/home/charl/julich/nest-simulator-install/lib/nest -lnest -lsli /usr/lib/x86_64-linux-gnu/libltdl.so  /usr/lib/x86_64-linux-gnu/libgsl.so /usr/lib/x86_64-linux-gnu/libgslcblas.so    /usr/lib/gcc/x86_64-linux-gnu/12/libgomp.so /usr/lib/x86_64-linux-gnu/libpthread.a

-------------------------------------------------------

You can now build and install 'nestml_4940100b28f446be95429cd7b36f439e_module' using
  make
  make install

The library file libnestml_4940100b28f446be95429cd7b36f439e_module.so will be installed to
  /tmp/nestml_target_tz6lmulj
The module can be loaded into NEST using
  (nestml_4940100b28f446be95429cd7b36f439e_module) Install       (in SLI)
  nest.Install(nestml_4940100b28f446be95429cd7b36f439e_module)   (in PyNEST)

CMake Warning (dev) in CMakeLists.txt:
  No cmake_minimum_required command is present.  A line of code such as

    cmake_minimum_required(VERSION 3.26)

  should be added at the top of the file.  The version specified may be lower
  if you wish to support older CMake versions for this project.  For more
  information run "cmake --help-policy CMP0000".
This warning is for project developers.  Use -Wno-dev to suppress it.

-- Configuring done (0.5s)
-- Generating done (0.0s)
-- Build files have been written to: /home/charl/julich/nestml-fork-integrate_specific_odes/nestml/doc/tutorials/triplet_stdp_synapse/target
[ 25%] Building CXX object CMakeFiles/nestml_4940100b28f446be95429cd7b36f439e_module_module.dir/nestml_4940100b28f446be95429cd7b36f439e_module.o
[ 50%] Building CXX object CMakeFiles/nestml_4940100b28f446be95429cd7b36f439e_module_module.dir/iaf_psc_delta_neuron_nestml.o
[ 75%] Building CXX object CMakeFiles/nestml_4940100b28f446be95429cd7b36f439e_module_module.dir/iaf_psc_delta_neuron_nestml__with_stdp_triplet_nn_synapse_nestml.o
/home/charl/julich/nestml-fork-integrate_specific_odes/nestml/doc/tutorials/triplet_stdp_synapse/target/iaf_psc_delta_neuron_nestml.cpp: In member function ‘void iaf_psc_delta_neuron_nestml::init_state_internal_()’:
/home/charl/julich/nestml-fork-integrate_specific_odes/nestml/doc/tutorials/triplet_stdp_synapse/target/iaf_psc_delta_neuron_nestml.cpp:173:16: warning: unused variable ‘__resolution’ [-Wunused-variable]
  173 |   const double __resolution = nest::Time::get_resolution().get_ms();  // do not remove, this is necessary for the resolution() function
      |                ^~~~~~~~~~~~
/home/charl/julich/nestml-fork-integrate_specific_odes/nestml/doc/tutorials/triplet_stdp_synapse/target/iaf_psc_delta_neuron_nestml.cpp: In member function ‘virtual void iaf_psc_delta_neuron_nestml::update(const nest::Time&, long int, long int)’:
/home/charl/julich/nestml-fork-integrate_specific_odes/nestml/doc/tutorials/triplet_stdp_synapse/target/iaf_psc_delta_neuron_nestml.cpp:266:24: warning: comparison of integer expressions of different signedness: ‘long int’ and ‘const size_t’ {aka ‘const long unsigned int’} [-Wsign-compare]
  266 |     for (long i = 0; i < NUM_SPIKE_RECEPTORS; ++i)
      |                      ~~^~~~~~~~~~~~~~~~~~~~~
/home/charl/julich/nestml-fork-integrate_specific_odes/nestml/doc/tutorials/triplet_stdp_synapse/target/iaf_psc_delta_neuron_nestml.cpp:261:10: warning: variable ‘get_t’ set but not used [-Wunused-but-set-variable]
  261 |     auto get_t = [origin, lag](){ return nest::Time( nest::Time::step( origin.get_steps() + lag + 1) ).get_ms(); };
      |          ^~~~~
/home/charl/julich/nestml-fork-integrate_specific_odes/nestml/doc/tutorials/triplet_stdp_synapse/target/iaf_psc_delta_neuron_nestml__with_stdp_triplet_nn_synapse_nestml.cpp: In member function ‘void iaf_psc_delta_neuron_nestml__with_stdp_triplet_nn_synapse_nestml::init_state_internal_()’:
/home/charl/julich/nestml-fork-integrate_specific_odes/nestml/doc/tutorials/triplet_stdp_synapse/target/iaf_psc_delta_neuron_nestml__with_stdp_triplet_nn_synapse_nestml.cpp:188:16: warning: unused variable ‘__resolution’ [-Wunused-variable]
  188 |   const double __resolution = nest::Time::get_resolution().get_ms();  // do not remove, this is necessary for the resolution() function
      |                ^~~~~~~~~~~~
/home/charl/julich/nestml-fork-integrate_specific_odes/nestml/doc/tutorials/triplet_stdp_synapse/target/iaf_psc_delta_neuron_nestml__with_stdp_triplet_nn_synapse_nestml.cpp: In member function ‘virtual void iaf_psc_delta_neuron_nestml__with_stdp_triplet_nn_synapse_nestml::update(const nest::Time&, long int, long int)’:
/home/charl/julich/nestml-fork-integrate_specific_odes/nestml/doc/tutorials/triplet_stdp_synapse/target/iaf_psc_delta_neuron_nestml__with_stdp_triplet_nn_synapse_nestml.cpp:297:24: warning: comparison of integer expressions of different signedness: ‘long int’ and ‘const size_t’ {aka ‘const long unsigned int’} [-Wsign-compare]
  297 |     for (long i = 0; i < NUM_SPIKE_RECEPTORS; ++i)
      |                      ~~^~~~~~~~~~~~~~~~~~~~~
/home/charl/julich/nestml-fork-integrate_specific_odes/nestml/doc/tutorials/triplet_stdp_synapse/target/iaf_psc_delta_neuron_nestml__with_stdp_triplet_nn_synapse_nestml.cpp:292:10: warning: variable ‘get_t’ set but not used [-Wunused-but-set-variable]
  292 |     auto get_t = [origin, lag](){ return nest::Time( nest::Time::step( origin.get_steps() + lag + 1) ).get_ms(); };
      |          ^~~~~
In file included from /home/charl/julich/nestml-fork-integrate_specific_odes/nestml/doc/tutorials/triplet_stdp_synapse/target/nestml_4940100b28f446be95429cd7b36f439e_module.cpp:36:
/home/charl/julich/nestml-fork-integrate_specific_odes/nestml/doc/tutorials/triplet_stdp_synapse/target/stdp_triplet_nn_synapse_nestml__with_iaf_psc_delta_neuron_nestml.h: In instantiation of ‘nest::stdp_triplet_nn_synapse_nestml__with_iaf_psc_delta_neuron_nestml<targetidentifierT>::stdp_triplet_nn_synapse_nestml__with_iaf_psc_delta_neuron_nestml() [with targetidentifierT = nest::TargetIdentifierPtrRport]’:
/home/charl/julich/nest-simulator-install/include/nest/connector_model.h:164:25:   required from ‘nest::GenericConnectorModel<ConnectionT>::GenericConnectorModel(std::string) [with ConnectionT = nest::stdp_triplet_nn_synapse_nestml__with_iaf_psc_delta_neuron_nestml<nest::TargetIdentifierPtrRport>; std::string = std::__cxx11::basic_string<char>]’
/home/charl/julich/nest-simulator-install/include/nest/model_manager_impl.h:62:5:   required from ‘void nest::ModelManager::register_connection_model(const std::string&) [with ConnectionT = nest::stdp_triplet_nn_synapse_nestml__with_iaf_psc_delta_neuron_nestml; std::string = std::__cxx11::basic_string<char>]’
/home/charl/julich/nest-simulator-install/include/nest/nest_impl.h:37:70:   required from ‘void nest::register_connection_model(const std::string&) [with ConnectorModelT = stdp_triplet_nn_synapse_nestml__with_iaf_psc_delta_neuron_nestml; std::string = std::__cxx11::basic_string<char>]’
/home/charl/julich/nestml-fork-integrate_specific_odes/nestml/doc/tutorials/triplet_stdp_synapse/target/stdp_triplet_nn_synapse_nestml__with_iaf_psc_delta_neuron_nestml.h:603:102:   required from here
/home/charl/julich/nestml-fork-integrate_specific_odes/nestml/doc/tutorials/triplet_stdp_synapse/target/stdp_triplet_nn_synapse_nestml__with_iaf_psc_delta_neuron_nestml.h:731:16: warning: unused variable ‘__resolution’ [-Wunused-variable]
  731 |   const double __resolution = nest::Time::get_resolution().get_ms();  // do not remove, this is necessary for the resolution() function
      |                ^~~~~~~~~~~~
/home/charl/julich/nestml-fork-integrate_specific_odes/nestml/doc/tutorials/triplet_stdp_synapse/target/stdp_triplet_nn_synapse_nestml__with_iaf_psc_delta_neuron_nestml.h: In instantiation of ‘void nest::stdp_triplet_nn_synapse_nestml__with_iaf_psc_delta_neuron_nestml<targetidentifierT>::recompute_internal_variables() [with targetidentifierT = nest::TargetIdentifierPtrRport]’:
/home/charl/julich/nestml-fork-integrate_specific_odes/nestml/doc/tutorials/triplet_stdp_synapse/target/stdp_triplet_nn_synapse_nestml__with_iaf_psc_delta_neuron_nestml.h:745:3:   required from ‘nest::stdp_triplet_nn_synapse_nestml__with_iaf_psc_delta_neuron_nestml<targetidentifierT>::stdp_triplet_nn_synapse_nestml__with_iaf_psc_delta_neuron_nestml() [with targetidentifierT = nest::TargetIdentifierPtrRport]’
/home/charl/julich/nest-simulator-install/include/nest/connector_model.h:164:25:   required from ‘nest::GenericConnectorModel<ConnectionT>::GenericConnectorModel(std::string) [with ConnectionT = nest::stdp_triplet_nn_synapse_nestml__with_iaf_psc_delta_neuron_nestml<nest::TargetIdentifierPtrRport>; std::string = std::__cxx11::basic_string<char>]’
/home/charl/julich/nest-simulator-install/include/nest/model_manager_impl.h:62:5:   required from ‘void nest::ModelManager::register_connection_model(const std::string&) [with ConnectionT = nest::stdp_triplet_nn_synapse_nestml__with_iaf_psc_delta_neuron_nestml; std::string = std::__cxx11::basic_string<char>]’
/home/charl/julich/nest-simulator-install/include/nest/nest_impl.h:37:70:   required from ‘void nest::register_connection_model(const std::string&) [with ConnectorModelT = stdp_triplet_nn_synapse_nestml__with_iaf_psc_delta_neuron_nestml; std::string = std::__cxx11::basic_string<char>]’
/home/charl/julich/nestml-fork-integrate_specific_odes/nestml/doc/tutorials/triplet_stdp_synapse/target/stdp_triplet_nn_synapse_nestml__with_iaf_psc_delta_neuron_nestml.h:603:102:   required from here
/home/charl/julich/nestml-fork-integrate_specific_odes/nestml/doc/tutorials/triplet_stdp_synapse/target/stdp_triplet_nn_synapse_nestml__with_iaf_psc_delta_neuron_nestml.h:718:16: warning: unused variable ‘__resolution’ [-Wunused-variable]
  718 |   const double __resolution = nest::Time::get_resolution().get_ms();  // do not remove, this is necessary for the resolution() function
      |                ^~~~~~~~~~~~
/home/charl/julich/nestml-fork-integrate_specific_odes/nestml/doc/tutorials/triplet_stdp_synapse/target/stdp_triplet_nn_synapse_nestml__with_iaf_psc_delta_neuron_nestml.h: In instantiation of ‘nest::stdp_triplet_nn_synapse_nestml__with_iaf_psc_delta_neuron_nestml<targetidentifierT>::stdp_triplet_nn_synapse_nestml__with_iaf_psc_delta_neuron_nestml() [with targetidentifierT = nest::TargetIdentifierIndex]’:
/home/charl/julich/nest-simulator-install/include/nest/connector_model.h:164:25:   required from ‘nest::GenericConnectorModel<ConnectionT>::GenericConnectorModel(std::string) [with ConnectionT = nest::stdp_triplet_nn_synapse_nestml__with_iaf_psc_delta_neuron_nestml<nest::TargetIdentifierIndex>; std::string = std::__cxx11::basic_string<char>]’
/home/charl/julich/nest-simulator-install/include/nest/model_manager_impl.h:103:34:   required from ‘void nest::ModelManager::register_specific_connection_model_(const std::string&) [with CompleteConnecionT = nest::stdp_triplet_nn_synapse_nestml__with_iaf_psc_delta_neuron_nestml<nest::TargetIdentifierIndex>; std::string = std::__cxx11::basic_string<char>]’
/home/charl/julich/nest-simulator-install/include/nest/model_manager_impl.h:67:80:   required from ‘void nest::ModelManager::register_connection_model(const std::string&) [with ConnectionT = nest::stdp_triplet_nn_synapse_nestml__with_iaf_psc_delta_neuron_nestml; std::string = std::__cxx11::basic_string<char>]’
/home/charl/julich/nest-simulator-install/include/nest/nest_impl.h:37:70:   required from ‘void nest::register_connection_model(const std::string&) [with ConnectorModelT = stdp_triplet_nn_synapse_nestml__with_iaf_psc_delta_neuron_nestml; std::string = std::__cxx11::basic_string<char>]’
/home/charl/julich/nestml-fork-integrate_specific_odes/nestml/doc/tutorials/triplet_stdp_synapse/target/stdp_triplet_nn_synapse_nestml__with_iaf_psc_delta_neuron_nestml.h:603:102:   required from here
/home/charl/julich/nestml-fork-integrate_specific_odes/nestml/doc/tutorials/triplet_stdp_synapse/target/stdp_triplet_nn_synapse_nestml__with_iaf_psc_delta_neuron_nestml.h:731:16: warning: unused variable ‘__resolution’ [-Wunused-variable]
  731 |   const double __resolution = nest::Time::get_resolution().get_ms();  // do not remove, this is necessary for the resolution() function
      |                ^~~~~~~~~~~~
/home/charl/julich/nestml-fork-integrate_specific_odes/nestml/doc/tutorials/triplet_stdp_synapse/target/stdp_triplet_nn_synapse_nestml__with_iaf_psc_delta_neuron_nestml.h: In instantiation of ‘void nest::stdp_triplet_nn_synapse_nestml__with_iaf_psc_delta_neuron_nestml<targetidentifierT>::recompute_internal_variables() [with targetidentifierT = nest::TargetIdentifierIndex]’:
/home/charl/julich/nestml-fork-integrate_specific_odes/nestml/doc/tutorials/triplet_stdp_synapse/target/stdp_triplet_nn_synapse_nestml__with_iaf_psc_delta_neuron_nestml.h:745:3:   required from ‘nest::stdp_triplet_nn_synapse_nestml__with_iaf_psc_delta_neuron_nestml<targetidentifierT>::stdp_triplet_nn_synapse_nestml__with_iaf_psc_delta_neuron_nestml() [with targetidentifierT = nest::TargetIdentifierIndex]’
/home/charl/julich/nest-simulator-install/include/nest/connector_model.h:164:25:   required from ‘nest::GenericConnectorModel<ConnectionT>::GenericConnectorModel(std::string) [with ConnectionT = nest::stdp_triplet_nn_synapse_nestml__with_iaf_psc_delta_neuron_nestml<nest::TargetIdentifierIndex>; std::string = std::__cxx11::basic_string<char>]’
/home/charl/julich/nest-simulator-install/include/nest/model_manager_impl.h:103:34:   required from ‘void nest::ModelManager::register_specific_connection_model_(const std::string&) [with CompleteConnecionT = nest::stdp_triplet_nn_synapse_nestml__with_iaf_psc_delta_neuron_nestml<nest::TargetIdentifierIndex>; std::string = std::__cxx11::basic_string<char>]’
/home/charl/julich/nest-simulator-install/include/nest/model_manager_impl.h:67:80:   required from ‘void nest::ModelManager::register_connection_model(const std::string&) [with ConnectionT = nest::stdp_triplet_nn_synapse_nestml__with_iaf_psc_delta_neuron_nestml; std::string = std::__cxx11::basic_string<char>]’
/home/charl/julich/nest-simulator-install/include/nest/nest_impl.h:37:70:   required from ‘void nest::register_connection_model(const std::string&) [with ConnectorModelT = stdp_triplet_nn_synapse_nestml__with_iaf_psc_delta_neuron_nestml; std::string = std::__cxx11::basic_string<char>]’
/home/charl/julich/nestml-fork-integrate_specific_odes/nestml/doc/tutorials/triplet_stdp_synapse/target/stdp_triplet_nn_synapse_nestml__with_iaf_psc_delta_neuron_nestml.h:603:102:   required from here
/home/charl/julich/nestml-fork-integrate_specific_odes/nestml/doc/tutorials/triplet_stdp_synapse/target/stdp_triplet_nn_synapse_nestml__with_iaf_psc_delta_neuron_nestml.h:718:16: warning: unused variable ‘__resolution’ [-Wunused-variable]
  718 |   const double __resolution = nest::Time::get_resolution().get_ms();  // do not remove, this is necessary for the resolution() function
      |                ^~~~~~~~~~~~
/home/charl/julich/nestml-fork-integrate_specific_odes/nestml/doc/tutorials/triplet_stdp_synapse/target/stdp_triplet_nn_synapse_nestml__with_iaf_psc_delta_neuron_nestml.h: In instantiation of ‘bool nest::stdp_triplet_nn_synapse_nestml__with_iaf_psc_delta_neuron_nestml<targetidentifierT>::send(nest::Event&, size_t, const nest::stdp_triplet_nn_synapse_nestml__with_iaf_psc_delta_neuron_nestmlCommonSynapseProperties&) [with targetidentifierT = nest::TargetIdentifierPtrRport; size_t = long unsigned int]’:
/home/charl/julich/nest-simulator-install/include/nest/connector_base.h:391:22:   required from ‘void nest::Connector<ConnectionT>::send_to_all(size_t, const std::vector<nest::ConnectorModel*>&, nest::Event&) [with ConnectionT = nest::stdp_triplet_nn_synapse_nestml__with_iaf_psc_delta_neuron_nestml<nest::TargetIdentifierPtrRport>; size_t = long unsigned int]’
/home/charl/julich/nest-simulator-install/include/nest/connector_base.h:383:3:   required from here
/home/charl/julich/nestml-fork-integrate_specific_odes/nestml/doc/tutorials/triplet_stdp_synapse/target/stdp_triplet_nn_synapse_nestml__with_iaf_psc_delta_neuron_nestml.h:518:14: warning: variable ‘get_t’ set but not used [-Wunused-but-set-variable]
  518 |         auto get_t = [_tr_t](){ return _tr_t; };   // do not remove, this is in case the predefined time variable ``t`` is used in the NESTML model
      |              ^~~~~
/home/charl/julich/nestml-fork-integrate_specific_odes/nestml/doc/tutorials/triplet_stdp_synapse/target/stdp_triplet_nn_synapse_nestml__with_iaf_psc_delta_neuron_nestml.h:543:14: warning: variable ‘get_t’ set but not used [-Wunused-but-set-variable]
  543 |         auto get_t = [__t_spike](){ return __t_spike; };    // do not remove, this is in case the predefined time variable ``t`` is used in the NESTML model
      |              ^~~~~
/home/charl/julich/nestml-fork-integrate_specific_odes/nestml/doc/tutorials/triplet_stdp_synapse/target/stdp_triplet_nn_synapse_nestml__with_iaf_psc_delta_neuron_nestml.h:580:14: warning: variable ‘get_t’ set but not used [-Wunused-but-set-variable]
  580 |         auto get_t = [__t_spike](){ return __t_spike; };    // do not remove, this is in case the predefined time variable ``t`` is used in the NESTML model
      |              ^~~~~
/home/charl/julich/nestml-fork-integrate_specific_odes/nestml/doc/tutorials/triplet_stdp_synapse/target/stdp_triplet_nn_synapse_nestml__with_iaf_psc_delta_neuron_nestml.h:451:18: warning: unused variable ‘__resolution’ [-Wunused-variable]
  451 |     const double __resolution = nest::Time::get_resolution().get_ms();  // do not remove, this is necessary for the resolution() function
      |                  ^~~~~~~~~~~~
/home/charl/julich/nestml-fork-integrate_specific_odes/nestml/doc/tutorials/triplet_stdp_synapse/target/stdp_triplet_nn_synapse_nestml__with_iaf_psc_delta_neuron_nestml.h:453:10: warning: variable ‘get_thread’ set but not used [-Wunused-but-set-variable]
  453 |     auto get_thread = [tid]()
      |          ^~~~~~~~~~
/home/charl/julich/nestml-fork-integrate_specific_odes/nestml/doc/tutorials/triplet_stdp_synapse/target/stdp_triplet_nn_synapse_nestml__with_iaf_psc_delta_neuron_nestml.h: In instantiation of ‘bool nest::stdp_triplet_nn_synapse_nestml__with_iaf_psc_delta_neuron_nestml<targetidentifierT>::send(nest::Event&, size_t, const nest::stdp_triplet_nn_synapse_nestml__with_iaf_psc_delta_neuron_nestmlCommonSynapseProperties&) [with targetidentifierT = nest::TargetIdentifierIndex; size_t = long unsigned int]’:
/home/charl/julich/nest-simulator-install/include/nest/connector_base.h:391:22:   required from ‘void nest::Connector<ConnectionT>::send_to_all(size_t, const std::vector<nest::ConnectorModel*>&, nest::Event&) [with ConnectionT = nest::stdp_triplet_nn_synapse_nestml__with_iaf_psc_delta_neuron_nestml<nest::TargetIdentifierIndex>; size_t = long unsigned int]’
/home/charl/julich/nest-simulator-install/include/nest/connector_base.h:383:3:   required from here
/home/charl/julich/nestml-fork-integrate_specific_odes/nestml/doc/tutorials/triplet_stdp_synapse/target/stdp_triplet_nn_synapse_nestml__with_iaf_psc_delta_neuron_nestml.h:518:14: warning: variable ‘get_t’ set but not used [-Wunused-but-set-variable]
  518 |         auto get_t = [_tr_t](){ return _tr_t; };   // do not remove, this is in case the predefined time variable ``t`` is used in the NESTML model
      |              ^~~~~
/home/charl/julich/nestml-fork-integrate_specific_odes/nestml/doc/tutorials/triplet_stdp_synapse/target/stdp_triplet_nn_synapse_nestml__with_iaf_psc_delta_neuron_nestml.h:543:14: warning: variable ‘get_t’ set but not used [-Wunused-but-set-variable]
  543 |         auto get_t = [__t_spike](){ return __t_spike; };    // do not remove, this is in case the predefined time variable ``t`` is used in the NESTML model
      |              ^~~~~
/home/charl/julich/nestml-fork-integrate_specific_odes/nestml/doc/tutorials/triplet_stdp_synapse/target/stdp_triplet_nn_synapse_nestml__with_iaf_psc_delta_neuron_nestml.h:580:14: warning: variable ‘get_t’ set but not used [-Wunused-but-set-variable]
  580 |         auto get_t = [__t_spike](){ return __t_spike; };    // do not remove, this is in case the predefined time variable ``t`` is used in the NESTML model
      |              ^~~~~
/home/charl/julich/nestml-fork-integrate_specific_odes/nestml/doc/tutorials/triplet_stdp_synapse/target/stdp_triplet_nn_synapse_nestml__with_iaf_psc_delta_neuron_nestml.h:451:18: warning: unused variable ‘__resolution’ [-Wunused-variable]
  451 |     const double __resolution = nest::Time::get_resolution().get_ms();  // do not remove, this is necessary for the resolution() function
      |                  ^~~~~~~~~~~~
/home/charl/julich/nestml-fork-integrate_specific_odes/nestml/doc/tutorials/triplet_stdp_synapse/target/stdp_triplet_nn_synapse_nestml__with_iaf_psc_delta_neuron_nestml.h:453:10: warning: variable ‘get_thread’ set but not used [-Wunused-but-set-variable]
  453 |     auto get_thread = [tid]()
      |          ^~~~~~~~~~
/home/charl/julich/nestml-fork-integrate_specific_odes/nestml/doc/tutorials/triplet_stdp_synapse/target/stdp_triplet_nn_synapse_nestml__with_iaf_psc_delta_neuron_nestml.h: In instantiation of ‘void nest::stdp_triplet_nn_synapse_nestml__with_iaf_psc_delta_neuron_nestml<targetidentifierT>::update_internal_state_(double, double, const nest::stdp_triplet_nn_synapse_nestml__with_iaf_psc_delta_neuron_nestmlCommonSynapseProperties&) [with targetidentifierT = nest::TargetIdentifierPtrRport]’:
/home/charl/julich/nestml-fork-integrate_specific_odes/nestml/doc/tutorials/triplet_stdp_synapse/target/stdp_triplet_nn_synapse_nestml__with_iaf_psc_delta_neuron_nestml.h:513:9:   required from ‘bool nest::stdp_triplet_nn_synapse_nestml__with_iaf_psc_delta_neuron_nestml<targetidentifierT>::send(nest::Event&, size_t, const nest::stdp_triplet_nn_synapse_nestml__with_iaf_psc_delta_neuron_nestmlCommonSynapseProperties&) [with targetidentifierT = nest::TargetIdentifierPtrRport; size_t = long unsigned int]’
/home/charl/julich/nest-simulator-install/include/nest/connector_base.h:391:22:   required from ‘void nest::Connector<ConnectionT>::send_to_all(size_t, const std::vector<nest::ConnectorModel*>&, nest::Event&) [with ConnectionT = nest::stdp_triplet_nn_synapse_nestml__with_iaf_psc_delta_neuron_nestml<nest::TargetIdentifierPtrRport>; size_t = long unsigned int]’
/home/charl/julich/nest-simulator-install/include/nest/connector_base.h:383:3:   required from here
/home/charl/julich/nestml-fork-integrate_specific_odes/nestml/doc/tutorials/triplet_stdp_synapse/target/stdp_triplet_nn_synapse_nestml__with_iaf_psc_delta_neuron_nestml.h:799:18: warning: unused variable ‘__resolution’ [-Wunused-variable]
  799 |     const double __resolution = timestep;  // do not remove, this is necessary for the resolution() function
      |                  ^~~~~~~~~~~~
/home/charl/julich/nestml-fork-integrate_specific_odes/nestml/doc/tutorials/triplet_stdp_synapse/target/stdp_triplet_nn_synapse_nestml__with_iaf_psc_delta_neuron_nestml.h:800:10: warning: variable ‘get_t’ set but not used [-Wunused-but-set-variable]
  800 |     auto get_t = [t_start](){ return t_start; };   // do not remove, this is in case the predefined time variable ``t`` is used in the NESTML model
      |          ^~~~~
/home/charl/julich/nestml-fork-integrate_specific_odes/nestml/doc/tutorials/triplet_stdp_synapse/target/stdp_triplet_nn_synapse_nestml__with_iaf_psc_delta_neuron_nestml.h: In instantiation of ‘void nest::stdp_triplet_nn_synapse_nestml__with_iaf_psc_delta_neuron_nestml<targetidentifierT>::update_internal_state_(double, double, const nest::stdp_triplet_nn_synapse_nestml__with_iaf_psc_delta_neuron_nestmlCommonSynapseProperties&) [with targetidentifierT = nest::TargetIdentifierIndex]’:
/home/charl/julich/nestml-fork-integrate_specific_odes/nestml/doc/tutorials/triplet_stdp_synapse/target/stdp_triplet_nn_synapse_nestml__with_iaf_psc_delta_neuron_nestml.h:513:9:   required from ‘bool nest::stdp_triplet_nn_synapse_nestml__with_iaf_psc_delta_neuron_nestml<targetidentifierT>::send(nest::Event&, size_t, const nest::stdp_triplet_nn_synapse_nestml__with_iaf_psc_delta_neuron_nestmlCommonSynapseProperties&) [with targetidentifierT = nest::TargetIdentifierIndex; size_t = long unsigned int]’
/home/charl/julich/nest-simulator-install/include/nest/connector_base.h:391:22:   required from ‘void nest::Connector<ConnectionT>::send_to_all(size_t, const std::vector<nest::ConnectorModel*>&, nest::Event&) [with ConnectionT = nest::stdp_triplet_nn_synapse_nestml__with_iaf_psc_delta_neuron_nestml<nest::TargetIdentifierIndex>; size_t = long unsigned int]’
/home/charl/julich/nest-simulator-install/include/nest/connector_base.h:383:3:   required from here
/home/charl/julich/nestml-fork-integrate_specific_odes/nestml/doc/tutorials/triplet_stdp_synapse/target/stdp_triplet_nn_synapse_nestml__with_iaf_psc_delta_neuron_nestml.h:799:18: warning: unused variable ‘__resolution’ [-Wunused-variable]
  799 |     const double __resolution = timestep;  // do not remove, this is necessary for the resolution() function
      |                  ^~~~~~~~~~~~
/home/charl/julich/nestml-fork-integrate_specific_odes/nestml/doc/tutorials/triplet_stdp_synapse/target/stdp_triplet_nn_synapse_nestml__with_iaf_psc_delta_neuron_nestml.h:800:10: warning: variable ‘get_t’ set but not used [-Wunused-but-set-variable]
  800 |     auto get_t = [t_start](){ return t_start; };   // do not remove, this is in case the predefined time variable ``t`` is used in the NESTML model
      |          ^~~~~
[100%] Linking CXX shared module nestml_4940100b28f446be95429cd7b36f439e_module.so
[100%] Built target nestml_4940100b28f446be95429cd7b36f439e_module_module
[100%] Built target nestml_4940100b28f446be95429cd7b36f439e_module_module
Install the project...
-- Install configuration: ""
-- Installing: /tmp/nestml_target_tz6lmulj/nestml_4940100b28f446be95429cd7b36f439e_module.so

Results

Spike pairing protocol

If we set the values of \(A_3^+\) and \(A_3^-\) to 0 in the above equations, the model becomes a classical STDP model. The authors in [4] tested this model to check if they could reproduce the experimental results of [2] and [3]. They tested this with a pairing protocol which is a classic STDP protocol where the pairs of presynaptic and postsynaptic spikes shifted by \(\Delta{t}\) are repeated at regular intervals of \((1/\rho)\). They showed that spike pairs repeated at high frequencies did not have considerable effect on the synaptic weights as shown by the experimental data.

eaf87b6b0d4540c09539c78c47cd8cde

Triplet STDP model with spike pairs

Let us simulate the pairing protocol in the above formulated model to see if we can reproduce the frequency dependence of spikes on the synaptic weights.

[6]:
# Create pre and post spike arrays
def create_spike_pairs(freq=1., delta_t=0., size=10):
    """
    Creates the spike pairs given the frequency and the time difference between the pre and post spikes.
    :param: freq: frequency of the spike pairs
    :param: delta_t: time difference or delay between the spikes
    :param: size: number of spike pairs to be generated.
    :return: pre and post spike arrays
    """
    pre_spike_times = 1 + abs(delta_t) + freq * np.arange(size).astype(float)
    post_spike_times = 1 + abs(delta_t) + delta_t + freq * np.arange(size).astype(float)

    return pre_spike_times, post_spike_times
[7]:
def run_triplet_stdp_network(module_name, neuron_model_name, synapse_model_name, neuron_opts,
                             nest_syn_opts, pre_spike_times, post_spike_times,
                             resolution=1., delay=1., sim_time=None):
    """
    Runs the triplet stdp synapse model
    """
    nest.set_verbosity("M_ALL")
    nest.ResetKernel()
    nest.Install(module_name)
    nest.SetKernelStatus({'resolution': resolution})

    # Set defaults for neuron
    nest.SetDefaults(neuron_model_name, neuron_opts)

    # Create neurons
    neurons = nest.Create(neuron_model_name, 2)

    pre_sg = nest.Create('spike_generator', params={'spike_times': pre_spike_times})
    post_sg = nest.Create('spike_generator', params={'spike_times': post_spike_times})

    spikes = nest.Create('spike_recorder')
    weight_recorder = nest.Create('weight_recorder')

    # Set defaults for synapse
    nest.CopyModel('static_synapse',
                   'excitatory_noise',
                   {'weight': 9999.,
                    'delay' : syn_opts["delay"]})

    _syn_opts = nest_syn_opts.copy()
    _syn_opts.pop('delay')

    nest.CopyModel(synapse_model_name,
                       synapse_model_name + "_rec",
                       {'weight_recorder'   : weight_recorder[0]})
    nest.SetDefaults(synapse_model_name + "_rec", _syn_opts)

    # Connect nodes
    nest.Connect(neurons[0], neurons[1], syn_spec={'synapse_model': synapse_model_name + "_rec"})
    nest.Connect(pre_sg, neurons[0], syn_spec='excitatory_noise')
    nest.Connect(post_sg, neurons[1], syn_spec='excitatory_noise')
    nest.Connect(neurons, spikes)

    # Run simulation
    syn = nest.GetConnections(source=neurons[0], synapse_model=synapse_model_name + "_rec")
    initial_weight = nest.GetStatus(syn)[0]['w']

    nest.Simulate(sim_time)

    updated_weight = nest.GetStatus(syn)[0]['w']
    dw = updated_weight - initial_weight
    print('Initial weight: {}, Updated weight: {}'.format(initial_weight, updated_weight))

    connections = nest.GetConnections(neurons, neurons)
    gid_pre = nest.GetStatus(connections,'source')[0]
    gid_post = nest.GetStatus(connections,'target')[0]

    # From the spike recorder
    events = nest.GetStatus(spikes, 'events')[0]
    times_spikes = np.array(events['times'])
    senders_spikes = events['senders']
    # print('times_spikes: ', times_spikes)
    # print('senders_spikes: ', senders_spikes)

    # From the weight recorder
    events = nest.GetStatus(weight_recorder, 'events')[0]
    times_weights = events['times']
    weights = events['weights']
    # print('times_weights: ', times_weights)
    # print('weights: ', weights)

    return dw

Simulation

[8]:
# Simulate the network
def run_frequency_simulation(module_name, neuron_model_name, synapse_model_name,
                             neuron_opts, nest_syn_opts,
                             freqs, delta_t, n_spikes):
    """
    Runs the spike pair simulation for given frequencies and given time difference between spikes.
    """
    dw_dict = dict.fromkeys(delta_t)
    for _t in delta_t:
        dw_vec = []
        for _freq in freqs:
            spike_interval = (1/_freq)*1000 # in ms

            pre_spike_times, post_spike_times = create_spike_pairs(freq=spike_interval,
                                                                   delta_t=_t,
                                                                   size=n_spikes)

            sim_time = max(np.amax(pre_spike_times), np.amax(post_spike_times)) + 10. + 3 * syn_opts["delay"]

            dw = run_triplet_stdp_network(module_name, neuron_model_name, synapse_model_name,
                                          neuron_opts, nest_syn_opts,
                                          pre_spike_times=pre_spike_times,
                                          post_spike_times=post_spike_times,
                                          sim_time=sim_time)
            dw_vec.append(dw)

        dw_dict[_t] = dw_vec

    return dw_dict

All-to-all spike interaction

[9]:
freqs = [1., 5., 10., 20., 40., 50.] # frequency of spikes in Hz
delta_t = [10, -10] # delay between t_post and t_pre in ms
n_spikes = 60
[10]:
syn_opts = {
        'delay': 1.,
        'tau_minus': 33.7,
        'tau_plus': 16.8,
        'tau_x': 101.,
        'tau_y': 125.,
        'A2_plus': 5e-10,
        'A3_plus': 6.2e-3,
        'A2_minus': 7e-3,
        'A3_minus': 2.3e-4,
        'Wmax':  50.,
        'Wmin' : 0.,
        'w': 1.
}

synapse_suffix = neuron_model_name[neuron_model_name.find("_with_")+6:]
neuron_opts = {'tau_minus__for_' + synapse_suffix: syn_opts['tau_minus'],
                'tau_y__for_' + synapse_suffix: syn_opts['tau_y']}

nest_syn_opts = syn_opts.copy()
nest_syn_opts.pop('tau_minus')
nest_syn_opts.pop('tau_y')

dw_dict = run_frequency_simulation(module_name, neuron_model_name, synapse_model_name,
                                   neuron_opts, nest_syn_opts,
                                   freqs, delta_t, n_spikes)

Apr 19 12:03:37 Install [Info]:
    loaded module nestml_3c70a8ed53be4c46854ae5b0aa248ab9_module
Initial weight: 1.0, Updated weight: 1.000062712440608

Apr 19 12:03:37 correlation_detector [Info]:
    Default for delta_tau changed from 0.5 to 5 ms

Apr 19 12:03:37 correlomatrix_detector [Info]:
    Default for delta_tau changed from 0.5 to 5 ms

Apr 19 12:03:37 correlospinmatrix_detector [Info]:
    Default for delta_tau changed from 0.1 to 1 ms

Apr 19 12:03:37 iaf_psc_delta_neuron_nestml [Warning]:
    Simulation resolution has changed. Internal state and parameters of the
    model have been reset!

Apr 19 12:03:37 iaf_psc_delta_neuron_nestml__with_stdp_triplet_synapse_nestml [Warning]:
    Simulation resolution has changed. Internal state and parameters of the
    model have been reset!

Apr 19 12:03:37 SimulationManager::set_status [Info]:
    Temporal resolution changed from 0.1 to 1 ms.

Apr 19 12:03:37 NodeManager::prepare_nodes [Info]:
    Preparing 6 nodes for simulation.

Apr 19 12:03:37 SimulationManager::start_updating_ [Info]:
    Number of local nodes: 6
    Simulation time (ms): 59034
    Number of OpenMP thInitial weight: 1.0, Updated weight: 1.045481723674705
reads: 1
    Not using MPI

Apr 19 12:03:37 SimulationManager::run [Info]:
    Simulation finished.

Apr 19 12:03:37 Install [Info]:
    loaded module nestml_3c70a8ed53be4c46854ae5b0aa248ab9_module

Apr 19 12:03:37 correlation_detector [Info]:
    Default for delta_tau changed from 0.5 to 5 ms

Apr 19 12:03:37 correlomatrix_detector [Info]:
    Default for delta_tau changed from 0.5 to 5 ms

Apr 19 12:03:37 correlospinmatrix_detector [Info]:
    Default for delta_tau changed from 0.1 to 1 ms

Apr 19 12:03:37 iaf_psc_delta_neuron_nestml [Warning]:
    Simulation resolution has changed. Internal state and parameters of the
    model have been reset!

Apr 19 12:03:37 iaf_psc_delta_neuron_nestml__with_stdp_triplet_synapse_nestml [Warning]:
    Simulation resolution has changed. Internal state and parameters of the
    model have been reset!

Apr 19 12:03:37 SimulationManager::set_status [Info]:
    Temporal resolution changed from 0.1 to 1 ms.

Apr 19 12:03:37 NodeManager::prepare_nodes [Info]:
    Preparing 6 nodes for simulation.

Apr 19 12:03:37 SimulationManager::start_updating_ [Info]:
    Number of local nodes: 6
    Simulation time (ms): 11834
    Number of OpenMP threads: 1
    Not using MPI

Apr 19 12:03:37 SimulationManager::run [Info]:
    Simulation finished.

Apr 19 12:03:37 Install [Info]:
    loaded module nestml_3c70a8ed53be4c46854ae5b0aa248ab9_module

Apr 19 12:03:37 correlation_detector [Info]:
    Default for delta_tau changed from 0.5 to 5 ms

Apr 19 12:03:37 correlomatrix_detector [Info]:
    Default for delta_tau changed from 0.5 to 5 ms

Apr 19 12:03:37 correlospinmatrix_detector [Info]:
    Default for delta_tau changed from 0.1 to 1 ms

Apr 19 12:03:37 iaf_psc_delta_neuron_nestml [Warning]:
    Simulation resolution has changed. Internal state and parameters of the
    model have been reset!

Apr 19 12:03:37 iaf_psc_delta_neuron_nestml__with_stdp_triplet_synapse_nestml [Warning]:
    Simulation resolution has changed. InternaInitial weight: 1.0, Updated weight: 1.1180707933363045
l state and parameters of the
    model have been reset!

Apr 19 12:03:37 SimulationManager::set_status [Info]:
    Temporal resolution changed from 0.1 to 1 ms.

Apr 19 12:03:37 NodeManager::prepare_nodes [Info]:
    Preparing 6 nodes for simulation.

Apr 19 12:03:37 SimulationManager::start_updating_ [Info]:
    Number of local nodes: 6
    Simulation time (ms): 5934
    Number of OpenMP threads: 1
    Not using MPI

Apr 19 12:03:37 SimulationManager::run [Info]:
    Simulation finished.

Apr 19 12:03:37 Install [Info]:
    loaded module nestml_3c70a8ed53be4c46854ae5b0aa248ab9_module

Apr 19 12:03:37 correlation_detector [Info]:
    Default for delta_tau changed from 0.5 to 5 ms

Apr 19 12:03:37 correlomatrix_detector [Info]:
    Default for delta_tau changed from 0.5 to 5 ms

Apr 19 12:03:37 correlospinmatrix_detector [Info]:
    Default for delta_tau changed from 0.1 to 1 ms

Apr 19 12:03:37 iaf_psc_delta_neuron_nestml [Warning]:
    Simulation resolution has changed. Internal state and parameters of the
    model have been reset!

Apr 19 12:03:37 iaf_psc_delta_neuron_nestml__with_stdp_triplet_synapse_nestml [Warning]:
    Simulation resolution has changed. Internal state and parameters of the
    model have been reset!

Apr 19 12:03:37 SimulationManager::set_status [Info]:
    Temporal resolution changed from 0.1 to 1 ms.
Initial weight: 1.0, Updated weight: 1.205329009261286

Apr 19 12:03:37 NodeManager::prepare_nodes [Info]:
    Preparing 6 nodes for simulation.

Apr 19 12:03:37 SimulationManager::start_updating_ [Info]:
    Number of local nodes: 6
    Simulation time (ms): 2984
    Number of OpenMP threads: 1
    Not using MPI

Apr 19 12:03:37 SimulationManager::run [Info]:
    Simulation finished.

Apr 19 12:03:37 Install [Info]:
    loaded module nestml_3c70a8ed53be4c46854ae5b0aa248ab9_module

Apr 19 12:03:37 correlation_detector [Info]:
    Default for delta_tau changed from 0.5 to 5 ms

Apr 19 12:03:37 correlomatrix_detector [Info]:
    Default for delta_tau changed from 0.5 to 5 ms

Apr 19 12:03:37 correlospinmatrix_detector [Info]:
    Default for delta_tau changed from 0.1 to 1 ms

Apr 19 12:03:37 iaf_psc_delta_neuron_nestml [Warning]:
    Simulation resolution has changed. Internal state and parameters of the
    model have been reset!

Apr 19 12:03:37 iaf_psc_delta_neuron_nestml__with_stdp_triplet_synapse_nestml [Warning]:
    SimulatInitial weight: 1.0, Updated weight: 1.4186655196495506
ion resolution has changed. Internal state and parameters of the
    model have been reset!

Apr 19 12:03:37 SimulationManager::set_status [Info]:
    Temporal resolution changed from 0.1 to 1 ms.

Apr 19 12:03:37 NodeManager::prepare_nodes [Info]:
    Preparing 6 nodes for simulation.

Apr 19 12:03:37 SimulationManager::start_updating_ [Info]:
    Number of local nodes: 6
    Simulation time (ms): 1509
    Number of OpenMP threads: 1
    Not using MPI

Apr 19 12:03:37 SimulationManager::run [Info]:
    Simulation finished.

Apr 19 12:03:37 Install [Info]:
    loaded module nestml_3c70a8ed53be4c46854ae5b0aa248ab9_module

Apr 19 12:03:37 correlation_detector [Info]:
    Default for delta_tau changed from 0.5 to 5 ms

Apr 19 12:03:37 correlomatrix_detector [Info]:
    Default for delta_tau changed from 0.5 to 5 ms

Apr 19 12:03:37 correlospinmatrix_detector [Info]:
    Default for delta_tau changed from 0.1 to 1 ms

Apr 19 12:03:37 iaf_psc_delta_neuron_nestml [Warning]:
    SimInitial weight: 1.0, Updated weight: 1.5813821544865971
ulation resolution has changed. Internal state and parameters of the
    model have been reset!

Apr 19 12:03:37 iaf_psc_delta_neuron_nestml__with_stdp_triplet_synapse_nestml [Warning]:
    Simulation resolution has changed. Internal state and parameters of the
    model have been reset!

Apr 19 12:03:37 SimulationManager::set_status [Info]:
    Temporal resolution changed from 0.1 to 1 ms.

Apr 19 12:03:37 NodeManager::prepare_nodes [Info]:
    Preparing 6 nodes for simulation.

Apr 19 12:03:37 SimulationManager::start_updating_ [Info]:
    Number of local nodes: 6
    Simulation time (ms): 1214
    Number of OpenMP threads: 1
    Not using MPI

Apr 19 12:03:37 SimulationManager::run [Info]:
    Simulation finished.

Apr 19 12:03:37 Install [Info]:
    loaded module nestml_3c70a8ed53be4c46854ae5b0aa248ab9_module

Apr 19 12:03:37 correlation_detector [Info]:
    Default for delta_tau changed from 0.5 to 5 ms

Apr 19 12:03:37 correlomatrix_detector [Info]:
    Default for delta_tau changed from 0.5 to 5 ms

Apr 19 12:03:37 correlospinmatrix_detector [Info]:
    Default for delta_tau changed from 0.1 to 1 ms

Apr 19 12:03:37 iaf_psc_delta_neuron_nestml [Warning]:
    Simulation resolution has changed. Internal state and parameters of the
    model have been reset!

Apr 19 12:03:37 iaf_psc_delta_neuron_nestml__with_stdp_triplet_synapse_nestml [Warning]:
    Simulation resolution has changed. Internal state and parameters of the
    model have been reset!

Apr 19 12:03:37 SimulationManager::set_status [Info]:
    Temporal resolution changed from 0.1 to 1 ms.

Apr 19 12:03:37 NodeManager::prepare_nodes [Info]:
    Preparing 6 nodes for simulation.

Apr 19 12:03:37 SimulationManager::start_updating_ [Info]:
    Number of local nodes: 6
    Simulation time (ms): 59024
    Number of OpenMP threads: 1
    Not using MPI

Apr 19 12:03:37 SimulationManager::run [Info]:
    Simulation finished.
Initial weight: 1.0, Updated weight: 0.6678711978627694

Apr 19 12:03:37 Install [Info]:
    loaded module nestml_3c70a8ed53be4c46854ae5b0aa248ab9_module

Apr 19 12:03:37 correlation_detector [Info]:
    Default for delta_tau changed from 0.5 to 5 ms

Apr 19 12:03:37 correlomatrix_detector [Info]:
    Default for delta_tau changed from 0.5 to 5 ms

Apr 19 12:03:37 correlospinmatrix_detector [Info]:
    Default for delta_tau changed from 0.1 to 1 ms

Apr 19 12:03:37 iaf_psc_delta_neuron_nestml [Warning]:
    Simulation resolution has changed. Internal state and parameters of the
    model have been reset!

Apr 19 12:03:37 iaf_psc_delta_neuron_nestml__with_stdp_triplet_synapse_nestml [Warning]:
    Simulation resolution has changed. Internal state and parameters of the
    model have been reset!

Apr 19 12:03:37 SimulationManager::set_status [Info]:
    Temporal resolution changed from 0.1 to 1 ms.

Apr 19 12:03:37 NodeManager::prepare_nodes [Info]:
    Preparing 6 nodes for simulation.

Apr 19 12:03:37 SimulationManager::start_updaInitial weight: 1.0, Updated weight: 0.6653426131462727
ting_ [Info]:
    Number of local nodes: 6
    Simulation time (ms): 11824
    Number of OpenMP threads: 1
    Not using MPI

Apr 19 12:03:37 SimulationManager::run [Info]:
    Simulation finished.

Apr 19 12:03:37 Install [Info]:
    loaded module nestml_3c70a8ed53be4c46854ae5b0aa248ab9_module

Apr 19 12:03:37 correlation_detector [Info]:
    Default for delta_tau changed from 0.5 to 5 ms

Apr 19 12:03:37 correlomatrix_detector [Info]:
    Default for delta_tau changed from 0.5 to 5 ms

Apr 19 12:03:37 correlospinmatrix_detector [Info]:
    Default for delta_tau changed from 0.1 to 1 ms

Apr 19 12:03:37 iaf_psc_delta_neuron_nestml [Warning]:
    Simulation resolution has changed. Internal state and parameters of the
    model have been reset!

Apr 19 12:03:37 iaf_psc_delta_neuron_nestml__with_stdp_triplet_synapse_nestml [Warning]:
    Simulation resolution has changed. Internal state and parameters of the
    model have been reset!

Apr 19 12:03:37 SimulationManager::set_status [Info]:
    Temporal resolution changed from 0.1 to 1 ms.
Initial weight: 1.0, Updated weight: 0.6450780469148971

Apr 19 12:03:37 NodeManager::prepare_nodes [Info]:
    Preparing 6 nodes for simulation.

Apr 19 12:03:37 SimulationManager::start_updating_ [Info]:
    Number of local nodes: 6
    Simulation time (ms): 5924
    Number of OpenMP threads: 1
    Not using MPI

Apr 19 12:03:37 SimulationManager::run [Info]:
    Simulation finished.

Apr 19 12:03:37 Install [Info]:
    loaded module nestml_3c70a8ed53be4c46854ae5b0aa248ab9_module

Apr 19 12:03:37 correlation_detector [Info]:
    Default for delta_tau changed from 0.5 to 5 ms

Apr 19 12:03:37 correlomatrix_detector [Info]:
    Default for delta_tau changed from 0.5 to 5 ms

Apr 19 12:03:37 correlospinmatrix_detector [Info]:
    Default for delta_tau changed from 0.1 to 1 ms

Apr 19 12:03:37 iaf_psc_delta_neuron_nestml [Warning]:
    Simulation resolution has changed. Internal state and parameters of the
    model have been reset!

Apr 19 12:03:37 iaf_psc_delta_neuron_nestml__with_stdp_triplet_synapse_nestml [Warning]:
    Simulation resolution has changed. Internal state and parameters of the
    model have been reset!

Apr 19 12:03:37 SimulationManager::set_status [Info]:
    Temporal resolution changed from 0.1 to 1 ms.
Initial weight: 1.0, Updated weight: 0.6180411107607721

Apr 19 12:03:37 NodeManager::prepare_nodes [Info]:
    Preparing 6 nodes for simulation.

Apr 19 12:03:37 SimulationManager::start_updating_ [Info]:
    Number of local nodes: 6
    Simulation time (ms): 2974
    Number of OpenMP threads: 1
    Not using MPI

Apr 19 12:03:37 SimulationManager::run [Info]:
    Simulation finished.

Apr 19 12:03:38 Install [Info]:
    loaded module nestml_3c70a8ed53be4c46854ae5b0aa248ab9_module

Apr 19 12:03:38 correlation_detector [Info]:
    Default for delta_tau changed from 0.5 to 5 ms

Apr 19 12:03:38 correlomatrix_detector [Info]:
    Default for delta_tau changed from 0.5 to 5 ms

Apr 19 12:03:38 correlospinmatrix_detector [Info]:
    Default for delta_tau changed from 0.1 to 1 ms

Apr 19 12:03:38 iaf_psc_delta_neuron_nestml [Warning]:
    Simulation resolution has changed. Internal state and parameters of the
    model have been reset!

Apr 19 12:03:38 iaf_psc_delta_neuron_nestml__with_stdp_triplet_synapse_nestml [Warning]:
    SimulatInitial weight: 1.0, Updated weight: 1.068737821702289
ion resolution has changed. Internal state and parameters of the
    model have been reset!

Apr 19 12:03:38 SimulationManager::set_status [Info]:
    Temporal resolution changed from 0.1 to 1 ms.

Apr 19 12:03:38 NodeManager::prepare_nodes [Info]:
    Preparing 6 nodes for simulation.

Apr 19 12:03:38 SimulationManager::start_updating_ [Info]:
    Number of local nodes: 6
    Simulation time (ms): 1499
    Number of OpenMP threads: 1
    Not using MPI

Apr 19 12:03:38 SimulationManager::run [Info]:
    Simulation finished.

Apr 19 12:03:38 Install [Info]:
    loaded module nestml_3c70a8ed53be4c46854ae5b0aa248ab9_module

Apr 19 12:03:38 correlation_detector [Info]:
    Default for delta_tau changed from 0.5 to 5 ms

Apr 19 12:03:38 correlomatrix_detector [Info]:
    Default for delta_tau changed from 0.5 to 5 ms

Apr 19 12:03:38 correlospinmatrix_detector [Info]:
    Default for delta_tau changed from 0.1 to 1 ms

Apr 19 12:03:38 iaf_psc_delta_neuron_nestml [Warning]:
    SimInitial weight: 1.0, Updated weight: 1.5937453662768748
ulation resolution has changed. Internal state and parameters of the
    model have been reset!

Apr 19 12:03:38 iaf_psc_delta_neuron_nestml__with_stdp_triplet_synapse_nestml [Warning]:
    Simulation resolution has changed. Internal state and parameters of the
    model have been reset!

Apr 19 12:03:38 SimulationManager::set_status [Info]:
    Temporal resolution changed from 0.1 to 1 ms.

Apr 19 12:03:38 NodeManager::prepare_nodes [Info]:
    Preparing 6 nodes for simulation.

Apr 19 12:03:38 SimulationManager::start_updating_ [Info]:
    Number of local nodes: 6
    Simulation time (ms): 1204
    Number of OpenMP threads: 1
    Not using MPI

Apr 19 12:03:38 SimulationManager::run [Info]:
    Simulation finished.

Nearest spike interaction

[11]:
syn_opts_nn = {
        'delay': 1.,
        'tau_minus': 33.7,
        'tau_plus': 16.8,
        'tau_x': 714.,
        'tau_y': 40.,
        'A2_plus': 8.8e-11,
        'A3_plus': 5.3e-2,
        'A2_minus': 6.6e-3,
        'A3_minus': 3.1e-3,
        'Wmax':  50.,
        'Wmin' : 0.,
        'w': 1.
}

synapse_suffix_nn = neuron_model_name_nn[neuron_model_name_nn.find("_with_")+6:]
neuron_opts_nn = {'tau_minus__for_' + synapse_suffix_nn: syn_opts_nn['tau_minus'],
                  'tau_y__for_' + synapse_suffix_nn: syn_opts_nn['tau_y']}

nest_syn_opts_nn = syn_opts_nn.copy()
nest_syn_opts_nn.pop('tau_minus')
nest_syn_opts_nn.pop('tau_y')

dw_dict_nn = run_frequency_simulation(module_name_nn, neuron_model_name_nn, synapse_model_name_nn,
                                      neuron_opts_nn, nest_syn_opts_nn,
                                      freqs, delta_t, n_spikes)

Apr 19 12:03:38 Install [Info]:
    loaded module nestml_4940100b28f446be95429cd7b36f439e_module
Initial weight: 1.0, Updated weight: 1.0000000027196625
Initial weight: 1.0, Updated weight: 1.0086627050654013

Apr 19 12:03:38 correlation_detector [Info]:
    Default for delta_tau changed from 0.5 to 5 ms

Apr 19 12:03:38 correlomatrix_detector [Info]:
    Default for delta_tau changed from 0.5 to 5 ms

Apr 19 12:03:38 correlospinmatrix_detector [Info]:
    Default for delta_tau changed from 0.1 to 1 ms

Apr 19 12:03:38 iaf_psc_delta_neuron_nestml [Warning]:
    Simulation resolution has changed. Internal state and parameters of the
    model have been reset!

Apr 19 12:03:38 iaf_psc_delta_neuron_nestml__with_stdp_triplet_nn_synapse_nestml [Warning]:
    Simulation resolution has changed. Internal state and parameters of the
    model have been reset!

Apr 19 12:03:38 SimulationManager::set_status [Info]:
    Temporal resolution changed from 0.1 to 1 ms.

Apr 19 12:03:38 NodeManager::prepare_nodes [Info]:
    Preparing 6 nodes for simulation.

Apr 19 12:03:38 SimulationManager::start_updating_ [Info]:
    Number of local nodes: 6
    Simulation time (ms): 59034
    Number of OpenMP threads: 1
    Not using MPI

Apr 19 12:03:38 SimulationManager::run [Info]:
    Simulation finished.

Apr 19 12:03:38 Install [Info]:
    loaded module nestml_4940100b28f446be95429cd7b36f439e_module

Apr 19 12:03:38 correlation_detector [Info]:
    Default for delta_tau changed from 0.5 to 5 ms

Apr 19 12:03:38 correlomatrix_detector [Info]:
    Default for delta_tau changed from 0.5 to 5 ms

Apr 19 12:03:38 correlospinmatrix_detector [Info]:
    Default for delta_tau changed from 0.1 to 1 ms

Apr 19 12:03:38 iaf_psc_delta_neuron_nestml [Warning]:
    Simulation resolution has changed. Internal state and parameters of the
    model have been reset!

Apr 19 12:03:38 iaf_psc_delta_neuron_nestml__with_stdp_triplet_nn_synapse_nestml [Warning]:
    Simulation resolution has changed. Internal state and parameters of the
    model have been reset!

Apr 19 12:03:38 SimulationManager::set_status [Info]:
    Temporal resolution changed from 0.1 to 1 ms.

Apr 19 12:03:38 NodeManager::prepare_nodes [Info]:
    Preparing 6 nodes for simulation.

Apr 19 12:03:38 SimulationManager::start_updating_ [Info]:
    Number of local nodes: 6
    Simulation time (ms): 11834
    Number of OpenMP threads: 1
    Not using MPI

Apr 19 12:03:38 SimulationManager::run [Info]:
    Simulation finished.

Apr 19 12:03:38 Install [Info]:
    loaded module nestml_4940100b28f446be95429cd7b36f439e_module

Apr 19 12:03:38 correlation_detector [Info]:
    Default for delta_tau changed from 0.5 to 5 ms

Apr 19 12:03:38 correlomatrix_detector [Info]:
    Default for delta_tau changed from 0.5 to 5 ms

Apr 19 12:03:38 correlospinmatrix_detector [Info]:
    Default for delta_tau changed from 0.1 to 1 ms

Apr 19 12:03:38 iaf_psc_delta_neuron_nestml [Warning]:
    Simulation resolution has changed. Internal state and parameters of the
    model have been reset!

Apr 19 12:03:38 iaf_psc_delta_neuron_nestml__with_stdp_triplet_nn_synapse_nestml [Warning]:
    Simulation resolution has changed. Internal state and parameters of the
    model have been reset!

Apr 19 12:03:38 SimulationManager::set_status [Info]:
    Temporal resolution changed from 0.1 to 1 ms.

Apr 19 12:03:38 NodeManager::prepare_nodes [Info]:
    Preparing 6 nodes for simulation.

Apr 19 12:03:38 SimulationManager::start_updating_ [Info]:
    Number of local nodes: 6
    Simulation time (ms): 5934
    Number of OpenMP threads: 1
    Not using MPI

Apr 19 12:03:38 SimulationManager::run [Info]:
    Simulation finished.
Initial weight: 1.0, Updated weight: 1.0903003652138468

Apr 19 12:03:38 Install [Info]:
    loaded module nestml_4940100b28f446be95429cd7b36f439e_module

Apr 19 12:03:38 correlation_detector [Info]:
    Default for delta_tau changed from 0.5 to 5 ms

Apr 19 12:03:38 correlomatrix_detector [Info]:
    Default for delta_tau changed from 0.5 to 5 ms

Apr 19 12:03:38 correlospinmatrix_detector [Info]:
    Default for delta_tau changed from 0.1 to 1 ms

Apr 19 12:03:38 iaf_psc_delta_neuron_nestml [Warning]:
    Simulation resolution has changed. Internal state and parameters of the
    model have been reset!

Apr 19 12:03:38 iaf_psc_delta_neuron_nestml__with_stdp_triplet_nn_synapse_nestml [Warning]:
    Simulation resolution has changed. Internal state and parameters of the
    model have been reset!

Apr 19 12:03:38 SimulationManager::set_status [Info]:
    Temporal resolution changed from 0.1 to 1 ms.
Initial weight: 1.0, Updated weight: 1.2776911537160713

Apr 19 12:03:38 NodeManager::prepare_nodes [Info]:
    Preparing 6 nodes for simulation.

Apr 19 12:03:38 SimulationManager::start_updating_ [Info]:
    Number of local nodes: 6
    Simulation time (ms): 2984
    Number of OpenMP threads: 1
    Not using MPI

Apr 19 12:03:38 SimulationManager::run [Info]:
    Simulation finished.

Apr 19 12:03:38 Install [Info]:
    loaded module nestml_4940100b28f446be95429cd7b36f439e_module

Apr 19 12:03:38 correlation_detector [Info]:
    Default for delta_tau changed from 0.5 to 5 ms

Apr 19 12:03:38 correlomatrix_detector [Info]:
    Default for delta_tau changed from 0.5 to 5 ms

Apr 19 12:03:38 correlospinmatrix_detector [Info]:
    Default for delta_tau changed from 0.1 to 1 ms

Apr 19 12:03:38 iaf_psc_delta_neuron_nestml [Warning]:
    Simulation resolution has changed. Internal state and parameters of the
    model have been reset!

Apr 19 12:03:38 iaf_psc_delta_neuron_nestml__with_stdp_triplet_nn_synapse_nestml [Warning]:
    Simulation resolution has changed. Internal state and parameters of the
    model have been reset!

Apr 19 12:03:38 SimulationManager::set_status [Info]:
    Temporal resolution changed from 0.1 to 1 ms.
Initial weight: 1.0, Updated weight: 1.4771400111243256

Apr 19 12:03:38 NodeManager::prepare_nodes [Info]:
    Preparing 6 nodes for simulation.

Apr 19 12:03:38 SimulationManager::start_updating_ [Info]:
    Number of local nodes: 6
    Simulation time (ms): 1509
    Number of OpenMP threads: 1
    Not using MPI

Apr 19 12:03:38 SimulationManager::run [Info]:
    Simulation finished.

Apr 19 12:03:38 Install [Info]:
    loaded module nestml_4940100b28f446be95429cd7b36f439e_module

Apr 19 12:03:38 correlation_detector [Info]:
    Default for delta_tau changed from 0.5 to 5 ms

Apr 19 12:03:38 correlomatrix_detector [Info]:
    Default for delta_tau changed from 0.5 to 5 ms

Apr 19 12:03:38 correlospinmatrix_detector [Info]:
    Default for delta_tau changed from 0.1 to 1 ms

Apr 19 12:03:38 iaf_psc_delta_neuron_nestml [Warning]:
    Simulation resolution has changed. Internal state and parameters of the
    model have been reset!

Apr 19 12:03:38 iaf_psc_delta_neuron_nestml__with_stdp_triplet_nn_synapse_nestml [Warning]:
    SimuInitial weight: 1.0, Updated weight: 1.530550096954562
lation resolution has changed. Internal state and parameters of the
    model have been reset!

Apr 19 12:03:38 SimulationManager::set_status [Info]:
    Temporal resolution changed from 0.1 to 1 ms.

Apr 19 12:03:38 NodeManager::prepare_nodes [Info]:
    Preparing 6 nodes for simulation.

Apr 19 12:03:38 SimulationManager::start_updating_ [Info]:
    Number of local nodes: 6
    Simulation time (ms): 1214
    Number of OpenMP threads: 1
    Not using MPI

Apr 19 12:03:38 SimulationManager::run [Info]:
    Simulation finished.

Apr 19 12:03:38 Install [Info]:
    loaded module nestml_4940100b28f446be95429cd7b36f439e_module

Apr 19 12:03:38 correlation_detector [Info]:
    Default for delta_tau changed from 0.5 to 5 ms

Apr 19 12:03:38 correlomatrix_detector [Info]:
    Default for delta_tau changed from 0.5 to 5 ms

Apr 19 12:03:38 correlospinmatrix_detector [Info]:
    Default for delta_tau changed from 0.1 to 1 ms

Apr 19 12:03:38 iaf_psc_delta_neuron_nestml [Warning]:
    Simulation resolution has changed. Internal state and parameters of the
    model have been reset!

Apr 19 12:03:38 iaf_psc_delta_neuron_nestml__with_stdp_triplet_nn_synapse_nestml [Warning]:
    Simulation resolution has changed. Internal state and parameters of the
    model have been reset!

Apr 19 12:03:38 SimulationManager::set_status [Info]:
    Temporal resolution changed from 0.1 to 1 ms.
Initial weight: 1.0, Updated weight: 0.554406040254968

Apr 19 12:03:38 NodeManager::prepare_nodes [Info]:
    Preparing 6 nodes for simulation.

Apr 19 12:03:38 SimulationManager::start_updating_ [Info]:
    Number of local nodes: 6
    Simulation time (ms): 59024
    Number of OpenMP threads: 1
    Not using MPI

Apr 19 12:03:38 SimulationManager::run [Info]:
    Simulation finished.

Apr 19 12:03:38 Install [Info]:
    loaded module nestml_4940100b28f446be95429cd7b36f439e_module

Apr 19 12:03:38 correlation_detector [Info]:
    Default for delta_tau changed from 0.5 to 5 ms

Apr 19 12:03:38 correlomatrix_detector [Info]:
    Default for delta_tau changed from 0.5 to 5 ms

Apr 19 12:03:38 correlospinmatrix_detector [Info]:
    Default for delta_tau changed from 0.1 to 1 ms

Apr 19 12:03:38 iaf_psc_delta_neuron_nestml [Warning]:
    Simulation resolution has changed. Internal state and parameters of the
    model have been reset!

Apr 19 12:03:38 iaf_psc_delta_neuron_nestml__with_stdp_triplet_nn_synapse_nestml [Warning]:
    SimInitial weight: 1.0, Updated weight: 0.5544062835543123
ulation resolution has changed. Internal state and parameters of the
    model have been reset!

Apr 19 12:03:38 SimulationManager::set_status [Info]:
    Temporal resolution changed from 0.1 to 1 ms.

Apr 19 12:03:38 NodeManager::prepare_nodes [Info]:
    Preparing 6 nodes for simulation.

Apr 19 12:03:38 SimulationManager::start_updating_ [Info]:
    Number of local nodes: 6
    Simulation time (ms): 11824
    Number of OpenMP threads: 1
    Not using MPI

Apr 19 12:03:38 SimulationManager::run [Info]:
    Simulation finished.

Apr 19 12:03:38 Install [Info]:
    loaded module nestml_4940100b28f446be95429cd7b36f439e_module

Apr 19 12:03:38 correlation_detector [Info]:
    Default for delta_tau changed from 0.5 to 5 ms

Apr 19 12:03:38 correlomatrix_detector [Info]:
    Default for delta_tau changed from 0.5 to 5 ms

Apr 19 12:03:38 correlospinmatrix_detector [Info]:
    Default for delta_tau changed from 0.1 to 1 ms

Apr 19 12:03:38 iaf_psc_delta_neuron_nestml [Warning]:
    Simulation resolution has changed. Internal state and parameters of the
    model have been reset!

Apr 19 12:03:38 iaf_psc_delta_neuron_nestml__with_stdp_triplet_nn_synapse_nestml [Warning]:
    Simulation resolution has changed. Internal state and parameters of the
    model have been reset!

Apr 19 12:03:38 SimulationManager::set_status [Info]:
    Temporal resolution changed from 0.1 to 1 ms.
Initial weight: 1.0, Updated weight: 0.5555461935366892

Apr 19 12:03:38 NodeManager::prepare_nodes [Info]:
    Preparing 6 nodes for simulation.

Apr 19 12:03:38 SimulationManager::start_updating_ [Info]:
    Number of local nodes: 6
    Simulation time (ms): 5924
    Number of OpenMP threads: 1
    Not using MPI

Apr 19 12:03:38 SimulationManager::run [Info]:
    Simulation finished.

Apr 19 12:03:38 Install [Info]:
    loaded module nestml_4940100b28f446be95429cd7b36f439e_module

Apr 19 12:03:38 correlation_detector [Info]:
    Default for delta_tau changed from 0.5 to 5 ms

Apr 19 12:03:38 correlomatrix_detector [Info]:
    Default for delta_tau changed from 0.5 to 5 ms

Apr 19 12:03:38 correlospinmatrix_detector [Info]:
    Default for delta_tau changed from 0.1 to 1 ms

Apr 19 12:03:38 iaf_psc_delta_neuron_nestml [Warning]:
    Simulation resolution has changed. Internal state and parameters of the
    model have been reset!

Apr 19 12:03:38 iaf_psc_delta_neuron_nestml__with_stdp_triplet_nn_synapse_nestml [Warning]:
    Simulation resolution has changed. Internal state and parameters of the
    model have been reset!

Apr 19 12:03:38 SimulationManager::set_status [Info]:
    Temporal resolution changed from 0.1 to 1 ms.
Initial weight: 1.0, Updated weight: 0.632456315445355

Apr 19 12:03:38 NodeManager::prepare_nodes [Info]:
    Preparing 6 nodes for simulation.

Apr 19 12:03:38 SimulationManager::start_updating_ [Info]:
    Number of local nodes: 6
    Simulation time (ms): 2974
    Number of OpenMP threads: 1
    Not using MPI

Apr 19 12:03:38 SimulationManager::run [Info]:
    Simulation finished.

Apr 19 12:03:38 Install [Info]:
    loaded module nestml_4940100b28f446be95429cd7b36f439e_module

Apr 19 12:03:38 correlation_detector [Info]:
    Default for delta_tau changed from 0.5 to 5 ms

Apr 19 12:03:38 correlomatrix_detector [Info]:
    Default for delta_tau changed from 0.5 to 5 ms

Apr 19 12:03:38 correlospinmatrix_detector [Info]:
    Default for delta_tau changed from 0.1 to 1 ms

Apr 19 12:03:38 iaf_psc_delta_neuron_nestml [Warning]:
    Simulation resolution has changed. Internal state and parameters of the
    model have been reset!

Apr 19 12:03:38 iaf_psc_delta_neuron_nestml__with_stdp_triplet_nn_synapse_nestml [Warning]:
    Simulation resolution has changed. Internal state and parameters of the
    model have been reset!

Apr 19 12:03:38 SimulationManager::set_status [Info]:
    Temporal resolution changed from 0.1 to 1 ms.
Initial weight: 1.0, Updated weight: 1.2001792723059206

Apr 19 12:03:38 NodeManager::prepare_nodes [Info]:
    Preparing 6 nodes for simulation.

Apr 19 12:03:38 SimulationManager::start_updating_ [Info]:
    Number of local nodes: 6
    Simulation time (ms): 1499
    Number of OpenMP threads: 1
    Not using MPI

Apr 19 12:03:38 SimulationManager::run [Info]:
    Simulation finished.

Apr 19 12:03:38 Install [Info]:
    loaded module nestml_4940100b28f446be95429cd7b36f439e_module

Apr 19 12:03:38 correlation_detector [Info]:
    Default for delta_tau changed from 0.5 to 5 ms

Apr 19 12:03:38 correlomatrix_detector [Info]:
    Default for delta_tau changed from 0.5 to 5 ms

Apr 19 12:03:38 correlospinmatrix_detector [Info]:
    Default for delta_tau changed from 0.1 to 1 ms

Apr 19 12:03:38 iaf_psc_delta_neuron_nestml [Warning]:
    Simulation resolution has changed. Internal state and parameters of the
    model have been reset!

Apr 19 12:03:38 iaf_psc_delta_neuron_nestml__with_stdp_triplet_nn_synapse_nestml [Warning]:
    Simulation resolution has changed. Internal state and parameters of the
    model have been reset!

Apr 19 12:03:38 SimulationManager::set_status [Info]:
    Temporal resolution changed from 0.1 to 1 ms.
Initial weight: 1.0, Updated weight: 1.5398255566140917

Apr 19 12:03:38 NodeManager::prepare_nodes [Info]:
    Preparing 6 nodes for simulation.

Apr 19 12:03:38 SimulationManager::start_updating_ [Info]:
    Number of local nodes: 6
    Simulation time (ms): 1204
    Number of OpenMP threads: 1
    Not using MPI

Apr 19 12:03:38 SimulationManager::run [Info]:
    Simulation finished.

Plot: Weight change as a function of frequency

[12]:
%matplotlib inline
fig, axes = plt.subplots()
ls1 = axes.plot(freqs, dw_dict_nn[delta_t[0]], color='r')
ls2 = axes.plot(freqs, dw_dict_nn[delta_t[1]], linestyle='--', color='r')
axes.plot(freqs, dw_dict[delta_t[0]], color='b')
axes.plot(freqs, dw_dict[delta_t[1]], linestyle='--', color='b')

axes.set_xlabel(r'${\rho}(Hz)$')
axes.set_ylabel(r'${\Delta}w$')

lines = axes.get_lines()
legend = plt.legend([lines[i] for i in [0,2]], ['Nearest spike', 'All-to-all'])
legend2 = plt.legend([ls1[0], ls2[0]], [r'${\Delta}t = 10ms$', r'${\Delta}t = -10ms$'], loc = 4)
axes.add_artist(legend)
[12]:
<matplotlib.legend.Legend at 0x7fd58c702d10>
../../_images/tutorials_triplet_stdp_synapse_triplet_stdp_synapse_26_1.png

Triplet protocol

In the first triplet protocol, each triplet consists of two presynaptic spikes and one postsynaptic spike separated by \(\Delta{t_1} = t^{post} - t_1^{pre}\) and \(\Delta{t_2} = t^{post} - t_2^{pre}\) where \(t_1^{pre}\) and \(t_2^{pre}\) are the presynaptic spikes of the triplet.

The second triplet protocol is similar to the first with the difference that it contains two postsynaptic spikes and one presynaptic spike. In this case, \(\Delta{t_1} = t_1^{post} - t^{pre}\) and \(\Delta{t_2} = t_2^{post} - t^{pre}\).

[13]:
def create_triplet_spikes(_delays, n, trip_delay=1):
    _dt1 = abs(_delays[0])
    _dt2 = abs(_delays[1])
    _interval = _dt1 + _dt2

    # pre_spikes
    start = 1
    stop = 0
    pre_spike_times = []
    for i in range(n):
        start = stop + 1 if i == 0 else stop + trip_delay
        stop = start + _interval
        pre_spike_times = np.hstack([pre_spike_times, [start, stop]])

    # post_spikes
    start = 1 + _dt1
    step = _interval + trip_delay
    stop = start + n * step
    post_spike_times = np.arange(start, stop, step).astype(float)

    return pre_spike_times, post_spike_times
[14]:
pre_spike_times, post_spike_times = create_triplet_spikes((5, -5), 2, 10)
l = []
l.append(post_spike_times)
l.append(pre_spike_times)
colors1 = ['C{}'.format(i) for i in range(2)]

fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(10, 3))
ax1.eventplot(l, colors=colors1)
ax1.legend(['post', 'pre'])

l = []
l.append(pre_spike_times)
l.append(post_spike_times)
ax2.eventplot(l, colors=colors1)
ax2.legend(['post', 'pre'])
plt.tight_layout()
../../_images/tutorials_triplet_stdp_synapse_triplet_stdp_synapse_29_0.png

STDP model with triplets

The standard STDP model fails to reproduce the triplet experiments shown in [2] and [3]. The experments show a clear asymmetry between the pre-post-pre and post-pre-post protocols, but the standard STDP rule fails to reproduce it.

3ffe7261cb274d9a9dd1eea60e91220c

Triplet model with triplet protocol

Let us try to formulate the two triplet protocols using the triplet model and check if we can reproduce the asymmetry in the change in weights.

[15]:
# Simulation
def run_triplet_protocol_simulation(module_name, neuron_model_name, synapse_model_name,
                                    neuron_opts, nest_syn_opts,
                                    spike_delays, n_triplets = 1, triplet_delay = 1000,
                                    pre_post_pre=True):
    dw_vec= []

    # For pre-post-pre triplets
    for _delays in spike_delays:
        pre_spike_times, post_spike_times = create_triplet_spikes(_delays, n_triplets, triplet_delay)
        if not pre_post_pre: # swap the spike arrays
            post_spike_times, pre_spike_times = pre_spike_times, post_spike_times

        sim_time = max(np.amax(pre_spike_times), np.amax(post_spike_times)) + 10. + 3 * syn_opts["delay"]

        print('Simulating for (delta_t1, delta_t2) = ({}, {})'.format(_delays[0], _delays[1]))
        dw = run_triplet_stdp_network(module_name, neuron_model_name, synapse_model_name,
                                      neuron_opts, nest_syn_opts,
                                      pre_spike_times=pre_spike_times,
                                      post_spike_times=post_spike_times,
                                      sim_time=sim_time)
        dw_vec.append(dw)

    return dw_vec
[16]:
# All to all - Parameters are taken from [4]
syn_opts = {
        'delay': 1.,
        'tau_minus': 33.7,
        'tau_plus': 16.8,
        'tau_x': 946.,
        'tau_y': 27.,
        'A2_plus': 6.1e-3,
        'A3_plus': 6.7e-3,
        'A2_minus': 1.6e-3,
        'A3_minus': 1.4e-3,
        'Wmax':  50.,
        'Wmin' : 0.,
        'w': 1.
}

synapse_suffix = neuron_model_name[neuron_model_name.find("_with_")+6:]
neuron_opts_nn = {'tau_minus__for_' + synapse_suffix: syn_opts['tau_minus'],
                  'tau_y__for_' + synapse_suffix: syn_opts['tau_y']}

nest_syn_opts = syn_opts.copy()
nest_syn_opts.pop('tau_minus')
nest_syn_opts.pop('tau_y')

[16]:
27.0
[17]:
# Nearest spike - Parameters are taken from [4]
syn_opts_nn = {
        'delay': 1.,
        'tau_minus': 33.7,
        'tau_plus': 16.8,
        'tau_x': 575.,
        'tau_y': 47.,
        'A2_plus': 4.6e-3,
        'A3_plus': 9.1e-3,
        'A2_minus': 3e-3,
        'A3_minus': 7.5e-9,
        'Wmax':  50.,
        'Wmin' : 0.,
        'w': 1.
}

synapse_suffix_nn = neuron_model_name_nn[neuron_model_name_nn.find("_with_")+6:]
neuron_opts_nn = {'tau_minus__for_' + synapse_suffix_nn: syn_opts_nn['tau_minus'],
                  'tau_y__for_' + synapse_suffix_nn: syn_opts_nn['tau_y']}

nest_syn_opts_nn = syn_opts_nn.copy()
nest_syn_opts_nn.pop('tau_minus')
nest_syn_opts_nn.pop('tau_y')
[17]:
47.0

pre-post-pre triplet

[18]:
pre_post_pre_delays = [(5, -5), (10, -10), (15, -5), (5, -15)]

# All-to-All interation
dw_vec = run_triplet_protocol_simulation(module_name, neuron_model_name, synapse_model_name,
                                         neuron_opts, nest_syn_opts,
                                         pre_post_pre_delays,
                                         n_triplets=1,
                                         triplet_delay=1000)

# Nearest spike interaction
dw_vec_nn = run_triplet_protocol_simulation(module_name_nn, neuron_model_name_nn, synapse_model_name_nn,
                                            neuron_opts_nn, nest_syn_opts_nn,
                                            pre_post_pre_delays,
                                            n_triplets=1,
                                            triplet_delay=1000)
Simulating for (delta_t1, delta_t2) = (5, -5)

Apr 19 12:03:40 Install [Info]:
    loaded module nestml_3c70a8ed53be4c46854ae5b0aa248ab9_module
Initial weight: 1.0, Updated weight: 1.0003735276417982
Simulating for (delta_t1, delta_t2) = (10, -10)

Apr 19 12:03:40 correlation_detector [Info]:
    Default for delta_tau changed from 0.5 to 5 ms

Apr 19 12:03:40 correlomatrix_detector [Info]:
    Default for delta_tau changed from 0.5 to 5 ms

Apr 19 12:03:40 correlospinmatrix_detector [Info]:
    Default for delta_tau changed from 0.1 to 1 ms

Apr 19 12:03:40 iaf_psc_delta_neuron_nestml [Warning]:
    Simulation resolution has changed. Internal state and parameters of the
    model have been reset!

Apr 19 12:03:40 iaf_psc_delta_neuron_nestml__with_stdp_triplet_synapse_nestml [Warning]:
    Simulation resolution has changed. Internal state and parameters of the
    model have been reset!

Apr 19 12:03:40 SimulationManager::set_status [Info]:
    Temporal resolution changed from 0.1 to 1 ms.

Apr 19 12:03:40 NodeManager::prepare_nodes [Info]:
    Preparing 6 nodes for simulation.

Apr 19 12:03:40 SimulationManager::start_updating_ [Info]:
    Number of local nodes: 6
    Simulation time (ms): 24
    Number of OpenMP threads: 1
    Not using MPI

Apr 19 12:03:40 SimulationManager::run [Info]:
    Simulation finished.

Apr 19 12:03:40 Install [Info]:
    loaded module nestml_3c70a8ed53be4c46854ae5b0aa248ab9_module

Apr 19 12:03:40 correlation_detector [Info]:
    Default for delta_tau changed from 0.5 to 5 ms

Apr 19 12:03:40 correlomatrix_detector [Info]:
    Default for delta_tau changed from 0.5 to 5 ms

Apr 19 12:03:40 correlospinmatrix_detector [Info]:
    Default for delta_tau changed from 0.1 to 1 ms

Apr 19 12:03:40 iaf_psc_delta_neuron_nestml [Warning]:
    Simulation resolution has changed. Internal state and parameters of the
    model have been reset!

Apr 19 12:03:40 iaf_psc_delta_neuron_nestml__with_stdp_triplet_synapse_nestml [Warning]:
    Simulation resolution has changed. Internal state and parameters of the
    model have been reset!

Apr 19 12:03:40 SimulationManager::set_status [Info]:
    Temporal resolution changed from 0.1 to 1 ms.
Initial weight: 1.0, Updated weight: 0.9998230228609227
Simulating for (delta_t1, delta_t2) = (15, -5)

Apr 19 12:03:40 NodeManager::prepare_nodes [Info]:
    Preparing 6 nodes for simulation.

Apr 19 12:03:40 SimulationManager::start_updating_ [Info]:
    Number of local nodes: 6
    Simulation time (ms): 34
    Number of OpenMP threads: 1
    Not using MPI

Apr 19 12:03:40 SimulationManager::run [Info]:
    Simulation finished.

Apr 19 12:03:40 Install [Info]:
    loaded module nestml_3c70a8ed53be4c46854ae5b0aa248ab9_module

Apr 19 12:03:40 correlation_detector [Info]:
    Default for delta_tau changed from 0.5 to 5 ms

Apr 19 12:03:40 correlomatrix_detector [Info]:
    Default for delta_tau changed from 0.5 to 5 ms

Apr 19 12:03:40 correlospinmatrix_detector [Info]:
    Default for delta_tau changed from 0.1 to 1 ms

Apr 19 12:03:40 iaf_psc_delta_neuron_nestml [Warning]:
    Simulation resolution has changed. Internal state and parameters of the
    model have been reset!

Apr 19 12:03:40 iaf_psc_delta_neuron_nestml__with_stdp_triplet_synapse_nestml [Warning]:
    Simulation resolution has changed. Internal state and parameters of the
    model have been reset!
Initial weight: 1.0, Updated weight: 0.9984719712644969
Simulating for (delta_t1, delta_t2) = (5, -15)

Apr 19 12:03:40 SimulationManager::set_status [Info]:
    Temporal resolution changed from 0.1 to 1 ms.

Apr 19 12:03:40 NodeManager::prepare_nodes [Info]:
    Preparing 6 nodes for simulation.

Apr 19 12:03:40 SimulationManager::start_updating_ [Info]:
    Number of local nodes: 6
    Simulation time (ms): 34
    Number of OpenMP threads: 1
    Not using MPI

Apr 19 12:03:40 SimulationManager::run [Info]:
    Simulation finished.

Apr 19 12:03:40 Install [Info]:
    loaded module nestml_3c70a8ed53be4c46854ae5b0aa248ab9_module

Apr 19 12:03:40 correlation_detector [Info]:
    Default for delta_tau changed from 0.5 to 5 ms

Apr 19 12:03:40 correlomatrix_detector [Info]:
    Default for delta_tau changed from 0.5 to 5 ms

Apr 19 12:03:40 correlospinmatrix_detector [Info]:
    Default for delta_tau changed from 0.1 to 1 ms

Apr 19 12:03:40 iaf_psc_delta_neuron_nestml [Warning]:
    Simulation resolution has changed. Internal state and parameters of the
    model have been resetInitial weight: 1.0, Updated weight: 1.001383086591746
Simulating for (delta_t1, delta_t2) = (5, -5)
!

Apr 19 12:03:40 iaf_psc_delta_neuron_nestml__with_stdp_triplet_synapse_nestml [Warning]:
    Simulation resolution has changed. Internal state and parameters of the
    model have been reset!

Apr 19 12:03:40 SimulationManager::set_status [Info]:
    Temporal resolution changed from 0.1 to 1 ms.

Apr 19 12:03:40 NodeManager::prepare_nodes [Info]:
    Preparing 6 nodes for simulation.

Apr 19 12:03:40 SimulationManager::start_updating_ [Info]:
    Number of local nodes: 6
    Simulation time (ms): 34
    Number of OpenMP threads: 1
    Not using MPI

Apr 19 12:03:40 SimulationManager::run [Info]:
    Simulation finished.

Apr 19 12:03:40 Install [Info]:
    loaded module nestml_4940100b28f446be95429cd7b36f439e_module

Apr 19 12:03:40 correlation_detector [Info]:
    Default for delta_tau changed from 0.5 to 5 ms

Apr 19 12:03:40 correlomatrix_detector [Info]:
    Default for delta_tau changed from 0.5 to 5 ms

Apr 19 12:03:40 correlospinmatrix_detector [Info]:
    Default fInitial weight: 1.0, Updated weight: 1.0005542494412774
or delta_tau changed from 0.1 to 1 ms

Apr 19 12:03:40 iaf_psc_delta_neuron_nestml [Warning]:
    Simulation resolution has changed. Internal state and parameters of the
    model have been reset!

Apr 19 12:03:40 iaf_psc_delta_neuron_nestml__with_stdp_triplet_nn_synapse_nestml [Warning]:
    Simulation resolution has changed. Internal state and parameters of the
    model have been reset!

Apr 19 12:03:40 SimulationManager::set_status [Info]:
    Temporal resolution changed from 0.1 to 1 ms.

Apr 19 12:03:40 NodeManager::prepare_nodes [Info]:
    Preparing 6 nodes for simulation.

Apr 19 12:03:40 SimulationManager::start_updating_ [Info]:
    Number of local nodes: 6
    Simulation time (ms): 24
    Number of OpenMP threads: 1
    Not using MPI

Apr 19 12:03:40 SimulationManager::run [Info]:
    Simulation finished.
Simulating for (delta_t1, delta_t2) = (10, -10)

Apr 19 12:03:40 Install [Info]:
    loaded module nestml_4940100b28f446be95429cd7b36f439e_module

Apr 19 12:03:40 correlation_detector [Info]:
    Default for delta_tau changed from 0.5 to 5 ms

Apr 19 12:03:40 correlomatrix_detector [Info]:
    Default for delta_tau changed from 0.5 to 5 ms

Apr 19 12:03:40 correlospinmatrix_detector [Info]:
    Default for delta_tau changed from 0.1 to 1 ms

Apr 19 12:03:40 iaf_psc_delta_neuron_nestml [Warning]:
    Simulation resolution has changed. Internal state and parameters of the
    model have been reset!

Apr 19 12:03:40 iaf_psc_delta_neuron_nestml__with_stdp_triplet_nn_synapse_nestml [Warning]:
    Simulation resolution has changed. Internal state and parameters of the
    model have been reset!

Apr 19 12:03:40 SimulationManager::set_status [Info]:
    Temporal resolution changed from 0.1 to 1 ms.
Initial weight: 1.0, Updated weight: 1.0000931206450185
Simulating for (delta_t1, delta_t2) = (15, -5)

Apr 19 12:03:40 NodeManager::prepare_nodes [Info]:
    Preparing 6 nodes for simulation.

Apr 19 12:03:40 SimulationManager::start_updating_ [Info]:
    Number of local nodes: 6
    Simulation time (ms): 34
    Number of OpenMP threads: 1
    Not using MPI
Initial weight: 1.0, Updated weight: 0.9991105337807658
Simulating for (delta_t1, delta_t2) = (5, -15)

Apr 19 12:03:40 SimulationManager::run [Info]:
    Simulation finished.

Apr 19 12:03:40 Install [Info]:
    loaded module nestml_4940100b28f446be95429cd7b36f439e_module

Apr 19 12:03:40 correlation_detector [Info]:
    Default for delta_tau changed from 0.5 to 5 ms

Apr 19 12:03:40 correlomatrix_detector [Info]:
    Default for delta_tau changed from 0.5 to 5 ms

Apr 19 12:03:40 correlospinmatrix_detector [Info]:
    Default for delta_tau changed from 0.1 to 1 ms

Apr 19 12:03:40 iaf_psc_delta_neuron_nestml [Warning]:
    Simulation resolution has changed. Internal state and parameters of the
    model have been reset!

Apr 19 12:03:40 iaf_psc_delta_neuron_nestml__with_stdp_triplet_nn_synapse_nestml [Warning]:
    Simulation resolution has changed. Internal state and parameters of the
    model have been reset!

Apr 19 12:03:40 SimulationManager::set_status [Info]:
    Temporal resolution changed from 0.1 to 1 ms.

Apr 19 12:03:40 NodeManager::prepare_nodes [Info]:
    Preparing 6 nodes for simulation.

Apr 19 12:03:40 SimulationManager::start_updating_ [Info]:
    Number of local nodes: 6
    Simulation time (ms): 34
    Number of OpenMP threads: 1
    Not using MPI

Apr 19 12:03:40 SimulationManager::run [Info]:
    Simulation finished.

Apr 19 12:03:40 Install [Info]:
    loaded module nestml_4940100b28f446be95429cd7b36f439e_module

Apr 19 12:03:40 correlation_detector [Info]:
    Default for delta_tau changed from 0.5 to 5 ms

Apr 19 12:03:40 correlomatrix_detector [Info]:
    Default for delta_tau changed from 0.5 to 5 ms

Apr 19 12:03:40 correlospinmatrix_detector [Info]:
    Default for delta_tau changed from 0.1 to 1 ms

Apr 19 12:03:40 iaf_psc_delta_neuron_nestml [Warning]:
    Simulation resolution has changed. Internal state and parameters of the
    model have been reset!

Apr 19 12:03:40 iaf_psc_delta_neuron_nestml__with_stdp_triplet_nn_synapse_nestml [Warning]:
    Simulation resolution has changed. Internal state and parameters of the
    model have been reset!

Apr 19 12:03:40 SimulationManager::set_status [Info]:
    Temporal resolution changed from 0.1 to 1 ms.
Initial weight: 1.0, Updated weight: 1.0012383200640604

Apr 19 12:03:40 NodeManager::prepare_nodes [Info]:
    Preparing 6 nodes for simulation.

Apr 19 12:03:40 SimulationManager::start_updating_ [Info]:
    Number of local nodes: 6
    Simulation time (ms): 34
    Number of OpenMP threads: 1
    Not using MPI

Apr 19 12:03:40 SimulationManager::run [Info]:
    Simulation finished.
[19]:
# Plot
bar_width = 0.25
fig, axes = plt.subplots()
br1 = np.arange(len(pre_post_pre_delays))
br2 = [x + bar_width for x in br1]
axes.bar(br1, dw_vec, width=bar_width, color='b')
axes.bar(br2, dw_vec_nn, width=bar_width, color='r')
axes.set_xticks([r + bar_width for r in range(len(br1))])
axes.set_xticklabels(pre_post_pre_delays)
axes.set_xlabel(r'${(\Delta{t_1}, \Delta{t_2})} \: [ms]$')
axes.set_ylabel(r'${\Delta}w$')
plt.show()
../../_images/tutorials_triplet_stdp_synapse_triplet_stdp_synapse_37_0.png

post-pre-post triplet

[20]:
post_pre_post_delays = [(-5, 5), (-10, 10), (-5, 15), (-15, 5)]

# All-to-All interaction
dw_vec = run_triplet_protocol_simulation(module_name, neuron_model_name, synapse_model_name,
                                         neuron_opts, nest_syn_opts,
                                         post_pre_post_delays,
                                         n_triplets=10,
                                         triplet_delay=1000,
                                         pre_post_pre=False)

# Nearest spike interaction
dw_vec_nn = run_triplet_protocol_simulation(module_name_nn, neuron_model_name_nn, synapse_model_name_nn,
                                            neuron_opts_nn, nest_syn_opts_nn,
                                            post_pre_post_delays,
                                            n_triplets=10,
                                            triplet_delay=1000,
                                            pre_post_pre=False)
Simulating for (delta_t1, delta_t2) = (-5, 5)

Apr 19 12:03:41 Install [Info]:
    loaded module nestml_3c70a8ed53be4c46854ae5b0aa248ab9_module

Apr 19 12:03:41 correlation_detector [Info]:
    Default for delta_tau changed from 0.5 to 5 ms

Apr 19 12:03:41 correlomatrix_detector [Info]:
    Default for delta_tau changed from 0.5 to 5 ms

Apr 19 12:03:41 correlospinmatrix_detector [Info]:
    Default for delta_tau changed from 0.1 to 1 ms

Apr 19 12:03:41 iaf_psc_delta_neuron_nestml [Warning]:
    Simulation resolution has changed. Internal state and parameters of the
    model have been reset!

Apr 19 12:03:41 iaf_psc_delta_neuron_nestml__with_stdp_triplet_synapse_nestml [Warning]:
    Simulation resolution has changed. Internal state and parameters of the
    model have been reset!

Apr 19 12:03:41 SimulationManager::set_status [Info]:
    Temporal resolution changed from 0.1 to 1 ms.
Initial weight: 1.0, Updated weight: 1.0452168105331474
Simulating for (delta_t1, delta_t2) = (-10, 10)

Apr 19 12:03:41 NodeManager::prepare_nodes [Info]:
    Preparing 6 nodes for simulation.

Apr 19 12:03:41 SimulationManager::start_updating_ [Info]:
    Number of local nodes: 6
    Simulation time (ms): 9114
    Number of OpenMP threads: 1
    Not using MPI

Apr 19 12:03:41 SimulationManager::run [Info]:
    Simulation finished.

Apr 19 12:03:41 Install [Info]:
    loaded module nestml_3c70a8ed53be4c46854ae5b0aa248ab9_module

Apr 19 12:03:41 correlation_detector [Info]:
    Default for delta_tau changed from 0.5 to 5 ms

Apr 19 12:03:41 correlomatrix_detector [Info]:
    Default for delta_tau changed from 0.5 to 5 ms

Apr 19 12:03:41 correlospinmatrix_detector [Info]:
    Default for delta_tau changed from 0.1 to 1 ms

Apr 19 12:03:41 iaf_psc_delta_neuron_nestml [Warning]:
    Simulation resolution has changed. Internal state and parameters of the
    model have been reset!

Apr 19 12:03:41 iaf_psc_delta_neuron_nestml__with_stdp_triplet_synapse_nestml [Warning]:
    Simulation resolution has changed. Internal state and parameters of the
    model have been reset!

Apr 19 12:03:41 SimulationManager::set_status [Info]:
    Temporal resolution changed from 0.1 to 1 ms.

Apr 19 12:03:41 NodeManager::prepare_nodes [Info]:
    Preparing 6 nodes for simulation.

Apr 19 12:03:41 SimulationManager::start_updating_ [Info]:
    Number of local nodes: 6
    Simulation time (ms): 9214
    Number of OpenMP thrInitial weight: 1.0, Updated weight: 1.0275785817728278
Simulating for (delta_t1, delta_t2) = (-5, 15)
eads: 1
    Not using MPI

Apr 19 12:03:41 SimulationManager::run [Info]:
    Simulation finished.

Apr 19 12:03:41 Install [Info]:
    loaded module nestml_3c70a8ed53be4c46854ae5b0aa248ab9_module

Apr 19 12:03:41 correlation_detector [Info]:
    Default for delta_tau changed from 0.5 to 5 ms

Apr 19 12:03:41 correlomatrix_detector [Info]:
    Default for delta_tau changed from 0.5 to 5 ms

Apr 19 12:03:41 correlospinmatrix_detector [Info]:
    Default for delta_tau changed from 0.1 to 1 ms

Apr 19 12:03:41 iaf_psc_delta_neuron_nestml [Warning]:
    Simulation resolution has changed. Internal state and parameters of the
    model have been reset!

Apr 19 12:03:41 iaf_psc_delta_neuron_nestml__with_stdp_triplet_synapse_nestml [Warning]:
    Simulation resolution has changed. Internal state and parameters of the
    model have been reset!

Apr 19 12:03:41 SimulationManager::set_status [Info]:
    Temporal resolution changed from 0.1 to 1 ms.

Apr 19 12:03:41 NodeManager::prepare_nodes [Info]:
    Preparing 6 nodes for simulation.

Apr 19 12:03:41 SimulationManager::start_updaInitial weight: 1.0, Updated weight: 1.008936270857372
ting_ [Info]:
    Number of local nodes: 6
    Simulation time (ms): 9214
    Number of OpenMP threads: 1
    Not using MPI

Apr 19 12:03:41 SimulationManager::run [Info]:
    Simulation finished.
Simulating for (delta_t1, delta_t2) = (-15, 5)

Apr 19 12:03:41 Install [Info]:
    loaded module nestml_3c70a8ed53be4c46854ae5b0aa248ab9_module

Apr 19 12:03:41 correlation_detector [Info]:
    Default for delta_tau changed from 0.5 to 5 ms

Apr 19 12:03:41 correlomatrix_detector [Info]:
    Default for delta_tau changed from 0.5 to 5 ms

Apr 19 12:03:41 correlospinmatrix_detector [Info]:
    Default for delta_tau changed from 0.1 to 1 ms

Apr 19 12:03:41 iaf_psc_delta_neuron_nestml [Warning]:
    Simulation resolution has changed. Internal state and parameters of the
    model have been reset!

Apr 19 12:03:41 iaf_psc_delta_neuron_nestml__with_stdp_triplet_synapse_nestml [Warning]:
    Simulation resolution has changed. Internal state and parameters of the
    model have been reset!

Apr 19 12:03:41 SimulationManager::set_status [Info]:
    Temporal resolution changed from 0.1 to 1 ms.

Apr 19 12:03:41 NodeManager::prepare_nodes [Info]:
    Preparing 6 nodes for simulation.

Apr 19 12:03:41 SimulationManager::start_updating_ [Info]:
    Number of local nodes: 6
    Simulation time (ms): 9214
    Number of OpenMP threads: 1
    Not using MPI

Apr 19 12:03:41 SimulationManager::run [Info]:
    Simulation finished.
Initial weight: 1.0, Updated weight: 1.050539844879153
Simulating for (delta_t1, delta_t2) = (-5, 5)

Apr 19 12:03:41 Install [Info]:
    loaded module nestml_4940100b28f446be95429cd7b36f439e_module

Apr 19 12:03:41 correlation_detector [Info]:
    Default for delta_tau changed from 0.5 to 5 ms

Apr 19 12:03:41 correlomatrix_detector [Info]:
    Default for delta_tau changed from 0.5 to 5 ms

Apr 19 12:03:41 correlospinmatrix_detector [Info]:
    Default for delta_tau changed from 0.1 to 1 ms

Apr 19 12:03:41 iaf_psc_delta_neuron_nestml [Warning]:
    Simulation resolution has changed. Internal state and parameters of the
    model have been reset!

Apr 19 12:03:41 iaf_psc_delta_neuron_nestml__with_stdp_triplet_nn_synapse_nestml [Warning]:
    Simulation resolution has changed. Internal state and parameters of the
    model have been reset!

Apr 19 12:03:41 SimulationManager::set_status [Info]:
    Temporal resolution changed from 0.1 to 1 ms.

Apr 19 12:03:41 NodeManager::prepare_nodes [Info]:
    Preparing 6 nodes for simulation.

Apr 19 12:03:41 SimulationManager::start_updating_ [Info]:
    Number of local nodes: 6
    Simulation time (ms): 9114
    Number of OpenMP threads: 1
    Not using MPI

Apr 19 12:03:41 SimulationManager::run [Info]:
    Simulation finished.
Initial weight: 1.0, Updated weight: 1.048644757755009
Simulating for (delta_t1, delta_t2) = (-10, 10)

Apr 19 12:03:41 Install [Info]:
    loaded module nestml_4940100b28f446be95429cd7b36f439e_module

Apr 19 12:03:41 correlation_detector [Info]:
    Default for delta_tau changed from 0.5 to 5 ms

Apr 19 12:03:41 correlomatrix_detector [Info]:
    Default for delta_tau changed from 0.5 to 5 ms

Apr 19 12:03:41 correlospinmatrix_detector [Info]:
    Default for delta_tau changed from 0.1 to 1 ms

Apr 19 12:03:41 iaf_psc_delta_neuron_nestml [Warning]:
    Simulation resolution has changed. Internal state and parameters of the
    model have been reset!

Apr 19 12:03:41 iaf_psc_delta_neuron_nestml__with_stdp_triplet_nn_synapse_nestml [Warning]:
    Simulation resolution has changed. Internal state and parameters of the
    model have been reset!

Apr 19 12:03:41 SimulationManager::set_status [Info]:
    Temporal resolution changed from 0.1 to 1 ms.

Apr 19 12:03:41 NodeManager::prepare_nodes [Info]:
    Preparing 6 nodes for simulation.
Initial weight: 1.0, Updated weight: 1.026345906763637

Apr 19 12:03:41 SimulationManager::start_updating_ [Info]:
    Number of local nodes: 6
    Simulation time (ms): 9214
    Number of OpenMP threads: 1
    Not using MPI

Apr 19 12:03:41 SimulationManager::run [Info]:
    Simulation finished.
Simulating for (delta_t1, delta_t2) = (-5, 15)

Apr 19 12:03:41 Install [Info]:
    loaded module nestml_4940100b28f446be95429cd7b36f439e_module

Apr 19 12:03:41 correlation_detector [Info]:
    Default for delta_tau changed from 0.5 to 5 ms

Apr 19 12:03:41 correlomatrix_detector [Info]:
    Default for delta_tau changed from 0.5 to 5 ms

Apr 19 12:03:41 correlospinmatrix_detector [Info]:
    Default for delta_tau changed from 0.1 to 1 ms

Apr 19 12:03:41 iaf_psc_delta_neuron_nestml [Warning]:
    Simulation resolution has changed. Internal state and parameters of the
    model have been reset!

Apr 19 12:03:41 iaf_psc_delta_neuron_nestml__with_stdp_triplet_nn_synapse_nestml [Warning]:
    Simulation resolution has changed. Internal state and parameters of the
    model have been reset!

Apr 19 12:03:41 SimulationManager::set_status [Info]:
    Temporal resolution changed from 0.1 to 1 ms.

Apr 19 12:03:41 NodeManager::prepare_nodes [Info]:
    Preparing 6 nodes for simulation.

Apr 19 12:03:41 SimulationManager::start_updating_ [Info]:
    Number of local nodes: 6
    Simulation time (ms): 9214
    Number of OpenMP Initial weight: 1.0, Updated weight: 1.0099778920748412
Simulating for (delta_t1, delta_t2) = (-15, 5)
threads: 1
    Not using MPI

Apr 19 12:03:41 SimulationManager::run [Info]:
    Simulation finished.

Apr 19 12:03:41 Install [Info]:
    loaded module nestml_4940100b28f446be95429cd7b36f439e_module

Apr 19 12:03:41 correlation_detector [Info]:
    Default for delta_tau changed from 0.5 to 5 ms

Apr 19 12:03:41 correlomatrix_detector [Info]:
    Default for delta_tau changed from 0.5 to 5 ms

Apr 19 12:03:41 correlospinmatrix_detector [Info]:
    Default for delta_tau changed from 0.1 to 1 ms

Apr 19 12:03:41 iaf_psc_delta_neuron_nestml [Warning]:
    Simulation resolution has changed. Internal state and parameters of the
    model have been reset!

Apr 19 12:03:41 iaf_psc_delta_neuron_nestml__with_stdp_triplet_nn_synapse_nestml [Warning]:
    Simulation resolution has changed. Internal state and parameters of the
    model have been reset!

Apr 19 12:03:41 SimulationManager::set_status [Info]:
    Temporal resolution changed from 0.1 to 1 ms.
Initial weight: 1.0, Updated weight: 1.0466078732990223

Apr 19 12:03:41 NodeManager::prepare_nodes [Info]:
    Preparing 6 nodes for simulation.

Apr 19 12:03:41 SimulationManager::start_updating_ [Info]:
    Number of local nodes: 6
    Simulation time (ms): 9214
    Number of OpenMP threads: 1
    Not using MPI

Apr 19 12:03:41 SimulationManager::run [Info]:
    Simulation finished.
[21]:
# Plot
bar_width = 0.25
fig, axes = plt.subplots()
br1 = np.arange(len(pre_post_pre_delays))
br2 = [x + bar_width for x in br1]
axes.bar(br1, dw_vec, width=bar_width, color='b')
axes.bar(br2, dw_vec_nn, width=bar_width, color='r')
axes.set_xticks([r + bar_width for r in range(len(br1))])
axes.set_xticklabels(post_pre_post_delays)
axes.set_xlabel(r'${(\Delta{t_1}, \Delta{t_2})} \: [ms]$')
axes.set_ylabel(r'${\Delta}w$')
plt.show()
../../_images/tutorials_triplet_stdp_synapse_triplet_stdp_synapse_40_0.png

Quadruplet protocol

This protocol is with a set of four spikes and defined as follows: a post-pre pair with a delay of \(\Delta{t_1} = t_1^{post} - t_1^{pre}< 0\) is followed after a time \(T\) with a pre-post pair with a delat of \(\Delta{t_2} = t_2^{post} - t_2^{pre} > 0\). When \(T\) is negative, a pre-post pair with a delay of \(\Delta{t_2} = t_2^{post} - t_2^{pre} > 0\) is followed by a post-pre pair with delay \(\Delta{t_1} = t_1^{post} - t_1^{pre}< 0\).

Try to formulate this protocol using the defined model and reproduce the following weight change window graph.