Source code for pyreason.scripts.interval.interval

from numba.experimental import structref
from numba import njit
import numpy as np


[docs] class Interval(structref.StructRefProxy): def __new__(cls, lower, upper, s=False): return structref.StructRefProxy.__new__(cls, lower, upper, s, lower, upper) @property @njit
[docs] def lower(self): return self.l
@property @njit
[docs] def upper(self): return self.u
@property @njit
[docs] def static(self): return self.s
@property @njit
[docs] def prev_lower(self): return self.prev_l
@property @njit
[docs] def prev_upper(self): return self.prev_u
@njit
[docs] def set_lower_upper(self, lower, upper): self.l = lower self.u = upper
@njit
[docs] def reset(self): self.prev_l = self.l self.prev_u = self.u self.l = 0 self.u = 1
@njit
[docs] def set_static(self, static): self.s = static
@njit
[docs] def is_static(self): return self.s
@njit
[docs] def has_changed(self): if self.lower==self.prev_lower and self.upper==self.prev_upper: return False else: return True
@njit
[docs] def intersection(self, interval): lower = max(self.lower, interval.lower) upper = min(self.upper, interval.upper) if lower > upper: lower = np.float64(0) upper = np.float64(1) return Interval(lower, upper, False, self.lower, self.upper)
[docs] def to_str(self): return self.__repr__()
def __eq__(self, interval): if interval.lower==self.lower and interval.upper==self.upper: return True else: return False def __repr__(self): return f'[{self.lower},{self.upper}]' def __hash__(self): return hash((self.lower, self.upper)) def __contains__(self, item): if self.lower <= item.lower and self.upper >= item.upper: return True else: return False