
    Z j)                         S r SSKrSSKrSSKrSSKJr  SSKJr  SSK	J
r
  SSKJrJr  SSKJrJrJrJrJr  SS	KJrJr  SS
KJrJr   " S S\SS9r\ " S S\5      5       rS/rg)z!Image processor class for Gemma3.    N)
functional   )TorchvisionBackend)BatchFeature)group_images_by_shapereorder_images)IMAGENET_STANDARD_MEANIMAGENET_STANDARD_STD
ImageInputPILImageResamplingSizeDict)ImagesKwargsUnpack)
TensorTypeauto_docstringc                   B    \ rS rSr% Sr\\S'   \\S'   \\S'   \\S'   Sr	g)	Gemma3ImageProcessorKwargs'   a  
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.
do_pan_and_scanpan_and_scan_min_crop_sizepan_and_scan_max_num_crops"pan_and_scan_min_ratio_to_activate N)
__name__
__module____qualname____firstlineno____doc__bool__annotations__intfloat__static_attributes__r       ڃ/root/GenerationalWealth/GenerationalWealth/venv/lib/python3.13/site-packages/transformers/models/gemma3/image_processing_gemma3.pyr   r   '   s!    	  ## ##(--r$   r   F)totalc            !         ^  \ rS rSr\R
                  r\r\	r
