Source code for nest.tests.test_status

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

"""
Test if Set/GetStatus work properly
"""

import unittest
import nest


[docs]@nest.check_stack class StatusTestCase(unittest.TestCase): """Tests of Set/GetStatus"""
[docs] def test_GetKernelStatus(self): """GetKernelStatus""" nest.ResetKernel() kernel_status = nest.GetKernelStatus() self.assertIsInstance(kernel_status, dict) self.assertGreater(len(kernel_status), 1) self.assertRaises(KeyError, nest.GetKernelStatus, "nonexistent_status_key") test_keys = ("resolution", ) * 3 kernel_status = nest.GetKernelStatus(test_keys) self.assertEqual(len(kernel_status), len(test_keys)) self.assertRaises(TypeError, nest.GetKernelStatus, 42)
[docs] def test_SetKernelStatus(self): """SetKernelStatus""" nest.ResetKernel() nest.SetKernelStatus({}) nest.SetKernelStatus({'resolution': 0.2}) self.assertRaisesRegex( nest.NESTError, "DictError", nest.SetKernelStatus, {'nonexistent_status_key': 0})
[docs] def test_GetDefaults(self): """GetDefaults""" nest.ResetKernel() # sli_neuron does not work under PyNEST models = (m for m in nest.Models() if m != 'sli_neuron') for model in models: model_status = nest.GetDefaults(model) self.assertIsInstance(model_status, dict) self.assertGreater(len(model_status), 1) self.assertRaises(TypeError, nest.GetDefaults, model, 42) if "V_m" in model_status: test_value = nest.GetDefaults(model, "V_m") self.assertIsInstance(test_value, float) test_keys = ("V_m", ) * 3 model_status = nest.GetDefaults(model, test_keys) self.assertEqual(len(model_status), len(test_keys))
[docs] def test_SetDefaults(self): """SetDefaults""" nest.ResetKernel() # sli_neuron does not work under PyNEST models = (m for m in nest.Models() if m != 'sli_neuron') for m in models: if 'V_m' in nest.GetDefaults(m): v_m = nest.GetDefaults(m)['V_m'] nest.SetDefaults(m, {'V_m': -1.}) self.assertEqual(nest.GetDefaults(m, 'V_m'), -1.) nest.SetDefaults(m, 'V_m', v_m) self.assertEqual(nest.GetDefaults(m, 'V_m'), v_m) self.assertRaisesRegex( nest.NESTError, "DictError", nest.SetDefaults, m, 'nonexistent_status_key', 0)
[docs] def test_GetStatus(self): """GetStatus""" # sli_neuron does not work under PyNEST models = (m for m in nest.Models() if m != 'sli_neuron') for m in models: if 'V_m' in nest.GetDefaults(m): nest.ResetKernel() n = nest.Create(m) d = nest.GetStatus(n) self.assertIsInstance(d, tuple) self.assertIsInstance(d[0], dict) self.assertGreater(len(d[0]), 1) v1 = nest.GetStatus(n)[0]['V_m'] v2 = nest.GetStatus(n, 'V_m')[0] self.assertEqual(v1, v2) n = nest.Create(m, 10) d = nest.GetStatus(n, 'V_m') self.assertEqual(len(d), len(n)) self.assertIsInstance(d[0], float) test_keys = ("V_m", ) * 3 d = nest.GetStatus(n, test_keys) self.assertEqual(len(d), len(n)) self.assertEqual(len(d[0]), len(test_keys))
[docs] def test_SetStatus(self): """SetStatus with dict""" # sli_neuron does not work under PyNEST models = (m for m in nest.Models() if m != 'sli_neuron') for m in models: if 'V_m' in nest.GetDefaults(m): nest.ResetKernel() n = nest.Create(m) nest.SetStatus(n, {'V_m': 1.}) self.assertEqual(nest.GetStatus(n, 'V_m')[0], 1.)
[docs] def test_SetStatusList(self): """SetStatus with list""" # sli_neuron does not work under PyNEST models = (m for m in nest.Models() if m != 'sli_neuron') for m in models: if 'V_m' in nest.GetDefaults(m): nest.ResetKernel() n = nest.Create(m) nest.SetStatus(n, [{'V_m': 2.}]) self.assertEqual(nest.GetStatus(n, 'V_m')[0], 2.)
[docs] def test_SetStatusParam(self): """SetStatus with parameter""" # sli_neuron does not work under PyNEST models = (m for m in nest.Models() if m != 'sli_neuron') for m in models: if 'V_m' in nest.GetDefaults(m): nest.ResetKernel() n = nest.Create(m) nest.SetStatus(n, 'V_m', 3.) self.assertEqual(nest.GetStatus(n, 'V_m')[0], 3.)
[docs] def test_SetStatusVth_E_L(self): """SetStatus of reversal and threshold potential """ # sli_neuron does not work under PyNEST models = ( m for m in nest.Models() if m not in ( 'sli_neuron', 'a2eif_cond_exp_HW', 'mat2_psc_exp', 'amat2_psc_exp' ) ) for m in models: if all(key in nest.GetDefaults(m) for key in ('V_th', 'E_L')): nest.ResetKernel() neuron1 = nest.Create(m) neuron2 = nest.Create(m) # must not depend on the order new_EL = -90. new_Vth = -10. if 'V_reset' in nest.GetDefaults(m): nest.SetStatus(neuron1 + neuron2, {'V_reset': new_EL}) nest.SetStatus(neuron1, {'E_L': new_EL}) nest.SetStatus(neuron2, {'V_th': new_Vth}) nest.SetStatus(neuron1, {'V_th': new_Vth}) nest.SetStatus(neuron2, {'E_L': new_EL}) vth1, vth2 = nest.GetStatus(neuron1 + neuron2, 'V_th') self.assertEqual(vth1, vth2)
[docs] def test_SetStatusV_th_smaller_V_reset(self): """SetStatus of reversal and threshold potential check if error is raised if V_reset > V_th""" # sli_neuron does not work under PyNEST models = (m for m in nest.Models() if m != 'sli_neuron') for m in models: if all(key in nest.GetDefaults(m) for key in ('V_th', 'V_reset')): nest.ResetKernel() neuron = nest.Create(m) # should raise exception self.assertRaisesRegex( nest.NESTError, "BadProperty", nest.SetStatus, neuron, {'V_reset': 10., 'V_th': 0.} )
[docs]def suite(): suite = unittest.makeSuite(StatusTestCase, 'test') return suite
[docs]def run(): runner = unittest.TextTestRunner(verbosity=2) runner.run(suite())
if __name__ == "__main__": run()