
    ^j*                         d dl 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mZ ddlmZmZ dd	lmZmZ  G d
 ded      Z	 	 	 	 ddededededededefdZe G d de             ZdgZy)    N)
functional   )TorchvisionBackend)BatchFeature)group_images_by_shapereorder_images)OPENAI_CLIP_MEANOPENAI_CLIP_STD
ImageInputPILImageResamplingSizeDict)ImagesKwargsUnpack)
TensorTypeauto_docstringc                   :    e Zd ZU dZeed<   eed<   eed<   eed<   y)GlmgaImageProcessorKwargsa  
    patch_size (`int`, *optional*, defaults to 14):
        The spatial patch size of the vision encoder.
    temporal_patch_size (`int`, *optional*, defaults to 2):
        The temporal patch size of the vision encoder.
    merge_size (`int`, *optional*, defaults to 2):
        The merge size of the vision encoder to llm encoder.
    patch_expand_factor (`int`, *optional*, defaults to 1):
        The patch_expand_factor of the vision encoder to llm encoder.
    
patch_sizetemporal_patch_size
merge_sizepatch_expand_factorN)__name__
__module____qualname____doc__int__annotations__     {/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/transformers/models/glmga/image_processing_glmga.pyr   r   "   s    	 OOr   r   F)total
num_framesheightwidthtemporal_factorfactor
min_pixels
max_pixelsc                 R   | |k  rt        d|  d|       ||k  s||k  r.t        ||z  ||z        }t        ||z        }t        ||z        }t        ||      t        ||      z  dkD  r%t        dt        ||      t        ||      z         t	        ||z        |z  }t	        ||z        |z  }	t	        | |z        |z  }
|
|z  |	z  |kD  rrt        j                  | |z  |z  |z        }t        |t        j                  ||z  |z        |z        }t        |t        j                  ||z  |z        |z        }	||	fS |
|z  |	z  |k  rZt        j                  || |z  |z  z        }t        j                  ||z  |z        |z  }t        j                  ||z  |z        |z  }	||	fS )Nzt:z% must be larger than temporal_factor:   z4absolute aspect ratio must be smaller than 200, got )	
ValueErrormaxr   minroundmathsqrtfloorceil)r"   r#   r$   r%   r&   r'   r(   scaleh_barw_bart_barbetas               r    smart_resizer8   4   s    O#2j\)NN_`aa%&.FVOVe^4Ve^$EEM"
65C..4B3vuCUX[\bdiXjCjBkl
 	
 &6/"V+E%&.!F*E*.//AEu}uz)yy*v-5CDFDJJv}v'=>GHFDJJut|f'<=FG %< 
		+yyzF':U'BCD		&4-&01F:		%$,/069%<r   c                    V    e Zd ZdZej
                  ZdddZdZdZ	dZ
dZeZeZdZdZdZdZeZd	d
gZdZdee   f fdZededee   def fd       Zdef fdZde d   de!de"ddde!de#de!de#e e#   z  dz  de#e e#   z  dz  de$de$de$d e$d!e!dz  d"e%e&z  dz  def d#Z'd'd$e$d%e$fd&Z( xZ)S )(GlmgaImageProcessorT 1  iq )shortest_edgelongest_edgeFgp?      pixel_valuesimage_grid_thw   kwargsc                     t        |   di | | j                  8| j                  j                  r| j                  j                  st        d      y y )N:size must contain 'shortest_edge' and 'longest_edge' keys.r   )super__init__sizer<   r=   r+   )selfrC   	__class__s     r    rG   zGlmgaImageProcessor.__init__k   sM    "6"99 99**$))2H2H !]^^ 3I !r   imagesreturnc                 $    t        |   |fi |S N)rF   
preprocess)rI   rK   rC   rJ   s      r    rO   zGlmgaImageProcessor.preprocessq   s    w!&3F33r   c                     t        |   di |}|j                  d| j                        }|j                  r|j
                  st        d      |S )z
        Update kwargs that need further processing before being validated
        Can be overridden by subclasses to customize the processing of kwargs.
        rH   rE   r   )rF   _standardize_kwargsgetrH   r<   r=   r+   )rI   rC   rH   rJ   s      r    rQ   z'GlmgaImageProcessor._standardize_kwargsu   sM    
 ,6v6zz&$)),!!):):YZZr   ztorch.Tensor	do_resizerH   resamplez7PILImageResampling | tvF.InterpolationMode | int | None
