# -*- coding: utf-8 -*-
#
# test_connect_distributions.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 unittest
import nest
from . import test_connect_helpers as hf
HAVE_GSL = nest.sli_func("statusdict/have_gsl ::")
[docs]class TestDists(unittest.TestCase):
rule = 'all_to_all'
conn_dict = {'rule': rule}
label = 'weight'
# defauly synapse dictionary
model = 'static_synapse'
syn_dict = {'model': model}
# sizes of populations
Ndist1 = 40
Ndist2 = 40
# parameter for test of distributed parameter
pval = 0.05 # minimum p-value to pass kolmogorov smirnov test
[docs] def setUp(self):
nest.ResetKernel()
nest.sr("statusdict/threading :: (no) eq not")
if not nest.spp():
# no multi-threading
nest.SetKernelStatus({'grng_seed': 120,
'rng_seeds': [576]})
else:
# multi-threading
nest.SetKernelStatus({'local_num_threads': 2,
'grng_seed': 120,
'rng_seeds': [576, 886]})
pass
[docs] def setUpNetwork(self, conn_params=None, syn_dict=None):
conn_params['autapses'] = False
conn_params['multapses'] = False
self.pop1 = nest.Create('iaf_psc_alpha', self.Ndist1)
self.pop2 = nest.Create('iaf_psc_alpha', self.Ndist2)
nest.Connect(self.pop1, self.pop2, conn_params, syn_dict)
[docs] def testNormalDist(self):
syn_params = self.syn_dict.copy()
distribution = 'normal'
mean = 4.5
std = 2.0
syn_params[self.label] = {
'distribution': distribution, 'mu': mean, 'sigma': std}
self.setUpNetwork(self.conn_dict, syn_params)
is_dist = hf.check_ks(self.pop1, self.pop2,
self.label, self.pval, syn_params[self.label])
self.assertTrue(is_dist)
[docs] def testNormalClippedDist(self):
syn_params = self.syn_dict.copy()
distribution = 'normal_clipped'
mean = 1.0
std = 2.0
xmin = 0.5
xmax = 10.2
syn_params[self.label] = {
'distribution': distribution,
'mu': mean, 'sigma': std, 'low': xmin, 'high': xmax
}
self.setUpNetwork(self.conn_dict, syn_params)
is_dist = hf.check_ks(self.pop1, self.pop2,
self.label, self.pval, syn_params[self.label])
self.assertTrue(is_dist)
[docs] def testBinomialDist(self):
syn_params = self.syn_dict.copy()
distribution = 'binomial'
n = 50
p = 0.4
syn_params[self.label] = {'distribution': distribution, 'n': n, 'p': p}
self.setUpNetwork(self.conn_dict, syn_params)
is_dist = hf.check_ks(self.pop1, self.pop2,
self.label, self.pval, syn_params[self.label])
self.assertTrue(is_dist)
[docs] def testBinomialClippedDist(self):
syn_params = self.syn_dict.copy()
distribution = 'binomial_clipped'
n = 50
p = 0.4
xmin = 10
xmax = 30
syn_params[self.label] = {
'distribution': distribution, 'n': n, 'p': p,
'low': xmin, 'high': xmax
}
self.setUpNetwork(self.conn_dict, syn_params)
is_dist = hf.check_ks(self.pop1, self.pop2,
self.label, self.pval, syn_params[self.label])
self.assertTrue(is_dist)
[docs] @unittest.skipIf(not HAVE_GSL, 'GSL is not available')
def testGslBinomialDist(self):
syn_params = self.syn_dict.copy()
distribution = 'gsl_binomial'
n = 70
p = 0.55
syn_params[self.label] = {'distribution': distribution, 'n': n, 'p': p}
self.setUpNetwork(self.conn_dict, syn_params)
syn_params[self.label]['distribution'] = 'binomial'
is_dist = hf.check_ks(self.pop1, self.pop2,
self.label, self.pval, syn_params[self.label])
self.assertTrue(is_dist)
[docs] def testExponentialDist(self):
syn_params = self.syn_dict.copy()
distribution = 'exponential'
l = 1.7
syn_params[self.label] = {'distribution': distribution, 'lambda': l}
self.setUpNetwork(self.conn_dict, syn_params)
is_dist = hf.check_ks(self.pop1, self.pop2,
self.label, self.pval, syn_params[self.label])
self.assertTrue(is_dist)
[docs] def testExponentialClippedDist(self):
syn_params = self.syn_dict.copy()
distribution = 'exponential_clipped'
l = 1.7
xmin = 0.2
xmax = 2.0
syn_params[self.label] = {
'distribution': distribution, 'lambda': l, 'low': xmin,
'high': xmax
}
self.setUpNetwork(self.conn_dict, syn_params)
is_dist = hf.check_ks(self.pop1, self.pop2,
self.label, self.pval, syn_params[self.label])
self.assertTrue(is_dist)
[docs] def testGammaDist(self):
syn_params = self.syn_dict.copy()
distribution = 'gamma'
order = 0.5
scale = 0.75
syn_params[self.label] = {
'distribution': distribution, 'order': order, 'scale': scale}
self.setUpNetwork(self.conn_dict, syn_params)
is_dist = hf.check_ks(self.pop1, self.pop2,
self.label, self.pval, syn_params[self.label])
self.assertTrue(is_dist)
[docs] def testGammaClippedDist(self):
syn_params = self.syn_dict.copy()
distribution = 'gamma_clipped'
order = 0.5
scale = 0.75
xmin = 0.3
xmax = 1.5
syn_params[self.label] = {
'distribution': distribution,
'order': order, 'scale': scale,
'low': xmin, 'high': xmax
}
self.setUpNetwork(self.conn_dict, syn_params)
is_dist = hf.check_ks(self.pop1, self.pop2,
self.label, self.pval, syn_params[self.label])
self.assertTrue(is_dist)
[docs] def testLognormalDist(self):
syn_params = self.syn_dict.copy()
distribution = 'lognormal'
mean = 0.5
std = 1.2
syn_params[self.label] = {
'distribution': distribution, 'mu': mean, 'sigma': std}
self.setUpNetwork(self.conn_dict, syn_params)
is_dist = hf.check_ks(self.pop1, self.pop2,
self.label, self.pval, syn_params[self.label])
self.assertTrue(is_dist)
[docs] def testLognormalClippedDist(self):
syn_params = self.syn_dict.copy()
distribution = 'lognormal_clipped'
mean = 0.5
std = 1.2
xmin = 1.5
xmax = 10.3
syn_params[self.label] = {
'distribution': distribution,
'mu': mean, 'sigma': std, 'low': xmin, 'high': xmax}
self.setUpNetwork(self.conn_dict, syn_params)
is_dist = hf.check_ks(self.pop1, self.pop2,
self.label, self.pval, syn_params[self.label])
self.assertTrue(is_dist)
[docs] def testPoissonDist(self):
# TODO: check for small lambda
syn_params = self.syn_dict.copy()
distribution = 'poisson'
l = 5.1
syn_params[self.label] = {'distribution': distribution, 'lambda': l}
self.setUpNetwork(self.conn_dict, syn_params)
is_dist = hf.check_ks(self.pop1, self.pop2,
self.label, self.pval, syn_params[self.label])
self.assertTrue(is_dist)
[docs] def testPoissonClippedDist(self):
# TODO: check for small lambda
syn_params = self.syn_dict.copy()
distribution = 'poisson_clipped'
l = 5.1
xmin = 2
xmax = 8
syn_params[self.label] = {
'distribution': distribution, 'lambda': l,
'low': xmin, 'high': xmax}
self.setUpNetwork(self.conn_dict, syn_params)
is_dist = hf.check_ks(self.pop1, self.pop2,
self.label, self.pval, syn_params[self.label])
self.assertTrue(is_dist)
if __name__ == '__main__':
suite = unittest.TestLoader().loadTestsFromTestCase(TestDists)
unittest.TextTestRunner(verbosity=2).run(suite)
# suite = unittest.TestSuite()
# suite.addTest(TestDists('testGslBinomialDist'))
# unittest.TextTestRunner().run(suite)