ó
    qyüii"  ã            	       ó  • 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  SSKJrJrJr  S	S
KJrJr  \R*                  " \5      rSSS\SS4S jrSSSSS\S\S   4S jr " S S\SS9r\" SS9 " S S\5      5       rS/rg)é    N)Ú
functionalé   )ÚTorchvisionBackend)ÚBatchFeature)Ú
ImageInputÚPILImageResampling)ÚImagesKwargsÚUnpack)Ú
TensorTypeÚauto_docstringÚloggingé   )Ú_SUPPORTED_SOFT_TOKENSÚ get_aspect_ratio_preserving_sizeÚimageútorch.TensorÚ
patch_sizeÚreturnc                 ó¬   • U R                   u  p#nX1-  nXA-  nU R                  X%XU5      nUR                  SSSSS5      nUR                  XV-  S5      nU$ )zÁ
Convert 3D tensor image of shape (num_channels, image_height, image_width) into 2D tensor of patches of shape
(num_patches_height * num_patches_width, patch_size * patch_size * num_channels).
r   r   é   é   r   éÿÿÿÿ)ÚshapeÚreshapeÚpermute)r   r   Únum_channelsÚimage_heightÚimage_widthÚnum_patches_heightÚnum_patches_widthÚpatched_images           Úo/home/mande/repo/quber/.venv/lib/python3.13/site-packages/transformers/models/gemma4/image_processing_gemma4.pyÚconvert_image_to_patchesr#      sl   € ð
 /4¯k©kÑ+€L Ø%Ñ3ÐØ#Ñ1ÐØ—M‘M ,ÀJÐcmÓn€MØ!×)Ñ)¨!¨Q°°1°aÓ8€MØ!×)Ñ)Ð*<Ñ*PÐRTÓU€MØÐó    Ú	positionsÚtarget_length)r   r   c                 ó  • U R                   S   nX#-
  nUS:”  aq  SS/U R                  S-
  -  SU/-   nSSSU4n[        R                  R                  R                  XSSS9n [        R                  R                  R                  XSSS9nX4$ )z+
Pad the tensor along the first dimension.
r   r   Úconstant)ÚmodeÚvaluer   )r   ÚndimÚtorchÚnnr   Úpad)r   r%   r&   Úcurrent_lengthÚpadding_lengthÚpaddingÚpos_paddings          r"   Úpad_along_first_dimr3   .   s›   € ð —[‘[ ‘^€NØ"Ñ3€NØ˜ÓØ�a�&˜EŸJ™J¨™NÑ+¨q°.Ð.AÑAˆØ˜!˜Q Ð/ˆÜ—‘×#Ñ#×'Ñ'¨¸ZÈqÐ'ÐQˆÜ—H‘H×'Ñ'×+Ñ+¨IÈÐ[]Ð+Ð^ˆ	ØÐÐr$   c                   ó8   • \ rS rSr% Sr\\S'   \\S'   \\S'   Srg)ÚGemma4ImageProcessorKwargsé>   a9  
patch_size (`int`, *optional*):
    Size of each image patch in pixels.
max_soft_tokens (`int`, *optional*):
    Maximum number of soft (vision) tokens per image.
    Must be one of {70, 140, 280, 560, 1120}.
pooling_kernel_size (`int`, *optional*):
    Spatial pooling kernel size applied after patchification.
r   Úmax_soft_tokensÚpooling_kernel_size© N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__ÚintÚ__annotations__Ú__static_attributes__r9   r$   r"   r5   r5   >   s   ‡ ñð ƒOØÓØÖr$   r5   F)Útotalz$Constructs a Gemma4 image processor.)Úcustom_introc                   óª  ^ • \ rS rSr\R
                  r/ SQr/ SQrSr	Sr
