def filter(self, condition): kwargs, pred = get_integer_predicate_bounds(condition) start = max(self.start, kwargs.get("min_value", self.start)) end = min(self.end, kwargs.get("max_value", self.end)) if start > self.start or end < self.end: if start > end: return nothing() self = type(self)(start, end) if pred is None: return self return super().filter(pred)
def filter(self, condition): kwargs, pred = get_integer_predicate_bounds(condition) start, end = self.start, self.end if "min_value" in kwargs: start = max(kwargs["min_value"], -math.inf if start is None else start) if "max_value" in kwargs: end = min(kwargs["max_value"], math.inf if end is None else end) if start != self.start or end != self.end: if start is not None and end is not None and start > end: return nothing() self = type(self)(start, end) if pred is None: return self return super().filter(pred)