class_docstr: WindowAssigner that windows elements into sessions based on the timestamp. Windows cannot
  overlap.
class_docstr_tok: ["WindowAssigner","that","windows","elements","into","sessions","based","on","the","timestamp",".","Windows","can","not","overlap","."]
code: def _ceiling_window(
      new_window: TimeWindow, sorted_windows: List[TimeWindow]
  ):
      if not sorted_windows:
          return None
      window_num = len(sorted_windows)
      if sorted_windows[0] >= new_window:
          return None
      for i in range(window_num - 1):
          if sorted_windows[i] <= new_window <= sorted_windows[i + 1]:
              return sorted_windows[i]
      return sorted_windows[window_num - 1]
  
imports: import math
  from abc import ABC, abstractmethod
  from typing import Generic, List, Any, Iterable, Set
  from pyflink.common.typeinfo import Types
  from pyflink.datastream.state import ValueStateDescriptor, ValueState
  from pyflink.datastream.window import TimeWindow, CountWindow
  from pyflink.fn_execution.table.window_context import Context, W
label_desc: Use image node_id 5 for calling the SessionWindowAssigner obj's underlying member method code with example usage: obj._ceiling_window(new_window, sorted_windows) and returns: sorted_windows, None, None, sorted_windows