§
    ù²ÅjÎ"  ã                   óð  — d dl Z d dlZd dl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ZddlmZ ddlmZmZmZ dd	d
dœZdZ G d„ de¦  «        Zddeeef         dee         dee	eef         ee         f         fd„Zdeeef         dededdfd„Zddeeef         dee         ddfd„Zddeeef         dee         deddfd„Z	 ddeeef         dee         deee                  deddf
d„ZdS )é    N)Úcontextmanager)ÚPath)ÚAnyÚDictÚIteratorÚListÚOptionalÚTupleÚUnioné   )ÚImageFolder)Úcheck_integrityÚextract_archiveÚverify_str_arg)zILSVRC2012_img_train.tarÚ 1d675b47d978889d74fa0da5fadfb00e)zILSVRC2012_img_val.tarÚ 29b22e2961454d5413ddabcf34fc5622)zILSVRC2012_devkit_t12.tar.gzÚ fa75699e90414af021442c21a62c3abf)ÚtrainÚvalÚdevkitzmeta.binc            	       óv   ‡ — e Zd ZdZddeeef         dededdfˆ fd„Zdd	„Z	e
defd
„¦   «         Zdefd„Zˆ xZS )ÚImageNeta]  `ImageNet <http://image-net.org/>`_ 2012 Classification Dataset.

    .. note::
        Before using this class, it is required to download ImageNet 2012 dataset from
        `here <https://image-net.org/challenges/LSVRC/2012/2012-downloads.php>`_ and
        place the files ``ILSVRC2012_devkit_t12.tar.gz`` and ``ILSVRC2012_img_train.tar``
        or ``ILSVRC2012_img_val.tar`` based on ``split`` in the root directory.

    Args:
        root (str or ``pathlib.Path``): Root directory of the ImageNet Dataset.
        split (string, optional): The dataset split, supports ``train``, or ``val``.
        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.
        loader (callable, optional): A function to load an image given its path.

     Attributes:
        classes (list): List of the class name tuples.
        class_to_idx (dict): Dict with items (class_name, class_index).
        wnids (list): List of the WordNet IDs.
        wnid_to_idx (dict): Dict with items (wordnet_id, class_index).
        imgs (list): List of (image path, class_index) tuples
        targets (list): The class_index value for each image in the dataset
    r   ÚrootÚsplitÚkwargsÚreturnNc                 óÐ  •‡— t           j                             |¦  «        x}| _        t	          |dd¦  «        | _        |                      ¦   «          t          | j        ¦  «        d         Š t          ¦   «         j	        | j
        fi |¤Ž || _        | j        | _        | j        | _        ˆfd„| j        D ¦   «         | _        d„ t          | j        ¦  «        D ¦   «         | _        d S )Nr   )r   r   r   c                 ó    •— g | ]
}‰|         ‘ŒS © r   )Ú.0ÚwnidÚwnid_to_classess     €úNC:\Projects\Historical\venv\Lib\site-packages\torchvision/datasets/imagenet.pyú
<listcomp>z%ImageNet.__init__.<locals>.<listcomp>=   s   ø€ ÐEÐEÐE°$˜¨Ô-ÐEÐEÐEó    c                 ó$   — i | ]\  }}|D ]}||“ŒŒS r   r   )r    ÚidxÚclssÚclss       r#   ú
<dictcomp>z%ImageNet.__init__.<locals>.<dictcomp>>   s-   € Ð_Ð_Ð_©)¨#¨tÐZ^Ð_Ð_ÐSV˜S #Ð_Ð_Ð_Ð_r%   )ÚosÚpathÚ
expanduserr   r   r   Úparse_archivesÚload_meta_fileÚsuperÚ__init__Úsplit_folderÚclassesÚwnidsÚclass_to_idxÚwnid_to_idxÚ	enumerate)Úselfr   r   r   r"   Ú	__class__s       @€r#   r1   zImageNet.__init__1   sÚ   øø€ Ýœ7×-Ò-¨dÑ3Ô3Ð3ˆˆtŒyÝ# E¨7Ð4DÑEÔEˆŒ
à×ÒÑÔÐÝ(¨¬Ñ3Ô3°AÔ6ˆà�‰ŒÔ˜Ô*Ð5Ð5¨fÐ5Ð5Ð5ØˆŒ	à”\ˆŒ
ØÔ,ˆÔØEÐEÐEÐE¸$¼*ÐEÑEÔEˆŒØ_Ð_µyÀÄÑ7NÔ7NÐ_Ñ_Ô_ˆÔÐÐr%   c                 ól  — t          t          j                             | j        t
          ¦  «        ¦  «        st          | j        ¦  «         t          j                             | j        ¦  «        sB| j	        dk    rt          | j        ¦  «         d S | j	        dk    rt          | j        ¦  «         d S d S d S )Nr   r   )r   r+   r,   Újoinr   Ú	META_FILEÚparse_devkit_archiveÚisdirr2   r   Úparse_train_archiveÚparse_val_archive©r8   s    r#   r.   zImageNet.parse_archives@   s¥   € Ý�rœwŸ|š|¨D¬IµyÑAÔAÑBÔBð 	,Ý  ¤Ñ+Ô+Ð+åŒw�}Š}˜TÔ.Ñ/Ô/ð 	-ØŒz˜WÒ$Ð$Ý# D¤IÑ.Ô.Ð.Ð.Ð.Ø”˜uÒ$Ð$Ý! $¤)Ñ,Ô,Ð,Ð,Ð,ð		-ð 	-ð %Ð$r%   c                 óV   — t           j                             | j        | j        ¦  «        S ©N)r+   r,   r;   r   r   rA   s    r#   r2   zImageNet.split_folderJ   s   € åŒw�|Š|˜DœI t¤zÑ2Ô2Ð2r%   c                 ó&   —  dj         di | j        ¤ŽS )NzSplit: {split}r   )ÚformatÚ__dict__rA   s    r#   Ú
