
    h"                        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  S SK	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)Iterator)contextmanager)Path)AnyOptional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 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.
    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.

 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
            U/var/www/auris/envauris/lib/python3.13/site-packages/torchvision/datasets/imagenet.pyr"   ImageNet.__init__4   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    r0   r   ImageNet.parse_archivesC   s    rww||DIIyABB +ww}}T..//zzW$#DII.u$!$)), % 0    c                 j    [         R                  R                  U R                  U R                  5      $ N)r   r   r3   r   r   r9   s    r0   r#   ImageNet.split_folderM   s    ww||DIItzz22r;   c                 :    SR                   " S0 U R                  D6$ )NzSplit: {split} )format__dict__r9   s    r0   
extra_reprImageNet.extra_reprQ   s    &&777r;   )r&   r$   r   r   r'   r%   )r   )r   N)__name__
__module____qualname____firstlineno____doc__r   strr   r   r"   r   propertyr#   rC   __static_attributes____classcell__)r/   s   @r0   r   r      so    8`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.)	r4   r   r   r3   r   torchloadRuntimeErrorrA   )r   rN   msgs      r0   r    r    U   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   r3   rS   rA   )r   rN   rU   rT   s       r0   _verify_archiverW   d   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   r3   loadmatlistzipr(   tupler   )rY   metafilemetanums_childrenr,   num_childrenidcsr%   r$   r-   r+   idx_to_wnidr*   sios                r0   parse_meta_mat,parse_devkit_archive.<locals>.parse_meta_matx   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   r3   open	readlinesint)rY   rN   txtfhval_idcsval_idxs        r0   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    r0   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iorJ   rc   dictrp   ra   r   r   ARCHIVE_METArW   r   r   r   r3   rQ   saver4   )r   rN   rk   rt   r|   archive_metarU   r{   rY   ri   r*   rr   r,   	val_wnidsrj   s                 @r0   r5   r5   m   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   rW   r   r   r3   r   listdirsplitext)r   rN   r   r   rU   
train_rootarchivearchivess           r0   r7   r7      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   r3   ).0imageval_roots     r0   	<genexpr>$parse_val_archive.<locals>.<genexpr>   s%     T?SeBGGLL511?Ss   -0)r   r    rW   r   r   r3   r   sortedr   setmkdirrb   ry   movebasename)
r   rN   r%   r   r   rU   imagesr+   img_filer   s
            @r0   r8   r8      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   ry   rw   collections.abcr   
contextlibr   pathlibr   typingr   r   r   rQ   r   r
   utilsr   r   r   r   r4   r   rJ   rc   r   ra   r    rW   r5   r7   r8   r@   r;   r0   <module>r      sq   	   $ %  ' '   C C NIR 	;8{ ;8|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;   