
    ڧg[                         d dl Z d dl mZ d dlmZ d dlmZ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e          ZdS )    N)path)Path)AnyCallableDictListOptionalTupleUnion)urljoin   )default_loader)check_integritydownload_and_extract_archiveverify_str_arg)VisionDatasetc                       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eef         dedededee         dee         deegef         ddf fdZdedeeef         fdZdefd Zedefd!            Zedefd"            Zd-dedeee         eeef         f         fd$Zd-dedeeeeef                  ee         f         fd%Zd.d&Zd.d'Zdefd(Z dedefd)Z!d*ed+ededefd,Z" xZ#S )/	Places365a  `Places365 <http://places2.csail.mit.edu/index.html>`_ classification dataset.

    Args:
        root (str or ``pathlib.Path``): 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 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.
        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.tar 35a0585fee1fa656440f3ab298f8479c)z filelist_places365-challenge.tar 70a8307e459c3de41690a7c76c931734)standard	challenge)zcategories_places365.txt 06c963b85866bd0649f97cb43dd16673)zplaces365_train_standard.txt 30f37515461640559006b8329efbed1a)zplaces365_train_challenge.txt b2931dc997b8c33c27e7329c073a6b57)zplaces365_val.txt e9f2fd57bfd9d07630173f4e8708e4b1)z!train_large_places365standard.tar 67e186b496a84c929568076ed01a8aa1)z"train_large_places365challenge.tar 605f18e68e510c82b958664ea134545f)zval_large.tar 9b71c4993ad89d2d8bcbdc4aef38042f)ztrain_256_places365standard.tar 53ca1c756c3d1e7809517cc47c5561c5)z train_256_places365challenge.tar 741915038a5e3471ec7332404dfb64ef)zval_256.tar e27b17d8d44f4af9a78502beb927f808))r   F)r   F)r   F)r   T)r   T)r   Tr   FNrootsplitsmalldownload	transformtarget_transformloaderreturnc                 X   t                                          |||           |                     |          | _        || _        || _        |                     |          \  | _        | _        | 	                    |          \  | _
        | _        |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__s	           Z/var/www/html/ai-engine/env/lib/python3.11/site-packages/torchvision/datasets/places365.pyr0   zPlaces365.__init__@   s     	EUVVV''..

*.*>*>x*H*H'd'"&"5"5h"?"?	4< 	#  """""	# 	#    indexc                     | j         |         \  }}|                     |          }| j        |                     ||          \  }}||fS N)r6   r,   
transforms)r9   r=   filetargetimages        r;   __getitem__zPlaces365.__getitem__V   sL    y'fD!!?& OOE6::ME6f}r<   c                 *    t          | j                  S r?   )lenr6   r9   s    r;   __len__zPlaces365.__len___   s    49~~r<   c                     d| j         v rdndS )Nr   r   )r'   rG   s    r;   variantzPlaces365.variantb   s    )TZ77{{ZGr<   c                     | j         rdnd}| j                            d          rd| d| j         }n| j         d| }t	          j        | j        |          S )N256largetraindata__)r(   r'   
startswithrJ   r   joinr&   )r9   sizedirs      r;   
images_dirzPlaces365.images_dirf   sl    
/uu:  )) 	)/$////CCZ(($((CyC(((r<   Tc                    dt           dt          t           t          f         fd| j        \  }}t	          j        | j        |          }|                     |||          s|                                  t          |          5 }t          fd|D                       }d d d            n# 1 swxY w Y   t          |                                          |fS )Nliner-   c                 R    |                                  \  }}|t          |          fS r?   )r'   int)rW   clsidxs      r;   processz*Places365.load_categories.<locals>.processp   s#    zz||HCC= r<   c              3   .   K   | ]} |          V  d S r?    .0rW   r\   s     r;   	<genexpr>z,Places365.load_categories.<locals>.<genexpr>z   s+      ==$======r<   )strr
   rY   _CATEGORIES_METAr   rR   r&   _check_integritydownload_devkitopendictsortedkeys)r9   r)   rA   md5fhr4   r\   s         @r;   r2   zPlaces365.load_categorieso   s   	!# 	!%S/ 	! 	! 	! 	! )	cyD))$$T399 	#  """$ZZ 	>2===="=====L	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> l''))**L88s   B,,B03B0c                     ddt           dt          t           t          f         f fd j         j                 \  }}t          j         j        |          }                     |||          s 	                                 t          |          5 }fd|D             }d d d            n# 1 swxY w Y   t          | \  }}|t          |          fS )N/rW   r-   c                     |                                  \  }}t          j        j        |                    |                              |t          j                            t          |          fS r?   )	r'   r   rR   rU   lstripreplaceosseprY   )rW   rr   rC   r[   r9   s       r;   r\   z)Places365.load_file_list.<locals>.process   sU    JE39T_ell3.?.?.G.GRV.T.TUUWZ[^W_W___r<   c                 &    g | ]} |          S r^   r^   r_   s     r;   
