+
    œ°³j_,  ã                   ó(  € R t ^ RIt^ RIt^RIHt ^RIHt ^RIH	t	H
t
 ^RIHtHtHtHtHtHt ^RIHtHt ^RIHtHtHt ]! 4       '       d   ^ RIHt ^ R	IHt R
 R ltR R lt ! R R]RR7      t R R lt!R R lt"] ! R R]4      4       t#R.t$R# )z#Image processor class for Idefics2.N)ÚTorchvisionBackend)ÚBatchFeature)Úgroup_images_by_shapeÚreorder_images)ÚIMAGENET_STANDARD_MEANÚIMAGENET_STANDARD_STDÚ
ImageInputÚPILImageResamplingÚSizeDictÚmake_nested_list_of_images)ÚImagesKwargsÚUnpack)Ú
TensorTypeÚauto_docstringÚis_vision_available)ÚImage)Ú
functionalc                óR   € V ^8„  d   QhR\         R\        \        \        3,          /# )é   ÚsizeÚreturn)r
   ÚtupleÚint)Úformats   "Úw/home/luca/screen-checking/.venv/lib/python3.14/site-packages/transformers/models/idefics2/image_processing_idefics2.pyÚ__annotate__r   (   s"   € ÷ ñ ¬hð ¼5ÄÄcÀ½?ñ ó    c                ó  € V P                   RR w  r#VP                  pVP                  pW2,          pW28¼  d   W58”  d   Tp\        W6,          4      pMW#8”  d   W%8”  d   Tp\        W&,          4      p\	        W$4      p\	        W44      pW#3# )zŽ
Get the output size of the image after resizing given a dictionary specifying the max and min sizes.
Images are always channels-first (CHW).
Néþÿÿÿ)ÚshapeÚshortest_edgeÚlongest_edger   Úmax)Úimager   ÚheightÚwidthÚmin_lenÚmax_lenÚaspect_ratios   &&     r   Úget_resize_output_image_sizer)   (   s†   € ð
 —K‘K  Ð$�M€Fà× Ñ €GØ×Ñ€GØ•>€Là„˜5œ?ØˆÜ�UÕ)Ó*‰Ø	Œ˜FÔ,ØˆÜ�FÕ)Ó*ˆÜ�Ó!€FÜ�Ó€EØˆ=Ðr   c                ó0   € V ^8„  d   QhR\         R\         /# ©r   r#   r   ©r   )r   s   "r   r   r   >   s   € ÷ ñ œ*ð ¬ñ r   c                óD  € \        4       '       d!   \        V \        P                  4      '       g   V # V P                  R8X  d   V # V P	                  R4      p\        P
                  ! RVP                  R4      p\        P                  ! W!4      pVP	                  R4      pV# )z|
Converts an image to RGB format. Only converts if the image is of type PIL.Image.Image, otherwise returns the image
as is.
ÚRGBÚRGBA)éÿ   r0   r0   )r   Ú
isinstancer   ÚmodeÚconvertÚnewr   Úalpha_composite)r#   Ú
image_rgbaÚ
backgroundr5   s   &   r   Úconvert_to_rgbr8   >   s}   € ô
 × Ò ¬
