code: def parse(self, args, ignore_help=False):
          
          options = self._default_dict()
  
          seen = set()
  
          # Do not alter the arguments. We may need them later.
          args = copy.copy(args)
          while args:
              opt = args.pop(0)
  
              seen.add(opt)
  
              if opt in ("--help","-h"):
                  if ignore_help:
                      continue
                  raise SimoptHelp
  
              if not opt in self._optiondict:
                  raise Usage("Unrecognized option '%s'"%opt)
  
              attr, typ, num, default, flags, description = self._optiondict[opt]
  
              if num > len(args):
                  raise Usage("Option '%s' requires %d arguments"%(opt,num))
  
              if num:
                  a = args.pop(0)
                  try:
                      val = [typ(a) for i in range(num)]
                  except ValueError:
                      raise Usage("Invalid argument to option '%s': %s"%(opt,repr(a)))
              else:
                  # Boolean flag
                  val = [True]
  
              if typ == bool:
                  # A boolean option is simply set to True if given
                  options[attr] = True
              elif flags & MULTI:
                  # A multi-option adds an item or a tuple to the list
                  options[attr] = options.get(attr, list())
                  options[attr].append(val[0] if num == 1 else tuple(val))
              else:
                  # Other options just set item or tuple
                  options[attr] = val[0] if num == 1 else tuple(val)
  
          # All mandatory options should be seen
          missing = self.mandatory_arguments - seen
          if not ignore_help and missing:
              raise MissingMandatoryError(missing)
  
          return options
docs: Parse the (command-line) arguments.