
    ^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                   0    e Zd ZU dZeed<   eed<   eed<   y)Glm46VImageProcessorKwargsaR  
    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_sizetemporal_patch_size
merge_sizeN)__name__
__module____qualname____doc__int__annotations__     }/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/transformers/models/glm46v/image_processing_glm46v.pyr   r   #   s     OOr   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_resizer7   2   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                   N    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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z  d e$e%z  dz  defd!Z&d%d"e#d#e#fd$Z' xZ(S )&Glm46VImageProcessorT 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*   )selfrA   	__class__s     r   rE   zGlm46VImageProcessor.__init__h   sM    "6"99 99**$))2H2H !]^^ 3I !r   imagesreturnc                 $    t        |   |fi |S N)rD   
preprocess)rG   rI   rA   rH   s      r   rM   zGlm46VImageProcessor.preprocessn   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.
        rF   rC   r   )rD   _standardize_kwargsgetrF   r;   r<   r*   )rG   rA   rF   rH   s      r   rO   z(Glm46VImageProcessor._standardize_kwargsr   sM    
 ,6v6zz&$)),!!):):YZZr   ztorch.Tensor	do_resizerF   resamplez7PILImageResampling | tvF.InterpolationMode | int | None
do_rescalerescale_factordo_normalize
image_meanN	image_stdr   r   r   disable_groupingreturn_tensorsc                    t        ||      \  }}i }|j                         D ]i  \  }}|j                  dd \  }}|rKt        |||||
|z  |j                  |j
                        \  }}| j                  |t        ||      |      }|||<   k 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.
        )rX   N)r!   r"   r#   r$   r%   r&   r'   )r"   r#   )rF   rR         r   )dimr            r>      	   )r?   r@   )datatensor_type)r   itemsshaper7   r;   r<   resizer   r   rescale_and_normalizendim	unsqueezerepeattorchcatviewpermutereshapetensorr   )(rG   rI   rQ   rF   rR   rS   rT   rU   rV   rW   r   r   r   rX   rY   rA   grouped_imagesgrouped_images_indexresized_images_groupedrh   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?   r@   s(                                           r   _preprocessz Glm46VImageProcessor._preprocess~   s    , 0EV^n/o,,!#%3%9%9%; 	;!E>*005MFE0<2!$7%
2#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   rF   r;   r<   )r!   r"   r#   r%   r&   r'   r$   )rP   r   r   rF   r7   r   )rG   r"   r#   images_kwargsr   r   rF   r%   rx   ry   r   r   s               r   get_number_of_image_patchesz0Glm46VImageProcessor.get_number_of_image_patches   s     #&&|T__E
"&&|T__E
  3j((4//O,N+ 44)
% (:5}
7Rr   rL   ))r   r   r   rQ   r   BICUBICrR   rF   default_to_squarerS   rT   rU   r	   rV   r
   rW   do_convert_rgbr   r   r   r   valid_kwargsmodel_input_namesr   rE   r   r   r   rM   dictrO   listboolr   floatr   strr   r   r   __classcell__)rH   s   @r   r9   r9   V   s   I!))H&HDJNL!JINJJ-L')9:_(B!C _ 4 4v>X7Y 4^j 4 4
t 
d
^$d
 d
 	d

 Ld
 d
 d
 d
 DK'$.d
 4;&-d
 d
 !d
 d
 +d
 j(4/d
" 
#d
L# c r   r9   )r>      r:   i   )r.   rn   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   r7   r9   __all__r   r   r   <module>r      s   ,   7 ; 2 E f f 4 /U & 0!!! ! 	!
 ! ! !H j- j jZ "
"r   