ó
    qyüiÛ)  ã                   óÊ   • 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   ó    Úo/home/mande/repo/quber/.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)$ )"ÚGemma3ImageProcessoré9   éà   )Ú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Ò! &Ñ3¨FÑ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
[	        Xš5      U:  a  / $ [        U5       Vs/ s H  o¹U-  PM	     nn[        U5       Vs/ s H  oºU-  PM	     nn[        R                  " XÜ5       VVs/ s H  u  pïUSXîU
-   2XÿU	-   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Æ  € ð* Ÿ™ R SÐ)‰ˆð ‹?à‰~Ð BÓBØ�	ô œdŸjšj¨©¸#Ñ)=Ó>Ó?ˆKÜœc¤$§*¢*¨UÑ-OÓ"PÓQÐS^Ó_ˆKô ˜a Ó-ˆKÜÐ8ÓFˆKØ‰Kð
 ‰~Ð BÓBØ�	ô œdŸjšj¨©¸#Ñ)=Ó>Ó?ˆKÜœc¤$§*¢*¨VÑ-PÓ"QÓRÐT_Ó`ˆKô ˜a Ó-ˆKÜÐ8ÓFˆKØˆKäœ$Ÿ)š) EÑ$7Ó8Ó9ˆÜœ$Ÿ)š) FÑ$8Ó9Ó:ˆô ˆ{Ó(Ð+EÓEØˆIä5:¸;Ô5GÓHÒ5G°¨!œOÑ5GÐÐHÜ5:¸;Ô5GÓHÒ5G°¨!œOÑ5GÐÐHô !*× 1Ò 1Ð2BÔ Uô
â U‘�ð �3˜¨Ñ 3Ð3°UÀ[Ñ=PÐ5PÐ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_scanÚ5Gemma3ImageProcessor._process_images_for_pan_and_scan–   sM   € ð ×.Ñ.ØØ'AØ'AØ/Qð	 /ð 
ˆ
ñ /5Ó5ªf¨”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  € ð( $&Ð ØÐÜ/DÀVÑ/oÑ,ˆÐ,Ø,:×,@Ñ,@Ö,BÑ(ˆL˜.ÞØ(,×(MÑ(MØ)Ø$3Ø/IØ/IØ7Yð )Nð )Ñ%�
˜Ið #1Ð!1°JÑ!>�à24Ð/ÜEZØ"Ð5EñFÑBÐ%Ð'Bð 5J×4OÑ4OÖ4QÑ0�EÐ0Ø,0¯K©KØ3Ø!Ø!)ð -8ð -Ð)ð
 >SÐ3°EÓ:ñ 5Rô +9Ð9XÐZuÓ*vÐ'ä!&§¢Ð-DÈ!Ñ!L×!VÑ!VÐWXÐZ[Ó!\×!gÑ!gÓ!i‘á(6Ó7ª 1›Q©�	Ð7æØ%)§[¡[Ø,Ø!Ø!)ð &1ð &�Nð
 /8Ð˜lÑ+Ø5CÐ$ \Ó2ñI -CôJ (Ð(@ÐBVÓWˆæÙ7EÔ_²~¨ÔS^È%›eÑS^™e±~ˆNÑ_Ü"Ð#4Ð6JÓKˆ	ô 0EÀ^ÐfvÑ/wÑ,ˆÐ,Ø#%Ð Ø%3×%9Ñ%9Ö%;Ñ!ˆE�>à!×7Ñ7Ø 
¸LÐV_óˆNð /=Ð$ UÓ+ñ &<ô *Ð*BÐDXÓYÐÜØ"2ÀÑKÐYgñ
ð 	
ùò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 ð 4°vÐ>XÑ7Yð 4Ð^jö 4ó ð4ðB
àðB
ð %(ðB
ð %(ð	B
ð
 -2ôB
ðH%à�^Ñ$ð%ð ð%ð %(ð	%ð
 %(ð%ð -2ô%ð< (,Ø15Ø15Ø;?ñ!P
à�^Ñ$ðP
ð ðP
ð ð	P
ð
 LðP
ð ðP
ð ðP
ð ðP
ð ˜D ™KÑ'¨$Ñ.ðP
ð ˜4 ™;Ñ&¨Ñ-ðP
ð  ™+ðP
ð ˜jÑ(¨4Ñ/ðP
ð  ™ðP
ð %(¨$¡JðP
ð %(¨$¡JðP
ð  -2°D©Lð!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$   