°5¼%¿+¹+×(FÒ(FØˆà‡z�z�UÔØˆà—‘˜vÓ&€JÜ—’˜6 :§?¡?°OÓD€JÜ×+Ò+¨JÓC€OØ%×-Ñ-¨eÓ4€OØÐr   c                   ó0   a € ] tR t^Pt o RtV 3R ltRtV tR# )ÚIdefics2ImageProcessorKwargsz¹
do_image_splitting (`bool`, *optional*, defaults to `self.do_image_splitting`):
    Whether to split the image into a sequence 4 equal sub-images concatenated with the original image.
c                ó&   <€ V ^8„  d   Qh/ S[ ;R&   # )r   Údo_image_splitting)Úbool)r   Ú__classdict__s   "€r   r   Ú)Idefics2ImageProcessorKwargs.__annotate__P   s   ø‡ ‚ ñ Ñò r   © N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__Ú__annotate_func__Ú__static_attributes__Ú__classdictcell__)r>   s   @r   r:   r:   P   s   ø‡ € ñ÷ ƒ r   r:   F)Útotalc                óv   € V ^8„  d   QhR\         \         R,          ,          R\        \        \        3,          /# )r   Úimages_listztorch.Tensor|np.ndarrayr   )Úlistr   r   )r   s   "r   r   r   Y   s2   € ÷ #ñ #¤d¬4Ð0IÕ+JÕ&Kð #ÔPUÔVYÔ[^ÐV^ÕP_ñ #r   c                ó´   € . pV  F*  pV F!  pVP                  VP                  RR 4       K#  	  K,  	  \        R V 4       4      p\        R V 4       4      pWE3# )z@
Get the maximum height and width across all images in a batch.
Nc              3   ó2   "  € T F  q^ ,          x € K  	  R# 5i)é    Nr@   ©Ú.0r   s   & r   Ú	<genexpr>Ú'get_max_height_width.<locals>.<genexpr>b   s   é € Ð5© ˜!—W’W«ùó   ‚c              3   ó2   "  € T F  q^,          x € K  	  R# 5i)é   Nr@   rP   s   & r   rR   rS   c   s   é € Ð4© ˜—G’G«ùrT   r   )Úappendr   r"   )rK   Úimage_sizesÚimagesr#   Ú
max_heightÚ	max_widths   &     r   Úget_max_height_widthr\   Y   sa   € ð €KÛˆÛˆEØ×Ñ˜uŸ{™{¨2¨3Ð/Ö0ó ñ ô Ñ5©Ó5Ó5€JÜÑ4©Ó4Ó4€IØÐ"Ð"r   c                óN   € V ^8„  d   QhRRR\         \        \        3,          RR/# )r   r#   útorch.TensorÚoutput_sizer   ©r   r   )r   s   "r   r   r   g   s)   € ÷ ñ ˜>ð ¼¼cÄ3¸h½ð ÈNñ r   c                ó    € V P                   RR w  r#\        P                  ! V\        P                  V P                  R7      p^VRV1RV13&   V# )z[
Make a pixel mask for the image, where 1 indicates a valid pixel and 0 indicates padding.
N©ÚdtypeÚdevicer   )r   ÚtorchÚzerosÚint64rd   )r#   r_   Úinput_heightÚinput_widthÚmasks   &&   r   Úmake_pixel_maskrk   g   sM   € ð !&§¡¨B¨CÐ 0Ñ€LÜ�;Š;�{¬%¯+©+¸e¿l¹lÔK€DØ()€Dˆˆ,ˆ˜˜˜Ð	$Ñ%Ø€Kr   c                   ó2  a a€ ] tR t^qt o]t]P                  t]	t
]tRtRtRtRtRtRtRtRRRR/tRR.tV3R	 lV 3R
 llt]V3R lV 3R ll4       tV3R lR ltRV3R lV 3R llltRV3R lR lltV3R lR ltRV3R lR lltV3R lR ltRtVt V ;t!# )ÚIdefics2ImageProcessorTFr    iz  r!   iÔ  Úpixel_valuesÚpixel_attention_maskc                ó0   <€ V ^8„  d   QhRS[ S[,          /# )r   Úkwargs)r   r:   )r   r>   s   "€r   r   Ú#Idefics2ImageProcessor.__annotate__�   s   ø€ ÷ #ñ #¡Ñ(DÕ!Eñ #r   c                ó(   <€ \         SV `  ! R/ VB  R # )Nr@   )ÚsuperÚ__init__)Úselfrq   Ú	__class__s   &,€r   ru   ÚIdefics2ImageProcessor.__init__�   s   ø€ Ü‰ÒÑ"˜6Ô"r   c                ó<   <€ V ^8„  d   QhRS[ RS[S[,          RS[/# )r   rY   rq   r   )r   r   r:   r   )r   r>   s   "€r   r   rr   …   s)   ø€ ÷ 4ñ 4¡ð 4±vÑ>ZÕ7[ð 4Ñ`lñ 4r   c                ó&   <€ \         SV `  ! V3/ VB # ©N)rt   Ú
