17db96d56Sopenharmony_ci:mod:`enum` --- Support for enumerations
27db96d56Sopenharmony_ci========================================
37db96d56Sopenharmony_ci
47db96d56Sopenharmony_ci.. module:: enum
57db96d56Sopenharmony_ci   :synopsis: Implementation of an enumeration class.
67db96d56Sopenharmony_ci
77db96d56Sopenharmony_ci.. moduleauthor:: Ethan Furman <ethan@stoneleaf.us>
87db96d56Sopenharmony_ci.. sectionauthor:: Barry Warsaw <barry@python.org>
97db96d56Sopenharmony_ci.. sectionauthor:: Eli Bendersky <eliben@gmail.com>
107db96d56Sopenharmony_ci.. sectionauthor:: Ethan Furman <ethan@stoneleaf.us>
117db96d56Sopenharmony_ci
127db96d56Sopenharmony_ci.. versionadded:: 3.4
137db96d56Sopenharmony_ci
147db96d56Sopenharmony_ci**Source code:** :source:`Lib/enum.py`
157db96d56Sopenharmony_ci
167db96d56Sopenharmony_ci.. sidebar:: Important
177db96d56Sopenharmony_ci
187db96d56Sopenharmony_ci   This page contains the API reference information. For tutorial
197db96d56Sopenharmony_ci   information and discussion of more advanced topics, see
207db96d56Sopenharmony_ci
217db96d56Sopenharmony_ci   * :ref:`Basic Tutorial <enum-basic-tutorial>`
227db96d56Sopenharmony_ci   * :ref:`Advanced Tutorial <enum-advanced-tutorial>`
237db96d56Sopenharmony_ci   * :ref:`Enum Cookbook <enum-cookbook>`
247db96d56Sopenharmony_ci
257db96d56Sopenharmony_ci---------------
267db96d56Sopenharmony_ci
277db96d56Sopenharmony_ciAn enumeration:
287db96d56Sopenharmony_ci
297db96d56Sopenharmony_ci* is a set of symbolic names (members) bound to unique values
307db96d56Sopenharmony_ci* can be iterated over to return its canonical (i.e. non-alias) members in
317db96d56Sopenharmony_ci  definition order
327db96d56Sopenharmony_ci* uses *call* syntax to return members by value
337db96d56Sopenharmony_ci* uses *index* syntax to return members by name
347db96d56Sopenharmony_ci
357db96d56Sopenharmony_ciEnumerations are created either by using :keyword:`class` syntax, or by
367db96d56Sopenharmony_ciusing function-call syntax::
377db96d56Sopenharmony_ci
387db96d56Sopenharmony_ci   >>> from enum import Enum
397db96d56Sopenharmony_ci
407db96d56Sopenharmony_ci   >>> # class syntax
417db96d56Sopenharmony_ci   >>> class Color(Enum):
427db96d56Sopenharmony_ci   ...     RED = 1
437db96d56Sopenharmony_ci   ...     GREEN = 2
447db96d56Sopenharmony_ci   ...     BLUE = 3
457db96d56Sopenharmony_ci
467db96d56Sopenharmony_ci   >>> # functional syntax
477db96d56Sopenharmony_ci   >>> Color = Enum('Color', ['RED', 'GREEN', 'BLUE'])
487db96d56Sopenharmony_ci
497db96d56Sopenharmony_ciEven though we can use :keyword:`class` syntax to create Enums, Enums
507db96d56Sopenharmony_ciare not normal Python classes.  See
517db96d56Sopenharmony_ci:ref:`How are Enums different? <enum-class-differences>` for more details.
527db96d56Sopenharmony_ci
537db96d56Sopenharmony_ci.. note:: Nomenclature
547db96d56Sopenharmony_ci
557db96d56Sopenharmony_ci   - The class :class:`!Color` is an *enumeration* (or *enum*)
567db96d56Sopenharmony_ci   - The attributes :attr:`!Color.RED`, :attr:`!Color.GREEN`, etc., are
577db96d56Sopenharmony_ci     *enumeration members* (or *members*) and are functionally constants.
587db96d56Sopenharmony_ci   - The enum members have *names* and *values* (the name of
597db96d56Sopenharmony_ci     :attr:`!Color.RED` is ``RED``, the value of :attr:`!Color.BLUE` is
607db96d56Sopenharmony_ci     ``3``, etc.)
617db96d56Sopenharmony_ci
627db96d56Sopenharmony_ci---------------
637db96d56Sopenharmony_ci
647db96d56Sopenharmony_ciModule Contents
657db96d56Sopenharmony_ci---------------
667db96d56Sopenharmony_ci
677db96d56Sopenharmony_ci   :class:`EnumType`
687db96d56Sopenharmony_ci
697db96d56Sopenharmony_ci      The ``type`` for Enum and its subclasses.
707db96d56Sopenharmony_ci
717db96d56Sopenharmony_ci   :class:`Enum`
727db96d56Sopenharmony_ci
737db96d56Sopenharmony_ci      Base class for creating enumerated constants.
747db96d56Sopenharmony_ci
757db96d56Sopenharmony_ci   :class:`IntEnum`
767db96d56Sopenharmony_ci
777db96d56Sopenharmony_ci      Base class for creating enumerated constants that are also
787db96d56Sopenharmony_ci      subclasses of :class:`int`. (`Notes`_)
797db96d56Sopenharmony_ci
807db96d56Sopenharmony_ci   :class:`StrEnum`
817db96d56Sopenharmony_ci
827db96d56Sopenharmony_ci      Base class for creating enumerated constants that are also
837db96d56Sopenharmony_ci      subclasses of :class:`str`. (`Notes`_)
847db96d56Sopenharmony_ci
857db96d56Sopenharmony_ci   :class:`Flag`
867db96d56Sopenharmony_ci
877db96d56Sopenharmony_ci      Base class for creating enumerated constants that can be combined using
887db96d56Sopenharmony_ci      the bitwise operations without losing their :class:`Flag` membership.
897db96d56Sopenharmony_ci
907db96d56Sopenharmony_ci   :class:`IntFlag`
917db96d56Sopenharmony_ci
927db96d56Sopenharmony_ci      Base class for creating enumerated constants that can be combined using
937db96d56Sopenharmony_ci      the bitwise operators without losing their :class:`IntFlag` membership.
947db96d56Sopenharmony_ci      :class:`IntFlag` members are also subclasses of :class:`int`. (`Notes`_)
957db96d56Sopenharmony_ci
967db96d56Sopenharmony_ci   :class:`ReprEnum`
977db96d56Sopenharmony_ci
987db96d56Sopenharmony_ci      Used by :class:`IntEnum`, :class:`StrEnum`, and :class:`IntFlag`
997db96d56Sopenharmony_ci      to keep the :class:`str() <str>` of the mixed-in type.
1007db96d56Sopenharmony_ci
1017db96d56Sopenharmony_ci   :class:`EnumCheck`
1027db96d56Sopenharmony_ci
1037db96d56Sopenharmony_ci      An enumeration with the values ``CONTINUOUS``, ``NAMED_FLAGS``, and
1047db96d56Sopenharmony_ci      ``UNIQUE``, for use with :func:`verify` to ensure various constraints
1057db96d56Sopenharmony_ci      are met by a given enumeration.
1067db96d56Sopenharmony_ci
1077db96d56Sopenharmony_ci   :class:`FlagBoundary`
1087db96d56Sopenharmony_ci
1097db96d56Sopenharmony_ci      An enumeration with the values ``STRICT``, ``CONFORM``, ``EJECT``, and
1107db96d56Sopenharmony_ci      ``KEEP`` which allows for more fine-grained control over how invalid values
1117db96d56Sopenharmony_ci      are dealt with in an enumeration.
1127db96d56Sopenharmony_ci
1137db96d56Sopenharmony_ci   :class:`auto`
1147db96d56Sopenharmony_ci
1157db96d56Sopenharmony_ci      Instances are replaced with an appropriate value for Enum members.
1167db96d56Sopenharmony_ci      :class:`StrEnum` defaults to the lower-cased version of the member name,
1177db96d56Sopenharmony_ci      while other Enums default to 1 and increase from there.
1187db96d56Sopenharmony_ci
1197db96d56Sopenharmony_ci   :func:`~enum.property`
1207db96d56Sopenharmony_ci
1217db96d56Sopenharmony_ci      Allows :class:`Enum` members to have attributes without conflicting with
1227db96d56Sopenharmony_ci      member names.
1237db96d56Sopenharmony_ci
1247db96d56Sopenharmony_ci   :func:`unique`
1257db96d56Sopenharmony_ci
1267db96d56Sopenharmony_ci      Enum class decorator that ensures only one name is bound to any one value.
1277db96d56Sopenharmony_ci
1287db96d56Sopenharmony_ci   :func:`verify`
1297db96d56Sopenharmony_ci
1307db96d56Sopenharmony_ci      Enum class decorator that checks user-selectable constraints on an
1317db96d56Sopenharmony_ci      enumeration.
1327db96d56Sopenharmony_ci
1337db96d56Sopenharmony_ci   :func:`member`
1347db96d56Sopenharmony_ci
1357db96d56Sopenharmony_ci      Make ``obj`` a member.  Can be used as a decorator.
1367db96d56Sopenharmony_ci
1377db96d56Sopenharmony_ci   :func:`nonmember`
1387db96d56Sopenharmony_ci
1397db96d56Sopenharmony_ci      Do not make ``obj`` a member.  Can be used as a decorator.
1407db96d56Sopenharmony_ci
1417db96d56Sopenharmony_ci   :func:`global_enum`
1427db96d56Sopenharmony_ci
1437db96d56Sopenharmony_ci      Modify the :class:`str() <str>` and :func:`repr` of an enum
1447db96d56Sopenharmony_ci      to show its members as belonging to the module instead of its class,
1457db96d56Sopenharmony_ci      and export the enum members to the global namespace.
1467db96d56Sopenharmony_ci
1477db96d56Sopenharmony_ci   :func:`show_flag_values`
1487db96d56Sopenharmony_ci
1497db96d56Sopenharmony_ci      Return a list of all power-of-two integers contained in a flag.
1507db96d56Sopenharmony_ci
1517db96d56Sopenharmony_ci
1527db96d56Sopenharmony_ci.. versionadded:: 3.6  ``Flag``, ``IntFlag``, ``auto``
1537db96d56Sopenharmony_ci.. versionadded:: 3.11  ``StrEnum``, ``EnumCheck``, ``ReprEnum``, ``FlagBoundary``, ``property``, ``member``, ``nonmember``, ``global_enum``, ``show_flag_values``
1547db96d56Sopenharmony_ci
1557db96d56Sopenharmony_ci---------------
1567db96d56Sopenharmony_ci
1577db96d56Sopenharmony_ciData Types
1587db96d56Sopenharmony_ci----------
1597db96d56Sopenharmony_ci
1607db96d56Sopenharmony_ci
1617db96d56Sopenharmony_ci.. class:: EnumType
1627db96d56Sopenharmony_ci
1637db96d56Sopenharmony_ci   *EnumType* is the :term:`metaclass` for *enum* enumerations.  It is possible
1647db96d56Sopenharmony_ci   to subclass *EnumType* -- see :ref:`Subclassing EnumType <enumtype-examples>`
1657db96d56Sopenharmony_ci   for details.
1667db96d56Sopenharmony_ci
1677db96d56Sopenharmony_ci   *EnumType* is responsible for setting the correct :meth:`!__repr__`,
1687db96d56Sopenharmony_ci   :meth:`!__str__`, :meth:`!__format__`, and :meth:`!__reduce__` methods on the
1697db96d56Sopenharmony_ci   final *enum*, as well as creating the enum members, properly handling
1707db96d56Sopenharmony_ci   duplicates, providing iteration over the enum class, etc.
1717db96d56Sopenharmony_ci
1727db96d56Sopenharmony_ci   .. method:: EnumType.__call__(cls, value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)
1737db96d56Sopenharmony_ci
1747db96d56Sopenharmony_ci      This method is called in two different ways:
1757db96d56Sopenharmony_ci
1767db96d56Sopenharmony_ci      * to look up an existing member:
1777db96d56Sopenharmony_ci
1787db96d56Sopenharmony_ci         :cls:   The enum class being called.
1797db96d56Sopenharmony_ci         :value: The value to lookup.
1807db96d56Sopenharmony_ci
1817db96d56Sopenharmony_ci      * to use the ``cls`` enum to create a new enum (only if the existing enum
1827db96d56Sopenharmony_ci        does not have any members):
1837db96d56Sopenharmony_ci
1847db96d56Sopenharmony_ci         :cls:   The enum class being called.
1857db96d56Sopenharmony_ci         :value: The name of the new Enum to create.
1867db96d56Sopenharmony_ci         :names: The names/values of the members for the new Enum.
1877db96d56Sopenharmony_ci         :module:    The name of the module the new Enum is created in.
1887db96d56Sopenharmony_ci         :qualname:  The actual location in the module where this Enum can be found.
1897db96d56Sopenharmony_ci         :type:  A mix-in type for the new Enum.
1907db96d56Sopenharmony_ci         :start: The first integer value for the Enum (used by :class:`auto`).
1917db96d56Sopenharmony_ci         :boundary:  How to handle out-of-range values from bit operations (:class:`Flag` only).
1927db96d56Sopenharmony_ci
1937db96d56Sopenharmony_ci   .. method:: EnumType.__contains__(cls, member)
1947db96d56Sopenharmony_ci
1957db96d56Sopenharmony_ci      Returns ``True`` if member belongs to the ``cls``::
1967db96d56Sopenharmony_ci
1977db96d56Sopenharmony_ci        >>> some_var = Color.RED
1987db96d56Sopenharmony_ci        >>> some_var in Color
1997db96d56Sopenharmony_ci        True
2007db96d56Sopenharmony_ci
2017db96d56Sopenharmony_ci      .. note::
2027db96d56Sopenharmony_ci
2037db96d56Sopenharmony_ci         In Python 3.12 it will be possible to check for member values and not
2047db96d56Sopenharmony_ci         just members; until then, a ``TypeError`` will be raised if a
2057db96d56Sopenharmony_ci         non-Enum-member is used in a containment check.
2067db96d56Sopenharmony_ci
2077db96d56Sopenharmony_ci   .. method:: EnumType.__dir__(cls)
2087db96d56Sopenharmony_ci
2097db96d56Sopenharmony_ci      Returns ``['__class__', '__doc__', '__members__', '__module__']`` and the
2107db96d56Sopenharmony_ci      names of the members in *cls*::
2117db96d56Sopenharmony_ci
2127db96d56Sopenharmony_ci        >>> dir(Color)
2137db96d56Sopenharmony_ci        ['BLUE', 'GREEN', 'RED', '__class__', '__contains__', '__doc__', '__getitem__', '__init_subclass__', '__iter__', '__len__', '__members__', '__module__', '__name__', '__qualname__']
2147db96d56Sopenharmony_ci
2157db96d56Sopenharmony_ci   .. method:: EnumType.__getattr__(cls, name)
2167db96d56Sopenharmony_ci
2177db96d56Sopenharmony_ci      Returns the Enum member in *cls* matching *name*, or raises an :exc:`AttributeError`::
2187db96d56Sopenharmony_ci
2197db96d56Sopenharmony_ci        >>> Color.GREEN
2207db96d56Sopenharmony_ci        <Color.GREEN: 2>
2217db96d56Sopenharmony_ci
2227db96d56Sopenharmony_ci   .. method:: EnumType.__getitem__(cls, name)
2237db96d56Sopenharmony_ci
2247db96d56Sopenharmony_ci      Returns the Enum member in *cls* matching *name*, or raises a :exc:`KeyError`::
2257db96d56Sopenharmony_ci
2267db96d56Sopenharmony_ci        >>> Color['BLUE']
2277db96d56Sopenharmony_ci        <Color.BLUE: 3>
2287db96d56Sopenharmony_ci
2297db96d56Sopenharmony_ci   .. method:: EnumType.__iter__(cls)
2307db96d56Sopenharmony_ci
2317db96d56Sopenharmony_ci      Returns each member in *cls* in definition order::
2327db96d56Sopenharmony_ci
2337db96d56Sopenharmony_ci        >>> list(Color)
2347db96d56Sopenharmony_ci        [<Color.RED: 1>, <Color.GREEN: 2>, <Color.BLUE: 3>]
2357db96d56Sopenharmony_ci
2367db96d56Sopenharmony_ci   .. method:: EnumType.__len__(cls)
2377db96d56Sopenharmony_ci
2387db96d56Sopenharmony_ci      Returns the number of member in *cls*::
2397db96d56Sopenharmony_ci
2407db96d56Sopenharmony_ci        >>> len(Color)
2417db96d56Sopenharmony_ci        3
2427db96d56Sopenharmony_ci
2437db96d56Sopenharmony_ci   .. method:: EnumType.__reversed__(cls)
2447db96d56Sopenharmony_ci
2457db96d56Sopenharmony_ci      Returns each member in *cls* in reverse definition order::
2467db96d56Sopenharmony_ci
2477db96d56Sopenharmony_ci        >>> list(reversed(Color))
2487db96d56Sopenharmony_ci        [<Color.BLUE: 3>, <Color.GREEN: 2>, <Color.RED: 1>]
2497db96d56Sopenharmony_ci
2507db96d56Sopenharmony_ci
2517db96d56Sopenharmony_ci.. class:: Enum
2527db96d56Sopenharmony_ci
2537db96d56Sopenharmony_ci   *Enum* is the base class for all *enum* enumerations.
2547db96d56Sopenharmony_ci
2557db96d56Sopenharmony_ci   .. attribute:: Enum.name
2567db96d56Sopenharmony_ci
2577db96d56Sopenharmony_ci      The name used to define the ``Enum`` member::
2587db96d56Sopenharmony_ci
2597db96d56Sopenharmony_ci        >>> Color.BLUE.name
2607db96d56Sopenharmony_ci        'BLUE'
2617db96d56Sopenharmony_ci
2627db96d56Sopenharmony_ci   .. attribute:: Enum.value
2637db96d56Sopenharmony_ci
2647db96d56Sopenharmony_ci      The value given to the ``Enum`` member::
2657db96d56Sopenharmony_ci
2667db96d56Sopenharmony_ci         >>> Color.RED.value
2677db96d56Sopenharmony_ci         1
2687db96d56Sopenharmony_ci
2697db96d56Sopenharmony_ci      .. note:: Enum member values
2707db96d56Sopenharmony_ci
2717db96d56Sopenharmony_ci         Member values can be anything: :class:`int`, :class:`str`, etc.  If
2727db96d56Sopenharmony_ci         the exact value is unimportant you may use :class:`auto` instances and an
2737db96d56Sopenharmony_ci         appropriate value will be chosen for you.  See :class:`auto` for the
2747db96d56Sopenharmony_ci         details.
2757db96d56Sopenharmony_ci
2767db96d56Sopenharmony_ci   .. attribute:: Enum._ignore_
2777db96d56Sopenharmony_ci
2787db96d56Sopenharmony_ci      ``_ignore_`` is only used during creation and is removed from the
2797db96d56Sopenharmony_ci      enumeration once creation is complete.
2807db96d56Sopenharmony_ci
2817db96d56Sopenharmony_ci      ``_ignore_`` is a list of names that will not become members, and whose
2827db96d56Sopenharmony_ci      names will also be removed from the completed enumeration.  See
2837db96d56Sopenharmony_ci      :ref:`TimePeriod <enum-time-period>` for an example.
2847db96d56Sopenharmony_ci
2857db96d56Sopenharmony_ci   .. method:: Enum.__dir__(self)
2867db96d56Sopenharmony_ci
2877db96d56Sopenharmony_ci      Returns ``['__class__', '__doc__', '__module__', 'name', 'value']`` and
2887db96d56Sopenharmony_ci      any public methods defined on *self.__class__*::
2897db96d56Sopenharmony_ci
2907db96d56Sopenharmony_ci         >>> from datetime import date
2917db96d56Sopenharmony_ci         >>> class Weekday(Enum):
2927db96d56Sopenharmony_ci         ...     MONDAY = 1
2937db96d56Sopenharmony_ci         ...     TUESDAY = 2
2947db96d56Sopenharmony_ci         ...     WEDNESDAY = 3
2957db96d56Sopenharmony_ci         ...     THURSDAY = 4
2967db96d56Sopenharmony_ci         ...     FRIDAY = 5
2977db96d56Sopenharmony_ci         ...     SATURDAY = 6
2987db96d56Sopenharmony_ci         ...     SUNDAY = 7
2997db96d56Sopenharmony_ci         ...     @classmethod
3007db96d56Sopenharmony_ci         ...     def today(cls):
3017db96d56Sopenharmony_ci         ...         print('today is %s' % cls(date.today().isoweekday()).name)
3027db96d56Sopenharmony_ci         >>> dir(Weekday.SATURDAY)
3037db96d56Sopenharmony_ci         ['__class__', '__doc__', '__eq__', '__hash__', '__module__', 'name', 'today', 'value']
3047db96d56Sopenharmony_ci
3057db96d56Sopenharmony_ci   .. method:: Enum._generate_next_value_(name, start, count, last_values)
3067db96d56Sopenharmony_ci
3077db96d56Sopenharmony_ci         :name: The name of the member being defined (e.g. 'RED').
3087db96d56Sopenharmony_ci         :start: The start value for the Enum; the default is 1.
3097db96d56Sopenharmony_ci         :count: The number of members currently defined, not including this one.
3107db96d56Sopenharmony_ci         :last_values: A list of the previous values.
3117db96d56Sopenharmony_ci
3127db96d56Sopenharmony_ci      A *staticmethod* that is used to determine the next value returned by
3137db96d56Sopenharmony_ci      :class:`auto`::
3147db96d56Sopenharmony_ci
3157db96d56Sopenharmony_ci         >>> from enum import auto
3167db96d56Sopenharmony_ci         >>> class PowersOfThree(Enum):
3177db96d56Sopenharmony_ci         ...     @staticmethod
3187db96d56Sopenharmony_ci         ...     def _generate_next_value_(name, start, count, last_values):
3197db96d56Sopenharmony_ci         ...         return 3 ** (count + 1)
3207db96d56Sopenharmony_ci         ...     FIRST = auto()
3217db96d56Sopenharmony_ci         ...     SECOND = auto()
3227db96d56Sopenharmony_ci         >>> PowersOfThree.SECOND.value
3237db96d56Sopenharmony_ci         9
3247db96d56Sopenharmony_ci
3257db96d56Sopenharmony_ci   .. method:: Enum.__init_subclass__(cls, **kwds)
3267db96d56Sopenharmony_ci
3277db96d56Sopenharmony_ci      A *classmethod* that is used to further configure subsequent subclasses.
3287db96d56Sopenharmony_ci      By default, does nothing.
3297db96d56Sopenharmony_ci
3307db96d56Sopenharmony_ci   .. method:: Enum._missing_(cls, value)
3317db96d56Sopenharmony_ci
3327db96d56Sopenharmony_ci      A *classmethod* for looking up values not found in *cls*.  By default it
3337db96d56Sopenharmony_ci      does nothing, but can be overridden to implement custom search behavior::
3347db96d56Sopenharmony_ci
3357db96d56Sopenharmony_ci         >>> from enum import StrEnum
3367db96d56Sopenharmony_ci         >>> class Build(StrEnum):
3377db96d56Sopenharmony_ci         ...     DEBUG = auto()
3387db96d56Sopenharmony_ci         ...     OPTIMIZED = auto()
3397db96d56Sopenharmony_ci         ...     @classmethod
3407db96d56Sopenharmony_ci         ...     def _missing_(cls, value):
3417db96d56Sopenharmony_ci         ...         value = value.lower()
3427db96d56Sopenharmony_ci         ...         for member in cls:
3437db96d56Sopenharmony_ci         ...             if member.value == value:
3447db96d56Sopenharmony_ci         ...                 return member
3457db96d56Sopenharmony_ci         ...         return None
3467db96d56Sopenharmony_ci         >>> Build.DEBUG.value
3477db96d56Sopenharmony_ci         'debug'
3487db96d56Sopenharmony_ci         >>> Build('deBUG')
3497db96d56Sopenharmony_ci         <Build.DEBUG: 'debug'>
3507db96d56Sopenharmony_ci
3517db96d56Sopenharmony_ci   .. method:: Enum.__repr__(self)
3527db96d56Sopenharmony_ci
3537db96d56Sopenharmony_ci      Returns the string used for *repr()* calls.  By default, returns the
3547db96d56Sopenharmony_ci      *Enum* name, member name, and value, but can be overridden::
3557db96d56Sopenharmony_ci
3567db96d56Sopenharmony_ci         >>> class OtherStyle(Enum):
3577db96d56Sopenharmony_ci         ...     ALTERNATE = auto()
3587db96d56Sopenharmony_ci         ...     OTHER = auto()
3597db96d56Sopenharmony_ci         ...     SOMETHING_ELSE = auto()
3607db96d56Sopenharmony_ci         ...     def __repr__(self):
3617db96d56Sopenharmony_ci         ...         cls_name = self.__class__.__name__
3627db96d56Sopenharmony_ci         ...         return f'{cls_name}.{self.name}'
3637db96d56Sopenharmony_ci         >>> OtherStyle.ALTERNATE, str(OtherStyle.ALTERNATE), f"{OtherStyle.ALTERNATE}"
3647db96d56Sopenharmony_ci         (OtherStyle.ALTERNATE, 'OtherStyle.ALTERNATE', 'OtherStyle.ALTERNATE')
3657db96d56Sopenharmony_ci
3667db96d56Sopenharmony_ci   .. method:: Enum.__str__(self)
3677db96d56Sopenharmony_ci
3687db96d56Sopenharmony_ci      Returns the string used for *str()* calls.  By default, returns the
3697db96d56Sopenharmony_ci      *Enum* name and member name, but can be overridden::
3707db96d56Sopenharmony_ci
3717db96d56Sopenharmony_ci         >>> class OtherStyle(Enum):
3727db96d56Sopenharmony_ci         ...     ALTERNATE = auto()
3737db96d56Sopenharmony_ci         ...     OTHER = auto()
3747db96d56Sopenharmony_ci         ...     SOMETHING_ELSE = auto()
3757db96d56Sopenharmony_ci         ...     def __str__(self):
3767db96d56Sopenharmony_ci         ...         return f'{self.name}'
3777db96d56Sopenharmony_ci         >>> OtherStyle.ALTERNATE, str(OtherStyle.ALTERNATE), f"{OtherStyle.ALTERNATE}"
3787db96d56Sopenharmony_ci         (<OtherStyle.ALTERNATE: 1>, 'ALTERNATE', 'ALTERNATE')
3797db96d56Sopenharmony_ci
3807db96d56Sopenharmony_ci   .. method:: Enum.__format__(self)
3817db96d56Sopenharmony_ci
3827db96d56Sopenharmony_ci      Returns the string used for *format()* and *f-string* calls.  By default,
3837db96d56Sopenharmony_ci      returns :meth:`__str__` return value, but can be overridden::
3847db96d56Sopenharmony_ci
3857db96d56Sopenharmony_ci         >>> class OtherStyle(Enum):
3867db96d56Sopenharmony_ci         ...     ALTERNATE = auto()
3877db96d56Sopenharmony_ci         ...     OTHER = auto()
3887db96d56Sopenharmony_ci         ...     SOMETHING_ELSE = auto()
3897db96d56Sopenharmony_ci         ...     def __format__(self, spec):
3907db96d56Sopenharmony_ci         ...         return f'{self.name}'
3917db96d56Sopenharmony_ci         >>> OtherStyle.ALTERNATE, str(OtherStyle.ALTERNATE), f"{OtherStyle.ALTERNATE}"
3927db96d56Sopenharmony_ci         (<OtherStyle.ALTERNATE: 1>, 'OtherStyle.ALTERNATE', 'ALTERNATE')
3937db96d56Sopenharmony_ci
3947db96d56Sopenharmony_ci   .. note::
3957db96d56Sopenharmony_ci
3967db96d56Sopenharmony_ci      Using :class:`auto` with :class:`Enum` results in integers of increasing value,
3977db96d56Sopenharmony_ci      starting with ``1``.
3987db96d56Sopenharmony_ci
3997db96d56Sopenharmony_ci
4007db96d56Sopenharmony_ci.. class:: IntEnum
4017db96d56Sopenharmony_ci
4027db96d56Sopenharmony_ci   *IntEnum* is the same as *Enum*, but its members are also integers and can be
4037db96d56Sopenharmony_ci   used anywhere that an integer can be used.  If any integer operation is performed
4047db96d56Sopenharmony_ci   with an *IntEnum* member, the resulting value loses its enumeration status.
4057db96d56Sopenharmony_ci
4067db96d56Sopenharmony_ci      >>> from enum import IntEnum
4077db96d56Sopenharmony_ci      >>> class Number(IntEnum):
4087db96d56Sopenharmony_ci      ...     ONE = 1
4097db96d56Sopenharmony_ci      ...     TWO = 2
4107db96d56Sopenharmony_ci      ...     THREE = 3
4117db96d56Sopenharmony_ci      ...
4127db96d56Sopenharmony_ci      >>> Number.THREE
4137db96d56Sopenharmony_ci      <Number.THREE: 3>
4147db96d56Sopenharmony_ci      >>> Number.ONE + Number.TWO
4157db96d56Sopenharmony_ci      3
4167db96d56Sopenharmony_ci      >>> Number.THREE + 5
4177db96d56Sopenharmony_ci      8
4187db96d56Sopenharmony_ci      >>> Number.THREE == 3
4197db96d56Sopenharmony_ci      True
4207db96d56Sopenharmony_ci
4217db96d56Sopenharmony_ci   .. note::
4227db96d56Sopenharmony_ci
4237db96d56Sopenharmony_ci      Using :class:`auto` with :class:`IntEnum` results in integers of increasing
4247db96d56Sopenharmony_ci      value, starting with ``1``.
4257db96d56Sopenharmony_ci
4267db96d56Sopenharmony_ci   .. versionchanged:: 3.11 :meth:`~object.__str__` is now :meth:`!int.__str__` to
4277db96d56Sopenharmony_ci      better support the *replacement of existing constants* use-case.
4287db96d56Sopenharmony_ci      :meth:`~object.__format__` was already :meth:`!int.__format__` for that same reason.
4297db96d56Sopenharmony_ci
4307db96d56Sopenharmony_ci
4317db96d56Sopenharmony_ci.. class:: StrEnum
4327db96d56Sopenharmony_ci
4337db96d56Sopenharmony_ci   *StrEnum* is the same as *Enum*, but its members are also strings and can be used
4347db96d56Sopenharmony_ci   in most of the same places that a string can be used.  The result of any string
4357db96d56Sopenharmony_ci   operation performed on or with a *StrEnum* member is not part of the enumeration.
4367db96d56Sopenharmony_ci
4377db96d56Sopenharmony_ci   .. note::
4387db96d56Sopenharmony_ci
4397db96d56Sopenharmony_ci      There are places in the stdlib that check for an exact :class:`str`
4407db96d56Sopenharmony_ci      instead of a :class:`str` subclass (i.e. ``type(unknown) == str``
4417db96d56Sopenharmony_ci      instead of ``isinstance(unknown, str)``), and in those locations you
4427db96d56Sopenharmony_ci      will need to use ``str(StrEnum.member)``.
4437db96d56Sopenharmony_ci
4447db96d56Sopenharmony_ci   .. note::
4457db96d56Sopenharmony_ci
4467db96d56Sopenharmony_ci      Using :class:`auto` with :class:`StrEnum` results in the lower-cased member
4477db96d56Sopenharmony_ci      name as the value.
4487db96d56Sopenharmony_ci
4497db96d56Sopenharmony_ci   .. note::
4507db96d56Sopenharmony_ci
4517db96d56Sopenharmony_ci      :meth:`~object.__str__` is :meth:`!str.__str__` to better support the
4527db96d56Sopenharmony_ci      *replacement of existing constants* use-case.  :meth:`~object.__format__` is likewise
4537db96d56Sopenharmony_ci      :meth:`!str.__format__` for that same reason.
4547db96d56Sopenharmony_ci
4557db96d56Sopenharmony_ci   .. versionadded:: 3.11
4567db96d56Sopenharmony_ci
4577db96d56Sopenharmony_ci.. class:: Flag
4587db96d56Sopenharmony_ci
4597db96d56Sopenharmony_ci   *Flag* members support the bitwise operators ``&`` (*AND*), ``|`` (*OR*),
4607db96d56Sopenharmony_ci   ``^`` (*XOR*), and ``~`` (*INVERT*); the results of those operators are members
4617db96d56Sopenharmony_ci   of the enumeration.
4627db96d56Sopenharmony_ci
4637db96d56Sopenharmony_ci   .. method:: __contains__(self, value)
4647db96d56Sopenharmony_ci
4657db96d56Sopenharmony_ci      Returns *True* if value is in self::
4667db96d56Sopenharmony_ci
4677db96d56Sopenharmony_ci         >>> from enum import Flag, auto
4687db96d56Sopenharmony_ci         >>> class Color(Flag):
4697db96d56Sopenharmony_ci         ...     RED = auto()
4707db96d56Sopenharmony_ci         ...     GREEN = auto()
4717db96d56Sopenharmony_ci         ...     BLUE = auto()
4727db96d56Sopenharmony_ci         >>> purple = Color.RED | Color.BLUE
4737db96d56Sopenharmony_ci         >>> white = Color.RED | Color.GREEN | Color.BLUE
4747db96d56Sopenharmony_ci         >>> Color.GREEN in purple
4757db96d56Sopenharmony_ci         False
4767db96d56Sopenharmony_ci         >>> Color.GREEN in white
4777db96d56Sopenharmony_ci         True
4787db96d56Sopenharmony_ci         >>> purple in white
4797db96d56Sopenharmony_ci         True
4807db96d56Sopenharmony_ci         >>> white in purple
4817db96d56Sopenharmony_ci         False
4827db96d56Sopenharmony_ci
4837db96d56Sopenharmony_ci   .. method:: __iter__(self):
4847db96d56Sopenharmony_ci
4857db96d56Sopenharmony_ci      Returns all contained non-alias members::
4867db96d56Sopenharmony_ci
4877db96d56Sopenharmony_ci         >>> list(Color.RED)
4887db96d56Sopenharmony_ci         [<Color.RED: 1>]
4897db96d56Sopenharmony_ci         >>> list(purple)
4907db96d56Sopenharmony_ci         [<Color.RED: 1>, <Color.BLUE: 4>]
4917db96d56Sopenharmony_ci
4927db96d56Sopenharmony_ci      .. versionchanged:: 3.11
4937db96d56Sopenharmony_ci
4947db96d56Sopenharmony_ci         Aliases are no longer returned during iteration.
4957db96d56Sopenharmony_ci
4967db96d56Sopenharmony_ci   .. method:: __len__(self):
4977db96d56Sopenharmony_ci
4987db96d56Sopenharmony_ci      Returns number of members in flag::
4997db96d56Sopenharmony_ci
5007db96d56Sopenharmony_ci         >>> len(Color.GREEN)
5017db96d56Sopenharmony_ci         1
5027db96d56Sopenharmony_ci         >>> len(white)
5037db96d56Sopenharmony_ci         3
5047db96d56Sopenharmony_ci
5057db96d56Sopenharmony_ci   .. method:: __bool__(self):
5067db96d56Sopenharmony_ci
5077db96d56Sopenharmony_ci      Returns *True* if any members in flag, *False* otherwise::
5087db96d56Sopenharmony_ci
5097db96d56Sopenharmony_ci         >>> bool(Color.GREEN)
5107db96d56Sopenharmony_ci         True
5117db96d56Sopenharmony_ci         >>> bool(white)
5127db96d56Sopenharmony_ci         True
5137db96d56Sopenharmony_ci         >>> black = Color(0)
5147db96d56Sopenharmony_ci         >>> bool(black)
5157db96d56Sopenharmony_ci         False
5167db96d56Sopenharmony_ci
5177db96d56Sopenharmony_ci   .. method:: __or__(self, other)
5187db96d56Sopenharmony_ci
5197db96d56Sopenharmony_ci      Returns current flag binary or'ed with other::
5207db96d56Sopenharmony_ci
5217db96d56Sopenharmony_ci         >>> Color.RED | Color.GREEN
5227db96d56Sopenharmony_ci         <Color.RED|GREEN: 3>
5237db96d56Sopenharmony_ci
5247db96d56Sopenharmony_ci   .. method:: __and__(self, other)
5257db96d56Sopenharmony_ci
5267db96d56Sopenharmony_ci      Returns current flag binary and'ed with other::
5277db96d56Sopenharmony_ci
5287db96d56Sopenharmony_ci         >>> purple & white
5297db96d56Sopenharmony_ci         <Color.RED|BLUE: 5>
5307db96d56Sopenharmony_ci         >>> purple & Color.GREEN
5317db96d56Sopenharmony_ci         <Color: 0>
5327db96d56Sopenharmony_ci
5337db96d56Sopenharmony_ci   .. method:: __xor__(self, other)
5347db96d56Sopenharmony_ci
5357db96d56Sopenharmony_ci      Returns current flag binary xor'ed with other::
5367db96d56Sopenharmony_ci
5377db96d56Sopenharmony_ci         >>> purple ^ white
5387db96d56Sopenharmony_ci         <Color.GREEN: 2>
5397db96d56Sopenharmony_ci         >>> purple ^ Color.GREEN
5407db96d56Sopenharmony_ci         <Color.RED|GREEN|BLUE: 7>
5417db96d56Sopenharmony_ci
5427db96d56Sopenharmony_ci   .. method:: __invert__(self):
5437db96d56Sopenharmony_ci
5447db96d56Sopenharmony_ci      Returns all the flags in *type(self)* that are not in self::
5457db96d56Sopenharmony_ci
5467db96d56Sopenharmony_ci         >>> ~white
5477db96d56Sopenharmony_ci         <Color: 0>
5487db96d56Sopenharmony_ci         >>> ~purple
5497db96d56Sopenharmony_ci         <Color.GREEN: 2>
5507db96d56Sopenharmony_ci         >>> ~Color.RED
5517db96d56Sopenharmony_ci         <Color.GREEN|BLUE: 6>
5527db96d56Sopenharmony_ci
5537db96d56Sopenharmony_ci   .. method:: _numeric_repr_
5547db96d56Sopenharmony_ci
5557db96d56Sopenharmony_ci      Function used to format any remaining unnamed numeric values.  Default is
5567db96d56Sopenharmony_ci      the value's repr; common choices are :func:`hex` and :func:`oct`.
5577db96d56Sopenharmony_ci
5587db96d56Sopenharmony_ci   .. note::
5597db96d56Sopenharmony_ci
5607db96d56Sopenharmony_ci      Using :class:`auto` with :class:`Flag` results in integers that are powers
5617db96d56Sopenharmony_ci      of two, starting with ``1``.
5627db96d56Sopenharmony_ci
5637db96d56Sopenharmony_ci   .. versionchanged:: 3.11 The *repr()* of zero-valued flags has changed.  It
5647db96d56Sopenharmony_ci      is now::
5657db96d56Sopenharmony_ci
5667db96d56Sopenharmony_ci         >>> Color(0) # doctest: +SKIP
5677db96d56Sopenharmony_ci         <Color: 0>
5687db96d56Sopenharmony_ci
5697db96d56Sopenharmony_ci.. class:: IntFlag
5707db96d56Sopenharmony_ci
5717db96d56Sopenharmony_ci   *IntFlag* is the same as *Flag*, but its members are also integers and can be
5727db96d56Sopenharmony_ci   used anywhere that an integer can be used.
5737db96d56Sopenharmony_ci
5747db96d56Sopenharmony_ci      >>> from enum import IntFlag, auto
5757db96d56Sopenharmony_ci      >>> class Color(IntFlag):
5767db96d56Sopenharmony_ci      ...     RED = auto()
5777db96d56Sopenharmony_ci      ...     GREEN = auto()
5787db96d56Sopenharmony_ci      ...     BLUE = auto()
5797db96d56Sopenharmony_ci      >>> Color.RED & 2
5807db96d56Sopenharmony_ci      <Color: 0>
5817db96d56Sopenharmony_ci      >>> Color.RED | 2
5827db96d56Sopenharmony_ci      <Color.RED|GREEN: 3>
5837db96d56Sopenharmony_ci
5847db96d56Sopenharmony_ci   If any integer operation is performed with an *IntFlag* member, the result is
5857db96d56Sopenharmony_ci   not an *IntFlag*::
5867db96d56Sopenharmony_ci
5877db96d56Sopenharmony_ci        >>> Color.RED + 2
5887db96d56Sopenharmony_ci        3
5897db96d56Sopenharmony_ci
5907db96d56Sopenharmony_ci   If a *Flag* operation is performed with an *IntFlag* member and:
5917db96d56Sopenharmony_ci
5927db96d56Sopenharmony_ci      * the result is a valid *IntFlag*: an *IntFlag* is returned
5937db96d56Sopenharmony_ci      * the result is not a valid *IntFlag*: the result depends on the *FlagBoundary* setting
5947db96d56Sopenharmony_ci
5957db96d56Sopenharmony_ci   The *repr()* of unnamed zero-valued flags has changed.  It is now:
5967db96d56Sopenharmony_ci
5977db96d56Sopenharmony_ci      >>> Color(0)
5987db96d56Sopenharmony_ci      <Color: 0>
5997db96d56Sopenharmony_ci
6007db96d56Sopenharmony_ci   .. note::
6017db96d56Sopenharmony_ci
6027db96d56Sopenharmony_ci      Using :class:`auto` with :class:`IntFlag` results in integers that are powers
6037db96d56Sopenharmony_ci      of two, starting with ``1``.
6047db96d56Sopenharmony_ci
6057db96d56Sopenharmony_ci   .. versionchanged:: 3.11
6067db96d56Sopenharmony_ci
6077db96d56Sopenharmony_ci      :meth:`~object.__str__` is now :meth:`!int.__str__` to better support the
6087db96d56Sopenharmony_ci      *replacement of existing constants* use-case.  :meth:`~object.__format__` was
6097db96d56Sopenharmony_ci      already :meth:`!int.__format__` for that same reason.
6107db96d56Sopenharmony_ci
6117db96d56Sopenharmony_ci      Inversion of an :class:`!IntFlag` now returns a positive value that is the
6127db96d56Sopenharmony_ci      union of all flags not in the given flag, rather than a negative value.
6137db96d56Sopenharmony_ci      This matches the existing :class:`Flag` behavior.
6147db96d56Sopenharmony_ci
6157db96d56Sopenharmony_ci.. class:: ReprEnum
6167db96d56Sopenharmony_ci
6177db96d56Sopenharmony_ci   :class:`!ReprEnum` uses the :meth:`repr() <Enum.__repr__>` of :class:`Enum`,
6187db96d56Sopenharmony_ci   but the :class:`str() <str>` of the mixed-in data type:
6197db96d56Sopenharmony_ci
6207db96d56Sopenharmony_ci      * :meth:`!int.__str__` for :class:`IntEnum` and :class:`IntFlag`
6217db96d56Sopenharmony_ci      * :meth:`!str.__str__` for :class:`StrEnum`
6227db96d56Sopenharmony_ci
6237db96d56Sopenharmony_ci   Inherit from :class:`!ReprEnum` to keep the :class:`str() <str>` / :func:`format`
6247db96d56Sopenharmony_ci   of the mixed-in data type instead of using the
6257db96d56Sopenharmony_ci   :class:`Enum`-default :meth:`str() <Enum.__str__>`.
6267db96d56Sopenharmony_ci
6277db96d56Sopenharmony_ci
6287db96d56Sopenharmony_ci   .. versionadded:: 3.11
6297db96d56Sopenharmony_ci
6307db96d56Sopenharmony_ci.. class:: EnumCheck
6317db96d56Sopenharmony_ci
6327db96d56Sopenharmony_ci   *EnumCheck* contains the options used by the :func:`verify` decorator to ensure
6337db96d56Sopenharmony_ci   various constraints; failed constraints result in a :exc:`ValueError`.
6347db96d56Sopenharmony_ci
6357db96d56Sopenharmony_ci   .. attribute:: UNIQUE
6367db96d56Sopenharmony_ci
6377db96d56Sopenharmony_ci      Ensure that each value has only one name::
6387db96d56Sopenharmony_ci
6397db96d56Sopenharmony_ci         >>> from enum import Enum, verify, UNIQUE
6407db96d56Sopenharmony_ci         >>> @verify(UNIQUE)
6417db96d56Sopenharmony_ci         ... class Color(Enum):
6427db96d56Sopenharmony_ci         ...     RED = 1
6437db96d56Sopenharmony_ci         ...     GREEN = 2
6447db96d56Sopenharmony_ci         ...     BLUE = 3
6457db96d56Sopenharmony_ci         ...     CRIMSON = 1
6467db96d56Sopenharmony_ci         Traceback (most recent call last):
6477db96d56Sopenharmony_ci         ...
6487db96d56Sopenharmony_ci         ValueError: aliases found in <enum 'Color'>: CRIMSON -> RED
6497db96d56Sopenharmony_ci
6507db96d56Sopenharmony_ci
6517db96d56Sopenharmony_ci   .. attribute:: CONTINUOUS
6527db96d56Sopenharmony_ci
6537db96d56Sopenharmony_ci      Ensure that there are no missing values between the lowest-valued member
6547db96d56Sopenharmony_ci      and the highest-valued member::
6557db96d56Sopenharmony_ci
6567db96d56Sopenharmony_ci         >>> from enum import Enum, verify, CONTINUOUS
6577db96d56Sopenharmony_ci         >>> @verify(CONTINUOUS)
6587db96d56Sopenharmony_ci         ... class Color(Enum):
6597db96d56Sopenharmony_ci         ...     RED = 1
6607db96d56Sopenharmony_ci         ...     GREEN = 2
6617db96d56Sopenharmony_ci         ...     BLUE = 5
6627db96d56Sopenharmony_ci         Traceback (most recent call last):
6637db96d56Sopenharmony_ci         ...
6647db96d56Sopenharmony_ci         ValueError: invalid enum 'Color': missing values 3, 4
6657db96d56Sopenharmony_ci
6667db96d56Sopenharmony_ci   .. attribute:: NAMED_FLAGS
6677db96d56Sopenharmony_ci
6687db96d56Sopenharmony_ci      Ensure that any flag groups/masks contain only named flags -- useful when
6697db96d56Sopenharmony_ci      values are specified instead of being generated by :func:`auto`::
6707db96d56Sopenharmony_ci
6717db96d56Sopenharmony_ci         >>> from enum import Flag, verify, NAMED_FLAGS
6727db96d56Sopenharmony_ci         >>> @verify(NAMED_FLAGS)
6737db96d56Sopenharmony_ci         ... class Color(Flag):
6747db96d56Sopenharmony_ci         ...     RED = 1
6757db96d56Sopenharmony_ci         ...     GREEN = 2
6767db96d56Sopenharmony_ci         ...     BLUE = 4
6777db96d56Sopenharmony_ci         ...     WHITE = 15
6787db96d56Sopenharmony_ci         ...     NEON = 31
6797db96d56Sopenharmony_ci         Traceback (most recent call last):
6807db96d56Sopenharmony_ci         ...
6817db96d56Sopenharmony_ci         ValueError: invalid Flag 'Color': aliases WHITE and NEON are missing combined values of 0x18 [use enum.show_flag_values(value) for details]
6827db96d56Sopenharmony_ci
6837db96d56Sopenharmony_ci   .. note::
6847db96d56Sopenharmony_ci
6857db96d56Sopenharmony_ci      CONTINUOUS and NAMED_FLAGS are designed to work with integer-valued members.
6867db96d56Sopenharmony_ci
6877db96d56Sopenharmony_ci   .. versionadded:: 3.11
6887db96d56Sopenharmony_ci
6897db96d56Sopenharmony_ci.. class:: FlagBoundary
6907db96d56Sopenharmony_ci
6917db96d56Sopenharmony_ci   *FlagBoundary* controls how out-of-range values are handled in *Flag* and its
6927db96d56Sopenharmony_ci   subclasses.
6937db96d56Sopenharmony_ci
6947db96d56Sopenharmony_ci   .. attribute:: STRICT
6957db96d56Sopenharmony_ci
6967db96d56Sopenharmony_ci      Out-of-range values cause a :exc:`ValueError` to be raised. This is the
6977db96d56Sopenharmony_ci      default for :class:`Flag`::
6987db96d56Sopenharmony_ci
6997db96d56Sopenharmony_ci         >>> from enum import Flag, STRICT, auto
7007db96d56Sopenharmony_ci         >>> class StrictFlag(Flag, boundary=STRICT):
7017db96d56Sopenharmony_ci         ...     RED = auto()
7027db96d56Sopenharmony_ci         ...     GREEN = auto()
7037db96d56Sopenharmony_ci         ...     BLUE = auto()
7047db96d56Sopenharmony_ci         >>> StrictFlag(2**2 + 2**4)
7057db96d56Sopenharmony_ci         Traceback (most recent call last):
7067db96d56Sopenharmony_ci         ...
7077db96d56Sopenharmony_ci         ValueError: <flag 'StrictFlag'> invalid value 20
7087db96d56Sopenharmony_ci             given 0b0 10100
7097db96d56Sopenharmony_ci           allowed 0b0 00111
7107db96d56Sopenharmony_ci
7117db96d56Sopenharmony_ci   .. attribute:: CONFORM
7127db96d56Sopenharmony_ci
7137db96d56Sopenharmony_ci      Out-of-range values have invalid values removed, leaving a valid *Flag*
7147db96d56Sopenharmony_ci      value::
7157db96d56Sopenharmony_ci
7167db96d56Sopenharmony_ci         >>> from enum import Flag, CONFORM, auto
7177db96d56Sopenharmony_ci         >>> class ConformFlag(Flag, boundary=CONFORM):
7187db96d56Sopenharmony_ci         ...     RED = auto()
7197db96d56Sopenharmony_ci         ...     GREEN = auto()
7207db96d56Sopenharmony_ci         ...     BLUE = auto()
7217db96d56Sopenharmony_ci         >>> ConformFlag(2**2 + 2**4)
7227db96d56Sopenharmony_ci         <ConformFlag.BLUE: 4>
7237db96d56Sopenharmony_ci
7247db96d56Sopenharmony_ci   .. attribute:: EJECT
7257db96d56Sopenharmony_ci
7267db96d56Sopenharmony_ci      Out-of-range values lose their *Flag* membership and revert to :class:`int`.
7277db96d56Sopenharmony_ci
7287db96d56Sopenharmony_ci         >>> from enum import Flag, EJECT, auto
7297db96d56Sopenharmony_ci         >>> class EjectFlag(Flag, boundary=EJECT):
7307db96d56Sopenharmony_ci         ...     RED = auto()
7317db96d56Sopenharmony_ci         ...     GREEN = auto()
7327db96d56Sopenharmony_ci         ...     BLUE = auto()
7337db96d56Sopenharmony_ci         >>> EjectFlag(2**2 + 2**4)
7347db96d56Sopenharmony_ci         20
7357db96d56Sopenharmony_ci
7367db96d56Sopenharmony_ci   .. attribute:: KEEP
7377db96d56Sopenharmony_ci
7387db96d56Sopenharmony_ci      Out-of-range values are kept, and the *Flag* membership is kept.
7397db96d56Sopenharmony_ci      This is the default for :class:`IntFlag`::
7407db96d56Sopenharmony_ci
7417db96d56Sopenharmony_ci         >>> from enum import Flag, KEEP, auto
7427db96d56Sopenharmony_ci         >>> class KeepFlag(Flag, boundary=KEEP):
7437db96d56Sopenharmony_ci         ...     RED = auto()
7447db96d56Sopenharmony_ci         ...     GREEN = auto()
7457db96d56Sopenharmony_ci         ...     BLUE = auto()
7467db96d56Sopenharmony_ci         >>> KeepFlag(2**2 + 2**4)
7477db96d56Sopenharmony_ci         <KeepFlag.BLUE|16: 20>
7487db96d56Sopenharmony_ci
7497db96d56Sopenharmony_ci.. versionadded:: 3.11
7507db96d56Sopenharmony_ci
7517db96d56Sopenharmony_ci---------------
7527db96d56Sopenharmony_ci
7537db96d56Sopenharmony_ciSupported ``__dunder__`` names
7547db96d56Sopenharmony_ci""""""""""""""""""""""""""""""
7557db96d56Sopenharmony_ci
7567db96d56Sopenharmony_ci:attr:`~EnumType.__members__` is a read-only ordered mapping of ``member_name``:``member``
7577db96d56Sopenharmony_ciitems.  It is only available on the class.
7587db96d56Sopenharmony_ci
7597db96d56Sopenharmony_ci:meth:`~object.__new__`, if specified, must create and return the enum members; it is
7607db96d56Sopenharmony_cialso a very good idea to set the member's :attr:`!_value_` appropriately.  Once
7617db96d56Sopenharmony_ciall the members are created it is no longer used.
7627db96d56Sopenharmony_ci
7637db96d56Sopenharmony_ci
7647db96d56Sopenharmony_ciSupported ``_sunder_`` names
7657db96d56Sopenharmony_ci""""""""""""""""""""""""""""
7667db96d56Sopenharmony_ci
7677db96d56Sopenharmony_ci- ``_name_`` -- name of the member
7687db96d56Sopenharmony_ci- ``_value_`` -- value of the member; can be set / modified in ``__new__``
7697db96d56Sopenharmony_ci
7707db96d56Sopenharmony_ci- ``_missing_`` -- a lookup function used when a value is not found; may be
7717db96d56Sopenharmony_ci  overridden
7727db96d56Sopenharmony_ci- ``_ignore_`` -- a list of names, either as a :class:`list` or a :class:`str`,
7737db96d56Sopenharmony_ci  that will not be transformed into members, and will be removed from the final
7747db96d56Sopenharmony_ci  class
7757db96d56Sopenharmony_ci- ``_order_`` -- used in Python 2/3 code to ensure member order is consistent
7767db96d56Sopenharmony_ci  (class attribute, removed during class creation)
7777db96d56Sopenharmony_ci- ``_generate_next_value_`` -- used to get an appropriate value for an enum
7787db96d56Sopenharmony_ci  member; may be overridden
7797db96d56Sopenharmony_ci
7807db96d56Sopenharmony_ci   .. note::
7817db96d56Sopenharmony_ci
7827db96d56Sopenharmony_ci       For standard :class:`Enum` classes the next value chosen is the last value seen
7837db96d56Sopenharmony_ci       incremented by one.
7847db96d56Sopenharmony_ci
7857db96d56Sopenharmony_ci       For :class:`Flag` classes the next value chosen will be the next highest
7867db96d56Sopenharmony_ci       power-of-two, regardless of the last value seen.
7877db96d56Sopenharmony_ci
7887db96d56Sopenharmony_ci.. versionadded:: 3.6 ``_missing_``, ``_order_``, ``_generate_next_value_``
7897db96d56Sopenharmony_ci.. versionadded:: 3.7 ``_ignore_``
7907db96d56Sopenharmony_ci
7917db96d56Sopenharmony_ci---------------
7927db96d56Sopenharmony_ci
7937db96d56Sopenharmony_ciUtilities and Decorators
7947db96d56Sopenharmony_ci------------------------
7957db96d56Sopenharmony_ci
7967db96d56Sopenharmony_ci.. class:: auto
7977db96d56Sopenharmony_ci
7987db96d56Sopenharmony_ci   *auto* can be used in place of a value.  If used, the *Enum* machinery will
7997db96d56Sopenharmony_ci   call an *Enum*'s :meth:`~Enum._generate_next_value_` to get an appropriate value.
8007db96d56Sopenharmony_ci   For *Enum* and *IntEnum* that appropriate value will be the last value plus
8017db96d56Sopenharmony_ci   one; for *Flag* and *IntFlag* it will be the first power-of-two greater
8027db96d56Sopenharmony_ci   than the highest value; for *StrEnum* it will be the lower-cased version of
8037db96d56Sopenharmony_ci   the member's name.  Care must be taken if mixing *auto()* with manually
8047db96d56Sopenharmony_ci   specified values.
8057db96d56Sopenharmony_ci
8067db96d56Sopenharmony_ci   *auto* instances are only resolved when at the top level of an assignment:
8077db96d56Sopenharmony_ci
8087db96d56Sopenharmony_ci      * ``FIRST = auto()`` will work (auto() is replaced with ``1``);
8097db96d56Sopenharmony_ci      * ``SECOND = auto(), -2`` will work (auto is replaced with ``2``, so ``2, -2`` is
8107db96d56Sopenharmony_ci         used to create the ``SECOND`` enum member;
8117db96d56Sopenharmony_ci      * ``THREE = [auto(), -3]`` will *not* work (``<auto instance>, -3`` is used to
8127db96d56Sopenharmony_ci        create the ``THREE`` enum member)
8137db96d56Sopenharmony_ci
8147db96d56Sopenharmony_ci   .. versionchanged:: 3.11.1
8157db96d56Sopenharmony_ci
8167db96d56Sopenharmony_ci      In prior versions, ``auto()`` had to be the only thing
8177db96d56Sopenharmony_ci      on the assignment line to work properly.
8187db96d56Sopenharmony_ci
8197db96d56Sopenharmony_ci   ``_generate_next_value_`` can be overridden to customize the values used by
8207db96d56Sopenharmony_ci   *auto*.
8217db96d56Sopenharmony_ci
8227db96d56Sopenharmony_ci   .. note:: in 3.13 the default ``_generate_next_value_`` will always return
8237db96d56Sopenharmony_ci             the highest member value incremented by 1, and will fail if any
8247db96d56Sopenharmony_ci             member is an incompatible type.
8257db96d56Sopenharmony_ci
8267db96d56Sopenharmony_ci.. decorator:: property
8277db96d56Sopenharmony_ci
8287db96d56Sopenharmony_ci   A decorator similar to the built-in *property*, but specifically for
8297db96d56Sopenharmony_ci   enumerations.  It allows member attributes to have the same names as members
8307db96d56Sopenharmony_ci   themselves.
8317db96d56Sopenharmony_ci
8327db96d56Sopenharmony_ci   .. note:: the *property* and the member must be defined in separate classes;
8337db96d56Sopenharmony_ci             for example, the *value* and *name* attributes are defined in the
8347db96d56Sopenharmony_ci             *Enum* class, and *Enum* subclasses can define members with the
8357db96d56Sopenharmony_ci             names ``value`` and ``name``.
8367db96d56Sopenharmony_ci
8377db96d56Sopenharmony_ci   .. versionadded:: 3.11
8387db96d56Sopenharmony_ci
8397db96d56Sopenharmony_ci.. decorator:: unique
8407db96d56Sopenharmony_ci
8417db96d56Sopenharmony_ci   A :keyword:`class` decorator specifically for enumerations.  It searches an
8427db96d56Sopenharmony_ci   enumeration's :attr:`~EnumType.__members__`, gathering any aliases it finds; if any are
8437db96d56Sopenharmony_ci   found :exc:`ValueError` is raised with the details::
8447db96d56Sopenharmony_ci
8457db96d56Sopenharmony_ci      >>> from enum import Enum, unique
8467db96d56Sopenharmony_ci      >>> @unique
8477db96d56Sopenharmony_ci      ... class Mistake(Enum):
8487db96d56Sopenharmony_ci      ...     ONE = 1
8497db96d56Sopenharmony_ci      ...     TWO = 2
8507db96d56Sopenharmony_ci      ...     THREE = 3
8517db96d56Sopenharmony_ci      ...     FOUR = 3
8527db96d56Sopenharmony_ci      ...
8537db96d56Sopenharmony_ci      Traceback (most recent call last):
8547db96d56Sopenharmony_ci      ...
8557db96d56Sopenharmony_ci      ValueError: duplicate values found in <enum 'Mistake'>: FOUR -> THREE
8567db96d56Sopenharmony_ci
8577db96d56Sopenharmony_ci.. decorator:: verify
8587db96d56Sopenharmony_ci
8597db96d56Sopenharmony_ci   A :keyword:`class` decorator specifically for enumerations.  Members from
8607db96d56Sopenharmony_ci   :class:`EnumCheck` are used to specify which constraints should be checked
8617db96d56Sopenharmony_ci   on the decorated enumeration.
8627db96d56Sopenharmony_ci
8637db96d56Sopenharmony_ci   .. versionadded:: 3.11
8647db96d56Sopenharmony_ci
8657db96d56Sopenharmony_ci.. decorator:: member
8667db96d56Sopenharmony_ci
8677db96d56Sopenharmony_ci   A decorator for use in enums: its target will become a member.
8687db96d56Sopenharmony_ci
8697db96d56Sopenharmony_ci   .. versionadded:: 3.11
8707db96d56Sopenharmony_ci
8717db96d56Sopenharmony_ci.. decorator:: nonmember
8727db96d56Sopenharmony_ci
8737db96d56Sopenharmony_ci   A decorator for use in enums: its target will not become a member.
8747db96d56Sopenharmony_ci
8757db96d56Sopenharmony_ci   .. versionadded:: 3.11
8767db96d56Sopenharmony_ci
8777db96d56Sopenharmony_ci.. decorator:: global_enum
8787db96d56Sopenharmony_ci
8797db96d56Sopenharmony_ci   A decorator to change the :class:`str() <str>` and :func:`repr` of an enum
8807db96d56Sopenharmony_ci   to show its members as belonging to the module instead of its class.
8817db96d56Sopenharmony_ci   Should only be used when the enum members are exported
8827db96d56Sopenharmony_ci   to the module global namespace (see :class:`re.RegexFlag` for an example).
8837db96d56Sopenharmony_ci
8847db96d56Sopenharmony_ci
8857db96d56Sopenharmony_ci   .. versionadded:: 3.11
8867db96d56Sopenharmony_ci
8877db96d56Sopenharmony_ci.. function:: show_flag_values(value)
8887db96d56Sopenharmony_ci
8897db96d56Sopenharmony_ci   Return a list of all power-of-two integers contained in a flag *value*.
8907db96d56Sopenharmony_ci
8917db96d56Sopenharmony_ci   .. versionadded:: 3.11
8927db96d56Sopenharmony_ci
8937db96d56Sopenharmony_ci---------------
8947db96d56Sopenharmony_ci
8957db96d56Sopenharmony_ciNotes
8967db96d56Sopenharmony_ci-----
8977db96d56Sopenharmony_ci
8987db96d56Sopenharmony_ci:class:`IntEnum`, :class:`StrEnum`, and :class:`IntFlag`
8997db96d56Sopenharmony_ci
9007db96d56Sopenharmony_ci   These three enum types are designed to be drop-in replacements for existing
9017db96d56Sopenharmony_ci   integer- and string-based values; as such, they have extra limitations:
9027db96d56Sopenharmony_ci
9037db96d56Sopenharmony_ci   - ``__str__`` uses the value and not the name of the enum member
9047db96d56Sopenharmony_ci
9057db96d56Sopenharmony_ci   - ``__format__``, because it uses ``__str__``, will also use the value of
9067db96d56Sopenharmony_ci     the enum member instead of its name
9077db96d56Sopenharmony_ci
9087db96d56Sopenharmony_ci   If you do not need/want those limitations, you can either create your own
9097db96d56Sopenharmony_ci   base class by mixing in the ``int`` or ``str`` type yourself::
9107db96d56Sopenharmony_ci
9117db96d56Sopenharmony_ci       >>> from enum import Enum
9127db96d56Sopenharmony_ci       >>> class MyIntEnum(int, Enum):
9137db96d56Sopenharmony_ci       ...     pass
9147db96d56Sopenharmony_ci
9157db96d56Sopenharmony_ci   or you can reassign the appropriate :meth:`str`, etc., in your enum::
9167db96d56Sopenharmony_ci
9177db96d56Sopenharmony_ci       >>> from enum import Enum, IntEnum
9187db96d56Sopenharmony_ci       >>> class MyIntEnum(IntEnum):
9197db96d56Sopenharmony_ci       ...     __str__ = Enum.__str__
920