class_docstr: Splits data into blocks and randomizes them before sampling.
  
  Block size grows with each epoch.
  This causes some order of the data to be preserved, while still shuffling the data.
code: def __iter__(self):
      self.epoch_count += 1
  
      data = list(range(len(self.data_source)))
  
      log.info(f"Chunk sampling with blocksize = {self.block_size}")
  
      # Create blocks
      blocks = [
          data[i : i + self.block_size]
          for i in range(0, len(data), self.block_size)
      ]
      # shuffle the blocks
      random.shuffle(blocks)
      # concatenate the shuffled blocks
      data[:] = [b for bs in blocks for b in bs]
  
      if self.epoch_count % self.step == 0:
          self.block_size += 1
  
      return iter(data)
  
imports: import logging
  import random
  from collections import defaultdict
  from typing import Dict
  import torch
  from torch.utils.data.sampler import Sampler
label_desc: Use image node_id 2 for calling the ExpandingChunkSampler obj's underlying member method code with example usage: obj.__iter__() and returns: iter