def__getitem__(self, point_or_range): ifisinstance(point_or_range, tuple): low, high = point_or_range i = bisect_right(self._upper, high) point = low else: point = point_or_range i = bisect_right(self._upper, point) if i >= len(self._values) or self._lower[i] > point: raise IndexError(point_or_range) return self._values[i]
def__setitem__(self, r, value): lower, upper = r i = bisect_right(self._upper, upper) if i < len(self._values) and self._lower[i] < upper: raise IndexError('No overlaps permitted') self._upper.insert(i, upper) self._lower.insert(i, lower) self._values.insert(i, value)
def__delitem__(self, r): lower, upper = r i = bisect_right(self._upper, upper) if self._upper[i] != upper or self._lower[i] != lower: raise IndexError('Range not in map') del self._upper[i] del self._lower[i] del self._values[i]