§
    ù²Åj…  ã                  ó‚   — d dl mZ d dlZd dlmZ d dlmZmZmZm	Z	m
Z
 d dlZddlmZmZ ddlmZ  G d„ d	e¦  «        ZdS )
é    )ÚannotationsN)ÚPath)ÚAnyÚCallableÚOptionalÚTupleÚUnioné   )Údownload_and_extract_archiveÚverify_str_arg)ÚVisionDatasetc                  óT   ‡ — e Zd ZdZdZ	 	 	 	 	 ddˆ fd„Zdd„Zdd„Zdd„Zd d„Z	ˆ xZ
S )!ÚFGVCAircrafta  `FGVC Aircraft <https://www.robots.ox.ac.uk/~vgg/data/fgvc-aircraft/>`_ Dataset.

    The dataset contains 10,000 images of aircraft, with 100 images for each of 100
    different aircraft model variants, most of which are airplanes.
    Aircraft models are organized in a three-levels hierarchy. The three levels, from
    finer to coarser, are:

    - ``variant``, e.g. Boeing 737-700. A variant collapses all the models that are visually
        indistinguishable into one class. The dataset comprises 100 different variants.
    - ``family``, e.g. Boeing 737. The dataset comprises 70 different families.
    - ``manufacturer``, e.g. Boeing. The dataset comprises 30 different manufacturers.

    Args:
        root (str or ``pathlib.Path``): Root directory of the FGVC Aircraft dataset.
        split (string, optional): The dataset split, supports ``train``, ``val``,
            ``trainval`` and ``test``.
        annotation_level (str, optional): The annotation level, supports ``variant``,
            ``family`` and ``manufacturer``.
        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 in root directory. If dataset is already downloaded, it is not
            downloaded again.
    zWhttps://www.robots.ox.ac.uk/~vgg/data/fgvc-aircraft/archives/fgvc-aircraft-2013b.tar.gzÚtrainvalÚvariantNFÚrootúUnion[str, Path]ÚsplitÚstrÚannotation_levelÚ	transformúOptional[Callable]Útarget_transformÚdownloadÚboolÚreturnÚNonec           
     ó   •— t          ¦   «                              |||¬¦  «         t          |dd¦  «        | _        t          |dd¦  «        | _        t
          j                             | j        d¦  «        | _	        |r|  
                    ¦   «          |                      ¦   «         st          d¦  «        ‚t
          j                             | j	        dd	d
ddœ| j                 ¦  «        }t          |d¦  «        5 }d„ |D ¦   «         | _        d d d ¦  «         n# 1 swxY w Y   t          t!          | j        t#          t%          | j        ¦  «        ¦  «        ¦  «        ¦  «        | _        t
          j                             | j	        dd¦  «        }	t
          j                             | j	        dd| j        › d| j        › d�¦  «        }
g | _        g | _        t          |
d¦  «        5 }|D ]�}|                     ¦   «                              dd¦  «        \  }}| j                             t
          j                             |	|› d�¦  «        ¦  «         | j                             | j        |         ¦  «         ŒŽ	 d d d ¦  «         d S # 1 swxY w Y   d S )N)r   r   r   )ÚtrainÚvalr   Útestr   )r   ÚfamilyÚmanufacturerzfgvc-aircraft-2013bz;Dataset not found. You can use download=True to download itÚdatazvariants.txtzfamilies.txtzmanufacturers.txtÚrc                ó6   — g | ]}|                      ¦   «         ‘ŒS © )Ústrip)Ú.0Úlines     úSC:\Projects\Historical\venv\Lib\site-packages\torchvision/datasets/fgvc_aircraft.pyú
<listcomp>z)FGVCAircraft.__init__.<locals>.<listcomp>K   s    € Ð7Ð7Ð7¨T˜DŸJšJ™LœLÐ7Ð7Ð7ó    ÚimagesÚimages_Ú_z.txtú r
   z.jpg)ÚsuperÚ__init__r   Ú_splitÚ_annotation_levelÚosÚpathÚjoinr   Ú
