+
    œ°³j]*  ã                   ó  € ^ RI t ^ RIt^ RIHt ^RIHt ^RIHt ^RI	H
t
Ht ^RIHtHt ^RIHtHtHt ]P&                  ! ]4      tRtR R	 ltR
 R ltR R lt ! R R]RR7      t]! RR7       ! R R]4      4       tR.tR# )é    N)Ú
functional)ÚTorchvisionBackend)ÚBatchFeature)Ú
ImageInputÚPILImageResampling)ÚImagesKwargsÚUnpack)Ú
TensorTypeÚauto_docstringÚloggingc                ó‚   € V ^8„  d   QhR\         R\         R\         R\         R\         R\        \         \         3,          /# )é   ÚheightÚwidthÚ
patch_sizeÚmax_patchesÚpooling_kernel_sizeÚreturn©ÚintÚtuple)Úformats   "Ús/home/luca/screen-checking/.venv/lib/python3.14/site-packages/transformers/models/gemma4/image_processing_gemma4.pyÚ__annotate__r   !   sL   € ÷ 3'ñ 3'Üð3'äð3'ô ð3'ô ð	3'ô
 ð3'ô Œ3”ˆ8…_ñ3'ó    c                ó  € W,          pW2^,          ,          p\         P                  ! We,          4      pWp,          pWq,          p	WB,          p
\        \         P                  ! WŠ,          4      4      V
,          p\        \         P                  ! Wš,          4      4      V
,          pV^ 8X  d   V^ 8X  d   \	        RWB,           R24      hW4^,          ,          V
,          pV^ 8X  d:   T
p\        \        \         P                  ! W,          4      4      V
,          V4      pM?V^ 8X  d9   T
p\        \        \         P                  ! W,          4      4      V
,          V4      pW¼,          V8”  d   \	        RV  RV RV RV RV RV 24      hW¼3# )a  
Image is resized to preserve aspect ratio so it fits within the patch budget.
Target dimensions are the largest that:
1) Produce at most `max_patches` patches when patchified with `patch_size`
2) Have height and width divisible by `pooling_kernel_size * patch_size`
zpAttempting to resize to a 0 x 0 image. Resized height should be divisible by `pooling_kernel_size * patch_size`=Ú.z
Resizing [Úxz] to [z] but this exceeds z patches with patch_size )ÚmathÚsqrtr   ÚfloorÚ
ValueErrorÚmin)r   r   r   r   r   Útotal_pxÚ	target_pxÚfactorÚideal_heightÚideal_widthÚ	side_multÚtarget_heightÚtarget_widthÚmax_side_lengths   &&&&&         r   Ú get_aspect_ratio_preserving_sizer-   !   s{  € ð �~€HØ¨1�}Õ-€IÜ�YŠY�yÕ+Ó,€FØ•?€LØ•.€KØ#Õ0€Iô œŸ
š
 <Õ#;Ó<Ó=À	ÕI€MÜ”t—z’z +Õ"9Ó:Ó;¸iÕG€Lð ˜Ô˜l¨aÔ/Üð2Ø2EÕ2RÐ1SÐSTðVó
ð 	
ð
 #¸1Õ&<Õ<À	ÕI€OØ˜ÔØ!ˆÜÜ”—
’
˜5�>Ó*Ó+¨iÕ7Øó
‰ð 
˜Ô	Ø ˆÜÜ”—
’
˜6�>Ó*Ó+¨iÕ7Øó
ˆð
 Õ# iÔ/ÜØ˜˜  % ¨¨}¨o¸Q¸|¸nð M Ø +˜}Ð,EÀjÀ\ðSó
ð 	
ð
 Ð&Ð&r   c                ó,   € V ^8„  d   QhRRR\         RR/# )r   Úimageútorch.Tensorr   r   ©r   )r   s   "r   r   r   X   s!   € ÷ ñ  Nð Äð Èñ r   c                óÄ   € V P                   w  r#pW1,          pWA,          pV P                  W%WV4      pVP                  ^^^^^ 4      pVP                  WV,          R4      pV# )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).
éÿÿÿÿ)ÚshapeÚreshapeÚpermute)r/   r   Únum_channelsÚimage_heightÚimage_widthÚnum_patches_heightÚnum_patches_widthÚpatched_images   &&      r   Úconvert_image_to_patchesr=   X   sl   € ð
 /4¯k©kÑ+€L Ø%Õ3ÐØ#Õ1ÐØ—M‘M ,ÀJÐcmÓn€MØ!×)Ñ)¨!¨Q°°1°aÓ8€MØ!×)Ñ)Ð*<Õ*PÐRTÓU€MØÐr   c          	      óF   € V ^8„  d   QhRRRRR\         R\        R,          /# )r   r/   r0   Ú	positionsÚtarget_lengthr   )r0   r0   r   )r   s   "r   r   r   g   s2   € ÷ ñ ØðØ&4ðÜEHðä
