o
    in&                     @   s   d Z ddlmZmZ ddlZddlmZmZ ddl	m
Z
mZmZ ddlmZmZmZmZmZmZmZmZ ddlmZmZmZ dd	lmZ eeZG d
d deZdgZ dS )z"Image processor class for Swin2SR.    )OptionalUnionN   )BaseImageProcessorBatchFeature)get_image_sizepadto_channel_dimension_format)ChannelDimension
ImageInputinfer_channel_dimension_formatis_scaled_imagemake_flat_list_of_imagesto_numpy_arrayvalid_imagesvalidate_preprocess_arguments)
TensorTypefilter_out_non_signature_kwargslogging)deprecate_kwargc                       s"  e Zd ZdZdgZ				ddedeeef ded	ed
df
 fddZ	e
dd Zejdd Z		ddejdedeeeef  deeeef  fddZe eddd	ddddddejdfdedee dee dee d	ee deeeef  deeef deeeef  fddZ  ZS ) Swin2SRImageProcessora  
    Constructs a Swin2SR image processor.

    Args:
        do_rescale (`bool`, *optional*, defaults to `True`):
            Whether to rescale the image by the specified scale `rescale_factor`. Can be overridden by the `do_rescale`
            parameter in the `preprocess` method.
        rescale_factor (`int` or `float`, *optional*, defaults to `1/255`):
            Scale factor to use if rescaling the image. Can be overridden by the `rescale_factor` parameter in the
            `preprocess` method.
    pixel_valuesTp?   
do_rescalerescale_factordo_padsize_divisorreturnNc                    sJ   t  jdi | || _|| _|| _|d}|d ur || _d S || _d S )Npad_size )super__init__r   r   r   getr   )selfr   r   r   r   kwargsr   	__class__r    h/home/ubuntu/.local/lib/python3.10/site-packages/transformers/models/swin2sr/image_processing_swin2sr.pyr"   7   s   
zSwin2SRImageProcessor.__init__c                 C   s   t d | jS Nzb`self.pad_size` attribute is deprecated and will be removed in v5. Use `self.size_divisor` insteadloggerwarningr   )r$   r    r    r(   r   G   s   zSwin2SRImageProcessor.pad_sizec                 C   s   t d || _d S r)   r*   )r$   valuer    r    r(   r   N   s   
imagesizedata_formatinput_data_formatc           	      C   sT   t ||\}}|| d | | }|| d | | }t|d|fd|ffd||dS )a  
        Pad an image to make the height and width divisible by `size`.

        Args:
            image (`np.ndarray`):
                Image to pad.
            size (`int`):
                The size to make the height and width divisible by.
            data_format (`str` or `ChannelDimension`, *optional*):
                The channel dimension format for the output image. If unset, the channel dimension format of the input
                image is used. Can be one of:
                - `"channels_first"` or `ChannelDimension.FIRST`: image in (num_channels, height, width) format.
                - `"channels_last"` or `ChannelDimension.LAST`: image in (height, width, num_channels) format.
            input_data_format (`str` or `ChannelDimension`, *optional*):
                The channel dimension format for the input image. If unset, the channel dimension format is inferred
                from the input image. Can be one of:
                - `"channels_first"` or `ChannelDimension.FIRST`: image in (num_channels, height, width) format.
                - `"channels_last"` or `ChannelDimension.LAST`: image in (height, width, num_channels) format.

        Returns:
            `np.ndarray`: The padded image.
           r   	symmetric)moder0   r1   )r   r   )	r$   r.   r/   r0   r1   
old_height	old_width
pad_height	pad_widthr    r    r(   r   U   s   zSwin2SRImageProcessor.padr   v5)versionnew_nameimagesreturn_tensorsc	           
         s  |dur|nj }durnj|dur|nj}dur!njt|}t|s0tdt|d dd |D }|rJt|d rJt	
