code: 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', ())
docs: 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