code: def _pseudo_parse_arglist(signode, arglist):
          
          paramlist = addnodes.desc_parameterlist()
          stack = [paramlist]
          try:
              for argument in arglist.split(','):
                  argument = argument.strip()
                  ends_open = 0
                  ends_close = 0
                  while argument.startswith('['):
                      stack.append(addnodes.desc_optional())
                      stack[-2] += stack[-1]
                      argument = argument[1:].strip()
                  while argument.startswith(']'):
                      stack.pop()
                      argument = argument[1:].strip()
                  while argument.endswith(']') and not argument.endswith('[]'):
                      ends_close += 1
                      argument = argument[:-1].strip()
                  while argument.endswith('['):
                      ends_open += 1
                      argument = argument[:-1].strip()
                  if argument:
                      stack[-1] += addnodes.desc_parameter(argument, argument)
                  while ends_open:
                      stack.append(addnodes.desc_optional())
                      stack[-2] += stack[-1]
                      ends_open -= 1
                  while ends_close:
                      stack.pop()
                      ends_close -= 1
              if len(stack) != 1:
                  raise IndexError
          except IndexError:
              # If there are too few or too many elements on the stack, just give
              # up and treat the whole argument list as one argument, discarding
              # the already partially populated paramlist node.
              signode += addnodes.desc_parameterlist()
              signode[-1] += addnodes.desc_parameter(arglist, arglist)
          else:
              signode += paramlist
docs: Parse list of comma separated arguments.
  
          Arguments can have optional types.