示例#1
0
    def __init__(self, library_manager, block_type, name):

        if not '.' in name and library_manager._parsing_namespace_stack:
            name = '.'.join(library_manager._parsing_namespace_stack + [name])

        self.library_manager = library_manager
        self.builddata = BuildData()
        self.builddata.eqnset_name = name
        self.block_type = block_type

        # Scoping:
        self.global_scope = Scope(proxy_if_absent=True)
        self.active_scope = None

        # RT-Graph & Regime:
        self._all_rt_graphs = dict([(None, RTBlock())])
        self._current_rt_graph = self._all_rt_graphs[None]
        self._current_regime = self._current_rt_graph.get_or_create_regime(
            None)

        self.builddata.eqnset_name = name.strip()

        #CompoundPort Data:
        self._interface_data = []

        # Event ports:
        self._output_event_ports = LookUpDict(
            accepted_obj_types=(ast.OutEventPort))
        self._input_event_ports = LookUpDict(
            accepted_obj_types=(ast.InEventPort))

        # Default state_variables
        self._default_state_variables = SingleSetDict()
示例#2
0
 def __init__(self, symbol, rhses = None, **kwargs):
     super(AnalogReducePort, self).__init__(**kwargs)
     self.symbol = symbol
     if rhses is None:
         self.rhses = LookUpDict() 
     else :
         self.rhses = LookUpDict(rhses) 
示例#3
0
    def all_terminal_objs(self):
        possible_objs = self._parameters_lut.get_objs_by() + \
                        self._supplied_lut.get_objs_by() + \
                        self._analog_reduce_ports_lut.get_objs_by()+ \
                        LookUpDict(self.assignedvalues).get_objs_by()+ \
                        LookUpDict(self.state_variables).get_objs_by()+ \
                        LookUpDict(self.symbolicconstants).get_objs_by()

        return possible_objs
示例#4
0
    def __init__(self, name, parent):
        # name is local, not fully qualified:
        self.name = name
        self.parent = parent

        self.subnamespaces = LookUpDict(accepted_obj_types=ComponentNamespace)
        self.libraries = LookUpDict(accepted_obj_types=ast.Library)
        self.components = LookUpDict(accepted_obj_types=ast.NineMLComponent)
        self.interfaces = LookUpDict(accepted_obj_types=ast.Interface)
示例#5
0
    def get_terminal_obj(self, symbol):

        possible_objs = LookUpDict(self.assignedvalues).get_objs_by(symbol=symbol)+ \
                        LookUpDict(self.symbolicconstants).get_objs_by(symbol=symbol)+ \
                        LookUpDict(self.functiondefs).get_objs_by(funcname=symbol)

        if not len(possible_objs) == 1:
            raise KeyError("Can't find terminal: %s" % symbol)

        return possible_objs[0]
示例#6
0
    def __init__(self, library_manager, builder, builddata, name=None):
        super(NineMLComponent, self).__init__(library_manager=library_manager,
                                              builder=builder,
                                              name=name)

        import neurounits.ast as ast

        # Top-level objects:
        self._function_defs = LookUpDict(builddata.funcdefs,
                                         accepted_obj_types=(ast.FunctionDef))
        self._symbolicconstants = LookUpDict(
            builddata.symbolicconstants,
            accepted_obj_types=(ast.SymbolicConstant, ))

        self._eqn_assignment = LookUpDict(
            builddata.assignments,
            accepted_obj_types=(ast.EqnAssignmentByRegime, ))
        self._eqn_time_derivatives = LookUpDict(
            builddata.timederivatives,
            accepted_obj_types=(ast.EqnTimeDerivativeByRegime, ))

        self._transitions_triggers = LookUpDict(builddata.transitions_triggers)
        self._transitions_events = LookUpDict(builddata.transitions_events)
        self._rt_graphs = LookUpDict(builddata.rt_graphs)

        # This is a list of internal event port connections:
        self._event_port_connections = LookUpDict()

        from neurounits.ast import CompoundPortConnector
        # This is a list of the available connectors from this component
        self._interface_connectors = LookUpDict(
            accepted_obj_types=(CompoundPortConnector, ),
            unique_attrs=('symbol', ))
