Mercurial > cpython-lru_cache-weakref
annotate Lib/_abcoll.py @ 78069:a8aa77458e12 3.2
Add c_size_t and c_ssize_t to the ctypes summary table.
| author | Antoine Pitrou <solipsis@pitrou.net> |
|---|---|
| date | Thu, 12 Jul 2012 20:31:50 +0200 |
| parents | 3eeaecf005c1 |
| children | 8e95a078d490 |
| rev | line source |
|---|---|
|
42084
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1 # Copyright 2007 Google, Inc. All Rights Reserved. |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
2 # Licensed to PSF under a Contributor Agreement. |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
3 |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
4 """Abstract Base Classes (ABCs) for collections, according to PEP 3119. |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
5 |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
6 DON'T USE THIS MODULE DIRECTLY! The classes here should be imported |
|
42110
e4f649c4f457
Merged revisions 55962-56019 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
42084
diff
changeset
|
7 via collections; they are defined here only to alleviate certain |
|
42084
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
8 bootstrapping issues. Unit tests are in test_collections. |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
9 """ |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
10 |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
11 from abc import ABCMeta, abstractmethod |
|
48412
5f4a8980c1ac
Merged revisions 64475,64544-64545,64550,64557-64558,64565,64570,64577,64582-64583,64585,64590,64592-64593,64625,64630,64638,64647,64655-64656,64663-64664 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
45659
diff
changeset
|
12 import sys |
|
42084
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
13 |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
14 __all__ = ["Hashable", "Iterable", "Iterator", |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
15 "Sized", "Container", "Callable", |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
16 "Set", "MutableSet", |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
17 "Mapping", "MutableMapping", |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
18 "MappingView", "KeysView", "ItemsView", "ValuesView", |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
19 "Sequence", "MutableSequence", |
|
43956
fe5b2edffae7
Add ABC ByteString which unifies bytes and bytearray (but not memoryview).
Guido van Rossum <guido@python.org>
parents:
43777
diff
changeset
|
20 "ByteString", |
|
42084
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
21 ] |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
22 |
|
44043
1f024a95e9d9
Added view and iterator types to collections / _abcoll
Christian Heimes <christian@cheimes.de>
parents:
43956
diff
changeset
|
23 |
|
1f024a95e9d9
Added view and iterator types to collections / _abcoll
Christian Heimes <christian@cheimes.de>
parents:
43956
diff
changeset
|
24 ### collection related types which are not exposed through builtin ### |
|
1f024a95e9d9
Added view and iterator types to collections / _abcoll
Christian Heimes <christian@cheimes.de>
parents:
43956
diff
changeset
|
25 ## iterators ## |
|
1f024a95e9d9
Added view and iterator types to collections / _abcoll
Christian Heimes <christian@cheimes.de>
parents:
43956
diff
changeset
|
26 bytes_iterator = type(iter(b'')) |
|
1f024a95e9d9
Added view and iterator types to collections / _abcoll
Christian Heimes <christian@cheimes.de>
parents:
43956
diff
changeset
|
27 bytearray_iterator = type(iter(bytearray())) |
|
1f024a95e9d9
Added view and iterator types to collections / _abcoll
Christian Heimes <christian@cheimes.de>
parents:
43956
diff
changeset
|
28 #callable_iterator = ??? |
|
1f024a95e9d9
Added view and iterator types to collections / _abcoll
Christian Heimes <christian@cheimes.de>
parents:
43956
diff
changeset
|
29 dict_keyiterator = type(iter({}.keys())) |
|
1f024a95e9d9
Added view and iterator types to collections / _abcoll
Christian Heimes <christian@cheimes.de>
parents:
43956
diff
changeset
|
30 dict_valueiterator = type(iter({}.values())) |
|
1f024a95e9d9
Added view and iterator types to collections / _abcoll
Christian Heimes <christian@cheimes.de>
parents:
43956
diff
changeset
|
31 dict_itemiterator = type(iter({}.items())) |
|
1f024a95e9d9
Added view and iterator types to collections / _abcoll
Christian Heimes <christian@cheimes.de>
parents:
43956
diff
changeset
|
32 list_iterator = type(iter([])) |
|
1f024a95e9d9
Added view and iterator types to collections / _abcoll
Christian Heimes <christian@cheimes.de>
parents:
43956
diff
changeset
|
33 list_reverseiterator = type(iter(reversed([]))) |
|
1f024a95e9d9
Added view and iterator types to collections / _abcoll
Christian Heimes <christian@cheimes.de>
parents:
43956
diff
changeset
|
34 range_iterator = type(iter(range(0))) |
|
1f024a95e9d9
Added view and iterator types to collections / _abcoll
Christian Heimes <christian@cheimes.de>
parents:
43956
diff
changeset
|
35 set_iterator = type(iter(set())) |
|
1f024a95e9d9
Added view and iterator types to collections / _abcoll
Christian Heimes <christian@cheimes.de>
parents:
43956
diff
changeset
|
36 str_iterator = type(iter("")) |
|
1f024a95e9d9
Added view and iterator types to collections / _abcoll
Christian Heimes <christian@cheimes.de>
parents:
43956
diff
changeset
|
37 tuple_iterator = type(iter(())) |
|
1f024a95e9d9
Added view and iterator types to collections / _abcoll
Christian Heimes <christian@cheimes.de>
parents:
43956
diff
changeset
|
38 zip_iterator = type(iter(zip())) |
|
1f024a95e9d9
Added view and iterator types to collections / _abcoll
Christian Heimes <christian@cheimes.de>
parents:
43956
diff
changeset
|
39 ## views ## |
|
1f024a95e9d9
Added view and iterator types to collections / _abcoll
Christian Heimes <christian@cheimes.de>
parents:
43956
diff
changeset
|
40 dict_keys = type({}.keys()) |
|
1f024a95e9d9
Added view and iterator types to collections / _abcoll
Christian Heimes <christian@cheimes.de>
parents:
43956
diff
changeset
|
41 dict_values = type({}.values()) |
|
1f024a95e9d9
Added view and iterator types to collections / _abcoll
Christian Heimes <christian@cheimes.de>
parents:
43956
diff
changeset
|
42 dict_items = type({}.items()) |
|
44049
15649aef2db5
Removed more types from the types module
Christian Heimes <christian@cheimes.de>
parents:
44043
diff
changeset
|
43 ## misc ## |
|
15649aef2db5
Removed more types from the types module
Christian Heimes <christian@cheimes.de>
parents:
44043
diff
changeset
|
44 dict_proxy = type(type.__dict__) |
|
44043
1f024a95e9d9
Added view and iterator types to collections / _abcoll
Christian Heimes <christian@cheimes.de>
parents:
43956
diff
changeset
|
45 |
|
1f024a95e9d9
Added view and iterator types to collections / _abcoll
Christian Heimes <christian@cheimes.de>
parents:
43956
diff
changeset
|
46 |
|
42084
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
47 ### ONE-TRICK PONIES ### |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
48 |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
49 class Hashable(metaclass=ABCMeta): |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
50 |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
51 @abstractmethod |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
52 def __hash__(self): |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
53 return 0 |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
54 |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
55 @classmethod |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
56 def __subclasshook__(cls, C): |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
57 if cls is Hashable: |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
58 for B in C.__mro__: |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
59 if "__hash__" in B.__dict__: |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
60 if B.__dict__["__hash__"]: |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
61 return True |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
62 break |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
63 return NotImplemented |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
64 |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
65 |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
66 class Iterable(metaclass=ABCMeta): |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
67 |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
68 @abstractmethod |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
69 def __iter__(self): |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
70 while False: |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
71 yield None |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
72 |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
73 @classmethod |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
74 def __subclasshook__(cls, C): |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
75 if cls is Iterable: |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
76 if any("__iter__" in B.__dict__ for B in C.__mro__): |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
77 return True |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
78 return NotImplemented |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
79 |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
80 |
| 45245 | 81 class Iterator(Iterable): |
|
42084
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
82 |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
83 @abstractmethod |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
84 def __next__(self): |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
85 raise StopIteration |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
86 |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
87 def __iter__(self): |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
88 return self |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
89 |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
90 @classmethod |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
91 def __subclasshook__(cls, C): |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
92 if cls is Iterator: |
|
66531
69ec77526180
Issue #10565: Iterator ABC should require both __next__ and __iter__.
Raymond Hettinger <python@rcn.com>
parents:
64265
diff
changeset
|
93 if (any("__next__" in B.__dict__ for B in C.__mro__) and |
|
69ec77526180
Issue #10565: Iterator ABC should require both __next__ and __iter__.
Raymond Hettinger <python@rcn.com>
parents:
64265
diff
changeset
|
94 any("__iter__" in B.__dict__ for B in C.__mro__)): |
|
42084
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
95 return True |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
96 return NotImplemented |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
97 |
|
44043
1f024a95e9d9
Added view and iterator types to collections / _abcoll
Christian Heimes <christian@cheimes.de>
parents:
43956
diff
changeset
|
98 Iterator.register(bytes_iterator) |
|
1f024a95e9d9
Added view and iterator types to collections / _abcoll
Christian Heimes <christian@cheimes.de>
parents:
43956
diff
changeset
|
99 Iterator.register(bytearray_iterator) |
|
1f024a95e9d9
Added view and iterator types to collections / _abcoll
Christian Heimes <christian@cheimes.de>
parents:
43956
diff
changeset
|
100 #Iterator.register(callable_iterator) |
|
1f024a95e9d9
Added view and iterator types to collections / _abcoll
Christian Heimes <christian@cheimes.de>
parents:
43956
diff
changeset
|
101 Iterator.register(dict_keyiterator) |
|
1f024a95e9d9
Added view and iterator types to collections / _abcoll
Christian Heimes <christian@cheimes.de>
parents:
43956
diff
changeset
|
102 Iterator.register(dict_valueiterator) |
|
1f024a95e9d9
Added view and iterator types to collections / _abcoll
Christian Heimes <christian@cheimes.de>
parents:
43956
diff
changeset
|
103 Iterator.register(dict_itemiterator) |
|
1f024a95e9d9
Added view and iterator types to collections / _abcoll
Christian Heimes <christian@cheimes.de>
parents:
43956
diff
changeset
|
104 Iterator.register(list_iterator) |
|
1f024a95e9d9
Added view and iterator types to collections / _abcoll
Christian Heimes <christian@cheimes.de>
parents:
43956
diff
changeset
|
105 Iterator.register(list_reverseiterator) |
|
1f024a95e9d9
Added view and iterator types to collections / _abcoll
Christian Heimes <christian@cheimes.de>
parents:
43956
diff
changeset
|
106 Iterator.register(range_iterator) |
|
1f024a95e9d9
Added view and iterator types to collections / _abcoll
Christian Heimes <christian@cheimes.de>
parents:
43956
diff
changeset
|
107 Iterator.register(set_iterator) |
|
1f024a95e9d9
Added view and iterator types to collections / _abcoll
Christian Heimes <christian@cheimes.de>
parents:
43956
diff
changeset
|
108 Iterator.register(str_iterator) |
|
1f024a95e9d9
Added view and iterator types to collections / _abcoll
Christian Heimes <christian@cheimes.de>
parents:
43956
diff
changeset
|
109 Iterator.register(tuple_iterator) |
|
1f024a95e9d9
Added view and iterator types to collections / _abcoll
Christian Heimes <christian@cheimes.de>
parents:
43956
diff
changeset
|
110 Iterator.register(zip_iterator) |
|
42084
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
111 |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
112 class Sized(metaclass=ABCMeta): |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
113 |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
114 @abstractmethod |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
115 def __len__(self): |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
116 return 0 |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
117 |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
118 @classmethod |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
119 def __subclasshook__(cls, C): |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
120 if cls is Sized: |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
121 if any("__len__" in B.__dict__ for B in C.__mro__): |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
122 return True |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
123 return NotImplemented |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
124 |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
125 |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
126 class Container(metaclass=ABCMeta): |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
127 |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
128 @abstractmethod |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
129 def __contains__(self, x): |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
130 return False |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
131 |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
132 @classmethod |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
133 def __subclasshook__(cls, C): |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
134 if cls is Container: |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
135 if any("__contains__" in B.__dict__ for B in C.__mro__): |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
136 return True |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
137 return NotImplemented |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
138 |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
139 |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
140 class Callable(metaclass=ABCMeta): |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
141 |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
142 @abstractmethod |
|
45659
dd318c3f6cb7
Merged revisions 61209-61214,61217-61222,61224-61226,61233-61237 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
45252
diff
changeset
|
143 def __call__(self, *args, **kwds): |
|
42084
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
144 return False |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
145 |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
146 @classmethod |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
147 def __subclasshook__(cls, C): |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
148 if cls is Callable: |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
149 if any("__call__" in B.__dict__ for B in C.__mro__): |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
150 return True |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
151 return NotImplemented |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
152 |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
153 |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
154 ### SETS ### |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
155 |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
156 |
| 45245 | 157 class Set(Sized, Iterable, Container): |
|
42084
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
158 |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
159 """A set is a finite, iterable container. |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
160 |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
161 This class provides concrete generic implementations of all |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
162 methods except for __contains__, __iter__ and __len__. |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
163 |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
164 To override the comparisons (presumably for speed, as the |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
165 semantics are fixed), all you have to do is redefine __le__ and |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
166 then the other operations will automatically follow suit. |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
167 """ |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
168 |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
169 def __le__(self, other): |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
170 if not isinstance(other, Set): |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
171 return NotImplemented |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
172 if len(self) > len(other): |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
173 return False |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
174 for elem in self: |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
175 if elem not in other: |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
176 return False |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
177 return True |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
178 |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
179 def __lt__(self, other): |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
180 if not isinstance(other, Set): |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
181 return NotImplemented |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
182 return len(self) < len(other) and self.__le__(other) |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
183 |
|
45241
5950c49f225a
Merge r60674 an 60675.
Raymond Hettinger <python@rcn.com>
parents:
45199
diff
changeset
|
184 def __gt__(self, other): |
|
5950c49f225a
Merge r60674 an 60675.
Raymond Hettinger <python@rcn.com>
parents:
45199
diff
changeset
|
185 if not isinstance(other, Set): |
|
5950c49f225a
Merge r60674 an 60675.
Raymond Hettinger <python@rcn.com>
parents:
45199
diff
changeset
|
186 return NotImplemented |
|
5950c49f225a
Merge r60674 an 60675.
Raymond Hettinger <python@rcn.com>
parents:
45199
diff
changeset
|
187 return other < self |
|
5950c49f225a
Merge r60674 an 60675.
Raymond Hettinger <python@rcn.com>
parents:
45199
diff
changeset
|
188 |
|
5950c49f225a
Merge r60674 an 60675.
Raymond Hettinger <python@rcn.com>
parents:
45199
diff
changeset
|
189 def __ge__(self, other): |
|
5950c49f225a
Merge r60674 an 60675.
Raymond Hettinger <python@rcn.com>
parents:
45199
diff
changeset
|
190 if not isinstance(other, Set): |
|
5950c49f225a
Merge r60674 an 60675.
Raymond Hettinger <python@rcn.com>
parents:
45199
diff
changeset
|
191 return NotImplemented |
|
5950c49f225a
Merge r60674 an 60675.
Raymond Hettinger <python@rcn.com>
parents:
45199
diff
changeset
|
192 return other <= self |
|
5950c49f225a
Merge r60674 an 60675.
Raymond Hettinger <python@rcn.com>
parents:
45199
diff
changeset
|
193 |
|
42084
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
194 def __eq__(self, other): |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
195 if not isinstance(other, Set): |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
196 return NotImplemented |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
197 return len(self) == len(other) and self.__le__(other) |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
198 |
|
45241
5950c49f225a
Merge r60674 an 60675.
Raymond Hettinger <python@rcn.com>
parents:
45199
diff
changeset
|
199 def __ne__(self, other): |
|
5950c49f225a
Merge r60674 an 60675.
Raymond Hettinger <python@rcn.com>
parents:
45199
diff
changeset
|
200 return not (self == other) |
|
5950c49f225a
Merge r60674 an 60675.
Raymond Hettinger <python@rcn.com>
parents:
45199
diff
changeset
|
201 |
|
42084
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
202 @classmethod |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
203 def _from_iterable(cls, it): |
|
45199
0ba31cea6e03
Fix-up the _from_iterable() method to return instances of the subclass where it is used.
Raymond Hettinger <python@rcn.com>
parents:
45192
diff
changeset
|
204 '''Construct an instance of the class from any iterable input. |
|
0ba31cea6e03
Fix-up the _from_iterable() method to return instances of the subclass where it is used.
Raymond Hettinger <python@rcn.com>
parents:
45192
diff
changeset
|
205 |
|
0ba31cea6e03
Fix-up the _from_iterable() method to return instances of the subclass where it is used.
Raymond Hettinger <python@rcn.com>
parents:
45192
diff
changeset
|
206 Must override this method if the class constructor signature |
|
45246
0f3d58f9cd35
Document how to use Set and MutableSet as a mixin.
Raymond Hettinger <python@rcn.com>
parents:
45245
diff
changeset
|
207 does not accept an iterable for an input. |
|
45199
0ba31cea6e03
Fix-up the _from_iterable() method to return instances of the subclass where it is used.
Raymond Hettinger <python@rcn.com>
parents:
45192
diff
changeset
|
208 ''' |
|
45246
0f3d58f9cd35
Document how to use Set and MutableSet as a mixin.
Raymond Hettinger <python@rcn.com>
parents:
45245
diff
changeset
|
209 return cls(it) |
|
42084
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
210 |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
211 def __and__(self, other): |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
212 if not isinstance(other, Iterable): |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
213 return NotImplemented |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
214 return self._from_iterable(value for value in other if value in self) |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
215 |
|
45056
c8fca9b5cd3c
Merged revisions 60408-60440 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44160
diff
changeset
|
216 def isdisjoint(self, other): |
|
c8fca9b5cd3c
Merged revisions 60408-60440 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44160
diff
changeset
|
217 for value in other: |
|
c8fca9b5cd3c
Merged revisions 60408-60440 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44160
diff
changeset
|
218 if value in self: |
|
c8fca9b5cd3c
Merged revisions 60408-60440 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44160
diff
changeset
|
219 return False |
|
c8fca9b5cd3c
Merged revisions 60408-60440 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44160
diff
changeset
|
220 return True |
|
c8fca9b5cd3c
Merged revisions 60408-60440 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44160
diff
changeset
|
221 |
|
42084
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
222 def __or__(self, other): |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
223 if not isinstance(other, Iterable): |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
224 return NotImplemented |
|
45659
dd318c3f6cb7
Merged revisions 61209-61214,61217-61222,61224-61226,61233-61237 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
45252
diff
changeset
|
225 chain = (e for s in (self, other) for e in s) |
|
dd318c3f6cb7
Merged revisions 61209-61214,61217-61222,61224-61226,61233-61237 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
45252
diff
changeset
|
226 return self._from_iterable(chain) |
|
42084
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
227 |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
228 def __sub__(self, other): |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
229 if not isinstance(other, Set): |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
230 if not isinstance(other, Iterable): |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
231 return NotImplemented |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
232 other = self._from_iterable(other) |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
233 return self._from_iterable(value for value in self |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
234 if value not in other) |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
235 |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
236 def __xor__(self, other): |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
237 if not isinstance(other, Set): |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
238 if not isinstance(other, Iterable): |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
239 return NotImplemented |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
240 other = self._from_iterable(other) |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
241 return (self - other) | (other - self) |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
242 |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
243 def _hash(self): |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
244 """Compute the hash value of a set. |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
245 |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
246 Note that we don't define __hash__: not all sets are hashable. |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
247 But if you define a hashable set type, its __hash__ should |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
248 call this function. |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
249 |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
250 This must be compatible __eq__. |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
251 |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
252 All sets ought to compare equal if they contain the same |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
253 elements, regardless of how they are implemented, and |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
254 regardless of the order of the elements; so there's not much |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
255 freedom for __eq__ or __hash__. We match the algorithm used |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
256 by the built-in frozenset type. |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
257 """ |
|
44160
9d152530910a
Removed PyInt_GetMax and sys.maxint
Christian Heimes <christian@cheimes.de>
parents:
44049
diff
changeset
|
258 MAX = sys.maxsize |
|
42084
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
259 MASK = 2 * MAX + 1 |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
260 n = len(self) |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
261 h = 1927868237 * (n + 1) |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
262 h &= MASK |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
263 for x in self: |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
264 hx = hash(x) |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
265 h ^= (hx ^ (hx << 16) ^ 89869747) * 3644798167 |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
266 h &= MASK |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
267 h = h * 69069 + 907133923 |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
268 h &= MASK |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
269 if h > MAX: |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
270 h -= MASK + 1 |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
271 if h == -1: |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
272 h = 590923713 |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
273 return h |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
274 |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
275 Set.register(frozenset) |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
276 |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
277 |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
278 class MutableSet(Set): |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
279 |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
280 @abstractmethod |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
281 def add(self, value): |
|
50812
a04b1c7167ba
Merged revisions 68630 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
48412
diff
changeset
|
282 """Add an element.""" |
|
42084
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
283 raise NotImplementedError |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
284 |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
285 @abstractmethod |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
286 def discard(self, value): |
|
50812
a04b1c7167ba
Merged revisions 68630 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
48412
diff
changeset
|
287 """Remove an element. Do not raise an exception if absent.""" |
|
42084
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
288 raise NotImplementedError |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
289 |
|
45056
c8fca9b5cd3c
Merged revisions 60408-60440 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44160
diff
changeset
|
290 def remove(self, value): |
|
c8fca9b5cd3c
Merged revisions 60408-60440 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44160
diff
changeset
|
291 """Remove an element. If not a member, raise a KeyError.""" |
|
c8fca9b5cd3c
Merged revisions 60408-60440 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44160
diff
changeset
|
292 if value not in self: |
|
c8fca9b5cd3c
Merged revisions 60408-60440 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44160
diff
changeset
|
293 raise KeyError(value) |
|
c8fca9b5cd3c
Merged revisions 60408-60440 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44160
diff
changeset
|
294 self.discard(value) |
|
c8fca9b5cd3c
Merged revisions 60408-60440 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44160
diff
changeset
|
295 |
|
42084
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
296 def pop(self): |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
297 """Return the popped value. Raise KeyError if empty.""" |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
298 it = iter(self) |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
299 try: |
|
51150
01b9c5d99ebe
Beef-up tests for collections ABCs.
Raymond Hettinger <python@rcn.com>
parents:
50812
diff
changeset
|
300 value = next(it) |
|
42084
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
301 except StopIteration: |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
302 raise KeyError |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
303 self.discard(value) |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
304 return value |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
305 |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
306 def clear(self): |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
307 """This is slow (creates N new iterators!) but effective.""" |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
308 try: |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
309 while True: |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
310 self.pop() |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
311 except KeyError: |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
312 pass |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
313 |
|
67561
3eeaecf005c1
Remove function annotations that slipped into _abcoll.
Raymond Hettinger <python@rcn.com>
parents:
66531
diff
changeset
|
314 def __ior__(self, it): |
|
42084
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
315 for value in it: |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
316 self.add(value) |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
317 return self |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
318 |
|
67561
3eeaecf005c1
Remove function annotations that slipped into _abcoll.
Raymond Hettinger <python@rcn.com>
parents:
66531
diff
changeset
|
319 def __iand__(self, it): |
|
52665
8dff406403be
Issue #5647: MutableSet.__iand__() no longer mutates self during iteration.
Raymond Hettinger <python@rcn.com>
parents:
51888
diff
changeset
|
320 for value in (self - it): |
|
8dff406403be
Issue #5647: MutableSet.__iand__() no longer mutates self during iteration.
Raymond Hettinger <python@rcn.com>
parents:
51888
diff
changeset
|
321 self.discard(value) |
|
42084
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
322 return self |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
323 |
|
67561
3eeaecf005c1
Remove function annotations that slipped into _abcoll.
Raymond Hettinger <python@rcn.com>
parents:
66531
diff
changeset
|
324 def __ixor__(self, it): |
|
64265
c1c4f8f85070
Issue 8750: Fixed MutableSet's methods to correctly handle reflexive operations, namely x -= x and x ^= x
Daniel Stutzbach <daniel@stutzbachenterprises.com>
parents:
64219
diff
changeset
|
325 if it is self: |
|
c1c4f8f85070
Issue 8750: Fixed MutableSet's methods to correctly handle reflexive operations, namely x -= x and x ^= x
Daniel Stutzbach <daniel@stutzbachenterprises.com>
parents:
64219
diff
changeset
|
326 self.clear() |
|
c1c4f8f85070
Issue 8750: Fixed MutableSet's methods to correctly handle reflexive operations, namely x -= x and x ^= x
Daniel Stutzbach <daniel@stutzbachenterprises.com>
parents:
64219
diff
changeset
|
327 else: |
|
c1c4f8f85070
Issue 8750: Fixed MutableSet's methods to correctly handle reflexive operations, namely x -= x and x ^= x
Daniel Stutzbach <daniel@stutzbachenterprises.com>
parents:
64219
diff
changeset
|
328 if not isinstance(it, Set): |
|
c1c4f8f85070
Issue 8750: Fixed MutableSet's methods to correctly handle reflexive operations, namely x -= x and x ^= x
Daniel Stutzbach <daniel@stutzbachenterprises.com>
parents:
64219
diff
changeset
|
329 it = self._from_iterable(it) |
|
c1c4f8f85070
Issue 8750: Fixed MutableSet's methods to correctly handle reflexive operations, namely x -= x and x ^= x
Daniel Stutzbach <daniel@stutzbachenterprises.com>
parents:
64219
diff
changeset
|
330 for value in it: |
|
c1c4f8f85070
Issue 8750: Fixed MutableSet's methods to correctly handle reflexive operations, namely x -= x and x ^= x
Daniel Stutzbach <daniel@stutzbachenterprises.com>
parents:
64219
diff
changeset
|
331 if value in self: |
|
c1c4f8f85070
Issue 8750: Fixed MutableSet's methods to correctly handle reflexive operations, namely x -= x and x ^= x
Daniel Stutzbach <daniel@stutzbachenterprises.com>
parents:
64219
diff
changeset
|
332 self.discard(value) |
|
c1c4f8f85070
Issue 8750: Fixed MutableSet's methods to correctly handle reflexive operations, namely x -= x and x ^= x
Daniel Stutzbach <daniel@stutzbachenterprises.com>
parents:
64219
diff
changeset
|
333 else: |
|
c1c4f8f85070
Issue 8750: Fixed MutableSet's methods to correctly handle reflexive operations, namely x -= x and x ^= x
Daniel Stutzbach <daniel@stutzbachenterprises.com>
parents:
64219
diff
changeset
|
334 self.add(value) |
|
42084
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
335 return self |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
336 |
|
67561
3eeaecf005c1
Remove function annotations that slipped into _abcoll.
Raymond Hettinger <python@rcn.com>
parents:
66531
diff
changeset
|
337 def __isub__(self, it): |
|
64265
c1c4f8f85070
Issue 8750: Fixed MutableSet's methods to correctly handle reflexive operations, namely x -= x and x ^= x
Daniel Stutzbach <daniel@stutzbachenterprises.com>
parents:
64219
diff
changeset
|
338 if it is self: |
|
c1c4f8f85070
Issue 8750: Fixed MutableSet's methods to correctly handle reflexive operations, namely x -= x and x ^= x
Daniel Stutzbach <daniel@stutzbachenterprises.com>
parents:
64219
diff
changeset
|
339 self.clear() |
|
c1c4f8f85070
Issue 8750: Fixed MutableSet's methods to correctly handle reflexive operations, namely x -= x and x ^= x
Daniel Stutzbach <daniel@stutzbachenterprises.com>
parents:
64219
diff
changeset
|
340 else: |
|
c1c4f8f85070
Issue 8750: Fixed MutableSet's methods to correctly handle reflexive operations, namely x -= x and x ^= x
Daniel Stutzbach <daniel@stutzbachenterprises.com>
parents:
64219
diff
changeset
|
341 for value in it: |
|
c1c4f8f85070
Issue 8750: Fixed MutableSet's methods to correctly handle reflexive operations, namely x -= x and x ^= x
Daniel Stutzbach <daniel@stutzbachenterprises.com>
parents:
64219
diff
changeset
|
342 self.discard(value) |
|
42084
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
343 return self |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
344 |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
345 MutableSet.register(set) |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
346 |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
347 |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
348 ### MAPPINGS ### |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
349 |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
350 |
| 45245 | 351 class Mapping(Sized, Iterable, Container): |
|
42084
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
352 |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
353 @abstractmethod |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
354 def __getitem__(self, key): |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
355 raise KeyError |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
356 |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
357 def get(self, key, default=None): |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
358 try: |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
359 return self[key] |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
360 except KeyError: |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
361 return default |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
362 |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
363 def __contains__(self, key): |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
364 try: |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
365 self[key] |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
366 except KeyError: |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
367 return False |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
368 else: |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
369 return True |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
370 |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
371 def keys(self): |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
372 return KeysView(self) |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
373 |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
374 def items(self): |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
375 return ItemsView(self) |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
376 |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
377 def values(self): |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
378 return ValuesView(self) |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
379 |
|
45147
1beb7d293f55
Start replacing UserDict.DictMixin with collections.MutableMapping (the bsddb modules are next).
Raymond Hettinger <python@rcn.com>
parents:
45071
diff
changeset
|
380 def __eq__(self, other): |
|
61807
b0250ffa2267
Merged revisions 81414 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
54195
diff
changeset
|
381 if not isinstance(other, Mapping): |
|
b0250ffa2267
Merged revisions 81414 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
54195
diff
changeset
|
382 return NotImplemented |
|
b0250ffa2267
Merged revisions 81414 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
54195
diff
changeset
|
383 return dict(self.items()) == dict(other.items()) |
|
45147
1beb7d293f55
Start replacing UserDict.DictMixin with collections.MutableMapping (the bsddb modules are next).
Raymond Hettinger <python@rcn.com>
parents:
45071
diff
changeset
|
384 |
|
1beb7d293f55
Start replacing UserDict.DictMixin with collections.MutableMapping (the bsddb modules are next).
Raymond Hettinger <python@rcn.com>
parents:
45071
diff
changeset
|
385 def __ne__(self, other): |
|
45184
3ecd526c35c5
Convert test_userdict to use the collections.UserDict.
Raymond Hettinger <python@rcn.com>
parents:
45167
diff
changeset
|
386 return not (self == other) |
|
42084
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
387 |
|
45192
142a11b3057e
Merged revisions 60481,60485,60489-60492,60494-60496,60498-60499,60501-60503,60505-60506,60508-60509,60523-60524,60532,60543,60545,60547-60548,60552,60554,60556-60559,60561-60562,60568-60598,60600-60616 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
45184
diff
changeset
|
388 |
| 45252 | 389 class MappingView(Sized): |
|
42084
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
390 |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
391 def __init__(self, mapping): |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
392 self._mapping = mapping |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
393 |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
394 def __len__(self): |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
395 return len(self._mapping) |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
396 |
|
51888
c4f27e546cf5
Give mapping views a usable repr.
Raymond Hettinger <python@rcn.com>
parents:
51835
diff
changeset
|
397 def __repr__(self): |
|
c4f27e546cf5
Give mapping views a usable repr.
Raymond Hettinger <python@rcn.com>
parents:
51835
diff
changeset
|
398 return '{0.__class__.__name__}({0._mapping!r})'.format(self) |
|
c4f27e546cf5
Give mapping views a usable repr.
Raymond Hettinger <python@rcn.com>
parents:
51835
diff
changeset
|
399 |
|
42084
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
400 |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
401 class KeysView(MappingView, Set): |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
402 |
|
64219
01b0a6cb13d4
Issue #9214: Fix set operations on KeysView and ItemsView.
Raymond Hettinger <python@rcn.com>
parents:
63341
diff
changeset
|
403 @classmethod |
|
01b0a6cb13d4
Issue #9214: Fix set operations on KeysView and ItemsView.
Raymond Hettinger <python@rcn.com>
parents:
63341
diff
changeset
|
404 def _from_iterable(self, it): |
|
01b0a6cb13d4
Issue #9214: Fix set operations on KeysView and ItemsView.
Raymond Hettinger <python@rcn.com>
parents:
63341
diff
changeset
|
405 return set(it) |
|
01b0a6cb13d4
Issue #9214: Fix set operations on KeysView and ItemsView.
Raymond Hettinger <python@rcn.com>
parents:
63341
diff
changeset
|
406 |
|
42084
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
407 def __contains__(self, key): |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
408 return key in self._mapping |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
409 |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
410 def __iter__(self): |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
411 for key in self._mapping: |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
412 yield key |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
413 |
|
44043
1f024a95e9d9
Added view and iterator types to collections / _abcoll
Christian Heimes <christian@cheimes.de>
parents:
43956
diff
changeset
|
414 KeysView.register(dict_keys) |
|
42084
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
415 |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
416 |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
417 class ItemsView(MappingView, Set): |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
418 |
|
64219
01b0a6cb13d4
Issue #9214: Fix set operations on KeysView and ItemsView.
Raymond Hettinger <python@rcn.com>
parents:
63341
diff
changeset
|
419 @classmethod |
|
01b0a6cb13d4
Issue #9214: Fix set operations on KeysView and ItemsView.
Raymond Hettinger <python@rcn.com>
parents:
63341
diff
changeset
|
420 def _from_iterable(self, it): |
|
01b0a6cb13d4
Issue #9214: Fix set operations on KeysView and ItemsView.
Raymond Hettinger <python@rcn.com>
parents:
63341
diff
changeset
|
421 return set(it) |
|
01b0a6cb13d4
Issue #9214: Fix set operations on KeysView and ItemsView.
Raymond Hettinger <python@rcn.com>
parents:
63341
diff
changeset
|
422 |
|
42084
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
423 def __contains__(self, item): |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
424 key, value = item |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
425 try: |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
426 v = self._mapping[key] |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
427 except KeyError: |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
428 return False |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
429 else: |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
430 return v == value |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
431 |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
432 def __iter__(self): |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
433 for key in self._mapping: |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
434 yield (key, self._mapping[key]) |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
435 |
|
44043
1f024a95e9d9
Added view and iterator types to collections / _abcoll
Christian Heimes <christian@cheimes.de>
parents:
43956
diff
changeset
|
436 ItemsView.register(dict_items) |
|
42084
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
437 |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
438 |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
439 class ValuesView(MappingView): |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
440 |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
441 def __contains__(self, value): |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
442 for key in self._mapping: |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
443 if value == self._mapping[key]: |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
444 return True |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
445 return False |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
446 |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
447 def __iter__(self): |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
448 for key in self._mapping: |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
449 yield self._mapping[key] |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
450 |
|
44043
1f024a95e9d9
Added view and iterator types to collections / _abcoll
Christian Heimes <christian@cheimes.de>
parents:
43956
diff
changeset
|
451 ValuesView.register(dict_values) |
|
42084
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
452 |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
453 |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
454 class MutableMapping(Mapping): |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
455 |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
456 @abstractmethod |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
457 def __setitem__(self, key, value): |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
458 raise KeyError |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
459 |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
460 @abstractmethod |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
461 def __delitem__(self, key): |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
462 raise KeyError |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
463 |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
464 __marker = object() |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
465 |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
466 def pop(self, key, default=__marker): |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
467 try: |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
468 value = self[key] |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
469 except KeyError: |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
470 if default is self.__marker: |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
471 raise |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
472 return default |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
473 else: |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
474 del self[key] |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
475 return value |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
476 |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
477 def popitem(self): |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
478 try: |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
479 key = next(iter(self)) |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
480 except StopIteration: |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
481 raise KeyError |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
482 value = self[key] |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
483 del self[key] |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
484 return key, value |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
485 |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
486 def clear(self): |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
487 try: |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
488 while True: |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
489 self.popitem() |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
490 except KeyError: |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
491 pass |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
492 |
|
62971
06b3891a6395
Issue #9137: Fix issue in MutableMapping.update, which incorrectly
Mark Dickinson <dickinsm@gmail.com>
parents:
61807
diff
changeset
|
493 def update(*args, **kwds): |
|
06b3891a6395
Issue #9137: Fix issue in MutableMapping.update, which incorrectly
Mark Dickinson <dickinsm@gmail.com>
parents:
61807
diff
changeset
|
494 if len(args) > 2: |
|
06b3891a6395
Issue #9137: Fix issue in MutableMapping.update, which incorrectly
Mark Dickinson <dickinsm@gmail.com>
parents:
61807
diff
changeset
|
495 raise TypeError("update() takes at most 2 positional " |
|
06b3891a6395
Issue #9137: Fix issue in MutableMapping.update, which incorrectly
Mark Dickinson <dickinsm@gmail.com>
parents:
61807
diff
changeset
|
496 "arguments ({} given)".format(len(args))) |
|
06b3891a6395
Issue #9137: Fix issue in MutableMapping.update, which incorrectly
Mark Dickinson <dickinsm@gmail.com>
parents:
61807
diff
changeset
|
497 elif not args: |
|
06b3891a6395
Issue #9137: Fix issue in MutableMapping.update, which incorrectly
Mark Dickinson <dickinsm@gmail.com>
parents:
61807
diff
changeset
|
498 raise TypeError("update() takes at least 1 argument (0 given)") |
|
06b3891a6395
Issue #9137: Fix issue in MutableMapping.update, which incorrectly
Mark Dickinson <dickinsm@gmail.com>
parents:
61807
diff
changeset
|
499 self = args[0] |
|
06b3891a6395
Issue #9137: Fix issue in MutableMapping.update, which incorrectly
Mark Dickinson <dickinsm@gmail.com>
parents:
61807
diff
changeset
|
500 other = args[1] if len(args) >= 2 else () |
|
06b3891a6395
Issue #9137: Fix issue in MutableMapping.update, which incorrectly
Mark Dickinson <dickinsm@gmail.com>
parents:
61807
diff
changeset
|
501 |
|
42084
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
502 if isinstance(other, Mapping): |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
503 for key in other: |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
504 self[key] = other[key] |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
505 elif hasattr(other, "keys"): |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
506 for key in other.keys(): |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
507 self[key] = other[key] |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
508 else: |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
509 for key, value in other: |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
510 self[key] = value |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
511 for key, value in kwds.items(): |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
512 self[key] = value |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
513 |
|
45147
1beb7d293f55
Start replacing UserDict.DictMixin with collections.MutableMapping (the bsddb modules are next).
Raymond Hettinger <python@rcn.com>
parents:
45071
diff
changeset
|
514 def setdefault(self, key, default=None): |
|
1beb7d293f55
Start replacing UserDict.DictMixin with collections.MutableMapping (the bsddb modules are next).
Raymond Hettinger <python@rcn.com>
parents:
45071
diff
changeset
|
515 try: |
|
1beb7d293f55
Start replacing UserDict.DictMixin with collections.MutableMapping (the bsddb modules are next).
Raymond Hettinger <python@rcn.com>
parents:
45071
diff
changeset
|
516 return self[key] |
|
1beb7d293f55
Start replacing UserDict.DictMixin with collections.MutableMapping (the bsddb modules are next).
Raymond Hettinger <python@rcn.com>
parents:
45071
diff
changeset
|
517 except KeyError: |
|
1beb7d293f55
Start replacing UserDict.DictMixin with collections.MutableMapping (the bsddb modules are next).
Raymond Hettinger <python@rcn.com>
parents:
45071
diff
changeset
|
518 self[key] = default |
|
1beb7d293f55
Start replacing UserDict.DictMixin with collections.MutableMapping (the bsddb modules are next).
Raymond Hettinger <python@rcn.com>
parents:
45071
diff
changeset
|
519 return default |
|
1beb7d293f55
Start replacing UserDict.DictMixin with collections.MutableMapping (the bsddb modules are next).
Raymond Hettinger <python@rcn.com>
parents:
45071
diff
changeset
|
520 |
|
42084
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
521 MutableMapping.register(dict) |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
522 |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
523 |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
524 ### SEQUENCES ### |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
525 |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
526 |
| 45245 | 527 class Sequence(Sized, Iterable, Container): |
|
42084
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
528 |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
529 """All the operations on a read-only sequence. |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
530 |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
531 Concrete subclasses must override __new__ or __init__, |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
532 __getitem__, and __len__. |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
533 """ |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
534 |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
535 @abstractmethod |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
536 def __getitem__(self, index): |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
537 raise IndexError |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
538 |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
539 def __iter__(self): |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
540 i = 0 |
|
45241
5950c49f225a
Merge r60674 an 60675.
Raymond Hettinger <python@rcn.com>
parents:
45199
diff
changeset
|
541 try: |
|
5950c49f225a
Merge r60674 an 60675.
Raymond Hettinger <python@rcn.com>
parents:
45199
diff
changeset
|
542 while True: |
|
42084
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
543 v = self[i] |
|
45241
5950c49f225a
Merge r60674 an 60675.
Raymond Hettinger <python@rcn.com>
parents:
45199
diff
changeset
|
544 yield v |
|
5950c49f225a
Merge r60674 an 60675.
Raymond Hettinger <python@rcn.com>
parents:
45199
diff
changeset
|
545 i += 1 |
|
5950c49f225a
Merge r60674 an 60675.
Raymond Hettinger <python@rcn.com>
parents:
45199
diff
changeset
|
546 except IndexError: |
|
5950c49f225a
Merge r60674 an 60675.
Raymond Hettinger <python@rcn.com>
parents:
45199
diff
changeset
|
547 return |
|
42084
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
548 |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
549 def __contains__(self, value): |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
550 for v in self: |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
551 if v == value: |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
552 return True |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
553 return False |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
554 |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
555 def __reversed__(self): |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
556 for i in reversed(range(len(self))): |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
557 yield self[i] |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
558 |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
559 def index(self, value): |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
560 for i, v in enumerate(self): |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
561 if v == value: |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
562 return i |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
563 raise ValueError |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
564 |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
565 def count(self, value): |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
566 return sum(1 for v in self if v == value) |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
567 |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
568 Sequence.register(tuple) |
|
43577
ace45b361e87
Patch# 1258 by Christian Heimes: kill basestring.
Guido van Rossum <guido@python.org>
parents:
43487
diff
changeset
|
569 Sequence.register(str) |
|
51835
bc70ec97e39f
Backport r69934 and r69935:
Raymond Hettinger <python@rcn.com>
parents:
51150
diff
changeset
|
570 Sequence.register(range) |
|
43956
fe5b2edffae7
Add ABC ByteString which unifies bytes and bytearray (but not memoryview).
Guido van Rossum <guido@python.org>
parents:
43777
diff
changeset
|
571 |
|
fe5b2edffae7
Add ABC ByteString which unifies bytes and bytearray (but not memoryview).
Guido van Rossum <guido@python.org>
parents:
43777
diff
changeset
|
572 |
|
fe5b2edffae7
Add ABC ByteString which unifies bytes and bytearray (but not memoryview).
Guido van Rossum <guido@python.org>
parents:
43777
diff
changeset
|
573 class ByteString(Sequence): |
|
fe5b2edffae7
Add ABC ByteString which unifies bytes and bytearray (but not memoryview).
Guido van Rossum <guido@python.org>
parents:
43777
diff
changeset
|
574 |
|
fe5b2edffae7
Add ABC ByteString which unifies bytes and bytearray (but not memoryview).
Guido van Rossum <guido@python.org>
parents:
43777
diff
changeset
|
575 """This unifies bytes and bytearray. |
|
fe5b2edffae7
Add ABC ByteString which unifies bytes and bytearray (but not memoryview).
Guido van Rossum <guido@python.org>
parents:
43777
diff
changeset
|
576 |
|
fe5b2edffae7
Add ABC ByteString which unifies bytes and bytearray (but not memoryview).
Guido van Rossum <guido@python.org>
parents:
43777
diff
changeset
|
577 XXX Should add all their methods. |
|
fe5b2edffae7
Add ABC ByteString which unifies bytes and bytearray (but not memoryview).
Guido van Rossum <guido@python.org>
parents:
43777
diff
changeset
|
578 """ |
|
fe5b2edffae7
Add ABC ByteString which unifies bytes and bytearray (but not memoryview).
Guido van Rossum <guido@python.org>
parents:
43777
diff
changeset
|
579 |
|
fe5b2edffae7
Add ABC ByteString which unifies bytes and bytearray (but not memoryview).
Guido van Rossum <guido@python.org>
parents:
43777
diff
changeset
|
580 ByteString.register(bytes) |
|
fe5b2edffae7
Add ABC ByteString which unifies bytes and bytearray (but not memoryview).
Guido van Rossum <guido@python.org>
parents:
43777
diff
changeset
|
581 ByteString.register(bytearray) |
|
42084
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
582 |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
583 |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
584 class MutableSequence(Sequence): |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
585 |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
586 @abstractmethod |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
587 def __setitem__(self, index, value): |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
588 raise IndexError |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
589 |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
590 @abstractmethod |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
591 def __delitem__(self, index): |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
592 raise IndexError |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
593 |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
594 @abstractmethod |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
595 def insert(self, index, value): |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
596 raise IndexError |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
597 |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
598 def append(self, value): |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
599 self.insert(len(self), value) |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
600 |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
601 def reverse(self): |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
602 n = len(self) |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
603 for i in range(n//2): |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
604 self[i], self[n-i-1] = self[n-i-1], self[i] |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
605 |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
606 def extend(self, values): |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
607 for v in values: |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
608 self.append(v) |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
609 |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
610 def pop(self, index=-1): |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
611 v = self[index] |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
612 del self[index] |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
613 return v |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
614 |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
615 def remove(self, value): |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
616 del self[self.index(value)] |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
617 |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
618 def __iadd__(self, values): |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
619 self.extend(values) |
|
54195
00ebbf1ce936
Issue 6037: MutableSequence.__iadd__ should return self.
Raymond Hettinger <python@rcn.com>
parents:
52665
diff
changeset
|
620 return self |
|
42084
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
621 |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
622 MutableSequence.register(list) |
|
43956
fe5b2edffae7
Add ABC ByteString which unifies bytes and bytearray (but not memoryview).
Guido van Rossum <guido@python.org>
parents:
43777
diff
changeset
|
623 MutableSequence.register(bytearray) # Multiply inheriting, see ByteString |
