ó
    qyüiò&  ã                   ó  • S r SSK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Jr  SS	KJrJr  SS
KJrJrJr  \R4                  " \5      r " S S\SS9r    SS\S\S\S\S\S\S\4S jjr\ " S S\5      5       r S/r!g)z#Image processor class for GLM-4.1V.é    N)Ú
functionalé   )ÚTorchvisionBackend)ÚBatchFeature)Úgroup_images_by_shapeÚreorder_images)ÚOPENAI_CLIP_MEANÚOPENAI_CLIP_STDÚ
ImageInputÚPILImageResamplingÚSizeDict)ÚImagesKwargsÚUnpack)Ú
TensorTypeÚauto_docstringÚloggingc                   ó8   • \ rS rSr% Sr\\S'   \\S'   \\S'   Srg)ÚGlm4vImageProcessorKwargsé&   a6  
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_size© N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__ÚintÚ__annotations__Ú__static_attributes__r   ó    Úm/home/mande/repo/quber/.venv/lib/python3.13/site-packages/transformers/models/glm4v/image_processing_glm4v.pyr   r   &   s   ‡ ñð ƒOØÓØ†Or"   r   F)ÚtotalÚ
num_framesÚheightÚwidthÚtemporal_factorÚfactorÚ
min_pixelsÚ
max_pixelsc                 ó:  • X:  a  [        SU  SU 35      eX:  d  X$:  a*  [        XA-  XB-  5      n[        X-  5      n[        X'-  5      n[        X5      [        X5      -  S:”  a#  [        S[        X5      [        X5      -   35      e[	        X-  5      U-  n[	        X$-  5      U-  n	[	        X-  5      U-  n
X¨-  U	-  U:”  aq  [
        R                  " X-  U-  U-  5      n[        U[
        R                  " X-  U-  5      U-  5      n[        U[
        R                  " X+-  U-  5      U-  5      n	X‰4$ X¨-  U	-  U:  aZ  [
        R                  " XPU-  U-  -  5      n[
        R                  " X-  U-  5      U-  n[
        R                  " X+-  U-  5      U-  n	X‰4$ )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_resizer;   5   s©  € ð Ó#Ü˜2˜j˜\Ð)NÈÐN_Ð`ÓaÐaØƒ˜%›.Ü�F‘O V¡^Ó4ˆÜ�V‘^Ó$ˆÜ�E‘MÓ"ˆä
ˆ6ÓœC Ó.Ñ.°Ó4ÜØBÄ3ÀvÓCUÔX[Ð\bÓXjÑCjÐBkÐló
ð 	
ô �&‘/Ó" VÑ+€EÜ�%‘.Ó! FÑ*€EÜ�*Ñ.Ó/°/ÑA€Eà�}�uÑ˜zÓ)Ü�yŠy˜*Ñ-°Ñ5¸ÑCÓDˆÜ�FœDŸJšJ v¡}°vÑ'=Ó>ÀÑGÓHˆÜ�FœDŸJšJ u¡|°fÑ'<Ó=ÀÑFÓGˆð ˆ<Ðð 
‰˜Ñ	 Ó	+Ü�yŠy˜°FÑ':¸UÑ'BÑCÓDˆÜ—	’	˜&™-¨&Ñ0Ó1°FÑ:ˆÜ—	’	˜%™,¨Ñ/Ó0°6Ñ9ˆàˆ<Ðr"   c                   óh  ^ • \ rS rSrSr\R                  rSSS.rSr	Sr
SrSr\r\rSrSrS	rS	r\rS
S/rS\\   4U 4S jjr\S\S\\   S\4U 4S jj5       rS\4U 4S jjrS\ S   S\!S\"SSS\!S\#S\!S\#\ \#   -  S-  S\#\ \#   -  S-  S\$S\$S\$S \!S-  S!\%\&-  S-  S\4S" jr'S'S#\$S$\$4S% jjr(S&r)U =r*$ )(ÚGlm4vImageProcessoréY   Té 1  i€q³ )Úshortest_edgeÚlongest_edgeFgp?é   é   Úpixel_valuesÚimage_grid_thwÚkwargsc                 óÄ   >• [         TU ]  " S0 UD6  U R                  bB  U R                  R                  (       a  U R                  R                  (       d  [        S5      eg g )Nú:size must contain 'shortest_edge' and 'longest_edge' keys.r   )ÚsuperÚ__init__Úsizer@   rA   r.   )ÚselfrF   Ú	__class__s     €r#   rJ   ÚGlm4vImageProcessor.__init__k   sM   ø€ Ü‰ÒÑ"˜6Ò"Ø�9‰9Ñ Ø—9‘9×*×*°$·)±)×2H×2HÜ Ð!]Ó^Ð^ð 3Ið !r"   ÚimagesÚreturnc                 ó&   >• [         TU ]  " U40 UD6$ ©N)rI   Ú
preprocess)rL   rO   rF   rM   s      €r#   rS   ÚGlm4vImageProcessor.preprocessq   s   ø€ ä‰wÒ! &Ñ3¨FÑ3Ð3r"   c                 óº   >• [         TU ]  " S0 UD6nUR                  SU R                  5      nUR                  (       a  UR
                  (       d  [        S5      eU$ )zŠ
Update kwargs that need further processing before being validated
Can be overridden by subclasses to customize the processing of kwargs.
rK   rH   r   )rI   Ú_standardize_kwargsÚgetrK   r@   rA   r.   )rL   rF   rK   rM   s      €r#   rV   Ú'Glm4vImageProcessor._standardize_kwargsu   sM   ø€ ô
 ‘Ò,Ñ6¨vÑ6ˆØ�z‰z˜& $§)¡)Ó,ˆØ×!×!¨×):×):ÜÐYÓZÐZàˆr"   ztorch.TensorÚ	do_resizerK   Úresamplez7PILImageResampling | tvF.InterpolationMode | int | NoneÚ
