Ë
    ÛÓ^j6,  ã                   óô   — d dl Z d dlZd dlZd dlmZ ddlmZ ddl	m
Z
mZmZmZmZmZ ddlmZmZ ddlmZmZ ddlmZmZ dd	lmZmZmZ d
dlmZ  G d„ ded¬«      Z eded«       G d„ de«      «       Z dgZ!y)é    N)Ú
functionalé   )ÚBatchFeature)ÚOPENAI_CLIP_MEANÚOPENAI_CLIP_STDÚChannelDimensionÚPILImageResamplingÚSizeDictÚget_image_size)ÚUnpackÚVideosKwargs)Ú
TensorTypeÚadd_start_docstrings)ÚBASE_VIDEO_PROCESSOR_DOCSTRINGÚBaseVideoProcessor)ÚVideoMetadataÚgroup_videos_by_shapeÚreorder_videosé   )Úsmart_resizec                   óT   — e Zd ZU eeef   ed<   eed<   eed<   eed<   eed<   eed<   y)ÚGlmgaVideoProcessorInitKwargsÚmax_image_sizeÚ
patch_sizeÚtemporal_patch_sizeÚ
merge_sizeÚpatch_expand_factorÚ
max_framesN)Ú__name__Ú
__module__Ú__qualname__ÚdictÚstrÚintÚ__annotations__© ó    ú{/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/transformers/models/glmga/video_processing_glmga.pyr   r   +   s+   … Ø˜˜c˜‘NÓ"ØƒOØÓØƒOØÓØ„Or'   r   F)ÚtotalzfConstructs a fast GLM-4V image processor that dynamically resizes videos based on the original videos.aj  
        patch_size (`int`, *optional*, defaults to 14):
            The spacial 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.
    c                    óª  ‡ — e Zd Zej                  ZdddœZddiZeZ	e
ZdZdZdZdZdZdZdZdZdZeZd	ZdZd
dgZdZdZdee   fˆ fd„Zdefˆ fd„Z	 d(de de!e"z  dz  fd„Z#dddej                  ddddddddddfde$e%jL                     de'de'de(dz  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z  d#e!dz  d$e!dz  d%e!dz  d&e)e*z  dz  fd'„Z+ˆ xZ,S ))ÚGlmgaVideoProcessori 1  iÀÑ6)Úshortest_edgeÚlongest_edger-   Té   é   i,  é   Úpixel_values_videosÚvideo_grid_thwr   i€  Úkwargsc                 ó$   •— t        ‰| �  di |¤Ž y )Nr&   )ÚsuperÚ__init__)Úselfr3   Ú	__class__s     €r(   r6   zGlmgaVideoProcessor.__init__W   s   ø€ Ü‰ÑÑ"˜6Ó"r'   Úreturnc                 ó¤   •— 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.
        Úsizez:size must contain 'shortest_edge' and 'longest_edge' keys.r&   )r5   Ú_standardize_kwargsÚgetr;   r,   r-   Ú
ValueError)r7   r3   r;   r8   s      €r(   r<   z'GlmgaVideoProcessor._standardize_kwargsZ   sM   ø€ ô
 ‘Ñ,Ñ6¨vÑ6ˆØ�z‰z˜& $§)¡)Ó,ˆØ×!Ò!¨×):Ò):ÜÐYÓZÐZØˆr'   NÚmetadataÚfpsc                 óŽ  — |�t        |dd«      €t        d«      ‚|j                  }|dz
  }|j                  xs t	        ||j
                  z  «      dz   }|�|n| j
                  }t        ||z  «      }t        || j                  «      }d|j
                  z  }	t        |«      D �
cg c]  }
|
|	z  ‘Œ	 }}
||k  r2t        |«      D �cg c]  }t        j                  ||z  |z  «      ‘Œ }}nBg }d}d|z  }t        |«      D ]+  }||   |k\  sŒ||z  }|j                  |«       |||z
  k\  sŒ+ n t        |«      |k  rVt        |«      dk(  rdt        |dz
  d«      }}n
|d   |d   }}t        j                   |||t        ¬«      j#                  «       }n<t        |«      |kD  r.t        j                   d|dz
  |t        ¬«      j#                  «       }t%        «       g }}|D ])  }||vsŒ|j'                  |«       |j                  |«       Œ+ t        |«      dz  r|j                  |d   «       t        j(                  |«      S c c}