preprocess)rv   rY   rq   rw   s   &&,€r   r|   Ú!Idefics2ImageProcessor.preprocess„   s   ø€ ä‰wÒ! &Ñ3¨FÑ3Ð3r   c                ó&   <€ V ^8„  d   QhRS[ RS[ /# r+   r,   )r   r>   s   "€r   r   rr   ˆ   s   ø€ ÷ %ñ %¡Jð %±:ñ %r   c                ó   € \        V4      # )zConvert an image to RGB format.)r8   )rv   r#   s   &&r   r8   Ú%Idefics2ImageProcessor.convert_to_rgbˆ   s   € ä˜eÓ$Ð$r   c                ó,   <€ V ^8„  d   QhRRRS[ RRRR/# )r   r#   r^   r   Úresampleú7PILImageResampling | tvF.InterpolationMode | int | Noner   )r
   )r   r>   s   "€r   r   rr   Œ   s:   ø€ ÷ sñ sàðsñ ðsð Lð	sð 
ñsr   c                óN  <€ VP                   '       d   VP                  '       d   \        W4      pMHVP                  '       d,   VP                  '       d   VP                  VP                  3pM\        R4      h\        SV `  ! V\        V^ ,          V^,          R7      3RV/VB # )z7Resize using Idefics2 shortest_edge/longest_edge logic.zWSize must contain 'height' and 'width' keys or 'shortest_edge' and 'longest_edge' keys.)r$   r%   r‚   )	r    r!   r)   r$   r%   Ú
ValueErrorrt   Úresizer
   )rv   r#   r   r‚   rq   Únew_sizerw   s   &&&&, €r   r†   ÚIdefics2ImageProcessor.resizeŒ   s‚   ø€ ð ××Ð $×"3×"3Ð"3Ü3°EÓ@‰HØ�[�[ˆ[˜TŸZŸZ˜ZØŸ™ T§Z¡ZÐ0‰HäÐvÓwÐwä‰wŠ~˜e¤X°X¸aµ[ÈÐQRÍÔ%TÑrÐ_gÐrÐkqÑrÐrr   c                ó,   <€ V ^8„  d   QhRS[ RS[RS[ /# )r   rY   Úexpected_ndimsr   )r   r   )r   r>   s   "€r   r   rr   �   s(   ø€ ÷ Qñ Q±
ð QÉCð QÑXbñ Qr   c                ó<   € V P                  V4      p\        WR7      # )z1Prepare a nested images structure for processing.)rŠ   )Úfetch_imagesr   )rv   rY   rŠ   s   &&&r   Ú_prepare_images_structureÚ0Idefics2ImageProcessor._prepare_images_structure�   s   € à×"Ñ" 6Ó*ˆÜ)¨&ÔPÐPr   c                óB   <€ V ^8„  d   QhRRRS[ S[ R,          ,          /# )r   rY   r^   r   )rL   )r   r>   s   "€r   r   rr   ¢   s%   ø€ ÷ "ñ " >ð "±d¹4ÀÕ;OÕ6Pñ "r   c           	     ób  € VP                   RR w  r#V^,          pV^,          pVRRV1RV13,          VRRV1VR13,          VRVR1RV13,          VRVR1VR13,          V.p\        \        V^ ,          4      4       UUu. uF  qv Uu. uF  qˆV,          NK  	  upNK  	  pppV# u upi u uppi )zi
Split a batch of images into 4 equal sub-images, and concatenate that sequence with the original image.
N.r   )r   ÚrangeÚlen)	rv   rY   r$   r%   Ú	mid_widthÚ
mid_heightÚbatch_split_imagesÚir#   s	   &&       r   Úsplit_imagesÚ#Idefics2ImageProcessor.split_images¢   sÛ   € ð Ÿ™ R SÐ)‰ˆà˜Q•Jˆ	Ø˜q•[ˆ
ð �3˜˜˜ Z i ZÐ/Õ0Ø�3˜˜˜ Y¡ZÐ/Õ0Ø�3˜
™ Z i ZÐ/Õ0Ø�3˜
™ Y¡ZÐ/Õ0Øð
Ðô SXÔX[Ð\nÐopÕ\qÓXrÔRsÔtÑRsÈQÐ5GÓHÑ5G¨E QŸx˜xÑ5GÔHÑRsÐÑtØ!Ð!ùò IùÓts   ÂB+Â	B&ÂB+Â&B+c          	      óT   <€ V ^8„  d   QhRRRS[ S[S[3,          RS[RS[ R,          /# )r   r#   r^   Úpadded_sizeÚfillr   )r^   r^   r`   )r   r>   s   "€r   r   rr   ¶   s;   ø€ ÷ !ñ !Ø#ð!Ù27¹¹S¸µ/ð!ÙILð!á	Ð-Õ	.ñ!r   c                óž  € VP                   RR pV^ ,          V^ ,          ,
          pV^,          V^,          ,
          pV^ 8  g   V^ 8  d   \        RV RV R24      hWB8w  d   ^ ^ We3p\        P                  ! WVRR7      p\        P
                  ! V\        P                  VP                  R7      p^VRV^ ,          1RV^,          13&   W3# )	zM
