
    ڧg7                         d dl Z d dlZd dlmZ d dlm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  G d	 d
e          Z G d de          Z G d de          ZdS )    N)defaultdict)
HTMLParser)Path)AnyCallableDictListOptionalTupleUnion)Image   )VisionDatasetc                        e Zd ZdZdeeef         ddf fdZdedee	ee
e         f                  ddfdZdeddfd	Zd
eddfdZ xZS )Flickr8kParserzBParser for extracting captions from the Flickr8k dataset web page.rootreturnNc                     t                                                       || _        i | _        d| _        d | _        d | _        d S )NF)super__init__r   annotationsin_tablecurrent_tagcurrent_img)selfr   	__class__s     W/var/www/html/ai-engine/env/lib/python3.11/site-packages/torchvision/datasets/flickr.pyr   zFlickr8kParser.__init__   sI    	 24 *.*.    tagattrsc                 2    || _         |dk    r	d| _        d S d S )NtableTr   r   )r   r   r    s      r   handle_starttagzFlickr8kParser.handle_starttag   s%    '>> DMMM >r   c                 2    d | _         |dk    r	d| _        d S d S )Nr"   Fr#   )r   r   s     r   handle_endtagzFlickr8kParser.handle_endtag#   s%    '>>!DMMM >r   datac                    | j         r|dk    r	d | _        d S | j        dk    rp|                    d          d         }t          j                            | j        |dz             }t          j        |          d         }|| _        g | j	        |<   d S | j        dk    rD| j        r?| j        }| j	        |         
                    |                                           d S d S d S d S )NzImage Not Founda/z_*.jpgr   li)r   r   r   splitospathjoinr   globr   appendstrip)r   r'   img_ids      r   handle_datazFlickr8kParser.handle_data)   s    = 	>(((#'   !S((C,di(1BCC6**1-#) +- (((!T))d.>)) (//

=====	> 	> *)))r   )__name__
__module____qualname____doc__r   strr   r   r	   r   r
   r$   r&   r5   __classcell__r   s   @r   r   r      s        LL/U39- /$ / / / / / /!3 !tE#x}:L4M/N !SW ! ! ! !" " " " " "> > > > > > > > > >r   r   c                        e Zd ZdZ	 	 ddeeef         dedee         dee         ddf
 fdZ	d	e
deeef         fd
Zde
fdZ xZS )Flickr8ka  `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                                          |||           t          j                            |          | _        t          | j                  }t          | j                  5 }|	                    |
                                           d d d            n# 1 swxY w Y   |j        | _        t          t          | j                                                            | _        d S )Nr@   rA   )r   r   r.   r/   
expanduserr?   r   r   openfeedreadr   listsortedkeysids)r   r   r?   r@   rA   parserfhr   s          r   r   zFlickr8k.__init__D   s     	EUVVV**844  	**$-   	#BKK		"""	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	#!-t/44667788s   2(B&&B*-B*indexc                     | j         |         }t          j        |                              d          }| j        |                     |          }| j        |         }| j        |                     |          }||fS z
        Args:
            index (int): Index

        Returns:
            tuple: Tuple (image, target). target is a list of captions for the image.
        RGB)rK   r   rE   convertr@   r   rA   )r   rN   r4   imgtargets        r   __getitem__zFlickr8k.__getitem__V   s|     % j  ((//>%..%%C !&) ,**622FF{r   c                 *    t          | j                  S NlenrK   r   s    r   __len__zFlickr8k.__len__l       48}}r   NN)r6   r7   r8   r9   r   r:   r   r
   r   r   intr   r   rU   r[   r;   r<   s   @r   r>   r>   8   s        	 	 )-/39 9CI9 9 H%	9
 #8,9 
9 9 9 9 9 9$ sCx    ,        r   r>   c                        e Zd ZdZ	 	 ddededee         dee         ddf
 fdZd	ede	e
e
f         fd
ZdefdZ xZS )	Flickr30ka	  `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   r?   r@   rA   r   c                 B   t                                          |||           t          j                            |          | _        t          t                    | _        t          | j                  5 }|D ]T}|
                                                    d          \  }}| j        |d d                                      |           U	 d d d            n# 1 swxY w Y   t          t          | j                                                            | _        d S )NrC   	r+   )r   r   r.   r/   rD   r?   r   rH   r   rE   r3   r-   r2   rI   rJ   rK   )
r   r   r?   r@   rA   rM   liner4   captionr   s
            r   r   zFlickr30k.__init__|   s6    	EUVVV**844 't,,$-   	>B > >"&**,,"4"4T":": -44W====>	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	>
 t/44667788s   7ACC #C rN   c                 F   | j         |         }t          j                            | j        |          }t          j        |                              d          }| j        |                     |          }| j	        |         }| j
        | 
                    |          }||fS rP   )rK   r.   r/   r0   r   r   rE   rR   r@   r   rA   )r   rN   r4   filenamerS   rT   s         r   rU   zFlickr30k.__getitem__   s     % 7<<	622j""**511>%..%%C !&) ,**622FF{r   c                 *    t          | j                  S rW   rX   rZ   s    r   r[   zFlickr30k.__len__   r\   r   r]   )r6   r7   r8   r9   r:   r
   r   r   r^   r   r   rU   r[   r;   r<   s   @r   r`   r`   p   s        	 	 )-/39 99 9 H%	9
 #8,9 
9 9 9 9 9 9& sCx    .        r   r`   )r1   r.   collectionsr   html.parserr   pathlibr   typingr   r   r   r	   r
   r   r   PILr   visionr   r   r>   r`    r   r   <module>ro      s1    				 # # # # # # " " " " " "       D D D D D D D D D D D D D D D D D D       ! ! ! ! ! !(> (> (> (> (>Z (> (> (>V5 5 5 5 5} 5 5 5p7 7 7 7 7 7 7 7 7 7r   