コード例 #1
0
ファイル: dynamics.py プロジェクト: russelljjarvis/nineml
    def __init__(self, *args, **kwargs):
        """Regime constructor

            :param name: The name of the constructor. If none, then a name will
                be automatically generated.
            :param time_derivatives: A list of time derivatives, as
                either ``string``s (e.g 'dg/dt = g/gtau') or as
                |TimeDerivative| objects.
            :param transitions: A list containing either |OnEvent| or
                |OnCondition| objects, which will automatically be sorted into
                the appropriate classes automatically.
            :param *args: Any non-keyword arguments will be treated as
                time_derivatives.


        """
        valid_kwargs = ('name', 'transitions', 'time_derivatives')
        for arg in kwargs:
            if not arg in valid_kwargs:
                err = 'Unexpected Arg: %s' % arg
                raise NineMLRuntimeError(err)

        transitions = kwargs.get('transitions', None)
        name = kwargs.get('name', None)
        kw_tds = normalise_parameter_as_list(kwargs.get('time_derivatives',
                                                        None))
        time_derivatives = list(args) + kw_tds

        # Generate a name for unnamed regions:
        self._name = name.strip() if name else Regime.get_next_name()
        ensure_valid_c_variable_name(self._name)

        # Un-named arguments are time_derivatives:
        time_derivatives = normalise_parameter_as_list(time_derivatives)
        # time_derivatives.extend( args )

        td_types = (basestring, TimeDerivative)
        td_type_dict = filter_discrete_types(time_derivatives, td_types)
        td_from_str = [StrToExpr.time_derivative(o)
                       for o in td_type_dict[basestring]]
        self._time_derivatives = td_type_dict[TimeDerivative] + td_from_str

        # Check for double definitions:
        td_dep_vars = [td.dependent_variable for td in self._time_derivatives]
        assert_no_duplicates(td_dep_vars)

        # We support passing in 'transitions', which is a list of both OnEvents
        # and OnConditions. So, lets filter this by type and add them
        # appropriately:
        transitions = normalise_parameter_as_list(transitions)
        f_dict = filter_discrete_types(transitions, (OnEvent, OnCondition))
        self._on_events = []
        self._on_conditions = []

        # Add all the OnEvents and OnConditions:
        for event in f_dict[OnEvent]:
            self.add_on_event(event)
        for condition in f_dict[OnCondition]:
            self.add_on_condition(condition)
コード例 #2
0
ファイル: dynamics.py プロジェクト: pgleeson/nineml
    def __init__(self, name, dimension=""):
        """StateVariable Constructor

        :param name:  The name of the state variable.
        """
        self._name = name.strip()
        self._dimension = dimension
        ensure_valid_c_variable_name(self._name)
コード例 #3
0
ファイル: ports.py プロジェクト: iraikov/nineml
    def __init__(self, name):
        """ Port Constructor.

        :param name: The name of the port, as a `string`
        """
        name = name.strip()
        ensure_valid_c_variable_name(name)
        self._name = name
コード例 #4
0
ファイル: component.py プロジェクト: pgleeson/nineml
 def __init__(self, analog_ports=None,
              event_ports=None, dynamics=None):
     """Constructor - For parameter descriptions, see the
     ComponentClass.__init__() method
     """
     self._analog_ports = analog_ports or []
     self._event_ports = event_ports or []
     self._dynamics = dynamics
     ensure_valid_c_variable_name(self.name)
コード例 #5
0
ファイル: interface.py プロジェクト: pgleeson/nineml
    def __init__(self, name, dimension=""):
        """Parameter Constructor

        :param name:  The name of the parameter.
        """
        name = name.strip()
        ensure_valid_c_variable_name(name)

        self._name = name
        self._dimension = dimension
コード例 #6
0
ファイル: interface.py プロジェクト: russelljjarvis/nineml
    def __init__(self, name, dimension="", valid_range=None):
        """Parameter Constructor

        :param name:  The name of the parameter.
        """
        name = name.strip()
        ensure_valid_c_variable_name(name)

        self._name = name
        self._dimension = dimension
        self._valid_range = valid_range  # TODO: This is not used currently
