a
    PSic$                  
   @   s  d dl mZ d dlmZ d dlZddlmZ ddlmZ zed W n6 e	e
fyz Z zede  W Y dZ[n
dZ[0 0 G d	d
 d
eZeejdddZeejddddZejfejeejdddZd-ejeejdddZd.ejeedddZejdfejeeejdddZd/ejeejd d!d"Zd0ejeed#d$d%Zejfejeejdd&d'Zejfeeejd(d)d*Zejfeeejd(d+d,ZdS )1    )Enum)warnN   )_load_library)_log_api_usage_onceimagez'Failed to load image Python extension: c                   @   s$   e Zd ZdZdZdZdZdZdZdS )ImageReadModeaV  
    Support for various modes while reading images.

    Use ``ImageReadMode.UNCHANGED`` for loading the image as-is,
    ``ImageReadMode.GRAY`` for converting to grayscale,
    ``ImageReadMode.GRAY_ALPHA`` for grayscale with transparency,
    ``ImageReadMode.RGB`` for RGB and ``ImageReadMode.RGB_ALPHA`` for
    RGB with transparency.
    r      r         N)	__name__
__module____qualname____doc__	UNCHANGEDZGRAYZ
GRAY_ALPHARGB	RGB_ALPHA r   r   P/var/www/html/django/DPS/env/lib/python3.9/site-packages/torchvision/io/image.pyr      s   
r   )pathreturnc                 C   s.   t j st j stt t jj| }|S )z
    Reads and outputs the bytes contents of a file as a uint8 Tensor
    with one dimension.

    Args:
        path (str): the path to the file to be read

    Returns:
        data (Tensor)
    )torchjitis_scripting
is_tracingr   	read_fileopsr   )r   datar   r   r   r   "   s    r   )filenamer   r   c                 C   s0   t j st j stt t jj| | dS )z
    Writes the contents of a uint8 tensor with one dimension to a
    file.

    Args:
        filename (str): the path to the file to be written
        data (Tensor): the contents to be written to the output file
    N)r   r   r   r   r   
write_filer   r   )r   r   r   r   r   r   3   s    	r   )inputmoder   c                 C   s4   t j st j stt t jj| |jd}|S )aw  
    Decodes a PNG image into a 3 dimensional RGB or grayscale Tensor.
    Optionally converts the image to the desired format.
    The values of the output tensor are uint8 in [0, 255].

    Args:
        input (Tensor[1]): a one dimensional uint8 tensor containing
            the raw bytes of the PNG image.
        mode (ImageReadMode): the read mode used for optionally
            converting the image. Default: ``ImageReadMode.UNCHANGED``.
            See `ImageReadMode` class for more information on various
            available modes.

    Returns:
        output (Tensor[image_channels, image_height, image_width])
    F)	r   r   r   r   r   
decode_pngr   r   valuer    r!   outputr   r   r   r"   A   s    r"      )r    compression_levelr   c                 C   s0   t j st j stt t jj| |}|S )a	  
    Takes an input tensor in CHW layout and returns a buffer with the contents
    of its corresponding PNG file.

    Args:
        input (Tensor[channels, image_height, image_width]): int8 image tensor of
            ``c`` channels, where ``c`` must 3 or 1.
        compression_level (int): Compression factor for the resulting file, it must be a number
            between 0 and 9. Default: 6

    Returns:
        Tensor[1]: A one dimensional int8 tensor that contains the raw bytes of the
            PNG file.
    )r   r   r   r   r   
encode_pngr   r   )r    r'   r%   r   r   r   r(   X   s    r(   )r    r   r'   c                 C   s4   t j st j stt t| |}t|| dS )a  
    Takes an input tensor in CHW layout (or HW in the case of grayscale images)
    and saves it in a PNG file.

    Args:
        input (Tensor[channels, image_height, image_width]): int8 image tensor of
            ``c`` channels, where ``c`` must be 1 or 3.
        filename (str): Path to save the image.
        compression_level (int): Compression factor for the resulting file, it must be a number
            between 0 and 9. Default: 6
    N)r   r   r   r   r   	write_pngr(   r   )r    r   r'   r%   r   r   r   r)   m   s    
