graphid.util.priority_queue module

graphid.util.priority_queue._heappush_max(heap, item)[source]

why is this not in heapq

class graphid.util.priority_queue.PriorityQueue(items=None, ascending=True)[source]

Bases: NiceRepr

abstracted priority queue for our needs

Combines properties of dicts and heaps Uses a heap for fast minimum/maximum value search Uses a dict for fast read only operations

References

http://code.activestate.com/recipes/522995-priority-dict-a-priority-queue-with-updatable-prio/ https://stackoverflow.com/questions/33024215/built-in-max-heap-api-in-python

Example

>>> items = dict(a=42, b=29, c=40, d=95, e=10)
>>> self = PriorityQueue(items)
>>> print(self)
>>> assert len(self) == 5
>>> print(self.pop())
>>> assert len(self) == 4
>>> print(self.pop())
>>> assert len(self) == 3
>>> print(self.pop())
>>> print(self.pop())
>>> print(self.pop())
>>> assert len(self) == 0

Example

>>> items = dict(a=(1.0, (2, 3)), b=(1.0, (1, 2)), c=(.9, (3, 2)))
>>> self = PriorityQueue(items)
_rebuild()[source]
get(key, default=None)[source]
clear()[source]
update(items)[source]
delete_items(key_list)[source]
peek()[source]

Peek at the next item in the queue

peek_many(n)[source]

Actually this can be quite inefficient

Example

>>> from graphid import util
>>> items = list(zip(range(256), range(256)))
>>> n = 32
>>> util.shuffle(items)
>>> self = PriorityQueue(items, ascending=False)
>>> self.peek_many(56)
pop_many(n)[source]
pop(key=NoParam, default=NoParam)[source]

Pop the next item off the queue