in torchdata/datapipes/iter/util/cacheholder.py [0:0]
def __iter__(self) -> Iterator[T_co]:
if self.cache:
for idx, data in enumerate(self.source_dp):
if idx < self.idx:
yield data
else:
break
yield from self.cache
else:
# Local cache
cache: Deque = deque()
idx = 0
for data in self.source_dp:
cache.append(data)
# Cache reaches limit
if self.size is not None and sys.getsizeof(cache) > self.size:
cache.popleft()
idx += 1
yield data
self.cache = cache
self.idx = idx