o
    )i                     @   s   d dl Z d dl mZ d dlmZmZmZmZmZmZ d dl	m
Z
 ddlmZ ddlmZmZmZ ddlmZ G d	d
 d
eZdS )    N)path)AnyCallableDictListOptionalTuple)urljoin   )default_loader)check_integritydownload_and_extract_archiveverify_str_arg)VisionDatasetc                       s  e Zd ZdZdZdZdddZdZdd	d
dZdddddddZ	ddddde
fdededededee dee deegef ddf fddZdedeeef fd d!Zdefd"d#Zedefd$d%Zedefd&d'Zd9dedeee eeef f fd)d*Zd9dedeeeeef  ee f fd+d,Zd:d-d.Zd:d/d0Zdefd1d2Zdedefd3d4Zd5ed6ededefd7d8Z   Z!S );	Places365a  `Places365 <http://places2.csail.mit.edu/index.html>`_ classification dataset.

    Args:
        root (string): Root directory of the Places365 dataset.
        split (string, optional): The dataset split. Can be one of ``train-standard`` (default), ``train-challenge``,
            ``val``.
        small (bool, optional): If ``True``, uses the small images, i.e. resized to 256 x 256 pixels, instead of the
            high resolution ones.
        download (bool, optional): If ``True``, downloads the dataset components and places them in ``root``. Already
            downloaded archives are not downloaded again.
        transform (callable, optional): A function/transform that  takes in an 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.
        loader (callable, optional): A function to load an image given its path.

     Attributes:
        classes (list): List of the class names.
        class_to_idx (dict): Dict with items (class_name, class_index).
        imgs (list): List of (image path, class_index) tuples
        targets (list): The class_index value for each image in the dataset

    Raises:
        RuntimeError: If ``download is False`` and the meta files, i.e. the devkit, are not present or corrupted.
        RuntimeError: If ``download is True`` and the image archive is already extracted.
    )train-standardtrain-challengevalz+http://data.csail.mit.edu/places/places365/)zfilelist_places365-standard.tarZ 35a0585fee1fa656440f3ab298f8479c)z filelist_places365-challenge.tarZ 70a8307e459c3de41690a7c76c931734)standard	challenge)zcategories_places365.txtZ 06c963b85866bd0649f97cb43dd16673)zplaces365_train_standard.txtZ 30f37515461640559006b8329efbed1a)zplaces365_train_challenge.txtZ b2931dc997b8c33c27e7329c073a6b57)zplaces365_val.txtZ e9f2fd57bfd9d07630173f4e8708e4b1)z!train_large_places365standard.tarZ 67e186b496a84c929568076ed01a8aa1)z"train_large_places365challenge.tarZ 605f18e68e510c82b958664ea134545f)zval_large.tarZ 9b71c4993ad89d2d8bcbdc4aef38042f)ztrain_256_places365standard.tarZ 53ca1c756c3d1e7809517cc47c5561c5)z train_256_places365challenge.tarZ 741915038a5e3471ec7332404dfb64ef)zval_256.tarZ e27b17d8d44f4af9a78502beb927f808))r   F)r   F)r   F)r   T)r   T)r   Tr   FNrootsplitsmalldownload	transformtarget_transformloaderreturnc                    sb   t  j|||d | || _|| _|| _| |\| _| _| 	|\| _
