+
    œ°³j0 ã                   óz  € ^ RI t ^ RIHt ^ RIHt ^ RIHt ^ RIt^ RIH	t	 ^ RI
H	u Ht ^ RIHt ^RIHt ^RIHtHt ^RIHt ^R	IHt ^R
IHt ^RIHt ^RIHt ^RIHtHtH t  ^RI!H"t"H#t# ^RI$H%t%H&t& ^RI'H(t( ^RI)H*t*H+t+H,t,H-t- ^RI.H/t/ ^RI0H1t1H2t2H3t3H4t4H5t5 ^RI6H7t7 ^RI8H9t9H:t: ^RI;H<t<H=t=H>t> ]! R4       ! R R]	P~                  4      4       t@ ! R R]	P~                  4      tA ! R R]	P~                  4      tB ! R R]	P~                  4      tC ! R  R!]	P~                  4      tD ! R" R#]	P~                  4      tER$ tFR% R& ltGR' R( ltHRGR) R* lltI ! R+ R,]	P~                  4      tJ ! R- R.]4      tK ! R/ R0]	P~                  4      tLR1 tMRHR2 ltN ! R3 R4]	P~                  4      tO ! R5 R6]	P~                  4      tP ! R7 R8]4      tQ]+] ! R9 R:]4      4       4       tR]+ ! R; R<]&4      4       tS ! R= R>]S4      tT]+ ! R? R@]S4      4       tU]+ ! RA RB]S4      4       tV]+] ! RC RD] 4      4       4       tW ! RE RF]S]4      tX. RIOtYR# )Jé    N)ÚCallable)Ú	dataclass)ÚAny)Ú	LayerNorm)ÚACT2FN)ÚCacheÚDynamicCache)ÚGenerationMixin)Úuse_kernel_forward_from_hub)Úcreate_causal_mask)ÚFlashAttentionKwargs)ÚGradientCheckpointingLayer)ÚBaseModelOutputWithPastÚBaseModelOutputWithPoolingÚCausalLMOutputWithPast)ÚROPE_INIT_FUNCTIONSÚdynamic_rope_update)ÚALL_ATTENTION_FUNCTIONSÚPreTrainedModel)ÚUnpack)ÚTransformersKwargsÚauto_docstringÚcan_return_tupleÚtorch_compilable_check)Údeprecate_kwarg)Úaccepts_precomputed_kwargsÚget_max_seqlenÚis_flash_attention_requestedÚmaybe_autocastÚmerge_with_config_defaults)Úcapture_outputs)Úget_vision_attention_seqlensÚget_vision_position_ids)ÚGlm4vConfigÚGlm4vTextConfigÚGlm4vVisionConfigÚRMSNormc                   óZ   a a€ ] tR t^7t oRV3R lV 3R llltV3R lR ltR tRtVtV ;t	# )ÚGlm4vRMSNormc                ó$   <€ V ^8„  d   QhRS[ RR/# )é   ÚepsÚreturnN)Úfloat)ÚformatÚ__classdict__s   "€Úi/home/luca/screen-checking/.venv/lib/python3.14/site-packages/transformers/models/glm4v/modeling_glm4v.pyÚ__annotate__ÚGlm4vRMSNorm.__annotate__9   s   ø€ ÷ $ñ $©ð $¸$ñ $ó    c                óŽ   <€ \         SV `  4        \        P                  ! \        P
                  ! V4      4      V n        W n        R# )z+
Glm4vRMSNorm is equivalent to T5LayerNorm
N)ÚsuperÚ__init__ÚnnÚ	ParameterÚtorchÚonesÚweightÚvariance_epsilon)ÚselfÚhidden_sizer,   Ú	__class__s   &&&€r1   r7   ÚGlm4vRMSNorm.__init__9   s/   ø€ ô 	‰ÑÔÜ—l’l¤5§:¢:¨kÓ#:Ó;ˆŒØ #Ör4   c                óN   <€ V ^8„  d   QhRS[ P                  RS[ P                  /# ©r+   Úhidden_statesr-   ©r:   ÚTensor)r/   r0   s   "€r1   r2   r3   A   s#   ø€ ÷ ;ñ ;¡U§\¡\ð ;±e·l±lñ ;r4   c                ó:  € VP                   pVP                  \        P                  4      pVP	                  ^4      P                  RRR7      pV\        P                  ! W0P                  ,           4      ,          pV P                  VP                  V4      ,          # )r+   T)Úkeepdiméÿÿÿÿ)	ÚdtypeÚtor:   Úfloat32ÚpowÚmeanÚrsqrtr=   r<   )r>   rD   Úinput_dtypeÚvariances   &&  r1   ÚforwardÚGlm4vRMSNorm.forwardA   sw   € Ø#×)Ñ)ˆØ%×(Ñ(¬¯©Ó7ˆØ ×$Ñ$ QÓ'×,Ñ,¨R¸Ð,Ó>ˆØ%¬¯ª°H×?TÑ?TÕ4TÓ(UÕUˆØ�{‰{˜]×-Ñ-¨kÓ:Õ:Ð:r4   c                ó^   € \        V P                  P                  4       R V P                   2# )z, eps=)Útupler<   Úshaper=   )r>   s   &r1   Ú
extra_reprÚGlm4vRMSNorm.extra_reprH   s*   € Ü˜Ÿ™×)Ñ)Ó*Ð+¨6°$×2GÑ2GÐ1HÐIÐIr4   )r=   r<   )g�íµ ÷Æ°>)
Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r7   rR   rW   Ú__static_attributes__Ú__classdictcell__Ú__classcell__©r@   r0   s   @@r1   r)   r)   7   s%   ù‡ € ÷$õ $÷;ð ;÷Jò Jr4   r)   c                   óH   a a€ ] tR t^Lt oRV3R lV 3R llltR tRtVtV ;t# )ÚGlm4VisionMlpc                ó    <€ V ^8„  d   QhRS[ /# )r+   Úbias)Úbool)r/   r0   s   "€r1   r2   ÚGlm4VisionMlp.__annotate__M   s   ø€ ÷ 0ñ 0¡Tñ 0r4   c                óÌ  <€ \         SV `  4        VP                  V n        VP                  V n        \
        P                  ! V P                  V P                  VR 7      V n        \
        P                  ! V P                  V P                  VR 7      V n        \
        P                  ! V P                  V P                  VR 7      V n	        \        VP                  ,          V n        R# ©©rd   N)r6   r7   r?   Úout_hidden_sizeÚintermediate_sizer8   ÚLinearÚ	gate_projÚup_projÚ	down_projr   Ú
hidden_actÚact_fn)r>   Úconfigrd   r@   s   &&&€r1   r7   ÚGlm4VisionMlp.__init__M   sŸ   ø€ Ü‰ÑÔØ!×-Ñ-ˆÔØ!'×!7Ñ!7ˆÔÜŸš 4×#3Ñ#3°T×5KÑ5KÐRVÔWˆŒÜ—y’y ×!1Ñ!1°4×3IÑ3IÐPTÔUˆŒÜŸš 4×#9Ñ#9¸4×;KÑ;KÐRVÔWˆŒÜ˜V×.Ñ.Õ/ˆŽr4   c                óŒ   € V P                  V P                  V P                  V4      4      V P                  V4      ,          4      # ©N)ro   rq   rm   rn   ©r>   Úhidden_states   &&r1   rR   ÚGlm4VisionMlp.forwardV   s2   € Ø�~‰~˜dŸk™k¨$¯.©.¸Ó*FÓGÈ$Ï,É,ÐWcÓJdÕdÓeÐer4   )rq   ro   rm   r?   rk   rn   ©F©	rY   rZ   r[   r\   r7   rR   r]   r^   r_   r`   s   @@r1   rb   rb   L   s   ù‡ € ÷0õ 0÷fò fr4   rb   c                   óP   a a€ ] tR t^Zt oV3R lV 3R lltV3R lR ltRtVtV ;t# )ÚGlm4vVisionPatchEmbedc                ó$   <€ V ^8„  d   QhRS[ RR/# ©r+   rr   r-   N©r&   )r/   r0   s   "€r1   r2   Ú"Glm4vVisionPatchEmbed.__annotate__[   s    ø€ ÷ mñ mÑ0ð m°Tñ mr4   c                óV  <€ \         SV `  4        VP                  V n        VP                  V n        VP                  V n        VP
                  V n        V P                  V P                  V P                  .p\        P                  ! V P                  V P                  W"R 7      V n	        R# ))Úkernel_sizeÚstrideN)
r6   r7   Ú
patch_sizeÚtemporal_patch_sizeÚin_channelsr?   Ú	embed_dimr8   ÚConv3dÚproj)r>   rr   r‚   r@   s   && €r1   r7   ÚGlm4vVisionPatchEmbed.__init__[   s|   ø€ Ü‰ÑÔØ ×+Ñ+ˆŒØ#)×#=Ñ#=ˆÔ Ø!×-Ñ-ˆÔØ×+Ñ+ˆŒà×/Ñ/°·±À$Ç/Á/ÐRˆÜ—I’I˜d×.Ñ.°·±ÈKÔlˆŽ	r4   c                óN   <€ V ^8„  d   QhRS[ P                  RS[ P                  /# rC   rE   )r/   r0   s   "€r1   r2   r€   e   s#   ø€ ÷ ñ ¡U§\¡\ð ±e·l±lñ r4   c                ó6  € V P                   P                  P                  pVP                  RV P                  V P
                  V P                  V P                  4      pV P                  VP                  VR7      4      P                  RV P                  4      pV# )é   ©rJ   rI   )	r‰   r<   rJ   Úviewr†   r…   r„   rK   r‡   )r>   rD   Útarget_dtypes   && r1   rR   ÚGlm4vVisionPatchEmbed.forwarde   s~   € Ø—y‘y×'Ñ'×-Ñ-ˆØ%×*Ñ*Ø�× Ñ  $×":Ñ":¸D¿O¹OÈTÏ_É_ó
ˆð Ÿ	™	 -×"2Ñ"2¸Ð"2Ó"FÓG×LÑLÈRÐQU×Q_ÑQ_Ó`ˆØÐr4   )r‡   r†   r„   r‰   r…   rz   r`   s   @@r1   r|   r|   Z   s    ù‡ € ÷mó m÷÷ ð r4   r|   c                   óÎ   a a€ ] tR t^nt oRt]! RRR7      RV3R lV 3R lll4       t]]! RRR7      RV3R lR ll4       4       t]	P                  ! 4       R	 4       tR
 tRtVtV ;t# )ÚGlm4vVisionRotaryEmbeddingzí
Simple axial 2D rope with same freqs used for H and W grids. The freqs are
pre-computed using `head-dim//4` which is later used to concat H and W positions.
The final angles rotate over the whole head dim, no partial rotation involved.
Údeviceú5.18©Úversionc                ó    <€ V ^8„  d   QhRS[ /# ©r+   rr   r   )r/   r0   s   "€r1   r2   Ú'Glm4vVisionRotaryEmbedding.__annotate__v   s   ø€ ÷ Oñ OÑ0ñ Or4   c                óÎ  <€ \         SV `  4        Wn        V P                  P                  R ,          V n        V P
                  pV P                  R8w  d/   \        V P                  P                   RV P                   24      hV! V P                  V4      w  q@n	        \        P                  ! VRR7      V n        \        P                  ! VP                  4       RR7      V n        R# )Ú	rope_typeÚaxialz) supports only axial rope, but requested F©Ú
persistentN)r6   r7   rr   Úrope_parametersrœ   Úcompute_axial_rope_parametersÚ
ValueErrorr@   rY   Úattention_scalingr8   ÚBufferÚinv_freqÚcloneÚoriginal_inv_freq©r>   rr   r”   Úrope_init_fnr¥   r@   s   &&&  €r1   r7   Ú#Glm4vVisionRotaryEmbedding.__init__u   s¬   ø€ ä‰ÑÔØŒàŸ™×4Ñ4°[ÕAˆŒØ!%×!CÑ!CˆØ�>‰>˜WÔ$Ü §¡× 7Ñ 7Ð8Ð8aÐbf×bpÑbpÐaqÐrÓsÐsÙ+7¸¿¹ÀVÓ+LÑ(ˆÔ(äŸ	š	 (°uÔ=ˆŒÜ!#§¢¨8¯>©>Ó+;ÈÔ!NˆÖr4   c                óP   <€ V ^8„  d   QhRS[ RS[S[P                  S[3,          /# ©r+   rr   r-   )r&   rU   r:   rF   r.   )r/   r0   s   "€r1   r2   rš   …   s/   ø€ ÷ 5ñ 5Ñ.?ð 5Ñ[`Ñaf×amÑamÑotÐatÕ[uñ 5r4   c           	     óB  € V P                   R,          p\        V RR4      ;'       g    V P                  V P                  ,          pV^,          pRpRV\        P
                  ! ^ V^\        P                  R7      V,          ,          ,          pVP                  V4      V3# )á~  
Computes the inverse frequencies according to the original RoPE implementation
Args:
    config ([`~transformers.PreTrainedConfig`]):
        The model configuration.
Returns:
    Tuple of (`torch.Tensor`, `float`), containing the inverse frequencies for the RoPE embeddings and the
    post-processing scaling factor applied to the computed cos/sin (unused in this type of RoPE).
Ú
rope_thetaÚhead_dimNç      ð?rŽ   )r    Úgetattrr?   Únum_attention_headsr:   Úaranger.   rK   )rr   r”   ÚkwargsÚbaseÚdimÚspatial_dimÚattention_factorr¥   s   &&,     r1   r¡   Ú8Glm4vVisionRotaryEmbedding.compute_axial_rope_parametersƒ   s‡   € ð ×%Ñ% lÕ3ˆÜ�f˜j¨$Ó/×cÐc°6×3EÑ3EÈ×IcÑIcÕ3cˆØ˜Q•hˆàÐØ˜$¤5§<¢<°°;ÀÌÏÉÔ#UÐXcÕ#cÕdÕeˆØ�{‰{˜6Ó"Ð$4Ð4Ð4r4   c                óZ  € VR,          P                  4       p\        VP                  P                  \        4      '       d2   VP                  P                  R8w  d   VP                  P                  MRp\        VRR7      ;_uu_ 4        W0P                  P                  4       ,          pVP                  4       V P                  ,          pVP                  4       V P                  ,          pRRR4       V P                  X4      pV P                  X4      pWg3#   + '       g   i     L5; i).NÚmpsÚcpuF©Údevice_typeÚenabled).N)r.   Ú
isinstancer”   ÚtypeÚstrr   r¥   Úcosr£   ÚsinÚrecomposition_frequencies)r>   ÚxÚposition_idsÚposition_ids_expandedr¿   ÚfreqsrÄ   rÅ   s   &&&     r1   rR   Ú"Glm4vVisionRotaryEmbedding.forward—   sÓ   € ð !-¨YÕ 7× =Ñ =Ó ?ÐÜ'1°!·(±(·-±-Ä×'EÒ'EÈ!Ï(É(Ï-É-Ð[`ÔJ`�a—h‘h—m’mÐfkˆÜ¨¸U×CÖCØ)¯M©M×,?Ñ,?Ó,AÕAˆEØ—)‘)“+ × 6Ñ 6Õ6ˆCØ—)‘)“+ × 6Ñ 6Õ6ˆC÷ Dð
 ×,Ñ,¨SÓ1ˆØ×,Ñ,¨SÓ1ˆØˆxˆ÷ D×Cús   Â