extra_reprzImageNet.extra_reprN   s   € Ø&ÐÔ&Ð7Ð7¨¬Ð7Ð7Ð7r%   )r   )r   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Ústrr   r   r1   r.   Úpropertyr2   rG   Ú__classcell__)r9   s   @r#   r   r      sÓ   ø€ € € € € ðð ð4`ð `˜U 3¨ 9Ô-ð `°cð `Èsð `ÐW[ð `ð `ð `ð `ð `ð `ð-ð -ð -ð -ð ð3˜cð 3ð 3ð 3ñ „Xð3ð8˜Cð 8ð 8ð 8ð 8ð 8ð 8ð 8ð 8r%   r   r   Úfiler   c                 óè   — |€t           }t          j                             | |¦  «        }t	          |¦  «        rt          j        |d¬¦  «        S d}t          |                     || ¦  «        ¦  «        ‚)NT)Úweights_onlyz‚The meta file {} is not present in the root directory or is corrupted. This file is automatically created by the ImageNet dataset.)	r<   r+   r,   r;   r   ÚtorchÚloadÚRuntimeErrorrE   )r   rO   Úmsgs      r#   r/   r/   R   so   € Ø€|ÝˆÝŒ7�<Š<˜˜dÑ#Ô#€Då�tÑÔð 3ÝŒz˜$¨TÐ2Ñ2Ô2Ð2ðJð 	õ ˜3Ÿ:š: d¨DÑ1Ô1Ñ2Ô2Ð2r%   Úmd5c                 ó¬   — t          t          j                             | |¦  «        |¦  «        s%d}t	          |                     || ¦  «        ¦  «        ‚d S )Nz{The archive {} is not present in the root directory or is corrupted. You need to download it externally and place it in {}.)r   r+   r,   r;   rT   rE   )r   rO   rV   rU   s       r#   Ú_verify_archiverX   a   sW   € Ý�2œ7Ÿ<š<¨¨dÑ3Ô3°SÑ9Ô9ð 3ðEð 	õ ˜3Ÿ:š: d¨DÑ1Ô1Ñ2Ô2Ð2ð3ð 3r%   c           
      óH  ‡‡— ddl mŠ dt          dt          t          t
          t          f         t          t          t          t          df         f         f         fˆfd„}dt          dt          t
                   fd„}t          dt          t                   fd„¦   «         }t          d	         }|€|d         }|d
         }t          | ||¦  «          |¦   «         5 }t          t          j                             | |¦  «        |¦  «         t          j                             |d¦  «        } ||¦  «        \  Š}	 ||¦  «        }
