def check_function_semantics(self, line: str, position: int, tokens: ParseResults) -> ParseResults:
        """Raise an exception if the function used on the tokens is wrong.

        :raises: InvalidFunctionSemantic
        """
        if not self._namespace_dict or NAMESPACE not in tokens:
            return tokens

        namespace, name = tokens[NAMESPACE], tokens[NAME]

        if namespace in self.identifier_parser.namespace_to_pattern:
            return tokens

        if self._allow_naked_names and tokens[NAMESPACE] == DIRTY:  # Don't check dirty names in lenient mode
            return tokens

        valid_functions = set(itt.chain.from_iterable(
            belns_encodings.get(k, set())
            for k in self._namespace_dict[namespace][name]
        ))

        if not valid_functions:
            raise InvalidEntity(self.get_line_number(), line, position, namespace, name)

        if tokens[FUNCTION] not in valid_functions:
            raise InvalidFunctionSemantic(self.get_line_number(), line, position, tokens[FUNCTION], namespace, name,
                                          valid_functions)

        return tokens
def check_function_semantics ( self , line : str , position : int , tokens : ParseResults ) -> ParseResults : if not self . _namespace_dict or NAMESPACE not in tokens : return tokens namespace , name = tokens [ NAMESPACE ] , tokens [ NAME ] if namespace in self . identifier_parser . namespace_to_pattern : return tokens if self . _allow_naked_names and tokens [ NAMESPACE ] == DIRTY : return tokens valid_functions = set ( itt . chain . from_iterable ( belns_encodings . get ( k , set ( ) ) for k in self . _namespace_dict [ namespace ] [ name ] ) ) if not valid_functions : raise InvalidEntity ( self . get_line_number ( ) , line , position , namespace , name ) if tokens [ FUNCTION ] not in valid_functions : raise InvalidFunctionSemantic ( self . get_line_number ( ) , line , position , tokens [ FUNCTION ] , namespace , name , valid_functions ) return tokens
Raise an exception if the function used on the tokens is wrong.

        :raises: InvalidFunctionSemantic