class_docstr: Wrapper around the standard 'getopt()' module that provides some
  handy extra functionality:
    * short and long options are tied together
    * options have help strings, and help text can be assembled
      from them
    * options set attributes of a passed-in object
    * boolean options can have "negative aliases" -- eg. if
      --quiet is the "negative alias" of --verbose, then "--quiet"
      on the command line sets 'verbose' to false
docstr: Populate the various data structures that keep tabs on the
  option table.  Called by 'getopt()' before it can do anything
  worthwhile.
docstr_tok: ["Populate","the","various","data","structures","that","keep","tabs","on","the","option","table",".","Called","by","'getopt","(",")","'","before","it","can","do","anything","worthwhile","."]
code: def _grok_option_table(self):
      """Populate the various data structures that keep tabs on the
      option table.  Called by 'getopt()' before it can do anything
      worthwhile.
      """
      self.long_opts = []
      self.short_opts = []
      self.short2long.clear()
      self.repeat = {}
  
      for option in self.option_table:
          if len(option) == 3:
              long, short, help = option
              repeat = 0
          elif len(option) == 4:
              long, short, help, repeat = option
          else:
              # the option table is part of the code, so simply
              # assert that it is correct
              raise ValueError("invalid option tuple: %r" % (option,))
  
          # Type- and value-check the option names
          if not isinstance(long, str) or len(long) < 2:
              raise DistutilsGetoptError(
                  (
                      "invalid long option '%s': "
                      "must be a string of length >= 2"
                  )
                  % long
              )
  
          if not (
              (short is None)
              or (isinstance(short, str) and len(short) == 1)
          ):
              raise DistutilsGetoptError(
                  "invalid short option '%s': "
                  "must a single character or None" % short
              )
  
          self.repeat[long] = repeat
          self.long_opts.append(long)
  
          if long[-1] == "=":  # option takes an argument?
              if short:
                  short = short + ":"
              long = long[0:-1]
              self.takes_arg[long] = 1
          else:
              # Is option is a "negative alias" for some other option (eg.
              # "quiet" == "!verbose")?
              alias_to = self.negative_alias.get(long)
              if alias_to is not None:
                  if self.takes_arg[alias_to]:
                      raise DistutilsGetoptError(
                          "invalid negative alias '%s': "
                          "aliased option '%s' takes a value"
                          % (long, alias_to)
                      )
  
                  self.long_opts[-1] = long  # XXX redundant?!
              self.takes_arg[long] = 0
  
          # If this is an alias option, make sure its "takes arg" flag is
          # the same as the option it's aliased to.
          alias_to = self.alias.get(long)
          if alias_to is not None:
              if self.takes_arg[long] != self.takes_arg[alias_to]:
                  raise DistutilsGetoptError(
                      "invalid alias '%s': inconsistent with "
                      "aliased option '%s' (one of them takes a value, "
                      "the other doesn't" % (long, alias_to)
                  )
  
          # Now enforce some bondage on the long option name, so we can
          # later translate it to an attribute name on some object.  Have
          # to do this a bit late to make sure we've removed any trailing
          # '='.
          if not longopt_re.match(long):
              raise DistutilsGetoptError(
                  "invalid long option name '%s' "
                  "(must be letters, numbers, hyphens only" % long
              )
  
          self.attr_name[long] = self.get_attr_name(long)
          if short:
              self.short_opts.append(short)
              self.short2long[short[0]] = long
  
imports: import sys, string, re
  import getopt
  from distutils.errors import *
label_desc: Use image node_id 10 for calling the FancyGetopt obj's underlying member method code with example usage: obj._grok_option_table() without return types