text: # Copyright 2017 The Abseil Authors.
  #
  # Licensed under the Apache License, Version 2.0 (the "License");
  # you may not use this file except in compliance with the License.
  # You may obtain a copy of the License at
  #
  #      http://www.apache.org/licenses/LICENSE-2.0
  #
  # Unless required by applicable law or agreed to in writing, software
  # distributed under the License is distributed on an "AS IS" BASIS,
  # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  # See the License for the specific language governing permissions and
  # limitations under the License.
  """This package is used to define and parse command line flags.
  
  This package defines a *distributed* flag-definition policy: rather than
  an application having to define all flags in or near main(), each Python
  module defines flags that are useful to it.  When one Python module
  imports another, it gains access to the other's flags.  (This is
  implemented by having all modules share a common, global registry object
  containing all the flag information.)
  
  Flags are defined through the use of one of the DEFINE_xxx functions.
  The specific function used determines how the flag is parsed, checked,
  and optionally type-converted, when it's seen on the command line.
  """
  
  from __future__ import absolute_import
  from __future__ import division
  from __future__ import print_function
  
  import getopt
  import os
  import re
  import sys
  import types
  import warnings
  
  from absl.flags import _argument_parser
  from absl.flags import _defines
  from absl.flags import _exceptions
  from absl.flags import _flag
  from absl.flags import _flagvalues
  from absl.flags import _helpers
  from absl.flags import _validators
  import six
  
  # Initialize the FLAGS_MODULE as early as possible.
  # It's only used by adopt_module_key_flags to take SPECIAL_FLAGS into account.
  _helpers.FLAGS_MODULE = sys.modules[__name__]
  
  # Add current module to disclaimed module ids.
  _helpers.disclaim_module_ids.add(id(sys.modules[__name__]))
  
  # DEFINE functions. They are explained in more details in the module doc string.
  # pylint: disable=invalid-name
  DEFINE = _defines.DEFINE
  DEFINE_flag = _defines.DEFINE_flag
  DEFINE_string = _defines.DEFINE_string
  DEFINE_boolean = _defines.DEFINE_boolean
  DEFINE_bool = DEFINE_boolean  # Match C++ API.
  DEFINE_float = _defines.DEFINE_float
  DEFINE_integer = _defines.DEFINE_integer
  DEFINE_enum = _defines.DEFINE_enum
  DEFINE_enum_class = _defines.DEFINE_enum_class
  DEFINE_list = _defines.DEFINE_list
  DEFINE_spaceseplist = _defines.DEFINE_spaceseplist
  DEFINE_multi = _defines.DEFINE_multi
  DEFINE_multi_string = _defines.DEFINE_multi_string
  DEFINE_multi_integer = _defines.DEFINE_multi_integer
  DEFINE_multi_float = _defines.DEFINE_multi_float
  DEFINE_multi_enum = _defines.DEFINE_multi_enum
  DEFINE_multi_enum_class = _defines.DEFINE_multi_enum_class
  DEFINE_alias = _defines.DEFINE_alias
  # pylint: enable=invalid-name
  
  # Flag validators.
  register_validator = _validators.register_validator
  validator = _validators.validator
  register_multi_flags_validator = _validators.register_multi_flags_validator
  multi_flags_validator = _validators.multi_flags_validator
  mark_flag_as_required = _validators.mark_flag_as_required
  mark_flags_as_required = _validators.mark_flags_as_required
  mark_flags_as_mutual_exclusive = _validators.mark_flags_as_mutual_exclusive
  mark_bool_flags_as_mutual_exclusive = _validators.mark_bool_flags_as_mutual_exclusive
  
  # Key flag related functions.
  declare_key_flag = _defines.declare_key_flag
  adopt_module_key_flags = _defines.adopt_module_key_flags
  disclaim_key_flags = _defines.disclaim_key_flags
  
  # Module exceptions.
  # pylint: disable=invalid-name
  Error = _exceptions.Error
  CantOpenFlagFileError = _exceptions.CantOpenFlagFileError
  DuplicateFlagError = _exceptions.DuplicateFlagError
  IllegalFlagValueError = _exceptions.IllegalFlagValueError
  UnrecognizedFlagError = _exceptions.UnrecognizedFlagError
  UnparsedFlagAccessError = _exceptions.UnparsedFlagAccessError
  ValidationError = _exceptions.ValidationError
  FlagNameConflictsWithMethodError = _exceptions.FlagNameConflictsWithMethodError
  
  # Public classes.
  Flag = _flag.Flag
  BooleanFlag = _flag.BooleanFlag
  EnumFlag = _flag.EnumFlag
  EnumClassFlag = _flag.EnumClassFlag
  MultiFlag = _flag.MultiFlag
  MultiEnumClassFlag = _flag.MultiEnumClassFlag
  FlagHolder = _flagvalues.FlagHolder
  FlagValues = _flagvalues.FlagValues
  ArgumentParser = _argument_parser.ArgumentParser
  BooleanParser = _argument_parser.BooleanParser
  EnumParser = _argument_parser.EnumParser
  EnumClassParser = _argument_parser.EnumClassParser
  ArgumentSerializer = _argument_parser.ArgumentSerializer
  FloatParser = _argument_parser.FloatParser
  IntegerParser = _argument_parser.IntegerParser
  BaseListParser = _argument_parser.BaseListParser
  ListParser = _argument_parser.ListParser
  ListSerializer = _argument_parser.ListSerializer
  EnumClassListSerializer = _argument_parser.EnumClassListSerializer
  CsvListSerializer = _argument_parser.CsvListSerializer
  WhitespaceSeparatedListParser = _argument_parser.WhitespaceSeparatedListParser
  EnumClassSerializer = _argument_parser.EnumClassSerializer
  # pylint: enable=invalid-name
  
  # Helper functions.
  get_help_width = _helpers.get_help_width
  text_wrap = _helpers.text_wrap
  flag_dict_to_args = _helpers.flag_dict_to_args
  doc_to_help = _helpers.doc_to_help
  
  # Special flags.
  _helpers.SPECIAL_FLAGS = FlagValues()
  
  DEFINE_string(
      'flagfile', '',
      'Insert flag definitions from the given file into the command line.',
      _helpers.SPECIAL_FLAGS)  # pytype: disable=wrong-arg-types
  
  DEFINE_string('undefok', '',
                'comma-separated list of flag names that it is okay to specify '
                'on the command line even if the program does not define a flag '
                'with that name.  IMPORTANT: flags in this list that have '
                'arguments MUST use the --flag=value format.',
                _helpers.SPECIAL_FLAGS)  # pytype: disable=wrong-arg-types
  
  # The global FlagValues instance.
  FLAGS = _flagvalues.FLAGS
  