A#DÄD*	c                óˆ   € VR,          VR,          r2\         P                  ! W#.RR7      p\         P                  ! WD.RR7      # )úM
Recompose the frequencies into the final spatial layout used per each grid.
©r·   ©ºNNNr   ©rÐ   r�   rI   )r:   Úcat)r>   ÚfreqÚfreq_hÚfreq_wÚfreq_hws   &&   r1   rÆ   Ú4Glm4vVisionRotaryEmbedding.recomposition_frequencies¥   s:   € ð ˜d� T¨$¥Z�Ü—)’)˜VÐ,°"Ô5ˆÜ�yŠy˜'Ð+°Ô4Ð4r4   )r£   rr   r¥   r§   rœ   ru   )rY   rZ   r[   r\   Ú__doc__r   r7   Ústaticmethodr¡   r:   Úno_gradrR   rÆ   r]   r^   r_   r`   s   @@r1   r“   r“   n   sy   ù‡ € ññ �X vÔ.÷Oô Oó /ðOð Ù�X vÔ.÷5ñ 5ó /ó ð5ð$ ‡]‚]ƒ_ñó ð÷5ò 5r4   r“   c                   óT   a a€ ] tR t^®t oRV3R lV 3R llltV3R lR ltRtVtV ;t# )ÚGlm4vVisionPatchMergerc          
      ó6   <€ V ^8„  d   QhRS[ RS[ RS[RS[RR/# )r+   r·   Úcontext_dimrp   rd   r-   N)ÚintrÃ   re   )r/   r0   s   "€r1   r2   Ú#Glm4vVisionPatchMerger.__annotate__¯   s1   ø€ ÷ )ñ )™Cð )©cð )¹sð )É$ð )Ð[_ñ )r4   c                ó„  <€ \         SV `  4        \        P                  ! WVR 7      V n        \        V4      V n        \        P                  ! WVR 7      V n        \        P                  ! WVR 7      V n        \        P                  ! W!VR 7      V n	        \        P                  ! 4       V n        \        V,          V n        R# rh   )r6   r7   r8   rl   r‰   r   Úpost_projection_normrm   rn   ro   ÚGELUÚact1r   rq   )r>   r·   rÞ   rp   rd   r@   s   &&&&&€r1   r7   ÚGlm4vVisionPatchMerger.__init__¯   s{   ø€ Ü‰ÑÔÜ—I’I˜c¨TÔ2ˆŒ	Ü$-¨c£NˆÔ!ÜŸš 3¸$Ô?ˆŒÜ—y’y ¸Ô=ˆŒÜŸš ;¸$Ô?ˆŒÜ—G’G“IˆŒ	Ü˜ZÕ(ˆŽr4   c                óN   <€ V ^8„  d   QhRS[ P                  RS[ P                  /# )r+   rw   r-   rE   )r/   r0   s   "€r1   r2   rà   ¹   s'   ø€ ÷ fñ f¡E§L¡Lð f±U·\±\ñ fr4   c                óî   € V P                  V4      pV P                  V P                  V4      4      pV P                  V P	                  V P                  V4      4      V P                  V4      ,          4      # ru   )r‰   rä   râ   ro   rq   rm   rn   rv   s   &&r1   rR   ÚGlm4vVisionPatchMerger.forward¹   sY   € Ø—y‘y Ó.ˆØ—y‘y ×!:Ñ!:¸<Ó!HÓIˆØ�~‰~˜dŸk™k¨$¯.©.¸Ó*FÓGÈ$Ï,É,ÐWcÓJdÕdÓeÐer4   )rä   rq   ro   rm   râ   r‰   rn   ry   rz   r`   s   @@r1   rÜ   rÜ   ®   s!   ù‡ € ÷)õ )÷f÷ fð fr4   rÜ   c                   óP   a a€ ] tR t^¿t oV3R lV 3R lltV3R lR ltRtVtV ;t# )ÚGlm4vVisionEmbeddingsc                ó    <€ V ^8„  d   QhRS[ /# r™   r   )r/   r0   s   "€r1   r2   Ú"Glm4vVisionEmbeddings.__annotate__À   s   ø€ ÷ 
-ñ 
-Ñ0ñ 
-r4   c                óx  <€ \         SV `  4        Wn        VP                  V n        VP
                  V n        VP                  V n        V P
                  V P                  ,          ^,          V n        V P                  V n        \        P                  ! V P                  V P                  4      V n        RV n        R# )r+   ÚbicubicN)r6   r7   rr   r?   r‡   Ú
image_sizer„   Únum_patchesÚnum_positionsr8   Ú	EmbeddingÚposition_embeddingÚinterpolated_method©r>   rr   r@   s   &&€r1   r7   ÚGlm4vVisionEmbeddings.__init__À   s‡   ø€ Ü‰ÑÔØŒØ×+Ñ+ˆŒØ ×+Ñ+ˆŒØ ×+Ñ+ˆŒà ŸO™O¨t¯©Õ>À1ÕDˆÔØ!×-Ñ-ˆÔÜ"$§,¢,¨t×/AÑ/AÀ4Ç>Á>Ó"RˆÔØ#,ˆÖ r4   c                ó4   <€ V ^8„  d   QhRS[ P                  /# )r+   r-   rE   )r/   r0   s   "€r1   r2   rì   Ì   s   ø€ ÷ :ñ :ÑPU×P\ÑP\ñ :r4   c                ój  € V P                   P                  pVP                  ^,          pVP                  p\	        V\
        4      '       d'   \        P                  ! W(\        P                  R7      pVP                  ^ ,          p	\        V	R,          4      p
VP                  WªV4      P                  ^^ ^4      P                  ^ 4      P                  V\        P                  R7      pVP                  ^ ,          p\        P                  ! WÁP                  R7      pVP                  ^ 4      VP!                  ^ 4      P                  ^4      8¬  P#                  ^ 4      pW>^3,          P                  \        P                  R7      pW>^3,          P                  \        P                  R7      pVR,           V,          ^,          ^,
          pVR,           V,          ^,          ^,
          p\        P$                  ! VV3R	R7      P                  ^ 4      P                  ^4      p\&        P(                  ! VVV P*                  RRR7      pVP-                  ^ 4      P-                  R	4      P                  ^^ 4      pVP                  VP.                  4      P                  VP                  4      pVV,           pV# )
aQ  
Forward pass with integrated position encoding adaptation using 2D interpolation.

Args:
    embeddings: Input embeddings tensor
    lengths (torch.Tensor): Sequence lengths for each image in the batch.
    image_shapes (torch.Tensor): Tensor of shape [batch_size, 3] representing the image shapes (t, h, w).
    h_coords (torch.Tensor): Tensor of shape [total_seq] representing the h coordinate for each patch.
    w_coords (torch.Tensor): Tensor of shape [total_seq] representing the w coordinate for each patch.

Returns:
    torch.Tensor: Embeddings with adapted position encoding added.
)r”   rJ   g      à?©r”   rŽ   rÎ   FÚborder)ÚmodeÚalign_cornersÚpadding_moderI   )ró   r<   rV   r”   rÁ   Úlistr:   ÚtensorÚlongrß   r�   ÚpermuteÚ	unsqueezerK   rL   r´   ÚcumsumÚsumÚstackÚFÚgrid_samplerô   ÚsqueezerJ   )r>   Ú
embeddingsÚlengthsÚimage_shapesÚh_coordsÚw_coordsÚpos_embed_weightr?   r”   Úorig_size_sqÚ	orig_sizeÚpos_embed_2dÚ
num_tokensÚtoken_positionsÚseq_idsÚtarget_hÚtarget_wÚnorm_wÚnorm_hÚgridÚinterpolated_embed_fp32Úadapted_pos_embed_fp32Úadapted_pos_embeds   &&&&&&                 r1   rR   ÚGlm4vVisionEmbeddings.forwardÌ   s6  € ð  ×2Ñ2×9Ñ9ÐØ&×,Ñ,¨QÕ/ˆØ!×(Ñ(ˆô �gœt×$Ò$Ü—l’l 7ÄÇÁÔLˆGð (×-Ñ-¨aÕ0ˆÜ˜ cÕ)Ó*ˆ	à×!Ñ! )¸ÓDß‰W�Q˜˜1Óß‰Y�q‹\ß‰R�v¤U§]¡]ˆRÓ3ð	 	ð  ×%Ñ% aÕ(ˆ
ÜŸ,š, z×:KÑ:KÔLˆØ"×,Ñ,¨QÓ/°7·>±>À!Ó3D×3NÑ3NÈqÓ3QÑQ×VÑVÐWXÓYˆØ¨ 
Õ+×.Ñ.´U·]±]Ð.ÓCˆØ¨ 
Õ+×.Ñ.´U·]±]Ð.ÓCˆð ˜c•> XÕ-°Õ2°QÕ6ˆØ˜c•> XÕ-°Õ2°QÕ6ˆô �{Š{˜F FÐ+°Ô4×>Ñ>¸qÓA×KÑKÈAÓNˆô #$§-¢-Ø˜$ T×%=Ñ%=ÈUÐaiô#
Ðð
 "9×!@Ñ!@ÀÓ!C×!KÑ!KÈBÓ!O×!WÑ!WÐXYÐ[\Ó!]ÐØ2×5Ñ5Ð6F×6LÑ6LÓM×PÑPÐQ[×QbÑQbÓcÐð  Ð"3Õ3ˆ
ØÐr4   )rr   r‡   rï   rô   rð   rñ   r„   ró   rz   r`   s   @@r1   rê   rê   ¿   s   ù‡ € ÷
-ó 
-÷:÷ :ð :r4   rê   c                óÌ   € V RRV P                   R,          ^,          13,          pV RV P                   R,          ^,          R13,          p\        P                  ! V) V3RR7      # )ú*Rotates half the hidden dims of the input..NrÎ   rI   )rV   r:   rÒ   ©rÇ   Úx1Úx2s   &  r1   Úrotate_halfr#  	  sZ   € à	
ˆ3Ð"�!—'‘'˜"•+ Õ"Ð"Ð"Õ	#€BØ	
ˆ3�—‘˜•˜qÕ Ñ"Ð"Õ	#€BÜ�9Š9�r�c˜2�Y BÔ'Ð'r4   c                óî   € V ^8„  d   QhR\         P                  R\         P                  R\         P                  R\         P                  R\        \         P                  \         P                  3,          /# )r+   ÚqÚkrÄ   rÅ   r-   ©r:   rF   rU   )r/   s   "r1   r2   r2     sV   € ÷ ñ Ü‡|�|ðÜŸ™ðÜ+0¯<©<ðÜ>C¿l¹lðä
Œ5�<‰<œŸ™Ð%Õ&ñr4   c                 ó°  € V P                   pVP                   pV P                  4       VP                  4       rVP                  R4      P                  4       VP                  R4      P                  4       r2W,          \        V 4      V,          ,           pW,          \        V4      V,          ,           pVP	                  V4      pVP	                  V4      pWg3# )r+   éþÿÿÿ)rJ   r.   r  r#  rK   )r%  r&  rÄ   rÅ   Úorig_q_dtypeÚorig_k_dtypeÚq_embedÚk_embeds   &&&&    r1   Úapply_rotary_pos_emb_visionr.    s£   € ð —7‘7€LØ—7‘7€LØ�7‰7‹9�a—g‘g“i€qØ�}‰}˜RÓ ×&Ñ&Ó(¨#¯-©-¸Ó*;×*AÑ*AÓ*CˆØ�wœ; q›>¨CÕ/Õ0€GØ�wœ; q›>¨CÕ/Õ0€GØ�j‰j˜Ó&€GØ�j‰j˜Ó&€GØÐÐr4   c                ód   € V ^8„  d   QhR\         P                  R\        R\         P                  /# )r+   rD   Ún_repr-   )r:   rF   rß   )r/   s   "r1   r2   r2     s.   € ÷ 	Uñ 	UœUŸ\™\ð 	U´#ð 	U¼%¿,¹,ñ 	Ur4   c                ó˜   € V P                   w  r#rEV^8X  d   V # V R,          P                  W#WV4      p V P                  W#V,          WE4      # )zÈ
This is the equivalent of torch.repeat_interleave(x, dim=1, repeats=n_rep). The hidden states go from (batch,
num_key_value_heads, seqlen, head_dim) to (batch, num_attention_heads, seqlen, head_dim)
)rÐ   rÐ   NrÐ   rÐ   )rV   ÚexpandÚreshape)rD   r0  ÚbatchÚnum_key_value_headsÚslenr°   s   &&    r1   Ú	repeat_kvr7    sU   € ð
 2?×1DÑ1DÑ.€E Ø�„zØÐØ!Ð"2Õ3×:Ñ:¸5ÐW\ÐdlÓm€MØ× Ñ  ¸eÕ(CÀTÓTÐTr4   c                ó   € V ^8„  d   QhR\         P                  R\        P                  R\        P                  R\        P                  R\        P                  R,          R\        R\        R	\
        \        ,          /# )
