o
    )i&                  
   @   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 n e	e
fy> Z zede d	 W Y dZ[ndZ[ww G d
d deZdedejfddZdedejddfddZejfdejdedejfddZd.dejdedejfddZd.dejdedefddZejdfdejdededejfd d!Zd/dejd#edejfd$d%Zd/dejded#efd&d'Zejfdejdedejfd(d)Zejfdededejfd*d+Zejfdededejfd,d-ZdS )0    )Enum)warnN   )_load_library)_log_api_usage_onceimagez(Failed to load image Python extension: 'z'If you don't plan on using image functionality from `torchvision.io`, you can ignore this warning. Otherwise, there might be something wrong with your environment. Did you have `libjpeg` or `libpng` installed before building `torchvision` from source?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RGBZ	RGB_ALPHA r   r   c/var/www/html/eduruby.in/lip-sync/lip-sync-env/lib/python3.10/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   c                 C   s0   t j st j stt t jj| | dS )z
    Writes the contents of an 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   8   s   	r   inputmodec                 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!   F   s   r!      compression_levelc                 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'   ]   s   r'   c                 C   4   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)   r   s   
r)   cpudevicec                 C   s^   t j st j stt t |}|jdkr$t jj	
| |j|}|S t jj	| |j}|S )af  
    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. The supported modes are: ``ImageReadMode.UNCHANGED``,
            ``ImageReadMode.GRAY`` and ``ImageReadMode.RGB``
            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   qualityc                 C   sH   t j st j stt |dk s|dkrt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   c                 C   r(   )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   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/   )enumr   warningsr   r   	extensionr   utilsr   ImportErrorOSErrorer   strZTensorr   r   r   r!   intr'   r)   r-   r2   r4   r5   r6   r8   r   r   r   r   <module>   sD    
	 
* "