Ë
    ÛÓ^jÛ)  ã                   óÐ   — d Z ddlZddlZddlZddlmZ ddlmZ ddl	m
Z
 ddlmZmZ ddlmZmZmZmZmZ dd	lmZmZ dd
lmZmZ  G d„ ded¬«      Ze G d„ de«      «       ZdgZy)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                   ó:   — e Zd ZU dZeed<   eed<   eed<   eed<   y)ÚGemma3ImageProcessorKwargsa­  
    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_activateN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚboolÚ__annotations__ÚintÚfloat© ó    ú}/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/transformers/models/gemma3/image_processing_gemma3.pyr   r   '   s!   … ñ	ð ÓØ #Ó#Ø #Ó#Ø(-Ô-r!   r   F)Útotalc            !       óŒ  ‡ — e Zd Zej                  ZeZeZ	dddœZ
dZdZdZdZdZdZdZdZdZeZddgZdee   fˆ fd„Zed	edee   d
efˆ fd„«       Zd	ddededefd„Zd	e d   de!dededef
d„Z"	 	 	 	 dd	e d   de!de#ddde!dede!dee e   z  dz  dee e   z  dz  de!dz  de$e%z  dz  de!dz  dedz  dedz  dedz  d
ef d„Z&ˆ xZ'S ) ÚGemma3ImageProcessoréà   )ÚheightÚwidthTNÚpixel_valuesÚ	num_cropsÚkwargsc                 ó$   •— t        ‰| �  di |¤Ž y )Nr    )ÚsuperÚ__init__)Úselfr+   Ú	__class__s     €r"   r.   zGemma3ImageProcessor.__init__K   s   ø€ Ü‰ÑÑ"˜6Ó"r!   ÚimagesÚreturnc                 ó$   •— t        ‰| �  |fi |¤ŽS )N)r-   Ú
preprocess)r/   r1   r+   r0   s      €r"   r4   zGemma3ImageProcessor.preprocessN   s   ø€ ä‰wÑ! &Ñ3¨FÑ3Ð3r!   ztorch.Tensorr   r   r   c           
      ó¢  — |j                   dd \  }}||k\  rt||z  |k  rg S t        t        j                  ||z  dz   «      «      }t	        t        t        j                  ||z  «      «      |«      }t        d|«      }t	        ||«      }d}ns||z  |k  rg S t        t        j                  ||z  dz   «      «      }t	        t        t        j                  ||z  «      «      |«      }t        d|«      }t	        ||«      }d}t        t        j                  ||z  «      «      }	t        t        j                  ||z  «      «      }
t	        |	|
«      |k  rg S t        |«      D �cg c]  }|	|z  ‘Œ	 }}t        |«      D �cg c]  }|
|z  ‘Œ	 }}t        j                  ||«      D ��cg c]  \  }}|d|||
z   …|||	z   …f   ‘Œ c}}S c c}w c c}w c c}}w )aU  
        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)r/   r1   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_batchedz)Gemma3ImageProcessor.pan_and_scan_batchedR   sä  € ð* Ÿ™ R SÐ)‰ˆ�ð �FŠ?à�v‰~Ð BÒBØ�	ô œdŸj™j¨°©¸#Ñ)=Ó>Ó?ˆKÜœc¤$§*¡*¨UÐ5OÑ-OÓ"PÓQÐS^Ó_ˆKô ˜a Ó-ˆKÜÐ8¸+ÓFˆKØ‰Kð
 ˜‰~Ð BÒBØ�	ô œdŸj™j¨°%©¸#Ñ)=Ó>Ó?ˆKÜœc¤$§*¡*¨VÐ6PÑ-PÓ"QÓRÐT_Ó`ˆKô ˜a Ó-ˆKÜÐ8¸+ÓFˆKØˆKäœ$Ÿ)™) E¨KÑ$7Ó8Ó9ˆÜœ$Ÿ)™) F¨[Ñ$8Ó9Ó:ˆô ˆ{˜KÓ(Ð+EÒEØˆIä5:¸;Ó5GÖH°˜K¨!›OÐHÐÐHÜ5:¸;Ó5GÖH°˜K¨!›OÐHÐÐHô !*× 1Ñ 1Ð2BÐDTÓ U÷
