docs: def _analyze_func_string(func_string):
      """
      Analyze given functiion string an extract:
  
      * function name
      * function arguments
      * function keyword arguments
  
      All given arguments must by of type string, int/float or list.
  
      :param func_string: string of the function
      :return: function name, arguments, keyword arguments
      """
      func = ast.parse(func_string)
      try:
          func_call = func.body[0].value
          func_name = func_call.func.id
      except AttributeError:
          raise SphinxError("Given dynamic function string is not a valid python call. Got: {}".format(func_string))
  
      func_args = []
      for arg in func_call.args:
          if isinstance(arg, ast.Num):
              func_args.append(arg.n)
          elif isinstance(arg, ast.Str):
              func_args.append(arg.s)
          elif isinstance(arg, ast.BoolOp):
              func_args.append(arg.s)
          elif isinstance(arg, ast.List):
              arg_list = []
              for element in arg.elts:
                  if isinstance(element, ast.Num):
                      arg_list.append(element.n)
                  elif isinstance(element, ast.Str):
                      arg_list.append(element.s)
              func_args.append(arg_list)
          else:
              raise FunctionParsingException()
      func_kargs = {}
      for keyword in func_call.keywords:
          kvalue = keyword.value
          kkey = keyword.arg
          if isinstance(kvalue, ast.Num):
              func_kargs[kkey] = kvalue.n
          elif isinstance(kvalue, ast.Str):
              func_kargs[kkey] = kvalue.s
          elif isinstance(kvalue, ast_boolean):  # Check if Boolean
              if is_python3:
                  func_kargs[kkey] = kvalue.value
              else:
                  func_kargs[kkey] = kvalue.id
          elif isinstance(kvalue, ast.List):
              arg_list = []
              for element in kvalue.elts:
                  if isinstance(element, ast.Num):
                      arg_list.append(element.n)
                  elif isinstance(element, ast.Str):
                      arg_list.append(element.s)
              func_kargs[kkey] = arg_list
          else:
              raise FunctionParsingException()
  
      return func_name, func_args, func_kargs