ˆfd„|
D ¦   «         }t          j        |	|ft          j                             | t"          ¦  «        ¦  «         ddd¦  «         dS # 1 swxY w Y   dS )aI  Parse the devkit archive of the ImageNet2012 classification dataset and save
    the meta information in a binary file.

    Args:
        root (str or ``pathlib.Path``): Root directory containing the devkit archive
        file (str, optional): Name of devkit archive. Defaults to
            'ILSVRC2012_devkit_t12.tar.gz'
    r   NÚdevkit_rootr   .c                 ó¼  •‡— t           j                             | dd¦  «        }‰	                     |d¬¦  «        d         Št	          t          ‰Ž ¦  «        d         }ˆfd„t          |¦  «        D ¦   «         Št	          t          ‰Ž ¦  «        d d…         \  }}}d	„ |D ¦   «         }d
„ t          ||¦  «        D ¦   «         }d„ t          ||¦  «        D ¦   «         }||fS )NÚdatazmeta.matT)Ú
squeeze_meÚsynsetsé   c                 ó2   •— g | ]\  }}|d k    ¯‰|         ‘ŒS )r   r   )r    r'   Únum_childrenÚmetas      €r#   r$   z@parse_devkit_archive.<locals>.parse_meta_mat.<locals>.<listcomp>y   s-   ø€ ÐaÐaÐaÑ/˜c <È|Ð_`ÒO`ÐO`��S”	ÐO`ÐO`ÐO`r%   é   c                 óR   — g | ]$}t          |                     d ¦  «        ¦  «        ‘Œ%S )z, )Útupler   )r    r(   s     r#   r$   z@parse_devkit_archive.<locals>.parse_meta_mat.<locals>.<listcomp>{   s,   € Ð?Ð?Ð?¨t•5˜Ÿš DÑ)Ô)Ñ*Ô*Ð?Ð?Ð?r%   c                 ó   — i | ]\  }}||“Œ	S r   r   )r    r'   r!   s      r#   r*   z@parse_devkit_archive.<locals>.parse_meta_mat.<locals>.<dictcomp>|   s   € ÐCÐCÐC¡Y S¨$�s˜DÐCÐCÐCr%   c                 ó   — i | ]\  }}||“Œ	S r   r   )r    r!   r(   s      r#   r*   z@parse_devkit_archive.<locals>.parse_meta_mat.<locals>.<dictcomp>}   s   € ÐLÐLÐL©*¨$°˜4 ÐLÐLÐLr%   )r+   r,   r;   ÚloadmatÚlistÚzipr7   )
rZ   ÚmetafileÚnums_childrenÚidcsr4   r3   Úidx_to_wnidr"   rb   Úsios
           @€r#   Úparse_meta_matz,parse_devkit_archive.<locals>.parse_meta_matu   så   øø€ Ý”7—<’< ¨V°ZÑ@Ô@ˆØ�{Š{˜8°ˆ{Ñ5Ô5°iÔ@ˆÝ�S $˜ZÑ(Ô(¨Ô+ˆØaÐaÐaÐaµ9¸]Ñ3KÔ3KÐaÑaÔaˆÝ#¥C¨ JÑ/Ô/°°°Ô3Ñˆˆe�WØ?Ð?°wÐ?Ñ?Ô?ˆØCÐCµ#°d¸EÑ2BÔ2BÐCÑCÔCˆØLÐL½¸EÀ7Ñ8KÔ8KÐLÑLÔLˆØ˜OÐ+Ð+r%   c                 óÒ   — t           j                             | dd¦  «        }t          |¦  «        5 }|                     ¦   «         }d d d ¦  «         n# 1 swxY w Y   d„ |D ¦   «         S )Nr\   z&ILSVRC2012_validation_ground_truth.txtc                 ó,   — g | ]}t          |¦  «        ‘ŒS r   )Úint)r    Úval_idxs     r#   r$   zKparse_devkit_archive.<locals>.parse_val_groundtruth_txt.<locals>.<listcomp>„   s   € Ð5Ð5Ð5 •�G‘”Ð5Ð5Ð5r%   )r+   r,   r;   ÚopenÚ	readlines)rZ   rO   ÚtxtfhÚval_idcss       r#   Úparse_val_groundtruth_txtz7parse_devkit_archive.<locals>.parse_val_groundtruth_txt€   s›   € ÝŒw�|Š|˜K¨Ð1YÑZÔZˆÝ�$‰ZŒZð 	)˜5Ø—’Ñ(Ô(ˆHð	)ð 	)ð 	)ñ 	)ô 	)ð 	)ð 	)ð 	)ð 	)ð 	)ð 	)øøøð 	)ð 	)ð 	)ð 	)à5Ð5¨HÐ5Ñ5Ô5Ð5s   ±AÁAÁAc               3   ó”   K  — t          j        ¦   «         } 	 | V — t          j        | ¦  «         d S # t          j        | ¦  «         w xY wrC   )ÚtempfileÚmkdtempÚshutilÚrmtree)Útmp_dirs    r#   Úget_tmp_dirz)parse_devkit_archive.<locals>.get_tmp_dir†   sN   è è € åÔ"Ñ$Ô$ˆð	#ØˆMˆMˆMåŒM˜'Ñ"Ô"Ð"Ð"Ð"ø�FŒM˜'Ñ"Ô"Ð"Ð"øøøs	   —1 ±Ar   r   ÚILSVRC2012_devkit_t12c                 ó    •— g | ]
}‰|         ‘ŒS r   r   )r    r'   rn   s     €r#   r$   z(parse_devkit_archive.<locals>.<listcomp>›   s   ø€ Ð:Ð:Ð:¨#�[ Ô%Ð:Ð:Ð:r%   )Úscipy.ioÚiorL   r
   r   rs   r   r   r   ÚARCHIVE_METArX   r   r+   r,   r;   rR   Úsaver<   )r   rO   rp   ry   r€   Úarchive_metarV   r   rZ   r"   rx   Ú	val_wnidsrn   ro   s               @@r#   r=   r=   j   s  øø€ ð ÐÐÐÐÐð	,¥Cð 	,­Eµ$µs½C°x´.Å$ÅsÍEÕRUÐWZÐRZÌOÐG[ÔB\Ð2\Ô,]ð 	,ð 	,ð 	,ð 	,ð 	,ð 	,ð6­sð 6µt½C´yð 6ð 6ð 6ð 6õ ð#�¥#œð #ð #ð #ñ „^ð#õ   Ô)€LØ€|Ø˜AŒˆØ