コード例 #7
0
ファイル: events.py プロジェクト: iraikov/nineml
    def __init__(self, port_name):
        """OutputEvent Constructor

        :param port: The name of the output EventPort that should
            transmit an event. An `EventPort` with a mode of 'send' must exist
            with a corresponding name in the component, otherwise a
            ``NineMLRuntimeException`` will be raised.

        """
        self._port_name = port_name.strip()
        ensure_valid_c_variable_name(self._port_name)
コード例 #8
0
ファイル: interface.py プロジェクト: iraikov/nineml
    def __init__(self, name, dimension=None):
        """Parameter Constructor

        :param name:  The name of the parameter.
        """
        name = name.strip()
        ensure_valid_c_variable_name(name)

        self._name = name
        self._dimension = dimension if dimension is not None else dimensionless
        assert isinstance(self._dimension, Dimension), (
            "dimension must be None or a nineml.Dimension instance")
コード例 #9
0
ファイル: dynamics.py プロジェクト: pgleeson/nineml
    def __init__(self, src_port_name, state_assignments=None,
                 event_outputs=None, target_regime_name=None):
        """Constructor for ``OnEvent``

            :param src_port_name: The name of the |EventPort| that triggers this transition

            See ``Transition.__init__`` for the definitions of the remaining
            parameters.
        """
        Transition.__init__(self, state_assignments=state_assignments,
                            event_outputs=event_outputs,
                            target_regime_name=target_regime_name)
        self._src_port_name = src_port_name.strip()
        ensure_valid_c_variable_name(self._src_port_name)
コード例 #10
0
ファイル: ports.py プロジェクト: russelljjarvis/nineml
    def __init__(self, name, mode='send', reduce_op=None,
                 dimension='dimensionless'):
        """ Port Constructor.

        :param name: The name of the port, as a `string`
        :param mode: The mode of the port, which should be a string as either,
            ``send``,``recv`` or ``reduce``.
        :param reduce_op: This should be ``None`` unless the mode is
            ``reduce``. If the mode is ``reduce``, then this must be a
            supported ``reduce_op``

        .. note::

            Currently support ``reduce_op`` s are: ``+``.

        """

        name = name.strip()
        ensure_valid_c_variable_name(name)

        self.dimension = dimension
        self._name = name
        self._mode = mode
        self._reduce_op = reduce_op

        if self._mode not in Port._modes:
            err = ("%s('%s')" + "specified undefined mode: '%s'") %\
                  (self.__class__.__name__, self.name, mode)
            raise NineMLRuntimeError(err)

        if mode == 'reduce':
            if reduce_op not in Port._reduce_op_map.keys():
                err = ("%s('%s')" + "specified undefined reduce_op: '%s'") %\
                      (self.__class__.__name__, name, str(reduce_op))
                raise NineMLRuntimeError(err)

        if reduce_op and mode != "reduce":
            err = "Port of mode!=reduce may not specify 'op'."
            raise NineMLRuntimeError(err)
コード例 #11
0
ファイル: component.py プロジェクト: iraikov/nineml
 def __init__(self, analog_ports=[],
              event_ports=[], dynamics=None):
     """Constructor - For parameter descriptions, see the
     ComponentClass.__init__() method
     """
     self._analog_send_ports = dict((port.name, port)
                                    for port in analog_ports
                                    if isinstance(port, AnalogSendPort))
     self._analog_receive_ports = dict((port.name, port)
                                       for port in analog_ports
                                       if isinstance(port,
                                                     AnalogReceivePort))
     self._analog_reduce_ports = dict((port.name, port)
                                      for port in analog_ports
                                      if isinstance(port, AnalogReducePort))
     self._event_send_ports = dict((port.name, port)
                                   for port in event_ports
                                   if isinstance(port, EventSendPort))
     self._event_receive_ports = dict((port.name, port)
                                      for port in event_ports
                                      if isinstance(port, EventReceivePort))
     self._dynamics = dynamics
     ensure_valid_c_variable_name(self.name)