Ejemplo n.º 1
0
    def test_MultipleSynapses_all_to_all(self):
        """Test co-location of synapses when we use all_to_all as connection rule"""
        num_src = 3
        num_trg = 5
        syn_spec = nest.CollocatedSynapses({'weight': -2.},
                                           {'synapse_model': 'stdp_synapse', 'weight': -1.5},
                                           {'weight': 3})

        src = nest.Create('iaf_psc_alpha', num_src)
        trgt = nest.Create('iaf_psc_alpha', num_trg)

        nest.Connect(src, trgt, 'all_to_all', syn_spec=syn_spec)
        conns = nest.GetConnections()

        self.assertEqual(num_src * num_trg * len(syn_spec), len(conns))

        # source id's range from 1 to num_src
        ref_src = [s for s in range(1, num_src + 1) for _ in range(len(syn_spec)*num_trg)]
        # target id's are 4, 5, 6, 7, 8
        ref_trgt = []
        for t in [4, 5, 6, 7, 8]*num_src:
            # there are 3 elements in the syn_spec list
            ref_trgt.extend([t, t, t])

        ref_weight = [-2., -1.5, 3.]*num_src*num_trg
        ref_synapse_modules = ['static_synapse', 'stdp_synapse', 'static_synapse']*num_src*num_trg

        ref_conn_list = list(zip(ref_src, ref_trgt, ref_weight, ref_synapse_modules))
        sorted_conn_list = self.sort_connections(conns)

        self.assertEqual(ref_conn_list, sorted_conn_list)
Ejemplo n.º 2
0
    def test_MultipleSynapses_make_symmetric(self):
        """Test co-location of synapses when we use one_to_one with make_symmetric as connection rule"""
        num_src = 11
        num_trg = 11
        num_symmetric = 2
        syn_spec = nest.CollocatedSynapses({'weight': -1.5},
                                           {'synapse_model': 'stdp_synapse', 'weight': 3})

        src = nest.Create('iaf_psc_alpha', num_src)
        trgt = nest.Create('iaf_psc_alpha', num_trg)

        nest.Connect(src, trgt, {'rule': 'one_to_one', 'make_symmetric': True}, syn_spec=syn_spec)
        conns = nest.GetConnections()

        self.assertEqual(num_src * len(syn_spec) * num_symmetric, len(conns))

        # pre id's range from (1 to num_src) and (num_src+1 to (num_src + num_trgt)) because of make_symmetric
        ref_pre = [s for s in range(1, num_src + 1) for _ in range(len(syn_spec))]
        ref_pre = ref_pre + [t for t in range(num_src + 1, num_src + num_trg + 1) for _ in range(len(syn_spec))]

        # post id's range from (num_src + 1 to (num_src + num_trgt + 1)) and (1 to num_src) because of make_symmetric
        ref_post = [t for t in range(num_src + 1, num_src + num_trg + 1) for _ in range(len(syn_spec))]
        ref_post = ref_post + [s for s in range(1, num_src + 1) for _ in range(len(syn_spec))]

        ref_weight = [-1.5, 3.]*num_src*num_symmetric
        ref_synapse_modules = ['static_synapse', 'stdp_synapse']*num_src*num_symmetric

        ref_conn_list = list(zip(ref_pre, ref_post, ref_weight, ref_synapse_modules))
        sorted_conn_list = self.sort_connections(conns)

        self.assertEqual(ref_conn_list, sorted_conn_list)
Ejemplo n.º 3
0
    def test_MultipleSynapses_one_to_one(self):
        """Test co-location of synapses when we use one_to_one as connection rule"""
        num_src = 7
        num_trg = 7
        syn_spec = nest.CollocatedSynapses({'synapse_model': 'stdp_synapse', 'weight': -5.},
                                           {'weight': -1.5},
                                           {'synapse_model': 'stdp_synapse', 'weight': 3})

        src = nest.Create('iaf_psc_alpha', num_src)
        trgt = nest.Create('iaf_psc_alpha', num_trg)

        nest.Connect(src, trgt, 'one_to_one', syn_spec=syn_spec)
        conns = nest.GetConnections()

        self.assertEqual(num_src * len(syn_spec), len(conns))

        # source id's range from 1 to num_src
        ref_src = [s for s in range(1, num_src + 1) for _ in range(len(syn_spec))]
        # target id's range from (num_src + 1 to (num_src + num_trgt + 1))
        ref_trgt = [t for t in range(num_src + 1, num_src + num_trg + 1) for _ in range(len(syn_spec))]
        ref_weight = [-5., -1.5, 3.]*num_src
        ref_synapse_modules = ['stdp_synapse', 'static_synapse', 'stdp_synapse']*num_src

        ref_conn_list = list(zip(ref_src, ref_trgt, ref_weight, ref_synapse_modules))
        sorted_conn_list = self.sort_connections(conns)

        self.assertEqual(ref_conn_list, sorted_conn_list)
