ó
    qyüi…  ã                   ó®   • S r SSKJ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  SS
KJrJr  SSKJrJr  \ " S S\5      5       rS/rg)z Image processor class for LLaVa.é    )ÚUnionN)Ú
functionalé   )ÚTorchvisionBackend)ÚBatchFeature)Úgroup_images_by_shapeÚreorder_images)ÚOPENAI_CLIP_MEANÚOPENAI_CLIP_STDÚPILImageResamplingÚSizeDict)ÚImagesKwargsÚUnpack)Ú
TensorTypeÚauto_docstringc                    óV  ^ • \ rS rSr\R
                  r\r\	r
SS0rSrSSS.rSrSrSrSrSrSrS\\   4U 4S jjr S!S	S
S\\\\\4   -  SS
4S jjrS	\S
   S\S\S\SS\4   S-  S\S\S\S\S\S\\\   -  S-  S\\\   -  S-  S\S-  S\S-  S\S-  S\\ -  S-  S\!4 S jr"S r#U =r$$ )"ÚLlavaImageProcessoré%   Úshortest_edgeéà   F)ÚheightÚwidthTÚkwargsc                 ó&   >• [         TU ]  " S0 UD6  g )N© )ÚsuperÚ__init__)Úselfr   Ú	__class__s     €Úm/home/mande/repo/quber/.venv/lib/python3.13/site-packages/transformers/models/llava/image_processing_llava.pyr   ÚLlavaImageProcessor.__init__4   s   ø€ Ü‰ÒÑ"˜6Ó"ó    Úimagesztorch.TensorÚbackground_colorÚreturnc                 ó¤  • UR                   SS u  p4X4:X  a  U$ [        UR                   5      S:X  a  UR                   S   OUR                   S   n[        U[        5      (       a  U/S/US-
  -  -   nO[        U5      U:w  a  [	        SU S35      e[        X45      nXd-
  S-  nXc-
  S-  nXd-
  U-
  n	Xc-
  U-
  n
[        R                  " XX‰U
/US	9nU$ )
aC  
Pads an image to a square based on the longest edge.

Args:
    images (`torch.Tensor`):
        The images to pad. Shape: (batch_size, num_channels, height, width) or (num_channels, height, width).
    background_color (`int` or `tuple[int, int, int]`, *optional*, defaults to 0):
        The color to use for the padding. Can be an integer for single channel or a
        tuple of integers representing for multi-channel images. If passed as integer
        in multi-channel mode, it will default to `0` in subsequent channels.
Returns:
    `torch.Tensor`: The padded images.
éþÿÿÿNé   é   r   z(background_color must have no more than z) elements to match the number of channelsé   )ÚpaddingÚfill)ÚshapeÚlenÚ
isinstanceÚintÚ
ValueErrorÚmaxÚtvFÚpad)r   r#   r$   r   r   Únum_channelsÚmax_dimÚpaste_x_leftÚpaste_y_leftÚpaste_x_rightÚpaste_y_rightÚpadded_imagess               r    Úpad_to_squareÚ!LlavaImageProcessor.pad_to_square7   sù   € ð$ Ÿ™ R SÐ)‰ˆà‹?ØˆMä*-¨f¯l©lÓ*;¸qÓ*@�v—|‘| A’ÀfÇlÁlÐSTÁoˆÜÐ&¬×,Ñ,Ø 0Ð1°Q°C¸<È!Ñ;KÑ4LÑLÑÜÐ!Ó" lÓ2ÜØ:¸<¸.ÐHqÐróð ô �fÓ$ˆØ™¨AÑ-ˆØÑ(¨QÑ.ˆØ™¨,Ñ6ˆØÑ(¨<Ñ7ˆÜŸšØ¨<ÈÐVÐ]mñ
ˆð Ðr"   Ú	do_resizeÚsizeÚresampler   ztvF.InterpolationModeNÚdo_center_cropÚ	crop_sizeÚ
do_rescaleÚrescale_factorÚdo_normalizeÚ
image_meanÚ	image_stdÚdo_padÚpad_sizeÚdisable_groupingÚreturn_tensorsc           	      óJ  • [        XS9u  nn0 nUR                  5        H2  u  nnU(       a   U R                  U[        S U
 5       5      S9nUUU'   M4     [	        UU5      n[        UUS9u  nn0 nUR                  5        H"  u  nnU(       a  U R                  UX4S9nUUU'   M$     [	        UU5      n[        UUS9u  nn0 nUR                  5        H8  u  nnU(       a  U R                  UU5      nU R                  UXxXšU5      nUUU'   M:     [	        UU5      n[        SU0US9$ )N)rJ   c              3   ó>   #   • U  H  n[        US -  5      v •  M     g7f)éÿ   N)r0   )Ú.0Úxs     r    Ú	<genexpr>Ú2LlavaImageProcessor._preprocess.<locals>.<genexpr>z   s   é € ÐAcÒXbÐSTÄ#ÀaÈ#ÁgÇ,À,ÒXbùs   ‚)r#   r$   )Úimager?   r@   Úpixel_values)ÚdataÚtensor_type)	r   Úitemsr<   Útupler	   ÚresizeÚcenter_cropÚrescale_and_normalizer   )r   r#   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   r   Úgrouped_imagesÚgrouped_images_indexÚresized_images_groupedr-   Ústacked_imagesr;   Úresized_imagesÚprocessed_images_groupedÚprocessed_imagess                             r    Ú_preprocessÚLlavaImageProcessor._preprocessa   sr  € ô( 0EÀVÑ/oÑ,ˆÐ,Ø!#ÐØ%3×%9Ñ%9Ö%;Ñ!ˆE�>ÞØ!%×!3Ñ!3Ø)¼EÑAcÑXbÓAcÓ<cð "4ð "�ð -;Ð" 5Ó)ñ &<ô 'Ð'=Ð?SÓTˆô 0EÀ]ÐeuÑ/vÑ,ˆÐ,Ø!#ÐØ%3×%9Ñ%9Ö%;Ñ!ˆE�>ÞØ!%§¡°>È Ð!`�Ø,:Ð" 5Ó)ñ &<ô (Ð(>Ð@TÓUˆô 0EÀ^ÐfvÑ/wÑ,ˆÐ,Ø#%Ð Ø%3×%9Ñ%9Ö%;Ñ!ˆE�>ÞØ!%×!1Ñ!1°.À)Ó!L�à!×7Ñ7Ø 
¸LÐV_óˆNð /=Ð$ UÓ+ñ &<ô *Ð*BÐDXÓYÐä .Ð2BÐ!CÐQ_Ñ`Ð`r"   r   )r   )%Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r   ÚBICUBICr@   r
   rF   r   rG   r?   Údefault_to_squarerB   rH   r>   rA   rC   rE   Údo_convert_rgbr   r   r   r0   rX   r<   ÚlistÚboolr   r   ÚfloatÚstrr   r   rc   Ú__static_attributes__Ú__classcell__)r   s   @r    r   r   %   sœ  ø† à!×)Ñ)€HØ!€JØ€IØ˜SÐ!€DØÐØ¨Ñ-€IØ€FØ€IØ€NØ€JØ€LØ€Nð# ¨Ñ!5÷ #ð 89ñ(àð(ð   c¨3° mÑ 4Ñ4ð(ð 
õ	(ðT7aà�^Ñ$ð7að ð7að ð	7að
 Ð,Ð.EÀsÐJÑKÈdÑRð7að ð7að ð7að ð7að ð7að ð7að ˜D ™KÑ'¨$Ñ.ð7að ˜4 ™;Ñ&¨Ñ-ð7að �t‘ð7að ˜T‘/ð7að  ™+ð7að  ˜jÑ(¨4Ñ/ð!7að$ 
÷%7aò 7ar"   r   )Ú__doc__Útypingr   ÚtorchÚtorchvision.transforms.v2r   r3   Úimage_processing_backendsr   Úimage_processing_utilsr   Úimage_transformsr   r	   Úimage_utilsr
   r   r   r   Úprocessing_utilsr   r   Úutilsr   r   r   Ú__all__r   r"   r    Ú<module>r}      s]   ðñ 'å ã Ý 7å ;Ý 2÷÷ó ÷ 5ß /ð ôraÐ,ó raó ðraðj !Ð
!�r"   