forked from Rust-related/RustPython
Update collections/__init__.py to 3.12.2
This commit is contained in:
39
Lib/collections/__init__.py
vendored
39
Lib/collections/__init__.py
vendored
@@ -45,6 +45,11 @@ except ImportError:
|
||||
else:
|
||||
_collections_abc.MutableSequence.register(deque)
|
||||
|
||||
try:
|
||||
from _collections import _deque_iterator
|
||||
except ImportError:
|
||||
pass
|
||||
|
||||
try:
|
||||
from _collections import defaultdict
|
||||
except ImportError:
|
||||
@@ -94,17 +99,19 @@ class OrderedDict(dict):
|
||||
# Individual links are kept alive by the hard reference in self.__map.
|
||||
# Those hard references disappear when a key is deleted from an OrderedDict.
|
||||
|
||||
def __init__(self, other=(), /, **kwds):
|
||||
'''Initialize an ordered dictionary. The signature is the same as
|
||||
regular dictionaries. Keyword argument order is preserved.
|
||||
'''
|
||||
try:
|
||||
self.__root
|
||||
except AttributeError:
|
||||
def __new__(cls, /, *args, **kwds):
|
||||
"Create the ordered dict object and set up the underlying structures."
|
||||
self = dict.__new__(cls)
|
||||
self.__hardroot = _Link()
|
||||
self.__root = root = _proxy(self.__hardroot)
|
||||
root.prev = root.next = root
|
||||
self.__map = {}
|
||||
return self
|
||||
|
||||
def __init__(self, other=(), /, **kwds):
|
||||
'''Initialize an ordered dictionary. The signature is the same as
|
||||
regular dictionaries. Keyword argument order is preserved.
|
||||
'''
|
||||
self.__update(other, **kwds)
|
||||
|
||||
def __setitem__(self, key, value,
|
||||
@@ -271,7 +278,7 @@ class OrderedDict(dict):
|
||||
'od.__repr__() <==> repr(od)'
|
||||
if not self:
|
||||
return '%s()' % (self.__class__.__name__,)
|
||||
return '%s(%r)' % (self.__class__.__name__, list(self.items()))
|
||||
return '%s(%r)' % (self.__class__.__name__, dict(self.items()))
|
||||
|
||||
def __reduce__(self):
|
||||
'Return state information for pickling'
|
||||
@@ -510,6 +517,9 @@ def namedtuple(typename, field_names, *, rename=False, defaults=None, module=Non
|
||||
# defined for arguments greater than 0 (IronPython), or where the user has
|
||||
# specified a particular module.
|
||||
if module is None:
|
||||
try:
|
||||
module = _sys._getframemodulename(1) or '__main__'
|
||||
except AttributeError:
|
||||
try:
|
||||
module = _sys._getframe(1).f_globals.get('__name__', '__main__')
|
||||
except (AttributeError, ValueError):
|
||||
@@ -1015,8 +1025,8 @@ class ChainMap(_collections_abc.MutableMapping):
|
||||
|
||||
def __iter__(self):
|
||||
d = {}
|
||||
for mapping in reversed(self.maps):
|
||||
d.update(dict.fromkeys(mapping)) # reuses stored hash values if possible
|
||||
for mapping in map(dict.fromkeys, reversed(self.maps)):
|
||||
d |= mapping # reuses stored hash values if possible
|
||||
return iter(d)
|
||||
|
||||
def __contains__(self, key):
|
||||
@@ -1136,10 +1146,17 @@ class UserDict(_collections_abc.MutableMapping):
|
||||
def __iter__(self):
|
||||
return iter(self.data)
|
||||
|
||||
# Modify __contains__ to work correctly when __missing__ is present
|
||||
# Modify __contains__ and get() to work like dict
|
||||
# does when __missing__ is present.
|
||||
def __contains__(self, key):
|
||||
return key in self.data
|
||||
|
||||
def get(self, key, default=None):
|
||||
if key in self:
|
||||
return self[key]
|
||||
return default
|
||||
|
||||
|
||||
# Now, add the methods in dicts but not in MutableMapping
|
||||
def __repr__(self):
|
||||
return repr(self.data)
|
||||
|
||||
Reference in New Issue
Block a user