
    cCin&                         S r SSKJrJr  SSKrSSKJrJr  SSK	J
r
JrJr  SSKJrJrJrJrJrJrJrJr  SSKJrJrJr  SS	KJr  \R8                  " \5      r " S
 S\5      rS/r g)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                     ^  \ rS rSrSrS/r    SS\S\\\	4   S\S\SS	4
U 4S
 jjjr
\S 5       r\R                  S 5       r  SS\R                  S\S\\\\4      S\\\\4      4S jjr\" 5       \" SSSS9S	S	S	S	S	\R,                  S	4S\S\\   S\\	   S\\   S\\   S\\\\4      S\\\4   S\\\\4      4S jj5       5       rSrU =r$ )Swin2SRImageProcessor(   a  
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_padsize_divisorreturnNc                    > [         TU ]  " S0 UD6  Xl        X l        X0l        UR                  S5      nUb  X@l        g UU l        g )Npad_size )super__init__r   r   r   getr   )selfr   r   r   r   kwargsr!   	__class__s          n/home/james-whalen/.local/lib/python3.13/site-packages/transformers/models/swin2sr/image_processing_swin2sr.pyr$   Swin2SRImageProcessor.__init__7   sE     	"6"$,::j),8,DL(    c                 D    [         R                  S5        U R                  $ Nzb`self.pad_size` attribute is deprecated and will be removed in v5. Use `self.size_divisor` insteadloggerwarningr   )r&   s    r)   r!   Swin2SRImageProcessor.pad_sizeG   s    p	
    r+   c                 :    [         R                  S5        Xl        g r-   r.   )r&   values     r)   r!   r1   N   s    p	
 "r+   imagesizedata_formatinput_data_formatc                 v    [        X5      u  pVXR-  S-   U-  U-
  nXb-  S-   U-  U-
  n[        USU4SU44SUUS9$ )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)moder6   r7   )r   r	   )	r&   r4   r5   r6   r7   
old_height	old_width
pad_height	pad_widths	            r)   r	   Swin2SRImageProcessor.padU   sh    : !/u H
 (1,4zA
&*d2Y>	_q)n-#/
 	
r+   r!   v5)versionnew_nameimagesreturn_tensorsc	           	         Ub  UOU R                   nUb  UOU R                  nUb  UOU R                  nUb  UOU R                  n[	        U5      n[        U5      (       d  [        S5      e[        UUS9  U V	s/ s H  n	[        U	5      PM     nn	U(       a(  [        US   5      (       a  [        R                  S5        Uc  [        US   5      nU(       a   U V	s/ s H  n	U R                  XUS9PM     nn	U(       a  U V	s/ s H  oR                  XUS9PM     nn	U V	s/ s H  n	[        XUS9PM     nn	SU0n
[!        XS	9$ s  sn	f s  sn	f s  sn	f s  sn	f )
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.
zkInvalid image type. Must be of type PIL.Image.Image, numpy.ndarray, torch.Tensor, tf.Tensor or jax.ndarray.)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.)r4   scaler7   )r5   r7   )input_channel_dimr   )datatensor_type)r   r   r   r   r   r   
ValueErrorr   r   r   r/   warning_oncer   rescaler	   r
   r   )r&   rD   r   r   r   r   rE   r6   r7   r4   rI   s              r)   
preprocess Swin2SRImageProcessor.preprocess~   s   ` $.#9Zt
+9+E4K^K^!-4;;'3'?|TEVEV)&1F##:  	&!)	
 6<<VE.'V</&)44s
 $ >vay I $#E 5Rcd#  
 kqrkqbghhuK\h]kqFr ou
ntej'N_`nt 	 
 'BB5 = s
s   9EE	E!E)r   r   r   r   )Tgp?T   )NN)__name__
__module____qualname____firstlineno____doc__model_input_namesboolr   intfloatr$   propertyr!   setternpndarrayr   strr   r	   r   r   FIRSTr   r   rN   __static_attributes____classcell__)r(   s   @r)   r   r   (   s   
 ((  ,3SS c5j)S 	S
 S 
S S  ! ! __" " ?CDH'
zz'
 '
 eC)9$9:;	'

 $E#/?*?$@A'
R %&ZG &**.!%&*;?4D4J4JDH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 H 'ZCr+   r   )!rU   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_loggerrQ   r/   r   __all__r"   r+   r)   <module>rk      sb    ) "  F P P	 	 	 J I 0 
		H	%rC. rCj #
#r+   