w c c}w )a‡  
        Args:
            metadata (`VideoMetadata`):
                Metadata of the video containing information about total duration, fps and total number of frames.
            fps (`int` or `float`, *optional*):
                Target frames to sample per second. Defaults to `self.fps`.
        Returns:
            np.ndarray:
                Indices to sample video frames.
        Nr@   z´Asked to sample frames per second but no video metadata was provided which is required when sampling in Glmga. Please pass in `VideoMetadata` object or set `do_sample_frames=False`r   r   éÿÿÿÿ)Údtype)Úgetattrr>   Útotal_num_framesÚdurationÚroundr@   r$   Úminr   ÚrangeÚmathÚfloorÚappendÚlenÚmaxÚnpÚlinspaceÚtolistÚsetÚaddÚarray)r7   r?   r@   r3   Útotal_framesÚmax_frame_idxrF   Ú
target_fpsÚ	extract_tÚduration_per_frameÚiÚ
timestampsÚ_iÚframe_indicesÚcurrent_secondÚinv_fpsÚframe_indexÚstartÚendÚseenÚuniqÚidxs                         r(   Úsample_framesz!GlmgaVideoProcessor.sample_framese   sP  € ð  Ðœw x°¸Ó=ÐEÜðXóð ð
  ×0Ñ0ˆØ$ qÑ(ˆØ×$Ñ$ÒO¬¨m¸h¿l¹lÑ.JÓ(KÈaÑ(Oˆà˜O‘S°·±ˆ
ä˜ :Ñ-Ó.ˆ	Ü˜	 4§?¡?Ó3ˆ	à §¡Ñ-ÐÜ6;¸LÓ6IÖJ°�aÐ,Ó,ÐJˆ
ÐJà˜)Ò#ÜQVÐW`ÓQaÖbÈ2œTŸZ™Z¨¨\Ñ(9¸IÑ(EÕFÐbˆMÑbàˆMØˆNØ˜*‘nˆGÜ$ \Ó2ò �Ø˜kÑ*¨nÓ<Ø" gÑ-�NØ!×(Ñ(¨Ô5Ø%¨°GÑ);Ó;Ùðô ˆ}Ó 	Ò)Ü�=Ó! QÒ&Ø¤ L°1Ñ$4°aÓ 8�s‘à*¨1Ñ-¨}¸RÑ/@�s�ÜŸK™K¨¨s°IÄSÔI×PÑPÓR‰MÜ�Ó )Ò+ÜŸK™K¨¨<¸!Ñ+;¸YÌcÔR×YÑYÓ[ˆMä“U˜BˆdˆØ ò 	!ˆCØ˜$ŠØ—‘˜”Ø—‘˜CÕ ð	!ô
 ˆt‹9�qŠ=Ø�K‰K˜˜R™Ô!ä�x‰x˜‹~ÐùòC Kùò cs   Â%H=Ã"Igp?ÚvideosÚdo_convert_rgbÚ	do_resizer;   Úresamplez7PILImageResampling | tvF.InterpolationMode | int | NoneÚ
do_rescaleÚrescale_factorÚdo_normalizeÚ
image_meanÚ	image_stdr   r   r   r   Úreturn_tensorsc                 óô  — t        |«      \  }}i }|j                  «       D ]±  \  }}|r| j                  |«      }|j                  \  }}}}}|||}}}|rzt	        ||||||z  |z  |j
                  |j                  ¬«      \  }}|j                  ||z  |||«      }| j                  |t        ||¬«      |¬«      }|j                  |||||«      }|||<   Œ³ t        ||«      } t        | «      \  }}i }!i }"|j                  «       D �]  \  }}t        |d   t        j                  ¬«      \  }}| j                  |||||	|
«      }|}#|#j                  d   |z  dk7  r:|#d d …dd …f   j                  d|d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(                  |"«      }-|,|-dœ}.t+        |.|¬«      S )N)Ú
num_framesÚheightÚwidthÚtemporal_factorÚfactorÚ
min_pixelsÚ
max_pixels)rs   rt   )r;   rj   r   )Úchannel_dimr   rB   )Údimr   é   é   é   é   r/   é   é	   )r1   r2   )ÚdataÚtensor_type)r   ÚitemsÚconvert_to_rgbÚshaper   r,   r-   ÚviewÚresizer
   r   r   r   ÚFIRSTÚrescale_and_normalizeÚrepeatÚtorchÚcatÚpermuteÚreshapeÚtensorr   )/r7   rg   rh   ri   r;   rj   rk   rl   rm   rn   ro   r   r   r   r   rp   r3   Úgrouped_videosÚgrouped_videos_indexÚresized_videos_groupedr…   Ústacked_videosÚBÚTÚCÚHÚWrr   rs   rt   Úresized_heightÚresized_widthÚresized_videosÚprocessed_videos_groupedÚprocessed_gridsÚpatchesÚrepeatsÚ