Pad an image to the specified size and create the corresponding pixel mask.
NzzPadding dimensions are negative. Please make sure that the padded size is larger than the original size. Got padded size: z, original size: Ú.Úconstant)r›   Úpadding_moderb   r   )r   r…   ÚtvFÚpadre   rf   rg   rd   )	rv   r#   rš   r›   Úoriginal_sizeÚpadding_bottomÚpadding_rightÚpaddingÚ
pixel_masks	   &&&&     r   r¡   ÚIdefics2ImageProcessor.pad¶   sà   € ð Ÿ™ B CÐ(ˆØ$ Q�¨-¸Õ*:Õ:ˆØ# A�¨°qÕ)9Õ9ˆà˜AÔ °Ô!2Üð3Ø3>°-Ð?PÐQ^ÐP_Ð_`ðbóð ð
 Ô'Ø˜!˜]Ð;ˆGÜ—G’G˜E°ÀJÔOˆEä—[’[ ´E·K±KÈÏÉÔUˆ
Ø=>ˆ
Ð%�] 1Õ%Ð%Ð'9¨°qÕ)9Ð'9Ð9Ñ:àÐ Ð r   c                ó.  <€ V ^8„  d   QhRS[ S[ R,          ,          RS[RS[RRRS[RS[R	S[R
S[S[ S[,          ,          R,          RS[S[ S[,          ,          R,          RS[R,          RS[R,          RS[R,          RS[S[,          R,          RS[/# )r   rY   r^   Ú	do_resizer   r‚   rƒ   Ú
do_rescaleÚrescale_factorÚdo_normalizeÚ
image_meanNÚ	image_stdÚdo_padr<   Údisable_groupingÚreturn_tensorsr   )rL   r=   r
   ÚfloatÚstrr   r   )r   r>   s   "€r   r   rr   Ï   sô   ø€ ÷ OCñ OCá‘T˜.Õ)Õ*ðOCñ ðOCñ ð	OCð
 LðOCñ ðOCñ ðOCñ ðOCñ ™D¡�KÕ'¨$Õ.ðOCñ ™4¡�;Õ&¨Õ-ðOCñ �t•ðOCñ ! 4�KðOCñ  �+ðOCñ ™jÕ(¨4Õ/ðOCñ  
ñ!OCr   c           	     óŒ  € \        WR R7      w  pp/ pVP                  4        F$  w  ppV'       d   V P                  V4      pVVV&   K&  	  \        VVR R7      pV'       d6   \	        V4       F&  w  ppV UUu. uF  pV F  pVNK  	  K  	  uppVV&   K(  	  \        VVR R7      w  pp/ pVP                  4        F&  w  ppV'       d   V P                  VW4R7      pVVV&   K(  	  \        VVR R7      p\        VVR R7      w  pp/ pVP                  4        F  w  ppV P                  VWVWxV	4      pVVV&   K!  	  \        VVR R7      pV
'       Ed
   \        R V 4       4      p\        V4      w  pp\        P                  ! \        V4      V.V^ ,          ^ ,          P                  ^ ,          VV3O5RV^ ,          ^ ,          P                  / p \        P                  ! \        V4      V.VV3O5RV^ ,          ^ ,          P                  / p!\	        V4       F<  w  pp\	        V4       F'  w  p"pV P                  VVV34      w  V VV"3&   V!VV"3&   K)  	  K>  	  T pV
'       d   RVRX!/p#MHVR8X  d>   R\        P                  ! V Uu. uF  p\        P                  ! V4      NK  	  up4      /p#MRV/p#\!        V#VR	7      # u uppi u upi )
T)r°   Ú	is_nested)rµ   )r‚   c              3   ó8   "  € T F  p\        V4      x € K  	  R # 5ir{   )r’   )rQ   Úimages_s   & r   rR   Ú5Idefics2ImageProcessor._preprocess.<locals>.<genexpr>  s   é € Ð NÑ=M°'¤ W§ Ó=Mùs   ‚rd   rn   ro   Úpt)ÚdataÚtensor_type)r   Úitemsr—   r   Ú	enumerater†   Úrescale_and_normalizer"   r\   re   rf   r’   r   rd   r¡   Ústackr   )$rv   rY   r©   r   r‚   rª   r«   r¬   r­   r®   r¯   r<   r°   r±   rq   Úgrouped_imagesÚgrouped_images_indexÚsplit_images_groupedr   Ústacked_imagesr—   r–   Úgroup_imagesÚsublistr#   Úresized_images_groupedÚresized_imagesÚprocessed_images_groupedÚprocessed_imagesÚmax_num_imagesrZ   r[   Úprocessed_images_paddedÚpixel_attention_masksÚjrº   s$   &&&&&&&&&&&&&&,                     r   Ú_preprocessÚ"Idefics2ImageProcessor._preprocessÏ   s   € ô" 0EØÀô0
Ñ,ˆÐ,ð  "ÐØ%3×%9Ñ%9Ö%;Ñ!ˆE�>ß!Ø!%×!2Ñ!2°>Ó!B�Ø*8Ð  Ó'ñ &<ô &Ð&:Ð<PÐ\`ÔaˆßÜ#,¨\Ö#:‘��<Ù8DÔ"Z¹¨WÓRYÈ£5ÑRY¡5¹Ò"Z�˜Q“ñ $;ô 0EØÐ+;Àtô0
Ñ,ˆÐ,ð "$ÐØ%3×%9Ñ%9Ö%;Ñ!ˆE�>ßØ!%§¡¨^¸T Ó!U�Ø,:Ð" 5Ó)ñ &<ô (Ð(>Ð@TÐ`dÔeˆä/DØÐ-=Èô0
Ñ,ˆÐ,ð $&Ð Ø%3×%9Ñ%9Ö%;Ñ!ˆE�>Ø!×7Ñ7Ø 
¸LÐV_óˆNð /=Ð$ UÓ+ñ	 &<ô
 *Ð*BÐDXÐdhÔiÐçˆ6Ü Ñ NÑ=MÓ NÓNˆNÜ$8Ð9IÓ$JÑ!ˆJ˜	ä&+§k¢kÜÐ$Ó%Øð'ð # 1Õ% aÕ(×.Ñ.¨qÕ1°:¸yÐIò'ð (¨Õ*¨1Õ-×4Ñ4ñ	'Ð#ô %*§K¢KÜÐ$Ó%Øð%ð ˜iÐ(ò%ð (¨Õ*¨1Õ-×4Ñ4ñ	%Ð!ô 'Ð'7Ö8‘	��6Ü )¨&Ö 1‘H�A�uØQU×QYÑQYØ 
¨IÐ6óRÑNÐ+¨A¨q¨DÑ1Ð3HÈÈAÈÓ3Nó !2ñ 9ð
  7ÐßØ"Ð$4Ð6LÐNcÐd‰DØ˜tÔ#Ø"¤E§K¢KÑScÓ0dÑScÈ´·²¸VÖ1DÑScÑ0dÓ$eÐf‰Dà"Ð$4Ð5ˆDÜ °>ÔBÐBùóg #[ùò` 1es   Á7J;ÊK
r@   r{   )é   )rO   )"rA   rB   rC   rD   r:   Úvalid_kwargsr	   ÚBILINEARr‚   r   r­   r   r®   r©   rª   r¬   r¯   Údo_convert_rgbr<   Údefault_to_squarer   Úmodel_input_namesru   r   r|   r8   r†   r�   r—   r¡   rÎ   rG   rH   Ú__classcell__)rw   r>   s   @@r   rm   rm   q   sÌ   ù‡ € à/€LØ!×*Ñ*€HØ'€JØ%€IØ€IØ€JØ€LØ€FØ€NØÐØÐØ˜S .°#Ð6€DØ'Ð)?Ð@Ð÷#ó #ð ÷4ò 4ó ð4÷%ð %÷sõ s÷"Qò Q÷
"ð "÷(!ò !÷2OC÷ OCð OCr   rm   )%rE   ÚnumpyÚnpre   Úimage_processing_backendsr   Úimage_processing_utilsr   Úimage_transformsr   r   Úimage_utilsr   r   r   r	   r
   r   Úprocessing_utilsr   r   Úutilsr   r   r   ÚPILr   Útorchvision.transforms.v2r   r    r)   r8   r:   r\   rk   rm   Ú__all__r@   r   r   Ú<module>râ      sŽ   ðñ *ã Û å ;Ý 2ß E÷÷ ÷ 5ß DÑ Dñ ×ÒÝå 7õõ,ô$ <°uõ õ#õð ôlCÐ/ó lCó ðlCð^ $Ð
$‚r   