
    cCiN                        S r SSKrSSKrSSKJrJr  SSKrSSKJ	r	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JrJrJrJr  SSKJrJrJ r J!r!  \!RD                  " \#5      r$\ " 5       (       a  SSK%r% " S	 S
\	5      r&S
/r'g)z!Image processor class for Gemma3.    N)OptionalUnion   )BaseImageProcessorBatchFeatureget_size_dict)convert_to_rgbresizeto_channel_dimension_format)IMAGENET_STANDARD_MEANIMAGENET_STANDARD_STDChannelDimension
ImageInputPILImageResampling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is_vision_availableloggingc            &       0  ^  \ rS rSrSrSS/rSS\R                  SSSSSSSSSS4S\S	\	\
\\4      S
\S\S\\\4   S\S\	\\\\   4      S\	\\\\   4      S\	\   S\	\   S\	\   S\	\   S\	\   SS4U 4S jjjr  S S\R$                  S\S\S\S\	\\\4      S\	\\\4      4S jjr  S S\\R$                     S\S\S\S\S\	\\\4      S\	\\\4      4S jjr\" 5       SSSSSSSSS\R.                  SSSSSS4S\S\	\   S	\	\
\\4      S
\	\   S\	\   S\	\   S\	\   S\	\\\\   4      S\	\\\\   4      S\	\\\4      S\	\   S\	\\\4      S\	\   S\	\   S\	\   S\	\   S\	\   S\R6                  R6                  4$S jj5       rSrU =r$ )!Gemma3ImageProcessor5   a	  
Constructs a SigLIP image processor.

Args:
    do_resize (`bool`, *optional*, defaults to `True`):
        Whether to resize the image's (height, width) dimensions to the specified `size`. Can be overridden by
        `do_resize` in the `preprocess` method.
    size (`dict[str, int]` *optional*, defaults to `{"height": 224, "width": 224}`):
        Size of the image after resizing. Can be overridden by `size` in the `preprocess` method.
    resample (`PILImageResampling`, *optional*, defaults to `Resampling.BILINEAR`):
        Resampling filter to use if resizing the image. Can be overridden by `resample` in the `preprocess` method.
    do_rescale (`bool`, *optional*, defaults to `True`):
        Whether to rescale the image by the specified scale `rescale_factor`. Can be overridden by `do_rescale` 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 `rescale_factor` in the `preprocess`
        method.
    do_normalize (`bool`, *optional*, defaults to `True`):
        Whether to normalize the image by the specified mean and standard deviation. Can be overridden by
        `do_normalize` in the `preprocess` method.
    image_mean (`float` or `list[float]`, *optional*, defaults to `[0.5, 0.5, 0.5]`):
        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 `[0.5, 0.5, 0.5]`):
        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.
        Can be overridden by the `image_std` parameter in the `preprocess` method.
    do_convert_rgb (`bool`, *optional*, defaults to `True`):
        Whether to convert the image to RGB.
    do_pan_and_scan (`bool`, *optional*):
        Whether to apply `pan_and_scan` to images.
    pan_and_scan_min_crop_size (`int`, *optional*):
        Minimum size of each crop in pan and scan.
    pan_and_scan_max_num_crops (`int`, *optional*):
        Maximum number of crops per image in pan and scan.
    pan_and_scan_min_ratio_to_activate (`float`, *optional*):
        Minimum aspect ratio to activate pan and scan.
