docs: def data(self, rows=None):
      """Access a batch of episodes from the memory.
  
      Padding elements after the length of each episode are unspecified and might
      contain old data.
  
      Args:
        rows: Episodes to select, defaults to all.
  
      Returns:
        Tuple containing a tuple of transition quantities with batch and time
        dimensions, and a batch of sequence lengths.
      """
      rows = tf.range(self._capacity) if rows is None else rows
      assert rows.shape.ndims == 1
      episode = tools.nested.map(lambda var: tf.gather(var, rows), self._buffers)
      length = tf.gather(self._length, rows)
      return episode, length