From 872b06bd39a195741ec00fdafea2e5451a7ad614 Mon Sep 17 00:00:00 2001 From: John Belmonte Date: Wed, 14 Oct 2020 21:57:35 +0900 Subject: [PATCH 1/2] clarify _decompose() calls --- Lib/enum.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/Lib/enum.py b/Lib/enum.py index 40ff25b9cdad37..10c22ad8c7ef90 100644 --- a/Lib/enum.py +++ b/Lib/enum.py @@ -776,6 +776,7 @@ def _create_pseudo_member_(cls, value): pseudo_member = cls._value2member_map_.setdefault(value, pseudo_member) return pseudo_member + # TODO: document that Flag `in` is a subset operation def __contains__(self, other): if not isinstance(other, self.__class__): raise TypeError( @@ -784,14 +785,14 @@ def __contains__(self, other): return other._value_ & self._value_ == other._value_ def __iter__(self): - members, extra_flags = _decompose(self.__class__, self.value) + members, _ = _decompose(self.__class__, self.value) return (m for m in members if m._value_ != 0) def __repr__(self): cls = self.__class__ if self._name_ is not None: return '<%s.%s: %r>' % (cls.__name__, self._name_, self._value_) - members, uncovered = _decompose(cls, self._value_) + members, _ = _decompose(cls, self._value_) return '<%s.%s: %r>' % ( cls.__name__, '|'.join([str(m._name_ or m._value_) for m in members]), @@ -802,7 +803,7 @@ def __str__(self): cls = self.__class__ if self._name_ is not None: return '%s.%s' % (cls.__name__, self._name_) - members, uncovered = _decompose(cls, self._value_) + members, _ = _decompose(cls, self._value_) if len(members) == 1 and members[0]._name_ is None: return '%s.%r' % (cls.__name__, members[0]._value_) else: @@ -830,7 +831,7 @@ def __xor__(self, other): return self.__class__(self._value_ ^ other._value_) def __invert__(self): - members, uncovered = _decompose(self.__class__, self._value_) + members, _ = _decompose(self.__class__, self._value_) inverted = self.__class__(0) for m in self.__class__: if m not in members and not (m._value_ & self._value_): From b86aa8e31778c4b397458a1791a7b7c639cccb5a Mon Sep 17 00:00:00 2001 From: John Belmonte Date: Thu, 15 Oct 2020 23:11:53 +0900 Subject: [PATCH 2/2] Flag.__invert__() cleanup --- Lib/enum.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/Lib/enum.py b/Lib/enum.py index 10c22ad8c7ef90..513b6854c9f912 100644 --- a/Lib/enum.py +++ b/Lib/enum.py @@ -835,8 +835,8 @@ def __invert__(self): inverted = self.__class__(0) for m in self.__class__: if m not in members and not (m._value_ & self._value_): - inverted = inverted | m - return self.__class__(inverted) + inverted |= m + return inverted class IntFlag(int, Flag): @@ -900,8 +900,7 @@ def __xor__(self, other): __rxor__ = __xor__ def __invert__(self): - result = self.__class__(~self._value_) - return result + return self.__class__(~self._value_) def _high_bit(value):