Пример #1
0
 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)
Пример #2
0
    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)