class_docstr: Randomizes data over a sliding window buffer of N batches.
  
  This increases the randomization of the data, which is useful if the
  batches were not in random order to start with.
code: def next(self) -> SampleBatchType:
      if self.n <= 1:
          return self.child.next()
      if len(self.buffer) < self.n:
          logger.info(
              "Filling shuffle buffer to {} batches".format(self.n)
          )
          while len(self.buffer) < self.n:
              self.buffer.append(self.child.next())
          logger.info("Shuffle buffer filled")
      i = random.randint(0, len(self.buffer) - 1)
      self.buffer[i] = self.child.next()
      return random.choice(self.buffer)
  
file_path: ray/rllib/offline/shuffled_input.py
imports: import logging
  import random
  from ray.rllib.offline.input_reader import InputReader
  from ray.rllib.utils.annotations import override, DeveloperAPI
  from ray.rllib.utils.typing import SampleBatchType
label_desc: Use image node_id 2 for calling the ShuffledInput obj's underlying member method code with example usage: obj.next() and returns: random, self