U
    h                     @   s   d dl Zd dlZd dlmZ d dlmZmZmZm	Z	m
Z
 d dlZd dlmZ ddlmZmZ ddlmZ G dd	 d	eZG d
d deZdS )    N)Path)AnyCallableOptionalTupleUnion)Image   )check_integritydownload_and_extract_archive)VisionDatasetc                       s   e Zd ZdZdZdZdZdZddgdd	gd
dgddgddggZddggZ	ddddZ
d*eeef eee ee edd fddZddddZeeeef dd d!Zedd"d#Zedd$d%Zddd&d'Zedd(d)Z  ZS )+CIFAR10ab  `CIFAR10 <https://www.cs.toronto.edu/~kriz/cifar.html>`_ Dataset.

    Args:
        root (str or ``pathlib.Path``): Root directory of dataset where directory
            ``cifar-10-batches-py`` exists or will be saved to if download is set to True.
        train (bool, optional): If True, creates dataset from training set, otherwise
            creates from test set.
        transform (callable, optional): A function/transform that takes in a PIL image
            and returns a transformed version. E.g, ``transforms.RandomCrop``
        target_transform (callable, optional): A function/transform that takes in the
            target and transforms it.
        download (bool, optional): If true, downloads the dataset from the internet and
            puts it in root directory. If dataset is already downloaded, it is not
            downloaded again.

    zcifar-10-batches-pyz7https://www.cs.toronto.edu/~kriz/cifar-10-python.tar.gzzcifar-10-python.tar.gzZ c58f30108f718f92721af3b95e74349aZdata_batch_1Z c99cafc152244af753f735de768cd75fZdata_batch_2Z d4bba439e000b95fd0a9bffe97cbabecZdata_batch_3Z 54ebc095f3ab1f0389bbae665268c751Zdata_batch_4Z 634d18415352ddfa80567beed471001aZdata_batch_5Z 482c414d41f54cd18b22e5b47cb7c3cbZ
test_batchZ 40351d587109b95175f43aff81a1287ezbatches.metaZlabel_namesZ 5ff9c542aee3614f3951f8cda6e48888filenamekeymd5TNF)roottrain	transformtarget_transformdownloadreturnc              
      s  t  j|||d || _|r$|   |  s4td| jrB| j}n| j}g | _g | _	|D ]z\}}t
j| j| j|}	t|	dN}
tj|
dd}| j|d  d|kr| j	|d  n| j	|d  W 5 Q R X qXt| jd	d
dd| _| jd| _|   d S )N)r   r   zHDataset not found or corrupted. You can use download=True to download itrblatin1encodingdatalabelsZfine_labels       )r      r   r	   )super__init__r   r   _check_integrityRuntimeError
train_list	test_listr   targetsospathjoinr   base_folderopenpickleloadappendextendnpZvstackZreshapeZ	transpose
_load_meta)selfr   r   r   r   r   Zdownloaded_list	file_nameZchecksum	file_pathfentry	__class__ L/var/www/html/venv/lib/python3.8/site-packages/torchvision/datasets/cifar.pyr#   4   s,    	zCIFAR10.__init__)r   c              	   C   s   t j| j| j| jd }t|| jd s2tdt|d$}t	j
|dd}|| jd  | _W 5 Q R X dd	 t| jD | _d S )
Nr   r   zVDataset metadata file not found or corrupted. You can use download=True to download itr   r   r   r   c                 S   s   i | ]\}}||qS r;   r;   ).0i_classr;   r;   r<   
<dictcomp>f   s      z&CIFAR10._load_meta.<locals>.<dictcomp>)r)   r*   r+   r   r,   metar
   r%   r-   r.   r/   classes	enumerateZclass_to_idx)r4   r*   infiler   r;   r;   r<   r3   _   s    zCIFAR10._load_meta)indexr   c                 C   sP   | j | | j|  }}t|}| jdk	r4| |}| jdk	rH| |}||fS )z
        Args:
            index (int): Index

        Returns:
            tuple: (image, target) where target is index of the target class.
        N)r   r(   r   Z	fromarrayr   r   )r4   rE   Zimgtargetr;   r;   r<   __getitem__h   s    




zCIFAR10.__getitem__c                 C   s
   t | jS )N)lenr   r4   r;   r;   r<   __len__~   s    zCIFAR10.__len__c                 C   s>   | j | j D ],\}}tj| j| j|}t||s dS qdS )NFT)r&   r'   r)   r*   r+   r   r,   r
   )r4   r   r   Zfpathr;   r;   r<   r$      s
    
zCIFAR10._check_integrityc                 C   s0   |   rtd d S t| j| j| j| jd d S )Nz%Files already downloaded and verified)r   r   )r$   printr   urlr   r   tgz_md5rI   r;   r;   r<   r      s    zCIFAR10.downloadc                 C   s   | j dkrdnd}d| S )NTZTrainZTestzSplit: )r   )r4   splitr;   r;   r<   
extra_repr   s    zCIFAR10.extra_repr)TNNF)__name__
__module____qualname____doc__r,   rL   r   rM   r&   r'   rA   r   strr   boolr   r   r#   r3   intr   r   rG   rJ   r$   r   rO   __classcell__r;   r;   r9   r<   r      sF   		    
+	r   c                   @   s@   e Zd ZdZdZdZdZdZddggZdd	ggZ	d
dddZ
dS )CIFAR100zy`CIFAR100 <https://www.cs.toronto.edu/~kriz/cifar.html>`_ Dataset.

    This is a subclass of the `CIFAR10` Dataset.
    zcifar-100-pythonz8https://www.cs.toronto.edu/~kriz/cifar-100-python.tar.gzzcifar-100-python.tar.gzZ eb9058c3a382ffc7106e4002c42a8d85r   Z 16019d7e3df5f24257cddd939b257f8dtestZ f0ef6b0ae62326f3e7ffdfab6717acfcrA   Zfine_label_namesZ 7973b15100ade9c7d40fb424638fde48r   N)rP   rQ   rR   rS   r,   rL   r   rM   r&   r'   rA   r;   r;   r;   r<   rX      s   rX   )os.pathr)   r.   pathlibr   typingr   r   r   r   r   numpyr2   ZPILr   utilsr
   r   Zvisionr   r   rX   r;   r;   r;   r<   <module>   s    