
    Yh,                         d dl Z d dlm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mZ ddlmZ  G d d	e          Z G d
 de          Z G d de          ZdS )    N)Path)AnyCallableOptionalUnion   )default_loader)check_integritydownload_and_extract_archivedownload_urlverify_str_arg)VisionDatasetc                       e Zd ZdZdZddddZddd	d
ddddZddddZdZddde	fde
eef         dedededee         dee         dedeegef         ddf fdZdefd Zd'd!Zd"ed#e
eef         defd$Zdefd%Zdefd&Z xZS )(_LFWzlfw-pyz http://vis-www.cs.umass.edu/lfw/)lfwzlfw.tgz a17d05bd522c52d84eca14327a23d494)lfw_funneledzlfw-funneled.tgz 1b42dfed7d15c9b2dd63d5e5840c86ad)zlfw-deepfunneledzlfw-deepfunneled.tgz 68331da3eb755a505a502b5aacb3c201)originalfunneleddeepfunneled 9f1ba174e4e1c508ff7cdf10ac338a7d 5132f7440eb68cf58910c8a45a2ac10b 4f27cbf15b2da4a85c1907eb4181ad21 450f0863dd89e85e73936a6d71a3474b e4bf5be0a43b5dcd9dc5ccfcb8fb19c5 54eaac34beb6d042ed3a7d883e247a21 a6d0a479bd074669f656265a6e693f6d)z	pairs.txtzpairsDevTest.txtzpairsDevTrain.txtz
people.txtzpeopleDevTest.txtzpeopleDevTrain.txtlfw-names.txt DevTrainDevTest10foldtraintestr    NFrootsplit	image_setview	transformtarget_transformdownloadloaderreturnc	                    t                                          t          j                            || j                  ||           t          |                                d| j        	                                          | _
        | j        | j
                 \  }	| _        | _        t          |                                dddg          | _        t          |                                dg d          | _        | j         | j        | j                  d| _        g | _        |rt%          d	          |                                 st+          d
          t          j                            | j        |	          | _        || _        d S )N)r,   r-   r*   r+   peoplepairsr)   r$   z.txtz|LFW dataset is no longer available for download.Please download the dataset manually and place it in the specified directoryzHDataset not found or corrupted. You can use download=True to download it)super__init__ospathjoinbase_folderr   lower	file_dictkeysr*   filenamemd5r+   r)   
annot_filelabels_filedata
ValueErrorr.   _check_integrityRuntimeErrorr(   
images_dir_loader)selfr(   r)   r*   r+   r,   r-   r.   r/   rE   	__class__s             j/var/www/tools.fuzzalab.pt/emblema-extractor/venv/lib/python3.11/site-packages/torchvision/datasets/lfw.pyr5   z_LFW.__init__    sP    	dD,<==euvvv'	(9(9;H[H[H]H]^^.2nT^.L+
DM48"4::<<(G9LMM	#EKKMM7<W<W<WXX
"iJ)DJJJ!	 	_   $$&& 	kijjj',,ty*==    c                    t          t          j                            | j        | j                  | j                  }t          t          j                            | j        | j                  | j        | j                           }|r|sdS | j	        dk    rHt          t          j                            | j        | j
                  | j        | j
                           S dS )NFr2   T)r
   r6   r7   r8   r(   r=   r>   r@   	checksumsr+   names)rG   st1st2s      rI   rC   z_LFW._check_integrityB   s    bgll49dmDDdhOObgll49d6FGGX\XhIijj 	# 	59  "27<<	4:#F#FW[WaHbccctrJ   c                 <   |                                  rd S | j         | j         }t          || j        | j        | j                   t          | j         | j         | j                   | j        dk    r%t          | j         | j	         | j                   d S d S )N)r=   r>   r2   )
rC   download_url_prefixr=   r   r(   r>   r   r@   r+   rM   )rG   urls     rI   r.   z_LFW.downloadK   s      "" 	F):4=::$S$)dmQUQYZZZZ0D$2BDDdiPPP9  D4BdjBBDINNNNN ! rJ   identitynoc           	      v    t           j                            | j        || dt	          |          dd          S )N_04dz.jpg)r6   r7   r8   rE   int)rG   rS   rT   s      rI   	_get_pathz_LFW._get_pathT   s6    w||DOX(7V7VSWW7V7V7V7VWWWrJ   c                 &    d| j          d| j         S )NzAlignment: z
Split: )r*   r)   rG   s    rI   
extra_reprz_LFW.extra_reprW   s    BT^BBdjBBBrJ   c                 *    t          | j                  S )N)lenrA   r[   s    rI   __len__z_LFW.__len__Z   s    49~~rJ   )r0   N)__name__
__module____qualname__r9   rQ   r;   rL   r?   rM   r	   r   strr   r   r   boolr   r5   rC   r.   rX   rY   r\   r_   __classcell__rH   s   @rI   r   r   
   s       K< K\h I 8>?8?@; I YGGJE )-/3'5   CI    	 
   H%  #8,    #$  
           D$    O O O OX# X5c? Xs X X X XCC C C C C        rJ   r   c                        e Zd ZdZdddddefdededed	ee         d
