U
    h                     @   sv   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
m  mZ ddlmZ G dd dejZG dd	 d	ZdS )
    N)Path)AnyCallableListOptionalTupleUnion   )_log_api_usage_oncec                   @   s   e Zd ZdZdZdeeef ee	 ee	 ee	 ddddZ
eeddd	Zed
ddZed
ddZe	eee dddZed
ddZdS )VisionDatasetaB  
    Base Class For making datasets which are compatible with torchvision.
    It is necessary to override the ``__getitem__`` and ``__len__`` method.

    Args:
        root (string, optional): Root directory of dataset. Only used for `__repr__`.
        transforms (callable, optional): A function/transforms that takes in
            an image and a label and returns the transformed versions of both.
        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.

    .. note::

        :attr:`transforms` and the combination of :attr:`transform` and :attr:`target_transform` are mutually exclusive.
       N)root
transforms	transformtarget_transformreturnc                 C   sp   t |  t|trtj|}|| _|d k	}|d k	p:|d k	}|rL|rLtd|| _|| _	|rft
||}|| _d S )NzGOnly transforms or transform/target_transform can be passed as argument)r
   
isinstancestrospath
expanduserr   
ValueErrorr   r   StandardTransformr   )selfr   r   r   r   Zhas_transformsZhas_separate_transform r   M/var/www/html/venv/lib/python3.8/site-packages/torchvision/datasets/vision.py__init__   s    

zVisionDataset.__init__)indexr   c                 C   s   t dS )z
        Args:
            index (int): Index

        Returns:
            (Any): Sample and meta data, optionally transformed by the respective transforms.
        NNotImplementedError)r   r   r   r   r   __getitem__8   s    zVisionDataset.__getitem__r   c                 C   s   t d S Nr   r   r   r   r   __len__B   s    zVisionDataset.__len__c                    s   d j j }d   g} jd k	r8|d j  |   7 }t drl jd k	rl|t	 jg7 }|g fdd|D  }d
|S )NzDataset zNumber of datapoints: zRoot location: r   c                    s   g | ]}d  j  | qS ) )_repr_indent.0liner#   r   r   
<listcomp>M   s     z*VisionDataset.__repr__.<locals>.<listcomp>
)	__class____name__r$   r   append
extra_repr
splitlineshasattrr   reprjoin)r   headbodylinesr   r#   r   __repr__E   s    
zVisionDataset.__repr__r   r4   r   c                    s8   |   }  |d  g fdd|dd  D  S )Nr   c                    s    g | ]}d  dt  |qS z{}{}r%   formatlenr'   r4   r   r   r*   R   s     z8VisionDataset._format_transform_repr.<locals>.<listcomp>   r7   r0   r   r   r4   r6   r   r=   r   _format_transform_reprP   s    z$VisionDataset._format_transform_reprc                 C   s   dS )N r   r#   r   r   r   r/   T   s    zVisionDataset.extra_repr)NNNN)r-   
__module____qualname____doc__r&   r   r   r   r   r   r   intr   r    r$   r7   r   rA   r/   r   r   r   r   r   
   s$       

r   c                   @   sf   e Zd Zdee ee ddddZeeeeef dddZee	e
e	 dd	d
Ze	dddZdS )r   N)r   r   r   c                 C   s   || _ || _d S r"   r   r   )r   r   r   r   r   r   r   Y   s    zStandardTransform.__init__)inputtargetr   c                 C   s0   | j d k	r|  |}| jd k	r(| |}||fS r"   rG   )r   rH   rI   r   r   r   __call__]   s
    



zStandardTransform.__call__r8   c                    s8   |   }  |d  g fdd|dd  D  S )Nr   c                    s    g | ]}d  dt  |qS r9   r:   r'   r=   r   r   r*   f   s     z<StandardTransform._format_transform_repr.<locals>.<listcomp>r>   r?   r@   r   r=   r   rA   d   s    z(StandardTransform._format_transform_reprr!   c                 C   sL   | j jg}| jd k	r&|| | jd7 }| jd k	rB|| | jd7 }d|S )NzTransform: zTarget transform: r+   )r,   r-   r   rA   r   r3   )r   r5   r   r   r   r7   h   s    


zStandardTransform.__repr__)NN)r-   rC   rD   r   r   r   r   r   rJ   r   r   rA   r7   r   r   r   r   r   X   s   r   )r   pathlibr   typingr   r   r   r   r   r   Ztorch.utils.datautilsdatar
   ZDatasetr   r   r   r   r   r   <module>   s    N