Пример #1
0
    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)