
    ڧg                     r    d dl Z d dlmZ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dS )	    N)AnyCallableOptionalTuple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valr   NFrootsplit	transformtarget_transformdownloadc                    	 dd l }|| _         n# t          $ r t          d          w xY wt          |dd          | _        t                                          |||           t          j        | j	                  dz  | _
        |r|                                  |                                 st          d          d S )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          U/var/www/html/ai-engine/env/lib/python3.11/site-packages/torchvision/datasets/pcam.pyr*   zPCAM.__init__I   s    	KKKDII 	 	 	k  	
 %UG5MNNEUVVV#L33f< 	NN!!## 	^\]]]	^ 	^s    )returnc                     | j         | j                 d         d         }| j                            | j        |z            5 }|d         j        d         cd d d            S # 1 swxY w Y   d S )Nr   r   x)_FILESr(   r%   Filer-   shape)r0   images_fileimages_datas      r2   __len__zPCAM.__len__e   s    k$+.x8;Y^^D-;<< 	-s#)!,	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	-s   A!!A%(A%idxc                 ~   | j         | j                 d         d         }| j                            | j        |z            5 }t          j        |d         |                                       d          }d d d            n# 1 swxY w Y   | j         | j                 d         d         }| j                            | j        |z            5 }t          |d         |dddf                   }d d d            n# 1 swxY w Y   | j	        r| 	                    |          }| j
        r| 
                    |          }||fS )Nr   r   r5   RGBr   y)r6   r(   r%   r7   r-   r   	fromarrayconvertintr    r!   )r0   r<   r9   r:   imagetargets_filetargets_datatargets           r2   __getitem__zPCAM.__getitem__j   s   k$+.x8;Y^^D-;<< 	JOK$4S$9::BB5IIE	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J {4;/	:1=Y^^D-<== 	:c*31a<899F	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: > 	*NN5))E  	3**622Ff}s$   4BBB C88C<?C<c                       j          j                 d         d         } j          j                 d         d         }t           fd||fD                       S )Nr   r   r   c              3   p   K   | ]0}j                             |                                          V  1d S )N)r-   joinpathexists).0h5_filer0   s     r2   	<genexpr>z%PCAM._check_exists.<locals>.<genexpr>}   s@      kkG4$--g66==??kkkkkk    )r6   r(   all)r0   r9   rD   s   `  r2   r/   zPCAM._check_existsz   s]    k$+.x8;{4;/	:1=kkkkP[]iOjkkkkkkrO   c                 $   |                                  rd S | j        | j                                                 D ]T\  }}}|dz   }t	          |t          | j                  ||           t          t          | j        |z                       Ud S )Nz.gz)filenamemd5)r/   r6   r(   valuesr   strr-   r
   )r0   	file_namefile_idrS   archive_names        r2   r.   zPCAM._download   s     	F'+{4;'?'F'F'H'H 	? 	?#Iw$u,L+GS9J5K5KVbhkllllD-<==>>>>	? 	?rO   )r   NNF)r3   N)__name__
__module____qualname____doc__r6   r   rU   r+   r,   r   r   boolr*   rB   r;   r   r   rG   r/   r.   __classcell__)r1   s   @r2   r   r   
   sn        2

 


 


 
3% %FT (,/3^ ^C%&^ ^ H%	^
 #8,^ ^ ^ ^ ^ ^ ^8- - - - -
s uS#X     lt l l l l
? ? ? ? ? ? ? ?rO   r   )r+   typingr   r   r   r   r   PILr   utilsr
   r   r   visionr   r    rO   r2   <module>rd      s     8 8 8 8 8 8 8 8 8 8 8 8 8 8       O O O O O O O O O O ! ! ! ! ! !|? |? |? |? |?= |? |? |? |? |?rO   