
    QЦi7                         S SK r S SKrS SKJr  S SKJr  S SKJr  S SKJ	r	J
r
JrJrJrJrJr  S SKJr  SSKJr   " S	 S
\5      r " S S\5      r " S S\5      rg)    N)defaultdict)
HTMLParser)Path)AnyCallableDictListOptionalTupleUnion)Image   )VisionDatasetc                      ^  \ rS rSrSrS\\\4   SS4U 4S jjrS\S\	\
\\\   4      SS4S	 jrS\SS4S
 jrS\SS4S jrSrU =r$ )Flickr8kParser   zBParser for extracting captions from the Flickr8k dataset web page.rootreturnNc                 f   > [         TU ]  5         Xl        0 U l        SU l        S U l        S U l        g )NF)super__init__r   annotationsin_tablecurrent_tagcurrent_img)selfr   	__class__s     Z/var/www/html/ai-image-ml/venv/lib/python3.13/site-packages/torchvision/datasets/flickr.pyr   Flickr8kParser.__init__   s6    	 24 *.*.    tagattrsc                 ,    Xl         US:X  a  SU l        g g )NtableTr   r   )r   r!   r"   s      r   handle_starttagFlickr8kParser.handle_starttag   s    '> DM r    c                 .    S U l         US:X  a  SU l        g g )Nr$   Fr%   )r   r!   s     r   handle_endtagFlickr8kParser.handle_endtag#   s    '>!DM r    datac                    U R                   (       a  US:X  a  S U l        g U R                  S:X  ap  UR                  S5      S   n[        R
                  R                  U R                  US-   5      n[        R                  " U5      S   nX l        / U R                  U'   g U R                  S:X  aK  U R                  (       a9  U R                  nU R                  U   R                  UR                  5       5        g g g g )NzImage Not Founda/z_*.jpgr   li)r   r   r   splitospathjoinr   globr   appendstrip)r   r+   img_ids      r   handle_dataFlickr8kParser.handle_data)   s    ==((#' !!S(C,dii(1BC6*1-#) +-  (!!T)d.>.>))  (//

= /?) r    )r   r   r   r   r   )__name__
__module____qualname____firstlineno____doc__r   strr   r   r	   r   r
   r&   r)   r9   __static_attributes____classcell__r   s   @r   r   r      s{    L/U39- /$ /!3 !tE#x}:L4M/N !SW !" " "> > > >r    r   c                      ^  \ rS rSrSr  SS\\\4   S\S\\	   S\\	   SS4
U 4S	 jjjr
S
\S\\\4   4S jrS\4S jrSrU =r$ )Flickr8k8   a  `Flickr8k Entities <http://hockenmaier.cs.illinois.edu/8k-pictures.html>`_ Dataset.

Args:
    root (str or ``pathlib.Path``): Root directory where images are downloaded to.
    ann_file (string): Path to annotation file.
    transform (callable, optional): A function/transform that takes in a PIL image
        and returns a transformed version. E.g, ``transforms.PILToTensor``
    target_transform (callable, optional): A function/transform that takes in the
        target and transforms it.
Nr   ann_file	transformtarget_transformr   c                   > [         TU ]  XUS9  [        R                  R	                  U5      U l        [        U R                  5      n[        U R
                  5       nUR                  UR                  5       5        S S S 5        UR                  U l        [        [        U R                  R                  5       5      5      U l        g ! , (       d  f       NQ= f)NrH   rI   )r   r   r2   r3   
expanduserrG   r   r   openfeedreadr   listsortedkeysids)r   r   rG   rH   rI   parserfhr   s          r   r   Flickr8k.__init__D   s     	EUV**84  		*$-- BKK	" !!--t//44678	 ! s    C		
Cindexc                    U R                   U   n[        R                  " U5      R                  S5      nU R                  b  U R	                  U5      nU R
                  U   nU R                  b  U R                  U5      nX44$ zv
Args:
    index (int): Index

Returns:
    tuple: Tuple (image, target). target is a list of captions for the image.
RGB)rS   r   rM   convertrH   r   rI   )r   rW   r8   imgtargets        r   __getitem__Flickr8k.__getitem__V   sz     % jj ((/>>%..%C !!&)  ,**62F{r    c                 ,    [        U R                  5      $ NlenrS   r   s    r   __len__Flickr8k.__len__l       488}r    rG   r   rS   NN)r;   r<   r=   r>   r?   r   r@   r   r
   r   r   intr   r   r^   re   rA   rB   rC   s   @r   rE   rE   8   s    	 )-/39CI9 9 H%	9
 #8,9 
9 9$ sCx ,  r    rE   c                      ^  \ rS rSrSr  SS\S\S\\   S\\   SS4
U 4S	 jjjrS
\	S\
\\4   4S jrS\	4S jrSrU =r$ )	Flickr30kp   a  `Flickr30k Entities <https://bryanplummer.com/Flickr30kEntities/>`_ Dataset.

Args:
    root (str or ``pathlib.Path``): Root directory where images are downloaded to.
    ann_file (string): Path to annotation file.
    transform (callable, optional): A function/transform that takes in a PIL image
        and returns a transformed version. E.g, ``transforms.PILToTensor``
    target_transform (callable, optional): A function/transform that takes in the
        target and transforms it.
Nr   rG   rH   rI   r   c                   > [         T	U ]  XUS9  [        R                  R	                  U5      U l        [        [        5      U l        [        U R
                  5       nU HE  nUR                  5       R                  S5      u  pxU R                  US S    R                  U5        MG     S S S 5        [        [        U R                  R                  5       5      5      U l        g ! , (       d  f       N@= f)NrK   	r/   )r   r   r2   r3   rL   rG   r   rP   r   rM   r7   r1   r6   rQ   rR   rS   )
r   r   rG   rH   rI   rU   liner8   captionr   s
            r   r   Flickr30k.__init__|   s     	EUV**84 't,$-- B"&**,"4"4T":  -44W=  !
 t//44678 ! s   AC##
C1rW   c                 Z   U R                   U   n[        R                  R                  U R                  U5      n[
        R                  " U5      R                  S5      nU R                  b  U R                  U5      nU R                  U   nU R                  b  U R                  U5      nXE4$ rY   )rS   r2   r3   r4   r   r   rM   r[   rH   r   rI   )r   rW   r8   filenamer\   r]   s         r   r^   Flickr30k.__getitem__   s     % 77<<		62jj"**51>>%..%C !!&)  ,**62F{r    c                 ,    [        U R                  5      $ ra   rb   rd   s    r   re   Flickr30k.__len__   rg   r    rh   ri   )r;   r<   r=   r>   r?   r@   r
   r   r   rj   r   r   r^   re   rA   rB   rC   s   @r   rl   rl   p   s    	 )-/399 9 H%	9
 #8,9 
9 9& sCx .  r    rl   )r5   r2   collectionsr   html.parserr   pathlibr   typingr   r   r   r	   r
   r   r   PILr   visionr   r   rE   rl    r    r   <module>r      sI     	 # "  D D D  !(>Z (>V5} 5p7 7r    