code: def get_types(input_types, args, kwargs):
      """Extract the types of args, kwargs, optional kwargs and output.
  
      Parameters
      ----------
      input_types : list
          List of inputs' input_types, including for optional inputs.
      args : tuple
          Args of a function.
      kwargs : dict
          Kwargs of a function.
  
      Returns
      -------
      args_types : list
          Types of args.
      kwargs_types : list
          Types of kwargs.
      opt_kwargs_types : list
          Types of optional kwargs.
      is_scal : bool
          Boolean determining if the output is a scalar.
      """
      len_args = len(args)
      len_kwargs = len(kwargs)
      len_total = len_args + len_kwargs
  
      args_types = input_types[:len_args]
      kwargs_types = input_types[len_args:len_total]
  
      opt_kwargs_types = []
      is_scal = True
      if len(input_types) > len_total:
          opt_kwargs_types = input_types[len_total:]
          last_input_type = input_types[-1]
          if (
              "output_" in last_input_type
              and last_input_type != "output_scalar"
          ):
              is_scal = False
              opt_kwargs_types = input_types[len_total:-1]
      return (args_types, kwargs_types, opt_kwargs_types, is_scal)
  
file_path: geomstats/geomstats/vectorization.py
imports: import math
  import geomstats.backend
label_desc: Use image node_id 8 for calling a global function with example usage: get_types(input_types, args, kwargs) and returns: args_types,  kwargs_types,  opt_kwargs_types,  is_scal