
    khB                         d dl Zd dlmZ d dl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lmZ  G d d	e      Zy)
    N)Path)AnyCallablecastOptionalTupleUnion)Image   )check_integritydownload_and_extract_archiveverify_str_arg)VisionDatasetc                   v    e Zd ZdZdZdZdZdZdZdZ	dd	gd
dgddggZ
ddgddggZdZ	 	 	 	 	 d'deeef   dedee   dee   dee   deddf fdZdee   dee   fdZdedeeef   fdZdefdZd(d ed!ee   deej6                  eej6                     f   fd"Zdefd#Zd)d$Zdefd%Zdee   ddfd&Z  xZ!S )*STL10a  `STL10 <https://cs.stanford.edu/~acoates/stl10/>`_ Dataset.

    Args:
        root (str or ``pathlib.Path``): Root directory of dataset where directory
            ``stl10_binary`` exists.
        split (string): One of {'train', 'test', 'unlabeled', 'train+unlabeled'}.
            Accordingly, dataset is selected.
        folds (int, optional): One of {0-9} or None.
            For training, loads one of the 10 pre-defined folds of 1k samples for the
            standard evaluation procedure. If no value is passed, loads the 5k samples.
        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.
    stl10_binaryz9http://ai.stanford.edu/~acoates/stl10/stl10_binary.tar.gzzstl10_binary.tar.gz 91f7769df0f17e558f3565bffb0c7dfbzclass_names.txtzfold_indices.txtztrain_X.bin 918c2871b30a85fa023e0c44e0bee87fztrain_y.bin 5a34089d4802c674881badbb80307741zunlabeled_X.bin 5242ba1fed5e4be9e1e742405eb56ca4z
test_X.bin 7f263ba9f9e0b06b93213547f721ac82z
test_y.bin 36f9794fa4beb8a2c72628de14fa638e)traintrain+unlabeled	unlabeledtestNrootsplitfolds	transformtarget_transformdownloadreturnc                    t         |   |||       t        |d| j                        | _        | j                  |      | _        |r| j                          n| j                         st        d      |  | j                  dk(  r{| j                  | j                  d   d   | j                  d   d         \  | _        | _        t        t        j                   | j                        | _        | j#                  |       n| j                  dk(  r| j                  | j                  d   d   | j                  d   d         \  | _        | _        t        t        j                   | j                        | _        | j#                  |       | j                  | j                  d   d         \  }}t        j$                  | j                  |f      | _        t        j$                  | j                  t        j&                  d	g|j(                  d   z        f      | _        n| j                  d
k(  r_| j                  | j                  d   d         \  | _        }t        j&                  d	g| j                  j(                  d   z        | _        n?| j                  | j*                  d   d   | j*                  d   d         \  | _        | _        t,        j.                  j1                  | j2                  | j4                  | j6                        }	t,        j.                  j9                  |	      r8t;        |	      5 }
|
j=                         j?                         | _         d d d        y y # 1 sw Y   y xY w)N)r    r!   r   zHDataset not found or corrupted. You can use download=True to download itr   r   r   r      r   )!super__init__r   splitsr   _verify_foldsr   r"   _check_integrityRuntimeError_STL10__loadfile
train_listdatalabelsr   npndarray_STL10__load_foldsconcatenateasarrayshape	test_listospathjoinr   base_folderclass_names_fileisfileopenread
splitlinesclasses)selfr   r   r   r    r!   r"   unlabeled_data_
class_filef	__class__s              V/var/www/teggl/fontify/venv/lib/python3.12/site-packages/torchvision/datasets/stl10.pyr(   zSTL10.__init__/   s    	EUV#E7DKK@
''.
MMO&&(ijj 	:: %)__T__Q5G5JDOO\]L^_`La%b"DIt{rzz4;;7DKe$ZZ,,%)__T__Q5G5JDOO\]L^_`La%b"DIt{rzz4;;7DKe$ $0B10E FNA		>'BCDI..$++rzz2$I]I]^_I`B`7a)bcDKZZ;&??4??1+=a+@ALDIq**bTDIIOOA,>%>?DK%)__T^^A5Fq5I4>>Z[K\]^K_%`"DIt{WW\\$))T-=-=t?T?TU
77>>*%j! 5Q vvx2245 5 &5 5s   4$M""M+c                     ||S t        |t              r+|t        d      v r|S d}t        |j	                  |            d}t        |j	                  t        |                  )N
   zDValue for argument folds should be in the range [0, 10), but got {}.z>Expected type None or int for argument folds, but got type {}.)