r+   ÚmoduleÚqueryÚkeyÚvalueÚattention_maskNÚscalingÚdropoutrµ   )r8   ÚModuler:   rF   r.   r   r   )r/   s   "r1   r2   r2   *  sw   € ÷ %ñ %Ü�I‰Ið%ä�<‰<ð%ô 
�‰ð%ô �<‰<ð	%ô
 —L‘L 4Õ'ð%ô ð%ô ð%ô Ô'Õ(ñ%r4   c                 ó"  € \        W P                  4      p\        W0P                  4      p	\        P                  ! WP	                  ^^4      4      V,          p
Ve	   W¤,           p
\
        P                  P                  V
R\        P                  R7      P                  VP                  4      p
\
        P                  P                  W¦V P                  R7      p
\        P                  ! W©4      pVP	                  ^^4      P                  4       pWº3# )r+   )r·   rJ   )ÚpÚtrainingrI   )r7  Únum_key_value_groupsr:   ÚmatmulÚ	transposer8   Ú
functionalÚsoftmaxrL   rK   rJ   r?  rC  Ú
contiguous)r9  r:  r;  r<  r=  r>  r?  rµ   Ú
key_statesÚvalue_statesÚattn_weightsÚattn_outputs   &&&&&&&,    r1   Úeager_attention_forwardrN  *  sÒ   € ô ˜3× ;Ñ ;Ó<€JÜ˜U×$?Ñ$?Ó@€Lä—<’< ×';Ñ';¸A¸qÓ'AÓBÀWÕL€LØÒ!Ø#Õ4ˆä—=‘=×(Ñ(¨¸2ÄUÇ]Á]Ð(ÓS×VÑVÐW\×WbÑWbÓc€LÜ—=‘=×(Ñ(¨È6Ï?É?Ð(Ó[€LÜ—,’,˜|Ó:€KØ×'Ñ'¨¨1Ó-×8Ñ8Ó:€KàÐ$Ð$r4   c                   óT   a a€ ] tR tRt oV3R lV 3R lltRV3R lR lltRtVtV ;t# )ÚGlm4vVisionAttentioniC  c                ó$   <€ V ^8„  d   QhRS[ RR/# r~   r   )r/   r0   s   "€r1   r2   Ú!Glm4vVisionAttention.__annotate__D  s   ø€ ÷ ñ Ñ0ð °Tñ r4   c                ó  <€ \         SV `  4        VP                  V n        VP                  V n        V P                  V P                  ,          V n        ^V n        \        P                  ! VP                  VP                  ^,          VP                  R7      V n
        \        P                  ! VP                  VP                  RR7      V n        V P
                  R,          V n        Wn        VP                  V n        RV n        R# )r�   ri   FNç      à¿)r6   r7   r?   r·   Ú	num_headsr°   rD  r8   rl   Úattention_biasÚqkvr‰   r>  rr   Úattention_dropoutÚ	is_causalrõ   s   &&€r1   r7   ÚGlm4vVisionAttention.__init__D  s¹   ø€ Ü‰ÑÔØ×%Ñ%ˆŒØ×)Ñ)ˆŒØŸ™ D§N¡NÕ2ˆŒØ$%ˆÔ!Ü—9’9˜V×/Ñ/°×1CÑ1CÀaÕ1GÈf×NcÑNcÔdˆŒÜ—I’I˜f×0Ñ0°&×2DÑ2DÈ5ÔQˆŒ	Ø—}‘} dÕ*ˆŒØŒØ!'×!9Ñ!9ˆÔØˆŽr4   c          
      óÎ   <€ V ^8„  d   QhRS[ P                  RS[ P                  RS[S[ P                  S[ P                  3,          R,          RS[R,          RS[ P                  /# )r+   rD   Ú
cu_seqlensÚposition_embeddingsNÚ
max_seqlenr-   )r:   rF   rU   rß   )r/   r0   s   "€r1   r2   rR  Q  sk   ø€ ÷ Bñ Bá—|‘|ðBñ —L‘LðBñ #¡5§<¡<±·±Ð#=Õ>ÀÕEð	Bñ
 ˜$•JðBñ 
�‰ñBr4   c                ó  € VP                   ^ ,          pV P                  V4      P                  V^V P                  R4      P	                  ^^ ^^4      P                  ^ 4      w  rxp	Vw  r«\        WxW«4      w  rxVP                  ^ ^4      P                  ^ 4      pVP                  ^ ^4      P                  ^ 4      pV	P                  ^ ^4      P                  ^ 4      p	\        P                  ! V P                  P                  \        4      p\        V P                  4      '       da   \        W P                  RV/R7      pT! V VVV	3RRRV P                   RV P"                  '       g   RMV P$                  RVR	VR
VRVRR/VB w  rÞMÄVR,          VRR ,
          pWxV	3 Uu. uF*  p\&        P(                  ! VVP+                  4       ^R7      NK,  	  pp\-        V!   UUUu. uFJ  w  pppT! V VVV3RRRV P                   RV P"                  '       g   RMV P$                  RR/VB ^ ,          NKL  	  pppp\&        P.                  ! V^R7      pVP                  VR4      P1                  4       pV P3                  V4      pV# u upi u upppi )r   r^  ©rµ   r=  Nr>  r?  ç        Úcu_seq_lens_qÚcu_seq_lens_kÚmax_length_qÚmax_length_krY  Fºr�   NNrÎ   rI   )rV   rW  r3  rU  r  Úunbindr.  rF  r  r   Úget_interfacerr   Ú_attn_implementationrN  r   r   r>  rC  rX  r:   ÚsplitÚtolistÚziprÒ   rI  r‰   )r>   rD   r\  r]  r^  rµ   Ú
seq_lengthÚquery_statesrJ  rK  rÄ   rÅ   Úattention_interfacerM  Ú_r
  rÿ   Úsplitsr%  r&  ÚvÚattn_outputss   &&&&&,                r1   rR   ÚGlm4vVisionAttention.forwardQ  sÍ  € ð #×(Ñ(¨Õ+ˆ
à�H‰H�]Ó#×+Ñ+¨J¸¸4¿>¹>È2ÓN×VÑVÐWXÐZ[Ð]^Ð`aÓb×iÑiÐjkÓlñ 	/ˆ ,ð '‰ˆÜ#>¸|ÐY\Ó#bÑ ˆà#×-Ñ-¨a°Ó3×=Ñ=¸aÓ@ˆØ×)Ñ)¨!¨QÓ/×9Ñ9¸!Ó<ˆ
Ø#×-Ñ-¨a°Ó3×=Ñ=¸aÓ@ˆä(?×(MÒ(MØ�K‰K×,Ñ,Ô.Eó)
Ðô (¨¯©×4Ò4ä'¨
·K±KÈÐWaÐHbÔcˆJÙ0ØØØØñ	ð
  $ðð Ÿ™ðð $(§=§= =™°d×6LÑ6Lðð )ðð )ðð (ðð (ðð  ðð ñ‰NˆK˜ð" ! •n z°#°2 Õ6ˆGàLXÐfrÑKsóÙKsÀ”—’˜F G§N¡NÓ$4¸!×<ÑKsð ð ô   # Fš|õñ  ,‘G�A�q˜!ñ $ØØØØñ	
ð
 $(ð
ð !ŸL™Lð
ð (,§}§} }™C¸$×:PÑ:Pð
ð $ð
ð ñ
ð ÷
ð 
ñ  ,ð ò ô  Ÿ)š) L°aÔ8ˆKà!×)Ñ)¨*°bÓ9×DÑDÓFˆØ—i‘i Ó,ˆØÐùò-ùôs   Æ0I;Ç0J ÈJ )
rX  rr   r·   r°   rY  rU  rD  r‰   rW  r>  ©NNrz   r`   s   @@r1   rP  rP  C  s!   ù‡ € ÷ó ÷B÷ Bò Br4   rP  c                   ó^   a a€ ] tR tRt oV3R lV 3R llt]RV3R lR ll4       tRtVtV ;t	# )ÚGlm4vVisionBlocki–  c                ó   <€ V ^8„  d   QhRR/# ©r+   r-   N© )r/   r0   s   "€r1   r2   ÚGlm4vVisionBlock.__annotate__—  s   ø€ ÷ 5ñ 5 $ñ 5r4   c                ó   <€ \         SV `  4        \        VP                  VP                  R 7      V n        \        VP                  VP                  R 7      V n        \        V4      V n        \        VRR7      V n
        R# )©r,   Fri   N)r6   r7   r)   r?   Úrms_norm_epsÚnorm1Únorm2rP  Úattnrb   Úmlprõ   s   &&€r1   r7   ÚGlm4vVisionBlock.__init__—  s\   ø€ Ü‰ÑÔÜ! &×"4Ñ"4¸&×:MÑ:MÔNˆŒ
Ü! &×"4Ñ"4¸&×:MÑ:MÔNˆŒ
Ü(¨Ó0ˆŒ	Ü  ¨eÔ4ˆŽr4   c                óº   <€ V ^8„  d   QhRS[ P                  RS[ P                  RS[S[ P                  S[ P                  3,          R,          RS[ P                  /# )r+   rD   r\  r]  Nr-   r'  )r/   r0   s   "€r1   r2   r{  Ÿ  sV   ø€ ÷ ñ á—|‘|ðñ —L‘Lðñ #¡5§<¡<±·±Ð#=Õ>ÀÕEð	ñ 
�‰ñr4   c                óª   € WP                   ! V P                  V4      3RVRV/VB ,           pWP                  V P                  V4      4      ,           pV# )z„
cu_seqlens (`torch.Tensor`):
    Cumulative sequence lengths used for packed variable-length attention in Flash Attention kernels.
r\  r]  )r�  r  r‚  r€  )r>   rD   r\  r]  rµ   s   &&&&,r1   rR   ÚGlm4vVisionBlock.forwardž  sa   € ð &¯	ª	Ø�J‰J�}Ó%ñ)
à!ð)
ð !4ð)
ð ñ	)
õ 
ˆð &¯©°·±¸MÓ1JÓ(KÕKˆØÐr4   )r�  r‚  r  r€  ru   ©
rY   rZ   r[   r\   r7   r   rR   r]   r^   r_   r`   s   @@r1   rw  rw  –  s-   ù‡ € ÷5ó 5ð ÷ñ ó ÷ð r4   rw  c                   óÔ   a a€ ] tR tRt o]! RRR7      RV3R lV 3R lll4       t]]! RRR7      RV3R lR ll4       4       t]P                  ! 4       ]
R	 4       4       tR
 tRtVtV ;t# )ÚGlm4vTextRotaryEmbeddingi´  r”   r•   r–   c                ó    <€ V ^8„  d   QhRS[ /# r™   ©r%   )r/   r0   s   "€r1   r2   Ú%Glm4vTextRotaryEmbedding.__annotate__¶  s   ø€ ÷ Vñ V™ñ Vr4   c                ó*  <€ \         SV `  4        VP                  V n        VP                  V n        Wn        V P
                  P                  R ,          V n        V P                  pV P                  R8w  d   \        V P                  ,          pV! V P
                  V4      w  q@n
        \        P                  ! VRR7      V n        \        P                  ! VP                  4       RR7      V n        VP                  P!                  R. RO4      V n        R# )rœ   ÚdefaultFrž   Úmrope_sectionN)é   é   r‘  )r6   r7   Úmax_position_embeddingsÚmax_seq_len_cachedÚoriginal_max_seq_lenrr   r    rœ   Úcompute_default_rope_parametersr   r£   r8   r¤   r¥   r¦   r§   Úgetr�  r¨   s   &&&  €r1   r7   Ú!Glm4vTextRotaryEmbedding.__init__µ  sÇ   ø€ ä‰ÑÔØ"(×"@Ñ"@ˆÔØ$*×$BÑ$BˆÔ!àŒàŸ™×4Ñ4°[ÕAˆŒØ!%×!EÑ!EˆØ�>‰>˜YÔ&Ü.¨t¯~©~Õ>ˆLÙ+7¸¿¹ÀVÓ+LÑ(ˆÔ(äŸ	š	 (°uÔ=ˆŒÜ!#§¢¨8¯>©>Ó+;ÈÔ!NˆÔØ#×3Ñ3×7Ñ7¸ÊÓUˆÖr4   c                óP   <€ V ^8„  d   QhRS[ RS[S[P                  S[3,          /# r¬   )r$   rU   r:   rF   r.   )r/   r0   s   "€r1   r2   rŒ  É  s.   ø€ ÷ 5ñ 5±ð 5ÑW\Ñ]b×]iÑ]iÑkpÐ]pÕWqñ 5r4   c           	     óŠ  € V P                   R,          pV P                   P                  RR4      p\        V RR4      ;'       g    V P                  V P                  ,          p\        WT,          4      pRpRV\        P                  ! ^ V^\        P                  R7      V,          ,          ,          pVP                  V4      V3# )r®   r¯   Úpartial_rotary_factorr±   r°   NrŽ   )