do_rescalerescale_factordo_normalize
image_meanN	image_stdr   r   r   r   disable_groupingreturn_tensorsc                    t        ||      \  }}i }|j                         D ]l  \  }}|j                  dd \  }}|rNt        |||||
|z  |z  |j                  |j
                        \  }}| j                  |t        ||      |      }|||<   n t        ||      }t        ||      \  }}i }i }|j                         D ]<  \  }}|j                  dd \  }}| j                  ||||||	      }|j                  dk(  r|j                  d      }|j                  d   |z  d	k7  rJ|ddd
df   j                  d||j                  d   |z  z
  ddd      }t        j                  ||gd      }|j                  dd \  }} }!| |z  }"||
z  ||
z  }$}#|j                  ||"||!|#|z  ||
|$|z  ||

      }|j!                  d	ddddddddd
      }|j#                  ||"|#z  |$z  |!|z  |
z  |
z        }%|%||<   |"|#|$gg|z  ||<   ? t        ||      }&t        ||      }t        j                  |&d	      }'t        j$                  |      }(t'        |'|(d|      S )z9
        Preprocess an image or batch of images.
        )rZ   N)r"   r#   r$   r%   r&   r'   r(   )r#   r$   )rH   rT      rB   r   )dimr            r?      	   )r@   rA   )datatensor_type)r   itemsshaper8   r<   r=   resizer   r   rescale_and_normalizendim	unsqueezerepeattorchcatviewpermutereshapetensorr   ))rI   rK   rS   rH   rT   rU   rV   rW   rX   rY   r   r   r   r   rZ   r[   rC   grouped_imagesgrouped_images_indexresized_images_groupedri   stacked_imagesr#   r$   resized_heightresized_widthresized_imagesprocessed_images_groupedprocessed_gridspatchesrepeats
batch_sizet_lenchannelgrid_tgrid_hgrid_wflatten_patchesprocessed_imagesr@   rA   s)                                            r    _preprocesszGlmgaImageProcessor._preprocess   s   . 0EV^n/o,,!#%3%9%9%; 	;!E>*005MFE0<2!$7%
25HH#11#001- "&"!}M% "- "
 -;"5)#	;& ((>@TU/D^fv/w,,#% %3%9%9%; )	M!E>,:,@,@,E)NM00
NL*V_G ||q !++A.}}Q"55:!!RS&/00*gmmA.>AT.TUWXZ[]^  ))Wg$6A>)0r):&Jw11F+z9=J;VFFll#*$*$G ooaAq!Q1aCG%oo&(--
:ZGO />$U+'-vv&>%?*%LOE"S)	MV **BDXY(:NOyy!1q9o6"..Q_m
 	
r   r#   r$   c           	      0   |j                  d| j                        }|j                  d| j                        }|j                  d| j                        }||z  }t	        | j
                  ||||d   |d   | j
                        \  }}	||z  |	|z  }}
|
|z  S )a  
        A utility that returns number of image patches for a given image size.

        Args:
            height (`int`):
                Height of the input image.
            width (`int`):
                Width of the input image.
            images_kwargs (`dict`, *optional*)
                Any kwargs to override defaults of the image processor.
        Returns:
            `int`: Number of image patches per image.
        r   r   rH   r<   r=   )r"   r#   r$   r&   r'   r(   r%   )rR   r   r   rH   r8   r   )rI   r#   r$   images_kwargsr   r   rH   r&   ry   rz   r   r   s               r    get_number_of_image_patchesz/GlmgaImageProcessor.get_number_of_image_patches   s     #&&|T__E
"&&|T__E
  3j((4//O,N+ 44)
% (:5}
7Rr   rN   )*r   r   r   rS   r   BICUBICrT   rH   default_to_squarerU   rV   rW   r	   rX   r
   rY   do_convert_rgbr   r   r   r   valid_kwargsmodel_input_namesr   r   rG   r   r   r   rO   dictrQ   listboolr   floatr   strr   r   r   __classcell__)rJ   s   @r    r:   r:   X   s   I!))H&HDJNL!JINJJ,L')9:_(A!B _ 4 4v>W7X 4]i 4 4
t 
e
^$e
 e
 	e

 Le
 e
 e
 e
 DK'$.e
 4;&-e
 e
 !e
 e
 !e
 +e
  j(4/!e
$ 
%e
N# c r   r:   )r?      r;   i   )r/   ro   torchvision.transforms.v2r   tvFimage_processing_backendsr   image_processing_utilsr   image_transformsr   r   image_utilsr	   r
   r   r   r   processing_utilsr   r   utilsr   r   r   r   r8   r:   __all__r   r   r    <module>r      s   *   7 ; 2 E f f 4 /E , 0!!! ! 	!
 ! ! !H l, l l^ !
!r   