Ë
    Dêñi  ã                   óv   — d dl Z d dlZd dl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y)
é    N)ÚAnyÚCallableÚOptionalÚUnion)Úurlparseé   )Údefault_loader)Údownload_and_extract_archiveÚverify_str_arg)ÚVisionDatasetc                   óî   ‡ — e Zd ZdZdZdZddddefdeee	j                  f   ded	ee   d
ee   dedeeee	j                  f   gef   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 or torch.Tensor, depends on the given loader,
            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.
        loader (callable, optional): A function to load an image given its path.
            By default, it uses PIL as its image loader, but users could also pass in
            ``torchvision.io.decode_image`` for decoding image data into tensors directly.
    z3https://dl.fbaipublicfiles.com/clevr/CLEVR_v1.0.zipÚ b11922020e72d0cd9154779b2d3d07d2ÚtrainNFÚrootÚsplitÚ	transformÚtarget_transformÚdownloadÚloaderÚreturnc                 óÜ  •— t        |dd«      | _        t        ‰| �  |||¬«       || _        t        j                  | j                  «      dz  | _        | j                  t        j                  t        | j                  «      j                  «      j                  z  | _        |r| j                  «        | j                  «       st!        d«      ‚t#        | j                  j%                  d| j                  «      j'                  d«      «      | _        |  | j                  dk7  r–t+        | j                  d	z  d
| j                  › d�z  «      5 }t-        j.                  |«      }d d d «       d	   D �	ci c]  }	|	d   t1        |	d   «      “Œ }
}	| j(                  D �cg c]  }|
|j2                     ‘Œ c}| _        y d gt1        | j(                  «      z  | _        y # 1 sw Y   ŒwxY wc c}	w c c}w )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.jsonÚimage_filenameÚobjects)r   Ú_splitÚsuperÚ__init__r   ÚpathlibÚPathr   Ú_base_folderr   Ú_URLÚpathÚstemÚ_data_folderÚ	_downloadÚ_check_existsÚRuntimeErrorÚsortedÚjoinpathÚglobÚ_image_filesÚopenÚjsonÚloadÚlenÚnameÚ_labels)Úselfr   r   r   r   r   r   ÚfileÚcontentÚsceneÚnum_objectsÚ
image_fileÚ	__class__s               €ú\/var/www/pod-logistic/pod-ai/venv/lib/python3.12/site-packages/torchvision/datasets/clevr.pyr$   zCLEVRClassification.__init__"   s˜  ø€ ô % U¨GÐ5MÓNˆŒÜ‰Ñ˜¨ÐEUÐÔVØˆŒÜ#ŸL™L¨¯©Ó3°gÑ=ˆÔØ ×-Ñ-´·±¼XÀdÇiÁiÓ=P×=UÑ=UÓ0V×0[Ñ0[Ñ[ˆÔáØ�N‰NÔà×!Ñ!Ô#ÜÐiÓjÐjä" 4×#4Ñ#4×#=Ñ#=¸hÈÏÉÓ#T×#YÑ#YÐZ]Ó#^Ó_ˆÔáØ�;‰;˜&Ò Ü�d×'Ñ'¨(Ñ2°v¸d¿k¹k¸]È,Ð5WÑWÓXð *Ð\`ÜŸ)™) D›/�÷*àW^Ð_gÑWhÖiÈe˜5Ð!1Ñ2´C¸¸iÑ8HÓ4IÑIÐiˆKÐiØKO×K\ÑK\Ö]¸Z˜K¨
¯©Ó8Ò]ˆD�Là ˜6¤C¨×(9Ñ(9Ó$:Ñ:ˆD�L÷*ð *üâiùÚ]s   ÅGÅ1G$ÆG)ÇG!c                 ó,   — t        | j                  «      S ©N)r6   r2   ©r9   s    r@   Ú__len__zCLEVRClassification.__len__B   s   € Ü�4×$Ñ$Ó%Ð%ó    Úidxc                 óÜ   — | j                   |   }| j                  |   }| j                  |«      }| j                  r| j                  |«      }| j                  r| j	                  |«      }||fS rB   )r2   r8   r   r   r   )r9   rF   r>   ÚlabelÚimages        r@   Ú__getitem__zCLEVRClassification.__getitem__E   sf   € Ø×&Ñ& sÑ+ˆ
Ø—‘˜SÑ!ˆà—‘˜JÓ'ˆà�>Š>Ø—N‘N 5Ó)ˆEà× Ò Ø×)Ñ)¨%Ó0ˆEà�eˆ|ÐrE   c                 ón   — | j                   j                  «       xr | j                   j                  «       S rB   )r+   ÚexistsÚis_dirrC   s    r@   r-   z!CLEVRClassification._check_existsS   s+   € Ø× Ñ ×'Ñ'Ó)ÒH¨d×.?Ñ.?×.FÑ.FÓ.HÐHrE   c                 ó�   — | j                  «       ry t        | j                  t        | j                  «      | j
                  ¬«       y )N)Úmd5)r-   r
   r(   Ústrr'   Ú_MD5rC   s    r@   r,   zCLEVRClassification._downloadV   s0   € Ø×ÑÔØä$ T§Y¡Y´°D×4EÑ4EÓ0FÈDÏIÉIÖVrE   c                 ó    — d| j                   › �S )Nzsplit=)r"   rC   s    r@   Ú
extra_reprzCLEVRClassification.extra_repr\   s   € Ø˜Ÿ™�}Ð%Ð%rE   )r   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r(   rQ   r	   r   rP   r%   r&   r   r   Úboolr   r$   ÚintrD   ÚtuplerJ   r-   r,   rS   Ú__classcell__)r?   s   @r@   r   r      sê   ø„ ñð$ A€DØ-€Dð
 Ø(,Ø/3ØØ<Jñ;à�C˜Ÿ™Ð%Ñ&ð;ð ð;ð ˜HÑ%ð	;ð
 # 8Ñ,ð;ð ð;ð ˜%  W§\¡\Ð 1Ñ2Ð3°SÐ8Ñ9ð;ð 
õ;ð@&˜ó &ð˜sð  u¨S°#¨X¡ó ðI˜tó IóWð&˜C÷ &rE   r   )r4   r%   Útypingr   r   r   r   Úurllib.parser   Úfolderr	   Úutilsr
   r   Úvisionr   r   © rE   r@   ú<module>rb      s+   ðÛ Û ß 1Ó 1Ý !å "ç ?Ý !ôQ&˜-õ Q&rE   