Source code for nest.tests.test_sp.test_disconnect
# -*- coding: utf-8 -*-
#
# test_disconnect.py
#
# This file is part of NEST.
#
# Copyright (C) 2004 The NEST Initiative
#
# NEST is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 2 of the License, or
# (at your option) any later version.
#
# NEST is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with NEST. If not, see <http://www.gnu.org/licenses/>.
import nest
import unittest
import numpy as np
__author__ = 'naveau'
try:
from mpi4py import MPI
except ImportError:
# Test without MPI
mpi_test = 0
else:
# Test with MPI
mpi_test = 1
mpi_test = nest.sli_func("statusdict/have_mpi ::") & mpi_test
[docs]class TestDisconnectSingle(unittest.TestCase):
[docs] def setUp(self):
nest.ResetKernel()
nest.set_verbosity('M_ERROR')
self.num_procs = 1
if mpi_test:
self.comm = MPI.COMM_WORLD
self.rank = self.comm.Get_rank()
assert(nest.Rank() == self.rank)
self.num_procs = 2
self.exclude_synapse_model = [
'stdp_dopamine_synapse',
'stdp_dopamine_synapse_lbl',
'stdp_dopamine_synapse_hpc',
'stdp_dopamine_synapse_hpc_lbl',
'rate_connection_instantaneous',
'rate_connection_instantaneous_lbl',
'rate_connection_delayed',
'rate_connection_delayed_lbl',
'gap_junction',
'gap_junction_lbl',
'diffusion_connection',
'diffusion_connection_lbl',
]
[docs] def test_synapse_deletion_one_to_one_no_sp(self):
for syn_model in nest.Models('synapses'):
if syn_model not in self.exclude_synapse_model:
nest.ResetKernel()
print(syn_model)
nest.SetKernelStatus(
{
'resolution': 0.1,
'total_num_virtual_procs': self.num_procs
}
)
neurons = nest.Create('iaf_psc_alpha', 4)
syn_dict = {'model': syn_model}
nest.Connect([neurons[0]], [neurons[2]],
"one_to_one", syn_dict)
nest.Connect([neurons[1]], [neurons[3]],
"one_to_one", syn_dict)
# Delete existent connection
conns = nest.GetConnections(
[neurons[0]], [neurons[2]], syn_model)
if mpi_test:
conns = self.comm.allgather(conns)
conns = filter(None, conns)
assert len(list(conns)) == 1
nest.DisconnectOneToOne(neurons[0], neurons[2], syn_dict)
conns = nest.GetConnections(
[neurons[0]], [neurons[2]], syn_model)
if mpi_test:
conns = self.comm.allgather(conns)
conns = filter(None, conns)
assert len(list(conns)) == 0
# Assert that one can not delete a non existent connection
conns1 = nest.GetConnections(
[neurons[0]], [neurons[1]], syn_model)
if mpi_test:
conns1 = self.comm.allgather(conns1)
conns1 = filter(None, conns1)
assert len(list(conns1)) == 0
try:
nest.DisconnectOneToOne(neurons[0], neurons[1], syn_dict)
assert False
except nest.NESTError:
print("Synapse deletion ok: " + syn_model)
[docs]def suite():
test_suite = unittest.makeSuite(TestDisconnectSingle, 'test')
return test_suite
if __name__ == '__main__':
unittest.main()