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