in heap.py [0:0]
def sift_up(self, pos):
root = pos
if root in self.invalid_pos:
return
while root > 0:
parent = self.parent(root)
if parent in self.invalid_pos:
self._swap_pos(root, parent)
# Because the root was invalid, we have to consider if the
# other subtree may have a bigger element
self.sift_down(parent)
root = parent
elif self.cmp(self.data[root], self.data[parent]):
self._swap_pos(root, parent)
root = parent
else:
break
self.clean_invalid()