o
    ^i                     @   sp   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 ddlmZ G d	d
 d
eZdS )    N)Path)AnyCallableOptionalUnion   )_Image_fromarray   )check_integritydownload_url)VisionDatasetc                       s   e Zd ZdZdZdZdZ			ddeee	f 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  ZS )SEMEIONa  `SEMEION <http://archive.ics.uci.edu/ml/datasets/semeion+handwritten+digit>`_ Dataset.

    Args:
        root (str or ``pathlib.Path``): Root directory of dataset where directory
            ``semeion.py`` exists.
        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.

    zMhttp://archive.ics.uci.edu/ml/machine-learning-databases/semeion/semeion.datazsemeion.data cb545d371d2ce14ec121470795a77432NTroot	transformtarget_transformdownloadreturnc                    s   t  j|||d |r|   |  stdtj| j| j	}t
|}|d d d df d d| _t
| jd| _t
|d d dd f d | _d S )N)r   r   zHDataset not found or corrupted. You can use download=True to download it      uint8)   r   r	   )super__init__r   _check_integrityRuntimeErrorospathjoinr   filenamenploadtxtastypedatareshapenonzerolabels)selfr   r   r   r   fpr$   	__class__ W/var/www/html/RAG/RAG_venv/lib/python3.10/site-packages/torchvision/datasets/semeion.pyr       s   
 $zSEMEION.__init__indexc                 C   sV   | j | t| j| }}t|d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.
        L)modeN)r$   intr'   r   r   r   )r(   r.   imgtargetr,   r,   r-   __getitem__7   s   



zSEMEION.__getitem__c                 C   s
   t | jS N)lenr$   )r(   r,   r,   r-   __len__M   s   
zSEMEION.__len__c                 C   s*   | j }tj|| j}t|| jsdS dS )NFT)r   r   r   r   r    r
   md5_checksum)r(   r   fpathr,   r,   r-   r   P   s
   zSEMEION._check_integrityc                 C   s*   |   rd S | j}t| j|| j| j d S r5   )r   r   r   urlr    r8   )r(   r   r,   r,   r-   r   W   s   zSEMEION.download)NNT)r   N)__name__
__module____qualname____doc__r:   r    r8   r   strr   r   r   boolr   r1   tupler   r4   r7   r   r   __classcell__r,   r,   r*   r-   r      s.    
r   )os.pathr   pathlibr   typingr   r   r   r   numpyr!   utilsr   r
   r   visionr   r   r,   r,   r,   r-   <module>   s    