code: def split_parameter_types(parameters):
      
      if parameters == "":
          return []
  
      # only consider the top level commas, ignore the ones in []
      commas = []
      bracket_depth = 0
      for i, char in enumerate(parameters):
          if (char == ",") and (bracket_depth == 0):
              commas.append(i)
          elif char == "[":
              bracket_depth += 1
          elif char == "]":
              bracket_depth -= 1
  
      types = []
      last_i = 0
      for i in commas:
          types.append(parameters[last_i:i].strip())
          last_i = i + 1
      else:
          types.append(parameters[last_i:].strip())
      return types
docs: Split a parameter types declaration into individual types.
  
      The input is the left hand side of a signature (the part before the arrow),
      excluding the parentheses.
  
      :sig: (str) -> List[str]
      :param parameters: Comma separated parameter types.
      :return: Parameter types.