class_docstr: A generic wrapper for performing rolling computations.
  
  This can be wrapped around any object which implements both an `update` and a `revert` method.
  Inputs to `update` are stored in a queue. Elements of the queue are popped when the window is
  full.
  
  Parameters
  ----------
  obj
      An object that implements both an `update` method and a `rolling `method.
  window_size
      Size of the window.
  
  Examples
  --------
  
  For instance, here is how you can compute a rolling average over a window of size 3:
  
  >>> from river import stats, utils
  
  >>> X = [1, 3, 5, 7]
  >>> rmean = utils.Rolling(stats.Mean(), window_size=3)
  
  >>> for x in X:
  ...     rmean.update(x)
  ...     print(rmean.get())
  1.0
  2.0
  3.0
  5.0
code: def __init__(self, obj: Rollable, window_size: int):
      super().__init__(obj)
      self.window: collections.deque = collections.deque(
          maxlen=window_size
      )
  
imports: from __future__ import annotations
  import bisect
  import collections
  import datetime
  import typing
label_desc: Use image node_id 1 to create a new Rolling object from inherited base classes: BaseRolling with example: obj = Rolling(obj, window_size)