提交 1cd3cf81 authored 作者: Ian Goodfellow's avatar Ian Goodfellow

OrderedDict implemetnation of OrderedSet for Python 2.4

上级 44b07506
# From http://code.activestate.com/recipes/576694/ MutableSet = None
KEY, PREV, NEXT = range(3)
try: try:
from collections import MutableSet from collections import MutableSet
except ImportError: except ImportError:
# Python 2.4 # Python 2.4
from sets import Set as MutableSet pass
from theano.gof.python25 import OrderedDict
if MutableSet is not None:
# From http://code.activestate.com/recipes/576694/
KEY, PREV, NEXT = range(3)
class OrderedSet(MutableSet): class OrderedSet(MutableSet):
# Added by IG-- pre-existing theano code expected sets
# to have this method
def update(self, container): def update(self, container):
# only allowed ordered containers # only allowed ordered containers
assert isinstance(container, (list, OrderedSet)) assert isinstance(container, (list, OrderedSet))
...@@ -78,6 +81,57 @@ class OrderedSet(MutableSet): ...@@ -78,6 +81,57 @@ class OrderedSet(MutableSet):
def __del__(self): def __del__(self):
self.clear() # remove circular references self.clear() # remove circular references
else:
# Python 2.4
class OrderedSet(object):
"""
An implementation of OrderedSet based on the keys of
an OrderedDict.
"""
def __init__(self, iterable=None):
self.data = OrderedDict()
if iterable is not None:
self.update(iterable)
def update(self, container):
# only allowed ordered containers
assert isinstance(container, (list, OrderedSet))
for elem in container:
self.add(elem)
def add(self, key):
self.data[key] = None
def __len__(self, key):
return len(self.data)
def __contains__(self, key):
return key in self.data
def discard(self, key):
if key in self.data:
del self.data[key]
def __iter__(self):
return self.data.__iter__()
def __reversed__(self):
return self.data.__reversed__()
def pop(self, last=True):
raise NotImplementedError()
def __eq__(self, other):
return type(self) == type(other) and \
self.data == other.data
def __del__(self):
# Remove circular references
self.data.clear()
if __name__ == '__main__': if __name__ == '__main__':
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论