do_rescaleÚrescale_factorÚdo_normalizeÚ
image_meanNÚ	image_stdr   r   r   Údisable_groupingÚreturn_tensorsc                 óŠ  • [        XS9u  nn0 nUR                  5        He  u  nnUR                  SS u  nnU(       aA  [        UUUUX¬-  UR                  UR
                  S9u  nnU R                  U[        UUS9US9nUUU'   Mg     [        UU5      n[        UUS9u  nn0 n0 nUR                  5        GH;  u  nnUR                  SS u  nnU R                  UXVXxU	5      nUR                  S:X  a  UR                  S5      nUR                  S   U-  S	:w  aH  USS2S
S24   R                  SUUR                  S   U-  -
  SSS5      n[        R                  " UU/SS9nUR                  SS u  nnn UU-  n!UU
-  UU
-  n#n"UR                  UU!UU U"U-  UU
U#U-  UU
5
      nUR!                  S	SSSSSSSSS5
      nUR#                  UU!U"-  U#-  U U-  U
-  U
-  5      n$U$UU'   U!U"U#//U-  UU'   GM>     [        UU5      n%[        UU5      n[        R                  " U%S	S9n&[        R$                  " U5      n'['        U&U'S.US9$ )z)
Preprocess an image or batch of images.
)r`   éþÿÿÿN)r%   r&   r'   r(   r)   r*   r+   )r&   r'   )rK   rZ   é   é   r   éÿÿÿÿ)Údimr   é   é   é   rC   é   é	   )rD   rE   )ÚdataÚtensor_type)r   ÚitemsÚshaper;   r@   rA   Úresizer   r   Úrescale_and_normalizeÚndimÚ	unsqueezeÚrepeatÚtorchÚcatÚviewÚpermuteÚreshapeÚtensorr   )(rL   rO   rY   rK   rZ   r[   r\   r]   r^   r_   r   r   r   r`   ra   rF   Úgrouped_imagesÚgrouped_images_indexÚresized_images_groupedrp   Ú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_imagesrD   rE   s(                                           r#   Ú_preprocessÚGlm4vImageProcessor._preprocess�   së  € ô, 0EÀVÑ/oÑ,ˆÐ,Ø!#ÐØ%3×%9Ñ%9Ö%;Ñ!ˆE�>Ø*×0Ñ0°°Ð5‰MˆF�EÞÜ0<Ø2Ø!ØØ$7Ø%Ñ2Ø#×1Ñ1Ø#×0Ñ0ñ1Ñ-� ð "&§¡Ø"Ü!¨¸}ÑMØ%ð "-ð "�ð
 -;Ð" 5Ó)ñ# &<ô& (Ð(>Ð@TÓUˆä/DÀ^ÐfvÑ/wÑ,ˆÐ,Ø#%Ð Øˆà%3×%9Ñ%9×%;Ñ!ˆE�>Ø,:×,@Ñ,@ÀÀÐ,EÑ)ˆN˜Mà×0Ñ0Ø 
¸LÐV_óˆGð �|‰|˜qÓ Ø!×+Ñ+¨AÓ.�à�}‰}˜QÑÐ"5Ñ5¸Ó:Ø!¢! R¡S &™/×0Ñ0ØÐ*¨g¯m©m¸AÑ.>ÐATÑ.TÑUÐWXÐZ[Ð]^ó�ô  Ÿ)š) W¨gÐ$6¸AÑ>�à)0¯©°r¸Ð):Ñ&ˆJ˜˜wØÐ1Ñ1ˆFØ+¨zÑ9¸=ÈJÑ;V�FˆFà—l‘lØØØ#ØØ˜*Ñ$ØØØ˜*Ñ$ØØóˆGð —o‘o a¨¨A¨q°!°Q¸¸1¸aÀÓCˆGà%Ÿo™oØØ˜‘ &Ñ(ØÐ-Ñ-°
Ñ:¸ZÑGóˆOð />Ð$ UÑ+Ø'-¨v°vÐ&>Ð%?À*Ñ%LˆO˜EÔ"ñS &<ôV *Ð*BÐDXÓYÐÜ(¨Ð:NÓOˆä—y’yÐ!1°qÑ9ˆÜŸš oÓ6ˆäØ".À.ÑQÐ_mñ
ð 	
r"   r&   r'   c           
      ó  • UR                  SU R                  5      nUR                  SU R                  5      nUR                  SU R                  5      nXE-  n[	        U R
                  UUUUS   US   U R
                  S9u  p‰X„-  X”-  pºX«-  $ )aY  
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   rK   r@   rA   )r%   r&   r'   r)   r*   r+   r(   )rW   r   r   rK   r;   r   )rL   r&   r'   Úimages_kwargsr   r   rK   r)   r€   r�   r‹   rŒ   s               r#   Úget_number_of_image_patchesÚ/Glm4vImageProcessor.get_number_of_image_patchesç   s�   € ð #×&Ñ& |°T·_±_ÓEˆ
Ø"×&Ñ& |°T·_±_ÓEˆ
Ø× Ñ  ¨¯©Ó3ˆàÑ(ˆÜ(4Ø×/Ñ/ØØØØ˜OÑ,Ø˜NÑ+Ø ×4Ñ4ñ)
Ñ%ˆð (Ñ5°}Ñ7R�Ø‰Ðr"   r   rR   )+r   r   r   r   rY   r   ÚBICUBICrZ   rK   Údefault_to_squarer[   r\   r]   r	   r^   r
   r_   Údo_convert_rgbr   r   r   r   Úvalid_kwargsÚmodel_input_namesr   rJ   r   r   r   rS   ÚdictrV   ÚlistÚboolr   Úfloatr   Ústrr   r�   r“   r!   Ú__classcell__)rM   s   @r#   r=   r=   Y   s¤  ø† à€IØ!×)Ñ)€HØ&¸ÑH€DØÐØ€JØ€NØ€LØ!€JØ€IØ€NØ€JØÐØ€JØ,€LØ'Ð)9Ð:Ðð_ Ð(AÑ!B÷ _ð ð4 ð 4°vÐ>WÑ7Xð 4Ð]iö 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"   r=   )rC   é   r?   i  “ )"r   r2   rv   Ú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   Ú
get_loggerr   Úloggerr   r   r;   r=   Ú__all__r   r"   r#   Ú<module>r¬      sÑ   ðñ *ã ã Ý 7å ;Ý 2ß E÷õ ÷ 5ß 8Ñ 8ð 
×	Ò	˜HÓ	%€ô °Eò ð& ØØØ0ñ!Øð!àð!ð ð!ð ð	!ð
 ð!ð ð!ð õ!ðH ôjÐ,ó jó ðjðZ !Ð
!�r"   