Ë
    [²j>(  ã                   ó¢   — d dl Z d dlZ d dlmZ d dlmZmZmZmZ d dl	m
Z
 ddlmZmZ ddlmZ g d¢Zd	d
dddddœZdddddddœZ G d„ de«      Zy)é    N)ÚPath)ÚAnyÚCallableÚOptionalÚUnion)ÚImageé   )Údownload_and_extract_archiveÚverify_str_arg)ÚVisionDataset)ÚkingdomÚphylumÚclassÚorderÚfamilyÚgenuszRhttps://ml-inat-competition-datasets.s3.amazonaws.com/2017/train_val_images.tar.gzzOhttps://ml-inat-competition-datasets.s3.amazonaws.com/2018/train_val2018.tar.gzzOhttps://ml-inat-competition-datasets.s3.amazonaws.com/2019/train_val2019.tar.gzzGhttps://ml-inat-competition-datasets.s3.amazonaws.com/2021/train.tar.gzzLhttps://ml-inat-competition-datasets.s3.amazonaws.com/2021/train_mini.tar.gzzEhttps://ml-inat-competition-datasets.s3.amazonaws.com/2021/val.tar.gz)Ú2017Ú2018Ú2019Ú
2021_trainÚ2021_train_miniÚ
2021_validÚ 7c784ea5e424efaec655bd392f87301fÚ b1c6952ce38f31868cc50ea72d066cc3Ú c60a6e2962c9b8ccbd458d12c8582644Ú e0526d53c7f7b2e3167b2b43bb2690edÚ db6ed8330e634445efc8fec83ae81442Ú f6f6e0e242e3d4c9569ba56400938afcc                   óò   ‡ — e Zd ZdZ	 	 	 	 	 	 ddeeef   dedeee   ef   dee	   dee	   de
d	ee	eeef   gef      d
dfˆ fd„Zdd„Zdd„Zded
eeef   fd„Zd
efd„Zdeded
efd„Zd
e
fd„Zdd„Zˆ xZS )ÚINaturalistaX  `iNaturalist <https://github.com/visipedia/inat_comp>`_ Dataset.

    Args:
        root (str or ``pathlib.Path``): Root directory of dataset where the image files are stored.
            This class does not require/use annotation files.
        version (string, optional): Which version of the dataset to download/use. One of
            '2017', '2018', '2019', '2021_train', '2021_train_mini', '2021_valid'.
            Default: `2021_train`.
        target_type (string or list, optional): Type of target to use, for 2021 versions, one of:

            - ``full``: the full category (species)
            - ``kingdom``: e.g. "Animalia"
            - ``phylum``: e.g. "Arthropoda"
            - ``class``: e.g. "Insecta"
            - ``order``: e.g. "Coleoptera"
            - ``family``: e.g. "Cleridae"
            - ``genus``: e.g. "Trichodes"

            for 2017-2019 versions, one of:

            - ``full``: the full (numeric) category
            - ``super``: the super category, e.g. "Amphibians"

            Can also be a list to output a tuple with all specified target types.
            Defaults to ``full``.
        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.
        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.
    NÚrootÚversionÚtarget_typeÚ	transformÚtarget_transformÚdownloadÚloaderÚreturnc           	      ó¨  •— t        |dt        j                  «       «      | _        t        ‰| �  t        j                  j                  ||«      ||¬«       t        j                  |d¬«       |r| j                  «        | j                  «       st        d«      ‚g | _        i | _        g | _        t!        |t"        «      s|g}| j                  d d dk(  r9|D �cg c]  }t        |dd	gt$        ¢­«      ‘Œ c}| _        | j)                  «        n0|D �cg c]  }t        |dd
