§
    ù²ÅjÜ  ã                   ó†   — d dl Z d dl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 ddlmZ  G d„ d	e¦  «        ZdS )
é    N)ÚAnyÚCallableÚListÚOptionalÚTupleÚUnion)Úurlparse)ÚImageé   )Údownload_and_extract_archiveÚverify_str_arg)ÚVisionDatasetc                   óÌ   ‡ — e Zd ZdZdZdZ	 	 	 	 ddeeej	        f         ded	e
e         d
e
e         deddfˆ fd„Zdefd„Zdedeeef         fd„Zdefd„Zdd„Zdefd„Zˆ xZS )ÚCLEVRClassificationa€  `CLEVR <https://cs.stanford.edu/people/jcjohns/clevr/>`_  classification dataset.

    The number of objects in a scene are used as label.

    Args:
        root (str or ``pathlib.Path``): Root directory of dataset where directory ``root/clevr`` exists or will be saved to if download is
            set to True.
        split (string, optional): The dataset split, supports ``"train"`` (default), ``"val"``, or ``"test"``.
        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 them 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.
    z3https://dl.fbaipublicfiles.com/clevr/CLEVR_v1.0.zipÚ b11922020e72d0cd9154779b2d3d07d2ÚtrainNFÚrootÚsplitÚ	transformÚtarget_transformÚdownloadÚreturnc                 ó€  •‡— t          |dd¦  «        | _        t          ¦   «                              |||¬¦  «         t	          j        | j        ¦  «        dz  | _        | j        t	          j        t          | j	        ¦  «        j
        ¦  «        j        z  | _        |r|                      ¦   «          |                      ¦   «         st          d¦  «        ‚t!          | j                             d| j        ¦  «                             d¦  «        ¦  «        | _        |  | j        dk    r{t)          | j        d	z  d
