annotate Lib/_weakrefset.py @ 66978:aed2bbafa550 3.1

Blocked revisions 87324 via svnmerge ........ r87324 | r.david.murray | 2010-12-16 14:08:51 -0500 (Thu, 16 Dec 2010) | 9 lines #10719: restore messages generated on invalid compileall args Before the introduction of filename arguments to compileall it gave semi useful messages about not being able to 'list' names that weren't valid directories. This fix restores that behavior. In addition to the test for this case, the patch also adds a test for the default behavior of compileall when no arguments are provided, and fixes a bug in one of the previously added tests. ........
author R. David Murray <rdmurray@bitdance.com>
date Thu, 16 Dec 2010 19:10:16 +0000
parents b0ed35c99dc6
children 76854e45c465
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
45159
e6069b24031e Moved WeakSet into a bootstap module use by abc.py.
Raymond Hettinger <python@rcn.com>
parents:
diff changeset
1 # Access WeakSet through the weakref module.
e6069b24031e Moved WeakSet into a bootstap module use by abc.py.
Raymond Hettinger <python@rcn.com>
parents:
diff changeset
2 # This code is separated-out because it is needed
e6069b24031e Moved WeakSet into a bootstap module use by abc.py.
Raymond Hettinger <python@rcn.com>
parents:
diff changeset
3 # by abc.py to load everything else at startup.
e6069b24031e Moved WeakSet into a bootstap module use by abc.py.
Raymond Hettinger <python@rcn.com>
parents:
diff changeset
4
e6069b24031e Moved WeakSet into a bootstap module use by abc.py.
Raymond Hettinger <python@rcn.com>
parents:
diff changeset
5 from _weakref import ref
e6069b24031e Moved WeakSet into a bootstap module use by abc.py.
Raymond Hettinger <python@rcn.com>
parents:
diff changeset
6
e6069b24031e Moved WeakSet into a bootstap module use by abc.py.
Raymond Hettinger <python@rcn.com>
parents:
diff changeset
7 __all__ = ['WeakSet']
e6069b24031e Moved WeakSet into a bootstap module use by abc.py.
Raymond Hettinger <python@rcn.com>
parents:
diff changeset
8
58195
b0ed35c99dc6 (note: svnmerged from py3k, but the original message was wrong)
Antoine Pitrou <solipsis@pitrou.net>
parents: 54179
diff changeset
9
b0ed35c99dc6 (note: svnmerged from py3k, but the original message was wrong)
Antoine Pitrou <solipsis@pitrou.net>
parents: 54179
diff changeset
10 class _IterationGuard:
b0ed35c99dc6 (note: svnmerged from py3k, but the original message was wrong)
Antoine Pitrou <solipsis@pitrou.net>
parents: 54179
diff changeset
11 # This context manager registers itself in the current iterators of the
b0ed35c99dc6 (note: svnmerged from py3k, but the original message was wrong)
Antoine Pitrou <solipsis@pitrou.net>
parents: 54179
diff changeset
12 # weak container, such as to delay all removals until the context manager
b0ed35c99dc6 (note: svnmerged from py3k, but the original message was wrong)
Antoine Pitrou <solipsis@pitrou.net>
parents: 54179
diff changeset
13 # exits.
b0ed35c99dc6 (note: svnmerged from py3k, but the original message was wrong)
Antoine Pitrou <solipsis@pitrou.net>
parents: 54179
diff changeset
14 # This technique should be relatively thread-safe (since sets are).
b0ed35c99dc6 (note: svnmerged from py3k, but the original message was wrong)
Antoine Pitrou <solipsis@pitrou.net>
parents: 54179
diff changeset
15
b0ed35c99dc6 (note: svnmerged from py3k, but the original message was wrong)
Antoine Pitrou <solipsis@pitrou.net>
parents: 54179
diff changeset
16 def __init__(self, weakcontainer):
b0ed35c99dc6 (note: svnmerged from py3k, but the original message was wrong)
Antoine Pitrou <solipsis@pitrou.net>
parents: 54179
diff changeset
17 # Don't create cycles
b0ed35c99dc6 (note: svnmerged from py3k, but the original message was wrong)
Antoine Pitrou <solipsis@pitrou.net>
parents: 54179
diff changeset
18 self.weakcontainer = ref(weakcontainer)
b0ed35c99dc6 (note: svnmerged from py3k, but the original message was wrong)
Antoine Pitrou <solipsis@pitrou.net>
parents: 54179
diff changeset
19
b0ed35c99dc6 (note: svnmerged from py3k, but the original message was wrong)
Antoine Pitrou <solipsis@pitrou.net>
parents: 54179
diff changeset
20 def __enter__(self):
b0ed35c99dc6 (note: svnmerged from py3k, but the original message was wrong)
Antoine Pitrou <solipsis@pitrou.net>
parents: 54179
diff changeset
21 w = self.weakcontainer()
b0ed35c99dc6 (note: svnmerged from py3k, but the original message was wrong)
Antoine Pitrou <solipsis@pitrou.net>
parents: 54179
diff changeset
22 if w is not None:
b0ed35c99dc6 (note: svnmerged from py3k, but the original message was wrong)
Antoine Pitrou <solipsis@pitrou.net>
parents: 54179
diff changeset
23 w._iterating.add(self)
b0ed35c99dc6 (note: svnmerged from py3k, but the original message was wrong)
Antoine Pitrou <solipsis@pitrou.net>
parents: 54179
diff changeset
24 return self
b0ed35c99dc6 (note: svnmerged from py3k, but the original message was wrong)
Antoine Pitrou <solipsis@pitrou.net>
parents: 54179
diff changeset
25
b0ed35c99dc6 (note: svnmerged from py3k, but the original message was wrong)
Antoine Pitrou <solipsis@pitrou.net>
parents: 54179
diff changeset
26 def __exit__(self, e, t, b):
b0ed35c99dc6 (note: svnmerged from py3k, but the original message was wrong)
Antoine Pitrou <solipsis@pitrou.net>
parents: 54179
diff changeset
27 w = self.weakcontainer()
b0ed35c99dc6 (note: svnmerged from py3k, but the original message was wrong)
Antoine Pitrou <solipsis@pitrou.net>
parents: 54179
diff changeset
28 if w is not None:
b0ed35c99dc6 (note: svnmerged from py3k, but the original message was wrong)
Antoine Pitrou <solipsis@pitrou.net>
parents: 54179
diff changeset
29 s = w._iterating
b0ed35c99dc6 (note: svnmerged from py3k, but the original message was wrong)
Antoine Pitrou <solipsis@pitrou.net>
parents: 54179
diff changeset
30 s.remove(self)
b0ed35c99dc6 (note: svnmerged from py3k, but the original message was wrong)
Antoine Pitrou <solipsis@pitrou.net>
parents: 54179
diff changeset
31 if not s:
b0ed35c99dc6 (note: svnmerged from py3k, but the original message was wrong)
Antoine Pitrou <solipsis@pitrou.net>
parents: 54179
diff changeset
32 w._commit_removals()
b0ed35c99dc6 (note: svnmerged from py3k, but the original message was wrong)
Antoine Pitrou <solipsis@pitrou.net>
parents: 54179
diff changeset
33
b0ed35c99dc6 (note: svnmerged from py3k, but the original message was wrong)
Antoine Pitrou <solipsis@pitrou.net>
parents: 54179
diff changeset
34
45159
e6069b24031e Moved WeakSet into a bootstap module use by abc.py.
Raymond Hettinger <python@rcn.com>
parents:
diff changeset
35 class WeakSet:
e6069b24031e Moved WeakSet into a bootstap module use by abc.py.
Raymond Hettinger <python@rcn.com>
parents:
diff changeset
36 def __init__(self, data=None):
e6069b24031e Moved WeakSet into a bootstap module use by abc.py.
Raymond Hettinger <python@rcn.com>
parents:
diff changeset
37 self.data = set()
e6069b24031e Moved WeakSet into a bootstap module use by abc.py.
Raymond Hettinger <python@rcn.com>
parents:
diff changeset
38 def _remove(item, selfref=ref(self)):
e6069b24031e Moved WeakSet into a bootstap module use by abc.py.
Raymond Hettinger <python@rcn.com>
parents:
diff changeset
39 self = selfref()
e6069b24031e Moved WeakSet into a bootstap module use by abc.py.
Raymond Hettinger <python@rcn.com>
parents:
diff changeset
40 if self is not None:
58195
b0ed35c99dc6 (note: svnmerged from py3k, but the original message was wrong)
Antoine Pitrou <solipsis@pitrou.net>
parents: 54179
diff changeset
41 if self._iterating:
b0ed35c99dc6 (note: svnmerged from py3k, but the original message was wrong)
Antoine Pitrou <solipsis@pitrou.net>
parents: 54179
diff changeset
42 self._pending_removals.append(item)
b0ed35c99dc6 (note: svnmerged from py3k, but the original message was wrong)
Antoine Pitrou <solipsis@pitrou.net>
parents: 54179
diff changeset
43 else:
b0ed35c99dc6 (note: svnmerged from py3k, but the original message was wrong)
Antoine Pitrou <solipsis@pitrou.net>
parents: 54179
diff changeset
44 self.data.discard(item)
45159
e6069b24031e Moved WeakSet into a bootstap module use by abc.py.
Raymond Hettinger <python@rcn.com>
parents:
diff changeset
45 self._remove = _remove
58195
b0ed35c99dc6 (note: svnmerged from py3k, but the original message was wrong)
Antoine Pitrou <solipsis@pitrou.net>
parents: 54179
diff changeset
46 # A list of keys to be removed
b0ed35c99dc6 (note: svnmerged from py3k, but the original message was wrong)
Antoine Pitrou <solipsis@pitrou.net>
parents: 54179
diff changeset
47 self._pending_removals = []
b0ed35c99dc6 (note: svnmerged from py3k, but the original message was wrong)
Antoine Pitrou <solipsis@pitrou.net>
parents: 54179
diff changeset
48 self._iterating = set()
45159
e6069b24031e Moved WeakSet into a bootstap module use by abc.py.
Raymond Hettinger <python@rcn.com>
parents:
diff changeset
49 if data is not None:
e6069b24031e Moved WeakSet into a bootstap module use by abc.py.
Raymond Hettinger <python@rcn.com>
parents:
diff changeset
50 self.update(data)
e6069b24031e Moved WeakSet into a bootstap module use by abc.py.
Raymond Hettinger <python@rcn.com>
parents:
diff changeset
51
58195
b0ed35c99dc6 (note: svnmerged from py3k, but the original message was wrong)
Antoine Pitrou <solipsis@pitrou.net>
parents: 54179
diff changeset
52 def _commit_removals(self):
b0ed35c99dc6 (note: svnmerged from py3k, but the original message was wrong)
Antoine Pitrou <solipsis@pitrou.net>
parents: 54179
diff changeset
53 l = self._pending_removals
b0ed35c99dc6 (note: svnmerged from py3k, but the original message was wrong)
Antoine Pitrou <solipsis@pitrou.net>
parents: 54179
diff changeset
54 discard = self.data.discard
b0ed35c99dc6 (note: svnmerged from py3k, but the original message was wrong)
Antoine Pitrou <solipsis@pitrou.net>
parents: 54179
diff changeset
55 while l:
b0ed35c99dc6 (note: svnmerged from py3k, but the original message was wrong)
Antoine Pitrou <solipsis@pitrou.net>
parents: 54179
diff changeset
56 discard(l.pop())
b0ed35c99dc6 (note: svnmerged from py3k, but the original message was wrong)
Antoine Pitrou <solipsis@pitrou.net>
parents: 54179
diff changeset
57
45159
e6069b24031e Moved WeakSet into a bootstap module use by abc.py.
Raymond Hettinger <python@rcn.com>
parents:
diff changeset
58 def __iter__(self):
58195
b0ed35c99dc6 (note: svnmerged from py3k, but the original message was wrong)
Antoine Pitrou <solipsis@pitrou.net>
parents: 54179
diff changeset
59 with _IterationGuard(self):
b0ed35c99dc6 (note: svnmerged from py3k, but the original message was wrong)
Antoine Pitrou <solipsis@pitrou.net>
parents: 54179
diff changeset
60 for itemref in self.data:
b0ed35c99dc6 (note: svnmerged from py3k, but the original message was wrong)
Antoine Pitrou <solipsis@pitrou.net>
parents: 54179
diff changeset
61 item = itemref()
b0ed35c99dc6 (note: svnmerged from py3k, but the original message was wrong)
Antoine Pitrou <solipsis@pitrou.net>
parents: 54179
diff changeset
62 if item is not None:
b0ed35c99dc6 (note: svnmerged from py3k, but the original message was wrong)
Antoine Pitrou <solipsis@pitrou.net>
parents: 54179
diff changeset
63 yield item
45159
e6069b24031e Moved WeakSet into a bootstap module use by abc.py.
Raymond Hettinger <python@rcn.com>
parents:
diff changeset
64
47159
37499287f758 Add a test suite for WeakSet mostly derived from test_set and fix some
Georg Brandl <georg@python.org>
parents: 47150
diff changeset
65 def __len__(self):
37499287f758 Add a test suite for WeakSet mostly derived from test_set and fix some
Georg Brandl <georg@python.org>
parents: 47150
diff changeset
66 return sum(x() is not None for x in self.data)
37499287f758 Add a test suite for WeakSet mostly derived from test_set and fix some
Georg Brandl <georg@python.org>
parents: 47150
diff changeset
67
45159
e6069b24031e Moved WeakSet into a bootstap module use by abc.py.
Raymond Hettinger <python@rcn.com>
parents:
diff changeset
68 def __contains__(self, item):
e6069b24031e Moved WeakSet into a bootstap module use by abc.py.
Raymond Hettinger <python@rcn.com>
parents:
diff changeset
69 return ref(item) in self.data
e6069b24031e Moved WeakSet into a bootstap module use by abc.py.
Raymond Hettinger <python@rcn.com>
parents:
diff changeset
70
e6069b24031e Moved WeakSet into a bootstap module use by abc.py.
Raymond Hettinger <python@rcn.com>
parents:
diff changeset
71 def __reduce__(self):
e6069b24031e Moved WeakSet into a bootstap module use by abc.py.
Raymond Hettinger <python@rcn.com>
parents:
diff changeset
72 return (self.__class__, (list(self),),
e6069b24031e Moved WeakSet into a bootstap module use by abc.py.
Raymond Hettinger <python@rcn.com>
parents:
diff changeset
73 getattr(self, '__dict__', None))
e6069b24031e Moved WeakSet into a bootstap module use by abc.py.
Raymond Hettinger <python@rcn.com>
parents:
diff changeset
74
e6069b24031e Moved WeakSet into a bootstap module use by abc.py.
Raymond Hettinger <python@rcn.com>
parents:
diff changeset
75 def add(self, item):
58195
b0ed35c99dc6 (note: svnmerged from py3k, but the original message was wrong)
Antoine Pitrou <solipsis@pitrou.net>
parents: 54179
diff changeset
76 if self._pending_removals:
b0ed35c99dc6 (note: svnmerged from py3k, but the original message was wrong)
Antoine Pitrou <solipsis@pitrou.net>
parents: 54179
diff changeset
77 self._commit_removals()
45159
e6069b24031e Moved WeakSet into a bootstap module use by abc.py.
Raymond Hettinger <python@rcn.com>
parents:
diff changeset
78 self.data.add(ref(item, self._remove))
e6069b24031e Moved WeakSet into a bootstap module use by abc.py.
Raymond Hettinger <python@rcn.com>
parents:
diff changeset
79
e6069b24031e Moved WeakSet into a bootstap module use by abc.py.
Raymond Hettinger <python@rcn.com>
parents:
diff changeset
80 def clear(self):
58195
b0ed35c99dc6 (note: svnmerged from py3k, but the original message was wrong)
Antoine Pitrou <solipsis@pitrou.net>
parents: 54179
diff changeset
81 if self._pending_removals:
b0ed35c99dc6 (note: svnmerged from py3k, but the original message was wrong)
Antoine Pitrou <solipsis@pitrou.net>
parents: 54179
diff changeset
82 self._commit_removals()
45159
e6069b24031e Moved WeakSet into a bootstap module use by abc.py.
Raymond Hettinger <python@rcn.com>
parents:
diff changeset
83 self.data.clear()
e6069b24031e Moved WeakSet into a bootstap module use by abc.py.
Raymond Hettinger <python@rcn.com>
parents:
diff changeset
84
e6069b24031e Moved WeakSet into a bootstap module use by abc.py.
Raymond Hettinger <python@rcn.com>
parents:
diff changeset
85 def copy(self):
e6069b24031e Moved WeakSet into a bootstap module use by abc.py.
Raymond Hettinger <python@rcn.com>
parents:
diff changeset
86 return self.__class__(self)
e6069b24031e Moved WeakSet into a bootstap module use by abc.py.
Raymond Hettinger <python@rcn.com>
parents:
diff changeset
87
e6069b24031e Moved WeakSet into a bootstap module use by abc.py.
Raymond Hettinger <python@rcn.com>
parents:
diff changeset
88 def pop(self):
58195
b0ed35c99dc6 (note: svnmerged from py3k, but the original message was wrong)
Antoine Pitrou <solipsis@pitrou.net>
parents: 54179
diff changeset
89 if self._pending_removals:
b0ed35c99dc6 (note: svnmerged from py3k, but the original message was wrong)
Antoine Pitrou <solipsis@pitrou.net>
parents: 54179
diff changeset
90 self._commit_removals()
45159
e6069b24031e Moved WeakSet into a bootstap module use by abc.py.
Raymond Hettinger <python@rcn.com>
parents:
diff changeset
91 while True:
47150
bbd30c492a99 Fix two issues in the weak set implementation.
Georg Brandl <georg@python.org>
parents: 45159
diff changeset
92 try:
bbd30c492a99 Fix two issues in the weak set implementation.
Georg Brandl <georg@python.org>
parents: 45159
diff changeset
93 itemref = self.data.pop()
bbd30c492a99 Fix two issues in the weak set implementation.
Georg Brandl <georg@python.org>
parents: 45159
diff changeset
94 except KeyError:
bbd30c492a99 Fix two issues in the weak set implementation.
Georg Brandl <georg@python.org>
parents: 45159
diff changeset
95 raise KeyError('pop from empty WeakSet')
45159
e6069b24031e Moved WeakSet into a bootstap module use by abc.py.
Raymond Hettinger <python@rcn.com>
parents:
diff changeset
96 item = itemref()
e6069b24031e Moved WeakSet into a bootstap module use by abc.py.
Raymond Hettinger <python@rcn.com>
parents:
diff changeset
97 if item is not None:
e6069b24031e Moved WeakSet into a bootstap module use by abc.py.
Raymond Hettinger <python@rcn.com>
parents:
diff changeset
98 return item
e6069b24031e Moved WeakSet into a bootstap module use by abc.py.
Raymond Hettinger <python@rcn.com>
parents:
diff changeset
99
e6069b24031e Moved WeakSet into a bootstap module use by abc.py.
Raymond Hettinger <python@rcn.com>
parents:
diff changeset
100 def remove(self, item):
58195
b0ed35c99dc6 (note: svnmerged from py3k, but the original message was wrong)
Antoine Pitrou <solipsis@pitrou.net>
parents: 54179
diff changeset
101 if self._pending_removals:
b0ed35c99dc6 (note: svnmerged from py3k, but the original message was wrong)
Antoine Pitrou <solipsis@pitrou.net>
parents: 54179
diff changeset
102 self._commit_removals()
45159
e6069b24031e Moved WeakSet into a bootstap module use by abc.py.
Raymond Hettinger <python@rcn.com>
parents:
diff changeset
103 self.data.remove(ref(item))
e6069b24031e Moved WeakSet into a bootstap module use by abc.py.
Raymond Hettinger <python@rcn.com>
parents:
diff changeset
104
e6069b24031e Moved WeakSet into a bootstap module use by abc.py.
Raymond Hettinger <python@rcn.com>
parents:
diff changeset
105 def discard(self, item):
58195
b0ed35c99dc6 (note: svnmerged from py3k, but the original message was wrong)
Antoine Pitrou <solipsis@pitrou.net>
parents: 54179
diff changeset
106 if self._pending_removals:
b0ed35c99dc6 (note: svnmerged from py3k, but the original message was wrong)
Antoine Pitrou <solipsis@pitrou.net>
parents: 54179
diff changeset
107 self._commit_removals()
45159
e6069b24031e Moved WeakSet into a bootstap module use by abc.py.
Raymond Hettinger <python@rcn.com>
parents:
diff changeset
108 self.data.discard(ref(item))
e6069b24031e Moved WeakSet into a bootstap module use by abc.py.
Raymond Hettinger <python@rcn.com>
parents:
diff changeset
109
e6069b24031e Moved WeakSet into a bootstap module use by abc.py.
Raymond Hettinger <python@rcn.com>
parents:
diff changeset
110 def update(self, other):
58195
b0ed35c99dc6 (note: svnmerged from py3k, but the original message was wrong)
Antoine Pitrou <solipsis@pitrou.net>
parents: 54179
diff changeset
111 if self._pending_removals:
b0ed35c99dc6 (note: svnmerged from py3k, but the original message was wrong)
Antoine Pitrou <solipsis@pitrou.net>
parents: 54179
diff changeset
112 self._commit_removals()
45159
e6069b24031e Moved WeakSet into a bootstap module use by abc.py.
Raymond Hettinger <python@rcn.com>
parents:
diff changeset
113 if isinstance(other, self.__class__):
e6069b24031e Moved WeakSet into a bootstap module use by abc.py.
Raymond Hettinger <python@rcn.com>
parents:
diff changeset
114 self.data.update(other.data)
e6069b24031e Moved WeakSet into a bootstap module use by abc.py.
Raymond Hettinger <python@rcn.com>
parents:
diff changeset
115 else:
e6069b24031e Moved WeakSet into a bootstap module use by abc.py.
Raymond Hettinger <python@rcn.com>
parents:
diff changeset
116 for element in other:
e6069b24031e Moved WeakSet into a bootstap module use by abc.py.
Raymond Hettinger <python@rcn.com>
parents:
diff changeset
117 self.add(element)
58195
b0ed35c99dc6 (note: svnmerged from py3k, but the original message was wrong)
Antoine Pitrou <solipsis@pitrou.net>
parents: 54179
diff changeset
118
47159
37499287f758 Add a test suite for WeakSet mostly derived from test_set and fix some
Georg Brandl <georg@python.org>
parents: 47150
diff changeset
119 def __ior__(self, other):
37499287f758 Add a test suite for WeakSet mostly derived from test_set and fix some
Georg Brandl <georg@python.org>
parents: 47150
diff changeset
120 self.update(other)
37499287f758 Add a test suite for WeakSet mostly derived from test_set and fix some
Georg Brandl <georg@python.org>
parents: 47150
diff changeset
121 return self
45159
e6069b24031e Moved WeakSet into a bootstap module use by abc.py.
Raymond Hettinger <python@rcn.com>
parents:
diff changeset
122
e6069b24031e Moved WeakSet into a bootstap module use by abc.py.
Raymond Hettinger <python@rcn.com>
parents:
diff changeset
123 # Helper functions for simple delegating methods.
e6069b24031e Moved WeakSet into a bootstap module use by abc.py.
Raymond Hettinger <python@rcn.com>
parents:
diff changeset
124 def _apply(self, other, method):
e6069b24031e Moved WeakSet into a bootstap module use by abc.py.
Raymond Hettinger <python@rcn.com>
parents:
diff changeset
125 if not isinstance(other, self.__class__):
e6069b24031e Moved WeakSet into a bootstap module use by abc.py.
Raymond Hettinger <python@rcn.com>
parents:
diff changeset
126 other = self.__class__(other)
e6069b24031e Moved WeakSet into a bootstap module use by abc.py.
Raymond Hettinger <python@rcn.com>
parents:
diff changeset
127 newdata = method(other.data)
e6069b24031e Moved WeakSet into a bootstap module use by abc.py.
Raymond Hettinger <python@rcn.com>
parents:
diff changeset
128 newset = self.__class__()
e6069b24031e Moved WeakSet into a bootstap module use by abc.py.
Raymond Hettinger <python@rcn.com>
parents:
diff changeset
129 newset.data = newdata
e6069b24031e Moved WeakSet into a bootstap module use by abc.py.
Raymond Hettinger <python@rcn.com>
parents:
diff changeset
130 return newset
e6069b24031e Moved WeakSet into a bootstap module use by abc.py.
Raymond Hettinger <python@rcn.com>
parents:
diff changeset
131
e6069b24031e Moved WeakSet into a bootstap module use by abc.py.
Raymond Hettinger <python@rcn.com>
parents:
diff changeset
132 def difference(self, other):
e6069b24031e Moved WeakSet into a bootstap module use by abc.py.
Raymond Hettinger <python@rcn.com>
parents:
diff changeset
133 return self._apply(other, self.data.difference)
e6069b24031e Moved WeakSet into a bootstap module use by abc.py.
Raymond Hettinger <python@rcn.com>
parents:
diff changeset
134 __sub__ = difference
e6069b24031e Moved WeakSet into a bootstap module use by abc.py.
Raymond Hettinger <python@rcn.com>
parents:
diff changeset
135
e6069b24031e Moved WeakSet into a bootstap module use by abc.py.
Raymond Hettinger <python@rcn.com>
parents:
diff changeset
136 def difference_update(self, other):
58195
b0ed35c99dc6 (note: svnmerged from py3k, but the original message was wrong)
Antoine Pitrou <solipsis@pitrou.net>
parents: 54179
diff changeset
137 if self._pending_removals:
b0ed35c99dc6 (note: svnmerged from py3k, but the original message was wrong)
Antoine Pitrou <solipsis@pitrou.net>
parents: 54179
diff changeset
138 self._commit_removals()
47159
37499287f758 Add a test suite for WeakSet mostly derived from test_set and fix some
Georg Brandl <georg@python.org>
parents: 47150
diff changeset
139 if self is other:
37499287f758 Add a test suite for WeakSet mostly derived from test_set and fix some
Georg Brandl <georg@python.org>
parents: 47150
diff changeset
140 self.data.clear()
37499287f758 Add a test suite for WeakSet mostly derived from test_set and fix some
Georg Brandl <georg@python.org>
parents: 47150
diff changeset
141 else:
37499287f758 Add a test suite for WeakSet mostly derived from test_set and fix some
Georg Brandl <georg@python.org>
parents: 47150
diff changeset
142 self.data.difference_update(ref(item) for item in other)
37499287f758 Add a test suite for WeakSet mostly derived from test_set and fix some
Georg Brandl <georg@python.org>
parents: 47150
diff changeset
143 def __isub__(self, other):
58195
b0ed35c99dc6 (note: svnmerged from py3k, but the original message was wrong)
Antoine Pitrou <solipsis@pitrou.net>
parents: 54179
diff changeset
144 if self._pending_removals:
b0ed35c99dc6 (note: svnmerged from py3k, but the original message was wrong)
Antoine Pitrou <solipsis@pitrou.net>
parents: 54179
diff changeset
145 self._commit_removals()
47159
37499287f758 Add a test suite for WeakSet mostly derived from test_set and fix some
Georg Brandl <georg@python.org>
parents: 47150
diff changeset
146 if self is other:
37499287f758 Add a test suite for WeakSet mostly derived from test_set and fix some
Georg Brandl <georg@python.org>
parents: 47150
diff changeset
147 self.data.clear()
37499287f758 Add a test suite for WeakSet mostly derived from test_set and fix some
Georg Brandl <georg@python.org>
parents: 47150
diff changeset
148 else:
37499287f758 Add a test suite for WeakSet mostly derived from test_set and fix some
Georg Brandl <georg@python.org>
parents: 47150
diff changeset
149 self.data.difference_update(ref(item) for item in other)
37499287f758 Add a test suite for WeakSet mostly derived from test_set and fix some
Georg Brandl <georg@python.org>
parents: 47150
diff changeset
150 return self
45159
e6069b24031e Moved WeakSet into a bootstap module use by abc.py.
Raymond Hettinger <python@rcn.com>
parents:
diff changeset
151
e6069b24031e Moved WeakSet into a bootstap module use by abc.py.
Raymond Hettinger <python@rcn.com>
parents:
diff changeset
152 def intersection(self, other):
e6069b24031e Moved WeakSet into a bootstap module use by abc.py.
Raymond Hettinger <python@rcn.com>
parents:
diff changeset
153 return self._apply(other, self.data.intersection)
e6069b24031e Moved WeakSet into a bootstap module use by abc.py.
Raymond Hettinger <python@rcn.com>
parents:
diff changeset
154 __and__ = intersection
e6069b24031e Moved WeakSet into a bootstap module use by abc.py.
Raymond Hettinger <python@rcn.com>
parents:
diff changeset
155
e6069b24031e Moved WeakSet into a bootstap module use by abc.py.
Raymond Hettinger <python@rcn.com>
parents:
diff changeset
156 def intersection_update(self, other):
58195
b0ed35c99dc6 (note: svnmerged from py3k, but the original message was wrong)
Antoine Pitrou <solipsis@pitrou.net>
parents: 54179
diff changeset
157 if self._pending_removals:
b0ed35c99dc6 (note: svnmerged from py3k, but the original message was wrong)
Antoine Pitrou <solipsis@pitrou.net>
parents: 54179
diff changeset
158 self._commit_removals()
47159
37499287f758 Add a test suite for WeakSet mostly derived from test_set and fix some
Georg Brandl <georg@python.org>
parents: 47150
diff changeset
159 self.data.intersection_update(ref(item) for item in other)
37499287f758 Add a test suite for WeakSet mostly derived from test_set and fix some
Georg Brandl <georg@python.org>
parents: 47150
diff changeset
160 def __iand__(self, other):
58195
b0ed35c99dc6 (note: svnmerged from py3k, but the original message was wrong)
Antoine Pitrou <solipsis@pitrou.net>
parents: 54179
diff changeset
161 if self._pending_removals:
b0ed35c99dc6 (note: svnmerged from py3k, but the original message was wrong)
Antoine Pitrou <solipsis@pitrou.net>
parents: 54179
diff changeset
162 self._commit_removals()
47159
37499287f758 Add a test suite for WeakSet mostly derived from test_set and fix some
Georg Brandl <georg@python.org>
parents: 47150
diff changeset
163 self.data.intersection_update(ref(item) for item in other)
37499287f758 Add a test suite for WeakSet mostly derived from test_set and fix some
Georg Brandl <georg@python.org>
parents: 47150
diff changeset
164 return self
45159
e6069b24031e Moved WeakSet into a bootstap module use by abc.py.
Raymond Hettinger <python@rcn.com>
parents:
diff changeset
165
e6069b24031e Moved WeakSet into a bootstap module use by abc.py.
Raymond Hettinger <python@rcn.com>
parents:
diff changeset
166 def issubset(self, other):
e6069b24031e Moved WeakSet into a bootstap module use by abc.py.
Raymond Hettinger <python@rcn.com>
parents:
diff changeset
167 return self.data.issubset(ref(item) for item in other)
e6069b24031e Moved WeakSet into a bootstap module use by abc.py.
Raymond Hettinger <python@rcn.com>
parents:
diff changeset
168 __lt__ = issubset
e6069b24031e Moved WeakSet into a bootstap module use by abc.py.
Raymond Hettinger <python@rcn.com>
parents:
diff changeset
169
47159
37499287f758 Add a test suite for WeakSet mostly derived from test_set and fix some
Georg Brandl <georg@python.org>
parents: 47150
diff changeset
170 def __le__(self, other):
37499287f758 Add a test suite for WeakSet mostly derived from test_set and fix some
Georg Brandl <georg@python.org>
parents: 47150
diff changeset
171 return self.data <= set(ref(item) for item in other)
37499287f758 Add a test suite for WeakSet mostly derived from test_set and fix some
Georg Brandl <georg@python.org>
parents: 47150
diff changeset
172
45159
e6069b24031e Moved WeakSet into a bootstap module use by abc.py.
Raymond Hettinger <python@rcn.com>
parents:
diff changeset
173 def issuperset(self, other):
e6069b24031e Moved WeakSet into a bootstap module use by abc.py.
Raymond Hettinger <python@rcn.com>
parents:
diff changeset
174 return self.data.issuperset(ref(item) for item in other)
e6069b24031e Moved WeakSet into a bootstap module use by abc.py.
Raymond Hettinger <python@rcn.com>
parents:
diff changeset
175 __gt__ = issuperset
e6069b24031e Moved WeakSet into a bootstap module use by abc.py.
Raymond Hettinger <python@rcn.com>
parents:
diff changeset
176
47159
37499287f758 Add a test suite for WeakSet mostly derived from test_set and fix some
Georg Brandl <georg@python.org>
parents: 47150
diff changeset
177 def __ge__(self, other):
37499287f758 Add a test suite for WeakSet mostly derived from test_set and fix some
Georg Brandl <georg@python.org>
parents: 47150
diff changeset
178 return self.data >= set(ref(item) for item in other)
37499287f758 Add a test suite for WeakSet mostly derived from test_set and fix some
Georg Brandl <georg@python.org>
parents: 47150
diff changeset
179
37499287f758 Add a test suite for WeakSet mostly derived from test_set and fix some
Georg Brandl <georg@python.org>
parents: 47150
diff changeset
180 def __eq__(self, other):
54179
a7ad1696866b Merged revisions 72751 via svnmerge from
Robert Schuppenies <okkotonushi@googlemail.com>
parents: 47159
diff changeset
181 if not isinstance(other, self.__class__):
a7ad1696866b Merged revisions 72751 via svnmerge from
Robert Schuppenies <okkotonushi@googlemail.com>
parents: 47159
diff changeset
182 return NotImplemented
47159
37499287f758 Add a test suite for WeakSet mostly derived from test_set and fix some
Georg Brandl <georg@python.org>
parents: 47150
diff changeset
183 return self.data == set(ref(item) for item in other)
37499287f758 Add a test suite for WeakSet mostly derived from test_set and fix some
Georg Brandl <georg@python.org>
parents: 47150
diff changeset
184
45159
e6069b24031e Moved WeakSet into a bootstap module use by abc.py.
Raymond Hettinger <python@rcn.com>
parents:
diff changeset
185 def symmetric_difference(self, other):
e6069b24031e Moved WeakSet into a bootstap module use by abc.py.
Raymond Hettinger <python@rcn.com>
parents:
diff changeset
186 return self._apply(other, self.data.symmetric_difference)
e6069b24031e Moved WeakSet into a bootstap module use by abc.py.
Raymond Hettinger <python@rcn.com>
parents:
diff changeset
187 __xor__ = symmetric_difference
e6069b24031e Moved WeakSet into a bootstap module use by abc.py.
Raymond Hettinger <python@rcn.com>
parents:
diff changeset
188
e6069b24031e Moved WeakSet into a bootstap module use by abc.py.
Raymond Hettinger <python@rcn.com>
parents:
diff changeset
189 def symmetric_difference_update(self, other):
58195
b0ed35c99dc6 (note: svnmerged from py3k, but the original message was wrong)
Antoine Pitrou <solipsis@pitrou.net>
parents: 54179
diff changeset
190 if self._pending_removals:
b0ed35c99dc6 (note: svnmerged from py3k, but the original message was wrong)
Antoine Pitrou <solipsis@pitrou.net>
parents: 54179
diff changeset
191 self._commit_removals()
47159
37499287f758 Add a test suite for WeakSet mostly derived from test_set and fix some
Georg Brandl <georg@python.org>
parents: 47150
diff changeset
192 if self is other:
37499287f758 Add a test suite for WeakSet mostly derived from test_set and fix some
Georg Brandl <georg@python.org>
parents: 47150
diff changeset
193 self.data.clear()
37499287f758 Add a test suite for WeakSet mostly derived from test_set and fix some
Georg Brandl <georg@python.org>
parents: 47150
diff changeset
194 else:
37499287f758 Add a test suite for WeakSet mostly derived from test_set and fix some
Georg Brandl <georg@python.org>
parents: 47150
diff changeset
195 self.data.symmetric_difference_update(ref(item) for item in other)
37499287f758 Add a test suite for WeakSet mostly derived from test_set and fix some
Georg Brandl <georg@python.org>
parents: 47150
diff changeset
196 def __ixor__(self, other):
58195
b0ed35c99dc6 (note: svnmerged from py3k, but the original message was wrong)
Antoine Pitrou <solipsis@pitrou.net>
parents: 54179
diff changeset
197 if self._pending_removals:
b0ed35c99dc6 (note: svnmerged from py3k, but the original message was wrong)
Antoine Pitrou <solipsis@pitrou.net>
parents: 54179
diff changeset
198 self._commit_removals()
47159
37499287f758 Add a test suite for WeakSet mostly derived from test_set and fix some
Georg Brandl <georg@python.org>
parents: 47150
diff changeset
199 if self is other:
37499287f758 Add a test suite for WeakSet mostly derived from test_set and fix some
Georg Brandl <georg@python.org>
parents: 47150
diff changeset
200 self.data.clear()
37499287f758 Add a test suite for WeakSet mostly derived from test_set and fix some
Georg Brandl <georg@python.org>
parents: 47150
diff changeset
201 else:
37499287f758 Add a test suite for WeakSet mostly derived from test_set and fix some
Georg Brandl <georg@python.org>
parents: 47150
diff changeset
202 self.data.symmetric_difference_update(ref(item) for item in other)
37499287f758 Add a test suite for WeakSet mostly derived from test_set and fix some
Georg Brandl <georg@python.org>
parents: 47150
diff changeset
203 return self
45159
e6069b24031e Moved WeakSet into a bootstap module use by abc.py.
Raymond Hettinger <python@rcn.com>
parents:
diff changeset
204
e6069b24031e Moved WeakSet into a bootstap module use by abc.py.
Raymond Hettinger <python@rcn.com>
parents:
diff changeset
205 def union(self, other):
47150
bbd30c492a99 Fix two issues in the weak set implementation.
Georg Brandl <georg@python.org>
parents: 45159
diff changeset
206 return self._apply(other, self.data.union)
45159
e6069b24031e Moved WeakSet into a bootstap module use by abc.py.
Raymond Hettinger <python@rcn.com>
parents:
diff changeset
207 __or__ = union
47159
37499287f758 Add a test suite for WeakSet mostly derived from test_set and fix some
Georg Brandl <georg@python.org>
parents: 47150
diff changeset
208
37499287f758 Add a test suite for WeakSet mostly derived from test_set and fix some
Georg Brandl <georg@python.org>
parents: 47150
diff changeset
209 def isdisjoint(self, other):
37499287f758 Add a test suite for WeakSet mostly derived from test_set and fix some
Georg Brandl <georg@python.org>
parents: 47150
diff changeset
210 return len(self.intersection(other)) == 0