def visit_function_call(self, node): """ Check consistency for a single function call: check if the called function has been declared, whether the number and types of arguments correspond to the declaration, etc. :param node: a single function call. :type node: ASTFunctionCall """ func_name = node.get_name() if func_name == 'emit_spike': output_block = self.neuron.get_output_blocks() if output_block is None: code, message = Messages.get_block_not_defined_correctly( 'output', missing=True) Logger.log_message(error_position=node.get_source_position(), log_level=LoggingLevel.ERROR, code=code, message=message) return if not output_block.is_spike(): code, message = Messages.get_emit_spike_function_but_no_output_port( ) Logger.log_message(code=code, message=message, log_level=LoggingLevel.ERROR, error_position=node.get_source_position()) return
def check_co_co(cls, node): """ Checks whether each block is define at most once. :param node: a single neuron. :type node: ASTNeuron """ assert (node is not None and isinstance(node, ASTNeuron)), \ '(PyNestML.CoCo.BlocksUniques) No or wrong type of neuron provided (%s)!' % type(node) if isinstance(node.get_state_blocks(), list) and len(node.get_state_blocks()) > 1: code, message = Messages.get_block_not_defined_correctly( 'State', False) Logger.log_message(code=code, message=message, node=node, error_position=node.get_source_position(), log_level=LoggingLevel.ERROR) # check that update block is defined at most once if isinstance(node.get_update_blocks(), list) and len(node.get_update_blocks()) > 1: code, message = Messages.get_block_not_defined_correctly( 'Update', False) Logger.log_message(code=code, message=message, node=node, error_position=node.get_source_position(), log_level=LoggingLevel.ERROR) # check that parameters block is defined at most once if isinstance(node.get_parameter_blocks(), list) and len(node.get_parameter_blocks()) > 1: code, message = Messages.get_block_not_defined_correctly( 'Parameters', False) Logger.log_message(code=code, message=message, node=node, error_position=node.get_source_position(), log_level=LoggingLevel.ERROR) # check that internals block is defined at most once if isinstance(node.get_internals_blocks(), list) and len(node.get_internals_blocks()) > 1: code, message = Messages.get_block_not_defined_correctly( 'Internals', False) Logger.log_message(code=code, message=message, node=node, error_position=node.get_source_position(), log_level=LoggingLevel.ERROR) # check that equations block is defined at most once if isinstance(node.get_equations_blocks(), list) and len(node.get_equations_blocks()) > 1: code, message = Messages.get_block_not_defined_correctly( 'Equations', False) Logger.log_message(code=code, message=message, node=node, error_position=node.get_source_position(), log_level=LoggingLevel.ERROR) # check that input block is defined at most once if isinstance(node.get_input_blocks(), list) and len(node.get_input_blocks()) > 1: code, message = Messages.get_block_not_defined_correctly( 'Input', False) Logger.log_message(code=code, message=message, node=node, error_position=node.get_source_position(), log_level=LoggingLevel.ERROR) elif isinstance(node.get_input_blocks(), list) and len( node.get_input_blocks()) == 0: code, message = Messages.get_block_not_defined_correctly( 'Input', True) Logger.log_message(code=code, message=message, node=node, error_position=node.get_source_position(), log_level=LoggingLevel.WARNING) elif node.get_input_blocks() is None: code, message = Messages.get_block_not_defined_correctly( 'Input', True) Logger.log_message(code=code, message=message, node=node, error_position=node.get_source_position(), log_level=LoggingLevel.WARNING) # check that output block is defined at most once if isinstance(node.get_output_blocks(), list) and len(node.get_output_blocks()) > 1: code, message = Messages.get_block_not_defined_correctly( 'Output', False) Logger.log_message(code=code, message=message, node=node, error_position=node.get_source_position(), log_level=LoggingLevel.ERROR) elif isinstance(node.get_output_blocks(), list) and len( node.get_output_blocks()) == 0: code, message = Messages.get_block_not_defined_correctly( 'Output', True) Logger.log_message(code=code, message=message, node=node, error_position=node.get_source_position(), log_level=LoggingLevel.WARNING) elif node.get_output_blocks() is None: code, message = Messages.get_block_not_defined_correctly( 'Output', True) Logger.log_message(code=code, message=message, node=node, error_position=node.get_source_position(), log_level=LoggingLevel.WARNING)