Ejemplo n.º 4
0
    def test_MultipleSynapses_receptor_type(self):
        """Test co-location of synapses with different receptor types"""
        num_src = 7
        num_trg = 7

        src = nest.Create('iaf_psc_exp_multisynapse', num_src)
        trgt = nest.Create('iaf_psc_exp_multisynapse', num_trg, {'tau_syn': [0.1 + i for i in range(num_trg)]})
        node = nest.Create('iaf_psc_alpha')

        syn_spec = nest.CollocatedSynapses({'synapse_model': 'stdp_synapse',
                                            'weight': 5.,
                                            'receptor_type': 2},
                                           {'weight': 1.5, 'receptor_type': 7},
                                           {'synapse_model': 'stdp_synapse', 'weight': 3, 'receptor_type': 5})

        nest.Connect(src, trgt, 'one_to_one', syn_spec=syn_spec)
        nest.Connect(node, node)  # should have receptor 0

        conns = nest.GetConnections()
        ref_receptor_type = [0] + [2]*num_src + [5]*num_src + [7]*num_src

        self.assertEqual(ref_receptor_type, sorted(conns.receptor))

        node_index = list(conns.source).index(node.global_id)
        node_receptor = conns.receptor[node_index]
        self.assertEqual(0, node_receptor)
Ejemplo n.º 5
0
    def test_MultipleSynapses_spatial_network_bernoulliSource(self):
        """test co-location of synapses for 3D spatial networks with pairwise Bernoulli on source"""
        num_src = 7
        num_trgt = 19
        p = 0.6

        spatial_nodes_src = nest.Create('iaf_psc_alpha', n=num_src,
                                        positions=nest.spatial.free(nest.random.uniform(), num_dimensions=3))
        spatial_nodes_trgt = nest.Create('iaf_psc_alpha', n=num_trgt,
                                         positions=nest.spatial.free(nest.random.uniform(), num_dimensions=3))

        nest.Connect(spatial_nodes_src, spatial_nodes_trgt, {'rule': 'pairwise_bernoulli', 'p': p},
                     nest.CollocatedSynapses({'delay': 1.7,
                                              'weight': nest.spatial_distributions.gaussian(nest.spatial.distance)},
                                             {'synapse_model': 'tsodyks_synapse'},
                                             {'weight': -nest.spatial_distributions.gaussian(nest.spatial.distance),
                                              'delay': 1.4}))

        conns = nest.GetConnections()
        num_conns = len(conns)
        num_conns_synapse = num_conns // 3

        self.assertLess(num_src * num_trgt * p * 2, len(conns))

        delays = [round(d, 1) for d in conns.delay]
        ref_delays = [1.]*num_conns_synapse + [1.4]*num_conns_synapse + [1.7]*num_conns_synapse

        self.assertEqual(sorted(delays), ref_delays)

        ref_synapse_model = ['tsodyks_synapse']*num_conns_synapse + ['static_synapse']*2*num_conns_synapse
        self.assertEqual(sorted(conns.synapse_model), sorted(ref_synapse_model))

        for w in sorted(conns.weight)[:num_conns_synapse]:
            self.assertLess(w, 0)
Ejemplo n.º 6
0
    def test_MultipleSynapses_spatial_network_bernoulliTarget(self):
        """test co-location of synapses for 3D spatial networks with pairwise Bernoulli on target"""
        num_src = 57
        num_trgt = 21
        p = 0.3

        spatial_nodes_src = nest.Create('iaf_psc_alpha', n=num_src,
                                        positions=nest.spatial.free(nest.random.uniform(), num_dimensions=3))
        spatial_nodes_trgt = nest.Create('iaf_psc_alpha', n=num_trgt,
                                         positions=nest.spatial.free(nest.random.uniform(), num_dimensions=3))

        nest.Connect(spatial_nodes_src, spatial_nodes_trgt,
                     {'rule': 'pairwise_bernoulli', 'p': p, 'use_on_source': False},
                     nest.CollocatedSynapses({'delay': 1.7, 'weight': -1.4},
                                             {'delay': nest.spatial_distributions.gaussian(nest.spatial.distance),
                                              'weight': 1.4}))

        conns = nest.GetConnections()
        num_conns = len(conns)
        num_conns_synapse = num_conns // 2

        self.assertGreater(num_src * num_trgt * p * 3, num_conns)

        delays = [round(d, 1) for d in sorted(conns.delay)[num_conns_synapse:]]
        ref_delays = [1.7]*num_conns_synapse

        self.assertEqual(sorted(delays), ref_delays)

        ref_weights = [-1.4]*num_conns_synapse + [1.4]*num_conns_synapse
        self.assertEqual(sorted(conns.weight), ref_weights)
