from abc import ABC, abstractmethod
from typing import Tuple
class Dataset(ABC):
@abstractmethod
def __init__(self):
pass
@abstractmethod
def __getitem__(self, index):
pass
@abstractmethod
def __len__(self):
pass
class StreamDataset(Dataset):
@abstractmethod
def __init__(self):
pass
@abstractmethod
def __iter__(self):
pass
def __getitem__(self, idx):
raise AssertionError("can not get item from StreamDataset by index")
def __len__(self):
raise AssertionError("StreamDataset does not have length")
class ArrayDataset(Dataset):
def __init__(self, *arrays):
super().__init__()
if not all(len(arrays[0]) == len(array) for array in arrays):
raise ValueError("lengths of input arrays are inconsistent")
self.arrays = arrays
def __getitem__(self, index: int) -> Tuple:
return tuple(array[index] for array in self.arrays)
def __len__(self) -> int:
return len(self.arrays[0])