pixel_values	num_cropsTNgp?	do_resizesizeresample
do_rescalerescale_factordo_normalize
image_mean	image_stddo_convert_rgbdo_pan_and_scanpan_and_scan_min_crop_sizepan_and_scan_max_num_crops"pan_and_scan_min_ratio_to_activatereturnc                   > [         TU ]  " S0 UD6  Ub  UOSSS.n[        USS9nUb  UO[        nUb  UO[        nXl        X l        X0l        X@l        XPl	        X`l
        Xpl        Xl        Xl        Xl        Xl        Xl        Xl        g )N   )heightwidthT)default_to_square )super__init__r   r   r   r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   )selfr!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   kwargs	__class__s                  l/home/james-whalen/.local/lib/python3.13/site-packages/transformers/models/gemma3/image_processing_gemma3.pyr6   Gemma3ImageProcessor.__init___   s    " 	"6"'tc-JTT:#-#9Z?U
!*!6I<Q	"	 $,($",.*D'*D'2T/    imagedata_formatinput_data_formatc           
      T   [        U5      u  pxX:  as  X-  U:  a  / $ [        [        R                  " X-  S-   5      5      n	[	        [        [        R                  " X-  5      5      U	5      n	[        SU	5      n	[	        X95      n	Sn
OrXx-  U:  a  / $ [        [        R                  " Xx-  S-   5      5      n
[	        [        [        R                  " Xr-  5      5      U
5      n
[        SU
5      n
[	        X:5      n
Sn	[        [        R                  " X-  5      5      n[        [        R                  " Xz-  5      5      n[	        X5      U:  a  / $ [        U	5       Vs/ s H  oU-  PM	     nn[        U
5       Vs/ s H  oU-  PM	     nnU[        R                  :X  a<  [        R                  " X5       VVs/ s H  u  nnUUUU-   2UUU-   24   PM     nnnU$ [        R                  " X5       VVs/ s H  u  nnUSS2UUU-   2UUU-   24   PM     nnnU$ s  snf s  snf s  snnf s  snnf )a:  
Pan and Scan and image, by cropping into smaller images when the aspect ratio exceeds
minimum allowed ratio.

Args:
    image (`np.ndarray`):
        Image to resize.
    pan_and_scan_min_crop_size (`int`, *optional*):
        Minimum size of each crop in pan and scan.
    pan_and_scan_max_num_crops (`int`, *optional*):
        Maximum number of crops per image in pan and scan.
    pan_and_scan_min_ratio_to_activate (`float`, *optional*):
        Minimum aspect ratio to activate pan and scan.
    data_format (`str` or `ChannelDimension`, *optional*):
        The channel dimension format of the image. If not provided, it will be the same as the input image.
    input_data_format (`ChannelDimension` or `str`, *optional*):
        The channel dimension format of the input image. If not provided, it will be inferred.
g      ?      N)r   intmathfloorminmaxceilranger   LAST	itertoolsproduct)r7   r=   r+   r,   r-   r>   r?   r1   r2   num_crops_wnum_crops_hcrop_size_wcrop_size_hicrop_positions_wcrop_positions_hpos_hpos_wimage_cropss                      r:   pan_and_scan!Gemma3ImageProcessor.pan_and_scan   s:   6 'u- ?~ BB	 djj#)=>?Kc$**U-O"PQS^_K a-K8FKK
 ~ BB	 djj#)=>?Kc$**V-P"QRT_`K a-K8FKK$))E$789$))F$89: {(+EEI5:;5GH5G!O5GH5:;5GH5G!O5GH 0 5 55 %.$5$56F$Y$YLE5 eek1155;;N3NNO$Y    %.$5$56F$Y$YLE5 a!44eek>Q6QQR$Y  
  IH
s   H5H2H.!H$imagesc           
          / n/ n	U HF  n
U R                  U
UUUUUS9nUR                  U
/U-   5        U	R                  [        U5      5        MH     X4$ )N)r=   r+   r,   r-   r>   r?   )rW   extendappendlen)r7   rY   r*   r+   r,   r-   r>   r?   pas_images_listr    r=   
pas_imagess               r:    _process_images_for_pan_and_scan5Gemma3ImageProcessor._process_images_for_pan_and_scan   ss     	E**+E+E3U'"3 + J ""E7Z#78S_-  ))r<   return_tensorsc                    Ub  UOU R                   nUb  UOU R                  n[        USSS9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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 R                  U5      n[        U5      n[!        U5      (       d  [#        S5      e[%        UUUUU	UUUS9  U(       a  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  [1        US   5      nU(       a  U R3                  UUUUUUUS9u  nnOU Vs/ s H  nSPM     nn/ nU Hk  nU(       a  US	   US
   nn[5        UUU4XLS9nU(       a  U R7                  UXlS9nU(       a  U R9                  UXUS9n[;        UXS9nUR=                  U5        Mm     UUS.n[?        UU
S9$ 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_resize (`bool`, *optional*, defaults to `self.do_resize`):
        Whether to resize the image.
    size (`dict[str, int]`, *optional*, defaults to `self.size`):
        Size of the image after resizing.
    resample (`int`, *optional*, defaults to `self.resample`):
        Resampling filter to use if resizing the image. This can be one of the enum `PILImageResampling`. Only
        has an effect if `do_resize` is set to `True`.
    do_rescale (`bool`, *optional*, defaults to `self.do_rescale`):
        Whether to rescale the image.
    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 for normalization. Only has an effect if `do_normalize` is set to `True`.
    image_std (`float` or `list[float]`, *optional*, defaults to `self.image_std`):
        Image standard deviation to use for normalization. Only has an effect if `do_normalize` 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.
    do_convert_rgb (`bool`, *optional*, defaults to `self.do_convert_rgb`):
        Whether to convert the image to RGB.
    do_pan_and_scan (`bool`, *optional*, defaults to `self.do_pan_and_scan`):
        Whether to apply `pan_and_scan` to images.
    pan_and_scan_min_crop_size (`int`, *optional*, defaults to `self.pan_and_scan_min_crop_size`):
        Minimum size of each crop in pan and scan.
    pan_and_scan_max_num_crops (`int`, *optional*, defaults to `self.pan_and_scan_max_num_crops`):
        Maximum number of crops per image in pan and scan.
    pan_and_scan_min_ratio_to_activate (`float`, *optional*, defaults to `self.pan_and_scan_min_ratio_to_activate`):
        Minimum aspect ratio to activate pan and scan.
r"   F)
param_namer3   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!   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.)rY   r*   r+   r,   r-   r>   r?   r1   r2   )r=   r"   r#   r?   )r=   scaler?   )r=   meanstdr?   )input_channel_dim)r   r    )datatensor_type) r!   r"   r   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   fetch_imagesr   r   
ValueErrorr   r	   r   r   loggerwarning_oncer   r`   r
   rescale	normalizer   r\   r   )r7   rY   r!   r"   r#   r$   r%   r&   r'   r(   rb   r>   r?   r)   r*   r+   r,   r-   r=   r    _processed_imagesr1   r2   ri   s                            r:   
preprocessGemma3ImageProcessor.preprocess   s   V "+!6IDNN	'tTYYTfN'38#-#9Zt
+9+E4K^K^'3'?|TEVEV#-#9Zt
!*!6IDNN	+9+E4K^K^-<-H/dNbNb*D*P&VZVuVu 	# +E*P&VZVuVu 	#
 2= /88 	+ ""6*)&1F##: 
 	&!)%!		
 9?@nU+F@ 6<<VE.'V</&)44s
 $ >vay I $ E E /+E+E3U'"3 !F !FI %++FqFI+E $XWvuo 5ljSd '  0{hE##E*! $ !1yI>BBc A =0 ,s   ;I!I&I+)r)   r&   r*   r$   r!   r'   r(   r,   r+   r-   r#   r%   r"   )NN)__name__
__module____qualname____firstlineno____doc__model_input_namesr   BILINEARboolr   dictstrrC   r   floatlistr6   npndarrayr   rW   r`   r   FIRSTr   r   PILImagers   __static_attributes____classcell__)r9   s   @r:   r   r   5   s   %N (5 )-'9'B'B,3!:>9=)-*.4848>B#U#U tCH~&#U %	#U
 #U c5j)#U #U U5$u+#567#U E%e"456#U !#U "$#U %-SM#U %-SM#U -5UO#U  
!#U #UV ?CDHPzzP %(P %(	P
 -2P eC)9$9:;P $E#/?*?$@APr ?CDH*RZZ * * %(	*
 %(* -2* eC)9$9:;* $E#/?*?$@A*2 %& %))-15%)*.'+:>9=;?2B2H2HDH)-*.4848>B%fCfC D>fC tCH~&	fC
 -.fC TNfC !fC tnfC U5$u+#567fC E%e"456fC !sJ!78fC ./fC $E#/?*?$@AfC !fC "$fC  %-SM!fC" %-SM#fC$ -5UO%fC& 
'fC 'fCr<   r   )(ry   rK   rD   typingr   r   numpyr   image_processing_utilsr   r   r   image_transformsr	   r
   r   image_utilsr   r   r   r   r   r   r   r   r   r   r   r   utilsr   r   r   r   
get_loggerru   rm   r   r   __all__r4   r<   r:   <module>r      s    (   "  U U 
    _ ^ 
		H	% aC- aCH "
"r<   