
    kh>                         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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y)    N)path)Path)AnyCallablecast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dZdd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edf   f      eeedf      f   fd'Zd0d(Zd0d)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 )1	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``, ``test``.
        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valtestz+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places365_test.txt 2fce8233fe493576d724142e45d93653)z!train_large_places365standard.tar 67e186b496a84c929568076ed01a8aa1)z"train_large_places365challenge.tar 605f18e68e510c82b958664ea134545f)zval_large.tar 9b71c4993ad89d2d8bcbdc4aef38042f)ztest_large.tar 41a4b6b724b1d2cd862fb3871ed59913)ztrain_256_places365standard.tar 53ca1c756c3d1e7809517cc47c5561c5)z train_256_places365challenge.tar 741915038a5e3471ec7332404dfb64ef)zval_256.tar e27b17d8d44f4af9a78502beb927f808)ztest_256.tar f532f6ad7b582262a2ec8009075e186b))r   F)r   F)r   F)r   F)r   T)r   T)r   T)r   Tr   FNrootsplitsmalldownload	transformtarget_transformloaderreturnc                    t         |   |||       | j                  |      | _        || _        || _        | j                  |      \  | _        | _        | j                  |      \  | _
        | _        |r| j                          y y )N)r/   r0   )super__init___verify_splitr,   r-   r1   load_categoriesclassesclass_to_idxload_file_listimgstargetsdownload_images)	selfr+   r,   r-   r.   r/   r0   r1   	__class__s	           Z/var/www/teggl/fontify/venv/lib/python3.12/site-packages/torchvision/datasets/places365.pyr5   zPlaces365.__init__D   s     	EUV''.

*.*>*>x*H'd'"&"5"5h"?	4<  "     indexc                     | j                   |   \  }}| j                  |      }| j                  | j                  ||      \  }}||fS N)r;   r1   
transforms)r>   rB   filetargetimages        r@   __getitem__zPlaces365.__getitem__Z   sJ    yy'fD!??& OOE6:ME6f}rA   c                 ,    t        | j                        S rD   )lenr;   r>   s    r@   __len__zPlaces365.__len__c   s    499~rA   c                 &    d| j                   v rdS dS )Nr   r   )r,   rL   s    r@   variantzPlaces365.variantf   s    )TZZ7{GZGrA   c                     | j                   rdnd}| j                  j                  d      rd| d| j                   }n| j                   d| }t	        j
                  | j                  |      S )N256largetraindata__)r-   r,   
startswithrO   r   joinr+   )r>   sizedirs      r@   
images_dirzPlaces365.images_dirj   s`    

u::  )$q/CZZL$(CyyC((rA   c                    dt         dt        t         t        f   fd| j                  \  }}t	        j
                  | j                  |      }| j                  |||      s| j                          t        |      5 }t        fd|D              }d d d        t        j                               |fS # 1 sw Y   $xY w)Nliner2   c                 B    | j                         \  }}|t        |      fS rD   )r,   int)r\   clsidxs      r@   processz*Places365.load_categories.<locals>.processt   s    zz|HCC= rA   c              3   .   K   | ]  } |        y wrD    ).0r\   ra   s     r@   	<genexpr>z,Places365.load_categories.<locals>.<genexpr>~   s     =$=s   )strr   r^   _CATEGORIES_METAr   rW   r+   _check_integritydownload_devkitopendictsortedkeys)r>   r.   rF   md5fhr9   ra   s         @r@   r7   zPlaces365.load_categoriess   s    	!# 	!%S/ 	! ))	cyyD)$$T39  "$Z 	>2="==L	> l'')*L88	> 	>s   <B44B=c           	          ddt         dt        t         t        t        d f   f   f fd} j                   j
                     \  }}t        j                   j                  |      } j                  |||      s j                          t        |      5 }|D cg c]
  } ||       }}d d d        t         \  }}	|t        |	      fS c c}w # 1 sw Y   &xY w)Nr\   r2   c                    | j                         d gz   d d \  }}t        t        |      }|t        |      nd }t	        j
                  j                  |j                  |      j                  |t        j                              |fS )N   )r,   r   rf   r^   r   rW   rZ   lstripreplaceossep)r\   rv   rH   r`   r>   s       r@   ra   z)Places365.load_file_list.<locals>.process   sp    **,$/!4JE3e$E!o#c(4C99T__ell3.?.G.GRVV.TUWZZZrA   )/)rf   r   r   r^   _FILE_LIST_METAr,   r   rW   r+   rh   ri   rj   ziplist)
r>   r.   ra   rF   rn   ro   r\   imagesrU   r<   s
   `         r@   r:   zPlaces365.load_file_list   s    	[# 	[5eCI6F1F+G 	[ ((4	cyyD)$$T39  "$Z 	42023gdm3F3	4 &\
7tG}$$ 4	4 	4s   CC)CCCc                     | j                   | j                     \  }}t        t        | j                  |      | j
                  |       y )Nrn   )_DEVKIT_METArO   r   r   	_BASE_URLr+   r>   rF   rn   s      r@   ri   zPlaces365.download_devkit   s6    %%dll3	c$WT^^T%BDIISVWrA   c                    t        j                  | j                        ry | j                  | j                  | j
                  f   \  }}t        t        | j                  |      | j                  |       | j                  j                  d      r>t        j                  | j                  j                  dd      d   | j                         y y )Nr}   rS   rU   r   r   )r   existsrZ   _IMAGES_METAr,   r-   r   r   r   r+   rV   ru   renamersplitr   s      r@   r=   zPlaces365.download_images   s    ;;t'%%tzz4::&>?	c$WT^^T%BDIISVW::  )IIdoo,,S!4Q7I *rA   c                 X     dj                  d      j                  di | j                  S )N
)zSplit: {split}zSmall: {small}rc   )rW   format__dict__rL   s    r@   
extra_reprzPlaces365.extra_repr   s&    Etyy=>EEVVVrA   c                 0    t        |d| j                        S )Nr,   )r   _SPLITS)r>   r,   s     r@   r6   zPlaces365._verify_split   s    eWdll;;rA   rF   rn   c                 F    t        ||      }|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   RuntimeError)r>   rF   rn   r.   	integritys        r@   rh   zPlaces365._check_integrity   s5    #Dc2	D6!kl  rA   )T)r2   N)$__name__
__module____qualname____doc__r   r   r~   rg   rx   r   r   r   rf   r   boolr
   r   r   r5   r^   r   rI   rM   propertyrO   rZ   r	   r   r7   r:   ri   r=   r   r6   rh   __classcell__)r?   s   @r@   r   r      s   6 CG=I \]L
 X _`HJ	O $m$nMO"i#kJL	L &(,/3'5#CI# # 	#
 # H%# #8,# #$# 
#, sCx   H H H )C ) )9 9d3icSVh>W8X 9   $%%	tE#uS$Y//014c4i8H3II	J%(XJWC W<3 <3 <S s d t rA   r   )ru   r   pathlibr   typingr   r   r   r   r	   r
   r   r   urllib.parser   folderr   utilsr   r   r   visionr   r   rc   rA   r@   <module>r      s4    	   J J J   " P P !d drA   