ó
    Eñi,U  ã                   ó4  • S SK r S SKrS SKrS SKrS SKr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rS SKrSSKJr  SSKJrJrJrJrJr  SS	KJr   " S
 S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r S\!S\"4S jr#\RH                  \RJ                  \RL                  \RN                  \RP                  \RR                  S.r*SS\+S\,S\RZ                  4S jjr.S\+S\RZ                  4S jr/S\+S\RZ                  4S jr0g)é    N)ÚPath)ÚAnyÚCallableÚOptionalÚUnion)ÚURLErroré   )Ú_Image_fromarrayé   )Ú_flip_byte_orderÚcheck_integrityÚdownload_and_extract_archiveÚextract_archiveÚverify_str_arg)ÚVisionDatasetc                   ó~  ^ • \ rS rSrSrSS/r/ SQrSrSr/ SQr	\
S	 5       r\
S
 5       r\
S 5       r\
S 5       r    S"S\\\4   S\S\\   S\\   S\SS4U 4S jjjrS rS rS rS\S\\\4   4S jrS\4S jr\
S\4S j5       r\
S\4S j5       r\
S\ \\4   4S j5       r!S\4S jr"S#S jr#S\4S  jr$S!r%U =r&$ )$ÚMNISTé   a9  `MNIST <http://yann.lecun.com/exdb/mnist/>`_ Dataset.

Args:
    root (str or ``pathlib.Path``): Root directory of dataset where ``MNIST/raw/train-images-idx3-ubyte``
        and  ``MNIST/raw/t10k-images-idx3-ubyte`` exist.
    train (bool, optional): If True, creates dataset from ``train-images-idx3-ubyte``,
        otherwise from ``t10k-images-idx3-ubyte``.
    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.
z.https://ossci-datasets.s3.amazonaws.com/mnist/z!http://yann.lecun.com/exdb/mnist/))útrain-images-idx3-ubyte.gzÚ f68b3c2dcbeaaa9fbdd348bbdeb94873)útrain-labels-idx1-ubyte.gzÚ d53e105ee54ea40749a09fcbcd1e9432)út10k-images-idx3-ubyte.gzÚ 9fb629c4189551a2d022fa330f9573f3)út10k-labels-idx1-ubyte.gzÚ ec29112dd5afa0611ce80d1b7f02629cztraining.ptztest.pt©
z0 - zeroz1 - onez2 - twoz	3 - threez4 - fourz5 - fivez6 - sixz	7 - sevenz	8 - eightz9 - ninec                 óF   • [         R                  " S5        U R                  $ )Nz%train_labels has been renamed targets©ÚwarningsÚwarnÚtargets©Úselfs    ÚW/home/mande/repo/quber/.venv/lib/python3.13/site-packages/torchvision/datasets/mnist.pyÚtrain_labelsÚMNIST.train_labels@   s   € ä�ŠÐ=Ô>Ø�|‰|Ðó    c                 óF   • [         R                  " S5        U R                  $ )Nz$test_labels has been renamed targetsr   r#   s    r%   Útest_labelsÚMNIST.test_labelsE   s   € ä�ŠÐ<Ô=Ø�|‰|Ðr(   c                 óF   • [         R                  " S5        U R                  $ )Nz train_data has been renamed data©r    r!   Údatar#   s    r%   Ú
train_dataÚMNIST.train_dataJ   s   € ä�ŠÐ8Ô9Ø�y‰yÐr(   c                 óF   • [         R                  " S5        U R                  $ )Nztest_data has been renamed datar-   r#   s    r%   Ú	test_dataÚMNIST.test_dataO   s   € ä�ŠÐ7Ô8Ø�y‰yÐr(   NÚrootÚtrainÚ	transformÚtarget_transformÚdownloadÚreturnc                 ó<  >• [         TU ]  XUS9  X l        U R                  5       (       a  U R	                  5       u  U l        U l        g U(       a  U R                  5         U R                  5       (       d  [        S5      eU R                  5       u  U l        U l        g )N)r6   r7   z;Dataset not found. You can use download=True to download it)ÚsuperÚ__init__r5   Ú_check_legacy_existÚ_load_legacy_datar.   r"   r8   Ú_check_existsÚRuntimeErrorÚ
_load_data)r$   r4   r5   r6   r7   r8   Ú	__class__s         €r%   r<   ÚMNIST.__init__T   s‚   ø€ ô 	‰Ñ˜ÐEUÐÑVØŒ
à×#Ñ#×%Ñ%Ø&*×&<Ñ&<Ó&>Ñ#ˆDŒI�t”|ØæØ�M‰MŒOà×!Ñ!×#Ñ#ÜÐ\Ó]Ð]à"&§/¡/Ó"3ÑˆŒ	�4•<r(   c                 ó¼   ^ • [         R                  R                  T R                  5      nU(       d  g[	        U 4S jT R
                  T R                  4 5       5      $ )NFc              3   óŠ   >#   • U  H8  n[        [        R                  R                  TR                  U5      5      v •  M:     g 7f©N)r   ÚosÚpathÚjoinÚprocessed_folder)Ú.0Úfiler$   s     €r%   Ú	<genexpr>Ú,MNIST._check_legacy_exist.<locals>.<genexpr>p   s2   øé € ð 
