Python tools for handling intervals (ranges of comparable objects).
# All integers between 1 and 4
interval = Interval([1, 4])
interval.lower # 1
interval.upper # 4
interval.lower_inc # True
interval.upper_inc # TrueIntervals can be either open, half-open or closed. Properties lower_inc and upper_inc denote whether or not given endpoint is included (open) or not.
- An open interval is an interval where both endpoints are open.
interval = Interval((1, 4))
interval.open # True
interval.lower_inc # False
interval.upper_inc # False- Half-open interval has one of the endpoints as open
interval = Interval('[1, 4)')
interval.open # False
interval.lower_inc # True
interval.upper_inc # False- Closed interval includes both endpoints
interval = Interval([1, 4])
interval.closed # True
interval.lower_inc # True
interval.upper_inc # TrueEach interval encapsulates a type. Interval is not actually a class. Its a convenient factory that generates AbstractInterval subclasses. Whenever you call Interval() the IntervalFactory tries to guess to best matching interval for given bounds.
from datetime import date
interval = Interval([1, 4])
interval # IntInterval('[1, 4]')
interval.type # int
interval = Interval([1.5, 4])
interval # FloatInterval('[1.5, 4]')
interval.type # float
interval = Interval([date(2000, 1, 1), inf])
interval # DateInterval('[2000-1-1,)')
interval.type # dateYou can also create interval subtypes directly (this is also faster than using Interval).
IntInterval([1, 4])
FloatInterval((1.4, 2.7))Currently provided subtypes are:
- IntInterval
- FloatInterval
- DecimalInterval
- DateInterval
- DateTimeInterval
- radius gives the half-length of an interval
Interval([1, 4]).radius # 2.5- length gives the length of an interval.
Interval([1, 4]).length # 3- centre gives the centre (midpoint) of an interval
Interval([-1, 1]).centre # 0- Interval [a, b] is degenerate if a == b
Interval([1, 1]).degenerate # True
Interval([1, 2]).degenerate # FalseInterval([1, 5]) > Interval([0, 3]) # True
Interval([1, 5]) == Interval([1, 5]) # True
Interval([2, 3]) in Interval([2, 6]) # True
Interval([2, 3]) in Interval([2, 3]) # True
Interval([2, 3]) in Interval((2, 3)) # FalseInterval([2, 4]) == Interval((1, 5)) # TrueInterval([1, 5]) + Interval([1, 8]) # Interval([2, 13])
# intersection
Interval([2, 6]) & Interval([3, 8]) # Interval([3, 6])

