# --------------------------------------------------------

# Swin Transformer

# Copyright (c) 2021 Microsoft

# Licensed under The MIT License [see LICENSE for details]

# Written by Ze Liu

# --------------------------------------------------------



import torch





class SubsetRandomSampler(torch.utils.data.Sampler):

    r"""Samples elements randomly from a given list of indices, without replacement.



    Arguments:

        indices (sequence): a sequence of indices

    """



    def __init__(self, indices):

        self.epoch = 0

        self.indices = indices



    def __iter__(self):

        return (self.indices[i] for i in torch.randperm(len(self.indices)))



    def __len__(self):

        return len(self.indices)



    def set_epoch(self, epoch):

        self.epoch = epoch