from abc import abstractmethod, ABC
from os.path import join, curdir
from typing import Callable

from torch.utils.data import Dataset as TorchDataset

"""
Author: Tibo De Peuter
"""
class Dataset(TorchDataset, ABC):
    """Abstract base class for datasets."""
    @abstractmethod
    def __init__(self, root: str, transform: Callable = None):
        """
        :param root: Relative path to the dataset root directory
        """
        self._root: str = join(curdir, 'data', root)
        self.transform = transform
        self.dataset = None

    @property
    def root(self):
        return self._root

    def __len__(self):
        return len(self.dataset)