<listcomp>z,Places365.load_file_list.<locals>.<listcomp>   s!    333ggdmm333r<   )rm   )rb   r
   rY   _FILE_LIST_METAr'   r   rR   r&   rd   re   rf   ziplist)	r9   r)   rA   rj   rk   imagesrP   r7   r\   s	   `       @r;   r5   zPlaces365.load_file_list~   s1   	` 	`# 	`5c? 	` 	` 	` 	` 	` 	` (4	cyD))$$T399 	#  """$ZZ 	423333333F	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 &\
7tG}}$$s   B..B25B2c                     | j         | j                 \  }}t          t          | j        |          | j        |           d S )Nrj   )_DEVKIT_METArJ   r   r   	_BASE_URLr&   r9   rA   rj   s      r;   re   zPlaces365.download_devkit   s?    %dl3	c$WT^T%B%BDISVWWWWWWr<   c                    t          j        | j                  rt          d| j         d          | j        | j        | j        f         \  }}t          t          | j	        |          | j
        |           | j                            d          r;t          j        | 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.rz   rN   rP   r   r   )r   existsrU   RuntimeError_IMAGES_METAr'   r(   r   r   r|   r&   rQ   rq   renamersplitr}   s      r;   r8   zPlaces365.download_images   s    ;t'' 	) ) ) )  
 %tz4:&>?	c$WT^T%B%BDISVWWWW:  )) 	JIdo,,S!44Q7IIIII	J 	Jr<   c                 L     d                     d          j        di | j        S )N
)zSplit: {split}zSmall: {small}r^   )rR   format__dict__rG   s    r;   
extra_reprzPlaces365.extra_repr   s*    Etyy=>>EVVVVVr<   c                 .    t          |d| j                  S )Nr'   )r   _SPLITS)r9   r'   s     r;   r1   zPlaces365._verify_split   s    eWdl;;;r<   rA   rj   c                 V    t          ||          }|s|st          d| d          |S )Nrz   z	The file zJ does not exist or is corrupted. You can set download=True to download it.)r   r   )r9   rA   rj   r)   	integritys        r;   rd   zPlaces365._check_integrity   sK    #Dc222	 	 	lDlll   r<   )T)r-   N)$__name__
__module____qualname____doc__r   r|   r{   rc   ru   r   r   r   rb   r   boolr	   r   r   r0   rY   r
   rD   rH   propertyrJ   rU   r   r   r2   r5   re   r8   r   r1   rd   __classcell__)r:   s   @r;   r   r      s        4 ;G=I \] L
 X _`H O $m$nM"i#kJ L &(,/3'5# #CI# # 	#
 # H%# #8,# #$# 
# # # # # #, sCx         H H H H XH )C ) ) ) X)9 9 9d3icSVh>W8X 9 9 9 9% %t %uT%S/=RTXY\T]=]7^ % % % % X X X XJ J J JWC W W W W<3 <3 < < < <S s d t        r<   r   )rq   r   pathlibr   typingr   r   r   r   r	   r
   r   urllib.parser   folderr   utilsr   r   r   visionr   r   r^   r<   r;   <module>r      s    				             D D D D D D D D D D D D D D D D D D             " " " " " " P P P P P P P P P P ! ! ! ! ! !_ _ _ _ _ _ _ _ _ _r<   