| _|r/|   d S d S )N)r   r   )super__init___verify_splitr   r   r   load_categoriesclassesclass_to_idxload_file_listimgstargetsdownload_images)selfr   r   r   r   r   r   r   	__class__ m/var/www/html/eduruby.in/lip-sync/lip-sync-env/lib/python3.10/site-packages/torchvision/datasets/places365.pyr   ?   s   
zPlaces365.__init__indexc                 C   s:   | j | \}}| |}| jd ur| ||\}}||fS N)r%   r   Z
transforms)r(   r-   filetargetimager+   r+   r,   __getitem__U   s
   

zPlaces365.__getitem__c                 C   s
   t | jS r.   )lenr%   r(   r+   r+   r,   __len__^   s   
zPlaces365.__len__c                 C   s   d| j v rdS dS )Nr   r   )r   r4   r+   r+   r,   varianta   s   zPlaces365.variantc                 C   sL   | j rdnd}| jdrd| d| j }n| j d| }t| j|S )N256ZlargetrainZdata__)r   r   
startswithr6   r   joinr   )r(   sizedirr+   r+   r,   
images_dire   s
   zPlaces365.images_dirTc                    s   dt dtt tf fdd | j\}}t| j|}| |||s$|   t	|}t
 fdd|D }W d    n1 s>w   Y  t| |fS )Nliner   c                 S   s   |   \}}|t|fS r.   )r   int)r?   clsidxr+   r+   r,   processo   s   z*Places365.load_categories.<locals>.processc                 3   s    | ]} |V  qd S r.   r+   .0r?   rC   r+   r,   	<genexpr>y   s    z,Places365.load_categories.<locals>.<genexpr>)strr   r@   _CATEGORIES_METAr   r;   r   _check_integritydownload_devkitopendictsortedkeys)r(   r   r/   md5fhr#   r+   rF   r,   r!   n   s   

zPlaces365.load_categoriesc                    s   ddt dtt tf ffdd jj \}}tj|}|||s*	  t
|} fdd|D }W d    n1 sBw   Y  t| \}}|t|fS )	N/r?   r   c                    s2   |   \}}t j|||tjt|fS r.   )	r   r   r;   r>   lstripreplaceossepr@   )r?   rV   r1   rB   r4   r+   r,   rC   ~   s   &z)Places365.load_file_list.<locals>.processc                    s   g | ]} |qS r+   r+   rD   rF   r+   r,   
<listcomp>   s    z,Places365.load_file_list.<locals>.<listcomp>)rR   )rH   r   r@   _FILE_LIST_METAr   r   r;   r   rJ   rK   rL   ziplist)r(   r   r/   rP   rQ   Zimagesr9   r&   r+   )rC   r(   r,   r$   }   s    
zPlaces365.load_file_listc                 C   s,   | j | j \}}tt| j|| j|d d S )NrP   )_DEVKIT_METAr6   r   r	   	_BASE_URLr   r(   r/   rP   r+   r+   r,   rK      s   zPlaces365.download_devkitc                 C   s|   t | jrtd| j d| j| j| jf \}}tt| j	|| j
|d | jdr<t| jddd | j d S d S )NzThe directory z[ already exists. If you want to re-download or re-extract the images, delete the directory.r[   r8   r9   r
   r   )r   existsr>   RuntimeError_IMAGES_METAr   r   r   r	   r]   r   r:   rU   renamersplitr^   r+   r+   r,   r'      s    zPlaces365.download_imagesc                 C   s   d djdi | jS )N
)zSplit: {split}zSmall: {small}r+   )r;   format__dict__r4   r+   r+   r,   
extra_repr   s   zPlaces365.extra_reprc                 C   s   t |d| jS )Nr   )r   _SPLITS)r(   r   r+   r+   r,   r       s   zPlaces365._verify_splitr/   rP   c                 C   s(   t ||d}|s|std| d|S )Nr[   z	The file zJ does not exist or is corrupted. You can set download=True to download it.)r   r`   )r(   r/   rP   r   Z	integrityr+   r+   r,   rJ      s   
zPlaces365._check_integrity)T)r   N)"__name__
__module____qualname____doc__rh   r]   r\   rI   rX   ra   r   rH   boolr   r   r   r   r@   r   r2   r5   propertyr6   r>   r   r   r!   r$   rK   r'   rg   r    rJ   __classcell__r+   r+   r)   r,   r      sn    		(,

"r   )rU   r   typingr   r   r   r   r   r   urllib.parser	   folderr   utilsr   r   r   Zvisionr   r   r+   r+   r+   r,   <module>   s     