code: def parse_opts(self, argv, ignore_unknown=[]):
      ret = []
      opts = {}
      for a in argv:
          orig_a = a
          if not a.startswith("--"):
              ret.append(a)
              continue
          a = a[2:]
          i = a.find("=")
          op = "="
          if i == -1:
              if a.startswith("no-"):
                  k = a[3:]
                  v = False
              else:
                  k = a
                  v = True
          else:
              k = a[:i]
              if k[-1] in "-+":
                  op = k[-1] + "="  # Ops is '-=' or '+=' now.
                  k = k[:-1]
              v = a[i + 1 :]
          ok = k
          k = k.replace("-", "_")
          if not hasattr(self, k):
              if ignore_unknown is True or ok in ignore_unknown:
                  ret.append(orig_a)
                  continue
              else:
                  raise self.UnknownOptionError(
                      "Unknown option '%s'" % a
                  )
  
          ov = getattr(self, k)
          if isinstance(ov, bool):
              v = bool(v)
          elif isinstance(ov, int):
              v = int(v)
          elif isinstance(ov, list):
              vv = v.split(",")
              if vv == [""]:
                  vv = []
              vv = [
                  int(x, 0) if len(x) and x[0] in "0123456789" else x
                  for x in vv
              ]
              if op == "=":
                  v = vv
              elif op == "+=":
                  v = ov
                  v.extend(vv)
              elif op == "-=":
                  v = ov
                  for x in vv:
                      if x in v:
                          v.remove(x)
              else:
                  assert 0
  
          opts[k] = v
      self.set(**opts)
  
      return ret
  
label_desc: Use image node_id 3 for calling the Options obj's underlying member method code with example usage: obj.parse_opts(argv, ignore_unknown) and returns: ret