
    Z j                         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     ځ/root/GenerationalWealth/GenerationalWealth/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XU
/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    $ RS)?M*-fll*;q*@v||AfllSTo&,, 01QC<!;K4L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XxXU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     AcXbST#a#g,,Xbs   )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)EAcXbAc<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
LV_N /=$U+ &< **BDXY.2B!CQ_``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(( c3m 44( 
	(T7a^$7a 7a 	7a
 ,.EsJKd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"   