SSS.rSrSrSrSrSrSrSrSrSr\rSS/rS\\   4U 4S	 jjr\S
\S\\   S\4U 4S jj5       rS
SS\S\S\4S jr S
\!S   S\"S\S\S\4
S jr#    S!S
\!S   S\"S\$SSS\"S\S\"S\\!\   -  S-  S\\!\   -  S-  S\"S-  S\%\&-  S-  S\"S-  S\S-  S\S-  S\S-  S\4 S jjr'S r(U =r)$ )"Gemma3ImageProcessor9      )heightwidthTNpixel_values	num_cropskwargsc                 &   > [         TU ]  " S0 UD6  g )Nr   )super__init__)selfr/   	__class__s     r%   r2   Gemma3ImageProcessor.__init__K   s    "6"r$   imagesreturnc                 &   > [         TU ]  " U40 UD6$ )N)r1   
preprocess)r3   r6   r/   r4   s      r%   r9   Gemma3ImageProcessor.preprocessN   s    w!&3F33r$   ztorch.Tensorr   r   r   c           
         UR                   SS u  pVXe:  as  Xe-  U:  a  / $ [        [        R                  " Xe-  S-   5      5      n[	        [        [        R                  " Xb-  5      5      U5      n[        SU5      n[	        X75      nSnOrXV-  U:  a  / $ [        [        R                  " XV-  S-   5      5      n[	        [        [        R                  " XR-  5      5      U5      n[        SU5      n[	        X85      nSn[        [        R                  " Xg-  5      5      n	[        [        R                  " XX-  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[        R                  " X5       VVs/ s H  u  pUSXU
-   2XU	-   24   PM     snn$ s  snf s  snf s  snnf )a  
Pan and Scan an image, by cropping into smaller images when the aspect ratio exceeds
minimum allowed ratio.

Args:
    images (`torch.Tensor`):
        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.
Ng      ?      .)
shaper!   mathfloorminmaxceilrange	itertoolsproduct)r3   r6   r   r   r   r+   r,   num_crops_wnum_crops_hcrop_size_wcrop_size_hicrop_positions_wcrop_positions_hpos_hpos_ws                   r%   pan_and_scan_batched)Gemma3ImageProcessor.pan_and_scan_batchedR   s   * RS) ?~ 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 !* 1 12B U
 U 3 33U[=P5PPQ U
 	
 IH
s   G9G"Gr   c                 l    U R                  UUUUS9nU Vs/ s H  n[        U5      PM     nnXh4$ s  snf )N)r6   r   r   r   )rQ   len)	r3   r6   r   r   r   r   
pas_images_r.   s	            r%    _process_images_for_pan_and_scan5Gemma3ImageProcessor._process_images_for_pan_and_scan   sM     ..'A'A/Q	 / 

 /55fS_f	5$$ 6s   1	do_resizesizeresamplez7PILImageResampling | tvF.InterpolationMode | int | None
do_rescalerescale_factordo_normalize
image_mean	image_stddisable_groupingreturn_tensorsc           	      H   0 n0 n[        XS9u  nnUR                  5        H  u  nnU(       a  U R                  UUUUUS9u  nnU/U-   n0 n[        UU
S9u  nnUR                  5        H  u  nnU R                  UUUS9nUUU'   M     [	        UU5      n[
        R                  " USS9R                  SS5      R                  5       nO*U Vs/ s H  nSPM     nnU(       a  U R                  UUUS9nUUU'   UUU'   M     [	        UU5      n U(       a  U  V!V"s/ s H  n!U!  H  n"U"PM     M     n n!n"[	        UU5      n[        U U
S9u  nn0 nUR                  5        H  u  nnU R                  UXVXxU	5      nUUU'   M!     [	        UU5      n#[        U#US.US9$ s  snf s  sn"n!f )	N)ra   )r6   r   r   r   r   )imagerZ   r[   r   )dimr>   )r-   r.   )datatensor_type)r   itemsrW   resizer   torchstack	transpose
contiguousrescale_and_normalizer   )$r3   r6   rY   rZ   r[   r\   r]   r^   r_   r`   ra   rb   r   r   r   r   r/   processed_images_groupednum_crops_groupedgrouped_imagesgrouped_images_indexshape_imagesstacked_imagesrU   r.   processed_image_patches_groupedgrouped_image_patchesgrouped_image_patches_indexr?   stacked_image_patchesprocessed_image_patchesrV   resized_imagesimages_listrd   processed_imagess$                                       r%   _preprocess Gemma3ImageProcessor._preprocess   s0   ( $& /DV/o,,,:,@,@,B(L.(,(M(M)$3/I/I7Y )N )%
I #1!1J!>24/EZ"5EFB%'B 5J4O4O4Q0E0,0KK3!!) -8 -)
 >S3E: 5R +99XZu*v'!&-D!!L!V!VWXZ[!\!g!g!i(671Q	7%)[[,!!) &1 &N
 /8l+5C$\2I -CJ ((@BVW7E_~S^%eS^e~N_"#46JK	 0E^fv/w,,#% %3%9%9%;!E>!77
LV_N /=$U+ &< **BDXY"2KYg
 	
9 8 `s   FFr   )NNNN)*r   r   r   r   r   BILINEARr[   r	   r_   r
   r`   rZ   default_to_squaredo_convert_rgbrY   r\   r^   r   r   r   r   r   valid_kwargsmodel_input_namesr   r2   r   r   r   r9   r!   r"   rQ   listr   rW   r   strr   r}   r#   __classcell__)r4   s   @r%   r(   r(   9   s   !**H'J%IC(DNIJLO!%!%)-&-L'5#(B!C # 4 4v>X7Y 4^j 4 4B
B
 %(B
 %(	B

 -2B
H%^$% % %(	%
 %(% -2%< (,1515;?!P
^$P
 P
 	P

 LP
 P
 P
 P
 DK'$.P
 4;&-P
 +P
 j(4/P
 P
 %($JP
 %($JP
  -2DL!P
$ 
%P
 P
r$   r(   )r   rF   r@   rj   torchvision.transforms.v2r   tvFimage_processing_backendsr   image_processing_utilsr   image_transformsr   r   image_utilsr	   r
   r   r   r   processing_utilsr   r   utilsr   r   r   r(   __all__r   r$   r%   <module>r      sk    (    7 ; 2 E  5.U .$ }
- }
 }
@ "
"r$   