isinstanceintrange
ValueErrorformattype)rB   r   msgs      rH   r*   zSTL10._verify_folds[   s]    =Ls#b	!XCSZZ.//RCSZZU455    indexc                 Z   | j                   (| j                  |   t        | j                   |         }}n| j                  |   d}}t        j                  t        j                  |d            }| j                  | j                  |      }| j                  | j                  |      }||fS )z
        Args:
            index (int): Index

        Returns:
            tuple: (image, target) where target is index of the target class.
        N)r   r%   r   )	r0   r/   rL   r
   	fromarrayr1   	transposer    r!   )rB   rS   imgtargets       rH   __getitem__zSTL10.__getitem__g   s     ;;"))E*CE0B,CC))E*DC oobll3	:;>>%..%C  ,**62FF{rR   c                 4    | j                   j                  d   S )Nr   )r/   r6   rB   s    rH   __len__zSTL10.__len__   s    yyq!!rR   	data_filelabels_filec                 b   d }|rrt         j                  j                  | j                  | j                  |      }t        |d      5 }t        j                  |t        j                        dz
  }d d d        t         j                  j                  | j                  | j                  |      }t        |d      5 }t        j                  |t        j                        }t        j                  |d      }t        j                  |d      }d d d        ||fS # 1 sw Y   xY w# 1 sw Y   |fS xY w)Nrb)dtyper   )r&      `   rc   )r   r   rb   r%   )r8   r9   r:   r   r;   r>   r1   fromfileuint8reshaperV   )	rB   r]   r^   r0   path_to_labelsrF   path_to_data
everythingimagess	            rH   
__loadfilezSTL10.__loadfile   s    WW\\$))T5E5E{SNnd+ <qQbhh7!;< ww||DIIt/?/?K,% 	8Qbhh7JZZ
O<F\\&,7F		8 v~< <	8 v~s   )D8AD"D"D.c                     | j                   | j                  z   D ]H  \  }}t        j                  j	                  | j
                  | j                  |      }t        ||      rH y y)NFT)r.   r7   r8   r9   r:   r   r;   r   )rB   filenamemd5fpaths       rH   r+   zSTL10._check_integrity   sT    !__t~~= 	MHcGGLLD,<,<hGE"5#.	 rR   c                     | j                         ry t        | j                  | j                  | j                  | j
                         | j                          y )N)rm   rn   )r+   r   urlr   rm   tgz_md5r[   s    rH   r"   zSTL10.download   s>      "$TXXtyy4==VZVbVbcrR   c                 :     dj                   di | j                  S )NzSplit: {split} )rO   __dict__r[   s    rH   
extra_reprzSTL10.extra_repr   s    &&&777rR   c                    |y t         j                  j                  | j                  | j                  | j
                        }t        |      5 }|j                         j                         |   }t        j                  |t        j                  d      }| j                  |d d d d d d f   | _        | j                  | j                  |   | _        d d d        y # 1 sw Y   y xY w)N )ra   sep)r8   r9   r:   r   r;   folds_list_filer>   r?   r@   r1   
fromstringint64r/   r0   )rB   r   path_to_foldsrF   str_idxlist_idxs         rH   __load_foldszSTL10.__load_folds   s    =TYY0@0@$BVBVW-  	4Affh))+E2G}}WBHH#FH		(Aq!"34DI{{&"kk(3	4 	4 	4s   BCC&)r   NNNF)N)r#   N)"__name__
__module____qualname____doc__r;   rq   rm   rr   r<   rz   r.   r7   r)   r	   strr   r   rL   r   boolr(   r*   r   r   rY   r\   r1   r2   r-   r+   r"   rv   r3   __classcell__)rG   s   @rH   r   r      s   & !K
EC$H0G((O	:;	:;	>?J  BClTvEwxI>F
 #(,/3*5CI*5 *5 }	*5
 H%*5 #8,*5 *5 
*5X
68C= 
6Xc] 
6 sCx 4" "C hsm uUWU_U_aijljtjtauUuOv  $  8C 8
4(3- 
4D 
4rR   r   )os.pathr8   pathlibr   typingr   r   r   r   r   r	   numpyr1   PILr
   utilsr   r   r   visionr   r   rt   rR   rH   <module>r      s.      > >   P P !b4M b4rR   