ó
    ‡Ž¡jÜ3  ã                   óø   • S SK r S SKrS SKrS SKJr  SSKJr  SSK	J
r
JrJrJr  SSKJrJr  SSKJrJr  SSKJr  SS	KJrJrJ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)é    N)Ú
functionalé   )ÚBatchFeature)ÚOPENAI_CLIP_MEANÚOPENAI_CLIP_STDÚPILImageResamplingÚSizeDict)ÚUnpackÚVideosKwargs)Ú
TensorTypeÚauto_docstring)ÚBaseVideoProcessor)ÚVideoMetadataÚgroup_videos_by_shapeÚreorder_videosc                   óV   • \ rS rSr% Sr\\\4   \S'   \\S'   \\S'   \\S'   \\S'   Sr	g	)
ÚGlm46VVideoProcessorInitKwargsé#   a  
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.
max_duration (`int`, *optional*, defaults to 300):
    The maximum duration of a video that will be sampled.
max_image_size (`dict`, *optional*, defaults to `28 * 28 * 2 * 55790`):
    The maximum pixels a video can be resized to.
Úmax_image_sizeÚ
patch_sizeÚtemporal_patch_sizeÚ
merge_sizeÚmax_duration© N)
Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__ÚdictÚstrÚintÚ__annotations__Ú__static_attributes__r   ó    ÚÀC:\Users\johnn\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\transformers/models/glm46v/video_processing_glm46v.pyr   r   #   s-   ‡ ñð ˜˜c˜‘NÓ"ØƒOØÓØƒOØÖr%   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>   8   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                   óì  ^ • \ rS rSr\R
                  rSSS.rSS0r\	r