r    r–  r²   r?   r³   rß   r:   r´   r.   rK   )	rr   r”   rµ   r¶   rš  r°   r·   r¹   r¥   s	   &&,      r1   r•  Ú8Glm4vTextRotaryEmbedding.compute_default_rope_parametersÇ  s¦   € ð ×%Ñ% lÕ3ˆØ &× 6Ñ 6× :Ñ :Ð;RÐTWÓ XÐÜ˜6 :¨tÓ4×hÐh¸×8JÑ8JÈf×NhÑNhÕ8hˆÜ�(Õ2Ó3ˆàÐà˜$¤5§<¢<°°3¸ÄÇÁÔ#MÐPSÕ#SÕTÕUˆØ�{‰{˜6Ó"Ð$4Ð4Ð4r4   c                óv  € V P                   R,          P                  4       P                  ^VP                  ^,          R^4      pVR,          P                  4       p\	        VP
                  P                  \        4      '       d2   VP
                  P                  R8w  d   VP
                  P                  MRp\        VRR7      ;_uu_ 4        VP                  4       VP                  4       ,          P                  ^^4      pVP                  4       V P                  ,          pVP                  4       V P                  ,          pR R R 4       V P                  X4      pV P                  X4      pVP                  VP                  R7      VP                  VP                  R7      3#   + '       g   i     Lj; i)	Nr¼   r½   Fr¾   rŽ   )NNrÐ   NrI   )rÐ   rÐ   NrÐ   )r¥   r.   r2  rV   rÁ   r”   rÂ   rÃ   r   rF  rÄ   r£   rÅ   rÆ   rK   rJ   )	r>   rÇ   rÈ   Úinv_freq_expandedrÉ   r¿   rÊ   rÄ   rÅ   s	   &&&      r1   rR   Ú Glm4vTextRotaryEmbedding.forwardÝ  sE  € ð
 !ŸM™MÐ*=Õ>×DÑDÓF×MÑMÈaÐQ]×QcÑQcÐdeÕQfÐhjÐlmÓnÐØ ,¨]Õ ;× AÑ AÓ CÐä'1°!·(±(·-±-Ä×'EÒ'EÈ!Ï(É(Ï-É-Ð[`ÔJ`�a—h‘h—m’mÐfkˆÜ¨¸U×CÖCØ&×,Ñ,Ó.Ð1F×1LÑ1LÓ1NÕN×YÑYÐZ[Ð]^Ó_ˆEØ—)‘)“+ × 6Ñ 6Õ6ˆCØ—)‘)“+ × 6Ñ 6Õ6ˆC÷ Dð
 ×,Ñ,¨SÓ1ˆØ×,Ñ,¨SÓ1ˆØ�v‰v˜AŸG™GˆvÓ$ c§f¡f°1·7±7 fÓ&;Ð;Ð;÷ D×Cús   ÃA8F(Æ(F8	c           	     óî   € \         P                  ! \        VP                  V P                  RR7      4       UUu. uF  w  r#W2^,          ,          NK  	  uppRR7      pVP                  ^RR7      # u uppi )rÍ   rÎ   rI   )r:   rÒ   Ú	enumeraterj  r�  Úrepeat_interleave)r>   rÓ   ÚiÚms   &&  r1   rÆ   Ú2Glm4vTextRotaryEmbedding.recomposition_frequenciesï  se   € ô �yŠy¬y¸¿¹ÀD×DVÑDVÐ\^¸Ó9_Ô/`ÔaÑ/`¡t q˜! �EŸ(˜(Ñ/`ÒaÐgiÔjˆØ×%Ñ% a¨RÐ%Ó0Ð0ùó bs   ºA1
)r£   rr   r¥   r“  r�  r§   r”  rœ   ru   )rY   rZ   r[   r\   r   r7   rÙ   r•  r:   rÚ   r   rR   rÆ   r]   r^   r_   r`   s   @@r1   r‰  r‰  ´  sz   ù‡ € Ù�X vÔ.÷Vô Vó /ðVð" Ù�X vÔ.÷5ñ 5ó /ó ð5ð( ‡]‚]ƒ_Øñ<ó ó ð<÷ 1ò 1r4   r‰  c                óz   € V R,          pV R,          p\         P                  ! V) V3RR7      P                  R4      # )r  rÎ   ).:r   Nr+   ).:r�   Nr+   rI   r)  )r:   r  Úflattenr   s   &  r1   Úrotate_half_llmr§  ÷  s6   € à	
ˆ9�€BØ	
ˆ9�€BÜ�;Š;˜˜˜R�y bÔ)×1Ñ1°"Ó5Ð5r4   c                ó¶  € VP                  V4      pVP                  V4      pVP                  R,          pV RRV13,          V RVR13,          rvVRRV13,          VRVR13,          r˜Wb,          \        V4      V,          ,           p
W‚,          \        V4      V,          ,           p\        P                  ! W§.RR7      p
\        P                  ! W¹.RR7      pW«3# )aI  Applies Rotary Position Embedding to the query and key tensors.

Args:
    q (`torch.Tensor`): The query tensor.
    k (`torch.Tensor`): The key tensor.
    cos (`torch.Tensor`): The cosine part of the rotary embedding.
    sin (`torch.Tensor`): The sine part of the rotary embedding.
    unsqueeze_dim (`int`, *optional*, defaults to 1):
        The 'unsqueeze_dim' argument specifies the dimension along which to unsqueeze cos[position_ids] and
        sin[position_ids] so that they can be properly broadcasted to the dimensions of q and k. For example, note
        that cos[position_ids] and sin[position_ids] have the shape [batch_size, seq_len, head_dim]. Then, if q and
        k have the shape [batch_size, heads, seq_len, head_dim], then setting unsqueeze_dim=1 makes
        cos[position_ids] and sin[position_ids] broadcastable to the shapes of q and k. Similarly, if q and k have
        the shape [batch_size, seq_len, heads, head_dim], then set unsqueeze_dim=2.
Returns:
    `tuple(torch.Tensor)` comprising of the query and key tensors rotated using the Rotary Position Embedding.
.NrÎ   rI   )r  rV   r§  r:   rÒ   )r%  r&  rÄ   rÅ   Úunsqueeze_dimÚ
rotary_dimÚq_rotÚq_passÚk_rotÚk_passr,  r-  s   &&&&&       r1   Úapply_rotary_pos_embr¯  þ  sÐ   € ð$ �-‰-˜Ó
&€CØ
�-‰-˜Ó
&€Cð —‘˜2•€JØ�c˜;˜J˜;Ð&Õ'¨¨3°
±Ð+;Õ)<ˆ6Ø�c˜;˜J˜;Ð&Õ'¨¨3°
±Ð+;Õ)<ˆ6ð �{œ¨uÓ5¸Õ;Õ<€GØ�{œ¨uÓ5¸Õ;Õ<€Gô �iŠi˜Ð)¨rÔ2€GÜ�iŠi˜Ð)¨rÔ2€GØÐÐr4   c                   ó\   a a€ ] tR tRt oRtRV3R lV 3R llltR	V3R lR lltRtVtV ;t	# )
ÚGlm4vTextAttentioni"  zz
Multi-headed attention from 'Attention Is All You Need' paper.
and "Generating Long Sequences with Sparse Transformers".
c                ó4   <€ V ^8„  d   QhRS[ RS[R,          /# )r+   rr   Ú	layer_idxN©r%   rß   )r/   r0   s   "€r1   r2   ÚGlm4vTextAttention.__annotate__(  s#   ø€ ÷ ^ñ ^™ð ^¹3À½:ñ ^r4   c                óÄ  <€ \         SV `  4        Wn        W n        VP                  V n        VP
                  V n        V P                  V P                  ,          V n        VP                  V n        V P                  V P                  ,          V n	        R V n
        VP                  V n        VP                  V n        V P                  R,          V n        \        P                  ! V P                  V P                  V P                  ,          R R7      V n        \        P                  ! V P                  V P                  V P                  ,          R R7      V n        \        P                  ! V P                  V P                  V P                  ,          R R7      V n        \        P                  ! V P                  V P                  ,          V P                  RR7      V n        R# )Tri   FNrT  )r6   r7   rr   r³  r?   r³   rU  r°   r5  rD  rY  rX  r    r>  r8   rl   Úq_projÚk_projÚv_projÚo_proj©r>   rr   r³  r@   s   &&&€r1   r7   ÚGlm4vTextAttention.__init__(  sE  ø€ Ü‰ÑÔØŒØ"Œà!×-Ñ-ˆÔØ×3Ñ3ˆŒØ×(Ñ(¨D¯N©NÕ:ˆŒØ#)×#=Ñ#=ˆÔ Ø$(§N¡N°d×6NÑ6NÕ$NˆÔ!ØˆŒØ!'×!9Ñ!9ˆÔØ%×5Ñ5ˆÔØ—}‘} dÕ*ˆŒä—i’i × 0Ñ 0°$·.±.À4Ç=Á=Õ2PÐW[Ô\ˆŒÜ—i’i × 0Ñ 0°$×2JÑ2JÈTÏ]É]Õ2ZÐaeÔfˆŒÜ—i’i × 0Ñ 0°$×2JÑ2JÈTÏ]É]Õ2ZÐaeÔfˆŒÜ—i’i §¡°·±Õ >À×@PÑ@PÐW\Ô]ˆŽr4   c                ó`  <€ V ^8„  d   QhRS[ P                  RS[S[ P                  S[ P                  3,          R,          RS[ P                  R,          RS[R,          RS[S[,          RS[S[ P                  S[ P                  R,          S[S[ P                  ,          R,          3,          /# )r+   rD   r]  Nr=  Úpast_key_valuesrµ   r-   )r:   rF   rU   r   r   r   )r/   r0   s   "€r1   r2   rµ  <  sœ   ø€ ÷ ))ñ ))á—|‘|ð))ñ #¡5§<¡<±·±Ð#=Õ>ÀÕEð))ñ Ÿ™ tÕ+ð	))ñ
  �ð))ñ Ñ-Õ.ð))ñ 
‰u�|‰|™UŸ\™\¨DÕ0±%¹¿¹Õ2EÈÕ2LÐLÕ	Mñ))r4   c                óD  € VP                  4       w  rgpV P                  V4      p	V P                  V4      p
V P                  V4      pV	P	                  WgRV P
                  4      P                  ^^4      p	V
P	                  WgRV P
                  4      P                  ^^4      p
VP	                  WgRV P
                  4      P                  ^^4      pVw  rÍ\        WšWÍ4      w  ršVe   VP                  W«V P                  4      w  r«\        P                  ! V P                  P                  \        4      pT! V V	V
VV3RV P                  '       g   RMV P                   RV P"                  /VB w  ppVP%                  WgR4      P'                  4       pV P)                  V4      pVV3# )r�   r?  ra  r>  rI   )Úsizer·  r¸  r¹  r�   r°   rF  r¯  Úupdater³  r   rh  rr   ri  rN  rC  rX  r>  r3  rI  rº  )r>   rD   r]  r=  r¾  rµ   ÚbszÚq_lenrp  rn  rJ  rK  rÄ   rÅ   ro  rM  rL  s   &&&&&,           r1   rR   ÚGlm4vTextAttention.forward<  s”  € ð &×*Ñ*Ó,‰ˆ�Aà—{‘{ =Ó1ˆØ—[‘[ Ó/ˆ
Ø—{‘{ =Ó1ˆà#×(Ñ(¨°R¸¿¹ÓG×QÑQÐRSÐUVÓWˆØ—_‘_ S°°T·]±]ÓC×MÑMÈaÐQRÓSˆ
Ø#×(Ñ(¨°R¸¿¹ÓG×QÑQÐRSÐUVÓWˆà&‰ˆÜ#7¸ÐRUÓ#[Ñ ˆàÒ&Ø'6×'=Ñ'=¸jÐX\×XfÑXfÓ'gÑ$ˆJä(?×(MÒ(MØ�K‰K×,Ñ,Ô.Eó)
Ðñ %8ØØØØØñ	%
ð  $Ÿ}Ÿ}˜}‘C°$×2HÑ2Hð	%
ð —L‘Lð	%
ð ñ	%
Ñ!ˆ�\ð "×)Ñ)¨#°bÓ9×DÑDÓFˆØ—k‘k +Ó.ˆØ˜LÐ(Ð(r4   )rX  rr   r°   r?   rY  r¸  r³  rU  rD  r5  rº  r·  r    r>  r¹  ru   ©NNN)
rY   rZ   r[   r\   rØ   r7   rR   r]   r^   r_   r`   s   @@r1   r±  r±  "  s%   ù‡ € ñ÷
^õ ^÷())÷ ))ò ))r4   r±  c                   óD   a a€ ] tR tRt oV 3R ltV3R lR ltRtVtV ;t# )ÚGlm4vTextMLPih  c                ó>  <€ \         SV `  4        Wn        \        P                  ! VP
                  ^VP                  ,          RR7      V n        \        P                  ! VP                  VP
                  RR7      V n        \        VP                  ,          V n        R# )r+   Fri   N)r6   r7   rr   r8   rl   r?   rk   Úgate_up_projro   r   rp   Úactivation_fnrõ   s   &&€r1   r7   ÚGlm4vTextMLP.__init__i  sn   ø€ Ü‰ÑÔàŒÜŸIšI f×&8Ñ&8¸!¸f×>VÑ>VÕ:VÐ]bÔcˆÔÜŸš 6×#;Ñ#;¸V×=OÑ=OÐV[Ô\ˆŒÜ# F×$5Ñ$5Õ6ˆÖr4   c                óN   <€ V ^8„  d   QhRS[ P                  RS[ P                  /# rC   )r:   ÚFloatTensor)r/   r0   s   "€r1   r2   ÚGlm4vTextMLP.__annotate__q  s'   ø€ ÷ )ñ )¡U×%6Ñ%6ð )¹5×;LÑ;Lñ )r4   c                óž   € V P                  V4      pVP                  ^RR7      w  r2W P                  V4      ,          pV P                  V4      # )r+   rÎ   rI   )rÉ  ÚchunkrÊ  ro   )r>   rD   Ú	up_statesÚgates   &&  r1   rR   ÚGlm4vTextMLP.forwardq  sH   € Ø×%Ñ% mÓ4ˆ	à#Ÿ/™/¨!°˜/Ó4‰ˆØ× 2Ñ 2°4Ó 8Õ8ˆ	à�~‰~˜iÓ(Ð(r4   )rÊ  rr   ro   rÉ  rz   r`   s   @@r1   rÇ  rÇ  h  s   ù‡ € õ7÷)÷ )ð )r4   rÇ  c                   ó^   a a€ ] tR tRt oV3R lV 3R llt]RV3R lR ll4       tRtVtV ;t	# )ÚGlm4vTextDecoderLayeriz  c                ó&   <€ V ^8„  d   QhRS[ RS[/# )r+   rr   r³  r´  )r/   r0   s   "€r1   r2   Ú"Glm4vTextDecoderLayer.__annotate__{  s   ø€ ÷ \ñ \™ð \¹3ñ \r4   c                ó¶  <€ \         SV `  4        VP                  V n        \        W4      V n        \        V4      V n        \        VP                  VP                  R 7      V n	        \        VP                  VP                  R 7      V n
        \        VP                  VP                  R 7      V n        \        VP                  VP                  R 7      V n        R# )r}  N)r6   r7   r?   r±  Ú	self_attnrÇ  r‚  r)   r~  Úinput_layernormÚpost_attention_layernormÚpost_self_attn_layernormÚpost_mlp_layernormr»  s   &&&€r1   r7   ÚGlm4vTextDecoderLayer.__init__{  s    ø€ Ü‰ÑÔØ!×-Ñ-ˆÔÜ+¨FÓ>ˆŒÜ Ó'ˆŒÜ+¨F×,>Ñ,>ÀF×DWÑDWÔXˆÔÜ(4°V×5GÑ5GÈV×M`ÑM`Ô(aˆÔ%Ü(4°V×5GÑ5GÈV×M`ÑM`Ô(aˆÔ%Ü".¨v×/AÑ/AÀv×GZÑGZÔ"[ˆÖr4   c                óz  <€ V ^8„  d   QhRS[ P                  RS[S[ P                  S[ P                  3,          R,          RS[ P                  R,          RS[ P                  R,          RS[R,          RS[R,          RS[S[ P                  S[S[ P                  S[ P                  3,          R,          3,          /# )	r+   rD   r]  Nr=  rÈ   r¾  Ú	use_cacher-   )r:   rF   rU   Ú
LongTensorr   re   rÍ  )r/   r0   s   "€r1   r2   r×  †  s´   ø€ ÷ #ñ #á—|‘|ð#ñ #¡5§<¡<±·±Ð#=Õ>ÀÕEð#ñ Ÿ™ tÕ+ð	#ñ
 ×&Ñ&¨Õ-ð#ñ  �ð#ñ ˜$•;ð#ñ 
