class TagTimeKey(TimeKey): def __init__(self, tag, minutes=each10minutes, name='tagtime'): self.minutes = IIBTree([(i, 1) for i in minutes]) self.tag = tag self.name = name def __call__(self, objectId, instance, *arg, **kw): tag = self.tag.query(instance.context) if not tag: return () tag = time.localtime(tag) minute = tag[4] if not (self.minutes.has_key(-1) or self.minutes.has_key(minute)): minute = self.minutes.maxKey(minute) try: minute2 = self.minutes.minKey(minute+1) time2 = time.mktime(tag[:4] + (minute2, 0, 0, 0, 0)) except ValueError: time2 = time.mktime(tag[:4] + (0, 0, 0, 0, 0)) + 3600 if time2 < time.time(): return {'%s:%s'%(self.name, self.tag.name): time2} return {'%s:%s'%(self.name, self.tag.name): time.mktime(tag[:4] + (minute, 0, 0, 0, 0))}
def testMany(self): import random N = 15 # number of IIBTrees to feed in L = [] commonkey = N * 1000 allkeys = {commonkey: 1} for i in range(N): t = IIBTree() t[commonkey] = i for j in range(N - i): key = i + j allkeys[key] = 1 t[key] = N * i + j L.append((t, i + 1)) random.shuffle(L) allkeys = allkeys.keys() allkeys.sort() # Test the union. expected = [] for key in allkeys: sum = 0 for t, w in L: if t.has_key(key): sum += t[key] * w expected.append((key, sum)) # print 'union', expected got = mass_weightedUnion(L) self.assertEqual(expected, list(got.items())) # Test the intersection. expected = [] for key in allkeys: sum = 0 for t, w in L: if t.has_key(key): sum += t[key] * w else: break else: # We didn't break out of the loop so it's in the intersection. expected.append((key, sum)) # print 'intersection', expected got = mass_weightedIntersection(L) self.assertEqual(expected, list(got.items()))
def testMany(self): import random N = 15 # number of IIBTrees to feed in L = [] commonkey = N * 1000 allkeys = {commonkey: 1} for i in range(N): t = IIBTree() t[commonkey] = i for j in range(N-i): key = i + j allkeys[key] = 1 t[key] = N*i + j L.append((t, i+1)) random.shuffle(L) allkeys = allkeys.keys() allkeys.sort() # Test the union. expected = [] for key in allkeys: sum = 0 for t, w in L: if t.has_key(key): sum += t[key] * w expected.append((key, sum)) # print 'union', expected got = mass_weightedUnion(L) self.assertEqual(expected, list(got.items())) # Test the intersection. expected = [] for key in allkeys: sum = 0 for t, w in L: if t.has_key(key): sum += t[key] * w else: break else: # We didn't break out of the loop so it's in the intersection. expected.append((key, sum)) # print 'intersection', expected got = mass_weightedIntersection(L) self.assertEqual(expected, list(got.items()))
class TimeKey(object): interface.implements(ITimeKey) def __init__(self, hours=eachHour, minutes=each0minute, name='time'): self.hours = IIBTree([(i, 1) for i in hours]) self.minutes = IIBTree([(i, 1) for i in minutes]) self.name = name def __call__(self, *args, **kw): now = time.localtime() minute = now[4] if not (self.minutes.has_key(-1) or self.minutes.has_key(minute)): minute = self.minutes.maxKey(minute) hour = now[3] if not (self.hours.has_key(-1) or self.hours.has_key(hour)): hour = self.hours.maxKey(hour) return {self.name: time.mktime(now[:3] + (hour, minute, 0, 0, 0, 0))}
class database: def __init__(self): self.data = [] self.dict = IIBTree() self.index = -1 #index of the last element in the list def insert(self, key, value): if self.dict.has_key(key): index = self.dict.get(key) self.data[index] = value else: self.data.append(value) self.index = self.index + 1 index = self.index self.dict.update({key: index}) def search(self, key): if self.dict.has_key(key): value = self.data[self.dict.get(key)] return value return "NOT PRESENT" def delete(self, key): self.dict.pop(key)