Source code for nest.lib.hl_api_simulation

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

"""
Functions for simulation control
"""

from .hl_api_helper import *
from contextlib import contextmanager


[docs]@check_stack def Simulate(t): """Simulate the network for t milliseconds. Parameters ---------- t : float Time to simulate in ms """ sps(float(t)) sr('ms Simulate')
[docs]@check_stack def Run(t): """Simulate the network for t milliseconds. Parameters ---------- t : float Time to simulate in ms Call between Prepare and Cleanup calls, or within an with RunManager: clause Simulate(t): t' = t/m; Prepare(); for _ in range(m): Run(t'); Cleanup() Prepare() must be called before to calibrate, etc; Cleanup() afterward to close files, cleanup handles and so on. After Cleanup(), Prepare() can and must be called before more Run() calls. Any calls to set_status between Prepare() and Cleanup() have undefined behavior. """ sps(float(t)) sr('ms Run')
[docs]@check_stack def Prepare(): """Prepares network before a Run call. Not needed for Simulate. See Run(t), Cleanup(). Call before any sequence of Runs(). Do all set_status calls before Prepare(). """ sr('Prepare')
[docs]@check_stack def Cleanup(): """Cleans up resources after a Run call. Not needed for Simulate. See Run(t), Prepare(). Closes state for a series of runs, such as flushing and closing files. A Prepare() is needed after a Cleanup() before any more calls to Run(). """ sr('Cleanup')
[docs]@contextmanager def RunManager(): """ContextManager for Run. Calls Prepare() before a series of Run() calls, and adds a Cleanup() at end. So: with RunManager(): for i in range(10): Run() """ Prepare() try: yield finally: Cleanup()
[docs]@check_stack def ResumeSimulation(): """Resume an interrupted simulation. """ sr("ResumeSimulation")
[docs]@check_stack def ResetKernel(): """Reset the simulation kernel. This will destroy the network as well as all custom models created with CopyModel(). Calling this function is equivalent to restarting NEST. """ sr('ResetKernel')
[docs]@check_stack def ResetNetwork(): """Reset all nodes and connections to their original state. """ sr('ResetNetwork')
[docs]@check_stack def SetKernelStatus(params): """Set parameters for the simulation kernel. Parameters ---------- params : dict Dictionary of parameters to set. See also -------- GetKernelStatus """ sps(0) sps(params) sr('SetStatus')
[docs]@check_stack def GetKernelStatus(keys=None): """Obtain parameters of the simulation kernel. Parameters ---------- keys : str or list, optional Single parameter name or list of parameter names Returns ------- dict: Parameter dictionary, if called without argument type: Single parameter value, if called with single parameter name list: List of parameter values, if called with list of parameter names Raises ------ TypeError """ sr('0 GetStatus') status_root = spp() sr('/subnet GetDefaults') status_subnet = spp() d = dict((k, v) for k, v in status_root.items() if k not in status_subnet) if keys is None: return d elif is_literal(keys): return d[keys] elif is_iterable(keys): return tuple(d[k] for k in keys) else: raise TypeError("keys should be either a string or an iterable")
[docs]@check_stack def Install(module_name): """Load a dynamically linked NEST module. Parameters ---------- module_name : str Name of the dynamically linked module Returns ------- NEST module identifier, required for unloading. Example ------- nest.Install("mymodule") Notes ----- Dynamically linked modules are searched in the LD_LIBRARY_PATH (DYLD_LIBRARY_PATH under OSX). """ return sr("(%s) Install" % module_name)
[docs]@check_stack def SetStructuralPlasticityStatus(params): """Set structural plasticity parameters for the network simulation. Parameters ---------- params : dict Dictionary of structural plasticity parameters to set """ sps(params) sr('SetStructuralPlasticityStatus')
[docs]@check_stack def GetStructuralPlasticityStatus(keys=None): """Get the current structural plasticity parameters for the network simulation. Parameters --------- keys : str or list, optional Keys indicating the values of interest to be retrieved by the get call """ sps({}) sr('GetStructuralPlasticityStatus') d = spp() if keys is None: return d elif is_literal(keys): return d[keys] elif is_iterable(keys): return tuple(d[k] for k in keys) else: raise TypeError("keys must be either empty, a string or a list")
[docs]@check_stack def EnableStructuralPlasticity(): """Enable structural plasticity for the network simulation """ sr('EnableStructuralPlasticity')
[docs]@check_stack def DisableStructuralPlasticity(): """Disable structural plasticity for the network simulation """ sr('DisableStructuralPlasticity')