o
    h                     @   st   d dl Zd dlmZ d dl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	 d	eZdS )
    N)Path)AnyCallableOptionalUnion)Image   )check_integritydownload_urlverify_str_arg)VisionDatasetc                       s   e Zd ZdZg dg dg ddZ				dd	eeef d
edee	 dee	 de
ddf fddZdedeeef fddZdefddZde
fddZdddZdefddZ  ZS )SVHNa  `SVHN <http://ufldl.stanford.edu/housenumbers/>`_ Dataset.
    Note: The SVHN dataset assigns the label `10` to the digit `0`. However, in this Dataset,
    we assign the label `0` to the digit `0` to be compatible with PyTorch loss functions which
    expect the class labels to be in the range `[0, C-1]`

    .. warning::

        This class needs `scipy <https://docs.scipy.org/doc/>`_ to load data from `.mat` format.

    Args:
        root (str or ``pathlib.Path``): Root directory of the dataset where the data is stored.
        split (string): One of {'train', 'test', 'extra'}.
            Accordingly dataset is selected. 'extra' is Extra training set.
        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.

    )z6http://ufldl.stanford.edu/housenumbers/train_32x32.matztrain_32x32.matZ e26dedcc434d2e4c54c9b2d4a06d8373)z5http://ufldl.stanford.edu/housenumbers/test_32x32.matztest_32x32.matZ eb5a983be6a315427106f1b164d9cef3)z6http://ufldl.stanford.edu/housenumbers/extra_32x32.matzextra_32x32.matZ a93ce644f1a588dc4d68dda5feec44a7)traintestextrar   NFrootsplit	transformtarget_transformdownloadreturnc                    s   t  j|||d t|dt| j | _| j| d | _| j| d | _| j| d | _	|r3| 
  |  s;tddd lm} |tj| j| j}|d | _|d tj | _t| j| jd	kd t| jd
| _d S )N)r   r   r   r   r      zHDataset not found or corrupted. You can use download=True to download itXy
   )   r   r   r   )super__init__r   tuple
split_listkeysr   urlfilenameZfile_md5r   _check_integrityRuntimeErrorZscipy.ioioZloadmatospathjoinr   dataZastypenpZint64ZsqueezelabelsZplace	transpose)selfr   r   r   r   r   sioZ
loaded_mat	__class__ _/home/www/facesmatcher.com/frenv_anti/lib/python3.10/site-packages/torchvision/datasets/svhn.pyr   6   s   
zSVHN.__init__indexc                 C   s\   | j | t| j| }}tt|d}| jdur | |}| jdur*| |}||fS )z
        Args:
            index (int): Index

        Returns:
            tuple: (image, target) where target is index of the target class.
        )r   r   r   N)	r)   intr+   r   Z	fromarrayr*   r,   r   r   )r-   r3   Zimgtargetr1   r1   r2   __getitem__^   s   



zSVHN.__getitem__c                 C   s
   t | jS )N)lenr)   r-   r1   r1   r2   __len__t   s   
zSVHN.__len__c                 C   s0   | j }| j| j d }tj|| j}t||S Nr   )r   r   r   r&   r'   r(   r"   r	   )r-   r   md5Zfpathr1   r1   r2   r#   w   s   
zSVHN._check_integrityc                 C   s(   | j | j d }t| j| j| j| d S r:   )r   r   r
   r!   r   r"   )r-   r;   r1   r1   r2   r   }   s   zSVHN.downloadc                 C   s   dj di | jS )NzSplit: {split}r1   )format__dict__r8   r1   r1   r2   
extra_repr   s   zSVHN.extra_repr)r   NNF)r   N)__name__
__module____qualname____doc__r   r   strr   r   r   boolr   r4   r   r   r6   r9   r#   r   r>   __classcell__r1   r1   r/   r2   r      s8    
(
r   )Zos.pathr&   pathlibr   typingr   r   r   r   numpyr*   ZPILr   utilsr	   r
   r   Zvisionr   r   r1   r1   r1   r2   <module>   s    