
    cCi\7                         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  SSKJrJrJr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  \R<                  " \5      r  " S
 S\5      r!S/r"g)z#Image processor class for ViTMatte.    )OptionalUnionN   )BaseImageProcessorBatchFeature)padto_channel_dimension_format)IMAGENET_STANDARD_MEANIMAGENET_STANDARD_STDChannelDimension
ImageInputget_image_size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                   F  ^  \ rS rSrSrS/r       SS\S\\\	4   S\S\
\\	\\	   4      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      S\R"                  4
S jjr\" 5       \" SSSS9SSSSSSSS\R.                  S4
S\S\S\
\   S\
\	   S\
\   S\
\\	\\	   4      S	\
\\	\\	   4      S
\
\   S\
\   S\
\\\4      S\\\4   S\
\\\4      4S jj5       5       rSrU =r$ )VitMatteImageProcessor+   ay  
Constructs a ViTMatte 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.
    do_normalize (`bool`, *optional*, defaults to `True`):
        Whether to normalize the image. Can be overridden by the `do_normalize` parameter in the `preprocess`
        method.
    image_mean (`float` or `list[float]`, *optional*, defaults to `IMAGENET_STANDARD_MEAN`):
        Mean to use if normalizing the image. This is a float or list of floats the length of the number of
        channels in the image. Can be overridden by the `image_mean` parameter in the `preprocess` method.
    image_std (`float` or `list[float]`, *optional*, defaults to `IMAGENET_STANDARD_STD`):
        Standard deviation to use if normalizing the image. This is a float or list of floats the length of the
        number of channels in the image. Can be overridden by the `image_std` parameter in the `preprocess` method.
    do_pad (`bool`, *optional*, defaults to `True`):
        Whether to pad the image to make the width and height divisible by `size_divisor`. Can be overridden
        by the `do_pad` parameter in the `preprocess` method.
    size_divisor (`int`, *optional*, defaults to 32):
        The width and height of the image will be padded to be divisible by this number.
pixel_valuesN
do_rescalerescale_factordo_normalize
image_mean	image_stddo_padsize_divisorreturnc                    > [         T
U ]  " S0 UD6  Xl        X0l        X`l        X l        Ub  UO[        U l        Ub  UO[        U l	        UR                  S5      n	U	b  Xl        g UU l        g )Nsize_divisibility )super__init__r   r   r"   r   r
   r    r   r!   getr#   )selfr   r   r   r    r!   r"   r#   kwargsr&   	__class__s             p/home/james-whalen/.local/lib/python3.13/site-packages/transformers/models/vitmatte/image_processing_vitmatte.pyr)   VitMatteImageProcessor.__init__H   sm     	"6"$(,(2(>*DZ&/&;AV"JJ':;1B1N-T`    c                 D    [         R                  S5        U R                  $ Nzk`self.size_divisibility` attribute is deprecated and will be removed in v5. Use `self.size_divisor` insteadloggerwarningr#   )r+   s    r.   r&   (VitMatteImageProcessor.size_divisibility]   s    y	
    r0   c                 :    [         R                  S5        Xl        g r2   r3   )r+   values     r.   r&   r6   d   s    y	
 "r0   imager&   data_formatinput_data_formatc                     Uc  [        U5      n[        X5      u  pVXR-  S:X  a  SOX%U-  -
  nXb-  S:X  a  SOX&U-  -
  nX-   S:  a  SU4SU44n	[        XX4S9nUb  [        XU5      nU$ )a  
Args:
    image (`np.ndarray`):
        Image to pad.
    size_divisibility (`int`, *optional*, defaults to 32):
        The width and height of the image will be padded to be divisible by this number.
    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.
r   )paddingr:   r;   )r   r   r   r	   )
r+   r9   r&   r:   r;   heightwidth
pad_height	pad_widthr=   s
             r.   	pad_image VitMatteImageProcessor.pad_imagek   s    2 $ >u E&u@ 49Q?P\mSm?m
