
    QЦi!                        S SK r S SKrS SKrS SKJr  S SKJr  S SKJrJ	r	J
r
JrJrJrJr  S SKrSSKJr  SSKJrJrJr  SS	S
S.rSr " S S\5      rSS\\\4   S\\   S\\	\\4   \\   4   4S jjrS\\\4   S\S\SS4S jrSS\\\4   S\\   SS4S jjrSS\\\4   S\\   S\SS4S jjr SS\\\4   S\\   S\\\      S\SS4
S jjrg)    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            	       ~   ^  \ rS rSrSrSS\\\4   S\S\SS4U 4S jjjr	SS	 jr
\S\4S
 j5       rS\4S jrSrU =r$ )ImageNet   a	  `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
rootsplitkwargsreturnNc                    > [         R                  R                  U5      =ol        [	        USS5      U l        U R                  5         [        U R                  5      S   n[        T	U ]$  " U R                  40 UD6  Xl        U R                  U l        U R                  U l        U R                   Vs/ s H  oTU   PM	     snU l        [        U R                  5       VVVs0 s H  u  pgU  H  oU_M     M     snnnU l        g s  snf s  snnnf )Nr   )r   r   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   wnid_to_classeswnididxclsscls	__class__s
            \/var/www/html/ai-image-ml/venv/lib/python3.13/site-packages/torchvision/datasets/imagenet.pyr%   ImageNet.__init__1   s    77--d33y#E74DE
(3A6**5f5	\\
,,:>**E*$-*E7@7N_7N)#Z^SV#XZ^S7N_ F_s   2D!D	c                    [        [        R                  R                  U R                  [
        5      5      (       d  [        U R                  5        [        R                  R                  U R                  5      (       dM  U R                  S:X  a  [        U R                  5        g U R                  S:X  a  [        U R                  5        g g g )Nr   r   )r   r   r    joinr   	META_FILEparse_devkit_archiveisdirr&   r   parse_train_archiveparse_val_archiver,   s    r3   r"   ImageNet.parse_archives@   s    rww||DIIyABB +ww}}T..//zzW$#DII.u$!$)), % 0    c                 j    [         R                  R                  U R                  U R                  5      $ N)r   r    r6   r   r   r<   s    r3   r&   ImageNet.split_folderJ   s    ww||DIItzz22r>   c                 :    SR                   " S0 U R                  D6$ )NzSplit: {split} )format__dict__r<   s    r3   
extra_reprImageNet.extra_reprN   s    &&777r>   )r)   r'   r   r   r*   r(   )r   )r   N)__name__
__module____qualname____firstlineno____doc__r   strr   r   r%   r"   propertyr&   rF   __static_attributes____classcell__)r2   s   @r3   r   r      so    4`U39- `c `s `W[ ` `- 3c 3 38C 8 8r>   r   r   filer   c                     Uc  [         n[        R                  R                  X5      n[	        U5      (       a  [
        R                  " USS9$ Sn[        UR                  X5      5      e)NT)weights_onlyzThe meta file {} is not present in the root directory or is corrupted. This file is automatically created by the ImageNet dataset.)	r7   r   r    r6   r   torchloadRuntimeErrorrD   )r   rQ   msgs      r3   r#   r#   R   s[    |77<<#Dtzz$T22J 	 3::d122r>   md5c                     [        [        R                  R                  X5      U5      (       d  Sn[	        UR                  X5      5      eg )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    r6   rV   rD   )r   rQ   rX   rW   s       r3   _verify_archiverZ   a   sB    277<<3S99E 	 3::d122 :r>   c           
        ^ SSK Jm  S[        S[        [        [
        [        4   [        [        [        [        S4   4   4   4U4S jjnS[        S[        [
           4S jn[        S[        [           4S j5       n[        S	   nUc  US   nUS
   n[        XU5        U" 5        n[        [        R                  R                  X5      U5        [        R                  R                  US5      nU" U5      u  pU" U5      nU Vs/ s H  oU   PM	     nn[        R                   " X4[        R                  R                  U ["        5      5        SSS5        gs  snf ! , (       d  f       g= f)a1  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                   > [         R                  R                  U SS5      nTR                  USS9S   n[	        [        U6 5      S   n[        U5       VVs/ s H  u  pEUS:X  d  M  X$   PM     nnn[	        [        U6 5      S S u  pgnU V	s/ s H  n	[        U	R                  S	5      5      PM     nn	[        Xg5       VV
s0 s H  u  pJXJ_M	     nnn
[        Xx5       V
V	s0 s H  u  pX_M	     nn
n	X4$ s  snnf s  sn	f s  sn
nf s  sn	n
f )
Ndatazmeta.matT)
squeeze_mesynsets   r      z, )	r   r    r6   loadmatlistzipr+   tupler   )r\   metafilemetanums_childrenr/   num_childrenidcsr(   r'   r0   r.   idx_to_wnidr-   sios                r3   parse_meta_mat,parse_devkit_archive.<locals>.parse_meta_matu   s    77<<VZ@{{8{5i@S$Z(+3<]3Ka3K/c|_`O`		3Ka#CJ/3W7>?wt5D)*w?25d2BC2BYSsy2BC8;E8KL8K*$4:8KL++ b?CLs   C5(C5$C;D !Dc                     [         R                  R                  U SS5      n[        U5       nUR	                  5       nS S S 5        W Vs/ s H  n[        U5      PM     sn$ ! , (       d  f       N*= fs  snf )Nr^   z&ILSVRC2012_validation_ground_truth.txt)r   r    r6   open	readlinesint)r\   rQ   txtfhval_idcsval_idxs        r3   parse_val_groundtruth_txt7parse_devkit_archive.<locals>.parse_val_groundtruth_txt   sV    ww||K1YZ$Z5(H ,45HGH55 Z5s   A"
A3"
A0c               3      #    [         R                  " 5       n  U v   [        R                  " U 5        g ! [        R                  " U 5        f = f7fr@   )tempfilemkdtempshutilrmtree)tmp_dirs    r3   get_tmp_dir)parse_devkit_archive.<locals>.get_tmp_dir   s5     ""$	#MMM'"FMM'"s   A4 AAAr   r   ILSVRC2012_devkit_t12)scipy.ioiorM   r
   r   rs   r   r   r   ARCHIVE_METArZ   r   r   r    r6   rT   saver7   )r   rQ   rn   rw   r   archive_metarX   r~   r\   rl   r-   ru   r/   	val_wnidsrm   s                 @r3   r8   r8   j   s:    	,C 	,E$sCx.$sERUWZRZOG[B\2\,] 	,6s 6tCy 6 ## # #  )L|A
q/CD$	'T0':ggll7,CD'5k'B$,[919:#%	:

O/dI1NO 
 ; 
s   (A E E<E E  
E.folderc                    [         S   nUc  US   nUS   n[        XU5        [        R                  R	                  X5      n[        [        R                  R	                  X5      U5        [        R                  " U5       Vs/ s H"  n[        R                  R	                  XV5      PM$     nnU H.  n[        U[        R                  R                  U5      S   SS9  M0     gs  snf )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   T)remove_finished)r   rZ   r   r    r6   r   listdirsplitext)r   rQ   r   r   rX   
train_rootarchivearchivess           r3   r:   r:      s      (L|A
q/CD$d+JBGGLL,j9ACJAWXAWgZ1AWHX!1!1'!:1!=tT  Ys   )C#r(   c                   ^	 [         S   nUc  US   nUS   nUc  [        U 5      S   n[        XU5        [        R                  R                  X5      m	[        [        R                  R                  X5      T	5        [        U	4S j[        R                  " T	5       5       5      n[        U5       H7  n[        R                  " [        R                  R                  T	U5      5        M9     [        X&5       HX  u  px[        R                  " U[        R                  R                  T	U[        R                  R                  U5      5      5        MZ     g)aR  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   d   >#    U  H%  n[         R                  R                  TU5      v   M'     g 7fr@   )r   r    r6   ).0imageval_roots     r3   	<genexpr>$parse_val_archive.<locals>.<genexpr>   s%     T?SeBGGLL511?Ss   -0)r   r#   rZ   r   r    r6   r   sortedr   setmkdirre   r|   movebasename)
r   rQ   r(   r   r   rX   imagesr.   img_filer   s
            @r3   r;   r;      s      &L|A
q/C}t$Q'D$ww||D)HBGGLL,h7Trzz(?STTFE

h-.  e,Hbggll8T277;K;KH;UVW -r>   r@   )Nr   )NNr   )r   r|   rz   
contextlibr   pathlibr   typingr   r   r   r   r	   r
   r   rT   r   r   utilsr   r   r   r   r7   r   rM   r#   rZ   r8   r:   r;   rC   r>   r3   <module>r      sq   	   %  D D D   C C NIR 	98{ 98x3sDy) 3# 3%PTUXZ]U]P^`deh`iPiJj 33%T	* 3# 3C 3D 33PuS$Y/ 3Px} 3PPT 3PlUeCI. Uhsm UTW Ufj U6 jo!X
T	
!X"*3-!X?GS	?R!Xcf!X	!Xr>   