
    ڧg@)                         d dl Z d dlmZ d dlmZmZmZ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DictListOptionalTupleUnion)Image   )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e	e
ef         de
de
de
dee         dee         deddf fdZde
dej        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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|                                  |                                 st)          d	          t          j                            | j        |          | _        d S )
N)r/   r0   r-   r.   peoplepairsr,   r'   z.txtzHDataset 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datar1   _check_integrityRuntimeErrorr+   
images_dir)
selfr+   r,   r-   r.   r/   r0   r1   rF   	__class__s
            T/var/www/html/ai-engine/env/lib/python3.11/site-packages/torchvision/datasets/lfw.pyr7   z_LFW.__init__!   s<    	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!	 	MMOOO$$&& 	kijjj',,ty*==    r9   c                     t          |d          5 }t          j         |          }|                    d          cd d d            S # 1 swxY w Y   d S )NrbRGB)openr   convert)rG   r9   fimgs       rI   _loaderz_LFW._loader=   s    $ 	&*Q--C;;u%%	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	&s   )AAA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 )NFr4   T)r   r8   r9   r:   r+   r?   r@   rB   	checksumsr.   names)rG   st1st2s      rI   rD   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                 Z   |                                  rt          d           d S | j         | j         }t	          || j        | j        | j                   t          | j         | j         | j                   | j	        dk    r%t          | j         | j
         | j                   d S d S )Nz%Files already downloaded and verified)r?   r@   r4   )rD   printdownload_url_prefixr?   r   r+   r@   r   rB   r.   rU   )rG   urls     rI   r1   z_LFW.downloadK   s      "" 	9:::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)r8   r9   r:   rF   int)rG   r\   r]   s      rI   	_get_pathz_LFW._get_pathU   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_reprX   s    BT^BBdjBBBrJ   c                 *    t          | j                  S )N)lenrC   rd   s    rI   __len__z_LFW.__len__[   s    49~~rJ   )NNF)r2   N)__name__
__module____qualname__r;   rZ   r=   rT   rA   rU   r
   strr   r   r   boolr7   r   rR   rD   r1   ra   rb   re   rh   __classcell__rH   s   @rI   r   r      s       K< K\h I 8>?8?@; I YGGJE )-/3> >CI> > 	>
 > H%> #8,> > 
> > > > > >8&C &EK & & & &
$    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ededed	ee         d
ee         de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.

    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
            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): If true, downloads the dataset from the internet and
            puts it in root directory. If dataset is already downloaded, it is not
            downloaded again.

    r(   r   NFr+   r,   r-   r/   r0   r1   r2   c           	          t                                          |||d|||           |                                 | _        |                                 \  | _        | _        d S )Nr4   )r6   r7   _get_classesclass_to_idx_get_peoplerC   targetsrG   r+   r,   r-   r/   r0   r1   rH   s          rI   r7   zLFWPeople.__init__s   s]     	ui9FVX`aaa --//"&"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   )rN   r8   r9   r:   r+   rB   	readlinesr,   ra   range	enumeraterb   appendrt   )rG   rC   rv   rP   linesn_foldssfoldn_linesr4   ir\   num_imgsnumrQ   s                  rI   ru   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   r|   r~   s     rI   r   z*LFWPeople._get_classes.<locals>.<listcomp>   s1    ???TZZ\\''))!,???rJ   c                     i | ]\  }}||	S  r   )r   r   names      rI   
<dictcomp>z*LFWPeople._get_classes.<locals>.<dictcomp>   s    @@@GAta@@@rJ   )rN   r8   r9   r:   r+   rU   r   r   )rG   rP   r   rU   rt   s        rI   rs   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.
        )rR   rC   rv   r/   r0   )rG   r   rQ   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): )r6   re   rg   rt   )rG   rH   s    rI   re   zLFWPeople.extra_repr   s2    ww!!##&YTEVAWAW&Y&YYYrJ   r(   r   NNF)ri   rj   rk   __doc__rl   r   r   rm   r7   r	   r   ra   ru   r   rs   r   r   re   rn   ro   s   @rI   rq   rq   _   sU        , #(,/35 55 5 	5
 H%5 #8,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   rq   c                        e Zd ZdZ	 	 	 	 	 ddededed	ee         d
ee         de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.

    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): If true, downloads the dataset from the internet and
            puts it in root directory. If dataset is already downloaded, it is not
            downloaded again.

    r(   r   NFr+   r,   r-   r/   r0   r1   r2   c           	          t                                          |||d|||           |                     | j                  \  | _        | _        | _        d S )Nr5   )r6   r7   
_get_pairsrF   
pair_namesrC   rv   rw   s          rI   r7   zLFWPairs.__init__   sO     	ui)EUW_```37??4?3S3S0DLLLrJ   rF   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   r{   r   c                 \    g | ])}|                                                     d           *S rz   r|   r~   s     rI   r   z'LFWPairs._get_pairs.<locals>.<listcomp>   s.     ] ] ]d!3!3D!9!9 ] ] ]rJ   c                 \    g | ])}|                                                     d           *S rz   r|   r~   s     rI   r   z'LFWPairs._get_pairs.<locals>.<listcomp>   s.    "o"o"o4::<<#5#5d#;#;"o"o"orJ         )rN   r8   r9   r:   r+   rB   r   r,   ra   r   rb   r   )rG   rF   r   rC   rv   rP   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.
        )rC   rR   rv   r/   r0   )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   )ri   rj   rk   r   rl   r   r   rm   r7   r	   r   ra   r   r   r   rn   ro   s   @rI   r   r      s8        , #(,/3T TT T 	T
 H%T #8,T T 
T T T T T T)S )U4c3h3H$uUXZ]U]J_aefiaj3j-k ) ) ) )8" "sC})= " " " " " " " "rJ   r   )r8   pathlibr   typingr   r   r   r   r   r	   r
   PILr   utilsr   r   r   r   visionr   r   rq   r   r   rJ   rI   <module>r      sJ   				       D D D D D D D D D D D D D D D D D D       ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ! ! ! ! ! !Q Q Q Q Q= Q Q QhOZ OZ OZ OZ OZ OZ OZ OZdO" O" O" O" O"t O" O" O" O" O"rJ   