in heap.py [0:0]
def insert(self, elem):
if self.invalid_pos:
# Take one of the invalidated positions
target_pos = self.invalid_pos.pop()
new_elem = CachedScoreValue(elem, None, None)
self.data[target_pos] = new_elem
self.inverse_index[self.keyf(new_elem)] = target_pos
self.sift_down(target_pos)
self.sift_up(target_pos)
else:
new_elem = CachedScoreValue(elem, None, None)
self.inverse_index[self.keyf(new_elem)] = len(self.data)
self.data.append(new_elem)
self.sift_up(len(self.data) - 1)