‰u× Ñ ¡%©×(9Ñ(9¹5×;LÑ;LÐ(LÕ"MÐPTÕ"TÐTÕ	Uñ#r4   c                ó  € TpV P                  V4      pV P                  ! RR VRVRVRVRVRV/VB w  rV P                  V4      pW�,           pTpV P                  V4      pV P	                  V4      pV P                  V4      pW�,           pV# )rD   r]  r=  rÈ   r¾  rà  rz  )rÚ  rÙ  rÜ  rÛ  r‚  rÝ  )
r>   rD   r]  r=  rÈ   r¾  rà  rµ   Úresidualrp  s
   &&&&&&&,  r1   rR   ÚGlm4vTextDecoderLayer.forward…  sË   € ð !ˆà×,Ñ,¨]Ó;ˆð  Ÿ>š>ñ 
Ø'ð
à 3ð
ð *ð
ð &ð	
ð
 ,ð
ð  ð
ð ñ
Ñˆð ×5Ñ5°mÓDˆØ Õ0ˆð !ˆØ×5Ñ5°mÓDˆØŸ™ Ó/ˆØ×/Ñ/°Ó>ˆØ Õ0ˆàÐr4   )r?   rÚ  r‚  rÛ  rÝ  rÜ  rÙ  )NNNNFr‡  r`   s   @@r1   rÕ  rÕ  z  s/   ù‡ € ÷\ó \ð ÷#ñ #ó ÷#ð #r4   rÕ  c                   ó4   a € ] tR tRt o RtRtV 3R ltRtV tR# )ÚGlm4vModelOutputWithPasti¬  úþ
rope_deltas (`torch.LongTensor` of shape `(batch_size, )`, *optional*):
    The rope index difference between sequence length and multimodal rope.
    The attribute is deprecated and will be removed in v5.20, use `model.base_model.rope_deltas` instead.
Nc                óH   <€ V ^8„  d   Qh/ S[ P                  R,          ;R&   # ©r+   NÚrope_deltas©r:   rá  )r/   r0   s   "€r1   r2   Ú%Glm4vModelOutputWithPast.__annotate__¬  ó   ø‡ ‚ ñ ×!Ñ! DÕ(Ñ/ò r4   rz  ©	rY   rZ   r[   r\   rØ   rê  Ú__annotate_func__r]   r^   ©r0   s   @r1   ræ  ræ  ¬  ó   ø‡ € ñð ,0€K÷ ƒ r4   ræ  c                   óV   a € ] tR tRt o RtR
tRtRR.tR.tRt	Rt
RtRtV 3R ltRtV tR	# )ÚGlm4vPreTrainedModeli¸  ÚmodelTrÕ  rw  r¾  c                ó&   <€ V ^8„  d   Qh/ S[ ;R&   # r™   )r$   )r/   r0   s   "€r1   r2   Ú!Glm4vPreTrainedModel.__annotate__¸  s   ø‡ ‚ áÑò r4   rz  N)ÚimageÚvideoÚtext)rY   rZ   r[   r\   Úbase_model_prefixÚinput_modalitiesÚsupports_gradient_checkpointingÚ_no_split_modulesÚ_skip_keys_device_placementÚ_supports_flash_attnÚ_supports_sdpaÚ_can_compile_fullgraphÚ_supports_attention_backendrï  r]   r^   rð  s   @r1   ró  ró  ¸  sL   ø‡ € ð  ÐØ1ÐØ&*Ð#Ø0Ð2DÐEÐØ#4Ð"5ÐØÐØ€Nà!ÐØ"&Ð÷ ƒ r4   ró  c                   ó�   a a€ ] tR tRt oRtR.tR]R]/tV3R lV 3R llt	]
]]V3R lR l4       4       4       tV3R	 ltR
tVtV ;t# )ÚGlm4vVisionModeliÇ  rw  rD   Ú
attentionsc                ó   <€ V ^8„  d   QhRR/# ry  rz  )r/   r0   s   "€r1   r2   ÚGlm4vVisionModel.__annotate__Ð  s   ø€ ÷ ñ  $ñ r4   c                ó  <€ \         SV `  V4       VP                  V n        VP                  V n        \	        V4      V n        \        V4      V n        \        V4      V n	        \        P                  ! \        VP                  4       Uu. uF  p\        V4      NK  	  up4      V n        \!        VP"                  VP$                  VP&                  R 7      V n        \+        VP,                  VP.                  R7      V n        \        P2                  ! VP,                  VP"                  VP                  VP                  R7      V n        \+        VP,                  VP.                  R7      V n        RV n        V P;                  4        R# u upi ))r·   rÞ   rp   r}  )r†   Úout_channelsr‚   rƒ   FN)r6   r7   Úspatial_merge_sizer„   rê   r	  r|   Úpatch_embedr“   Úrotary_pos_embr8   Ú
ModuleListÚrangeÚdepthrw  ÚblocksrÜ   rj   rk   rp   Úmergerr)   r?   r~  Úpost_conv_layernormÚConv2dÚ
downsampleÚpost_layernormÚgradient_checkpointingÚ	post_init)r>   rr   rp  r@   s   && €r1   r7   ÚGlm4vVisionModel.__init__Ð  s-  ø€ Ü‰Ñ˜Ô Ø"(×";Ñ";ˆÔØ ×+Ñ+ˆŒä/°Ó7ˆŒÜ0°Ó8ˆÔä8¸Ó@ˆÔä—m’mÄuÈVÏ\É\ÔGZÓ$[ÑGZÀ!Ô%5°fÖ%=ÑGZÑ$[Ó\ˆŒÜ,Ø×&Ñ&°F×4LÑ4LÐY_×YjÑYjô
ˆŒô $0°×0BÑ0BÈ×H[ÑH[Ô#\ˆÔ ÜŸ)š)Ø×*Ñ*Ø×/Ñ/Ø×1Ñ1Ø×,Ñ,ô	
ˆŒô +¨6×+=Ñ+=À6×CVÑCVÔWˆÔà&+ˆÔ#Ø�‰Öùò %\s   Â
Fc          	      óz   <€ V ^8„  d   QhRS[ P                  RS[ P                  RS[S[,          RS[S[,          /# )r+   rD   Úgrid_thwrµ   r-   )r:   rF   r   r   rU   r   )r/   r0   s   "€r1   r2   r  î  sA   ø€ ÷ 2
ñ 2
Ù"Ÿ\™\ð2
Ù5:·\±\ð2
ÙMSÑTfÕMgð2
á	Ñ+Õ	+ñ2
r4   c           
     ó>  € \        W P                  VR7      p\        W P                  VR7      w  rVV P	                  V4      pV P                  V4      pV P                  W4      pVR,          VRR ,
          pV P                  VVVVR	,          P                  VP                  4      VR
,          P                  VP                  4      4      pV P                   F  p	V	! V3RVRVRV/VB pK  	  V P                  V4      pVP                  RV P                  V P                  VP                  R,          4      pVP                  ^ ^^^4      pV P                  V4      P                  RV P                  P                   4      pV P#                  V4      p
\%        VV
R7      # )a$  
hidden_states (`torch.Tensor` of shape `(seq_len, hidden_size)`):
    The final hidden states of the model.
grid_thw (`torch.Tensor` of shape `(num_images_or_videos, 3)`):
    The temporal, height and width of feature shape of each image in LLM.

Returns:
    `torch.Tensor`: hidden_states.
r`  rf  Nr\  r^  r]  )Úlast_hidden_stateÚpooler_outputrI   rÏ   rÑ   )r#   r
  r"   rr   r  r  r  r	  rK   r”   r  r  r�   rV   r  r  rj   r  r   )r>   rD   r  rµ   rÈ   r\  r^  r]  ÚseqlensÚblkÚmerged_hidden_statess   &&&,       r1   rR   ÚGlm4vVisionModel.forwardë  sž  € ô /¨x×9PÑ9PÐY_Ô`ˆÜ!=¸hÏÉÐ\bÔ!cÑˆ
à×(Ñ(¨Ó7ˆØ×0Ñ0°Ó?ˆØ"×1Ñ1°-ÓNÐà˜R•. :¨c¨r ?Õ2ˆØŸ™ØØØØ˜Õ×!Ñ! -×"6Ñ"6Ó7Ø˜Õ×!Ñ! -×"6Ñ"6Ó7ó
ˆð —;”;ˆCÙØñà%ðð &ðð %8ð	ð
 ñŠMñ ð ×+Ñ+¨MÓ:ˆà%×*Ñ*Ø�×'Ñ'¨×)@Ñ)@À-×BUÑBUÐVXÕBYó
ˆð &×-Ñ-¨a°°A°qÓ9ˆØŸ™¨Ó6×;Ñ;¸BÀÇÁ×@[Ñ@[Ó\ˆà#Ÿ{™{¨=Ó9Ðä)Ø+Ø.ô
ð 	
r4   c                ó&   <€ V ^8„  d   Qh/ S[ ;R&   # r™   r   )r/   r0   s   "€r1   r2   r  Ç  s   ø‡ ‚ ÙÑò r4   )r  r  r	  r  r  r  r„   r  r  r  r
  )r÷  rø  )rY   rZ   r[   r\   rû  rý  rw  rP  Ú_can_record_outputsr7   r    r!   r   rR   rï  r]   r^   r_   r`   s   @@r1   r  r  Ç  s^   ù‡ € à)ÐØ+Ð,ÐàÐ)ØÐ*ðÐ÷
ó ð6  ØØ÷2
ó ó ó  ð2
÷O … r4   r  c                   óŽ   a a€ ] tR tRt oR
tR]R]/tV3R lV 3R llt]	]
]RV3R lR ll4       4       4       tV3R ltR	tVtV ;t# )ÚGlm4vTextModeli#  rD   r  c                ó    <€ V ^8„  d   QhRS[ /# r™   r‹  )r/   r0   s   "€r1   r2   ÚGlm4vTextModel.__annotate__,  s   ø€ ÷ ñ ™ñ r4   c           	     ó  <€ \         SV `  V4       VP                  V n        VP                  V n        \
        P                  ! VP                  VP                  V P                  4      V n        \
        P                  ! \        VP                  4       Uu. uF  p\        W4      NK  	  up4      V n        \        VP                  VP                  R 7      V n        \#        VR7      V n        RV n        V P)                  4        R# u upi )r}  ©rr   FN)r6   r7   Úpad_token_idÚpadding_idxÚ
vocab_sizer8   rò   r?   Úembed_tokensr  r  Únum_hidden_layersrÕ  Úlayersr)   r~  Únormr‰  Ú
rotary_embr  r  r»  s   && €r1   r7   ÚGlm4vTextModel.__init__,  sÈ   ø€ Ü‰Ñ˜Ô Ø!×.Ñ.ˆÔØ ×+Ñ+ˆŒäŸLšL¨×):Ñ):¸F×<NÑ<NÐPT×P`ÑP`ÓaˆÔÜ—m’mÜGLÈV×MeÑMeÔGfÓgÑGf¸)Ô" 6Ö5ÑGfÑgó
ˆŒô ! ×!3Ñ!3¸×9LÑ9LÔMˆŒ	Ü2¸&ÔAˆŒà&+ˆÔ#à�‰Öùò hs   ÂDc                ó  <€ V ^8„  d   QhRS[ P                  R,          RS[ P                  R,          RS[ P                  R,          RS[R,          RS[ P                  R,          RS[R,          RS[S[,          R	S[S[	,          /# )
r+   Ú	input_idsNr=  rÈ   r¾  Úinputs_embedsrà  rµ   r-   )
r:   rá  rF   r   rÍ  re   r   r   rU   r   )r/   r0   s   "€r1   r2   r'  ?  s£   ø€ ÷ J
ñ J
á×#Ñ# dÕ*ðJ
ñ Ÿ™ tÕ+ðJ
ñ ×&Ñ&¨Õ-ð	J
ñ
  �ðJ
ñ ×(Ñ(¨4Õ/ðJ
ñ ˜$•;ðJ
ñ Ñ-Õ.ðJ
ñ 
Ñ(Õ	(ñJ
r4   c                óî  € VR J VR J,          '       d   \        R4      hV'       d?   Vf;   \        P                  P                  4       '       g   \	        V P
                  R7      pVf   V P                  V4      pVf‡   Ve   VP                  4       M^ p\        P                  ! VP                  ^,          VP                  R7      V,           pVP                  ^^R4      P                  ^VP                  ^ ,          R4      pM<VP                  ^8X  d,   VR,          P                  ^VP                  ^ ,          R4      pVP                  ^8X  d,   VP                  ^ ,          ^8X  d   V^ ,          p	VR,          pMR p	RV P
                  RVRVRVR	V	/p
\        R/ V
B pTpV P                  WÃR
7      pV P                    F  pV! V3RVR	V	RVRV/VB pTpK  	  V P#                  V4      p\%        VVR7      # )Nú:You must specify exactly one of input_ids or inputs_embedsr)  rù   rf  rr   r5  r=  r¾  rÈ   )rÈ   r]  )r  r¾  rI   ©N.rz  )r¢   r:   ÚjitÚ
is_tracingr	   rr   r-  Úget_seq_lengthr´   rV   r”   r�   r2  Úndimr   r1  r/  r0  r   )r>   r4  r=  rÈ   r¾  r5  rà  rµ   Úpast_seen_tokensÚtext_position_idsÚmask_kwargsÚcausal_maskrD   r]  Údecoder_layerÚlayer_outputss   &&&&&&&,        r1   rR   ÚGlm4vTextModel.forward<  s  € ð ˜Ð -°tÐ";×<Ô<ÜÐYÓZÐZ÷ ˜Ò0¼¿¹×9MÑ9M×9OÒ9OÜ*°$·+±+Ô>ˆOàÒ Ø ×-Ñ-¨iÓ8ˆMð ÒØCRÒC^˜×=Ñ=Ô?ÐdeÐÜ Ÿ<š<¨×(;Ñ(;¸AÕ(>À}×G[ÑG[Ô\Ð_oÕoˆLØ'×,Ñ,¨Q°°2Ó6×=Ñ=¸aÀ×ATÑATÐUVÕAWÐY[Ó\‰LØ×Ñ !Ô#Ø'¨	Õ2×9Ñ9¸!¸\×=OÑ=OÐPQÕ=RÐTVÓWˆLð ×Ñ Ô! l×&8Ñ&8¸Õ&;¸qÔ&@Ø ,¨Q¥ÐØ'¨Õ+‰Lð !%Ðð �d—k‘kØ˜]Ø˜nØ˜ØÐ-ð
ˆô )Ñ7¨;Ñ7ˆà%ˆØ"Ÿo™o¨m˜oÓWÐà!Ÿ[œ[ˆMÙ)Øñà*ðð /ðð !0ð	ð
 %8ðð ñˆMð *ŠMñ )ð Ÿ	™	 -Ó0ˆä&Ø+Ø+ô
ð 	
r4   c                ó&   <€ V ^8„  d   Qh/ S[ ;R&   # r™   r‹  )r/   r0   s   "€r1   r2   r'  #  s   ø‡ ‚ áÑò r4   )r-  r  r/  r0  r+  r1  r,  )rù  )NNNNNN)rY   rZ   r[   r\   rû  rÕ  r±  r#  r7   r   r    r!   rR   rï  r]   r^   r_   r`   s   @@r1   r%  r%  #  s^   ù‡ € ð !ÐàÐ.ØÐ(ðÐ÷
ó ð  ØØ÷J
ñ J
ó ó  ó ðJ
÷9 … r4   r%  c                   óH  a a€ ] tR tRt oRtRtRR.tV 3R ltRV3R lR lltRV3R	 lR
 llt	]
! RR7      ]]RV3R lR ll4       4       4       t]
! RR7      ]]RV3R lR ll4       4       4       tRV3R lR lltRV3R lR llt]]RV3R lR ll4       4       tRtVtV ;t# )Ú
Glm4vModeliŒ  rô  FrÕ  rw  c                óä   <€ \         SV `  V4       \        P                  VP                  4      V n        \        P                  VP                  4      V n        R V n	        V P                  4        R # ru   )r6   r7   r  Ú_from_configÚvision_configÚvisualr%  Útext_configÚlanguage_modelrê  r  rõ   s   &&€r1   r7   ÚGlm4vModel.__init__“  sU   ø€ Ü‰Ñ˜Ô Ü&×3Ñ3°F×4HÑ4HÓIˆŒÜ,×9Ñ9¸&×:LÑ:LÓMˆÔØˆÔð 	�‰Ör4   c                ó®   <€ V ^8„  d   QhRS[ RS[S[ S[ S[ 3,          S[P                  ,          RS[ RS[ RS[ RS[S[P
                  ,          R,          /# )r+   Ústart_positionr  Útemp_merge_sizer
  Útime_intervalr”   N)rß   rþ   r:   rF   rÃ   r”   )r/   r0   s   "€r1   r2   ÚGlm4vModel.__annotate__œ  si   ø€ ÷ 2#ñ 2#áð2#ñ ‘s™C¡�}Õ%©¯©Õ4ð2#ñ ð	2#ñ
  ð2#ñ ð2#ñ ‘e—l‘lÕ" TÕ)ñ2#r4   c                ó"  € V^ ,          P                  4       V,          V^,          P                  4       V,          V^,          P                  4       V,          r˜p\        P                  ! WvR7      V,          p
\        P                  ! W†R7      V,           p\        P                  ! W–R7      V,           p\        P                  ! W«VRR7      w  rÞp\        P                  ! WÞV.^ R7      P                  ^R4      pV^ ;;,          V,          uu&   V# )aâ  
Compute 3D positional indices for vision tokens derived from a single image or video input.

The positions are generated from the input grid defined by temporal (T), height (H), and
width (W) dimensions. Temporal and spatial dimensions can be downscaled according to the
merge sizes used in the vision backbone. The resulting positions are offset by `start_position`.

Args:
    start_position (`int`):
        Offset added to all computed positional indices.
    grid_thw (`Sequence[int]` or `torch.Tensor` of shape `(3,)`):
        The (T, H, W) grid representing the feature layout of the current image or video after patch embedding.
    temp_merge_size (`int`, *optional*):
        Factor by which the temporal dimension is reduced in the backbone. The temporal grid size is divided
        by this value. Defaults to 1.
    spatial_merge_size (`int`, *optional*):
        Factor by which the spatial dimensions (H and W) are reduced in the backbone. Both H and W are divided
        by this value. Defaults to 1.
    time_interval (`int`, *optional*):
        Spacing factor applied between consecutive temporal position indices.Defaults to 1.
    device (`str` or `torch.device`, *optional*):
        Device on which the resulting tensor is allocated. If `None`, uses the current default device.

Returns:
    torch.LongTensor of shape (3, sequence_length):
        Positional indices for temporal, height, and width dimensions,
        flattened into sequence form and offset by `start_position`.
rù   Úij)ÚindexingrÎ   rI   )Úitemr:   r´   Úmeshgridr  r3  )r>   rO  r  rP  r
  rQ  r”   Ú
llm_grid_tÚ
llm_grid_hÚ
llm_grid_wÚposition_temporalÚposition_heightÚposition_widthÚT_gridÚH_gridÚW_gridÚvision_position_idss   &&&&&&&          r1   r#   Ú"Glm4vModel.get_vision_position_idsœ  sÞ   € ðL �Q�K×ÑÓ /Õ1Ø�Q�K×ÑÓÐ"4Õ4Ø�Q�K×ÑÓÐ"4Õ4ð !+ˆ
ô "ŸLšL¨ÔCÀmÕSÐÜŸ,š, zÔAÀNÕRˆÜŸš jÔ@À>ÕQˆä!&§¢Ð0AÐTbÐmqÔ!rÑˆ˜Ü#Ÿkšk¨6¸6Ð*BÈÔJ×RÑRÐSTÐVXÓYÐØ˜A× .Õ0ÓØ"Ð"r4   c                ó
  <€ V ^8„  d   QhRS[ P                  RS[ P                  RS[ P                  R,          RS[ P                  R,          RS[ P                  R,          RS[S[ P                  S[ P                  3,          /# )r+   r4  Úmm_token_type_idsÚimage_grid_thwNÚvideo_grid_thwr=  r-   )r:   rá  Ú	IntTensorrF   rU   )r/   r0   s   "€r1   r2   rR  Ð  sŠ   ø€ ÷ [3ñ [3á×#Ñ#ð[3ñ !Ÿ?™?ð[3ñ ×(Ñ(¨4Õ/ð	[3ñ
 ×(Ñ(¨4Õ/ð[3ñ Ÿ™ tÕ+ð[3ñ 
‰u�|‰|™UŸ\™\Ð)Õ	*ñ[3r4   c           
     óì  € Ve%   \         P                  ! WDR,          ^ R7      p^VR&   V P                  P                  P                  p. p\         P
                  ! ^VP                  ^ ,          VP                  ^,          VP                  VP                  R7      p	^Ve   \        V4      MR^Ve   \        V4      MR/p
\        V4       EFs  w  r¼W+,          pVe;   WÅV,          P                  4       ,          pWÕV,          P                  4       ,          p. p\        P                  ! \        VP                  4       4      R 4       FL  w  pp\        V4      pV^ ,          ^ ,          pVR,          ^ ,          ^,           pVP!                  VVV34       KN  	  ^ p. pV Fä  w  pppV^ 8X  dm   VV,
          pVP!                  \         P"                  ! VVP                  R7      P%                  ^R4      P'                  ^R4      V,           4       VV,          pKz  \)        V
V,          4      pV P+                  VV^WqP                  R7      pVP!                  V4       V\-        V^,          V^,          4      V,          ,          pKæ  	  \         P.                  ! V^R7      P1                  ^R4      pVe7   VP3                  V	P                  4      V	RWµV,          P                  4       3&   M VP3                  V	P                  4      V	RV3&   VP!                  VP-                  4       ^,           \5        V4      ,
          4       EKv  	  \         P6                  ! W�P                  R7      P9                  ^4      pW˜3# )	a9  
Difference from Qwen2VL/Qwen2.5VL's get_rope_index:
- GLM4V uses timestamps to separate each video frame, so the video_grid_thw should also be split too.

Args:
    input_ids (`torch.LongTensor` of shape `(batch_size, sequence_length)`):
        Indices of input sequence tokens in the vocabulary. Padding will be ignored by default should you provide
        it.
    mm_token_type_ids (`torch.IntTensor` of shape `(batch_size, sequence_length)`):
        Token type ids matching each modality to a different value in the input sequence, i.e. text (0), image (1), video (2).
    image_grid_thw (`torch.LongTensor` of shape `(num_images, 3)`, *optional*):
        The temporal, height and width of feature shape of each image in LLM.
    video_grid_thw (`torch.LongTensor` of shape `(num_videos, 3)`, *optional*):
        The temporal, height and width of feature shape of each video in LLM.
    attention_mask (`torch.Tensor` of shape `(batch_size, sequence_length)`, *optional*):
        Mask to avoid performing attention on padding token indices. Mask values selected in `[0, 1]`:

        - 1 for tokens that are **not masked**,
        - 0 for tokens that are **masked**.

Returns:
    position_ids (`torch.LongTensor` of shape `(3, batch_size, sequence_length)`)
    mrope_position_deltas (`torch.Tensor` of shape `(batch_size)`)
NrÐ   rÎ   ©rJ   r”   c                 ó   € V ^,          # ©r�   rz  )rÇ   s   &r1   Ú<lambda>Ú+Glm4vModel.get_rope_index.<locals>.<lambda>  s   € Ð`aÐbcÖ`dr4   rù   rÏ   rI   )r:   r¡  rr   rI  r
  ÚzerosrV   rJ   r”   Úiterr   re   Ú	itertoolsÚgroupbyrk  rþ   Úappendr´   r�   r2  Únextr#   ÚmaxrÒ   r3  rK   Úlenrÿ   r  )r>   r4  rd  re  rf  r=  rµ   r
  Úmrope_position_deltasrÈ   Ú
grid_itersÚ	batch_idxÚcurrent_input_idsÚinput_token_typeÚinput_type_groupr;  ÚgroupÚstart_indexÚ	end_indexÚcurrent_posÚllm_pos_ids_listÚmodality_typeÚ	start_idxÚend_idxÚtext_lenr  ra  Úllm_positionss   &&&&&&,                     r1   Úget_rope_indexÚGlm4vModel.get_rope_indexÐ  s#  € ðF Ò%Ü"×4Ò4°^ÐTXÕEYÐ_`ÔaˆNØ#$ˆN˜4Ñ Ø!Ÿ[™[×6Ñ6×IÑIÐà "ÐÜ—{’{ØØ�O‰O˜AÕØ�O‰O˜AÕØ—/‘/Ø×#Ñ#ô
ˆð  ~Ò'AŒt�NÔ#ÀtØ ~Ò'AŒt�NÔ#Àtð
ˆ
ô
 -6°i×,@Ñ(ˆIØ0Õ;ÐØÒ)Ø$5ÀYÕ6O×6TÑ6TÓ6VÕ$WÐ!Ø#3À9Õ4M×4RÑ4RÓ4TÕ#UÐ à!ÐÜ'×/Ò/´	Ð:J×:QÑ:QÓ:SÓ0TÑVdÖe‘
