Relation between `torchvision.datasets.folder.ImageFolder`, `torch.utils.data.ConcatDataset` and `torch.utils.data.DataLoader`

I have seen the following code. I don’t understand does it produce different patches of an image images multiple times, (or) same patch of an image multiple times.

    trainsetiters = 640

    transform_train = Compose([
        sar_dataset.RandomCropPil(patchsize),                     # to crop randomly
        sar_dataset.Random8OrientationPil(),                      # to rotate randomly
        sar_dataset.PilToGrayTensor(bayes=1.0,scale=scale_img),   # To convert to grey scale
    ])

    trainset = PlainImageFolder(dirs=train_data_folder, transform=transform_train, cache=True)
    trainset = torch.utils.data.ConcatDataset([trainset] * trainsetiters)
    trainloader = torch.utils.data.DataLoader(trainset, batch_size=batchsize, shuffle=True, num_workers=20)

The PlainimageFolder function used above is a custom function inspired from torchvision.datasets.folder.ImageFolder

My doubt is does this torch.utils.data.DataLoader produces:
multiple (640 times) different patches from the same image in an epoch
(or)
the same patch of an image multiple times (640 times) is repeated in an epoch?