batch_sizeÚgrid_tÚchannelÚgrid_hÚgrid_wÚflatten_patchesÚprocessed_videosr1   r2   r�   s/                                                  r(   Ú_preprocesszGlmgaVideoProcessor._preprocess¨   s7  € ô& 0EÀVÓ/LÑ,ˆÐ,Ø!#Ðà%3×%9Ñ%9Ó%;ò 	;Ñ!ˆE�>ÙØ!%×!4Ñ!4°^Ó!D�Ø*×0Ñ0‰MˆAˆq�!�Q˜Ø()¨1¨a ˜ˆJÙÜ0<Ø)Ø!ØØ$7Ø%¨
Ñ2Ð5HÑHØ#×1Ñ1Ø#×0Ñ0ô1Ñ-� ð "0×!4Ñ!4°Q¸±U¸A¸qÀ!Ó!D�Ø!%§¡Ø"Ü!¨¸}ÔMØ%ð "-ó "�ð
 "0×!4Ñ!4°Q¸¸1¸nÈmÓ!\�Ø,:Ð" 5Ò)ð-	;ô. (Ð(>Ð@TÓUˆô 0EÀ^Ó/TÑ,ˆÐ,Ø#%Ð ØˆØ%3×%9Ñ%9Ó%;ó %	MÑ!ˆE�>Ü,:¸>È!Ñ;LÔZj×ZpÑZpÔ,qÑ)ˆN˜Mð "×7Ñ7Ø 
¨N¸LÈ*ÐV_óˆNð %ˆGð �}‰}˜QÑÐ"5Ñ5¸Ò:Ø!¢! R¡S &™/×0Ñ0°Ð4GÈ!Ñ4KÈQÐPQÐSTÓU�ÜŸ)™) W¨gÐ$6¸AÔ>�Ø*1¯-©-¸¸Ð*;Ñ'ˆJ˜ ØÐ2Ñ2ˆ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Ó"ðK%	MôN *Ð*BÐDXÓYÐÜ(¨Ð:NÓOˆÜ#Ÿi™iÐ(8¸aÔ@ÐÜŸ™ oÓ6ˆà#6Ø,ñ
ˆô
  °>ÔBÐBr'   )N)-r   r    r!   r	   ÚBICUBICrj   r;   r   r   rn   r   ro   ri   rk   rm   rh   Údo_sample_framesr   r   Úmax_durationr   r   Úvalid_kwargsrr   r@   Úmodel_input_namesr   r   r   r6   r"   r<   r   r$   Úfloatrf   Úlistr‹   ÚTensorÚboolr
   r#   r   r§   Ú__classcell__)r8   s   @r(   r+   r+   4   sû  ø„ ð "×)Ñ)€HØ&Ð8KÑL€DØ$Ð&9Ð:€NØ!€JØ€IØ€IØ€JØ€LØ€NØÐØ€JØÐØ€LØ€JØ0€LØ€JØ
€Cà.Ð0@ÐAÐØÐØ€Jð# Ð(EÑ!Fõ #ð	¨tõ 	ð #'ñAàðAð �5‰[˜4ÑóAðL  $ØØ $ØN`×NhÑNhØØ )Ø!Ø15Ø04Ø*.Ø!%Ø*.Ø!%Ø26ñ!dCà�U—\‘\Ñ"ðdCð ðdCð ð	dCð
 ˜‰oðdCð LðdCð ðdCð ðdCð ðdCð ˜D ™KÑ'¨$Ñ.ðdCð ˜4 ™;Ñ&¨Ñ-ðdCð ! 4™ZðdCð ˜$‘JðdCð ! 4™ZðdCð ˜$‘JðdCð  ˜jÑ(¨4Ñ/÷!dCr'   r+   )"rJ   ÚnumpyrO   r‹   Útorchvision.transforms.v2r   ÚtvFÚimage_processing_utilsr   Úimage_utilsr   r   r   r	   r
   r   Úprocessing_utilsr   r   Úutilsr   r   Úvideo_processing_utilsr   r   Úvideo_utilsr   r   r   Úimage_processing_glmgar   r   r+   Ú__all__r&   r'   r(   ú<module>r½      s   ðó* ã Û Ý 7å 2÷÷ ÷ 5ß 5ß Xß OÑ OÝ 0ô L¸õ ñ ØlØ"ðóôLCÐ,ó LCóðLCð^ !Ð
!�r'   