d du rTt|d |rafdd|D }|rnfd	d|D } fd
d|D }d|i}	t|	|dS )a
  
        Preprocess an image or batch of images.

        Args:
            images (`ImageInput`):
                Image to preprocess. Expects a single or batch of images with pixel values ranging from 0 to 255. If
                passing in images with pixel values between 0 and 1, set `do_rescale=False`.
            do_rescale (`bool`, *optional*, defaults to `self.do_rescale`):
                Whether to rescale the image values between [0 - 1].
            rescale_factor (`float`, *optional*, defaults to `self.rescale_factor`):
                Rescale factor to rescale the image by if `do_rescale` is set to `True`.
            do_pad (`bool`, *optional*, defaults to `True`):
                Whether to pad the image to make the height and width divisible by `window_size`.
            size_divisor (`int`, *optional*, defaults to 32):
                The size of the sliding window for the local attention.
            return_tensors (`str` or `TensorType`, *optional*):
                The type of tensors to return. Can be one of:
                - Unset: Return a list of `np.ndarray`.
                - `TensorType.TENSORFLOW` or `'tf'`: Return a batch of typ, input_data_format=input_data_format
                  `tf.Tensor`.
                - `TensorType.PYTORCH` or `'pt'`: Return a batch of type `torch.Tensor`.
                - `TensorType.NUMPY` or `'np'`: Return a batch of type `np.ndarray`.
                - `TensorType.JAX` or `'jax'`: Return a batch of type `jax.numpy.ndarray`.
            data_format (`ChannelDimension` or `str`, *optional*, defaults to `ChannelDimension.FIRST`):
                The channel dimension format for the output image. Can be one of:
                - `"channels_first"` or `ChannelDimension.FIRST`: image in (num_channels, height, width) format.
                - `"channels_last"` or `ChannelDimension.LAST`: image in (height, width, num_channels) format.
                - Unset: Use the channel dimension format of the input image.
            input_data_format (`ChannelDimension` or `str`, *optional*):
                The channel dimension format for the input image. If unset, the channel dimension format is inferred
                from the input image. Can be one of:
                - `"channels_first"` or `ChannelDimension.FIRST`: image in (num_channels, height, width) format.
                - `"channels_last"` or `ChannelDimension.LAST`: image in (height, width, num_channels) format.
                - `"none"` or `ChannelDimension.NONE`: image in (height, width) format.
        NzkInvalid image type. Must be of type PIL.Image.Image, numpy.ndarray, torch.Tensor, tf.Tensor or jax.ndarray.)r   r   c                 S   s   g | ]}t |qS r    )r   .0r.   r    r    r(   
<listcomp>   s    z4Swin2SRImageProcessor.preprocess.<locals>.<listcomp>r   zIt looks like you are trying to rescale already rescaled images. If the input images have pixel values between 0 and 1, set `do_rescale=False` to avoid rescaling them again.c                    s   g | ]
}j | d qS ))r.   scaler1   )rescaler>   )r1   r   r$   r    r(   r@      s    c                    s   g | ]
}j | d qS ))r/   r1   )r   r>   )r1   r$   r   r    r(   r@      s    c                    s   g | ]	}t | d qS ))input_channel_dim)r	   r>   )r0   r1   r    r(   r@      s    r   )datatensor_type)r   r   r   r   r   r   
ValueErrorr   r   r+   warning_oncer   r   )
r$   r<   r   r   r   r   r=   r0   r1   rD   r    )r0   r1   r   r$   r   r(   
preprocess~   s>   0z Swin2SRImageProcessor.preprocess)Tr   Tr   )NN)__name__
__module____qualname____doc__model_input_namesboolr   intfloatr"   propertyr   setternpndarrayr   strr
   r   r   r   FIRSTr   r   rH   __classcell__r    r    r&   r(   r   (   sv    




)
	r   )!rL   typingr   r   numpyrS   image_processing_utilsr   r   image_transformsr   r   r	   image_utilsr
   r   r   r   r   r   r   r   utilsr   r   r   utils.deprecationr   
get_loggerrI   r+   r   __all__r    r    r    r(   <module>   s   (

 
6