Ë
    ÛÓ^j&K  ã                   óT  — 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 ddlmZmZmZmZ ddlmZmZ ddlmZ dd	lmZmZmZ d
dlmZ d
dlmZmZ d
dlm Z  d
dl!m"Z"  G d„ de«      Z# G d„ ded¬«      Z$ G d„ de«      Z% G d„ de «      Z& G d„ ded¬«      Z' G d„ de"«      Z(g d¢Z)y)é    N)Ú
functionalé   )ÚBatchFeature)Úgroup_images_by_shapeÚreorder_images)ÚChannelDimensionÚPILImageResamplingÚSizeDictÚget_image_size)ÚImagesKwargsÚVideosKwargs)Ú
TensorType)ÚVideoMetadataÚgroup_videos_by_shapeÚreorder_videosé   )ÚGlm46VConfig)ÚGlm46VImageProcessorÚsmart_resize)ÚGlm46VImageProcessorPil)ÚGlm46VVideoProcessorc                   ó   — e Zd ZdZdZy)ÚGlmgaConfiga¶  
    image_start_token_id (`int`, *optional*, defaults to 151339):
        The image start token index to encode the start of image.
    image_end_token_id (`int`, *optional*, defaults to 151340):
        The image end token index to encode the end of image.
    video_start_token_id (`int`, *optional*, defaults to 151361):
        The video start token index to encode the start of video.
    video_end_token_id (`int`, *optional*, defaults to 151362):
        The video end token index to encode the end of video.

    ```python
    >>> from transformers import AutoModelForImageTextToText, GlmgaConfig

    >>> # Initializing a Glmga style configuration
    >>> configuration = GlmgaConfig()

    >>> # Initializing a model (reusing the GLM-4.6V implementation) from that configuration
    >>> model = AutoModelForImageTextToText.from_config(configuration)

    >>> # Accessing the model configuration
    >>> configuration = model.config
    ```ÚglmgaN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú
model_type© ó    úr/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/transformers/models/glmga/modular_glmga.pyr   r   )   s   „ ñð. �Jr!   r   c                   ó:   — e Zd ZU dZeed<   eed<   eed<   eed<   y)ÚGlmgaImageProcessorKwargsaÔ  
    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_expand_factor (`int`, *optional*, defaults to 1):
        The patch_expand_factor of the vision encoder to llm encoder.
    Ú
patch_sizeÚtemporal_patch_sizeÚ
merge_sizeÚpatch_expand_factorN)r   r   r   r   ÚintÚ__annotations__r    r!   r"   r$   r$   D   s   … ñ	ð ƒOØÓØƒOØÔr!   r$   F)Útotalc                    ó”   — e Zd Z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edz  de	e
z  dz  def d„Zy)ÚGlmgaImageProcessoré   Úimagesztorch.TensorÚ	do_resizeÚsizeÚresampleú7PILImageResampling | tvF.InterpolationMode | int | NoneÚ
do_rescaleÚrescale_factorÚdo_normalizeÚ
image_meanNÚ	image_stdr%   r&   r'   r(   Údisable_groupingÚreturn_tensorsÚreturnc                 ó¬  — t        ||¬«      \  }}i }|j                  «       D ]l  \  }}|j                  dd \  }}|rNt        |||||
|z  |z  |j                  |j
                  ¬«      \  }}| j                  |t        ||¬«      |¬«      }|||<   Œn 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.
        )r9   éþÿÿÿN©Ú
num_framesÚheightÚwidthÚtemporal_factorÚfactorÚ
min_pixelsÚ
max_pixels©r@   rA   ©r1   r2   é   r.   r   éÿÿÿÿ©Údimr   é   é   é   r   é   é	   ©Úpixel_valuesÚimage_grid_thw©ÚdataÚtensor_type)r   ÚitemsÚshaper   Úshortest_edgeÚlongest_edgeÚresizer
   r   Úrescale_and_normalizeÚndimÚ	unsqueezeÚrepeatÚtorchÚcatÚviewÚpermuteÚreshapeÚtensorr   ))Úselfr/   r0   r1   r2   r4   r5   r6   r7   r8   r%   r&   r'   r(   r9   r:   ÚkwargsÚgrouped_imagesÚgrouped_images_indexÚresized_images_groupedrX   Ústacked_imagesr@   rA   Ú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_imagesrR   rS   s)                                            r"   Ú_preprocesszGlmgaImageProcessor._preprocessY   s  € ô. 0EÀVÐ^nÔ/oÑ,ˆÐ,Ø!#ÐØ%3×%9Ñ%9Ó%;ò 	;Ñ!ˆE�>Ø*×0Ñ0°°Ð5‰MˆF�EÙÜ0<Ø2Ø!ØØ$7Ø%¨