«      ‘Œ c}| _        | j+                  «        g | _        t/        | j                  «      D ]f  \  }	}
t        j0                  t        j                  j                  | j2                  |
«      «      }|D ]  }| j,                  j5                  |	|f«       Œ! Œh || _        y c c}w c c}w )Nr"   )r$   r%   T)Úexist_okzHDataset not found or corrupted. You can use download=True to download ité   Ú2021r#   Úfull)r-   Úsuper)r   ÚDATASET_URLSÚkeysr"   r.   Ú__init__ÚosÚpathÚjoinÚmakedirsr&   Ú_check_existsÚRuntimeErrorÚall_categoriesÚcategories_indexÚcategories_mapÚ
isinstanceÚlistÚCATEGORIES_2021r#   Ú
_init_2021Ú_init_pre2021ÚindexÚ	enumerateÚlistdirr!   Úappendr'   )Úselfr!   r"   r#   r$   r%   r&   r'   ÚtÚ	dir_indexÚdir_nameÚfilesÚfnameÚ	__class__s                €ú_/var/www/html/ia-enhanced/venv/lib/python3.12/site-packages/torchvision/datasets/inaturalist.pyr1   zINaturalist.__init__F   s‘  ø€ ô & g¨y¼,×:KÑ:KÓ:MÓNˆŒä‰ÑœŸ™Ÿ™ d¨GÓ4À	Ð\lÐÔmä
�‰�D 4Õ(ÙØ�M‰MŒOà×!Ñ!Ô#ÜÐiÓjÐjà)+ˆÔð <>ˆÔð 57ˆÔä˜+¤tÔ,Ø&˜-ˆKØ�<‰<˜˜Ð˜vÒ%ØfqÖrÐab¤¨q°-À&ÐA[Ì?ÑA[Õ \ÒrˆDÔØ�O‰OÕà]hÖiÐXY¤¨q°-ÐARÕ SÒiˆDÔØ×ÑÔ ð -/ˆŒ
ä#,¨T×-@Ñ-@Ó#Aò 	6ÑˆI�xÜ—J‘JœrŸw™wŸ|™|¨D¯I©I°xÓ@ÓAˆEØò 6�Ø—
‘
×!Ñ! 9¨eÐ"4Õ5ñ6ð	6ð
 ˆ�ùò  sùò  js   ÃG
ÄGc                 ó†  — t        t        j                  | j                  «      «      | _        t
        D �ci c]  }|i “Œ c}| _        t        | j                  «      D ]Ý  \  }}|j                  d«      }t        |«      dk7  rt        d|› d�«      ‚|d   |d›k7  rt        d|d   › d|d›�«      ‚i }t        t
        |d	d
 «      D ]X  \  }}|| j                  |   v r| j                  |   |   }n*t        | j                  |   «      }|| j                  |   |<   |||<   ŒZ | j                  j                  |«       Œß yc c}w )zInitialize based on 2021 layoutÚ_é   zUnexpected category name z, wrong number of piecesr   Ú05dzUnexpected category id z, expecting r	   é   N)Úsortedr2   rB   r!   r8   r=   r9   rA   ÚsplitÚlenr7   Úzipr:   rC   )	rD   ÚkrF   rG   ÚpiecesÚcat_mapÚcatÚnameÚcat_ids	            rK   r>   zINaturalist._init_2021v   sU  € ô %¤R§Z¡Z°·	±	Ó%:Ó;ˆÔô 1@Ö @¨1  B¡Ò @ˆÔä#,¨T×-@Ñ-@Ó#Aò 	0ÑˆI�xØ—^‘^ CÓ(ˆFÜ�6‹{˜aÒÜ"Ð%>¸x¸jÐH`Ð#aÓbÐbØ�a‰y˜y¨˜oÒ.Ü"Ð%<¸VÀA¹Y¸KÀ|ÐT]Ð^aÐSbÐ#cÓdÐdØˆGÜ ¤°&¸¸1°+Ó>ò &‘	��TØ˜4×0Ñ0°Ñ5Ñ5Ø!×2Ñ2°3Ñ7¸Ñ=‘Fä  ×!6Ñ!6°sÑ!;Ó<�FØ7=�D×)Ñ)¨#Ñ.¨tÑ4Ø%�˜’ð&ð ×Ñ×&Ñ& wÕ/ñ	0ùò !As   ¶
