ó
    Eñih  ã                  ór   • S SK Jr  S SKrS SKJr  S SKJrJr  SSKJ	r	  SSK
JrJr  SSKJr   " S	 S
\5      rg)é    )ÚannotationsN)ÚPath)ÚAnyÚCallableé   )Údefault_loader)Údownload_and_extract_archiveÚverify_str_arg)ÚVisionDatasetc                  óŠ   ^ • \ rS rSrSrSrSSSSS\4               SU 4S jjjrSS	 jrSS
 jr	SS jr
SS jrSrU =r$ )ÚFGVCAircrafté   aÎ  `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 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): If True, downloads the dataset from the internet and
        puts it in root directory. If dataset is already downloaded, it is not
        downloaded again.
    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.
zWhttps://www.robots.ox.ac.uk/~vgg/data/fgvc-aircraft/archives/fgvc-aircraft-2013b.tar.gzÚtrainvalÚvariantNFc           
     ó>  >• [         TU ]  XUS9  [        USS5      U l        [        USS5      U l        [
        R                  R                  U R                  S5      U l	        U(       a  U R                  5         U R                  5       (       d  [        S5      e[
        R                  R                  U R                  SS	S
SS.U R                     5      n[        U5       n	U	 V
s/ s H  oªR                  5       PM     sn
U l        S S S 5        [!        [#        U R                  [%        ['        U R                  5      5      5      5      U l        [
        R                  R                  U R                  SS5      n[
        R                  R                  U R                  SSU R                   SU R                   S35      n/ U l        / U l        [        U5       n	U	 Hˆ  n
U
R                  5       R/                  SS5      u  pÞU R*                  R1                  [
        R                  R                  X½ S35      5        U R,                  R1                  U R(                  U   5        MŠ     S S S 5        Xpl        g s  sn
f ! , (       d  f       GN|= f! , (       d  f       N,= f)N)Ú	transformÚtarget_transformÚsplit)ÚtrainÚvalr   ÚtestÚannotation_level)r   ÚfamilyÚmanufacturerzfgvc-aircraft-2013bz;Dataset not found. You can use download=True to download itÚdatazvariants.txtzfamilies.txtzmanufacturers.txtÚimagesÚimages_Ú_z.txtÚ r   z.jpg)ÚsuperÚ__init__r
   Ú_splitÚ_annotation_levelÚosÚpathÚjoinÚrootÚ
_data_pathÚ	_downloadÚ_check_existsÚRuntimeErrorÚopenÚstripÚclassesÚdictÚzipÚrangeÚlenÚclass_to_idxÚ_image_filesÚ_labelsr   ÚappendÚloader)Úselfr'   r   r   r   r   Údownloadr7   Úannotation_fileÚfÚlineÚimage_data_folderÚlabels_fileÚ
image_nameÚ
label_nameÚ	__class__s                  €Ú_/home/mande/repo/quber/.venv/lib/python3.13/site-packages/torchvision/datasets/fgvc_aircraft.pyr!   ÚFGVCAircraft.__init__.   s  ø€ ô 	‰Ñ˜ÐEUÐÑVÜ$ U¨GÐ5YÓZˆŒÜ!/ØÐ0Ð2Wó"
ˆÔô Ÿ'™'Ÿ,™, t§y¡yÐ2GÓHˆŒÞØ�N‰NÔà×!Ñ!×#Ñ#ÜÐ\Ó]Ð]äŸ'™'Ÿ,™,Ø�O‰OØà)Ø(Ø 3ñð ×$Ñ$ñ	&ó
ˆô �/Ô" aÙ56Ó7²Q¨TŸJ™JžL±QÑ7ˆDŒL÷ #ô !¤ T§\¡\´5¼¸T¿\¹\Ó9JÓ3KÓ!LÓMˆÔäŸG™GŸL™L¨¯©¸&À(ÓKÐÜ—g‘g—l‘l 4§?¡?°F¸gÀd×F\ÑF\ÐE]Ð]^Ð_c×_jÑ_jÐ^kÐkoÐ<pÓqˆàˆÔØˆŒä�+Ô !Û�Ø)-¯©«×);Ñ);¸CÀÓ)CÑ&�
Ø×!Ñ!×(Ñ(¬¯©¯©Ð6GÈ<ÐW[ÐI\Ó)]Ô^Ø—‘×#Ñ# D×$5Ñ$5°jÑ$AÖBñ ÷ ð
 �ùò 8÷ #Ö"ú÷ Õús+   Ã!I<Ã&I7Ã?I<ÇBJÉ7I<É<
JÊ
Jc                ó,   • [        U R                  5      $ ©N)r2   r4   ©r8   s    rB   Ú__len__ÚFGVCAircraft.__len__`   s   € Ü�4×$Ñ$Ó%Ð%ó    c                óì   • U R                   U   U R                  U   p2U R                  U5      nU R                  (       a  U R                  U5      nU R                  (       a  U R	                  U5      nXC4$ rE   )r4   r5   r7   r   r   )r8   ÚidxÚ
image_fileÚlabelÚimages        rB   Ú__getitem__ÚFGVCAircraft.__getitem__c   sa   € Ø ×-Ñ-¨cÑ2°D·L±LÀÑ4E�EØ—‘˜JÓ'ˆà�>�>Ø—N‘N 5Ó)ˆEà× × Ø×)Ñ)¨%Ó0ˆEàˆ|ÐrI   c                óp   • U R                  5       (       a  g[        U R                  U R                  5        g)zG
Download the FGVC Aircraft dataset archive and extract it under root.
N)r*   r	   Ú_URLr'   rF   s    rB   r)   ÚFGVCAircraft._downloado   s(   € ð ×Ñ×ÑØÜ$ T§Y¡Y°·	±	Õ:rI   c                ó´   • [         R                  R                  U R                  5      =(       a)    [         R                  R	                  U R                  5      $ rE   )r$   r%   Úexistsr(   ÚisdirrF   s    rB   r*   ÚFGVCAircraft._check_existsw   s/   € Ü�w‰w�~‰~˜dŸo™oÓ.×Q´2·7±7·=±=ÀÇÁÓ3QÐQrI   )r#   r(   r4   r5   r"   r3   r.   r7   )r'   z
str | Pathr   Ústrr   rX   r   úCallable | Noner   rY   r9   Úboolr7   zCallable[[str], Any]ÚreturnÚNone)r[   Úint)rK   r]   r[   ztuple[Any, Any])r[   r\   )r[   rZ   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__rR   r   r!   rG   rO   r)   r*   Ú__static_attributes__Ú__classcell__)rA   s   @rB   r   r      s˜   ø† ñð< e€Dð
  Ø )Ø%)Ø,0ØØ'5ð0àð0ð ð0ð ð	0ð
 #ð0ð *ð0ð ð0ð %ð0ð 
÷0ð 0ôd&ô
ô;÷Rò RrI   r   )Ú
__future__r   r$   Úpathlibr   Útypingr   r   Úfolderr   Úutilsr	   r
   Úvisionr   r   © rI   rB   Ú<module>rl      s*   ðÝ "ã 	Ý ß  å "ç ?Ý !ôkR�=õ kRrI   