Ð)Õ*ñr   c                óR  € V P                   ^ ,          pW#,
          pV^ 8”  d„   ^ ^ .V P                  ^,
          ,          ^ V.,           p^ ^ ^ V3p\        P                  P                  P                  WR^ R7      p \        P                  P                  P                  WRRR7      pW3# )z+
Pad the tensor along the first dimension.
Úconstant)ÚmodeÚvaluer3   )r4   ÚndimÚtorchÚnnr   Úpad)r/   r?   r@   Úcurrent_lengthÚpadding_lengthÚpaddingÚpos_paddings   &&&    r   Úpad_along_first_dimrM   g   s›   € ð —[‘[ •^€NØ"Õ3€NØ˜ÔØ�a�&˜EŸJ™J¨�NÕ+¨q°.Ð.AÕAˆØ˜!˜Q Ð/ˆÜ—‘×#Ñ#×'Ñ'¨¸ZÈqÐ'ÓQˆÜ—H‘H×'Ñ'×+Ñ+¨IÈÐ[]Ð+Ó^ˆ	ØÐÐr   c                   ó0   a € ] tR t^wt o RtV 3R ltRtV tR# )ÚGemma4ImageProcessorKwargsa9  
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.
c                ó>   <€ V ^8„  d   Qh/ S[ ;R&   S[ ;R&   S[ ;R&   # )r   r   Úmax_soft_tokensr   r1   )r   Ú__classdict__s   "€r   r   Ú'Gemma4ImageProcessorKwargs.__annotate__w   s+   ø‡ ‚ ñ �Oñ ñ Ññ ñ Ñò r   © N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__Ú__annotate_func__Ú__static_attributes__Ú__classdictcell__)rR   s   @r   rO   rO   w   s   ø‡ € ñ÷ ƒ r   rO   F)Útotalz$Constructs a Gemma4 image processor.)Úcustom_introc                   óâ   a a€ ] tR t^‡t o]P
                  t. ROt. ROtRt	Rt
RtRtRtRt^tRt^t]t. ROtV3R lV 3R lltV 3R ltV3R lR	 ltV3R
 lV 3R lltRV3R lR lltRtVtV ;t# )ÚGemma4ImageProcessorNTFé  c                ó0   <€ V ^8„  d   QhRS[ S[,          /# )r   Úkwargs)r	   rO   )r   rR   s   "€r   r   Ú!Gemma4ImageProcessor.__annotate__˜   s   ø€ ÷ xñ x¡Ñ(BÕ!Cñ xr   c                ó’   <€ \         SV `  ! R/ VB  V P                  \        9  d!   \	        R \         RV P                   R24      hR# )ú!`max_soft_tokens` must be one of ú, got r   NrT   )ÚsuperÚ__init__rQ   Ú_SUPPORTED_SOFT_TOKENSr"   ©Úselfrc   Ú	__class__s   &,€r   ri   ÚGemma4ImageProcessor.__init__˜   sN   ø€ Ü‰ÒÑ"˜6Ò"à×ÑÔ'=Ô=ÜÐ@ÔAWÐ@XÐX^Ð_c×_sÑ_sÐ^tÐtuÐvÓwÐwñ >r   c                ó2   <€ R VR&   \         SV `  ! R/ VB  R# )FÚ	do_resizeNrT   )rh   Ú_validate_preprocess_kwargsrk   s   &,€r   rq   Ú0Gemma4ImageProcessor._validate_preprocess_kwargsž   s   ø€ ð
 $ˆˆ{ÑÜ‰Ò+Ñ5¨fÔ5r   c                óz   <€ V ^8„  d   QhRS[ P                  RS[RS[RS[RS[P                  RS[ P                  /# )r   r/   r   r   r   Úresampler   )rF   ÚTensorr   ÚtvFÚInterpolationMode)r   rR   s   "€r   r   rd   ¦   sU   ø€ ÷ 
ñ 
á�|‰|ð
ñ ð
ñ ð	
ñ
 !ð
ñ ×'Ñ'ð
ñ 
�‰ñ
r   c                óÂ   € VP                   R,          VP                   R,          rv\        VVVVVR7      w  r‰W†8X  d	   W—8X  d   V# \        P                  ! VW‰.VRR7      # )r   )r   r   r   r   r   T)ÚsizeÚinterpolationÚ	antialiaséþÿÿÿr3   )r4   r-   rv   Úresize)
rl   r/   r   r   r   rt   r   r   r*   r+   s
   &&&&&&    r   Úaspect_ratio_preserving_resizeÚ3Gemma4ImageProcessor.aspect_ratio_preserving_resize¦   si   € ð Ÿ™ B�¨¯©°R­�Ü&FØØØ!Ø#Ø 3ô'
Ñ#ˆð Ô" |Ô'<ØˆLä�zŠzØØÐ.Ø"Øô	
ð 	
r   c                ó<   <€ V ^8„  d   QhRS[ RS[S[,          RS[/# )r   Úimagesrc   r   )r   r	   rO   r   )r   rR   s   "€r   r   rd   Á   s/   ø€ ÷ 4ñ 4áð4ñ Ñ3Õ4ð4ñ 
ñ	4r   c                ó&   <€ \         SV `  ! V3/ VB # )N)rh   Ú
preprocess)rl   r�   rc   rm   s   &&,€r   rƒ   ÚGemma4ImageProcessor.preprocessÁ   s   ø€ ô
 ‰wÒ! &Ñ3¨FÑ3Ð3r   c                ó  <€ V ^8„  d   QhRS[ R,          RS[RRRS[RS[RS[R	S[S[ S[,          ,          R
,          RS[S[ S[,          ,          R
,          RS[S[,          R
,          RS[R
,          RS[R
,          RS[R
,          RS[/# )r   r�   r0   rp   rt   z7PILImageResampling | tvF.InterpolationMode | int | NoneÚ
do_rescaleÚrescale_factorÚdo_normalizeÚ
image_meanNÚ	image_stdÚreturn_tensorsr   rQ   r   r   )ÚlistÚboolÚfloatÚstrr
   r   r   )r   rR   s   "€r   r   rd   È   sã   ø€ ÷ JCñ JCá�^Õ$ðJCñ ðJCð Lð	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r   c           	     óÎ  € V\         9  d   \        R \          RV R24      hW¼^,          ,          p. p. p. pV EFd  pV'       d   V P                  VV
VVVR7      pV P                  VWEWgV4      pVP                  R,          V
,          pVP                  R,          V
,          p\        VV
4      pVP                  VP                  ^ ,          V^,          ,          4       VP                  p\        P                  ! \        P                  ! VVR7      \        P                  ! VVR7      RR7      p\        P                  ! VRR7      pVP                  VP                  ^ ,          ^4      p\        VVV4      w  ppVP                  V4       VP                  V4       EKg  	  \        P                  ! V^ R7      p\        P                  ! V^ R7      pRVR	VR
V/p\        VV	R7      # )rf   rg   r   )r/   r   r   r   rt   )ÚdeviceÚxy)Úindexing)ÚdimÚpixel_valuesÚimage_position_idsÚnum_soft_tokens_per_image)ÚdataÚtensor_typer|   r3   )rj   r"   r~   Úrescale_and_normalizer4   r=   Úappendr‘   rF   ÚmeshgridÚarangeÚstackr5   rM   r   )rl   r�   rp   rt   r†   r‡   rˆ   r‰   rŠ   r‹   r   rQ   r   rc   r   r•   Úposition_idsr—   r/   Úpatch_heightÚpatch_widthÚpatchesr‘   Ú
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ˆð ˜LØ  ,Ø'Ð)Bð
ˆô
  °>ÔBÐBr   rT   )ç        r¨   r¨   )ç      ð?r©   r©   )r•   r–   r—   )NNN)rU   rV   rW   rX   r   ÚBICUBICrt   r‰   rŠ   ry   Údefault_to_squareÚdo_convert_rgbrp   r†   rˆ   r   rQ   r   rO   Úvalid_kwargsÚmodel_input_namesri   rq   r~   rƒ   r¦   r[   r\   Ú__classcell__)rm   rR   s   @@r   r`   r`   ‡   sŽ   ù‡ € à!×)Ñ)€HÚ €JÚ€IØ€DØÐØ€NØ€IØ€JØ€LØ€JØ€OØÐØ-€LÚ[Ð÷xó xõ6÷
ð 
÷64ó 4÷JC÷ JCò JCr   r`   )éF   éŒ   ra   i0  i`  )r   rF   Útorchvision.transforms.v2r   rv   Úimage_processing_backendsr   Úimage_processing_utilsr   Úimage_utilsr   r   Úprocessing_utilsr   r	   Úutilsr
   r   r   Ú
get_loggerrU   Úloggerrj   r-   r=   rM   rO   r`   Ú__all__rT   r   r   Ú<module>r»      sŽ   ðó ã Ý 7å ;Ý 2ß 9ß 4ß 8Ñ 8ð 
×	Ò	˜HÓ	%€ð 3Ð õ3'õnõô  °Uõ ñ  ÐCÔDôJCÐ-ó JCó EðJCðZ "Ð
"‚r   