'Args:
name (str): \'train\', \'test\', or \'extra\'.
data_dir (str): a directory containing the original {train,test,extra}_32x32.mat.
shuffle (bool): shuffle the dataset.'

def __init__(self, name, data_dir=None, shuffle=True):

    self.shuffle = shuffle
    if (name in SVHNDigit._Cache):
        (self.X, self.Y) = SVHNDigit._Cache[name]
        return
    if (data_dir is None):
        data_dir = get_dataset_path('svhn_data')
    assert (name in ['train', 'test', 'extra']), name
    filename = os.path.join(data_dir, (name + '_32x32.mat'))
    if (not os.path.isfile(filename)):
        url = (SVHN_URL + os.path.basename(filename))
        logger.info('File    {}    not    found!'.format(filename))
        logger.info('Downloading    from    {}.'.format(url))
        download(url, os.path.dirname(filename))
    logger.info('Loading    {}    ...'.format(filename))
    data = scipy.io.loadmat(filename)
    self.X = data['X'].transpose(3, 0, 1, 2)
    self.Y = data['y'].reshape((-1))
    self.Y[(self.Y == 10)] = 0
    SVHNDigit._Cache[name] = (self.X, self.Y)