Ñ2Ð5HÑHØ#×1Ñ1Ø#×0Ñ0ô1Ñ-� ð "&§¡Ø"Ü!¨¸}ÔMØ%ð "-ó "�ð
 -;Ð" 5Ò)ð#	;ô& (Ð(>Ð@TÓUˆä/DÀ^ÐfvÔ/wÑ,ˆÐ,Ø#%Ð Øˆà%3×%9Ñ%9Ó%;ó )	MÑ!ˆE�>Ø,:×,@Ñ,@ÀÀÐ,EÑ)ˆN˜Mà×0Ñ0Ø 
¨N¸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)	MôV *Ð*BÐDXÓYÐÜ(¨Ð:NÓOˆä—y‘yÐ!1°qÔ9ˆÜŸ™ oÓ6ˆäØ".À.ÑQÐ_mô
ð 	
r!   )r   r   r   r(   ÚlistÚboolr
   Úfloatr)   Ústrr   r   r{   r    r!   r"   r-   r-   V   sì   „ ØÐðe
à�^Ñ$ðe
ð ðe
ð ð	e
ð
 Lðe
ð ðe
ð ðe
ð ðe
ð ˜D ™KÑ'¨$Ñ.ðe
ð ˜4 ™;Ñ&¨Ñ-ðe
ð ðe
ð !ðe
ð ðe
ð !ðe
ð  ™+ðe
ð  ˜jÑ(¨4Ñ/ð!e
ð$ 
ô%e
r!   r-   c                   óž   — e Zd ZdZdeej                     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eez  dz  defd„Zy)ÚGlmgaImageProcessorPilr.   r/   r0   r1   r2   zPILImageResampling | int | Noner4   r5   r6   r7   Nr8   r(   r%   r&   r'   r:   r;   c                 óÐ  — g }g }|D �]!  }|j                   dd \  }}|rNt        ||||||z  |
z  |j                  |j                  ¬«      \  }}| j	                  |t        ||¬«      |¬«      }|r| j                  ||«      }|r| j                  |||	«      }t        j                  |t        j                  ¬«      }|j                  dk(  rt        j                  |d¬	«      }|j                  d
k(  rt        j                  |d¬	«      }|j                   dd \  }}|j                   d   |z  dk7  rMt        j                  |dd…dd…f   ||j                   d   |z  z
  d¬	«      }t        j                  ||gd¬	«      }|j                   dd \  }}}||z  }||z  ||z  }}|j                  ||||||z  ||||z  ||«
      }t        j                   |d«      }|j                  |||z  |z  ||z  |z  |z  «      } |j#                  | j%                  d«      «       |j#                  |||g«       �Œ$ t        j                  |d¬	«      }!t        j&                  |«      }"t)        |!|"dœ|¬«      S )z?
        Preprocess images one by one for PIL backend.
        r=   Nr>   rF   rG   ©Údtyper   r   )ÚaxisrH   r.   rI   )
r   r.   rH   rL   rM   rN   r   r   rO   rP   rQ   rT   )rX   r   rY   rZ   r[   r
   ÚrescaleÚ	normalizeÚnpÚasarrayÚfloat32r]   Úexpand_dimsr_   Úconcatenaterd   Ú	transposeÚappendÚsqueezeÚarrayr   )#rf   r/   r0   r1   r2   r4   r5   r6   r7   r8   r(   r%   r&   r'   r:   rg   rz   rp   Úimager@   rA   rl   rm   Úimage_arrayrr   rs   rt   ru   rv   rw   rx   rq   ry   rR   rS   s#                                      r"   r{   z"GlmgaImageProcessorPil._preprocessÄ   s¯  € ð* ÐØˆàó D	=ˆEØ!ŸK™K¨¨Ð,‰MˆF�EÙÜ0<Ø2Ø!ØØ$7Ø%¨
Ñ2Ð5HÑHØ#×1Ñ1Ø#×0Ñ0ô1Ñ-� ð Ÿ™ØÜ!¨¸}ÔMØ%ð $ó �ñ ØŸ™ U¨NÓ;�ÙØŸ™ u¨j¸)ÓD�ô Ÿ*™* U´"·*±*Ô=ˆKØ×Ñ 1Ò$Ü Ÿn™n¨[¸qÔA�Ø×Ñ 1Ò$Ü Ÿn™n¨[¸qÔA�à,7×,=Ñ,=¸b¸cÐ,BÑ)ˆN˜Mà× Ñ  Ñ#Ð&9Ñ9¸QÒ>ÜŸ)™)Ø¢ 2¡3 Ñ'Ø'¨;×+<Ñ+<¸QÑ+?ÐBUÑ+UÑVØô�ô
 !Ÿn™n¨k¸7Ð-CÈ!ÔL�à)4×):Ñ):¸2¸AÐ)>Ñ&ˆJ˜˜wØÐ1Ñ1ˆFØ+¨zÑ9¸=ÈJÑ;V�FˆFà!×)Ñ)ØØØ#ØØ˜*Ñ$ØØØ˜*Ñ$ØØóˆGô —l‘l 7Ð,JÓKˆGà%Ÿo™oØØ˜‘ &Ñ(ØÐ-Ñ-°