��UÜ˜U›�Ø# A�h q�k�Ø! "�I a�L¨1Õ,�	Ø ×'Ñ'¨¨k¸9Ð(EÖFñ	 fð ˆKØ!ÐÛ5EÑ1�˜y¨'à  AÔ%Ø&¨Õ2�HØ$×+Ñ+ÜŸš X°i×6FÑ6FÔG×LÑLÈQÐPRÓS×ZÑZÐ[\Ð^`ÓaÐdoÕoôð   8Õ+’Kô  $ J¨}Õ$=Ó>�HØ*.×*FÑ*FØ# X¨qÐ2D×M]ÑM]ð +Gó +Ð'ð %×+Ñ+Ð,?Ô@Ø¤3 x°¥{°H¸QµKÓ#@ÐDVÕ#VÕV’Kñ 6Fô  "ŸIšIÐ&6¸AÔ>×FÑFÀqÈ"ÓMˆMØÒ)ØO\×O_ÑO_Ð`l×`sÑ`sÓOt�˜Q 	¸)Õ+D×+IÑ+IÓ+KÐKÒLà-:×-=Ñ-=¸l×>QÑ>QÓ-R�˜Q 	˜\Ñ*Ø!×(Ñ(¨×):Ñ):Ó)<¸qÕ)@Ä3ÐGXÓCYÕ)Y×ZñI -AôJ !&§¢Ð-B×K[ÑK[Ô \× fÑ fÐghÓ iÐØÐ2Ð2r4   rø  )Úmodalityc          	      óˆ   <€ V ^8„  d   QhRS[ P                  RS[ P                  R,          RS[S[,          RS[S[,          /# ©r+   Úpixel_values_videosrf  Nrµ   r-   ©r:   rÍ  rá  r   r   rU   r   )r/   r0   s   "€r1   r2   rR  0  sP   ø€ ÷ ñ á"×.Ñ.ðñ ×(Ñ(¨4Õ/ðñ Ñ+Õ,ð	ñ
 