示例#7
0
    def __init__(self, library_manager, builder, builddata, name):
        super(Library, self).__init__(library_manager=library_manager,
                                      builder=builder,
                                      name=name)
        import neurounits.ast as ast

        self._function_defs = LookUpDict(
            builddata.funcdefs,
            accepted_obj_types=(ast.FunctionDef, ast.BuiltInFunction))
        self._symbolicconstants = LookUpDict(
            builddata.symbolicconstants,
            accepted_obj_types=(ast.SymbolicConstant, ))
        self._eqn_assignment = LookUpDict(
            builddata.assignments,
            accepted_obj_types=(ast.EqnAssignmentByRegime, ))
示例#8
0
    def get_terminal_obj(self, symbol):
        possible_objs = self._parameters_lut.get_objs_by(symbol=symbol) + \
                        self._supplied_lut.get_objs_by(symbol=symbol) + \
                        self._analog_reduce_ports_lut.get_objs_by(symbol=symbol)+ \
                        LookUpDict(self.assignedvalues).get_objs_by(symbol=symbol)+ \
                        LookUpDict(self.state_variables).get_objs_by(symbol=symbol)+ \
                        LookUpDict(self.symbolicconstants).get_objs_by(symbol=symbol)

        if not len(possible_objs) == 1:
            all_syms = [p.symbol for p in self.all_terminal_objs()]
            raise KeyError(
                "Can't find terminal: '%s' \n (Terminals found: %s)" %
                (symbol, ','.join(sorted(all_syms))))

        return possible_objs[0]
示例#9
0
    def get_output_event_port(self, port_name, expected_parameter_names):

        if not self._output_event_ports.has_obj(symbol=port_name):

            # Create the parameter objects:
            param_dict = LookUpDict(
                accepted_obj_types=(ast.OutEventPortParameter),
                unique_attrs=['symbol'])
            for param_name in expected_parameter_names:
                param_dict._add_item(
                    ast.OutEventPortParameter(symbol=param_name))

            # Create the port object:
            port = ast.OutEventPort(symbol=port_name, parameters=param_dict)

            self._output_event_ports._add_item(port)

        # Get the event port, and check that the parameters match up:
        p = self._output_event_ports.get_single_obj_by(symbol=port_name)
        assert len(p.parameters) == len(
            expected_parameter_names), 'Parameter length mismatch'

        assert set(p.parameters.get_objects_attibutes(
            attr='symbol')) == set(expected_parameter_names)

        return p
示例#10
0
def p_parse_on_transition_event(p):
    """on_transition_trigger :  ON  open_eventtransition_scope   ALPHATOKEN  LBRACKET on_event_def_params RBRACKET   LCURLYBRACKET transition_actions transition_to RCURLYBRACKET """
    event_name = p[3]
    event_params = LookUpDict( p[5], accepted_obj_types=(ast.OnEventDefParameter) )
    actions = p[8]
    target_regime = p[9]
    p.parser.library_manager.get_current_block_builder().close_scope_and_create_transition_event(event_name=event_name, event_params=event_params, actions=actions, target_regime=target_regime)
    def VisitEmitEvent(self, o, **kwargs):
        o.parameters = LookUpDict(
            [self.followSymbolProxy(rhs) for rhs in o.parameters],
            accepted_obj_types=o.parameters.accepted_obj_types,
            unique_attrs=o.parameters.unique_attrs)

        for p in o.parameters:
            self.visit(p)
示例#12
0
    def _replace_within_new_lut(self, lut):
        from neurounits.units_misc import LookUpDict

        new_lut = LookUpDict()
        new_lut.unique_attrs = lut.unique_attrs
        new_lut.accepted_obj_types = lut.accepted_obj_types
        for o in lut:
            new_lut._add_item(self.replace_or_visit(o))
        return new_lut