2a7A=NYjQj=j	!A%:I7GKmE"/DUVEr0   v5)versionnew_nameimagestrimaps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b  UOU R                  nUb  UOU R
                  nU	b  U	OU R                  n	[        U5      n[        USS9n[        U5      (       d  [        S5      e[        U5      (       d  [        S5      e[        UUUUUS9  U Vs/ s H  n[        U5      PM     nn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 Vs/ s H  nU R!                  XUS9PM     nnU(       a   U Vs/ s H  nU R#                  XX|S	9PM     nnU[$        R&                  :X  a  S
OSn[)        X5       VVs/ s H.  u  p[*        R,                  " U[*        R.                  " XS9/US9PM0     nnnU(       a   U Vs/ s H  nU R1                  XUS9PM     nnU Vs/ s H  n[3        XUS9PM     nnSU0n[5        UU
S9$ s  snf s  snf s  snf s  snf s  snf s  sn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`.
    trimaps (`ImageInput`):
        Trimap to preprocess.
    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_normalize (`bool`, *optional*, defaults to `self.do_normalize`):
        Whether to normalize the image.
    image_mean (`float` or `list[float]`, *optional*, defaults to `self.image_mean`):
        Image mean to use if `do_normalize` is set to `True`.
    image_std (`float` or `list[float]`, *optional*, defaults to `self.image_std`):
        Image standard deviation to use if `do_normalize` is set to `True`.
    do_pad (`bool`, *optional*, defaults to `self.do_pad`):
        Whether to pad the image.
    size_divisor (`int`, *optional*, defaults to `self.size_divisor`):
        The size divisibility to pad the image to if `do_pad` is set to `True`.
    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 type `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.
   )expected_ndimszlInvalid trimap type. Must be of type PIL.Image.Image, numpy.ndarray, torch.Tensor, tf.Tensor or jax.ndarray.zkInvalid image type. Must be of type PIL.Image.Image, numpy.ndarray, torch.Tensor, tf.Tensor or jax.ndarray.)r   r   r   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.)r9   scaler;   )r9   meanstdr;   )axis)r&   r;   )r9   channel_diminput_channel_dimr   )datatensor_type)r   r   r"   r   r    r!   r#   r   r   
ValueErrorr   r   r   r4   warning_oncer   rescale	normalizer   LASTzipnpconcatenateexpand_dimsrB   r	   r   )r+   rG   rH   r   r   r   r    r!   r"   r#   rI   r:   r;   r9   trimaprQ   rT   s                    r.   
preprocess!VitMatteImageProcessor.preprocess   s   v $.#9Zt
'3'?|TEVEV!-4;;+9+E4K^K^#-#9Zt
!*!6IDNN	'3'?|TEVEV)&1*71EG$$: 
 F##:  	&!)%!	
 6<<VE.'V<8?@f>&)@/&)44s
 $ >vay I $#E 5Rcd#   &%F 6Sde%  
  $#E Up#   '*:*?*??rQ "%V!5
!5 NNE2>>&#DEDQ!5 	 

  $#E uXij#    
 (e`qr 	 

 '>BBa =@


s0   I!/I&I+1I0I55I:J =J)r   r"   r   r    r!   r   r#   )Tgp?TNNT    )rb   NN)__name__
__module____qualname____firstlineno____doc__model_input_namesboolr   intfloatr   listr)   propertyr&   setterr\   ndarraystrr   rB   r   r   FIRSTr   r   r`   __static_attributes____classcell__)r-   s   @r.   r   r   +   s   4 ((  ,3!:>9=aa c5j)a 	a
 U5$u+#567a E%e"456a a a 
a a* ! ! " " "$>BDH'zz' ' eC)9$9:;	'
 $E#/?*?$@A' 
'R %&($P
 &**.'+:>9=!%&*;?4D4J4JDHHCHC HC TN	HC
 !HC tnHC U5$u+#567HC E%e"456HC HC smHC !sJ!78HC 3 001HC $E#/?*?$@AHC Q 'HCr0   r   )#rg   typingr   r   numpyr\   image_processing_utilsr   r   image_transformsr   r	   image_utilsr
   r   r   r   r   r   r   r   r   r   r   utilsr   r   r   utils.deprecationr   
get_loggerrc   r4   r   __all__r'   r0   r.   <module>r}      sd    * "  F @    J I 0 
		H	%sC/ sCl $
$r0   