Ejemplo n.º 7
0
    def test_MultipleSynapses_spatial_network_receptor_type(self):
        """test co-location of synapses for spatial networks with receptor_type"""
        num_src = 11
        num_trgt = 37
        indegree = 3
        max_receptor_type = 7

        spatial_nodes_src = nest.Create('iaf_psc_exp_multisynapse', num_src,
                                        {'tau_syn': [0.1 + i for i in range(max_receptor_type)]},
                                        positions=nest.spatial.free(nest.random.uniform(), num_dimensions=2))
        spatial_nodes_trgt = nest.Create('iaf_psc_exp_multisynapse', num_trgt,
                                         {'tau_syn': [0.1 + i for i in range(max_receptor_type)]},
                                         positions=nest.spatial.free(nest.random.uniform(), num_dimensions=2))

        receptor_type_a = max_receptor_type-3
        receptor_type_b = max_receptor_type
        nest.Connect(spatial_nodes_src, spatial_nodes_trgt, {'rule': 'fixed_indegree', 'indegree': indegree},
                     nest.CollocatedSynapses({'weight': 3.,
                                              'receptor_type': receptor_type_a},
                                             {'weight': nest.spatial_distributions.exponential(nest.spatial.distance),
                                              'delay': 1.4,
                                              'receptor_type': receptor_type_b}))
        conns = nest.GetConnections()
        self.assertEqual(num_trgt * indegree * 2, len(conns))
        reference = sorted([receptor_type_a, receptor_type_b]*num_trgt*indegree)
        self.assertEqual(sorted(conns.receptor), reference)
Ejemplo n.º 8
0
    def test_MultipleSynapses_spatial_network_fixedOutdegree(self):
        """test co-location of synapses for spatial networks with fixed outdegree"""
        num_src = 17
        num_trgt = 23
        outdegree = 4

        spatial_nodes_src = nest.Create('iaf_psc_alpha', n=num_src,
                                        positions=nest.spatial.free(nest.random.uniform(), num_dimensions=2))
        spatial_nodes_trgt = nest.Create('iaf_psc_alpha', n=num_trgt,
                                         positions=nest.spatial.free(nest.random.uniform(), num_dimensions=2))

        nest.Connect(spatial_nodes_src, spatial_nodes_trgt, {'rule': 'fixed_outdegree', 'outdegree': outdegree},
                     nest.CollocatedSynapses({'weight': -3., 'synapse_model': 'stdp_synapse'},
                                             {'synapse_model': 'tsodyks_synapse'},
                                             {'weight': nest.spatial_distributions.exponential(nest.spatial.distance),
                                              'delay': 1.4}))
        conns = nest.GetConnections()

        self.assertEqual(num_src * outdegree * 3, len(conns))

        weights = conns.weight
        self.assertEqual(sorted(weights)[:num_src * outdegree], [-3]*num_src*outdegree)

        ref_synapse_model = (['stdp_synapse']*num_src*outdegree +
                             ['tsodyks_synapse']*num_src*outdegree +
                             ['static_synapse']*num_src*outdegree)
        self.assertEqual(sorted(conns.synapse_model), sorted(ref_synapse_model))
Ejemplo n.º 9
0
    def test_MultipleSynapses_spatial_network_label(self):
        """test co-location of synapses for spatial networks with synapse label"""
        num_src = 11
        num_trgt = 37
        indegree = 3

        spatial_nodes_src = nest.Create('iaf_psc_alpha', n=num_src,
                                        positions=nest.spatial.free(nest.random.uniform(), num_dimensions=2))
        spatial_nodes_trgt = nest.Create('iaf_psc_alpha', n=num_trgt,
                                         positions=nest.spatial.free(nest.random.uniform(), num_dimensions=2))

        syn_label_a = 123
        syn_label_b = 456
        nest.Connect(spatial_nodes_src, spatial_nodes_trgt, {'rule': 'fixed_indegree', 'indegree': indegree},
                     nest.CollocatedSynapses({'weight': 3.,
                                              'synapse_model': 'stdp_synapse_lbl',
                                              'synapse_label': syn_label_a},
                                             {'weight': nest.spatial_distributions.exponential(nest.spatial.distance),
                                              'delay': 1.4,
                                              'synapse_model': 'stdp_synapse_lbl',
                                              'synapse_label': syn_label_b}))
        conns = nest.GetConnections()
        self.assertEqual(num_trgt * indegree * 2, len(conns))
        reference = sorted([syn_label_a, syn_label_b]*num_trgt*indegree)
        self.assertEqual(sorted(conns.get('synapse_label')), reference)
