Ë
    ÛÓ^jb-  ã                   óì   — 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                   óJ   — e Zd ZU eeef   ed<   eed<   eed<   eed<   eed<   y)ÚGlm46VVideoProcessorInitKwargsÚmax_image_sizeÚ
patch_sizeÚtemporal_patch_sizeÚ
merge_sizeÚmax_durationN)Ú__name__Ú
__module__Ú__qualname__ÚdictÚstrÚintÚ__annotations__© ó    ú}/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/transformers/models/glm46v/video_processing_glm46v.pyr   r   *   s&   … Ø˜˜c˜‘NÓ"ØƒOØÓØƒOØÔr&   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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fde"e#jH                     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'e(z  dz  fd$„Z)ˆ xZ*S )&ÚGlm46VVideoProcessori 1  i ÆÍ)Úshortest_edgeÚlongest_edger,   Té   é   é,  é   Úpixel_values_videosÚvideo_grid_thwÚkwargsc                 ó$   •— t        ‰| �  di |¤Ž y )Nr%   )ÚsuperÚ__init__)Úselfr3   Ú	__class__s     €r'   r6   zGlm46VVideoProcessor.__init__S   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(Glm46VVideoProcessor._standardize_kwargsV   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   }ddddœ}d}d	}	t        ||	«      }
|
d
k  r|d
   }n|
dk  r|d   }n|d	   }t        |
|z  | j                  z  «      }t        ||«      }d|j
                  z  }t        |«      D �cg c]  }||z  ‘Œ	 }}t        |«      }||k  r/t        j                  d|dz
  |t        ¬«      j                  «       }nLg }d}d| j                  |z  z  }t        |«      D ](  }||   |k\  sŒ||z  }|j                  |«       ||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 )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 Glm46V. Please pass in `VideoMetadata` object or set `do_sample_frames=False`r   r   g      à?)é   r/   é`	  i€  rC   rB   r/   r   )Údtypeéÿÿÿÿ)Úgetattrr>   Útotal_num_framesÚdurationÚroundr@   Úminr#   r   ÚrangeÚnpÚlinspaceÚtolistÚappendÚlenÚmaxÚsetÚaddÚarray)r7   r?   r@   r3   Útotal_framesÚmax_frame_idxrH   Ú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_framesz"Glm46VVideoProcessor.sample_framesa   s�  € ð  Ðœw x°¸Ó=ÐEÜðXóð ð
  ×0Ñ0ˆØ$ qÑ(ˆØ×$Ñ$ÒO¬¨m¸h¿l¹lÑ.JÓ(KÈaÑ(Oˆà!"¨°#Ñ6ÐØ"%ÐØˆÜ  ¨<Ó8ÐØ Ò#Ø*¨2Ñ.‰JØ 3Ò&Ø*¨3Ñ/‰Jà*¨4Ñ0ˆJÜÐ*¨ZÑ7¸$×:RÑ:RÑRÓSˆ	Ü˜	Ð#:Ó;ˆ	à §¡Ñ-ÐÜ6;¸LÓ6IÖJ°�aÐ,Ó,ÐJˆ
ÐJÜ˜“]ˆ
à˜)Ò#ÜŸK™K¨¨<¸!Ñ+;¸YÌcÔR×YÑYÓ[‰MàˆMØˆNØ˜4×3Ñ3°jÑ@ÑAˆGÜ$ \Ó2ò �Ø˜kÑ*¨nÓ<Ø" gÑ-�NØ!×(Ñ(¨Ô5Ø%¨Ó3Ùðô ˆ}Ó 	Ò)Ü�=Ó! 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˜‹~ÐùòE Ks   Ã	I3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   Úreturn_tensorsc                 óî  — t        |«      \  }}i }|j                  «       D ]®  \  }}|r| j                  |«      }|j                  \  }}}}}|||}}}|rwt	        ||||||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)rw   rx   )r;   rn   r   )Úchannel_dimr   rE   )Ú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   rk   rl   rm   r;   rn   ro   rp   rq   rr   rs   r   r   r   rt   r3   Úgrouped_videosÚgrouped_videos_indexÚresized_videos_groupedr‰   Ústacked_videosÚBÚTÚCÚHÚWrv   rw   rx   Ú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 Glm46VVideoProcessor._preprocess­   s1  € ô$ 0EÀVÓ/LÑ,ˆÐ,Ø!#Ðà%3×%9Ñ%9Ó%;ò 	;Ñ!ˆE�>ÙØ!%×!4Ñ!4°^Ó!D�Ø*×0Ñ0‰MˆAˆq�!�Q˜Ø()¨1¨a ˜ˆJÙÜ0<Ø)Ø!ØØ$7Ø%¨
Ñ2Ø#×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	   ÚBICUBICrn   r;   r   r   rr   r   rs   rm   ro   rq   rl   Údo_sample_framesr   r   r   r   r   Úvalid_kwargsrv   r@   Úmodel_input_namesr   r6   r!   r<   r   r#   Úfloatrj   Úlistr�   ÚTensorÚboolr
   r"   r   r«   Ú__classcell__)r8   s   @r'   r*   r*   2   sÝ  ø„ ð "×)Ñ)€HØ&Ð8KÑL€DØ$Ð&9Ð:€NØ!€JØ€IØ€IØ€JØ€LØ€NØÐØ€JØÐØ€LØ€JØ1€LØ€JØ
€Cà.Ð0@ÐAÐð# Ð(FÑ!Gõ #ð	¨tõ 	ð #'ñJàðJð �5‰[˜4ÑóJð^  $ØØ $ØN`×NhÑNhØØ )Ø!Ø15Ø04Ø!%Ø*.Ø!%Ø26ñcCà�U—\‘\Ñ"ðcCð ðcCð ð	cCð
 ˜‰oðcCð LðcCð ðcCð ðcCð ðcCð ˜D ™KÑ'¨$Ñ.ðcCð ˜4 ™;Ñ&¨Ñ-ðcCð ˜$‘JðcCð ! 4™ZðcCð ˜$‘JðcCð ˜jÑ(¨4Ñ/÷cCr&   r*   )!ÚnumpyrL   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_glm46vr   r   r*   Ú__all__r%   r&   r'   ú<module>rÀ      s|   ðó, Û Ý 7å 2÷÷ ÷ 5ß 5ß Xß OÑ OÝ 1ô \¸õ ñ ØlØ"ðóôRCÐ-ó RCóðRCðj "Ð
"�r&   