ÚSwÈ4ŒOœBŸG™GŸL™L¨×)>Ñ)>ÀÓE×FÐFÒSwùs   ƒA A)rG   rH   ÚexistsrJ   ÚallÚtraining_fileÚ	test_file)r$   Úprocessed_folder_existss   ` r%   r=   ÚMNIST._check_legacy_existk   sN   ø€ Ü"$§'¡'§.¡.°×1FÑ1FÓ"GÐÞ&Øäô 
ØTX×TfÑTfÐhl×hvÑhvÑSwó
ó 
ð 	
r(   c                 óÎ   • U R                   (       a  U R                  OU R                  n[        R                  " [
        R                  R                  U R                  U5      SS9$ )NT)Úweights_only)	r5   rQ   rR   ÚtorchÚloadrG   rH   rI   rJ   )r$   Ú	data_files     r%   r>   ÚMNIST._load_legacy_datat   sB   € ð +/¯*¯*�D×&Ò&¸$¿.¹.ˆ	Ü�zŠzœ"Ÿ'™'Ÿ,™, t×'<Ñ'<¸iÓHÐW[Ñ\Ð\r(   c                 ó4  • U R                   (       a  SOS S3n[        [        R                  R	                  U R
                  U5      5      nU R                   (       a  SOS S3n[        [        R                  R	                  U R
                  U5      5      nX$4$ )Nr5   Út10kú-images-idx3-ubyteú-labels-idx1-ubyte)r5   Úread_image_filerG   rH   rI   Ú
raw_folderÚread_label_file)r$   Ú
image_filer.   Ú
label_filer"   s        r%   rA   ÚMNIST._load_dataz   sp   € Ø#'§:§:™°6Ð:Ð:LÐMˆ
ÜœrŸw™wŸ|™|¨D¯O©O¸ZÓHÓIˆà#'§:§:™°6Ð:Ð:LÐMˆ
Ü!¤"§'¡'§,¡,¨t¯©À
Ó"KÓLˆàˆ}Ðr(   Úindexc                 óü   • U R                   U   [        U R                  U   5      p2[        UR	                  5       SS9nU R
                  b  U R                  U5      nU R                  b  U R                  U5      nX#4$ )zn
Args:
    index (int): Index

Returns:
    tuple: (image, target) where target is index of the target class.
ÚL©Úmode)r.   Úintr"   r
   Únumpyr6   r7   ©r$   re   ÚimgÚtargets       r%   Ú__getitem__ÚMNIST.__getitem__ƒ   sr   € ð —i‘i Ñ&¬¨D¯L©L¸Ñ,?Ó(@ˆVô ˜sŸy™y›{°Ñ5ˆà�>‰>Ñ%Ø—.‘. Ó%ˆCà× Ñ Ñ,Ø×*Ñ*¨6Ó2ˆFàˆ{Ðr(   c                 ó,   • [        U R                  5      $ rF   )Úlenr.   r#   s    r%   Ú__len__ÚMNIST.__len__™   s   € Ü�4—9‘9‹~Ðr(   c                 ó€   • [         R                  R                  U R                  U R                  R
                  S5      $ )NÚraw©rG   rH   rI   r4   rB   Ú__name__r#   s    r%   r`   ÚMNIST.raw_folderœ   s'   € ä�w‰w�|‰|˜DŸI™I t§~¡~×'>Ñ'>ÀÓFÐFr(   c                 ó€   • [         R                  R                  U R                  U R                  R
                  S5      $ )NÚ	processedrw   r#   s    r%   rJ   ÚMNIST.processed_folder    s'   € ä�w‰w�|‰|˜DŸI™I t§~¡~×'>Ñ'>ÀÓLÐLr(   c                 ób   • [        U R                  5       VVs0 s H  u  pX!_M	     snn$ s  snnf rF   )Ú	enumerateÚclasses)r$   ÚiÚ_classs      r%   Úclass_to_idxÚMNIST.class_to_idx¤   s)   € ä+4°T·\±\Ô+BÔCÒ+B™i˜a�’	Ñ+BÒCÐCùÓCs   ™+c                 óB   ^ • [        U 4S jT R                   5       5      $ )Nc              3   ó  >#   • U  Hw  u  p[        [        R                  R                  TR                  [        R                  R                  [        R                  R                  U5      5      S    5      5      v •  My     g7f)r   N)r   rG   rH   rI   r`   ÚsplitextÚbasename)rK   ÚurlÚ_r$   s      €r%   rM   Ú&MNIST._check_exists.<locals>.<genexpr>©   sZ   øé € ð 