ee         dedeege	f         ddf fdZ
deee         ee         f         fdZdeeef         fdZdedee	e	f         fdZdef fdZ xZS )	LFWPeoplea;  `LFW <http://vis-www.cs.umass.edu/lfw/>`_ Dataset.

    .. warning:

        The LFW dataset is no longer available for automatic download. Please
        download it manually and place it in the specified directory.

    Args:
        root (str or ``pathlib.Path``): Root directory of dataset where directory
            ``lfw-py`` exists or will be saved to if download is set to True.
        split (string, optional): The image split to use. Can be one of ``train``, ``test``,
            ``10fold`` (default).
        image_set (str, optional): Type of image funneling to use, ``original``, ``funneled`` or
            ``deepfunneled``. Defaults to ``funneled``.
        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 the
            target and transforms it.
        download (bool, optional): NOT SUPPORTED ANYMORE, leave to False.
        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.
    r%   r   NFr(   r)   r*   r,   r-   r.   r/   r0   c           
          t                                          |||d||||           |                                 | _        |                                 \  | _        | _        d S )Nr2   r/   )r4   r5   _get_classesclass_to_idx_get_peoplerA   targets	rG   r(   r)   r*   r,   r-   r.   r/   rH   s	           rI   r5   zLFWPeople.__init__w   sc     	ui9FVX`ioppp --//"&"2"2"4"4	4<<<rJ   c           	         g g }}t          t          j                            | j        | j                            5 }|                                }| j        dk    rt          |d                   dfnd\  }}t          |          D ]}t          ||                   }d ||dz   ||z   dz            D             }	||dz   z  }t          |	          D ]v\  }
\  }}t          dt          |          dz             D ]M}|                     ||          }|                    |           |                    | j        |                    Nw	 d d d            n# 1 swxY w Y   ||fS )Nr%   r   r   )r   r   c                 \    g | ])}|                                                     d           *S 	stripr)   .0lines     rI   
<listcomp>z)LFWPeople._get_people.<locals>.<listcomp>   s.    ^^^t$**,,,,T22^^^rJ   )openr6   r7   r8   r(   r@   	readlinesr)   rX   range	enumeraterY   appendrl   )rG   rA   rn   flinesn_foldssfoldn_linesr2   irS   num_imgsnumimgs                  rI   rm   zLFWPeople._get_people   s   Bg"',,ty$*:;;<< 	DKKMME/3zX/E/E#eAh--++6JGQg D DeAh--^^uQUQQX[[\_E\?]^^^Wq[ /8/@/@ D D+A+($QH(9:: D D"nnXs;;C(((t'8'BCCCCDD	D		D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D W}s   DEEEc                    t          t          j                            | j        | j                            5 }|                                }d |D             }d d d            n# 1 swxY w Y   d t          |          D             }|S )Nc                 f    g | ].}|                                                                 d          /S )r   rt   rv   s     rI   ry   z*LFWPeople._get_classes.<locals>.<listcomp>   s1    ???TZZ\\''))!,???rJ   c                     i | ]\  }}||	S  r   )rw   r   names      rI   
<dictcomp>z*LFWPeople._get_classes.<locals>.<dictcomp>   s    @@@GAta@@@rJ   )rz   r6   r7   r8   r(   rM   r{   r}   )rG   r   r   rM   rl   s        rI   rk   zLFWPeople._get_classes   s    "',,ty$*5566 	@!KKMME?????E	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ A@y/?/?@@@s   !A%%A),A)indexc                     |                      | j        |                   }| j        |         }| j        |                     |          }| j        |                     |          }||fS )z
        Args:
            index (int): Index

        Returns:
            tuple: Tuple (image, target) where target is the identity of the person.
        )rF   rA   rn   r,   r-   )rG   r   r   targets       rI   __getitem__zLFWPeople.__getitem__   sg     ll49U+,,e$>%..%%C ,**622FF{rJ   c                 t    t                                                      dt          | j                   z   S )Nz
Classes (identities): )r4   r\   r^   rl   )rG   rH   s    rI   r\   zLFWPeople.extra_repr   s2    ww!!##&YTEVAWAW&Y&YYYrJ   )r`   ra   rb   __doc__r	   rc   r   r   rd   r   r5   tuplelistrX   rm   dictrk   r   r\   re   rf   s   @rI   rh   rh   ^   sm        6 #(,/3'55 55 5 	5
 H%5 #8,5 5 #$5 
