'Build an interval tree keyed by the start and end of each range
of positions should be dropped from windows. (These are the minutes
between an early close and the minute which would be the close based
on the regular period if there were no early close.)
The value of each node is the same start and end position stored as
a tuple.
The data is stored as such in support of a fast answer to the question,
does a given start and end position overlap any of the exclusion spans?
Returns
IntervalTree containing nodes which represent the minutes to exclude
because of early closes.'

@lazyval
def _minute_exclusion_tree(self):

    itree = IntervalTree()
    for (market_open, early_close) in self._minutes_to_exclude():
        start_pos = (self._find_position_of_minute(early_close) + 1)
        end_pos = ((self._find_position_of_minute(market_open) + self._minutes_per_day) - 1)
        data = (start_pos, end_pos)
        itree[start_pos:(end_pos + 1)] = data
    return itree