á��uð �3˜ ¨Ñ 3Ð3°U¸UÀ[Ñ=PÐ5PÐPÓQó
ð 	
ùò IùÚHùó
s   ÅGÅ:GÆ!Gr   c                 ón   — | j                  ||||¬«      }|D �cg c]  }t        |«      ‘Œ }}||fS c c}w )N)r1   r   r   r   )rK   Úlen)	r/   r1   r   r   r   r   Ú
pas_imagesÚ_r*   s	            r"   Ú _process_images_for_pan_and_scanz5Gemma3ImageProcessor._process_images_for_pan_and_scan–   sN   € ð ×.Ñ.ØØ'AØ'AØ/Qð	 /ó 
ˆ
ð /5Ö5¨”S˜•_Ð5ˆ	Ð5Ø˜9Ð$Ð$ùò 6s   š2Ú	do_resizeÚsizeÚresamplez7PILImageResampling | tvF.InterpolationMode | int | NoneÚ
do_rescaleÚrescale_factorÚdo_normalizeÚ
image_meanÚ	image_stdÚdisable_groupingÚreturn_tensorsc           	      ó@  — i }i }t        ||
¬«      \  }}|j                  «       D ]Ú  \  }}|r¤| j                  |||||¬«      \  }}|g|z   }i }t        ||
¬«      \  }}|j                  «       D ]  \  }}| j                  |||¬«      }|||<   Œ  t	        ||«      }t        j                  |d¬«      j                  dd«      j                  «       }n%|D �cg c]  }d‘Œ }}|r| j                  |||¬«      }|||<   |||<   ŒÜ t	        ||«      } |r| D �!�"cg c]  }!|!D ]  }"|"‘Œ Œ } }!}"t	        ||«      }t        | |
¬«      \  }}i }|j                  «       D ]   \  }}| j                  ||||||	«      }|||<   Œ" t	        ||«      }#t        |#|dœ|¬«      S c c}w c c}"}!w )	N)rY   )r1   r   r   r   r   )ÚimagerR   rS   r   )Údimr8   )r)   r*   )ÚdataÚtensor_type)r   ÚitemsrP   Úresizer   ÚtorchÚstackÚ	transposeÚ
contiguousÚrescale_and_normalizer   )$r/   r1   rQ   rR   rS   rT   rU   rV   rW   rX   rY   rZ   r   r   r   r   r+   Úprocessed_images_groupedÚnum_crops_groupedÚgrouped_imagesÚgrouped_images_indexÚshape_imagesÚstacked_imagesrN   r*   Úprocessed_image_patches_groupedÚgrouped_image_patchesÚgrouped_image_patches_indexr9   Ústacked_image_patchesÚprocessed_image_patchesrO   Úresized_imagesÚimages_listr\   Úprocessed_imagess$                                       r"   Ú_preprocessz Gemma3ImageProcessor._preprocess§   sI  € ð( $&Ð ØÐÜ/DÀVÐ^nÔ/oÑ,ˆÐ,Ø,:×,@Ñ,@Ó,Bò $	DÑ(ˆL˜.ÙØ(,×(MÑ(MØ)Ø$3Ø/IØ/IØ7Yð )Nó )Ñ%�
˜Ið #1Ð!1°JÑ!>�à24Ð/ÜEZØ"Ð5EôFÑBÐ%Ð'Bð 5J×4OÑ4OÓ4Qò SÑ0�EÐ0Ø,0¯K©KØ3Ø!Ø!)ð -8ó -Ð)ð
 >SÐ3°EÒ:ðSô +9Ð9XÐZuÓ*vÐ'ä!&§¡Ð-DÈ!Ô!L×!VÑ!VÐWXÐZ[Ó!\×!gÑ!gÓ!i‘à(6Ö7 1šQÐ7�	Ð7áØ%)§[¡[Ø,Ø!Ø!)ð &1ó &�Nð
 /8Ð˜lÑ+Ø5CÐ$ \Ò2ðI$	DôJ (Ð(@ÐBVÓWˆáØ7E×_¨ÐS^Ò_È%šeÐ_˜eÐ_ˆNÑ_Ü"Ð#4Ð6JÓKˆ	ô 0EÀ^ÐfvÔ/wÑ,ˆÐ,Ø#%Ð Ø%3×%9Ñ%9Ó%;ò 	=Ñ!ˆE�>à!×7Ñ7Ø 
¨N¸LÈ*ÐV_óˆNð /=Ð$ UÒ+ð	=ô *Ð*BÐDXÓYÐÜØ"2ÀÑKÐYgô
ð 	
ùò9 8ùó `s   Ã	FÄF)NNNN)(r   r   r   r   ÚBILINEARrS   r	   rW   r
   rX   rR   Údefault_to_squareÚdo_convert_rgbrQ   rT   rV   r   r   r   r   r   Úvalid_kwargsÚmodel_input_namesr   r.   r   r   r   r4   r   r   rK   Úlistr   rP   r   Ústrr   ru   Ú__classcell__)r0   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
r!   r%   )r   r@   r:   rb   Ú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!   