\rSrSrSrSrSrSrSrS	rSr\rS
rSrSS/rS\\   4U 4S jjr S+S\S\\-  S-  4S jjr SSS\!SSS\S\SS4U 4S jjr"SSS\S\S\S\#S\\4   4
S jr$SSS\R
                  SS SSSSSSS4S\%\&RN                     S!\(S"\(S\!S-  SSS#\(S$\S%\(S&\\%\   -  S-  S'\\%\   -  S-  S\S-  S\S-  S\S-  S(\)\*-  S-  4S) jjr+S*r,U =r-$ ),ÚGlm46VVideoProcessoré\   é 1  i ÆÍ)Úshortest_edgeÚlongest_edgerD   Té   é   é,  é   Úpixel_values_videosÚvideo_grid_thwÚkwargsc                 ó&   >• [         TU ]  " S0 UD6  g )Nr   )ÚsuperÚ__init__)ÚselfrK   Ú	__class__s     €r&   rN   ÚGlm46VVideoProcessor.__init__r   s   ø€ Ü‰ÒÑ"˜6Ó"r%   NÚmetadataÚfpsc                 ó  • Ub  [        USS5      c  [        S5      eUR                  nUS-
  nUR                  =(       d    [	        XQR
                  -  5      S-   nSSSS.nSnS	n	[        Xi5      n
U
S
::  a  US
   nOU
S::  a  US   nOUS	   n[        X«-  U R                  -  5      n[        XÈ5      nSUR
                  -  n[        U5       Vs/ s H  oîU-  PM	     nn[        U5      nXL:  a-  [        R                  " SUS-
  U[        S9R                  5       nOQ/ nSnSU R                  U-  -  n[        U5       H,  nUU   U:¼  d  M  UU-  nUR                  U5        UU:¼  d  M,    O   [        U5      U:  aU  [        U5      S:X  a  S[        US-
  S5      nnO
US   US   nn[        R                  " UUU[        S9R                  5       nO;[        U5      U:”  a,  [        R                  " SUS-
  U[        S9R                  5       n[!        5       / nnU H-  nUU;  d  M  UR#                  U5        UR                  U5        M/     [        U5      S-  (       a  UR                  US   5        [        R$                  " U[        S9$ s  snf )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.
NrS   zµAsked to sample frames per second but no video metadata was provided which is required when sampling in Glm46V. Please pass in `VideoMetadata` object or set `do_sample_frames=False`é   r   g      à?)é   rG   é`	  i€  rW   rV   rG   r   )Údtypeéÿÿÿÿ)Úgetattrr1   Útotal_num_framesÚdurationr4   rS   r3   r"   r   ÚrangeÚnpÚlinspaceÚtolistÚappendÚlenr2   ÚsetÚaddÚarray)rO   rR   rS   rK   Útotal_framesÚmax_frame_idxr\   ÚDYNAMIC_FPS_THRESÚMAX_FRAME_COUNT_DYNAMICÚMAX_DURATIONÚeffective_durationÚ
target_fpsÚ	extract_tÚduration_per_frameÚiÚ
timestampsÚ
max_secondÚframe_indicesÚcurrent_secondÚinv_fpsÚframe_indexÚstartÚendÚseenÚuniqÚidxs                             r&   Úsample_framesÚ"Glm46VVideoProcessor.sample_framesu   sŽ  € ð  Ñœw x°¸Ó=ÑEÜðXóð ð
  ×0Ñ0ˆØ$ qÑ(ˆØ×$Ñ$×O¬¨m¿l¹lÑ.JÓ(KÈaÑ(Oˆà!"¨°#Ñ6ÐØ"%ÐØˆÜ  Ó8ÐØ Ó#Ø*¨2Ñ.‰JØ 3Ó&Ø*¨3Ñ/‰Jà*¨4Ñ0ˆJÜÐ*Ñ7¸$×:RÑ:RÑRÓSˆ	Ü˜	Ó;ˆ	à §¡Ñ-ÐÜ6;¸LÔ6IÓJÒ6I°Ð,Ô,Ñ6Iˆ
ÐJÜ˜“]ˆ
àÓ#ÜŸKšK¨¨<¸!Ñ+;¸YÌcÑR×YÑYÓ[‰MàˆMØˆNØ˜4×3Ñ3°jÑ@ÑAˆGÜ$ \Ö2�Ø˜kÑ*¨nÕ<Ø" gÑ-�NØ!×(Ñ(¨Ô5Ø%¨Õ3Ùñ  3ô ˆ}Ó 	Ó)Ü�=Ó! QÓ&Ø¤ L°1Ñ$4°aÓ 8�s��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Ñ(Ð(ùòE Ks   ÃJ
Úvideosztorch.TensorÚsizeÚresamplez7PILImageResampling | tvF.InterpolationMode | int | Noner,   r+   Úreturnc           
      ó  >• UR                   (       a  UR                  (       d  [        SU S35      eUR                  SS u  px[	        UUUR                  S   UUUR                   UR                  S9u  pš[
        TU ]  U[        XšS9US9$ )	z5Resize dynamically based on input video aspect ratio.zI`size` dict must contain 'shortest_edge' and 'longest_edge' keys but got Ú.éþÿÿÿNrU   )r)   r*   r(   r,   r+   r-   r.   )r)   r*   )Úimager~   r   )rC   rD   r1   Úshaper>   rM   Úresizer	   )rO   r}   r~   r   r,   r+   rK   r)   r*   Úresized_heightÚresized_widthrP   s              €r&   r†   ÚGlm46VVideoProcessor.resizeÁ   sœ   ø€ ð ×!×!¨×):×):ÜÐhÐimÐhnÐnoÐpÓqÐqàŸ™ R SÐ)‰ˆÜ(4ØØØ—|‘| A‘ØØ+Ø×)Ñ)Ø×(Ñ(ñ)
Ñ%ˆô ‰w‰~ØÜ ÑEØð ð 
ð 	
r%   r   r   r   c                 ó|  • UR                   u  pVpxn	U* U-  =n
(       a8  USS2SS24   R                  SU
SSS5      n[        R                  " X4SS9nXj-  nXd-  nX‚-  X’-  píUR	                  UUUUXÓ-  UUXã-  UU5
      nUR                  SSSSSS	S
SSS5
      nUR                  UXÍ-  U-  Xt-  U-  U-  5      nUXÍU4$ )ztPatchifies each video into flat layout of shape (`seq_len`, `patch_dim`) so we can concat dynamically shaped pixels.NrY   rU   ©Údimr   é   é   é   é   r   rF   é   é	   )r…   ÚexpandÚtorchÚcatÚviewÚpermuteÚreshape)rO   r}   r   r   r   Ú
batch_sizer(   Úchannelr‡   rˆ   ÚpadÚrepeatsÚgrid_tÚgrid_hÚgrid_wÚpatchesÚflatten_patchess                    r&   ÚpatchifyÚGlm46VVideoProcessor.patchifyÞ   s  € ð JPÏÉÑFˆ
 ¸ð �+Ð 3Ñ3Ð3ˆ3Õ3ØšQ ¡˜V‘n×+Ñ+¨B°°R¸¸RÓ@ˆGÜ—Y’Y Ð0°aÑ8ˆFØÑˆJàÑ2ˆØ'Ñ5°}Ñ7R�à—+‘+ØØØØØÑ ØØØÑ ØØó
ˆð —/‘/ ! Q¨¨1¨a°°A°q¸!¸QÓ?ˆØ!Ÿ/™/ØØ‰O˜fÑ$ØÑ)¨JÑ6¸ÑCó
ˆð  °Ð6Ð6r%   gp?Údo_convert_rgbÚ	do_resizeÚ
do_rescaleÚrescale_factorÚdo_normalizeÚ
image_meanÚ	image_stdÚreturn_tensorsc           	      óf  • [        U5      u  nn0 nUR                  5        H?  u  nnU(       a  U R                  U5      nU(       a  U R                  UUUX½-  US9nUUU'   MA     [	        UU5      n[        U5      u  nn0 n0 nUR                  5        HK  u  nnU R                  UXgX‰U
5      nU R                  UUUUS9u  nnnnUUU'   UUU//[        U5      -  UU'   MM     [	        UU5      n[	        UU5      n[        R                  " USS9n[        R                  " U5      nUUS.n[        UUS9$ )N)r}   r~   r   r,   r+   )r   r   r   r   r‹   )rI   rJ   )ÚdataÚtensor_type)r   ÚitemsÚconvert_to_rgbr†   r   Úrescale_and_normalizer¢   rb   r”   r•   Útensorr   ) rO   r}   r¤   r¥   r~   r   r¦   r§   r¨   r©   rª   r   r   r   r«   rK   Úgrouped_videosÚgrouped_videos_indexÚresized_videos_groupedr…   Ústacked_videosÚresized_videosÚprocessed_videos_groupedÚprocessed_gridsr    r�   rž   rŸ   Úprocessed_videosrI   rJ   r­   s                                    r&   Ú_preprocessÚ Glm46VVideoProcessor._preprocess  sŠ  € ô$ 0EÀVÓ/LÑ,ˆÐ,Ø!#Ðà%3×%9Ñ%9Ö%;Ñ!ˆE�>ÞØ!%×!4Ñ!4°^Ó!D�ÞØ!%§¡Ø)ØØ%Ø%Ñ2Ø$7ð "-ð "�ð -;Ð" 5Ó)ñ &<ô (Ð(>Ð@TÓUˆô 0EÀ^Ó/TÑ,ˆÐ,Ø#%Ð ØˆØ%3×%9Ñ%9Ö%;Ñ!ˆE�>à!×7Ñ7Ø 
¸LÐV_óˆNð /3¯m©mØØ%Ø%Ø$7ð	 /<ð /Ñ+ˆG�V˜V Vð /6Ð$ UÑ+Ø'-¨v°vÐ&>Ð%?Ä#ÀnÓBUÑ%UˆO˜EÓ"ñ &<ô *Ð*BÐDXÓYÐÜ(¨Ð:NÓOˆÜ#ŸišiÐ(8¸aÑ@ÐÜŸš oÓ6ˆà#6Ø,ñ
ˆô
  °>ÑBÐBr%   r   )N).r   r   r   r   r   ÚBICUBICr   r~   r   r   r©   r   rª   r¥   r¦   r¨   r¤   Údo_sample_framesr   r   r   r   r   Úvalid_kwargsr(   rS   Úmodel_input_namesr
   rN   r   r"   Úfloatr{   r	   r†   Útupler¢   Úlistr”   ÚTensorÚboolr!   r   r»   r$   Ú__classcell__)rP   s   @r&   r@   r@   \   sX  ø† à!×)Ñ)€HØ&Ð8KÑL€DØ$Ð&9Ð:€NØ!€JØ€IØ€IØ€JØ€LØ€NØÐØ€JØÐØ€LØ€JØ1€LØ€JØ
€Cà.Ð0@ÐAÐð# Ð(FÑ!G÷ #ð #'ñJ)àðJ)ð �5‰[˜4ÑõJ)ðX
àð
ð ð
ð Lð	
ð
 ð
ð ð
ð 
÷
ð:&7àð&7ð ð&7ð ð	&7ð
 !ð&7ð 
ˆ~˜s CÐ'Ñ	(ô&7ðV  $ØØ $ØN`×NhÑNhØØ )Ø!Ø15Ø04Ø!%Ø*.Ø!%Ø26ñ@Cà�U—\‘\Ñ"ð@Cð ð@Cð ð	@Cð
 ˜‰oð@Cð Lð@Cð ð@Cð ð@Cð ð@Cð ˜D ™KÑ'¨$Ñ.ð@Cð ˜4 ™;Ñ&¨Ñ-ð@Cð ˜$‘Jð@Cð ! 4™Zð@Cð ˜$‘Jð@Cð ˜jÑ(¨4Ñ/÷@Có @Cr%   r@   )rF   é   rB   i  “ )r5   Únumpyr^   r”   Útorchvision.transforms.v2r   ÚtvFÚimage_processing_utilsr   Úimage_utilsr   r   r   r	   Úprocessing_utilsr
   r   Úutilsr   r   Úvideo_processing_utilsr   Úvideo_utilsr   r   r   r   r"   r>   r@   Ú__all__r   r%   r&   Ú<module>rÒ      s¼   ðó* ã Û Ý 7å 2ß ZÓ Zß 4ß /Ý 8ß OÑ Oô \¸ò ð2 ØØØ0ñ!Øð!àð!ð ð!ð ð	!ð
 ð!ð ð!ð õ!ðH ôiCÐ-ó iCó ðiCðX "Ð
"�r%   