I see. I was thinking if it is smaller, but if the size is larger, then it works.
So, what you can do, in the __init__ function, create a random array of these positions like below:
    def __init__(self):
        ....
        self.position_arry = np.random.choice(1000, 1000, replace=False)


Then, in the __getitem__ function you can take a value from this array. But that will only take the first 100 elements and will ignore the rest, since the input index is always between 0 < index < 100. So, to fix this, we can change the function __len__ to return 1000 instead of 100, and then in the __getitem__ we do the fllowing:
    def __getitem__(index):
        if index > 100:
             indx_data = index % 100
        else:
             indx_data = index

        position = self.position_arry[index]
        data = .. # use indx_data to retrieve the correct sample

So, we use the index to retrieve the position, and the indx_data to retrive the sample. Also, note that the actual number of epochs is changed as well. One epoch like this corresponds to 10 epochs before.