o
    `)i>                     @   s   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 deZdS )    N)path)Path)AnyCallablecastDictListOptionalTupleUnion)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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 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d<dedeee eeef f fd,d-Z	+d<dedeeeeeedf f  eeedf  f fd.d/Zd=d0d1Zd=d2d3Zdefd4d5Z dedefd6d7Z!d8ed9ededefd:d;Z"  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``, ``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.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places365_test.txtZ 2fce8233fe493576d724142e45d93653)z!train_large_places365standard.tarZ 67e186b496a84c929568076ed01a8aa1)z"train_large_places365challenge.tarZ 605f18e68e510c82b958664ea134545f)zval_large.tarZ 9b71c4993ad89d2d8bcbdc4aef38042f)ztest_large.tarZ 41a4b6b724b1d2cd862fb3871ed59913)ztrain_256_places365standard.tarZ 53ca1c756c3d1e7809517cc47c5561c5)z train_256_places365challenge.tarZ 741915038a5e3471ec7332404dfb64ef)zval_256.tarZ e27b17d8d44f4af9a78502beb927f808)ztest_256.tarZ 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                    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__ j/home/app/PaddleOCR-VL-test/.venv_paddleocr/lib/python3.10/site-packages/torchvision/datasets/places365.pyr#   D   s   
zPlaces365.__init__indexc                 C   s:   | j | \}}| |}| jd ur| ||\}}||fS N)r)   r    Z
transforms)r,   r1   filetargetimager/   r/   r0   __getitem__Z   s
   

zPlaces365.__getitem__c                 C   s
   t | jS r2   )lenr)   r,   r/   r/   r0   __len__c   s   
zPlaces365.__len__c                 C   s   d| j v rdS dS )Nr   r   )r   r8   r/   r/   r0   variantf   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   
startswithr:   r   joinr   )r,   sizedirr/   r/   r0   
images_dirj   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 r2   )r   int)rC   clsidxr/   r/   r0   processt   s   z*Places365.load_categories.<locals>.processc                 3   s    | ]} |V  qd S r2   r/   .0rC   rG   r/   r0   	<genexpr>~   s    z,Places365.load_categories.<locals>.<genexpr>)strr
   rD   _CATEGORIES_METAr   r?   r   _check_integritydownload_devkitopendictsortedkeys)r,   r   r3   md5fhr'   r/   rJ   r0   r%   s   s   

zPlaces365.load_categoriesc              	      s   ddt dtt ttd f f ffdd jj \}}tj|}	|||s.
  t|} fdd|D }W d    n1 sFw   Y  t| \}}|t|fS )	N/rC   r!   c                    sZ   |   d g d d \}}tt|}|d urt|nd }t j|||t	j
|fS )N   )r   r   rL   rD   r   r?   rB   lstripreplaceossep)rC   r[   r5   rF   r8   r/   r0   rG      s   
"z)Places365.load_file_list.<locals>.processc                    s   g | ]} |qS r/   r/   rH   rJ   r/   r0   
<listcomp>   s    z,Places365.load_file_list.<locals>.<listcomp>)rV   )rL   r
   r   rD   _FILE_LIST_METAr   r   r?   r   rN   rO   rP   ziplist)r,   r   r3   rT   rU   Zimagesr=   r*   r/   )rG   r,   r0   r(      s   (
zPlaces365.load_file_listc                 C   s,   | j | j \}}tt| j|| j|d d S )NrT   )_DEVKIT_METAr:   r   r   	_BASE_URLr   r,   r3   rT   r/   r/   r0   rO      s   zPlaces365.download_devkitc                 C   sn   t | jrd S | j| j| jf \}}tt| j|| j	|d | j
dr5t| jddd | j d S d S )Nr`   r<   r=   r   r   )r   existsrB   _IMAGES_METAr   r   r   r   rb   r   r>   rZ   renamersplitrc   r/   r/   r0   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__r8   r/   r/   r0   
extra_repr   s   zPlaces365.extra_reprc                 C   s   t |d| jS )Nr   )r   _SPLITS)r,   r   r/   r/   r0   r$      s   zPlaces365._verify_splitr3   rT   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   RuntimeError)r,   r3   rT   r   Z	integrityr/   r/   r0   rN      s   
zPlaces365._check_integrity)T)r!   N)$__name__
__module____qualname____doc__rl   rb   ra   rM   r]   re   r   r   rL   r   boolr	   r   r   r#   rD   r
   r6   r9   propertyr:   rB   r   r   r%   r(   rO   r+   rk   r$   rN   __classcell__r/   r/   r-   r0   r      s~    
		(*



"r   )rZ   r   pathlibr   typingr   r   r   r   r   r	   r
   r   urllib.parser   folderr   utilsr   r   r   Zvisionr   r   r/   r/   r/   r0   <module>   s    (