def METHOD_NAME(self, path=None):
    """ Load data from website and extract it into numpy arrays """
    def _image_class(filepath):
        """ Image's class is determined by the parent folder of the image """
        return basename(dirname(filepath))
    def _is_train(filepath):
        """ Whether image belongs to train or val parts can be determined by
        the level 2 parent folder of the image
        """
        return basename(dirname(dirname(filepath))) == 'train'
    def _extract(archive, member):
        data = archive.extractfile(member).read()
        return PIL.Image.open(BytesIO(data))
    def _is_file_rgb(archive, member):
        """ Check whether archive member is a file.
        In case `drop_grayscale` set to `True` it verifies that the member is the RGB mode image as well.
        """
        if (member.name.find('csv') != -1) or (member.name.find('.DS_Store') != -1):
            return False
        if not self.drop_grayscale:
            return member.isfile()
        return member.isfile() and _extract(archive, member).mode == 'RGB'
    def _gather_extracted(archive, files):
        images = self.create_array([_extract(archive, file) for file in files])
        labels = np.array([_image_class(file.name) for file in files])
        _, labels_encoded = np.unique(labels, return_inverse=True)
        return images, labels_encoded
    if path is None:
        path = tempfile.gettempdir()
    filename = os.path.basename(self.SOURCE_URL)
    localname = os.path.join(path, filename)
    if not os.path.isfile(localname):
        logger.info("Downloading %s", filename)
        urllib.request.urlretrieve(self.SOURCE_URL, localname)
        logger.info("Downloaded %s", filename)
        if self.bar:
            self.bar.update(1)
    logger.info("Extracting...")
    with tarfile.open(localname, "r:gz") as archive:
        files_in_archive = archive.getmembers()
        train_files = [file for file in files_in_archive if _is_file_rgb(archive, file) and _is_train(file.name)]
        train_data = _gather_extracted(archive, train_files)
        test_files = [file for file in files_in_archive if _is_file_rgb(archive, file) and not _is_train(file.name)]
        test_data = _gather_extracted(archive, test_files)
    logger.info("Extracted")
    if self.bar:
        self.bar.update(1)
    images = np.concatenate([train_data[0], test_data[0]])
    labels = np.concatenate([train_data[1], test_data[1]])
    preloaded = images, labels
    train_len, test_len = len(train_data[0]), len(test_data[0])
    index, train_index, test_index = self._infer_train_test_index(train_len, test_len)
    return preloaded, index, train_index, test_index