Ñ:¸ZÑGóˆOð ×#Ñ# O×$;Ñ$;¸AÓ$>Ô?Ø×"Ñ" F¨F°FÐ#;Ö<ðID	=ôN —~‘~Ð&6¸QÔ?ˆÜŸ™ /Ó2ˆäØ".À.ÑQÐ_mô
ð 	
r!   )r   r   r   r(   r|   rˆ   Úndarrayr}   r
   r~   r)   r   r   r   r{   r    r!   r"   r�   r�   Á   sà   „ ØÐðd
à�R—Z‘ZÑ ðd
ð ðd
ð ð	d
ð
 4ðd
ð ðd
ð ðd
ð ðd
ð ˜D ™KÑ'¨$Ñ.ðd
ð ˜4 ™;Ñ&¨Ñ-ðd
ð !ðd
ð ðd
ð !ðd
ð ðd
ð ˜jÑ(¨4Ñ/ðd
ð" 
ô#d
r!   r�   c                   ó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_sizer%   r&   r'   r(   Ú
max_framesN)r   r   r   Údictr   r)   r*   r    r!   r"   r•   r•   +  s+   … Ø˜˜c˜‘NÓ"ØƒOØÓØƒOØÓØ„Or!   r•   c                    ó(  — e Zd ZdddœZddiZdZdZ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j                      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y) ÚGlmgaVideoProcessori 1  iÀÑ6)rY   rZ   rZ   r   r.   i€  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   rI   rƒ   )ÚgetattrÚ
ValueErrorÚtotal_num_framesÚdurationÚroundrœ   r)   Úminr—   ÚrangeÚmathÚfloorrŽ   ÚlenÚmaxrˆ   ÚlinspaceÚtolistÚsetÚaddr�   )rf   r›   rœ   rg   Útotal_framesÚmax_frame_idxr¡   Ú
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_frames;  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Tgp?ÚvideosÚdo_convert_rgbr0   r1   r2   r3   r4   r5   r6   r7   r8   r(   r%   r&   r'   r:   c                 óô  — 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 )Nr>   rF   rG   r   )Úchannel_dimr.   rI   rJ   r   rH   rL   rM   rN   r   rO   rP   )Úpixel_values_videosÚvideo_grid_thwrT   )r   rW   Úconvert_to_rgbrX   r   rY   rZ   rb   r[   r
   r   r   r   ÚFIRSTr\   r_   r`   ra   rc   rd   re   r   )/rf   r¿   rÀ   r0   r1   r2   r4   r5   r6   r7   r8   r(   r%   r&   r'   r:   rg   Úgrouped_videosÚgrouped_videos_indexÚresized_videos_groupedrX   Ústacked_videosÚBÚTÚCÚHÚWr?   r@   rA   rl   rm   Úresized_videosÚprocessed_videos_groupedrp   rq   rr   rs   rv   ru   rw   rx   ry   Úprocessed_videosrÃ   rÄ   rU   s/                                                  r"   r{   z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   r1   r–   rœ   r(   r—   r   r)   r~   r¾   r	   ÚBICUBICr|   r`   ÚTensorr}   r
   r   r   r{   r    r!   r"   rš   rš   4  s€  „ Ø&Ð8KÑL€DØ$Ð&9Ð:€NØ
€CØÐØ€Jð
 #'ñ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š   )r   r-   r�   rš   )*r¥   Únumpyrˆ   r`   Útorchvision.transforms.v2r   ÚtvFÚimage_processing_utilsr   Úimage_transformsr   r   Úimage_utilsr   r	   r
   r   Úprocessing_utilsr   r   Úutilsr   Úvideo_utilsr   r   r   Úglm46v.configuration_glm46vr   Úglm46v.image_processing_glm46vr   r   Ú"glm46v.image_processing_pil_glm46vr   Úglm46v.video_processing_glm46vr   r   r$   r-   r�   r•   rš   Ú__all__r    r!   r"   ú<module>rã      sž   ðó ã Û Ý 7å 2ß E÷ó ÷ ;Ý ß OÑ OÝ 6ß OÝ HÝ Aô�,ô ô6 °Eõ ô$h
Ð.ô h
ôVg
Ð4ô g
ôT L¸õ ônCÐ.ô nCòb�r!   