o
    V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.deeef dedee dee deddf fdd Zd/d!d"Zd#edeeef fd$d%Zdefd&d'Zdefd(d)Zd/d*d+Zdefd,d-Z  ZS )0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.gz c58f30108f718f92721af3b95e74349adata_batch_1 c99cafc152244af753f735de768cd75fdata_batch_2 d4bba439e000b95fd0a9bffe97cbabecdata_batch_3 54ebc095f3ab1f0389bbae665268c751data_batch_4 634d18415352ddfa80567beed471001adata_batch_5 482c414d41f54cd18b22e5b47cb7c3cb
test_batch 40351d587109b95175f43aff81a1287ezbatches.metalabel_names 5ff9c542aee3614f3951f8cda6e48888filenamekeymd5TNFroottrain	transformtarget_transformdownloadreturnc              	      s  t  j|||d || _|r|   |  std| jr!| j}n| j}g | _g | _	|D ]G\}}t
j| j| j|}	t|	d,}
tj|
dd}| j|d  d|v r\| j	|d  n| j	|d  W d    n1 snw   Y  q,t| 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labels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npvstackreshape	transpose
_load_meta)selfr!   r"   r#   r$   r%   downloaded_list	file_namechecksum	file_pathfentry	__class__ N/var/www/vscode/kcb/lib/python3.10/site-packages/torchvision/datasets/cifar.pyr3   4   s2   	zCIFAR10.__init__c                 C   s   t j| j| j| jd }t|| jd stdt|d}t	j
|dd}|| jd  | _W d    n1 s8w   Y  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 rP   rP   ).0i_classrP   rP   rQ   
<dictcomp>f   s    z&CIFAR10._load_meta.<locals>.<dictcomp>)r9   r:   r;   r!   r<   metar
   r5   r=   r>   r?   classes	enumerateclass_to_idx)rG   r:   infiler+   rP   rP   rQ   rF   _   s   zCIFAR10._load_metaindexc                 C   sP   | j | | j| }}t|}| jdur| |}| jdur$| |}||fS )z
        Args:
            index (int): Index

        Returns:
            tuple: (image, target) where target is index of the target class.
        N)r+   r8   r   	fromarrayr#   r$   )rG   r[   imgtargetrP   rP   rQ   __getitem__h   s   




zCIFAR10.__getitem__c                 C   s
   t | jS )N)lenr+   rG   rP   rP   rQ   __len__~   s   
zCIFAR10.__len__c                 C   s>   | j | j D ]\}}tj| j| j|}t||s dS qdS )NFT)r6   r7   r9   r:   r;   r!   r<   r
   )rG   r   r    fpathrP   rP   rQ   r4      s   
zCIFAR10._check_integrityc                 C   s(   |   rd S t| j| j| j| jd d S )N)r   r    )r4   r   urlr!   r   tgz_md5ra   rP   rP   rQ   r%      s   zCIFAR10.downloadc                 C   s   | j du rdnd}d| S )NTTrainTestzSplit: )r"   )rG   splitrP   rP   rQ   
extra_repr   s   
zCIFAR10.extra_repr)TNNF)r&   N)__name__
__module____qualname____doc__r<   rd   r   re   r6   r7   rV   r   strr   boolr   r   r3   rF   intr   r   r_   rb   r4   r%   ri   __classcell__rP   rP   rN   rQ   r      sR    		

+	
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.gz eb9058c3a382ffc7106e4002c42a8d85r"    16019d7e3df5f24257cddd939b257f8dtest f0ef6b0ae62326f3e7ffdfab6717acfcrV   fine_label_names 7973b15100ade9c7d40fb424638fde48r   N)rj   rk   rl   rm   r<   rd   r   re   r6   r7   rV   rP   rP   rP   rQ   rr      s    
rr   )os.pathr9   r>   pathlibr   typingr   r   r   r   r   numpyrB   PILr   utilsr
   r   visionr   r   rr   rP   rP   rP   rQ   <module>   s     