D>c           	      óÌ  — di i| _         d}t        t        j                  | j                  «      «      }t        |«      D �]Z  \  }}|| j                   d   |<   t        t        j                  t        j                  j                  | j                  |«      «      «      }|D ]÷  }| j                  dk(  r|}|dz  }n	 t        |«      }|t        | j                  «      k\  r_t        | j                  «      }| j                  j                  i g||z
  dz   z  «       | j                  j                  dg||z
  dz   z  «       | j                  |   rt        d|› �«      ‚d|i| j                  |<   t        j                  j                  ||«      | j                  |<   Œù �Œ] t        | j                  «      D ]  \  }	}
|
rŒ	t        d|	› �«      ‚ y	# t        $ r t        d|› �«      ‚w xY w)
z$Initialize based on 2017-2019 layoutr.   r   r   r	   z!Unexpected non-numeric dir name: Ú zDuplicate category zMissing category N)r9   rQ   r2   rB   r!   rA   r3   r4   r"   ÚintÚ
ValueErrorr7   rS   r:   Úextendr8   )rD   Ú	cat_indexÚsuper_categoriesÚsindexÚscatÚsubcategoriesÚsubcatÚsubcat_iÚold_lenÚcindexÚcs              rK   r?   zINaturalist._init_pre2021Ž   sß  € ð ")¨" ˆÔàˆ	Ü!¤"§*¡*¨T¯Y©YÓ"7Ó8ÐÜ%Ð&6Ó7ó 	K‰LˆF�DØ39ˆD×!Ñ! 'Ñ*¨4Ñ0Ü"¤2§:¡:¬b¯g©g¯l©l¸4¿9¹9ÀdÓ.KÓ#LÓMˆMØ'ò K�Ø—<‘< 6Ò)à(�HØ ‘N‘IðYÜ#& v£;˜ð œs 4×#6Ñ#6Ó7Ò7Ü! $×"5Ñ"5Ó6�GØ×'Ñ'×.Ñ.°¨t°xÀ'Ñ7IÈAÑ7MÑ/NÔOØ×'Ñ'×.Ñ.°¨t°xÀ'Ñ7IÈAÑ7MÑ/NÔOØ×&Ñ& xÒ0Ü&Ð)<¸V¸HÐ'EÓFÐFØ18¸&Ð0A�×#Ñ# HÑ-Ü02·±·±¸TÀ6Ó0J�×#Ñ# HÒ-ò#Kð	Kô. # 4×#6Ñ#6Ó7ò 	A‰IˆF�AÚÜ"Ð%6°v°hÐ#?Ó@Ð@ñ	Aøô &ò YÜ*Ð-NÈvÈhÐ+WÓXÐXðYús   Â;GÇG#r@   c                 óH  — | j                   |   \  }}t        j                  j                  | j                  | j
                  |   |«      }| j                  �| j                  |«      nt        j                  |«      }g }| j                  D ]:  }|dk(  r|j                  |«       Œ|j                  | j                  |   |   «       Œ< t        |«      dkD  rt        |«      n|d   }| j                  �| j                  |«      }| j                  �| j                  |«      }||fS )zž
        Args:
            index (int): Index

        Returns:
            tuple: (image, target) where the type of target specified by target_type.
        r-   r	   r   )r@   r2   r3   r4   r!   r8   r'   r   Úopenr#   rC   r:   rS   Útupler$   r%   )rD   r@   rZ   rI   Ú
image_pathÚimgÚtargetrE   s           rK   Ú__getitem__zINaturalist.__getitem__±   s   € ð Ÿ
™
 5Ñ)‰ˆ�Ü—W‘W—\‘\ $§)¡)¨T×-@Ñ-@ÀÑ-HÈ%ÓPˆ
