mirror of
https://github.com/AUTOMATIC1111/stable-diffusion-webui.git
synced 2025-04-25 06:19:00 +08:00
490 lines
9.5 KiB
Plaintext
490 lines
9.5 KiB
Plaintext
3.1.8
|
|
=====
|
|
|
|
recalculate bits used after all flags created (sometimes needed when a custom
|
|
`__new__` is in place.
|
|
|
|
|
|
3.1.7
|
|
=====
|
|
|
|
update flag creation to (possibly) add bitwise operator methods to newly
|
|
created flags
|
|
|
|
update extend_enum() to work with 3.11 flags
|
|
|
|
|
|
3.1.6
|
|
=====
|
|
|
|
Update `dir()` on mixed enums to include mixed data type methods and
|
|
attributes.
|
|
|
|
Rename `enum_property` to `property` to match stdlib. Recommended usage is
|
|
`aenum.property` (prefix with module name).
|
|
|
|
Remove quadritic creation behavior.
|
|
|
|
|
|
BREAKING CHANGE BUG FIX that won't affect most people
|
|
|
|
Enums with a custom `__new__` that:
|
|
|
|
- use the enum machinery to generate the values; AND
|
|
- have keyword arguments set to a default (like `None`)
|
|
|
|
will fail to generate a missing value. To fix: remove the default value and
|
|
instead specify it on the member creation line.
|
|
|
|
BREAKING CHANGE
|
|
|
|
In Python 3.11 the `str()` of mixed enums will now match its `format()` which
|
|
will be the normal `str()` of the data type -- so for an IntEnum you'll see
|
|
`5` instead of `Perm.R|X`. This affects IntEnum, StrEnum, and IntFlag.
|
|
|
|
|
|
3.1.5
|
|
=====
|
|
|
|
fix support of `auto()` kwds
|
|
|
|
|
|
3.1.3
|
|
=====
|
|
|
|
rename `aenum.property` to `aenum.enum_property`
|
|
|
|
fix `enum_property` to work with `_init_` attributes
|
|
|
|
|
|
3.1.2
|
|
=====
|
|
|
|
fix `extend_enum()` for unhashable values
|
|
|
|
|
|
3.1.1
|
|
=====
|
|
|
|
fix `extend_enum()` for most cases
|
|
|
|
|
|
3.1.0
|
|
=====
|
|
|
|
AddValue is similar to the old AutoNumber: it will always activate, but
|
|
uses _generate_next_value_ to get the next value (so the user has some
|
|
control over the return data type instead of always getting an int).
|
|
|
|
|
|
BREAKING CHANGES
|
|
|
|
AutoValue is gone. It was superflous and its removal simplified the code.
|
|
Simply put the fields needed in an `_init_` and `_generate_next_value_`
|
|
will be called to supply the missing values (this is probably already what
|
|
is happening).
|
|
|
|
|
|
|
|
3.0.0
|
|
=====
|
|
|
|
standard Enum usage is unchanged
|
|
|
|
BREAKING CHANGES
|
|
|
|
Enum
|
|
- the more esoteric method of creating Enums have been modified or removed
|
|
- AutoNumber setting is gone, inherit from AutoNumberEnum instead
|
|
- creating members without specifying anything is removed (if you don't
|
|
know what this means, you weren't doing it)
|
|
|
|
Flag
|
|
- unique flags are canonical (i.e. flags with powers of two values such as
|
|
1, 2, 4, 8, 16, etc.)
|
|
- non-unique flags are aliases (i.e. values such as 3 or 7)
|
|
- iteration of Flag and flag members only uses canonical flags
|
|
|
|
|
|
ENHANCEMENTS
|
|
|
|
Member creation has been redone to match Python 3.10's methods. This also
|
|
allows all supported Pythons (2.7, 3.3+) to use the __set_name__ and
|
|
__init_subclass__ protocols (more robustly than in aenum 2.2.5)
|
|
|
|
|
|
CHANGES
|
|
|
|
enum_property() has been renamed to property() (old name still available, but
|
|
deprecated).
|
|
|
|
bin() replacement shows negative integers in twos-complement
|
|
|
|
|
|
|
|
|
|
2.2.5
|
|
=====
|
|
|
|
call __init_subclass__ after members have been added, and in Pythons < 3.6
|
|
call __set_name__ in Pythons < 3.6
|
|
do not convert/disallow private names
|
|
add iteration/len support to NamedConstant
|
|
|
|
|
|
2.2.4
|
|
=====
|
|
|
|
add support to Constant to retrieve members by value
|
|
|
|
--> class K(Constant):
|
|
... one = 1
|
|
... two = 2
|
|
|
|
--> K.one
|
|
<K.one: 1>
|
|
|
|
--> K(1)
|
|
<K.one: 1>
|
|
|
|
add pickle/deepcopy support to Constant
|
|
|
|
add support for Constant to use other Constant values
|
|
(resulting members /are not/ the same)
|
|
|
|
--> class C(Constant)
|
|
... one = K.one
|
|
... three = 3
|
|
|
|
--> C.one == K.one
|
|
True
|
|
|
|
--> C.one is K.one
|
|
False
|
|
|
|
AutoNumber and auto() now work together
|
|
|
|
Enum members are now added to the class as enum_property, which supports
|
|
unshadowing of parent class attributes when called on an Enum member:
|
|
|
|
--> class StrEnum(str, Enum):
|
|
... lower = 'lower'
|
|
... upper = 'upper'
|
|
... mixed = 'mixed'
|
|
|
|
--> StrEnum.lower
|
|
<StrEnum.lower: 'lower'>
|
|
|
|
--> StrEnum.lower.upper()
|
|
'LOWER'
|
|
|
|
--> StrEnum.upper
|
|
<StrEnum.upper: 'upper'>
|
|
|
|
--> StrEnum.upper.upper()
|
|
'UPPER'
|
|
|
|
|
|
2.2.3
|
|
=====
|
|
|
|
use members' type's methods __str__, __repr__, __format__, and
|
|
__reduce_ex__ if directly assigned in Enum class body; i.e.:
|
|
|
|
--> class Color(str, Enum):
|
|
... red = 'red'
|
|
... green = 'green'
|
|
... blue = 'blue'
|
|
... __str__ = str.__str__
|
|
|
|
--> print(repr(Color.green))
|
|
<Color.green: 'green'>
|
|
|
|
--> print(Color.green)
|
|
green
|
|
|
|
|
|
2.2.2
|
|
=====
|
|
|
|
replace _RouteClassAttributeToGetattr with enum_property (it is still
|
|
available as an alias)
|
|
|
|
support constant() and auto() being used together:
|
|
|
|
--> class Fruit(Flag):
|
|
... _order_ = 'apple banana lemon orange'
|
|
... apple = auto()
|
|
... banana = auto()
|
|
... lemon = auto()
|
|
... orange = auto()
|
|
... CitrusTypes = constant(lemon | orange)
|
|
|
|
--> list(Fruit)
|
|
[Fruit.apple, Fruit.banana, Fruit.lemon, Fruit.orange]
|
|
|
|
--> list(Fruit.CitrusTypes)
|
|
[Fruit.orange, Fruit.lemon]
|
|
|
|
--> Fruit.orange in Fruit.CitrusTypes
|
|
True
|
|
|
|
|
|
2.2.1
|
|
=====
|
|
|
|
allow Enums to be called without a value
|
|
|
|
class Color(Enum):
|
|
black = 0
|
|
red = 1
|
|
green = 2
|
|
blue = 3
|
|
#
|
|
@classmethod
|
|
def _missing_value_(cls, value):
|
|
if value is no_arg:
|
|
return cls.black
|
|
|
|
>>> Color()
|
|
<Color.black: 0>
|
|
|
|
allow Enum name use while constructing Enum (Python 3.4+ only)
|
|
|
|
--> class Color(Enum):
|
|
... _order_ = 'BLACK WHITE'
|
|
... BLACK = Color('black', '#000')
|
|
... WHITE = Color('white', '#fff')
|
|
... #
|
|
... def __init__(self, label, hex):
|
|
... self.label = label
|
|
... self.hex = hex
|
|
|
|
|
|
2.2.0
|
|
=====
|
|
|
|
BREAKING CHANGE
|
|
---------------
|
|
In Python 3+ classes defined inside an Enum no longer become members by
|
|
default; in Python 2 they still become members, but see below.
|
|
|
|
For cross-compatibility and full control two decorators are provided:
|
|
|
|
- @member --> forces item to become a member
|
|
- @nonmember --> excludes item from becoming a member
|
|
|
|
So to have an Enum that behaves the same in Python 2 and 3, use the
|
|
decorators (and other compatibility shims):
|
|
|
|
class Color(Enum):
|
|
|
|
_order_ = 'red green blue'
|
|
|
|
red = 1
|
|
green = 2
|
|
blue = 3
|
|
|
|
@nonmember
|
|
class Shades(Enum):
|
|
|
|
_order_ = 'light medium dark'
|
|
|
|
light = 1
|
|
medium = 2
|
|
dark = 3
|
|
|
|
|
|
2.1.4
|
|
=====
|
|
|
|
EnumMeta:
|
|
- change __member_new__ to __new_member__ (as the stdlib enum does)
|
|
- assign member name to enum() instances (an Enum helper for defining members)
|
|
- handle empty iterables when using functional API
|
|
- make auto() work with previous enum members
|
|
- keep searching mixins until base class is found
|
|
|
|
Enum:
|
|
- fix bug in Flag checks (ensure it is a Flag before checking the name)
|
|
- add multiple mixin support
|
|
- do not allow blank names (functional API)
|
|
- raise TypeError if _missing_* returns wrong type
|
|
- fix __format__ to honor custom __str__
|
|
|
|
extend_enum:
|
|
- support stdlib Enums
|
|
- use _generate_next_value_ if value not provided
|
|
|
|
general:
|
|
- standardize exception formatting
|
|
- use getfullargspec() in Python 3 (avoids deprecation warnings)
|
|
|
|
|
|
2.1.2
|
|
=====
|
|
|
|
when order is callable, save it for subclass use
|
|
|
|
|
|
2.1.1
|
|
=====
|
|
|
|
correctly raise TypeError for non-Enum containment checks
|
|
support combining names with | for Flag key access
|
|
support _order_ being a callable
|
|
|
|
|
|
2.1.0
|
|
=====
|
|
|
|
support Flags being combined with other data types:
|
|
- add _create_pseudo_member_values_
|
|
- add default __new__ and temporary _init_
|
|
|
|
|
|
2.0.10
|
|
======
|
|
|
|
ensure _ignore_ is set when _settings_ specified in body which includes
|
|
AutoValue
|
|
|
|
make Flag members iterable
|
|
|
|
|
|
2.0.9
|
|
=====
|
|
|
|
fix missing comma in __all__
|
|
fix extend_enum with custom __new__ methods
|
|
fix MultiValue with AutoNumber without _init_
|
|
|
|
|
|
2.0.8
|
|
=====
|
|
|
|
extend_enum now handles aliases and multivalues correctly
|
|
|
|
|
|
2.0.7
|
|
=====
|
|
|
|
support mixin types with extend_enum
|
|
init and AutoNumber can now work together
|
|
add test for new Enum using EnumMeta
|
|
add tests for variations of multivalue and init
|
|
prevent deletion of NamedConstant.constant
|
|
|
|
|
|
2.0.6
|
|
=====
|
|
|
|
constants cannot be deleted (they already couldn't be changed)
|
|
constants can be used to define other constants
|
|
|
|
|
|
2.0.5
|
|
=====
|
|
|
|
_init_ and MultiValue can now work together
|
|
|
|
|
|
2.0.4
|
|
=====
|
|
|
|
_init_ and AutoValue (and _generate_next_value_) can now work together to
|
|
supply missing values even when some of the required values per member are
|
|
absent
|
|
|
|
|
|
2.0.3
|
|
=====
|
|
|
|
add _missing_value_ and _missing_name_ methods, deprecate _missing_
|
|
make enum instances comparable
|
|
|
|
|
|
2.0.2
|
|
=====
|
|
|
|
both EnumMeta.__getattr__ and Enum.__new__ fall back to _missing_
|
|
|
|
|
|
2.0.1
|
|
=====
|
|
|
|
auto() now works with other data types
|
|
AutoNumber supports legacy Enums (fixed regression)
|
|
|
|
|
|
2.0.0
|
|
=====
|
|
|
|
Flag and IntFlag added.
|
|
|
|
|
|
1.4.7
|
|
=====
|
|
|
|
fix %-interpolation bug
|
|
defined SqlLiteEnum only if sqlite exists
|
|
support pyflakes
|
|
|
|
|
|
1.4.6
|
|
=====
|
|
|
|
version numbering error
|
|
|
|
|
|
1.4.5
|
|
=====
|
|
|
|
revert AutoNumberEnum to custom __new__ instead of AutoNumber
|
|
use _ignore_ to shield against AutoNumber magic
|
|
inherit start and init settings from base Enums
|
|
|
|
|
|
1.4.4
|
|
=====
|
|
|
|
enabled export as a decorator
|
|
enabled _order_ to replace __order__
|
|
enabled python2 support for settings, init, and start
|
|
|
|
|
|
1.4.3
|
|
=====
|
|
|
|
support _ignore_ for dynamically creating class bodies
|
|
|
|
|
|
1.4.2
|
|
=====
|
|
|
|
MultiValue, NoAlias, Unique, and init now work with Python 2
|
|
|
|
|
|
1.4.1
|
|
=====
|
|
|
|
Py3: added Enum creation flags: Auto, MultiValue, NoAlias, Unique
|
|
|
|
fixed extend_enum to honor Enum flags
|
|
|
|
|
|
1.4.0
|
|
=====
|
|
|
|
When possible aenum inherits from Python's own enum.
|
|
|
|
Breaking change: enum members now default to evaluating as True to maintain
|
|
compatibility with the stdlib.
|
|
|
|
Add your own __bool__ (__nonzero__ in Python 2) if need this behavior:
|
|
|
|
def __bool__(self):
|
|
return bool(self.value)
|
|
__nonzero__ = __bool__
|
|
|