I did my own random sampler which I can call set_seed() on every time I want to change the order of sampled data. If I’d want the same data twice, I’d call set_seed() after the second time I had read the data. Perhaps this could help you create your own sampler. data_source is my dataset.
class RandomSampler(Sampler):
  def __init__(self, data_source):
    self.data_source = data_source

  def set_seed(self):
    self.seed = random.randint(0, 2**32 - 1)

  def __iter__(self):
    n = len(self.data_source)
    indexes = list(range(n))
    random.Random(self.seed).shuffle(indexes)
    return iter(indexes)

  def __len__(self):
    return len(self.data_source)