r)   cpu)r    r!   devicer   c                 C   s\   t j st j stt t |}|jdkrFt jj	
| |j|}nt jj	| |j}|S )a  
    Decodes a JPEG image into a 3 dimensional RGB or grayscale Tensor.
    Optionally converts the image to the desired format.
    The values of the output tensor are uint8 between 0 and 255.

    Args:
        input (Tensor[1]): a one dimensional uint8 tensor containing
            the raw bytes of the JPEG image. This tensor must be on CPU,
            regardless of the ``device`` parameter.
        mode (ImageReadMode): the read mode used for optionally
            converting the image. Default: ``ImageReadMode.UNCHANGED``.
            See ``ImageReadMode`` class for more information on various
            available modes.
        device (str or torch.device): The device on which the decoded image will
            be stored. If a cuda device is specified, the image will be decoded
            with `nvjpeg <https://developer.nvidia.com/nvjpeg>`_. This is only
            supported for CUDA version >= 10.1

            .. betastatus:: device parameter

            .. warning::
                There is a memory leak in the nvjpeg library for CUDA versions < 11.6.
                Make sure to rely on CUDA 11.6 or above before using ``device="cuda"``.

    Returns:
        output (Tensor[image_channels, image_height, image_width])
    cuda)r   r   r   r   r   decode_jpegr+   typer   r   Zdecode_jpeg_cudar#   )r    r!   r+   r%   r   r   r   r-      s    

r-   K   )r    qualityr   c                 C   sH   t j st j stt |dk s,|dkr4tdt jj| |}|S )a
  
    Takes an input tensor in CHW layout and returns a buffer with the contents
    of its corresponding JPEG file.

    Args:
        input (Tensor[channels, image_height, image_width])): int8 image tensor of
            ``c`` channels, where ``c`` must be 1 or 3.
        quality (int): Quality of the resulting JPEG file, it must be a number between
            1 and 100. Default: 75

    Returns:
        output (Tensor[1]): A one dimensional int8 tensor that contains the raw bytes of the
            JPEG file.
    r	   d   z;Image quality should be a positive number between 1 and 100)	r   r   r   r   r   encode_jpeg
ValueErrorr   r   )r    r0   r%   r   r   r   r2      s    r2   )r    r   r0   c                 C   s4   t j st j stt t| |}t|| dS )a  
    Takes an input tensor in CHW layout and saves it in a JPEG file.

    Args:
        input (Tensor[channels, image_height, image_width]): int8 image tensor of ``c``
            channels, where ``c`` must be 1 or 3.
        filename (str): Path to save the image.
        quality (int): Quality of the resulting JPEG file, it must be a number
            between 1 and 100. Default: 75
    N)r   r   r   r   r   
write_jpegr2   r   )r    r   r0   r%   r   r   r   r4      s    
r4   c                 C   s2   t j st j stt t jj| |j}|S )a  
    Detects whether an image is a JPEG or PNG and performs the appropriate
    operation to decode the image into a 3 dimensional RGB or grayscale Tensor.

    Optionally converts the image to the desired format.
    The values of the output tensor are uint8 in [0, 255].

    Args:
        input (Tensor): a one dimensional uint8 tensor containing the raw bytes of the
            PNG or JPEG image.
        mode (ImageReadMode): the read mode used for optionally converting the image.
            Default: ``ImageReadMode.UNCHANGED``.
            See ``ImageReadMode`` class for more information on various
            available modes.

    Returns:
        output (Tensor[image_channels, image_height, image_width])
    )	r   r   r   r   r   decode_imager   r   r#   r$   r   r   r   r5      s    r5   )r   r!   r   c                 C   s.   t j st j stt t| }t||S )aA  
    Reads a JPEG or PNG image into a 3 dimensional RGB or grayscale Tensor.
    Optionally converts the image to the desired format.
    The values of the output tensor are uint8 in [0, 255].

    Args:
        path (str): path of the JPEG or PNG image.
        mode (ImageReadMode): the read mode used for optionally converting the image.
            Default: ``ImageReadMode.UNCHANGED``.
            See ``ImageReadMode`` class for more information on various
            available modes.

    Returns:
        output (Tensor[image_channels, image_height, image_width])
    )r   r   r   r   r   
read_imager   r5   r   r!   r   r   r   r   r6      s    r6   c                 C   s   t | }tjj||jdS )NT)r   r   r   r   r"   r#   r7   r   r   r   _read_png_16   s    r8   )r&   )r&   )r/   )r/   )enumr   warningsr   r   	extensionr   utilsr   ImportErrorOSErrorer   strTensorr   r   r   r"   intr(   r)   r-   r2   r4   r5   r6   r8   r   r   r   r   <module>   s0   $(