ó
    Eñi>(  ã                   ó¢   • S SK r S SKr S SKJr  S SKJrJrJrJr  S SK	J
r
  SSKJrJr  SSKJr  / SQrS	S
SSSSS.rSSSSSSS.r " S S\5      rg)é    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                   ó  ^ • \ rS rSrSr      SS\\\4   S\S\\\   \4   S\	\
   S\	\
   S	\S
\	\
\\\4   /\4      SS4U 4S jjjrSS jrSS jrS\S\\\4   4S jrS\4S jrS\S\S\4S jrS\4S jrSS jrSrU =r$ )ÚINaturalisté    aà  `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           	      óÊ  >• [        US[        R                  5       5      U l        [        TU ]  [        R                  R                  X5      XES9  [        R                  " USS9  U(       a  U R                  5         U R                  5       (       d  [        S5      e/ U l        0 U l        / U l        [!        U["        5      (       d  U/nU R                  S S S:X  a<  U Vs/ s H  n[        USS	/[$        Q75      PM     snU l        U R)                  5         O3U Vs/ s H  n[        USS
5      PM     snU l        U R+                  5         / U l        [/        U R                  5       Hh  u  pš[        R0                  " [        R                  R                  U R2                  U
5      5      nU H  nU R,                  R5                  Xœ45        M!     Mj     Xpl        g s  snf s  snf )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                €Ú]/home/mande/repo/quber/.venv/lib/python3.13/site-packages/torchvision/datasets/inaturalist.pyr2   ÚINaturalist.__init__F   s�  ø€ ô & g¨y¼,×:KÑ:KÓ:MÓNˆŒä‰ÑœŸ™Ÿ™ dÓ4À	ÐÑmä
�Š�D 4Ò(ÞØ�M‰MŒOà×!Ñ!×#Ñ#ÜÐiÓjÐjà)+ˆÔð <>ˆÔð 57ˆÔä˜+¤t×,Ñ,Ø&˜-ˆKØ�<‰<˜˜Ð˜vÓ%ÙfqÓrÒfqÐab¤¨q°-À&ÐA[Ì?ÑA[Ö \ÑfqÑrˆDÔØ�O‰OÕá]hÓiÒ]hÐXY¤¨q°-ÐARÖ SÑ]hÑiˆDÔØ×ÑÔ ð -/ˆŒ
ä#,¨T×-@Ñ-@Ö#AÑˆIÜ—J’JœrŸw™wŸ|™|¨D¯I©I°xÓ@ÓAˆEÛ�Ø—
‘
×!Ñ! 9Ð"4Ö5ó ñ $Bð
 �ùò  sùò  js   Ã!GÄG c                 ó’  • [        [        R                  " U R                  5      5      U l        [
         Vs0 s H  o0 _M     snU l        [        U R                  5       Hß  u  p#UR                  S5      n[        U5      S:w  a  [        SU S35      eUS   US :w  a  [        SUS    SUS 35      e0 n[        [
        US	S
 5       HW  u  pgXpR                  U   ;   a  U R                  U   U   nO)[        U R                  U   5      nX€R                  U   U'   X…U'   MY     U R                  R                  U5        Má     gs  snf )zInitialize based on 2021 layoutÚ_é   zUnexpected category name z, wrong number of piecesr   Ú05dzUnexpected category id z, expecting r	   é   N)Úsortedr3   rC   r"   r9   r>   r:   rB   ÚsplitÚlenr8   Úzipr;   rD   )	rE   ÚkrG   rH   ÚpiecesÚcat_mapÚcatÚnameÚcat_ids	            rL   r?   ÚINaturalist._init_2021v   sD  € ô %¤R§Z¢Z°·	±	Ó%:Ó;ˆÔõ 1@Ó @²¨1 B¢±Ñ @ˆÔä#,¨T×-@Ñ-@Ö#AÑˆIØ—^‘^ 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°+Ö>‘	�Ø×0Ñ0°Ñ5Ó5Ø!×2Ñ2°3Ñ7¸Ñ=‘Fä  ×!6Ñ!6°sÑ!;Ó<�FØ7=×)Ñ)¨#Ñ.¨tÑ4Ø%˜“ñ ?ð ×Ñ×&Ñ& wÖ/ò $Bùò !As   ·Ec           	      óê  • S0 0U l         Sn[        [        R                  " U R                  5      5      n[        U5       GH`  u  p4X0R                   S   U'   [        [        R                  " [        R                  R                  U R                  U5      5      5      nU Hü  nU R                  S:X  a  UnUS-  nO [        U5      nU[        U R                  5      :¼  a]  [        U R                  5      nU R                  R                  0 /Xx-
  S-   -  5        U R                  R                  S/Xx-
  S-   -  5        U R                  U   (       a  [        SU 35      eSU0U R                  U'   [        R                  R                  XF5      U R                  U'   Mþ     GMc     [        U R                  5       H  u  pšU
(       a  M  [        SU	 35      e   g	! [         a    [        SU 35      ef = f)
z$Initialize based on 2017-2019 layoutr/   r   r   r	   z!Unexpected non-numeric dir name: Ú zDuplicate category zMissing category N)r:   rS   r3   rC   r"   rB   r4   r5   r#   ÚintÚ
ValueErrorr8   rU   r;   Úextendr9   )rE   Ú	cat_indexÚsuper_categoriesÚsindexÚscatÚsubcategoriesÚsubcatÚsubcat_iÚold_lenÚcindexÚcs              rL   r@   ÚINaturalist._init_pre2021Ž   sÀ  € ð ")¨" ˆÔàˆ	Ü!¤"§*¢*¨T¯Y©YÓ"7Ó8ÐÜ%Ð&6×7‰LˆFØ39×!Ñ! 'Ñ*¨4Ñ0Ü"¤2§:¢:¬b¯g©g¯l©l¸4¿9¹9ÀdÓ.KÓ#LÓMˆMÛ'�Ø—<‘< 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Ó0J�×#Ñ# HÓ-ô# (ñ 8ô. # 4×#6Ñ#6Ö7‰IˆFß�1Ü"Ð%6°v°hÐ#?Ó@Ð@ò 8øô &ó YÜ*Ð-NÈvÈhÐ+WÓXÐXðYús   Â<GÇG2rA   c                 óV  • U R                   U   u  p#[        R                  R                  U R                  U R
                  U   U5      nU R                  b  U R                  U5      O[        R                  " U5      n/ nU R                   H=  nUS:X  a  UR                  U5        M  UR                  U R                  U   U   5        M?     [        U5      S:”  a  [        U5      OUS   nU R                  b  U R                  U5      nU R                  b  U R                  U5      nXV4$ )zv
Args:
    index (int): Index

Returns:
    tuple: (image, target) where the type of target specified by target_type.
r.   r	   r   )rA   r3   r4   r5   r"   r9   r(   r   Úopenr$   rD   r;   rU   Útupler%   r&   )rE   rA   r\   rJ   Ú
image_pathÚimgÚtargetrF   s           rL   Ú__getitem__Ú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àˆ{Ðó    c                 ó,   • [        U R                  5      $ )N)rU   rA   ©rE   s    rL   Ú__len__ÚINaturalist.__len__Î   s   € Ü�4—:‘:‹Ðrv   Úcategory_typeÚcategory_idc                 óè   • US:X  a  U R                   U   $ XR                  ;  a  [        SU S35      eU R                  U   R                  5        H  u  p4XB:X  d  M  Us  $    [        SU SU 35      e)zÖ
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 )r9   r:   ra   Úitems)rE   r{   r|   r[   Úids        rL   Úcategory_nameÚINaturalist.category_nameÑ   s…   € ð ˜FÓ"Ø×&Ñ& {Ñ3Ð3à×$9Ñ$9Ó9Ü Ð#:¸=¸/ÈÐ!KÓLÐLà $× 5Ñ 5°mÑ D× JÑ JÖ L‘H�DØÕ(Ø#šñ !Mô !Ð#7¸°}ÀEÈ-ÈÐ!YÓZÐZrv   c                 óº   • [         R                  R                  U R                  5      =(       a,    [	        [         R
                  " U R                  5      5      S:„  $ )Nr   )r3   r4   Úexistsr"   rU   rC   rx   s    rL   r7   ÚINaturalist._check_existså   s5   € Ü�w‰w�~‰~˜dŸi™iÓ(×K¬S´·²¸D¿I¹IÓ1FÓ-GÈ!Ñ-KÐKrv   c                 óT  • U R                  5       (       a  g [        R                  R                  U R                  5      n[        [        U R                     XR                   S3[        U R                     S9  [        R                  R                  U[        R                  R                  [        U R                     5      R                  S5      5      n[        R                  R                  U5      (       d  [        SU 35      e[        R                  " X R                  5        g )Nz.tgz)ÚfilenameÚmd5z.tar.gzz#Unable to find downloaded files at )r7   r3   r4   Údirnamer"   r
   r0   r#   ÚDATASET_MD5r5   ÚbasenameÚrstripr„   r8   Úrename)rE   Ú	base_rootÚorig_dir_names      rL   r'   ÚINaturalist.downloadè   sÊ   € Ø×Ñ×ÑØä—G‘G—O‘O D§I¡IÓ.ˆ	ä$Ü˜Ÿ™Ñ&¨	¿|¹|¸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Ü
�	Š	�-§¡Õ+rv   )r9   r:   r;   rA   r(   r$   r#   )r   r.   NNFN)r)   N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r   Ústrr   r=   r   r   Úboolr   r2   r?   r@   r`   rp   rt   ry   r�   r7   r'   Ú__static_attributes__Ú__classcell__)rK   s   @rL   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÷,ò ,rv   r    )r3   Úos.pathÚpathlibr   Útypingr   r   r   r   ÚPILr   Úutilsr
   r   Úvisionr   r>   r0   rŠ   r    © rv   rL   Ú<module>r¡      sg   ðÛ 	Û Ý ß 1Ó 1å ç ?Ý !âL€ð aØ]Ø]Ø[ØeØYñ€ð /Ø.Ø.Ø4Ø9Ø4ñ€ôU,�-õ U,rv   