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()
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)
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
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)
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]
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', ))
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, ))
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]
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
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)
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
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
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]
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
def _analog_reduce_ports_lut(self): from neurounits.visitors.common.terminal_node_collector import EqnsetVisitorNodeCollector t = EqnsetVisitorNodeCollector(obj=self) return LookUpDict(t.nodes[AnalogReducePort])
def __init__(self, symbol, connections): super(Interface, self).__init__() self.symbol = symbol self.connections = LookUpDict(connections, accepted_obj_types=(InterfaceWire, ))
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))
def _parameters_lut(self): from neurounits.visitors.common.terminal_node_collector import EqnsetVisitorNodeCollector t = EqnsetVisitorNodeCollector(obj=self) return LookUpDict(t.nodes[Parameter])
def _supplied_lut(self): from neurounits.visitors.common.terminal_node_collector import EqnsetVisitorNodeCollector t = EqnsetVisitorNodeCollector(obj=self) return LookUpDict(t.nodes[SuppliedValue])
def __init__(self, name=None,): self.name = name self.regimes = LookUpDict([Regime(None, parent_rt_graph=self)]) self.default_regime = None
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])