Ñ+Õ	+ñr4   c                ó  € VP                  V P                  P                  4      pVR,          pVR,          p\        P                  ! WT^ R7      pVP                  VP                  ^ ,          ^4      p\        P                  ! Wv.^R7      pV P                  ! V3RVRR/VB p	VP                  R4      V P                  P                  ^,          ,          P                  4       p
\        P                  ! V	P                  V
4      pW¹n        V	# )rÐ   rÎ   r  Úreturn_dictTrÏ   )rÐ   rf  rI   )rÂ   rJ  rJ   r:   r¡  Únew_onesrV   rÒ   Úprodr
  rk  rj  r  )r>   r‹  rf  rµ   ÚtÚhwÚflattened_hwÚprefix_onesÚflattened_video_grid_thwÚvision_outputsÚsplit_sizesÚvideo_embedss   &&&,        r1   Úget_video_featuresÚGlm4vModel.get_video_features-  sñ   € ð 2×6Ñ6°t·{±{×7HÑ7HÓIÐà˜4Õ ˆØ˜EÕ"ˆä×.Ò.¨r¸!Ô<ˆØ$×-Ñ-¨l×.@Ñ.@ÀÕ.CÀQÓGˆÜ#(§9¢9¨kÐ-HÈaÔ#PÐ ØŸšØñ
Ø*Bð
ØPTð
ØX^ñ
ˆð &×*Ñ*¨2Ó.°$·+±+×2PÑ2PÐRSÕ2SÕS×[Ñ[Ó]ˆÜ—{’{ >×#?Ñ#?ÀÓMˆØ'3Ô$àÐr4   r÷  c          	      óˆ   <€ V ^8„  d   QhRS[ P                  RS[ P                  R,          RS[S[,          RS[S[,          /# ©r+   Úpixel_valuesre  Nrµ   r-   rŒ  )r/   r0   s   "€r1   r2   rR  J  sP   ø€ ÷ ñ á×'Ñ'ðñ ×(Ñ(¨4Õ/ðñ Ñ+Õ,ð	ñ
 
Ñ+Õ	+ñr4   c                óJ  € VP                  V P                  P                  4      pV P                  ! V3R V/VB pVP                  R4      V P                  P                  ^,          ,          P                  4       p\        P                  ! VP                  V4      pWdn        V# )r  rI   )	rÂ   rJ  rJ   r�  r
  rk  r:   rj  r  )r>   r�  re  rµ   r–  r—  Úimage_embedss   &&&,   r1   Úget_image_featuresÚGlm4vModel.get_image_featuresG  s†   € ð $×(Ñ(¨¯©×):Ñ):Ó;ˆØŸš \ÑU¸NÐUÈfÑUˆØ%×*Ñ*¨2Ó.°$·+±+×2PÑ2PÐRSÕ2SÕS×[Ñ[Ó]ˆÜ—{’{ >×#?Ñ#?ÀÓMˆØ'3Ô$àÐr4   c          	      óž   <€ V ^8„  d   QhRS[ P                  RS[ P                  RS[ P                  R,          RS[ P                  R,          /# )r+   r4  r5  Úimage_featuresNÚvideo_features)r:   rá  rÍ  )r/   r0   s   "€r1   r2   rR  X  sU   ø€ ÷ (6ñ (6á×#Ñ#ð(6ñ ×(Ñ(ð(6ñ ×)Ñ)¨DÕ0ð	(6ñ
 ×)Ñ)¨DÕ0ñ(6r4   c           
     óJ  € VfÜ   W P                  4       ! \        P                  ! RV P                  P                  \        P
                  VP                  R7      4      8H  pVP                  R4      pW P                  4       ! \        P                  ! RV P                  P                  \        P
                  VP                  R7      4      8H  pVP                  R4      pM0WP                  P                  8H  pWP                  P                  8H  pVP                  4       pVP                  R4      P                  VP                  4      pVeL   \        WrP                  R,          ,          VP                  4       8H  RV RVP                  ^ ,           24       VP                  4       pVP                  R4      P                  VP                  4      pVeL   \        W‚P                  R,          ,          VP                  4       8H  RV RVP                  ^ ,           24       WV3# )z×
Obtains multimodal placeholder mask from `input_ids` or `inputs_embeds`, and checks that the placeholder token count is
equal to the length of multimodal features. If the lengths are different, an error is raised.
ri  z6Image features and image tokens do not match, tokens: z, features: z6Video features and video tokens do not match, tokens: rz  rI   )Úget_input_embeddingsr:   Úfullrr   Úimage_token_idr   r”   ÚallÚvideo_token_idr  r  rK   r   rV   Únumel)	r>   r4  r5  r£  r¤  Úspecial_image_maskÚspecial_video_maskÚn_image_tokensÚn_video_tokenss	   &&&&&    r1   Úget_placeholder_maskÚGlm4vModel.get_placeholder_maskX  sß  € ð ÒØ!.×2KÑ2KÔ2MÜ—
’
˜2˜tŸ{™{×9Ñ9ÄÇÁÐTa×ThÑThÔió3ñ "Ðð "4×!7Ñ!7¸Ó!;ÐØ!.×2KÑ2KÔ2MÜ—
’
˜2˜tŸ{™{×9Ñ9ÄÇÁÐTa×ThÑThÔió3ñ "Ðð "4×!7Ñ!7¸Ó!;Ñð "+¯k©k×.HÑ.HÑ!HÐØ!*¯k©k×.HÑ.HÑ!HÐà+×/Ñ/Ó1ˆØ/×9Ñ9¸"Ó=×@Ñ@À×AUÑAUÓVÐØÒ%Ü"Ø×!4Ñ!4°RÕ!8Õ8¸N×<PÑ<PÓ<RÑRØHÈÐHXÐXdÐes×eyÑeyÐz{Õe|Ðd}Ð~ôð
 ,×/Ñ/Ó1ˆØ/×9Ñ9¸"Ó=×@Ñ@À×AUÑAUÓVÐØÒ%Ü"Ø×!4Ñ!4°RÕ!8Õ8¸N×<PÑ<PÓ<RÑRØHÈÐHXÐXdÐes×eyÑeyÐz{Õe|Ðd}Ð~ôð "Ð5Ð5r4   c                óZ  <€ V ^8„  d   QhRS[ P                  R,          RS[ P                  R,          RS[ P                  R,          RS[ P                  R,          RS[ P                  R,          RS[ P                  R,          RS[ P                  R,          R	S[ P                  R,          /# )
r+   r4  Nr5  re  rf  r=  r¾  rd  r-   )r:   rF   rg  )r/   r0   s   "€r1   r2   rR  ‚  s£   ø€ ÷ /ñ /á—<‘< $Õ&ð/ñ —|‘| dÕ*ð/ñ Ÿ™ tÕ+ð	/ñ
 Ÿ™ tÕ+ð/ñ Ÿ™ tÕ+ð/ñ Ÿ™¨Õ,ð/ñ !Ÿ?™?¨TÕ1ð/ñ 
�‰˜Õ	ñ/r4   c                ó  € Vf   ^ MVP                  4       pVR J;'       g    VR Jp	V	'       d   Vf   Ve   \        R4      hVR J;'       d    VR J;'       d    T	p
V
'       d6   V P                  e   V^ 8X  d!   V P                  VVVVVR7      w  r¼WÀn        V# V P                  EeV   V^ 8”  g   VEfJ   VP                  w  rÞpVez   VP                  4       P                  R4      ^,
          pVP                  V^ 8H  ^ 4      pVP                  ^VR4      P                  ^^^4      P                  VP                  4      pMZ\        P                  ! WˆV,           4      pVP                  ^^R4      P                  ^VR4      P                  VP                  4      pV P                  P                  WÐP                  P                  ^ ,          ,          ^ R7      pVVP                  VP                  R7      ,           pV# R pV# )Na  Multimodal data was passed (via `image_grid_thw` or `video_grid_thw`) but `mm_token_type_ids` is missing. Please pass `mm_token_type_ids` to the model so that multimodal RoPE (M-RoPE) can be computed correctly. `mm_token_type_ids` is returned by the processor alongside `input_ids`.)re  rf  r=  rd  rÎ   rù   rI   )r;  r¢   rê  r†  rV   r   r  Úmasked_fillr�   ÚrepeatrK   r”   r:   r´   r2  r¡  )r>   r4  r5  re  rf  r=  r¾  rd  Úpast_key_values_lengthÚhas_multimodalÚcan_compute_mroperÈ   rê  Ú
batch_sizerm  rp  Údeltas   &&&&&&&&         r1   Úcompute_3d_position_idsÚ"Glm4vModel.compute_3d_position_ids‚  s  € ð '6Ò&=¡À?×CaÑCaÓCcÐØ'¨tÐ3×QÐQ°~ÈTÐ7QˆßÐ/Ò7¸IÒ<QÜðnóð ð
 &¨TÐ1×fÐfÐ6GÈtÐ6S×fÐfÐXfÐç $×"2Ñ"2Ò":Ð>TÐXYÔ>YØ(,×(;Ñ(;ØØ-Ø-Ø-Ø"3ð )<ó )Ñ%ˆLð  +Ôð& Ðð ×ÑÓ)Ð/EÈÔ/IÈYÓM^Ø(5×(;Ñ(;Ñ%ˆJ AØÒ)Ø-×2Ñ2Ó4×;Ñ;¸BÓ?À!ÕC�Ø+×7Ñ7¸È!Ñ8KÈQÓO�Ø+×0Ñ0°°JÀÓC×JÑJÈ1ÈaÐQRÓS×VÑVÐWd×WkÑWkÓl‘ä$Ÿ|š|Ð,BÐ]gÕDgÓh�Ø+×0Ñ0°°A°rÓ:×AÑAÀ!ÀZÐQSÓT×WÑWÐXe×XlÑXlÓm�Ø×$Ñ$×6Ñ6°z×EUÑEU×E[ÑE[Ð\]ÕE^Õ7^ÐdeÐ6ÓfˆEØ'¨%¯(©(¸-×:NÑ:N¨(Ó*OÕOˆLð Ðð  ˆLØÐr4   c                óÂ  <€ V ^8„  d   QhRS[ P                  R,          RS[ P                  R,          RS[ P                  R,          RS[R,          RS[ P                  R,          RS[ P                  R,          RS[ P                  R,          R	S[ P                  R,          R
S[ P                  R,          RS[ P
                  R,          RS[S[,          RS[S[	,          /# )r+   r4  Nr=  rÈ   r¾  r5  r�  r‹  re  rf  rd  rµ   r-   )
r:   rá  rF   r   rÍ  rg  r   r   rU   ræ  )r/   r0   s   "€r1   r2   rR  µ  sð   ø€ ÷ ;
ñ ;
á×#Ñ# dÕ*ð;
ñ Ÿ™ tÕ+ð;
ñ ×&Ñ&¨Õ-ð	;
ñ
  �ð;
ñ ×(Ñ(¨4Õ/ð;
ñ —l‘l TÕ)ð;
ñ #×.Ñ.°Õ5ð;
ñ ×(Ñ(¨4Õ/ð;
ñ ×(Ñ(¨4Õ/ð;
ñ !Ÿ?™?¨TÕ1ð;
ñ Ñ+Õ,ð;
ñ 
Ñ)Õ	)ñ;
r4   c                ó,  € VR J VR J,          '       d   \        R4      hVf   V P                  4       ! V4      pVe‚   V P                  ! Wh3RR/VB P                  p\        P
                  ! V^ R7      P                  VP                  VP                  4      pV P                  WVR7      w  rÞVP                  WÜ4      pVe„   V P                  ! Wy3RR/VB P                  p\        P
                  ! V^ R7      P                  VP                  VP                  4      pV P                  WVR7      w  ppVP                  VV4      pVf   V P                  VVV	VVVV
R7      pV P                  ! RRR R	VR
VRVRV/VB p\        R/ VBRV P                  /B # )Nr7  rŽ  TrÎ   )r£  )r¤  )r4  re  rf  r5  r=  r¾  rd  r4  rÈ   r=  r¾  r5  rê  rz  )r¢   r¦  r   r  r:   rÒ   rK   r”   rJ   r°  Úmasked_scatterr™  r»  rL  ræ  rê  )r>   r4  r=  rÈ   r¾  r5  r�  r‹  re  rf  rd  rµ   rŸ  Ú
image_maskrp  r˜  Ú
video_maskÚoutputss   &&&&&&&&&&&,      r1   rR   ÚGlm4vModel.forward³  së  € ð  ˜Ð -°tÐ";×<Ô<ÜÐYÓZÐZàÒ Ø ×5Ñ5Ô7¸	ÓBˆMàÒ#Ø×2Ò2ØñØ:>ðØBHñç‰mð ô !Ÿ9š9 \°qÔ9×<Ñ<¸]×=QÑ=QÐS`×SfÑSfÓgˆLØ ×5Ñ5°iÐ_kÐ5Ól‰MˆJØ)×8Ñ8¸ÓRˆMàÒ*Ø×2Ò2Ø#ñØAEðØIOñç‰mð ô !Ÿ9š9 \°qÔ9×<Ñ<¸]×=QÑ=QÐS`×SfÑSfÓgˆLØ ×5Ñ5°iÐ_kÐ5Ól‰MˆAˆzØ)×8Ñ8¸À\ÓRˆMàÒØ×7Ñ7Ø#Ø-Ø-Ø+Ø-Ø /Ø"3ð 8ó ˆLð ×%Ò%ñ 
Øð
à%ð
ð *ð
ð ,ð	
ð
 (ð
ð ñ
ˆô (ñ 
Øñ
à×(Ñ(ò
ð 	
r4   )rL  rê  rJ  )r�   r�   r�   NrÅ  ru   ru  )NNNNN)
NNNNNNNNNN)rY   rZ   r[   r\   rú  Úaccepts_loss_kwargsrý  r7   r#   r†  r   r   r   r™  r   r°  r»  rR   r]   r^   r_   r`   s   @@r1   rF  rF  Œ  sÒ   ù‡ € àÐàÐØ0Ð2DÐEÐõ÷2#ò 2#÷h[3ò [3ñz  ¨Ô1ØØ÷ñ ó ó ó 2ðñ.  ¨Ô1ØØ÷ñ ó ó ó 2ð÷(6ò (6÷T/ò /ðb Ø÷;
ñ ;
ó ó ÷;
ð ;
r4   rF  c                   ó4   a € ] tR tRt o RtRtV 3R ltRtV tR# )ÚGlm4vCausalLMOutputWithPastió  rç  Nc                óH   <€ V ^8„  d   Qh/ S[ P                  R,          ;R&   # ré  rë  )r/   r0   s   "€r1   r2   Ú(Glm4vCausalLMOutputWithPast.__annotate__ó  rí  r4   rz  rî  rð  s   @r1   rÆ  rÆ  ó  rñ  r4   rÆ  c                   óà   a a€ ] tR tRt oRR/tRtV 3R lt]RV3R lR ll4       t]RV3R lR	 ll4       t	]
]RV3R
 lR ll4       4       tV 3R ltRV3R lR lltRV3R lR lltRtVtV ;t# )ÚGlm4vForConditionalGenerationiÿ  zlm_head.weightz(model.language_model.embed_tokens.weightFc                óò   <€ \         SV `  V4       \        V4      V n        \        P
                  ! VP                  P                  VP                  P                  R R7      V n	        V P                  4        R# )Fri   N)r6   r7   rF  rô  r8   rl   rK  r?   r,  Úlm_headr  rõ   s   &&€r1   r7   Ú&Glm4vForConditionalGeneration.__init__  sS   ø€ Ü‰Ñ˜Ô Ü Ó'ˆŒ
Ü—y’y ×!3Ñ!3×!?Ñ!?À×ASÑAS×A^ÑA^ÐejÔkˆŒà�‰Ör4   c          	      óˆ   <€ V ^8„  d   QhRS[ P                  RS[ P                  R,          RS[S[,          RS[S[,          /# rŠ  rŒ  )r/   r0   s   "€r1   r2   Ú*Glm4vForConditionalGeneration.__annotate__  sV   ø€ ÷ 
\ñ 
\á"×.Ñ.ð
\ñ ×(Ñ(¨4Õ/ð
\ñ Ñ+Õ,ð	
\ñ
 
Ñ+Õ	+ñ
\r4   c                ó<   € V P                   P                  ! W3/ VB # )z�
pixel_values_videos (`torch.FloatTensor` of shape `(batch_size, num_channels, image_size, image_size)`):
    The tensors corresponding to the input videos.
)rô  r™  )r>   r‹  rf  rµ   s   &&&,r1   r™  Ú0Glm4vForConditionalGeneration.get_video_features  s    € ð �z‰z×,Ò,Ð-@Ñ[ÐTZÑ[Ð[r4   c          	      óˆ   <€ V ^8„  d   QhRS[ P                  RS[ P                  R,          RS[S[,          RS[S[,          /# rœ  rŒ  )r/   r0   s   "€r1   r2   rÏ    sV   ø€ ÷ 
Uñ 
Uá×'Ñ'ð
Uñ ×(Ñ(¨4Õ/ð
Uñ Ñ+Õ,ð	
Uñ
 
Ñ+Õ	+ñ
Ur4   c                ó<   € V P                   P                  ! W3/ VB # )z–
pixel_values (`torch.FloatTensor` of shape `(batch_size, num_channels, image_size, image_size)`):
    The tensors corresponding to the input images.
)rô  r   )r>   r�  re  rµ   s   &&&,r1   r   Ú0Glm4vForConditionalGeneration.get_image_features  s   € ð �z‰z×,Ò,¨\ÑTÈVÑTÐTr4   c                ó  <€ V ^8„  d   QhRS[ P                  R,          RS[ P                  R,          RS[ P                  R,          RS[R,          RS[ P                  R,          RS[ P                  R,          RS[ P                  R,          R	S[ P                  R,          R
S[ P                  R,          RS[ P                  R,          RS[ P
                  R,          RS[S[ P                  ,          RS[S[,          RS[	S[
,          /# )r+   r4  Nr=  rÈ   r¾  r5  Úlabelsr�  r‹  re  rf  rd  Úlogits_to_keeprµ   r-   )r:   rá  rF   r   rÍ  rg  rß   r   r   rU   rÆ  )r/   r0   s   "€r1   r2   rÏ  '  s(  ø€ ÷ R
ñ R
á×#Ñ# dÕ*ðR
ñ Ÿ™ tÕ+ðR
ñ ×&Ñ&¨Õ-ð	R
ñ
  �ðR
ñ ×(Ñ(¨4Õ/ðR
ñ × Ñ  4Õ'ðR
ñ —l‘l TÕ)ðR
ñ #×.Ñ.°Õ5ðR
ñ ×(Ñ(¨4Õ/ðR
ñ ×(Ñ(¨4Õ/ðR
ñ !Ÿ?™?¨TÕ1ðR
ñ ™eŸl™lÕ*ðR
ñ Ñ+Õ,ðR
ñ 
Ñ,Õ	,ñR
r4   c                óÊ  € V P                   ! RRVRVRVRV	RV
RVRVRVR	VR
V/
VB pV^ ,          p\        V\        4      '       d   \        V) R4      MTpV P	                  VRVR3,          4      pRpVe7   V P
                  ! RRVRVRV P                  P                  P                  /VB p\        VVVP                  VP                  VP                  VP                  R7      # )aï  
Example:

```python
>>> from PIL import Image
>>> import httpx
>>> from io import BytesIO
>>> from transformers import AutoProcessor, Glm4vForConditionalGeneration

>>> model = Glm4vForConditionalGeneration.from_pretrained("zai-org/GLM-4.1V-9B-Thinking")
>>> processor = AutoProcessor.from_pretrained("zai-org/GLM-4.1V-9B-Thinking")

>>> messages = [
    {
        "role": "user",
        "content": [
            {"type": "image", "url": "https://www.ilankelman.org/stopsigns/australia.jpg"},
            {"type": "text", "text": "What is shown in this image?"},
        ],
    },
]
>>> url = "https://www.ilankelman.org/stopsigns/australia.jpg"
>>> with httpx.stream("GET", url) as response:
...     image = Image.open(BytesIO(response.read()))

>>> text = processor.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
>>> inputs = processor(text=[text], images=[image], vision_infos=[vision_infos])

>>> # Generate
>>> generate_ids = model.generate(inputs.input_ids, max_length=30)
>>> tokenizer.batch_decode(generate_ids, skip_special_tokens=True, clean_up_tokenization_spaces=False)[0]
"The image shows a street scene with a red stop sign in the foreground. In the background, there is a large red gate with Chinese characters ..."
```r4  r�  r‹  re  rf  rd  rÈ   r=  r¾  r5  NrÐ   ÚlogitsrÖ  r,  )ÚlossrÙ  r¾  rD   r  rê  rz  )rô  rÁ   rß   ÚslicerÌ  Úloss_functionrr   rK  r,  rÆ  r¾  rD   r  rê  )r>   r4  r=  rÈ   r¾  r5  rÖ  r�  r‹  re  rf  rd  r×  rµ   rÂ  rD   Úslice_indicesrÙ  rÚ  s   &&&&&&&&&&&&&,     r1   rR   Ú%Glm4vForConditionalGeneration.forward%  sG  € ðf —*’*ñ 
Øð
à%ð
ð !4ð
ð *ð	
ð
 *ð
ð 0ð
ð &ð
ð *ð
ð ,ð
ð (ð
ð ñ
ˆð   �
ˆô 9CÀ>ÔSV×8WÒ8Wœ˜~˜o¨tÔ4Ð]kˆØ—‘˜m¨A¨}¸aÐ,?Õ@ÓAˆàˆØÒØ×%Ò%ñ ØðØ&,ðØ9=¿¹×9PÑ9P×9[Ñ9[ðØ_eñˆDô +ØØØ#×3Ñ3Ø!×/Ñ/Ø×)Ñ)Ø×+Ñ+ô
ð 	
r4   c                óh  <€ \         SV `  W4      p^ pVP                  R4      ;pe   VP                  4       pV^ 8w  d?   V P                  P
                  e'   VR,          V P                  P
                  ,           pV# RV9   d)   VR,          P                  ^,          ^ 8”  d
   VR,          p\        VP                  4      ^8H  ;'       d.    VP                  \        P                  \        P                  39   pV'       d–   VP                  R4      eƒ   VP                  R4      f   VP                  R4      e]   VP                  4        UU	u/ uF  w  r‰VR8w  g   K  W‰bK  	  ppp	V P                  P                  ! V3/ VB w  r«W°P                  n        MtVP                  ^ 4      P                  ^R	R	4      p
\        P                   ! VP                  ^ ,          ^\        P                  VP"                  R7      V P                  n        VR,          p\        P$                  ! W:.^ R7      pV# u up	pi )
r   r¾  r4  rd  re  rf  ri  rÎ   r8  rI   )r6   Ú$_prepare_position_ids_for_generationr–  r;  rô  rê  rV   ru  rJ   r:   rß   r   Úitemsr†  r  r2  rn  r”   rÒ   )r>   Úinputs_tensorÚmodel_kwargsÚtext_positionsÚpast_lengthÚcacherÈ   Úis_input_idsr&  rr  Úvision_positionsrê  r@   s   &&&         €r1   rà  ÚBGlm4vForConditionalGeneration._prepare_position_ids_for_generation{  sç  ø€ ô ™ÑEÀmÓbˆð ˆØ!×%Ñ%Ð&7Ó8Ð8ˆEÒEØ×.Ñ.Ó0ˆKØ˜!Ô §
¡
× 6Ñ 6Ò BØ)¨)Õ4°t·z±z×7MÑ7MÕMˆLØÐð ˜,Ô&¨<¸Õ+D×+JÑ+JÈ1Õ+MÐPQÔ+QØ(¨Õ5ˆMä˜=×.Ñ.Ó/°1Ñ4×gÐg¸×9LÑ9LÔQV×QZÑQZÔ\a×\fÑ\fÐPgÑ9gˆçØ× Ñ Ð!4Ó5ÒAØ×!Ñ!Ð"2Ó3Ò?À<×CSÑCSÐTdÓCeÒCqà-9×-?Ñ-?Ô-AÔVÑ-A¡T QÀQÈ+ÑEUœD˜AšDÑ-AˆLÑVØ,0¯J©J×,EÒ,EÀmÑ,dÐWcÑ,dÑ)ÐØ%0�J‰JÕ"à-×7Ñ7¸Ó:×AÑAÀ!ÀRÈÓLÐÜ%*§[¢[Ø×#Ñ# AÕ&¨´·±ÀM×DXÑDXô&ˆD�J‰JÔ"ð
 (¨	Õ2ˆÜ—y’y .Ð!CÈÔKˆàÐùó Ws   ÅH.ÅH.c                ó®   <€ V ^8„  d   QhRS[ P                  R,          RS[ P                  R,          RS[S[ P                  S[ P                  3,          /# )r+   r4  Nr5  r-   )r:   rá  rF   rU   )r/   r0   s   "€r1   r2   rÏ  ¡  sO   ø€ ÷ 6*ñ 6*á×#Ñ# dÕ*ð6*ñ —|‘| dÕ*ð6*ñ 
‰u�|‰|™UŸ\™\Ð)Õ	*ñ	6*r4   c           
     óÖ  € VEe.   VV P                  4       ! \        P                  ! RV P                  P                  \        P
                  VP                  R7      4      8H  R,          pVV P                  4       ! \        P                  ! RV P                  P                  \        P
                  VP                  R7      4      8H  R,          pVV P                  4       ! \        P                  ! RV P                  P                  \        P
                  VP                  R7      4      8H  R,          pMHWP                  P                  8H  pWP                  P                  8H  pWP                  P                  8H  p\        P                  ! VP                  4       VP                  4       ,
          ^R7      pV^ 8„  pW7( ,          pVP                  ^R7      p	VP                  ^R7      p
Wš3# )a  
Get the number of images and videos for each sample to calculate the separation length of the sample tensor.
These parameters are not passed through the processor to avoid unpredictable impacts from interface modifications.

Args:
    input_ids (`torch.LongTensor` of shape `(batch_size, sequence_length)`):
        Indices of input sequence tokens in the vocabulary.

Returns:
    image_nums (`torch.LongTensor` of shape `(batch_size, num_images_sample)`)
    video_nums (`torch.LongTensor` of shape `(batch_size, num_videos_sample)`)
ri  rÎ   rz  ).r   )r¦  r:   r§  rr   Úimage_start_token_idr   r”   Úvideo_start_token_idÚvideo_end_token_idr  rß   r  )r>   r4  r5  Úis_imageÚis_video_startÚis_video_endÚvideo_levelÚinside_videoÚstandalone_imagesÚimage_countsÚvideo_countss   &&&        r1   Ú_get_image_nums_and_video_numsÚ<Glm4vForConditionalGeneration._get_image_nums_and_video_nums¡  s›  € ð$ Ó$àØ×,Ñ,Ô.Ü—J’J˜r 4§;¡;×#CÑ#CÌ5Ï:É:Ð^k×^rÑ^rÔsóñð õˆHð Ø×,Ñ,Ô.Ü—J’J˜r 4§;¡;×#CÑ#CÌ5Ï:É:Ð^k×^rÑ^rÔsóñð õˆNð Ø×,Ñ,Ô.Ü—J’J˜r 4§;¡;×#AÑ#AÌÏÉÐ\i×\pÑ\pÔqóñð õ‰Lð !§K¡K×$DÑ$DÑDˆHØ&¯+©+×*JÑ*JÑJˆNØ$¯©×(FÑ(FÑFˆLô —l’l >×#5Ñ#5Ó#7¸,×:JÑ:JÓ:LÕ#LÐRSÔTˆØ" Q‘ˆð %¨Õ6Ðð )×,Ñ,°Ð,Ó3ˆØ%×)Ñ)¨aÐ)Ó0ˆàÐ)Ð)r4   c                ó”   <€ V ^8„  d   QhRS[ RS[RS[P                  R,          RS[S[P                  S[S[S[3,          3,          /# )r+   Úexpand_sizeÚis_encoder_decoderr4  Nr-   )rß   re   r:   rá  rU   ÚdictrÃ   r   )r/   r0   s   "€r1   r2   rÏ  Ù  s\   ø€ ÷ V'ñ V'áðV'ñ !ðV'ñ ×#Ñ# dÕ*ð	V'ñ 
‰u×Ñ¡¡c©3 h¥Ð/Õ	0ñV'r4   c                ó  a aaaa€ S^8X  d   SS3# . ROoVVVV 3R lpVV3R lpV! S4      oSe   SP                  S^ R7      oV! S4      oV'       d1   SP                  R4      f   \        R4      hV! SR,          4      SR&   SS3# )r�   c           	      óz  <€ SP                  R R4      pSP                  RR4      pSP                  SSP                  RR4      R7      w  r4R pV  EF\  pVR8X  dk   \        P                  ! V\	        V4      4      pV Uu. uF)  p\        P
                  ! V^R7      P                  4       NK+  	  p	pV! W,          V	S
R7      W&   Ku  VR 8X  d!   \	        V4      p	V! W,          V	S
R7      W&   Kœ  VR	8X  dl   \        P                  ! V\	        V4      4      pV Uu. uF)  p\        P
                  ! V^R7      P                  4       NK+  	  p	pV! W,          V	S
R7      W&   EK  VR8X  d"   \	        V4      p	V! W,          V	S
R7      W&   EK6  VR
8X  g   EK@  V! W,          \	        V4      S
R7      W&   EK_  	  V # u upi u upi )re  Nrf  r5  )r5  c           	      óô   € \         P                  ! W4      pV.^.V P                  4       ^,
          ,          ,           p\         P                  ! V Uu. uF  qUP                  ! V!  NK  	  up^ R7      pV# u upi )r�   rÎ   )r:   rj  r·   rÒ   rµ  )rÇ   r
  Úrepeat_timesÚsamplesÚrepeat_argsÚsampleÚresults   &&&    r1   Ú_repeat_interleave_samplesÚ‹Glm4vForConditionalGeneration._expand_inputs_for_generation.<locals>._expand_dict_for_generation_visual.<locals>._repeat_interleave_samplesñ  s_   € ÜŸ+š+ aÓ1�Ø+˜n°¨s°a·e±e³gÀµkÕ/BÕB�ÜŸšÉgÓ#VÉgÀF§M¢M°;Ô$?ÉgÑ#VÐ\]Ô^�Ø�ùò $Ws   ÁA5r�  rÎ   )r
  r   r‹  Úsecond_per_grid_ts)r–  r÷  r:   rj  rþ   r�  r  )Údict_to_expandre  rf  Ú
image_numsÚ
video_numsr  r;  r  r  r
  rú  r4  rã  r>   s   &         €€€€r1   Ú"_expand_dict_for_generation_visualÚgGlm4vForConditionalGeneration._expand_inputs_for_generation.<locals>._expand_dict_for_generation_visualê  s´  ø€ Ø)×-Ñ-Ð.>ÀÓEˆNØ)×-Ñ-Ð.>ÀÓEˆNØ%)×%HÑ%HØ¨×)9Ñ)9¸/È4Ó)Pð &Ió &Ñ"ˆJòô &�Ø˜.Ô(ä#Ÿkšk¨.¼$¸zÓ:JÓK�GáMTÓUÉWÀ6œuŸzšz¨&°aÔ8×<Ñ<Ö>ÉW�GÐUÙ*DØ&Õ+°WÈ;ô+�NÓ'ð Ð,Ô,ä" :Ó.�GÙ*DØ&Õ+°WÈ;ô+�NÓ'ð Ð1Ô1Ü#Ÿkšk¨.¼$¸zÓ:JÓK�GÙMTÓUÉWÀ6œuŸzšz¨&°aÔ8×<Ñ<Ö>ÉW�GÐUÙ*DØ&Õ+°WÈ;ô+�NÔ'ð Ð,Ô,Ü" :Ó.�GÙ*DØ&Õ+°WÈ;ô+�NÔ'ð Ð0×0Ù*DØ&Õ+´T¸*Ó5EÐT_ô+�NÔ'ñ7 &ð< "Ð!ùò3 Vùò Vs   Á?/F3Ä/F8c                 ó@  <€ V  F–  pVR 8X  d5   W,          P                   ^8X  d   W,          P                  S^R7      W&   K>  W,          f   KJ  \        W,          \        P                  4      '       g   Kr  VS9  g   K{  W,          P                  S^ R7      W&   K˜  	  V # )rÈ   rÎ   )r<  r¡  rÁ   r:   rF   )r  r;  rú  Úvisual_keyss   & €€r1   Ú_expand_dict_for_generationÚ`Glm4vForConditionalGeneration._expand_inputs_for_generation.<locals>._expand_dict_for_generation  sŒ   ø€ Û%�Ø˜.Ô(¨^Õ-@×-EÑ-EÈÔ-JØ*8Õ*=×*OÑ*OÐP[ÐabÐ*OÓ*c�NÓ'à"Õ'Ô3Ü" >Õ#6¼¿¹×EÔEØ ;Ö.à*8Õ*=×*OÑ*OÐP[ÐabÐ*OÓ*c�NÓ'ñ &ð "Ð!r4   rÎ   Úencoder_outputszMIf `is_encoder_decoder` is True, make sure that `encoder_outputs` is defined.)r�  re  r‹  rf  r  )r¡  r–  r¢   )r>   rú  rû  r4  rã  r  r  r  s   ff&fl  @r1   Ú_expand_inputs_for_generationÚ;Glm4vForConditionalGeneration._expand_inputs_for_generationÙ  s    ü€ ð ˜!ÔØ˜lÐ*Ð*âwˆ÷+	"ð +	"öZ
	"ñ :¸,ÓGˆàÒ Ø!×3Ñ3°KÀQÐ3ÓGˆIá2°<Ó@ˆçØ×ÑÐ 1Ó2Ò:Ü Ð!pÓqÐqÙ.IÈ,ÐWhÕJiÓ.jˆLÐ*Ñ+à˜,Ð&Ð&r4   )rÌ  rô  ru   )NNNNNNNNNNNr   )r�   FN)rY   rZ   r[   r\   Ú_tied_weights_keysrÄ  r7   r   r™  r   r   rR   rà  r÷  r  r]   r^   r_   r`   s   @@r1   rÊ  rÊ  ÿ  sœ   ù‡ € Ø*Ð,VÐWÐàÐõð ÷
\ñ 
\ó ð
\ð ÷
Uñ 
Uó ð
Uð Ø÷R
ñ R
ó ó ðR
õh$÷L6*ò 6*÷pV'÷ V'ò V'r4   rÊ  )ra  rk  )rÊ  rF  ró  r%  r  )Zrp  Úcollections.abcr   Údataclassesr   Útypingr   r:   Útorch.nnr8   Útorch.nn.functionalrG  r  r   Úactivationsr   Úcache_utilsr   r	   Ú
generationr
   Úintegrationsr   Úmasking_utilsr   Úmodeling_flash_attention_utilsr   Úmodeling_layersr   Úmodeling_outputsr   r   r   Úmodeling_rope_utilsr   r   Úmodeling_utilsr   r   Úprocessing_utilsr   Úutilsr   r   r   r   Úutils.deprecationr   Úutils.genericr   r   r   r   r    Úutils.output_capturingr!   Úvision_utilsr"   r#   Úconfiguration_glm4vr$   r%   r&   r@  r)   rb   r|   r“   rÜ   rê   r#  r.  r7  rN  rP  rw  r‰  r§  r¯  r±  rÇ  rÕ  ræ  ró  r  r%  rF  rÆ  rÊ  Ú__all__rz  r4   r1   Ú<module>r,     s7  ðó( Ý $Ý !Ý ã Ý ß Ð Ý å !ß .Ý )Ý 7Ý /Ý BÝ 9ß kÑ kß Kß FÝ &ß aÓ aÝ 0÷õ õ 6ß Qß PÑ Pñ ˜YÓ'ôJ�2—9‘9ó Jó (ðJô(f�B—I‘Iô fô˜BŸI™Iô ô(=5 §¡ô =5ô@f˜RŸY™Yô fô"G˜BŸI™Iô GòT(õõ	U÷%ô2P˜2Ÿ9™9ô PôfÐ1ô ô<@1˜rŸy™yô @1òF6ô!ôHC)˜Ÿ™ô C)ôL)�2—9‘9ô )ô$/Ð6ô /ðd Ø
ô0Ð6ó 0ó ó ð0ð ô'˜?ó 'ó ð'ôY
Ð+ô Y
ðx ôe
Ð)ó e
ó ðe
ðP ôc
Ð%ó c
ó ðc
ðL Ø
ô0Ð"8ó 0ó ó ð0ôp'Ð$8¸/ô p'òf	 x‚r4   