Ë
    Dêñiž  ã                   óf   — 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	m
Z
mZ ddlmZ  G d„ de«      Zy)	é    N)ÚAnyÚCallableÚOptionalÚUnion)ÚImageé   )Ú_decompressÚdownload_file_from_google_driveÚverify_str_arg)ÚVisionDatasetc                   óÄ   ‡ — e Zd ZdZdddœdddœdddœd	œZ	 	 	 	 dd
eeej                  f   dede	e
   de	e
   de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ˆ xZS )ÚPCAMaÀ  `PCAM Dataset   <https://github.com/basveeling/pcam>`_.

    The PatchCamelyon dataset is a binary classification dataset with 327,680
    color images (96px x 96px), extracted from histopathologic scans of lymph node
    sections. Each image is annotated with a binary label indicating presence of
    metastatic tissue.

    This dataset requires the ``h5py`` package which you can install with ``pip install h5py``.

    Args:
         root (str or ``pathlib.Path``): Root directory of the dataset.
         split (string, optional): The dataset split, supports ``"train"`` (default), ``"test"`` or ``"val"``.
         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.
         download (bool, optional): If True, downloads the dataset from the internet and puts it into ``root/pcam``. If
             dataset is already downloaded, it is not downloaded again.

             .. warning::

                To download the dataset `gdown <https://github.com/wkentaro/gdown>`_ is required.
    )z&camelyonpatch_level_2_split_train_x.h5z!1Ka0XfEMiwgCYPdTI-vv6eUElOBnKFKQ2Ú 1571f514728f59376b705fc836ff4b63)z&camelyonpatch_level_2_split_train_y.h5z!1269yhu3pZDP8UYFQs-NYs3FPwuK-nGSGÚ 35c2d7259d906cfc8143347bb8e05be7)ÚimagesÚtargets)z%camelyonpatch_level_2_split_test_x.h5Ú!1qV65ZqZvWzuIVthK8eVDhIwrbnsJdbg_Ú d8c2d60d490dbd479f8199bdfa0cf6ec)z%camelyonpatch_level_2_split_test_y.h5Ú!17BHrSrwWKjYsOgTMmoqrIjDy6Fa2o_gPÚ 60a7035772fbdb7f34eb86d4420cf66a)z&camelyonpatch_level_2_split_valid_x.h5z!1hgshYGWK8V-eGRy8LToWJJgDU_rXWVJ3Ú d5b63470df7cfa627aeec8b9dc0c066e)z&camelyonpatch_level_2_split_valid_y.h5z!1bH8ZRbhSVAhScTS0p9-ZzGnX91cHT3uOÚ 2b85f58b927af9964a4c15b8f7e8f179©ÚtrainÚtestÚvalÚrootÚsplitÚ	transformÚtarget_transformÚdownloadc                 ó>  •— 	 dd l }|| _         t        |dd«      | _        t
        ‰| �  |||¬«       t        j                  | j                  «      dz  | _
        |r| j                  «        | j                  «       st        d«      ‚y # t        $ r t        d«      ‚w xY w)Nr   zYh5py is not found. This dataset needs to have h5py installed: please run pip install h5pyr   r   )r   r    Úpcamz;Dataset not found. You can use download=True to download it)Úh5pyÚImportErrorÚRuntimeErrorr   Ú_splitÚsuperÚ__init__ÚpathlibÚPathr   Ú_base_folderÚ	_downloadÚ_check_exists)Úselfr   r   r   r    r!   r$   Ú	__class__s          €ú[/var/www/pod-logistic/pod-ai/venv/lib/python3.12/site-packages/torchvision/datasets/pcam.pyr)   zPCAM.__init__I   sŸ   ø€ ð	ÛàˆDŒIô % U¨GÐ5MÓNˆŒä‰Ñ˜¨ÐEUÐÔVÜ#ŸL™L¨¯©Ó3°fÑ<ˆÔáØ�N‰NÔà×!Ñ!Ô#ÜÐ\Ó]Ð]ð $øô ò 	ÜØkóð ð	ús   ƒB ÂBÚreturnc                 óà   — | j                   | j                     d   d   }| j                  j                  | j                  |z  «      5 }|d   j
                  d   cd d d «       S # 1 sw Y   y xY w)Nr   r   Úx)Ú_FILESr'   r$   ÚFiler,   Úshape)r/   Úimages_fileÚimages_datas      r1   Ú__len__zPCAM.__len__e   sc   € Ø—k‘k $§+¡+Ñ.¨xÑ8¸Ñ;ˆØ�Y‰Y�^‰^˜D×-Ñ-°Ñ;Ó<ð 	-ÀØ˜sÑ#×)Ñ)¨!Ñ,÷	-÷ 	-ò 	-ús   ÁA$Á$A-Úidxc                 ól  — | j                   | j                     d   d   }| j                  j                  | j                  |z  «      5 }t        j                  |d   |   «      j                  d«      }d d d «       | j                   | j                     d   d   }| j                  j                  | j                  |z  «      5 }t        |d   |dddf   «      }d d d «       | j                  r| j                  «      }| j                  r| j                  «      }fS # 1 sw Y   Œ¬xY w# 1 sw Y   ŒSxY w)Nr   r   r4   ÚRGBr   Úy)r5   r'   r$   r6   r,   r   Ú	fromarrayÚconvertÚintr   r    )r/   r;   r8   r9   ÚimageÚtargets_fileÚtargets_dataÚtargets           r1   Ú__getitem__zPCAM.__getitem__j   s  € Ø—k‘k $§+¡+Ñ.¨xÑ8¸Ñ;ˆØ�Y‰Y�^‰^˜D×-Ñ-°Ñ;Ó<ð 	JÀÜ—O‘O K°Ñ$4°SÑ$9Ó:×BÑBÀ5ÓIˆE÷	Jð —{‘{ 4§;¡;Ñ/°	Ñ:¸1Ñ=ˆØ�Y‰Y�^‰^˜D×-Ñ-°Ñ<Ó=ð 	:ÀÜ˜ cÑ*¨3°°1°a¨<Ñ8Ó9ˆF÷	:ð �>Š>Ø—N‘N 5Ó)ˆEØ× Ò Ø×*Ñ*¨6Ó2ˆFà�fˆ}Ð÷	Jð 	Jú÷	:ð 	:ús   Á+DÃD*ÄD'Ä*D3c                 ó¬   ‡ — ‰ j                   ‰ j                     d   d   }‰ j                   ‰ j                     d   d   }t        ˆ fd„||fD «       «      S )Nr   r   r   c              3   óp   •K  — | ]-  }‰j                   j                  |«      j                  «       –— Œ/ y ­w)N)r,   ÚjoinpathÚexists)Ú.0Úh5_filer/   s     €r1   ú	<genexpr>z%PCAM._check_exists.<locals>.<genexpr>}   s+   øè ø€ ÒkÀG�4×$Ñ$×-Ñ-¨gÓ6×=Ñ=×?Ñkùs   ƒ36)r5   r'   Úall)r/   r8   rC   s   `  r1   r.   zPCAM._check_existsz   sS   ø€ Ø—k‘k $§+¡+Ñ.¨xÑ8¸Ñ;ˆØ—{‘{ 4§;¡;Ñ/°	Ñ:¸1Ñ=ˆÜÓkÐP[Ð]iÐOjÔkÓkÐkó    c                 ó  — | j                  «       ry | j                  | j                     j                  «       D ]N  \  }}}|dz   }t	        |t        | j                  «      ||¬«       t        t        | j                  |z  «      «       ŒP y )Nz.gz)ÚfilenameÚmd5)r.   r5   r'   Úvaluesr
   Ústrr,   r	   )r/   Ú	file_nameÚfile_idrR   Úarchive_names        r1   r-   zPCAM._download   sz   € Ø×ÑÔØà'+§{¡{°4·;±;Ñ'?×'FÑ'FÓ'Hò 	?Ñ#ˆI�w Ø$ uÑ,ˆLÜ+¨G´S¸×9JÑ9JÓ5KÐVbÐhkÕlÜœ˜D×-Ñ-°Ñ<Ó=Õ>ñ	?rO   )r   NNF)r2   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r5   r   rT   r*   r+   r   r   Úboolr)   rA   r:   Útupler   rF   r.   r-   Ú__classcell__)r0   s   @r1   r   r   
   sØ   ø„ ñð2ð
ñ
ðð
ñ
ðð
ñ
ñ3%€FðT Ø(,Ø/3Øñ^à�C˜Ÿ™Ð%Ñ&ð^ð ð^ð ˜HÑ%ð	^ð
 # 8Ñ,ð^ð õ^ð8-˜ó -ð
˜sð  u¨S°#¨X¡ó ð l˜tó l÷
?rO   r   )r*   Útypingr   r   r   r   ÚPILr   Úutilsr	   r
   r   Úvisionr   r   © rO   r1   ú<module>rd      s(   ðÛ ß 1Ó 1å ç OÑ OÝ !ô|?ˆ=õ |?rO   