
    qi>#                         d 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 ddlmZmZmZ  ej2                  e      Z G d	 d
ed      Z G d de      ZdgZy)z"Image processor class for Swin2SR.    N   )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)ImagesKwargs)
TensorTypefilter_out_non_signature_kwargsloggingc                       e Zd ZU eed<   y)Swin2SRImageProcessorKwargssize_divisorN)__name__
__module____qualname__int__annotations__     f/opt/pipecat/venv/lib/python3.12/site-packages/transformers/models/swin2sr/image_processing_swin2sr.pyr   r   %   s    r   r   F)totalc                   2    e Zd ZdZdgZeZ	 	 	 	 ddedee	z  dededdf
 fd	Z
	 	 dd
ej                  dedeez  dz  deez  dz  fdZ e       dddddej"                  dfdededz  de	dz  dedz  dedz  deez  dz  deez  deez  dz  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_values
do_rescalerescale_factordo_padr   returnNc                     t        |   di | || _        || _        || _        |j                  d      }||| _        y || _        y )Npad_sizer   )super__init__r$   r%   r&   getr   )selfr$   r%   r&   r   kwargsr)   	__class__s          r   r+   zSwin2SRImageProcessor.__init__9   sM     	"6"$,::j),8,DL(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)moder2   r3   )r   r   )	r-   r0   r1   r2   r3   
old_height	old_width
pad_height	pad_widths	            r   r   zSwin2SRImageProcessor.padI   sq    : !/u6G H
I D(1,4zA
$&*d2Y>	_q)n-#/
 	
r   imagesreturn_tensorsc	                    ||n| j                   }||n| j                  }||n| j                  }||n| j                  }t	        |      }t        |      st        d      t        ||       |D 	cg c]  }	t        |	       }}	|r#t        |d         rt        j                  d       |t        |d         }|r!|D 	cg c]  }	| j                  |	||       }}	|r!|D 	cg c]  }	| j                  |	||       }}	|D 	cg c]  }	t        |	||       }}	d|i}
t!        |
|	      S c c}	w c c}	w c c}	w c c}	w )
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.PYTORCH` or `'pt'`: Return a batch of type `torch.Tensor`.
                - `TensorType.NUMPY` or `'np'`: Return a batch of type `np.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.
        zSInvalid image type. Must be of type PIL.Image.Image, numpy.ndarray, or torch.Tensor)r$   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.)r0   scaler3   )r1   r3   )input_channel_dimr#   )datatensor_type)r$   r%   r&   r   r   r   
ValueErrorr   r   r   loggerwarning_oncer   rescaler   r   r   )r-   r<   r$   r%   r&   r   r=   r2   r3   r0   rA   s              r   
preprocessz Swin2SRImageProcessor.preprocessr   sz   X $.#9Zt
+9+E4K^K^!-4;;'3'?|TEVEV)&1F#rss%!)	
 6<<E.'<</&)4s
 $ >vay I $ 5RcdF 
 kqrbgdhhu<K\h]rFr ou
ej'{N_`
 
 '>BB5 = s
s   3D.D3%D8D=)Tgp?T   )NN)r   r   r   __doc__model_input_namesr   valid_kwargsboolr   floatr+   npndarraystrr	   r   r   FIRSTr
   r   rG   __classcell__)r/   s   @r   r"   r"   )   st   
 ((.L  &-SS eS 	S
 S 
S( 6:;?'
zz'
 '
 ++d2	'

 !11D8'
R %& #''+"#'26.>.D.D;?TCTC 4KTC 	TC
 tTC DjTC j(4/TC ++TC !11D8TC 'TCr   r"   )rI   numpyrN   image_processing_utilsr   r   image_transformsr   r   r   image_utilsr	   r
   r   r   r   r   r   r   processing_utilsr   utilsr   r   r   
get_loggerr   rD   r   r"   __all__r   r   r   <module>r[      sn    )  F P P	 	 	 - I I 
		H	%,e ^C. ^CB #
#r   