Ø)-¯©Ð)@ˆd�k‰k˜*Ô%ÄeÇjÁjÐQ[ÓF\ˆàˆØ×!Ñ!ò 	>ˆAØ�FŠ{Ø—‘˜fÕ%à—‘˜d×1Ñ1°&Ñ9¸!Ñ<Õ=ð		>ô
 #& f£+°¢/”�v”°v¸a±yˆà�>‰>Ð%Ø—.‘. Ó%ˆCà× Ñ Ð,Ø×*Ñ*¨6Ó2ˆFà�Fˆ{Ðó    c                 ó,   — t        | j                  «      S )N)rS   r@   ©rD   s    rK   Ú__len__zINaturalist.__len__Î   s   € Ü�4—:‘:‹Ðrq   Úcategory_typeÚcategory_idc                 óâ   — |dk(  r| j                   |   S || j                  vrt        d|› d�«      ‚| j                  |   j                  «       D ]  \  }}||k(  sŒ|c S  t        d|› d|› �«      ‚)a  
        Args:
            category_type(str): one of "full", "kingdom", "phylum", "class", "order", "family", "genus" or "super"
            category_id(int): an index (class id) from this category

        Returns:
            the name of the category
        r-   zInvalid category type 'ú'zInvalid category id z for )r8   r9   r^   Úitems)rD   ru   rv   rY   Úids        rK   Úcategory_namezINaturalist.category_nameÑ   s�   € ð ˜FÒ"Ø×&Ñ& {Ñ3Ð3à D×$9Ñ$9Ñ9Ü Ð#:¸=¸/ÈÐ!KÓLÐLà $× 5Ñ 5°mÑ D× JÑ JÓ Lò $‘H�D˜"Ø˜[Ó(Ø#šð$ô !Ð#7¸°}ÀEÈ-ÈÐ!YÓZÐZrq   c                 ó®   — t         j                  j                  | j                  «      xr+ t	        t        j
                  | j                  «      «      dkD  S )Nr   )r2   r3   Úexistsr!   rS   rB   rs   s    rK   r6   zINaturalist._check_existså   s5   € Ü�w‰w�~‰~˜dŸi™iÓ(ÒK¬S´·±¸D¿I¹IÓ1FÓ-GÈ!Ñ-KÐKrq   c                 óH  — | j                  «       ry t        j                  j                  | j                  «      }t        t        | j                     || j                  › d�t        | j                     ¬«       t        j                  j                  |t        j                  j                  t        | j                     «      j                  d«      «      }t        j                  j                  |«      st        d|› �«      ‚t        j                  || j                  «       y )Nz.tgz)ÚfilenameÚmd5z.tar.gzz#Unable to find downloaded files at )r6   r2   r3   Údirnamer!   r
   r/   r"   ÚDATASET_MD5r4   ÚbasenameÚrstripr}   r7   Úrename)rD   Ú	base_rootÚorig_dir_names      rK   r&   zINaturalist.downloadè   sÈ   € Ø×ÑÔØä—G‘G—O‘O D§I¡IÓ.ˆ	ä$Ü˜Ÿ™Ñ&¨	¸t¿|¹|¸nÈDÐ<QÔWbÐcg×coÑcoÑWpõ	
ô Ÿ™Ÿ™ Y´·±×0@Ñ0@ÄÈdÏlÉlÑA[Ó0\×0cÑ0cÐdmÓ0nÓoˆÜ�w‰w�~‰~˜mÔ,ÜÐ!DÀ]ÀOÐTÓUÐUÜ
�	‰	�- §¡Õ+rq   )r   r-   NNFN)r(   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Ústrr   r<   r   r   Úboolr   r1   r>   r?   r]   rl   rp   rt   r{   r6   r&   Ú__classcell__)rJ   s   @rK   r    r        s  ø„ ñ#ðP $Ø-3Ø(,Ø/3ØØ>Bñ.à�C˜�IÑð.ð ð.ð ˜4 ™9 c˜>Ñ*ð	.ð
 ˜HÑ%ð.ð # 8Ñ,ð.ð ð.ð ˜ 5¨¨d¨Ñ#3Ð"4°cÐ"9Ñ:Ñ;ð.ð 
õ.ó`0ó0!AðF ð ¨¨s°C¨x©ó ð:˜ó ð[¨3ð [¸Sð [ÀSó [ð(L˜tó L÷,rq   r    )r2   Úos.pathÚpathlibr   Útypingr   r   r   r   ÚPILr   Úutilsr
   r   Úvisionr   r=   r/   r‚   r    © rq   rK   ú<module>r–      sg   ðÛ 	Û Ý ß 1Ó 1å ç ?Ý !âL€ð aØ]Ø]Ø[ØeØYñ€ð /Ø.Ø.Ø4Ø9Ø4ñ€ôU,�-õ U,rq   