5 5 5 5 5 5U49d3i#78    $d38n     sCx    &ZC Z Z Z Z Z Z Z Z Z ZrJ   rh   c                       e Zd ZdZdddddefdededed	ee         d
ee         dedeege	f         ddf fdZ
dedeeeeef                  eeeef                  ee         f         fdZdedee	e	ef         fdZ xZS )LFWPairsa   `LFW <http://vis-www.cs.umass.edu/lfw/>`_ Dataset.

    .. warning:

        The LFW dataset is no longer available for automatic download. Please
        download it manually and place it in the specified directory.

    Args:
        root (str or ``pathlib.Path``): Root directory of dataset where directory
            ``lfw-py`` exists or will be saved to if download is set to True.
        split (string, optional): The image split to use. Can be one of ``train``, ``test``,
            ``10fold``. Defaults to ``10fold``.
        image_set (str, optional): Type of image funneling to use, ``original``, ``funneled`` or
            ``deepfunneled``. Defaults to ``funneled``.
        transform (callable, optional): A function/transform that takes in a PIL image
            and returns a transformed version. E.g, ``transforms.RandomRotation``
        target_transform (callable, optional): A function/transform that takes in the
            target and transforms it.
        download (bool, optional): NOT SUPPORTED ANYMORE, leave to False.
        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.

    r%   r   NFr(   r)   r*   r,   r-   r.   r/   r0   c           
          t                                          |||d||||           |                     | j                  \  | _        | _        | _        d S )Nr3   rj   )r4   r5   
_get_pairsrE   
pair_namesrA   rn   ro   s	           rI   r5   zLFWPairs.__init__   sU     	ui)EUW_hnooo37??4?3S3S0DLLLrJ   rE   c           	         g g g }}}t          t          j                            | j        | j                            5 }|                                }| j        dk    r=|d                             d          \  }}t          |          t          |          }}ndt          |d                   }}d}	t          |          D ]s}
d ||	|	|z            D             }d ||	|z   |	d|z  z            D             }|	d|z  z  }	|D ]}| 
                    |d         |d                   | 
                    |d         |d                   d}}}|                    |d         |d         f           |                    ||f           |                    |           |D ]}| 
                    |d         |d                   | 
                    |d         |d                   d}}}|                    |d         |d         f           |                    ||f           |                    |           u	 d d d            n# 1 swxY w Y   |||fS )	Nr%   r   rs   r   c                 \    g | ])}|                                                     d           *S rr   rt   rv   s     rI   ry   z'LFWPairs._get_pairs.<locals>.<listcomp>   s.     ] ] ]d!3!3D!9!9 ] ] ]rJ   c                 \    g | ])}|                                                     d           *S rr   rt   rv   s     rI   ry   z'LFWPairs._get_pairs.<locals>.<listcomp>   s.    "o"o"o4::<<#5#5d#;#;"o"o"orJ         )rz   r6   r7   r8   r(   r@   r{   r)   rX   r|   rY   r~   )rG   rE   r   rA   rn   r   r   r   n_pairsr   r   matched_pairsunmatched_pairspairimg1img2sames                    rI   r   zLFWPairs._get_pairs   s   $&B'D
"',,ty$*:;;<< 	)KKMMEzX%%#(8>>$#7#7 #&w<<W#$c%(mmAg ) ) ] ]eAPQT[P[OF\ ] ] ]"o"oaRYk\]abelal\mNmHn"o"o"oQ[ ) ) )D'+~~d1gtAw'G'GX\]^X_aefgahIiIikl$D%%tAwQ&8999KKt---NN4((((+ ) )D'+~~d1gtAw'G'GX\]^X_aefgahIiIikl$D%%tAwQ&8999KKt---NN4((((	))	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	)0 4((s   G:II	I	r   c                 4   | j         |         \  }}|                     |          |                     |          }}| j        |         }| j        *|                     |          |                     |          }}| j        |                     |          }|||fS )z
        Args:
            index (int): Index

        Returns:
            tuple: (image1, image2, target) where target is `0` for different indentities and `1` for same identities.
        )rA   rF   rn   r,   r-   )rG   r   r   r   r   s        rI   r   zLFWPairs.__getitem__   s     Yu%
d\\$''d););de$>%--t~~d/C/C$D ,**622FT6!!rJ   )r`   ra   rb   r   r	   rc   r   r   rd   r   r5   r   r   rX   r   r   re   rf   s   @rI   r   r      sQ        8 #(,/3'5T TT T 	T
 H%T #8,T T #$T 
T T T T T T)S )U4c3h3H$uUXZ]U]J_aefiaj3j-k ) ) ) )8" "sC})= " " " " " " " "rJ   r   )r6   pathlibr   typingr   r   r   r   folderr	   utilsr
   r   r   r   visionr   r   rh   r   r   rJ   rI   <module>r      s8   				       1 1 1 1 1 1 1 1 1 1 1 1 " " " " " " ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ! ! ! ! ! !Q Q Q Q Q= Q Q QhUZ UZ UZ UZ UZ UZ UZ UZpV" V" V" V" V"t V" V" V" V" V"rJ   