
     `in&                         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j        e          Z G 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                       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Z	e
d             Zej        d             Z	 	 ddej        dedeeeef                  deeeef                  fdZ e             e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                        Z x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                      t                      j        di | || _        || _        || _        |                    d          }||n|| _        d S )Npad_size )super__init__r   r   r   getr   )selfr   r   r   r   kwargsr"   	__class__s          /home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/transformers/models/swin2sr/image_processing_swin2sr.pyr%   zSwin2SRImageProcessor.__init__7   s`     	""6"""$,::j)),8,DLL(    c                 D    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'   s    r*   r"   zSwin2SRImageProcessor.pad_sizeG   s&    p	
 	
 	
   r+   c                 H    t                               d           || _        d S r-   r.   )r'   values     r*   r"   zSwin2SRImageProcessor.pad_sizeN   s+    p	
 	
 	
 "r+   imagesizedata_formatinput_data_formatc                     t          ||          \  }}||z  dz   |z  |z
  }||z  dz   |z  |z
  }t          |d|fd|ff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)moder5   r6   )r   r	   )	r'   r3   r4   r5   r6   
old_height	old_width
pad_height	pad_widths	            r*   r	   zSwin2SRImageProcessor.padU   s~    : !/u6G H H
I D(1,4zA
$&*d2Y>	_q)n-#/
 
 
 	
r+   r"   v5)versionnew_nameimagesreturn_tensorsc	                     ||n j         }n j        ||n j        }n j        t	          |          }t          |          st          d          t          |           d |D             }|r/t          |d                   rt          
                    d           t          |d                   |r fd|D             }|r fd|D             }fd	|D             }d
|i}	t          |	|          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                 ,    g | ]}t          |          S r#   )r   ).0r3   s     r*   
<listcomp>z4Swin2SRImageProcessor.preprocess.<locals>.<listcomp>   s     <<<E.''<<<r+   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                 @    g | ]}                     |           S ))r3   scaler6   )rescale)rF   r3   r6   r   r'   s     r*   rG   z4Swin2SRImageProcessor.preprocess.<locals>.<listcomp>   s<        5Rcdd  r+   c                 @    g | ]}                     |           S ))r4   r6   )r	   )rF   r3   r6   r'   r   s     r*   rG   z4Swin2SRImageProcessor.preprocess.<locals>.<listcomp>   s-    rrrbgdhhu<K\h]]rrrr+   c                 4    g | ]}t          |           S ))input_channel_dim)r
   )rF   r3   r5   r6   s     r*   rG   z4Swin2SRImageProcessor.preprocess.<locals>.<listcomp>   s7     
 
 
ej'{N_```
 
 
r+   r   )datatensor_type)r   r   r   r   r   r   
ValueErrorr   r   r/   warning_oncer   r   )
r'   rB   r   r   r   r   rC   r5   r6   rN   s
   `  ` ` `` r*   
preprocessz Swin2SRImageProcessor.preprocess~   s   ` $.#9ZZt
+9+E4K^!-4;'3'?||TEV)&11F## 	:   	&!)	
 	
 	
 	
 =<V<<< 	/&)44 	s  
 $ >vay I I 	     #  F
  	srrrrrrkqrrrF
 
 
 
 
nt
 
 
 '>BBBBr+   )Tr   Tr   )NN)__name__
__module____qualname____doc__model_input_namesboolr   intfloatr%   propertyr"   setternpndarrayr   strr   r	   r   r   FIRSTr   r   rR   __classcell__)r)   s   @r*   r   r   (   s\       
 
 ((  ,3S SS c5j)S 	S
 S 
S S S S S S  ! ! X! _" " _" ?CDH'
 '
z'
 '
 eC)9$9:;	'

 $E#/?*?$@A'
 '
 '
 '
R %$&&_ZGGG &**.!%&*;?4D4JDHZC ZCZC TNZC !	ZC
 ZC smZC !sJ!78ZC 3 001ZC $E#/?*?$@AZC ZC ZC HG '&ZC ZC ZC ZC ZCr+   r   )!rV   typingr   r   numpyr]   image_processing_utilsr   r   image_transformsr   r	   r
   image_utilsr   r   r   r   r   r   r   r   utilsr   r   r   utils.deprecationr   
get_loggerrS   r/   r   __all__r#   r+   r*   <module>rk      s\   ) ( " " " " " " " "     F F F F F F F F P P P P P P P P P P	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 J I I I I I I I I I 0 0 0 0 0 0 
	H	%	%rC rC rC rC rC. rC rC rCj #
#r+   