
    ^j                         d Z ddlmZ ddlZddlmZ ddlmZ ddl	m
Z
 ddlmZmZ dd	lmZmZmZmZ dd
lmZmZ ddlmZmZ e G d de             ZdgZy)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                    D    e Zd Zej                  ZeZeZ	ddiZ
dZdddZdZdZdZdZdZdZdee   f fdZ	 ddd	d
eeeeef   z  dd	fdZded	   dedededdef   dz  dedededededeee   z  dz  deee   z  dz  dedz  dedz  dedz  deez  dz  de f dZ! xZ"S ) LlavaImageProcessorshortest_edge   F)heightwidthTkwargsc                 $    t        |   di | y )N )super__init__)selfr   	__class__s     {/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/transformers/models/llava/image_processing_llava.pyr   zLlavaImageProcessor.__init__4   s    "6"    imagesztorch.Tensorbackground_colorreturnc                    |j                   dd \  }}||k(  r|S t        |j                         dk(  r|j                   d   n|j                   d   }t        |t              r|gdg|dz
  z  z   }nt        |      |k7  rt	        d| d      t        ||      }||z
  dz  }||z
  dz  }||z
  |z
  }	||z
  |z
  }
t        j                  ||||	|
g|	      }|S )
a  
        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_squarez!LlavaImageProcessor.pad_to_square7   s   $ RS)U?M*-fll*;q*@v||AfllSTo&, 01QC<!;K4LL!"l2:<.Hqr  fe$%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           	      L   t        ||      \  }}i }|j                         D ]/  \  }}|r#| j                  |t        d |
D                    }|||<   1 t	        ||      }t        ||      \  }}i }|j                         D ]   \  }}|r| j                  |||      }|||<   " t	        ||      }t        ||      \  }}i }|j                         D ]4  \  }}|r| j                  ||      }| j                  ||||	|
|      }|||<   6 t	        ||      }t        d|i|      S )N)rG   c              3   8   K   | ]  }t        |d z          yw)   N)r.   ).0xs     r   	<genexpr>z2LlavaImageProcessor._preprocess.<locals>.<genexpr>z   s     AcST#a#g,Acs   )r!   r"   )imager<   r=   pixel_values)datatensor_type)	r   itemsr:   tupler	   resizecenter_croprescale_and_normalizer   )r   r!   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   rH   r   grouped_imagesgrouped_images_indexresized_images_groupedr+   stacked_imagesr9   resized_imagesprocessed_images_groupedprocessed_imagess                             r   _preprocesszLlavaImageProcessor._preprocessa   s   ( 0EV^n/o,,!#%3%9%9%; 	;!E>!%!3!3)EAcXbAc<c "4 " -;"5)	; ''=?ST 0E]eu/v,,!#%3%9%9%; 	;!E>!%>W_!`,:"5)	; ((>@TU 0E^fv/w,,#% %3%9%9%; 	=!E>!%!1!1.)!L!77
NL*V_N /=$U+	= **BDXY.2B!CQ_``r    )r   )#__name__
__module____qualname__r   BICUBICr=   r
   rC   r   rD   r<   default_to_squarer?   rE   r;   r>   r@   rB   do_convert_rgbr   r   r   r.   rT   r:   listboolr   r   floatstrr   r   r_   __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r    r   )__doc__typingr   torchtorchvision.transforms.v2r   r1   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>rv      s]    '   7 ; 2  5 / ra, ra raj !
!r    