def pop_max_cached_value()

in heap.py [0:0]


    def pop_max_cached_value(self):
        if not self.data:
            raise IndexError("Heap is empty")
        if 0 in self.invalid_pos:
            self.push_invalid(0)
        if 0 in self.invalid_pos:
            raise IndexError("No valid elements in heap")

        maximum = self.data[0]
        del self.inverse_index[self.keyf(self.data[0])]
        if len(self.data) > 1:
            self.clean_invalid()
            last_element_pos = len(self.data) - 1
            if last_element_pos in self.invalid_pos:
                # TODO: This shouldn't happen...
                self.invalid_pos.add(0)
                self.invalid_pos.discard(last_element_pos)
            self.data[0] = self.data.pop()
            self.inverse_index[self.keyf(self.data[0])] = 0
            self.sift_down(0)
        else:
            self.data = []
            self.invalid_pos = set()
        #~ print("%.2f%%" % (100 * float(len(self.invalid_pos)) / len(self.data)))
        return maximum