SrSrSrSrSrSrS	r\r/ S
QrS\\   4U 4S jjrU 4S jrS\R2                  S\S\S\S\R8                  S\R2                  4S jrS\S\\   S\4U 4S jjr    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($ )$ÚGemma4ImageProcessoréN   )ç        rG   rG   )ç      ð?rH   rH   NTFé   i  r   ©Úpixel_valuesÚimage_position_idsÚnum_soft_tokens_per_imageÚkwargsc                 óŽ   >• [         TU ]  " S0 UD6  U R                  [        ;  a   [	        S[         SU R                   S35      eg )Nú!`max_soft_tokens` must be one of ú, got Ú.r9   )ÚsuperÚ__init__r7   r   Ú
ValueError©ÚselfrN   Ú	__class__s     €r"   rT   ÚGemma4ImageProcessor.__init___   sN   ø€ Ü‰ÒÑ"˜6Ò"à×ÑÔ'=Ó=ÜÐ@ÔAWÐ@XÐX^Ð_c×_sÑ_sÐ^tÐtuÐvÓwÐwð >r$   c                 ó0   >• SUS'   [         TU ]  " S0 UD6  g )NFÚ	do_resizer9   )rS   Ú_validate_preprocess_kwargsrV   s     €r"   r\   Ú0Gemma4ImageProcessor._validate_preprocess_kwargse   s   ø€ ð
 $ˆˆ{ÑÜ‰Ò+Ñ5¨fÓ5r$   r   r   Úmax_patchesr8   Úresampler   c                 ó¢   • UR                   S   UR                   S   pv[        UUUUUS9u  p‰X†:X  a  X—:X  a  U$ [        R                  " UX‰/USS9$ )Néþÿÿÿr   )ÚheightÚwidthr   r^   r8   T)ÚsizeÚinterpolationÚ	antialias)r   r   ÚFÚresize)
rW   r   r   r^   r8   r_   rb   rc   Útarget_heightÚtarget_widths
             r"   Úaspect_ratio_preserving_resizeÚ3Gemma4ImageProcessor.aspect_ratio_preserving_resizem   si   € ð Ÿ™ B™¨¯©°R©�Ü&FØØØ!Ø#Ø 3ñ'
Ñ#ˆð Ó" |Ó'<ØˆLä�xŠxØØÐ.Ø"Øñ	
ð 	
r$   Úimagesc                 ó&   >• [         TU ]  " U40 UD6$ )N)rS   Ú
preprocess)rW   rm   rN   rX   s      €r"   ro   ÚGemma4ImageProcessor.preprocessˆ   s   ø€ ô
 ‰wÒ! &Ñ3¨FÑ3Ð3r$   r   r[   z5PILImageResampling | F.InterpolationMode | int | NoneÚ
do_rescaleÚrescale_factorÚdo_normalizeÚ
image_meanÚ	image_stdÚreturn_tensorsr7   c           	      óF  • U[         ;  a  [        S[          SU S35      eX¼S-  -  n/ n/ n/ nU GH4  nU(       a  U R                  UU
UUUS9nU R                  UXEXgU5      nUR                  S   U
-  nUR                  S   U
-  n[        UU
5      nUR                  UR                  S   US-  -  5        UR                  n[        R                  " [        R                  " UUS	9[        R                  " UUS	9S
S9n[        R                  " USS9nUR                  UR                  S   S5      n[        UUU5      u  nnUR                  U5        UR                  U5        GM7     [        R                  " USS9n[        R                  " USS9nUUUS.n[        UU	S9$ )NrP   rQ   rR   r   )r   r   r^   r8   r_   ra   r   r   )ÚdeviceÚxy)Úindexing)ÚdimrJ   )ÚdataÚtensor_type)r   rU   rk   Úrescale_and_normalizer   r#   Úappendrx   r,   ÚmeshgridÚarangeÚstackr   r3   r   )rW   rm   r[   r_   rq   rr   rs   rt   ru   rv   r   r7   r8   rN   r^   rK   Úposition_idsrM   r   Úpatch_heightÚpatch_widthÚpatchesrx   Ú
patch_gridÚstacked_gridÚreal_positionsr%   r|   s                               r"   Ú_preprocessÚ Gemma4ImageProcessor._preprocess�   sÊ  € ð  Ô"8Ó8ÜÐ@ÔAWÐ@XÐX^Ð_nÐ^oÐopÐqÓrÐrð &¸QÑ(>Ñ>ˆð
 ˆØˆØ$&Ð!äˆEæØ×;Ñ;ØØ)Ø +Ø(;Ø%ð <ð �ð ×.Ñ.¨u°jÐR^ÐluÓvˆEð !Ÿ;™; r™?¨jÑ8ˆLØŸ+™+ b™/¨ZÑ7ˆKÜ.¨u°jÓAˆGØ%×,Ñ,¨W¯]©]¸1Ñ-=ÐATÐVWÑAWÑ-WÔXð —\‘\ˆFÜŸšÜ—’˜[°Ñ8Ü—’˜\°&Ñ9ØñˆJô
 !Ÿ;š; z°rÑ:ˆLØ)×1Ñ1°'·-±-ÀÑ2BÀAÓFˆNô "5°W¸nÈkÓ!ZÑˆG�YØ×Ñ Ô(Ø×Ñ 	×*ñE ôJ —{’{ <°QÑ7ˆÜ—{’{ <°QÑ7ˆð )Ø".Ø)Bñ
ˆô
  °>ÑBÐBr$   r9   )NNN))r:   r;   r<   r=   r   ÚBICUBICr_   rt   ru   rd   Údefault_to_squareÚdo_convert_rgbr[   rq   rs   r   r7   r8   r5   Úvalid_kwargsÚmodel_input_namesr
   rT   r\   r,   ÚTensorr?   rg   ÚInterpolationModerk   r   r   ro   ÚlistÚboolÚfloatÚstrr   rŠ   rA   Ú__classcell__)rX   s   @r"   rE   rE   N   sÊ  ø† à!×)Ñ)€HÚ €JÚ€IØ€DØÐØ€NØ€IØ€JØ€LØ€JØ€OØÐØ-€LÚ[Ððx Ð(BÑ!C÷ xõ6ð
à�|‰|ð
ð ð
ð ð	
ð
 !ð
ð ×%Ñ%ð
ð 
�‰ô
ð64àð4ð Ð3Ñ4ð4ð 
÷	4ð$ "&Ø&*Ø*.ñJCà�^Ñ$ðJCð ðJCð Jð	JCð
 ðJCð ðJCð ðJCð ˜D ™KÑ'¨$Ñ.ðJCð ˜4 ™;Ñ&¨Ñ-ðJCð ˜jÑ(¨4Ñ/ðJCð ˜$‘JðJCð ˜t™ðJCð ! 4™ZðJCð 
÷JCó JCr$   rE   )r,   Útorchvision.transforms.v2r   rg   Úimage_processing_backendsr   Úimage_processing_utilsr   Úimage_utilsr   r   Úprocessing_utilsr	   r
   Úutilsr   r   r   Úimage_processing_pil_gemma4r   r   Ú
get_loggerr:   Úloggerr?   r#   Útupler3   r5   rE   Ú__all__r9   r$   r"   Ú<module>r£      s»   ðó  Ý 5å ;Ý 2ß 9ß 4ß 8Ñ 8ß að 
×	Ò	˜HÓ	%€ð Nð Àð Èô ðØðØ&4ðØEHðà
Ð)Ñ*ôô  °Uò ñ  ÐCÑDôJCÐ-ó JCó EðJCðZ "Ð
"�r$   