Source code for nest.tests.test_rate_neuron

# -*- coding: utf-8 -*-
#
# test_rate_neuron.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/>.

# This script tests the rate_neuron in NEST. For input noise we test
# the mean and variance of the rate as well as the standard deviation of
# the input noise. For output noise we test the mean of the rate and the
# standard deviation of the output noise, which already determines the variance
# of the rate.

import nest
import unittest
import numpy as np


[docs]@nest.check_stack class RateNeuronTestCase(unittest.TestCase): """Check rate_neuron"""
[docs] def setUp(self): # test parameter self.rtol = 0.05 # neuron parameters self.neuron_params = {'mean': 1.5, 'std': 0.5, 'tau': 5.} # simulation parameters self.simtime = 10000. self.dt = 0.1 self.tstart = 10. * self.neuron_params['tau'] nest.set_verbosity('M_WARNING') nest.ResetKernel() nest.SetKernelStatus( {'resolution': self.dt, 'use_wfr': False, 'print_time': True}) # set up rate neuron and devices self.rate_neuron_ipn = nest.Create( 'lin_rate_ipn', params=self.neuron_params) self.rate_neuron_opn = nest.Create( 'lin_rate_opn', params=self.neuron_params) self.multimeter = nest.Create( "multimeter", params={'record_from': ['rate', 'noise'], 'interval': self.dt, 'start': self.tstart}) # record rates and noise nest.Connect( self.multimeter, self.rate_neuron_ipn + self.rate_neuron_opn)
[docs] def test_RateNeuronMean(self): """Check the mean value of the rate_neurons""" # simulate nest.Simulate(self.simtime) # get noise from rate neurons events = nest.GetStatus(self.multimeter)[0]["events"] senders = events['senders'] senders_ipn = np.where(senders == self.rate_neuron_ipn)[0] senders_opn = np.where(senders == self.rate_neuron_opn)[0] mean_rate_ipn = np.mean(events['rate'][senders_ipn]) mean_rate_opn = np.mean(events['rate'][senders_opn]) self.assertTrue( np.isclose(mean_rate_ipn, self.neuron_params['mean'], rtol=self.rtol)) self.assertTrue( np.isclose(mean_rate_opn, self.neuron_params['mean'], rtol=self.rtol))
[docs] def test_RateNeuronNoise(self): """Check noise of the rate_neurons""" # simulate nest.Simulate(self.simtime) # get noise from rate neurons events = nest.GetStatus(self.multimeter)[0]["events"] senders = events['senders'] senders_ipn = np.where(senders == self.rate_neuron_ipn)[0] senders_opn = np.where(senders == self.rate_neuron_opn)[0] noise_ipn = events['noise'][senders_ipn] std_noise_ipn = np.std(noise_ipn) noise_opn = events['noise'][senders_opn] std_noise_opn = np.std(noise_opn) self.assertTrue( np.isclose(std_noise_ipn, self.neuron_params['std'], rtol=self.rtol)) self.assertTrue( np.isclose(std_noise_opn, self.neuron_params['std'], rtol=self.rtol))
[docs] def test_RateNeuronVariance(self): """Check the variance of the rate of the rate_neuron for input noise""" # simulate nest.Simulate(self.simtime) # get variance of the rate events = nest.GetStatus(self.multimeter)[0]["events"] senders = events['senders'] senders_ipn = np.where(senders == self.rate_neuron_ipn)[0] rate = events['rate'][senders_ipn] var_rate = np.var(rate) # expected variance var_test = self.neuron_params[ 'std']**2 / 2. # assert self.assertTrue( np.isclose(var_rate, var_test, rtol=self.rtol))
[docs]def suite(): # makeSuite is sort of obsolete http://bugs.python.org/issue2721 # using loadTestsFromTestCase instead. suite1 = unittest.TestLoader().loadTestsFromTestCase( RateNeuronTestCase) return unittest.TestSuite([suite1])
[docs]def run(): runner = unittest.TextTestRunner(verbosity=2) runner.run(suite())
if __name__ == "__main__": run()