|
1 | 1 | from __future__ import absolute_import |
2 | | -try: |
3 | | - frozenset |
4 | | -except NameError: |
5 | | - #Import from the sets module for python 2.3 |
6 | | - from sets import Set as set |
7 | | - from sets import ImmutableSet as frozenset |
8 | | - |
9 | 2 | from types import ModuleType |
10 | 3 |
|
11 | 4 |
|
@@ -41,145 +34,6 @@ def __getitem__(self, key): |
41 | 34 | return dict.get(self, key, self.default) |
42 | 35 | __getitem__.func_annotations = {} |
43 | 36 |
|
44 | | -#Pure python implementation of deque taken from the ASPN Python Cookbook |
45 | | -#Original code by Raymond Hettinger |
46 | | - |
47 | | -class deque(object): |
48 | | - |
49 | | - def __init__(self, iterable=(), maxsize=-1): |
50 | | - if not hasattr(self, u'data'): |
51 | | - self.left = self.right = 0 |
52 | | - self.data = {} |
53 | | - self.maxsize = maxsize |
54 | | - self.extend(iterable) |
55 | | - __init__.func_annotations = {} |
56 | | - |
57 | | - def append(self, x): |
58 | | - self.data[self.right] = x |
59 | | - self.right += 1 |
60 | | - if self.maxsize != -1 and len(self) > self.maxsize: |
61 | | - self.popleft() |
62 | | - append.func_annotations = {} |
63 | | - |
64 | | - def appendleft(self, x): |
65 | | - self.left -= 1 |
66 | | - self.data[self.left] = x |
67 | | - if self.maxsize != -1 and len(self) > self.maxsize: |
68 | | - self.pop() |
69 | | - appendleft.func_annotations = {} |
70 | | - |
71 | | - def pop(self): |
72 | | - if self.left == self.right: |
73 | | - raise IndexError(u'cannot pop from empty deque') |
74 | | - self.right -= 1 |
75 | | - elem = self.data[self.right] |
76 | | - del self.data[self.right] |
77 | | - return elem |
78 | | - pop.func_annotations = {} |
79 | | - |
80 | | - def popleft(self): |
81 | | - if self.left == self.right: |
82 | | - raise IndexError(u'cannot pop from empty deque') |
83 | | - elem = self.data[self.left] |
84 | | - del self.data[self.left] |
85 | | - self.left += 1 |
86 | | - return elem |
87 | | - popleft.func_annotations = {} |
88 | | - |
89 | | - def clear(self): |
90 | | - self.data.clear() |
91 | | - self.left = self.right = 0 |
92 | | - clear.func_annotations = {} |
93 | | - |
94 | | - def extend(self, iterable): |
95 | | - for elem in iterable: |
96 | | - self.append(elem) |
97 | | - extend.func_annotations = {} |
98 | | - |
99 | | - def extendleft(self, iterable): |
100 | | - for elem in iterable: |
101 | | - self.appendleft(elem) |
102 | | - extendleft.func_annotations = {} |
103 | | - |
104 | | - def rotate(self, n=1): |
105 | | - if self: |
106 | | - n %= len(self) |
107 | | - for i in xrange(n): |
108 | | - self.appendleft(self.pop()) |
109 | | - rotate.func_annotations = {} |
110 | | - |
111 | | - def __getitem__(self, i): |
112 | | - if i < 0: |
113 | | - i += len(self) |
114 | | - try: |
115 | | - return self.data[i + self.left] |
116 | | - except KeyError: |
117 | | - raise IndexError |
118 | | - __getitem__.func_annotations = {} |
119 | | - |
120 | | - def __setitem__(self, i, value): |
121 | | - if i < 0: |
122 | | - i += len(self) |
123 | | - try: |
124 | | - self.data[i + self.left] = value |
125 | | - except KeyError: |
126 | | - raise IndexError |
127 | | - __setitem__.func_annotations = {} |
128 | | - |
129 | | - def __delitem__(self, i): |
130 | | - size = len(self) |
131 | | - if not (-size <= i < size): |
132 | | - raise IndexError |
133 | | - data = self.data |
134 | | - if i < 0: |
135 | | - i += size |
136 | | - for j in xrange(self.left+i, self.right-1): |
137 | | - data[j] = data[j+1] |
138 | | - self.pop() |
139 | | - __delitem__.func_annotations = {} |
140 | | - |
141 | | - def __len__(self): |
142 | | - return self.right - self.left |
143 | | - __len__.func_annotations = {} |
144 | | - |
145 | | - def __cmp__(self, other): |
146 | | - if type(self) != type(other): |
147 | | - return cmp(type(self), type(other)) |
148 | | - return cmp(list(self), list(other)) |
149 | | - __cmp__.func_annotations = {} |
150 | | - |
151 | | - def __repr__(self, _track=[]): |
152 | | - if id(self) in _track: |
153 | | - return u'...' |
154 | | - _track.append(id(self)) |
155 | | - r = u'deque(%r)' % (list(self),) |
156 | | - _track.remove(id(self)) |
157 | | - return r |
158 | | - __repr__.func_annotations = {} |
159 | | - |
160 | | - def __getstate__(self): |
161 | | - return (tuple(self),) |
162 | | - __getstate__.func_annotations = {} |
163 | | - |
164 | | - def __setstate__(self, s): |
165 | | - self.__init__(s[0]) |
166 | | - __setstate__.func_annotations = {} |
167 | | - |
168 | | - def __hash__(self): |
169 | | - raise TypeError |
170 | | - __hash__.func_annotations = {} |
171 | | - |
172 | | - def __copy__(self): |
173 | | - return self.__class__(self) |
174 | | - __copy__.func_annotations = {} |
175 | | - |
176 | | - def __deepcopy__(self, memo={}): |
177 | | - from copy import deepcopy |
178 | | - result = self.__class__() |
179 | | - memo[id(self)] = result |
180 | | - result.__init__(deepcopy(tuple(self), memo)) |
181 | | - return result |
182 | | - __deepcopy__.func_annotations = {} |
183 | 37 |
|
184 | 38 | #Some utility functions to dal with weirdness around UCS2 vs UCS4 |
185 | 39 | #python builds |
|
0 commit comments