'Split requested columns into columns that should load the next known
value and columns that should load the previous known value.
Parameters
requested_columns : iterable[BoundColumn]
Returns
next_cols, previous_cols : iterable[BoundColumn], iterable[BoundColumn]
``requested_columns``, partitioned into sub-sequences based on
whether the column should produce values from the next event or the
previous event'

def split_next_and_previous_event_columns(self, requested_columns):

    def next_or_previous(c):
        if (c in self.next_value_columns):
            return 'next'
        elif (c in self.previous_value_columns):
            return 'previous'
        raise ValueError('{c}    not    found    in    next_value_columns    or    previous_value_columns'.format(c=c))
    groups = groupby(next_or_previous, requested_columns)
    return (groups.get('next', ()), groups.get('previous', ()))