_data_pathÚ	_downloadÚ_check_existsÚRuntimeErrorÚopenÚclassesÚdictÚzipÚrangeÚlenÚclass_to_idxÚ_image_filesÚ_labelsr(   r   Úappend)Úselfr   r   r   r   r   r   Úannotation_fileÚfÚimage_data_folderÚlabels_filer*   Ú
image_nameÚ
label_nameÚ	__class__s                 €r+   r3   zFGVCAircraft.__init__+   sþ  ø€ õ 	‰Œ×Ò˜¨ÐEUÐÑVÔVÐVÝ$ U¨GÐ5YÑZÔZˆŒÝ!/ØÐ0Ð2Wñ"
ô "
ˆÔõ œ'Ÿ,š, t¤yÐ2GÑHÔHˆŒØð 	Ø�NŠNÑÔÐà×!Ò!Ñ#Ô#ð 	^ÝÐ\Ñ]Ô]Ð]åœ'Ÿ,š,ØŒOØà)Ø(Ø 3ðð ð Ô$ô	&ñ
ô 
ˆõ �/ 3Ñ'Ô'ð 	8¨1Ø7Ð7°QÐ7Ñ7Ô7ˆDŒLð	8ð 	8ð 	8ñ 	8ô 	8ð 	8ð 	8ð 	8ð 	8ð 	8ð 	8øøøð 	8ð 	8ð 	8ð 	8õ !¥ T¤\µ5½¸T¼\Ñ9JÔ9JÑ3KÔ3KÑ!LÔ!LÑMÔMˆÔåœGŸLšL¨¬¸&À(ÑKÔKÐÝ”g—l’l 4¤?°FÐ<pÀdÔF\Ð<pÐ<pÐ_cÔ_jÐ<pÐ<pÐ<pÑqÔqˆàˆÔØˆŒå�+˜sÑ#Ô#ð 	C qØð Cð C�Ø)-¯ª©¬×);Ò);¸CÀÑ)CÔ)CÑ&�
˜JØÔ!×(Ò(­¬¯ªÐ6GÈJÐI\ÐI\ÐI\Ñ)]Ô)]Ñ^Ô^Ð^Ø”×#Ò# DÔ$5°jÔ$AÑBÔBÐBÐBðCð	Cð 	Cð 	Cñ 	Cô 	Cð 	Cð 	Cð 	Cð 	Cð 	Cð 	Cð 	Cøøøð 	Cð 	Cð 	Cð 	Cð 	Cð 	Cs%   Ã:DÄDÄDÇ$BJÊJÊ
JÚintc                ó*   — t          | j        ¦  «        S ©N)rB   rD   ©rG   s    r+   Ú__len__zFGVCAircraft.__len__[   s   € Ý�4Ô$Ñ%Ô%Ð%r-   ÚidxúTuple[Any, Any]c                ó  — | j         |         | j        |         }}t          j                             |¦  «                             d¦  «        }| j        r|                      |¦  «        }| j        r|                      |¦  «        }||fS )NÚRGB)rD   rE   ÚPILÚImager=   Úconvertr   r   )rG   rT   Ú
image_fileÚlabelÚimages        r+   Ú__getitem__zFGVCAircraft.__getitem__^   s~   € Ø Ô-¨cÔ2°D´LÀÔ4E�Eˆ
Ý”	—’˜zÑ*Ô*×2Ò2°5Ñ9Ô9ˆàŒ>ð 	*Ø—N’N 5Ñ)Ô)ˆEàÔ ð 	1Ø×)Ò)¨%Ñ0Ô0ˆEà�eˆ|Ðr-   c                óf   — |                       ¦   «         rdS t          | j        | j        ¦  «         dS )zW
        Download the FGVC Aircraft dataset archive and extract it under root.
        N)r;   r   Ú_URLr   rR   s    r+   r:   zFGVCAircraft._downloadj   s7   € ð ×ÒÑÔð 	ØˆFÝ$ T¤Y°´	Ñ:Ô:Ð:Ð:Ð:r-   c                ó’   — t           j                             | j        ¦  «        o#t           j                             | j        ¦  «        S rQ   )r6   r7   Úexistsr9   ÚisdirrR   s    r+   r;   zFGVCAircraft._check_existsr   s-   € ÝŒw�~Š~˜dœoÑ.Ô.ÐQµ2´7·=²=ÀÄÑ3QÔ3QÐQr-   )r   r   NNF)r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   rO   )rT   rO   r   rU   )r   r   )r   r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r`   r3   rS   r^   r:   r;   Ú__classcell__)rN   s   @r+   r   r      sÅ   ø€ € € € € ðð ð6 e€Dð
  Ø )Ø(,Ø/3Øð.Cð .Cð .Cð .Cð .Cð .Cð .Cð`&ð &ð &ð &ð
ð 
ð 
ð 
ð;ð ;ð ;ð ;ðRð Rð Rð Rð Rð Rð Rð Rr-   r   )Ú
__future__r   r6   Úpathlibr   Útypingr   r   r   r   r	   Ú	PIL.ImagerX   Úutilsr   r   Úvisionr   r   r'   r-   r+   ú<module>ro      sÚ   ðØ "Ð "Ð "Ð "Ð "Ð "à 	€	€	€	Ø Ð Ð Ð Ð Ð Ø 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8à Ð Ð Ð à ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ø !Ð !Ð !Ð !Ð !Ð !ðfRð fRð fRð fRð fR�=ñ fRô fRð fRð fRð fRr-   