| j        › d�z  ¦  «        5 }t+          j        |¦  «        }d d d ¦  «         n# 1 swxY w Y   d„ |d	         D ¦   «         Šˆfd„| j        D ¦   «         | _        d S d gt1          | j        ¦  «        z  | _        d S )Nr   )r   ÚvalÚtest)r   r   ÚclevrzHDataset not found or corrupted. You can use download=True to download itÚimagesÚ*r   ÚscenesÚCLEVR_z_scenes.jsonc                 óF   — i | ]}|d          t          |d         ¦  «        “ŒS )Úimage_filenameÚobjects)Úlen)Ú.0Úscenes     úKC:\Projects\Historical\venv\Lib\site-packages\torchvision/datasets/clevr.pyú
<dictcomp>z0CLEVRClassification.__init__.<locals>.<dictcomp>8   s-   € ÐiÐiÐiÈe˜5Ð!1Ô2µC¸¸iÔ8HÑ4IÔ4IÐiÐiÐió    c                 ó*   •— g | ]}‰|j                  ‘ŒS © )Úname)r%   Ú
image_fileÚnum_objectss     €r'   ú
<listcomp>z0CLEVRClassification.__init__.<locals>.<listcomp>9   s    ø€ Ð]Ð]Ð]¸Z˜K¨
¬Ô8Ð]Ð]Ð]r)   )r   Ú_splitÚsuperÚ__init__ÚpathlibÚPathr   Ú_base_folderr	   Ú_URLÚpathÚstemÚ_data_folderÚ	_downloadÚ_check_existsÚRuntimeErrorÚsortedÚjoinpathÚglobÚ_image_filesÚopenÚjsonÚloadÚ_labelsr$   )
Úselfr   r   r   r   r   ÚfileÚcontentr.   Ú	__class__s
           @€r'   r2   zCLEVRClassification.__init__   sâ  øø€ õ % U¨GÐ5MÑNÔNˆŒÝ‰Œ×Ò˜¨ÐEUÐÑVÔVÐVÝ#œL¨¬Ñ3Ô3°gÑ=ˆÔØ Ô-µ´½XÀdÄiÑ=PÔ=PÔ=UÑ0VÔ0VÔ0[Ñ[ˆÔàð 	Ø�NŠNÑÔÐà×!Ò!Ñ#Ô#ð 	kÝÐiÑjÔjÐjå" 4Ô#4×#=Ò#=¸hÈÌÑ#TÔ#T×#YÒ#YÐZ]Ñ#^Ô#^Ñ_Ô_ˆÔàÐ)ØŒ;˜&Ò Ð Ý�dÔ'¨(Ñ2Ð5W¸d¼kÐ5WÐ5WÐ5WÑWÑXÔXð *Ð\`Ýœ) D™/œ/�ð*ð *ð *ñ *ô *ð *ð *ð *ð *ð *ð *øøøð *ð *ð *ð *àiÐiÐW^Ð_gÔWhÐiÑiÔiˆKØ]Ð]Ð]Ð]È4ÔK\Ð]Ñ]Ô]ˆDŒLˆLˆLà ˜6¥C¨Ô(9Ñ$:Ô$:Ñ:ˆDŒLˆLˆLs   Å	E*Å*E.Å1E.c                 ó*   — t          | j        ¦  «        S ©N)r$   r@   ©rE   s    r'   Ú__len__zCLEVRClassification.__len__=   s   € Ý�4Ô$Ñ%Ô%Ð%r)   Úidxc                 óü   — | j         |         }| j        |         }t          j        |¦  «                             d¦  «        }| j        r|                      |¦  «        }| j        r|                      |¦  «        }||fS )NÚRGB)r@   rD   r
   rA   Úconvertr   r   )rE   rM   r-   ÚlabelÚimages        r'   Ú__getitem__zCLEVRClassification.__getitem__@   s{   € ØÔ& sÔ+ˆ
Ø”˜SÔ!ˆå”
˜:Ñ&Ô&×.Ò.¨uÑ5Ô5ˆàŒ>ð 	*Ø—N’N 5Ñ)Ô)ˆEàÔ ð 	1Ø×)Ò)¨%Ñ0Ô0ˆEà�eˆ|Ðr)   c                 óf   — | j                              ¦   «         o| j                              ¦   «         S rJ   )r9   ÚexistsÚis_dirrK   s    r'   r;   z!CLEVRClassification._check_existsN   s+   € ØÔ ×'Ò'Ñ)Ô)ÐH¨dÔ.?×.FÒ.FÑ.HÔ.HÐHr)   c                 óŽ   — |                       ¦   «         rd S t          | j        t          | j        ¦  «        | j        ¬¦  «         d S )N)Úmd5)r;   r   r6   Ústrr5   Ú_MD5rK   s    r'   r:   zCLEVRClassification._downloadQ   sE   € Ø×ÒÑÔð 	ØˆFå$ T¤Yµ°DÔ4EÑ0FÔ0FÈDÌIÐVÑVÔVÐVÐVÐVr)   c                 ó   — d| j         › �S )Nzsplit=)r0   rK   s    r'   Ú
extra_reprzCLEVRClassification.extra_reprW   s   € Ø%˜œÐ%Ð%Ð%r)   )r   NNF)r   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r6   rZ   r   rY   r3   r4   r   r   Úboolr2   ÚintrL   r   r   rS   r;   r:   r\   Ú__classcell__)rH   s   @r'   r   r      sO  ø€ € € € € ðð ð A€DØ-€Dð
 Ø(,Ø/3Øð;ð ;à�C˜œÐ%Ô&ð;ð ð;ð ˜HÔ%ð	;ð
 # 8Ô,ð;ð ð;ð 
ð;ð ;ð ;ð ;ð ;ð ;ð<&˜ð &ð &ð &ð &ð˜sð  u¨S°#¨X¤ð ð ð ð ðI˜tð Ið Ið Ið IðWð Wð Wð Wð&˜Cð &ð &ð &ð &ð &ð &ð &ð &r)   r   )rB   r3   Útypingr   r   r   r   r   r   Úurllib.parser	   ÚPILr
   Úutilsr   r   Úvisionr   r   r+   r)   r'   ú<module>ri      sÓ   ðØ €€€Ø €€€Ø >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ø !Ð !Ð !Ð !Ð !Ð !à Ð Ð Ð Ð Ð à ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ø !Ð !Ð !Ð !Ð !Ð !ðL&ð L&ð L&ð L&ð L&˜-ñ L&ô L&ð L&ð L&ð L&r)   