docs: 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