�qŒ/€Cå�D˜$ Ñ$Ô$Ð$à	ˆ‰Œð P˜'Ý�œŸš T¨4Ñ0Ô0°'Ñ:Ô:Ð:å”g—l’l 7Ð,CÑDÔDˆØ'5 ~°kÑ'BÔ'BÑ$ˆ�_Ø,Ð,¨[Ñ9Ô9ˆØ:Ð:Ð:Ð:°Ð:Ñ:Ô:ˆ	åŒ
�O YÐ/µ´·²¸dÅIÑ1NÔ1NÑOÔOÐOðPð Pð Pñ Pô Pð Pð Pð Pð Pð Pð Pð Pøøøð Pð Pð Pð Pð Pð Ps   ÃB0FÆFÆFr   Úfolderc                 ó¸  ‡— t           d         }|€|d         }|d         }t          | ||¦  «         t          j                             | |¦  «        Št          t          j                             | |¦  «        ‰¦  «         ˆfd„t          j        ‰¦  «        D ¦   «         }|D ]7}t          |t          j                             |¦  «        d         d¬¦  «         Œ8dS )aÂ  Parse the train images archive of the ImageNet2012 classification dataset and
    prepare it for usage with the ImageNet dataset.

    Args:
        root (str or ``pathlib.Path``): Root directory containing the train images archive
        file (str, optional): Name of train images archive. Defaults to
            'ILSVRC2012_img_train.tar'
        folder (str, optional): Optional name for train images folder. Defaults to
            'train'
    r   Nr   r   c                 óP   •— g | ]"}t           j                             ‰|¦  «        ‘Œ#S r   ©r+   r,   r;   )r    ÚarchiveÚ