示例#13
0
    def __init__(self, symbol, interface_def, wire_mappings, direction):
        super(CompoundPortConnector, self).__init__()

        self.symbol = symbol
        self.interface_def = interface_def
        self.wire_mappings = LookUpDict(
            wire_mappings,
            accepted_obj_types=(CompoundPortConnectorWireMapping, ))
        self.direction = direction
示例#14
0
    def get_terminal_obj_or_port(self, symbol):
        possible_objs = self._parameters_lut.get_objs_by(symbol=symbol) + \
                        self._supplied_lut.get_objs_by(symbol=symbol) + \
                        self._analog_reduce_ports_lut.get_objs_by(symbol=symbol)+ \
                        LookUpDict(self.assignedvalues).get_objs_by(symbol=symbol)+ \
                        LookUpDict(self.state_variables).get_objs_by(symbol=symbol)+ \
                        LookUpDict(self.symbolicconstants).get_objs_by(symbol=symbol) + \
                        self.input_event_port_lut.get_objs_by(symbol=symbol) + \
                        self.output_event_port_lut.get_objs_by(symbol=symbol)

        if not len(possible_objs) == 1:
            all_syms = [
                p.symbol for p in self.all_terminal_objs()
            ] + self.input_event_port_lut.get_objects_attibutes(attr='symbol')
            raise KeyError(
                "Can't find terminal/EventPort: '%s' \n (Terminals/EntPorts found: %s)"
                % (symbol, ','.join(all_syms)))

        return possible_objs[0]
示例#15
0
 def ordered_assignments_by_dependancies(self, ):
     from neurounits.visitors.common.ast_symbol_dependancies import VisitorFindDirectSymbolDependance
     #from neurounits.visitors.common.ast_symbol_dependancies import VisitorFindDirectSymbolDependance
     #from neurounits.units_misc import LookUpDict
     ordered_assigned_values = VisitorFindDirectSymbolDependance.get_assignment_dependancy_ordering(
         self)
     ordered_assignments = [
         LookUpDict(self.assignments).get_single_obj_by(lhs=av)
         for av in ordered_assigned_values
     ]
     return ordered_assignments
示例#16
0
 def _analog_reduce_ports_lut(self):
     from neurounits.visitors.common.terminal_node_collector import EqnsetVisitorNodeCollector
     t = EqnsetVisitorNodeCollector(obj=self)
     return LookUpDict(t.nodes[AnalogReducePort])
示例#17
0
    def __init__(self, symbol, connections):
        super(Interface, self).__init__()

        self.symbol = symbol
        self.connections = LookUpDict(connections,
                                      accepted_obj_types=(InterfaceWire, ))
示例#18
0
def p_on_transition_actions5(p):
    """transition_action : EMIT alphanumtoken  LBRACKET event_call_params_l3 RBRACKET SEMICOLON"""
    p[0] = p.parser.library_manager.get_current_block_builder().create_emit_event(port_name=p[2], parameters=LookUpDict(p[4], accepted_obj_types=ast.EmitEventParameter))
示例#19
0
 def _parameters_lut(self):
     from neurounits.visitors.common.terminal_node_collector import EqnsetVisitorNodeCollector
     t = EqnsetVisitorNodeCollector(obj=self)
     return LookUpDict(t.nodes[Parameter])
示例#20
0
 def _supplied_lut(self):
     from neurounits.visitors.common.terminal_node_collector import EqnsetVisitorNodeCollector
     t = EqnsetVisitorNodeCollector(obj=self)
     return LookUpDict(t.nodes[SuppliedValue])
示例#21
0
 def __init__(self, name=None,):
     self.name = name
     self.regimes = LookUpDict([Regime(None, parent_rt_graph=self)])
     self.default_regime = None
示例#22
0
 def output_event_port_lut(self):
     import neurounits.ast as ast
     from neurounits.visitors.common.terminal_node_collector import EqnsetVisitorNodeCollector
     t = EqnsetVisitorNodeCollector(obj=self)
     return LookUpDict(t.nodes[ast.OutEventPort])