â(‘�ô œBŸG™GŸL™L¨¯©¼"¿'¹'×:JÑ:JÌ2Ï7É7×K[ÑK[Ð\_ÓK`Ó:aÐbcÑ:dÓe×fÐfÚ(ùs   ƒA?B)rP   Ú	resourcesr#   s   `r%   r?   ÚMNIST._check_exists¨   s!   ø€ Üô 
àŸ.š.ó
ó 
ð 	
r(   c           	      óÒ  • U R                  5       (       a  g[        R                  " U R                  SS9  U R                   Hy  u  p/ nU R
                   H  nU U 3n [        XPR                  XS9    M4     SU S3n[        U R
                  U5       H  u  pHUSU S[        U5       S	3-  nM     [        U5      e   g! [         a  nUR                  U5         SnAMŒ  SnAff = f)
z4Download the MNIST data if it doesn't exist already.NT©Úexist_ok)Údownload_rootÚfilenameÚmd5zError downloading z:
zTried z, got:
Ú
)r?   rG   Úmakedirsr`   r‹   Úmirrorsr   r   ÚappendÚzipÚstrr@   )	r$   r‘   r’   ÚerrorsÚmirrorrˆ   ÚeÚsÚerrs	            r%   r8   ÚMNIST.download®   sã   € ð ×Ñ×ÑØä
�Š�D—O‘O¨dÒ3ð "Ÿ^œ^‰MˆHØˆFØŸ,œ,�Ø˜  
Ð+�ðÜ0°ÇOÁOÐ^fÒpò ñ 'ð )¨¨
°#Ð6�Ü#& t§|¡|°VÖ#<‘K�FØ˜6 & ¨´#°c³(°¸2Ð>Ñ>’Añ $=ä" 1“oÐ%ò ,øô  ó Ø—M‘M !Ô$Ýûðús   ÁC Ã 
C&Ã
C!Ã!C&c                 ó2   • U R                   SL a  SOSnSU 3$ )NTÚTrainÚTestúSplit: )r5   )r$   Úsplits     r%   Ú
extra_reprÚMNIST.extra_reprÇ   s!   € ØŸ:™:¨Ò-‘°6ˆØ˜˜Ð Ð r(   )r.   r"   r5   )TNNF©r9   N)'rx   Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r•   r‹   rQ   rR   r   Úpropertyr&   r*   r/   r2   r   r˜   r   Úboolr   r   r<   r=   r>   rA   rj   Útupler   ro   rs   r`   rJ   Údictr‚   r?   r8   r¤   Ú__static_attributes__Ú__classcell__©rB   s   @r%   r   r      s¡  ø† ñð" 	9Ø+ð€Gò
€Ið "€MØ€Iò€Gð ñó ðð ñó ðð ñó ðð ñó ðð Ø(,Ø/3Øñ4à�C˜�IÑð4ð ð4ð ˜HÑ%ð	4ð
 # 8Ñ,ð4ð ð4ð 
÷4ð 4ò.
ò]òð ð ¨¨s°C¨x©ô ð,˜ô ð ðG˜Có Gó ðGð ðM #ó Mó ðMð ðD˜d 3¨ 8™nó Dó ðDð
˜tô 
ô&ð2!˜C÷ !ò !r(   r   c                   ó.   • \ rS rSrSrS/r/ SQr/ SQrSrg)ÚFashionMNISTéÌ   a^  `Fashion-MNIST <https://github.com/zalandoresearch/fashion-mnist>`_ Dataset.

Args:
    root (str or ``pathlib.Path``): Root directory of dataset where ``FashionMNIST/raw/train-images-idx3-ubyte``
        and  ``FashionMNIST/raw/t10k-images-idx3-ubyte`` exist.
    train (bool, optional): If True, creates dataset from ``train-images-idx3-ubyte``,
        otherwise from ``t10k-images-idx3-ubyte``.
    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.
z;http://fashion-mnist.s3-website.eu-central-1.amazonaws.com/))r   Ú 8d4fb7e6c68d591d4c3dfef9ec88bf0d)r   Ú 25c81989df183df01b3e8a0aad5dffbe)r   Ú bef4ecab320f06d8554ea6380940ec79)r   Ú bb300cfdad3c16e7a12a480ee83cd310)
zT-shirt/topÚTrouserÚPulloverÚDressÚCoatÚSandalÚShirtÚSneakerÚBagz
Ankle boot© N©	rx   r§   r¨   r©   rª   r•   r‹   r   r¯   rÁ   r(   r%   r³   r³   Ì   s!   † ñð  MÐM€Gò€Iò yƒGr(   r³   c                   ó.   • \ rS rSrSrS/r/ SQr/ SQrSrg)ÚKMNISTéè   aG  `Kuzushiji-MNIST <https://github.com/rois-codh/kmnist>`_ Dataset.

Args:
    root (str or ``pathlib.Path``): Root directory of dataset where ``KMNIST/raw/train-images-idx3-ubyte``
        and  ``KMNIST/raw/t10k-images-idx3-ubyte`` exist.
    train (bool, optional): If True, creates dataset from ``train-images-idx3-ubyte``,
        otherwise from ``t10k-images-idx3-ubyte``.
    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.
z-http://codh.rois.ac.jp/kmnist/dataset/kmnist/))r   Ú bdb82020997e1d708af4cf47b453dcf7)r   Ú e144d726b3acfaa3e44228e80efcd344)r   Ú 5c965bf0a639b31b8f53240b1b52f4d7)r   Ú 7320c461ea6c1c855c0b718fb2a4b134)
ÚoÚkiÚsuÚtsuÚnaÚhaÚmaÚyaÚreÚworÁ   NrÂ   rÁ   r(   r%   rÄ   rÄ   è   s    † ñð  ?Ð?€Gò€Iò KƒGr(   rÄ   c                   ó   ^ • \ rS rSrSrSrSrSr1 Skr\	" \
R                  \
R                  -   5      r\" \" \5      5      \" \" \\-
  5      5      \" \" \\-
  5      5      S/\" \
R                   5      -   \" \
R                  5      \" \
R                  5      S.rS\\\4   S	\S
\SS4U 4S jjr\S\4S j5       r\S\4S j5       r\S\4S j5       r\S\4S j5       r\S\4S j5       rS rS\4S jr SS jr!Sr"U =r#$ )ÚEMNISTi  a  `EMNIST <https://www.westernsydney.edu.au/bens/home/reproducible_research/emnist>`_ Dataset.

Args:
    root (str or ``pathlib.Path``): Root directory of dataset where ``EMNIST/raw/train-images-idx3-ubyte``
        and  ``EMNIST/raw/t10k-images-idx3-ubyte`` exist.
    split (string): The dataset has 6 different splits: ``byclass``, ``bymerge``,
        ``balanced``, ``letters``, ``digits`` and ``mnist``. This argument specifies
        which one to use.
    train (bool, optional): If True, creates dataset from ``training.pt``,
        otherwise from ``test.pt``.
    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.
    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.
z4https://biometrics.nist.gov/cs_links/EMNIST/gzip.zipÚ 58c8d27c78d21e728a6bc7b3cc06412e)ÚbyclassÚbymergeÚbalancedÚlettersÚdigitsÚmnist>   Úcr€   ÚjÚkÚlÚmrÊ   Úprœ   ÚuÚvÚwÚxÚyÚzzN/Ar4   r£   Úkwargsr9   Nc                 óô   >• [        USU R                  5      U l        U R                  U5      U l        U R                  U5      U l        [        TU ]   " U40 UD6  U R                  U R                     U l
        g )Nr£   )r   Úsplitsr£   Ú_training_filerQ   Ú
_test_filerR   r;   r<   Úclasses_split_dictr   )r$   r4   r£   ré   rB   s       €r%   r<   ÚEMNIST.__init__'  sb   ø€ Ü# E¨7°D·K±KÓ@ˆŒ
Ø!×0Ñ0°Ó7ˆÔØŸ™¨Ó/ˆŒÜ‰Ò˜Ñ( Ò(Ø×.Ñ.¨t¯z©zÑ:ˆ�r(   c                 ó   • SU  S3$ )NÚ	training_ú.ptrÁ   ©r£   s    r%   rì   ÚEMNIST._training_file.  s   € à˜5˜' Ð%Ð%r(   c                 ó   • SU  S3$ )NÚtest_rò   rÁ   ró   s    r%   rí   ÚEMNIST._test_file2  s   € à�u�g˜SÐ!Ð!r(   c                 óP   • SU R                    SU R                  (       a  S 3$ S 3$ )Nzemnist-Ú-r5   Útest)r£   r5   r#   s    r%   Ú_file_prefixÚEMNIST._file_prefix6  s+   € à˜Ÿ™˜ A°·· gÐ%HÐIÐIÀÐ%HÐIÐIr(   c                 óp   • [         R                  R                  U R                  U R                   S35      $ )Nr]   ©rG   rH   rI   r`   rû   r#   s    r%   Úimages_fileÚEMNIST.images_file:  ó*   € ä�w‰w�|‰|˜DŸO™O°×0AÑ0AÐ/BÐBTÐ-UÓVÐVr(   c                 óp   • [         R                  R                  U R                  U R                   S35      $ )Nr^   rþ   r#   s    r%   Úlabels_fileÚEMNIST.labels_file>  r  r(   c                 óV   • [        U R                  5      [        U R                  5      4$ rF   )r_   rÿ   ra   r  r#   s    r%   rA   ÚEMNIST._load_dataB  s#   € Ü˜t×/Ñ/Ó0´/À$×BRÑBRÓ2SÐSÐSr(   c                 óR   • [        S U R                  U R                  4 5       5      $ )Nc              3   ó8   #   • U  H  n[        U5      v •  M     g 7frF   ©r   ©rK   rL   s     r%   rM   Ú'EMNIST._check_exists.<locals>.<genexpr>F  ó   é € ÐZÒ5Y¨T”? 4×(Ð(Ò5Yùó   ‚©rP   rÿ   r  r#   s    r%   r?   ÚEMNIST._check_existsE  ó$   € ÜÑZ°d×6FÑ6FÈ×HXÑHXÑ5YÓZÓZÐZr(   c                 ó  • U R                  5       (       a  g[        R                  " U R                  SS9  [	        U R
                  U R                  U R                  S9  [        R                  R                  U R                  S5      n[        R                  " U5       HN  nUR                  S5      (       d  M  [        [        R                  R                  X5      U R                  5        MP     [        R                  " U5        g)z5Download the EMNIST data if it doesn't exist already.NTrŽ   )r�   r’   Úgzipz.gz)r?   rG   r”   r`   r   rˆ   r’   rH   rI   ÚlistdirÚendswithr   ÚshutilÚrmtree)r$   Úgzip_folderÚ	gzip_files      r%   r8   ÚEMNIST.downloadH  s¨   € ð ×Ñ×ÑØä
�Š�D—O‘O¨dÒ3ä$ T§X¡X¸T¿_¹_ÐRV×RZÑRZÒ[Ü—g‘g—l‘l 4§?¡?°FÓ;ˆÜŸš KÖ0ˆIØ×!Ñ! %×(Ó(Ü¤§¡§¡¨[Ó DÀdÇoÁoÖVñ 1ô 	�Š�kÕ"r(   )r   r£   rR   rQ   r¦   )$rx   r§   r¨   r©   rª   rˆ   r’   rë   Ú_merged_classesÚsetÚstringrÛ   Úascii_lettersÚ_all_classesÚsortedÚlistÚascii_lowercaserî   r   r˜   r   r   r<   Ústaticmethodrì   rí   r«   rû   rÿ   r  rA   r¬   r?   r8   r¯   r°   r±   s   @r%   rÕ   rÕ     sv  ø† ñð& A€CØ
,€CØM€Fâa€OÙ�v—}‘} v×';Ñ';Ñ;Ó<€Lá™$˜|Ó,Ó-Ù™$˜|¨oÑ=Ó>Ó?Ù™4 ¨Ñ >Ó?Ó@Ø�7™T &×"8Ñ"8Ó9Ñ9Ù�v—}‘}Ó%Ù�f—m‘mÓ$ñÐð;˜U 3¨ 9Ñ-ð ;°cð ;ÀSð ;ÈT÷ ;ð ð& ó &ó ð&ð ð"˜Só "ó ð"ð ðJ˜có Jó ðJð ðW˜Só Wó ðWð ðW˜Só Wó ðWòTð[˜tô [÷#ò #r(   rÕ   c                   ó,  ^ • \ rS rSr% SrSSSSSS.rSS/S	S
/SS/S.r\\\	\
\\4      4   \S'   / SQr S S\\\4   S\\   S\S\S\SS4U 4S jjjr\S\4S j5       r\S\4S j5       rS\4S jrS rS!S jrS\S\
\\4   4S jrS\4S jrSrU =r$ )"ÚQMNISTiX  aø  `QMNIST <https://github.com/facebookresearch/qmnist>`_ Dataset.

Args:
    root (str or ``pathlib.Path``): Root directory of dataset whose ``raw``
        subdir contains binary files of the datasets.
    what (string,optional): Can be 'train', 'test', 'test10k',
        'test50k', or 'nist' for respectively the mnist compatible
        training set, the 60k qmnist testing set, the 10k qmnist
        examples that match the mnist testing set, the 50k
        remaining qmnist testing examples, or all the nist
        digits. The default is to select 'train' or 'test'
        according to the compatibility argument 'train'.
    compat (bool,optional): A boolean that says whether the target
        for each example is class number (for compatibility with
        the MNIST dataloader) or a torch vector containing the
        full qmnist information. Default=True.
    train (bool,optional,compatibility): When argument 'what' is
        not specified, this boolean decides whether to load the
        training set or the testing set.  Default: True.
    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.
    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.
r5   rú   Únist)r5   rú   Útest10kÚtest50kr%  )zbhttps://raw.githubusercontent.com/facebookresearch/qmnist/master/qmnist-train-images-idx3-ubyte.gzÚ ed72d4157d28c017586c42bc6afe6370)z`https://raw.githubusercontent.com/facebookresearch/qmnist/master/qmnist-train-labels-idx2-int.gzÚ 0058f8dd561b90ffdd0f734c6a30e5e4)zahttps://raw.githubusercontent.com/facebookresearch/qmnist/master/qmnist-test-images-idx3-ubyte.gzÚ 1394631089c404de565df7b7aeaf9412)z_https://raw.githubusercontent.com/facebookresearch/qmnist/master/qmnist-test-labels-idx2-int.gzÚ 5b5b05890a5e13444e108efe57b788aa)z[https://raw.githubusercontent.com/facebookresearch/qmnist/master/xnist-images-idx3-ubyte.xzÚ 7f124b3b8ab81486c9d8c2749c17f834)zYhttps://raw.githubusercontent.com/facebookresearch/qmnist/master/xnist-labels-idx2-int.xzÚ 5ed0e788978e45d4a8bd4b7caec3d79d)r5   rú   r%  r‹   r   Nr4   ÚwhatÚcompatré   r9   c                 ó  >• Uc  U(       a  SOSn[        US[        U R                  R                  5       5      5      U l        X0l        US-   U l        U R                  U l        U R                  U l        [        TU ](  " X40 UD6  g )Nr5   rú   r.  rò   )r   r­   ÚsubsetsÚkeysr.  r/  rY   rQ   rR   r;   r<   )r$   r4   r.  r/  r5   ré   rB   s         €r%   r<   ÚQMNIST.__init__¤  sn   ø€ ð ‰<Þ#‘7¨ˆDÜ" 4¨´°t·|±|×7HÑ7HÓ7JÓ1KÓLˆŒ	ØŒØ ™ˆŒØ!Ÿ^™^ˆÔØŸ™ˆŒÜ‰Ò˜Ñ/¨Ó/r(   c                 ó(  • U R                   U R                  U R                        u  u  n  n[        R                  R                  U R                  [        R                  R                  [        R                  R                  U5      5      S   5      $ ©Nr   ©	r‹   r1  r.  rG   rH   rI   r`   r†   r‡   )r$   rˆ   r‰   s      r%   rÿ   ÚQMNIST.images_file°  sb   € à—n‘n T§\¡\°$·)±)Ñ%<Ñ=‰‰ˆˆa�!Ü�w‰w�|‰|˜DŸO™O¬R¯W©W×-=Ñ-=¼b¿g¹g×>NÑ>NÈsÓ>SÓ-TÐUVÑ-WÓXÐXr(   c                 ó&  • U R                   U R                  U R                        u  nu  p![        R                  R                  U R                  [        R                  R                  [        R                  R                  U5      5      S   5      $ r5  r6  )r$   r‰   rˆ   s      r%   r  ÚQMNIST.labels_fileµ  s`   € à—n‘n T§\¡\°$·)±)Ñ%<Ñ=‰ˆ‰8ˆCÜ�w‰w�|‰|˜DŸO™O¬R¯W©W×-=Ñ-=¼b¿g¹g×>NÑ>NÈsÓ>SÓ-TÐUVÑ-WÓXÐXr(   c                 óR   • [        S U R                  U R                  4 5       5      $ )Nc              3   ó8   #   • U  H  n[        U5      v •  M     g 7frF   r	  r
  s     r%   rM   Ú'QMNIST._check_exists.<locals>.<genexpr>»  r  r  r  r#   s    r%   r?   ÚQMNIST._check_existsº  r  r(   c                 óœ  • [        U R                  5      nUR                  [        R                  :w  a  [        SUR                   35      eUR                  5       S:w  a  [        S5      e[        U R                  5      R                  5       nUR                  5       S:w  a  [        SUR                  5        35      eU R                  S:X  a8  USS2S S 2S S 24   R                  5       nUSS2S S 24   R                  5       nX4$ U R                  S	:X  a5  USS 2S S 2S S 24   R                  5       nUSS 2S S 24   R                  5       nX4$ )
Nz/data should be of dtype torch.uint8 instead of é   z<data should have 3 dimensions instead of {data.ndimension()}r	   z,targets should have 2 dimensions instead of r&  r   i'  r'  )Úread_sn3_pascalvincent_tensorrÿ   ÚdtyperW   Úuint8Ú	TypeErrorÚ
ndimensionÚ
ValueErrorr  Úlongr.  Úclone)r$   r.   r"   s      r%   rA   ÚQMNIST._load_data½  s3  € Ü,¨T×-=Ñ-=Ó>ˆØ�:‰:œŸ™Ó$ÜÐMÈdÏjÉjÈ\ÐZÓ[Ð[Ø�?‰?Ó Ó!ÜÐ[Ó\Ð\ä/°×0@Ñ0@ÓA×FÑFÓHˆØ×ÑÓ 1Ó$ÜÐKÈG×L^ÑL^ÓL`ÐKaÐbÓcÐcà�9‰9˜	Ó!Ø˜˜%˜¢¢A˜Ñ&×,Ñ,Ó.ˆDØ˜a ˜g¢q˜jÑ)×/Ñ/Ó1ˆGð
 ˆ}Ðð	 �Y‰Y˜)Ó#Ø˜™¢¢1˜Ñ%×+Ñ+Ó-ˆDØ˜e™f¢a˜iÑ(×.Ñ.Ó0ˆGàˆ}Ðr(   c                 óø   • U R                  5       (       a  g[        R                  " U R                  SS9  U R                  U R
                  U R                        nU H  u  p#[        X R                  US9  M     g)z|Download the QMNIST data if it doesn't exist already.
Note that we only download what has been asked for (argument 'what').
NTrŽ   )r’   )r?   rG   r”   r`   r‹   r1  r.  r   )r$   r£   rˆ   r’   s       r%   r8   ÚQMNIST.downloadÑ  s]   € ð ×Ñ×ÑØä
�Š�D—O‘O¨dÒ3Ø—‘˜tŸ|™|¨D¯I©IÑ6Ñ7ˆã‰HˆCÜ(¨¯o©oÀ3ÔGò r(   re   c                 ó(  • U R                   U   U R                  U   p2[        UR                  5       SS9nU R                  b  U R	                  U5      nU R
                  (       a  [        US   5      nU R                  b  U R                  U5      nX#4$ )Nrg   rh   r   )r.   r"   r
   rk   r6   r/  rj   r7   rl   s       r%   ro   ÚQMNIST.__getitem__Þ  s}   € à—i‘i Ñ&¨¯©°UÑ(;ˆVÜ˜sŸy™y›{°Ñ5ˆØ�>‰>Ñ%Ø—.‘. Ó%ˆCØ�;�;Ü˜ ™“^ˆFØ× Ñ Ñ,Ø×*Ñ*¨6Ó2ˆFØˆ{Ðr(   c                 ó    • SU R                    3$ )Nr¢   )r.  r#   s    r%   r¤   ÚQMNIST.extra_reprê  s   € Ø˜Ÿ™˜Ð$Ð$r(   )r/  rY   rR   rQ   r.  )NTTr¦   )rx   r§   r¨   r©   rª   r1  r‹   r®   r˜   r   r­   Ú__annotations__r   r   r   r   r¬   r   r<   r«   rÿ   r  r?   rA   r8   rj   ro   r¤   r¯   r°   r±   s   @r%   r$  r$  X  sD  ø‡ ñð:  ¨¸FÈvÐ_eÑf€Gððð	
ððð	
ððð	
ñ+3€Iˆt�C˜˜e C¨ H™oÑ.Ð.Ñ/ó ò@€Gð fjñ
0Ø˜#˜t˜)Ñ$ð
0Ø,4°S©Mð
0ØJNð
0Ø^bð
0Øuxð
0à	÷
0ð 
0ð ðY˜Só Yó ðYð ðY˜Só Yó ðYð[˜tô [òô(Hð
 ð 
¨¨s°C¨x©ô 
ð%˜C÷ %ò %r(   r$  Úbr9   c                 óD   • [        [        R                  " U S5      S5      $ )NÚhexé   )rj   ÚcodecsÚencode)rP  s    r%   Úget_intrV  î  s   € ÜŒv�}Š}˜Q Ó&¨Ó+Ð+r(   )é   é	   é   é   é   é   rH   Ústrictc           
      óD  • [        U S5       nUR                  5       nSSS5        [        R                  S:X  d  [        R                  S:X  a  [        WSS 5      nUS-  nUS-  nOC[        WSS 5      n[        USS	 5      [        US	S
 5      S-  -   [        US
S 5      S-  S-  -   nSUs=::  a  S
::  d   e   eSUs=::  a  S::  d   e   e[        U   n[        U5       Vs/ s H  n[        USUS-   -  SUS	-   -   5      PM     n	n[        R                  S:X  aV  [        R                  S:X  dB  [        [        U	5      5       H*  n[        R                  X˜   R                  SSS9SSS9X˜'   M,     [        R                  " [        U5      USUS-   -  S9n
[        R                  S:X  a  U
R                  5       S:”  a  [!        U
5      n
U
R"                  S   [$        R&                  " U	5      :X  d	  U(       a   eU
R(                  " U	6 $ ! , (       d  f       GNô= fs  snf )z�Read a SN3 file in "Pascal Vincent" format (Lush file 'libidx/idx-io.lsh').
Argument may be a filename, compressed filename, or file object.
ÚrbNÚlittleÚaixr   é   é   r   r	   r?  rW  r\  Úbig)Ú	byteorderF)re  Úsigned)rA  Úoffset)ÚopenÚreadÚsysre  ÚplatformrV  ÚSN3_PASCALVINCENT_TYPEMAPÚrangerr   rj   Ú
from_bytesÚto_bytesrW   Ú
frombufferÚ	bytearrayÚelement_sizer   ÚshapeÚnpÚprodÚview)rH   r]  Úfr.   ÚmagicÚndÚtyÚ
torch_typer€   rœ   Úparseds              r%   r@  r@  ü  së  € ô
 
ˆd�DÔ	˜QØ�v‰v‹xˆ÷ 
ô ‡}�}˜Ó ¤C§L¡L°EÓ$9Ü˜˜Q˜q˜	Ó"ˆØ�S‰[ˆØ�c‰\‰ä�T˜!˜A�YÓˆÜ�T˜!˜A�YÓ¤'¨$¨q°¨)Ó"4°sÑ":Ñ:¼WÀTÈ!ÈAÀYÓ=OÐRUÑ=UÐX[Ñ=[Ñ[ˆà��<�a‹<Ð‰<Ðˆ<Ø��=�b‹=Ð‰=Ðˆ=Ü*¨2Ñ.€JÜ;@À¼9ÓEº9°aŒ��a˜1˜q™5‘k A¨¨Q©¡KÐ0Ö	1¹9€AÐEä
‡}�}˜Ó¤c§l¡l°eÓ&;Ü”s˜1“v–ˆAÜ—>‘> !¡$§-¡-°¸X -Ð"FÐRWÐ`e�>ÐfˆA‹Dñ ô ×Òœi¨›o°ZÈÈbÐSTÉfÉÑW€Fô ‡}�}˜Ó  V×%8Ñ%8Ó%:¸QÓ%>Ü! &Ó)ˆà�<‰<˜‰?œbŸgšg a›jÓ(¶Ð6Ð6Ø�;Š;˜ˆ?Ð÷; 
Ö	üò 	Fs   �HÃ$$HÈ
Hc                 ó  • [        U SS9nUR                  [        R                  :w  a  [	        SUR                   35      eUR                  5       S:w  a  [        SUR                  5        35      eUR                  5       $ )NF©r]  ú,x should be of dtype torch.uint8 instead of r   z%x should have 1 dimension instead of )r@  rA  rW   rB  rC  rD  rE  rF  ©rH   ræ   s     r%   ra   ra   !  sh   € Ü% d°5Ñ9€AØ‡w�w”%—+‘+ÓÜÐFÀqÇwÁwÀiÐPÓQÐQØ‡|�|ƒ~˜ÓÜÐ@ÀÇÁÃÐ@PÐQÓRÐRØ�6‰6‹8€Or(   c                 óæ   • [        U SS9nUR                  [        R                  :w  a  [	        SUR                   35      eUR                  5       S:w  a  [        SUR                  5        35      eU$ )NFr~  r  r?  z%x should have 3 dimension instead of )r@  rA  rW   rB  rC  rD  rE  r€  s     r%   r_   r_   *  sb   € Ü% d°5Ñ9€AØ‡w�w”%—+‘+ÓÜÐFÀqÇwÁwÀiÐPÓQÐQØ‡|�|ƒ~˜ÓÜÐ@ÀÇÁÃÐ@PÐQÓRÐRØ€Hr(   )T)1rT  rG   Úos.pathr  r  rj  r    Úpathlibr   Útypingr   r   r   r   Úurllib.errorr   rk   rt  rW   Úutilsr
   r   r   r   r   r   Úvisionr   r   r³   rÄ   rÕ   r$  Úbytesrj   rV  rB  Úint8Úint16Úint32Úfloat32Úfloat64rl  r˜   r¬   ÚTensorr@  ra   r_   rÁ   r(   r%   Ú<module>r�     s  ðÛ Û 	Û Û Û Û 
Û Ý ß 1Ó 1Ý !ã Û å $ß sÕ sÝ !ôu!ˆMô u!ôpy�5ô yô8KˆUô Kô8Q#ˆUô Q#ôhS%ˆUô S%ðl,ˆuð ,˜ô ,ð
 ‡{�{Ø‡z�zØ�‰Ø�‰Ø�‰Ø�‰ñÐ ñ"¨ð "°Tð "ÀUÇ\Á\õ "ðJ˜#ð  %§,¡,ô ð˜#ð  %§,¡,õ r(   