Ejemplo n.º 10
0
    def test_MultipleSynapses_spatial_network(self):
        """test co-location of synapses for spatial networks with fixed indegree"""
        num_src = 11
        num_trgt = 37
        indegree = 3

        spatial_nodes_src = nest.Create('iaf_psc_alpha',
                                        n=num_src,
                                        positions=nest.spatial.free(
                                            nest.random.uniform(),
                                            num_dimensions=2))
        spatial_nodes_trgt = nest.Create('iaf_psc_alpha',
                                         n=num_trgt,
                                         positions=nest.spatial.free(
                                             nest.random.uniform(),
                                             num_dimensions=2))

        nest.Connect(
            spatial_nodes_src, spatial_nodes_trgt, {
                'rule': 'fixed_indegree',
                'indegree': indegree
            },
            nest.CollocatedSynapses({'weight': -3.}, {
                'weight':
                nest.spatial_distributions.exponential(nest.spatial.distance),
                'delay':
                1.4
            }))
        conns = nest.GetConnections()

        self.assertEqual(num_trgt * indegree * 2, len(conns))

        weights = conns.weight
        self.assertEqual(
            sorted(weights)[:num_trgt * indegree], [-3] * num_trgt * indegree)
Ejemplo n.º 11
0
    def test_MultipleSynapses_fixed_indegree(self):
        """Test co-location of synapses when we use fixed_indegree as connection rule"""
        num_src = 7
        num_trg = 3
        indegree = 2
        syn_spec = nest.CollocatedSynapses({'weight': -2.}, {
            'synapse_model': 'stdp_synapse',
            'weight': -1.5
        }, {
            'synapse_model': 'stdp_synapse',
            'weight': 3
        })

        src = nest.Create('iaf_psc_alpha', num_src)
        trgt = nest.Create('iaf_psc_alpha', num_trg)

        nest.Connect(src,
                     trgt, {
                         'rule': 'fixed_indegree',
                         'indegree': indegree
                     },
                     syn_spec=syn_spec)
        conns = nest.GetConnections()

        self.assertEqual(num_trg * indegree * len(syn_spec), len(conns))

        ref_trgt = [
            t for t in trgt.tolist() for _ in range(indegree * len(syn_spec))
        ]
        ref_sm = (['static_synapse'] * num_trg * indegree +
                  ['stdp_synapse'] * num_trg * indegree +
                  ['stdp_synapse'] * num_trg * indegree)

        self.assertEqual(sorted(ref_trgt), sorted(conns.target))
        self.assertEqual(sorted(ref_sm), sorted(conns.synapse_model))
    def test_MultipleSynapses_receptor_type_ht_neuron(self):
        """Test co-location of synapses with different receptor types and ht_neuron"""
        num_src = 9
        num_trg = 9

        src = nest.Create('ht_neuron', num_src)
        trgt = nest.Create('ht_neuron', num_trg)

        syn_spec = nest.CollocatedSynapses(
            {
                'synapse_model': 'stdp_synapse',
                'weight': 5.,
                'receptor_type': 2
            }, {
                'weight': 1.5,
                'receptor_type': 4
            }, {
                'synapse_model': 'stdp_synapse',
                'weight': 3,
                'receptor_type': 3
            })

        nest.Connect(src, trgt, 'one_to_one', syn_spec=syn_spec)

        conns = nest.GetConnections()
        # receptors are 1 less than receptor_type for ht_neuron
        ref_receptor_type = [1] * num_src + [2] * num_src + [3] * num_src

        self.assertEqual(ref_receptor_type, sorted(conns.receptor))
Ejemplo n.º 13
0
    def test_MultipleSynapses(self):
        """Test co-location of synapses for very simple connection"""
        node = nest.Create('iaf_psc_alpha')
        nest.Connect(node, node, syn_spec=nest.CollocatedSynapses({'weight': -2.}, {'weight': 3.}))

        self.assertEqual(2, nest.num_connections)

        conns = nest.GetConnections()
        self.assertEqual([-2, 3], conns.weight)
    def test_Conngen_error_collocated_synapses(self):
        """
        Error handling for collocated synapses in conngen Connect
        """

        nest.ResetKernel()

        # Create a plain connection set
        cg = csa.cset(csa.oneToOne)
        connspec = {"rule": "conngen", "cg": cg}
        synspec = nest.CollocatedSynapses({'weight': -2.}, {'weight': 2.})

        pop = nest.Create('iaf_psc_alpha', 3)

        self.assertRaisesRegex(nest.kernel.NESTError, "BadProperty",
                               nest.Connect, pop, pop, connspec, synspec)