train_roots     €r#   r$   z'parse_train_archive.<locals>.<listcomp>µ   s)   ø€ ÐXÐXÐX°g•”—’˜Z¨Ñ1Ô1ÐXÐXÐXr%   T)Úremove_finished)r…   rX   r+   r,   r;   r   ÚlistdirÚsplitext)r   rO   r‰   r‡   rV   Úarchivesr�   rŽ   s          @r#   r?   r?       sÚ   ø€ õ   Ô(€LØ€|Ø˜AŒˆØ
�qŒ/€Cå�D˜$ Ñ$Ô$Ð$å”—’˜d FÑ+Ô+€JÝ•B”G—L’L  tÑ,Ô,¨jÑ9Ô9Ð9àXÐXÐXÐXÅÄÈJÑAWÔAWÐXÑXÔX€HØð Uð UˆÝ˜¥¤×!1Ò!1°'Ñ!:Ô!:¸1Ô!=ÈtÐTÑTÔTÐTÐTðUð Ur%   r   r4   c                 óâ  ‡	— t           d         }|€|d         }|d         }|€t          | ¦  «        d         }t          | ||¦  «         t          j                             | |¦  «        Š	t          t          j                             | |¦  «        ‰	¦  «         t          ˆ	fd„t          j        ‰	¦  «        D ¦   «         ¦  «        }t          |¦  «        D ]4}t          j
        t          j                             ‰	|¦  «        ¦  «         Œ5t          ||¦  «        D ]V\  }}t          j        |t          j                             ‰	|t          j                             |¦  «        ¦  «        ¦  «         ŒWdS )az  Parse the validation images archive of the ImageNet2012 classification dataset
    and prepare it for usage with the ImageNet dataset.

    Args:
        root (str or ``pathlib.Path``): Root directory containing the validation images archive
        file (str, optional): Name of validation images archive. Defaults to
            'ILSVRC2012_img_val.tar'
        wnids (list, optional): List of WordNet IDs of the validation images. If None
            is given, the IDs are loaded from the meta file in the root directory
        folder (str, optional): Optional name for validation images folder. Defaults to
            'val'
    r   Nr   r   c              3   óX   •K  — | ]$}t           j                             ‰|¦  «        V — Œ%d S rC   rŒ   )r    ÚimageÚval_roots     €r#   ú	<genexpr>z$parse_val_archive.<locals>.<genexpr>Õ   s3   øè è € ÐTÐT°e•B”G—L’L ¨5Ñ1Ô1ÐTÐTÐTÐTÐTÐTr%   )r…   r/   rX   r+   r,   r;   r   Úsortedr�   ÚsetÚmkdirrj   r}   ÚmoveÚbasename)
r   rO   r4   r‰   r‡   rV   Úimagesr!   Úimg_filer–   s
            @r#   r@   r@   º   sJ  ø€ õ   Ô&€LØ€|Ø˜AŒˆØ
�qŒ/€CØ€}Ý˜tÑ$Ô$ QÔ'ˆå�D˜$ Ñ$Ô$Ð$åŒw�|Š|˜D &Ñ)Ô)€HÝ•B”G—L’L  tÑ,Ô,¨hÑ7Ô7Ð7åÐTÐTÐTÐT½r¼zÈ(Ñ?SÔ?SÐTÑTÔTÑTÔT€Få�E‘
”
ð /ð /ˆÝ
Œ•”—’˜h¨Ñ-Ô-Ñ.Ô.Ð.Ð.å˜e VÑ,Ô,ð Xð X‰ˆˆhÝŒ�H�bœgŸlšl¨8°T½2¼7×;KÒ;KÈHÑ;UÔ;UÑVÔVÑWÔWÐWÐWðXð Xr%   rC   )Nr   )NNr   )r+   r}   r{   Ú
contextlibr   Úpathlibr   Útypingr   r   r   r   r	   r
   r   rR   r‰   r   Úutilsr   r   r   r…   r<   r   rL   r/   rX   r=   r?   r@   r   r%   r#   ú<module>r£      s•  ðØ 	€	€	€	Ø €€€Ø €€€Ø %Ð %Ð %Ð %Ð %Ð %Ø Ð Ð Ð Ð Ð Ø DÐ DÐ DÐ DÐ DÐ DÐ DÐ DÐ DÐ DÐ DÐ DÐ DÐ DÐ DÐ DÐ DÐ Dà €€€à Ð Ð Ð Ð Ð Ø CÐ CÐ CÐ CÐ CÐ CÐ CÐ CÐ CÐ Cð NØIØRðð €ð €	ð98ð 98ð 98ð 98ð 98ˆ{ñ 98ô 98ð 98ðx3ð 3˜˜s D˜yÔ)ð 3°¸#´ð 3È%ÐPTÐUXÐZ]ÐU]ÔP^Ð`dÐehÔ`iÐPiÔJjð 3ð 3ð 3ð 3ð3˜%  T 	Ô*ð 3°#ð 3¸Cð 3ÀDð 3ð 3ð 3ð 3ð3Pð 3P˜u S¨$ YÔ/ð 3P°xÀ´}ð 3PÐPTð 3Pð 3Pð 3Pð 3PðlUð U˜e C¨ IÔ.ð U°h¸s´mð UÐTWð UÐfjð Uð Uð Uð Uð6 joð!Xð !XØ
��T�	Ô
ð!XØ"*¨3¤-ð!XØ?GÈÈSÌ	Ô?Rð!XØcfð!Xà	ð!Xð !Xð !Xð !Xð !Xð !Xr%   