Python tools for handling intervals (ranges of comparable objects).
# All integers between 1 and 4interval=Interval([1, 4])
interval.lower# 1interval.upper# 4interval.lower_inc# Trueinterval.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# Trueinterval.lower_inc# Falseinterval.upper_inc# False- Half-open interval has one of the endpoints as open
interval=Interval('[1, 4)')
interval.open# Falseinterval.lower_inc# Trueinterval.upper_inc# False- Closed interval includes both endpoints
interval=Interval([1, 4])
interval.closed# Trueinterval.lower_inc# Trueinterval.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.
fromdatetimeimportdateinterval=Interval([1, 4])
interval# IntInterval('[1, 4]')interval.type# intinterval=Interval([1.5, 4])
interval# FloatInterval('[1.5, 4]')interval.type# floatinterval=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# TrueInterval([1, 2]).degenerate# FalseInterval([1, 5]) >Interval([0, 3]) # TrueInterval([1, 5]) ==Interval([1, 5]) # TrueInterval([2, 3]) inInterval([2, 6]) # TrueInterval([2, 3]) inInterval([2, 3]) # TrueInterval([2, 3]) inInterval((2, 3)) # FalseInterval([2, 4]) ==Interval((1, 5)) # TrueInterval([1, 5]) +Interval([1, 8]) # Interval([2, 13])# intersectionInterval([2, 6]) &Interval([3, 8]) # Interval([3, 6])

