
    @Ki'                         S SK r S SKJr  SSKJr  SSKJr  SSKJr  SSK	J
r
Jr  SSKJrJr  SS	KJrJr  S
SKJr  \" 5       (       a
  S SKrS SKJr  SrSrSrSrSr SS jr " S S5      rg)    N)Image   )create_causal_mask)_get_model_class)
AutoConfig)MODEL_FOR_PRETRAINING_MAPPINGMODEL_MAPPING)PROCESSOR_MAPPING_NAMESAutoProcessor)TOKENIZER_MAPPING_NAMESAutoTokenizer   )is_torch_availablez[92mz[93mz[0mu   ■u   ⬚c                   ^ ^^^^^^ TR                  5       mTR                  S:X  a  TSSS2SS24   mTR                  S:X  a  TSSSS2SS24   m[        T 5      n[        S T  5       5      nSn/ n	[	        T 5       HP  u  mn
U
T:X  a  U(       d	  TnSTTT4'   US:  d  M$  U
T:w  d  TUS-
  :X  d  M5  TUS-
  :X  a  TS-  mSTUT2UT24'   SnMR     SmUbL  [        U5       VVs/ s H3  n[        U5       Vs/ s H  nSX-
  s=::  a  U:  a  O  OSOSPM     snPM5     snnmSR                  U4S	 j[        U5       5       5      nUb  US:H  n[        R                  " UR                  S
5      S-  U-   R                  5       UR                  S
5      S5      m[        R                  " SUS-   U5      n[        R                  " TUS9m[         [         [         S[          [         [         S3nU	R#                  SU-   5        SUS-   -  SR%                  [        U5      S-  5      -   nUb  US-  nU	R#                  U5        / n[	        T 5       H  u  nmTUU4   S:X  ae  UR#                  ['        [)        U5      R+                  [        [)        U5      5      5      5       V
s/ s H  n
[          U
 [         3PM     sn
5        Mv  UR#                  ['        [)        U5      R+                  [        [)        U5      5      5      5      5        M     ['        [-        [&        [/        U6 5      5      nU HF  nU	R#                  Ub/  US-   S-  SR                  U5      -   S-   SR                  U5      -   OS5        MH     [	        T 5       H  u  mm[1        T5      R%                  U5      nTT;   a  [          U [         3OUnSR                  UUUUU 4S j[        U5       5       5      nSnUb)  SR                  UUUUUU 4S j[        U5       5       5      nU	R#                  U S[)        T5      R+                  S5       SU SU 35        M     SR                  U	5      $ s  snf s  snnf s  sn
f )z
Generates an attention matrix from a given attention mask.

Optionally applies a sliding window mask (e.g., for Gemma2/3) and
marks regions where image tokens occur based on the specified `img_token`.
   r   N   c              3   J   #    U  H  n[        [        U5      5      v   M     g 7fN)lenrepr).0words     i/var/www/html/dynamic-report/venv/lib/python3.13/site-packages/transformers/utils/attention_visualizer.py	<genexpr>6generate_attention_matrix_from_mask.<locals>.<genexpr>8   s     <ed#d4j//es   !#r   r    c              3      >#    U  HW  nTS U4   (       a  [          [         [         3O1S U:X  a  [         [         [         3OTS U4   (       a  [        O[        v   MY     g7fr   NYELLOWBLACK_SQUARERESETGREENWHITE_SQUARE)r   jmasks     r   r   r   K   sk      	 A 1: (<.( 6 w|nUG, 1: 	 s   AA"   )
boundariesz: i == j (diagonal)   z: token_type_idszAttention MatrixzSliding Window Maskz	    |     c              3      >#    U  Hf  nTTU   ;   a&  TTU4   (       a  TT;   a  [          [         [         3O1TU:X  a  [         [         [         3OTTU4   (       a  [        O[        v   Mh     g 7fr   r   )r   r%   i	img_tokenr&   r   wordss     r   r   r   x   s}      	
  E!H$ad	T8I h|nUG, Av 7<.0 AqDz  s   A.A1c              3      >#    U  Hk  nTTU   ;   a*  TT;   a$  TS T4   TS U4   :X  a  [          [         [         3O2TU:X  a  [         [         [         3OTT   U   (       a  [        O[        v   Mm     g7fr   r   )r   r%   r,   r-   sliding_window_masktoken_type_bucketsr   r.   s     r   r   r      s      	* "A a(Y$->CUVWYZVZC[_qrsuvrv_wCw (<.0 6 w|nUG4 'q)!, "!" "s   A3A6z: 
)intndimr   max	enumeraterangejointorchwherecumsumboolarange	bucketizer#   r!   r"   r    appendljustliststrrjustmapzipr   )r.   r&   r-   sliding_windowtoken_type_idsimage_seq_lengthnmax_word_lengthfirst_img_idxoutputkr,   r%   	row_dummy
is_specialr)   legendf_stringvertical_headeridxrow	word_reprcolored_wordrow_displaysliding_window_rowr0   r1   r   s   ```        `             @@@r   #generate_attention_matrix_from_maskrY   (   sM    88:DyyA~Aq!G}yyA~Aq!QJE
A<e<<OMF% 1	>-MDAJ1!y.AQJAEzQ56Dq-/12M ! !fklmfnofnabSXYZS[\S[aa15&A>&A IS[\fno 	 q	 	I !#q(
"[[""2&*Z7==?AVAVWYAZ\]
 \\!%5%9;KL
"__-?JW w|nUG+A&,X]W^^noF
MM#,o)*-?-E-Ec)nXYFY-ZZH!))
MM(Ou%	TS>Q""4CWZ[^_`[aWbHcCd#eCdavhqc%$9Cd#ef""4Cs3q6{(C#DE	 & 3tS/%:;<O) q C'#((3-7+EQTU	
  U#4J$$_5	8AT8I&)UG4yhh 	
 	
 1X	
 	
  %!$ 	* 	* q	* 	" 	bQa(9;-yQcPdef5 $8 99VQ  ]o@ $fs   $Q 7 QQ #Q&
Q c                   F    \ rS rSrS\4S jrS	S\4S jjrS	S\4S jjrSrg)
AttentionMaskVisualizer   
model_namec                    [         R                  " U5      nSU l        [        UR	                  5       S5      (       a   [        UR	                  5       SS 5      U l         [        U[        5      nUc  [        SU S35      eX0l         " S SU[        R                  5      nU" X!5      U l        U R                  R!                  UR"                  5        Xl        X l        g ! [         a    [        U[        5      n Nf = f)N<img>rF   zModel name z- is not supported for attention visualizationc                       \ rS rSrS rSrg)7AttentionMaskVisualizer.__init__.<locals>._ModelWrapper   c                     [         R                  R                  U 5        [         R                  " SS5      U l        Xl        g )Nr   )nnModule__init__Lineardummy_moduleconfig)selfri   r]   s      r   rf   @AttentionMaskVisualizer.__init__.<locals>._ModelWrapper.__init__   s+    		""4($&IIaO!$    )ri   rh   N)__name__
__module____qualname____firstlineno__rf   __static_attributes__ rl   r   _ModelWrapperra      s    %rl   rs   )r   from_pretrainedimage_tokenhasattrget_text_configgetattrrF   r   r	   	Exceptionr   
ValueError
mapped_clsrd   re   modeltodtyperepo_idri   )rj   r]   ri   r{   rs   s        r   rf    AttentionMaskVisualizer.__init__   s    ++J7"6))+-=>>")&*@*@*BDTVZ"[D	Q)&-@J {:,6cdee$	%J		 	% #66


fll#!!  	Q)&2OPJ	Qs   C C<;C<input_sentencec                 "    U R                  XS9  g )N)suffix)visualize_attention_mask)rj   r   r   s      r   __call__ AttentionMaskVisualizer.__call__   s    %%n%Drl   c           
      v   U R                   n0 nS nU R                  R                  [        ;   Ga!  Sn[        R
                  " [        R                  " USS9R                  5      nSn[        R                  " U R                  US9n[        US5      (       a  UR                  nO)UR                  R                  UR                   /5      S   nU(       a  UR#                  SU5      nU" XaUS	S
9n	UR                  R                  UR                   /5      S   U l        U	S   n
SU	;   a  U	S   US'   UR                  R                  U	S   S   5      nO}U R                  R                  [$        ;   a<  [&        R                  " U R                  5      nUR)                  U5      nU" US	S9S   n
O#[+        SUR                  R                   S35      eSUR                  l        UR/                  5         U
R0                  u  p[2        R4                  " XUR                  R6                  4U R                   R8                  S9n[2        R:                  " U5      n[=        UR                  UU
US S9nUb  UR?                  5       ) n
O1U
RA                  S5      RA                  S5      RC                  USX5      n
S[E        SU R                  R                   SU RF                   35      S-   -  nSn[I        SU 35        [I        SSU R                  R                   SU R                   SU RF                  RJ                   3RM                  [E        U5      5      -   S-   U-   5        [I        U 5        [O        UU
U R                  [Q        U R                  SS 5      UR                  S5      US9n[I        U5        [I        U 5        g ) Nzchttps://huggingface.co/datasets/huggingface/documentation-images/resolve/main/bee.jpg?download=trueT)streamr(   )rH   ru   r   r_   pt)imagestextr   return_tensorsattention_maskrG   	input_ids)r   zModel type z) does not support attention visualizationeager)r~   )ri   input_embedsr   cache_positionpast_key_valuesr   z##zAttention visualization for z | r   r2   z"  Attention visualization for [1m:z[0m z    rF   )r-   rF   rG   rH   ))r|   ri   
model_typer
   r   openrequestsgetrawr   rt   r   rv   ru   	tokenizerconvert_ids_to_tokensimage_token_idreplacer   r   tokenizerz   _attn_implementationtrainshaper9   zeroshidden_sizer~   r=   r   r<   	unsqueezeexpandr   r{   printrm   centerrY   rx   )rj   r   r   r|   kwargsrH   img	processorru   inputsr   tokensr   
batch_size
seq_lengthr   r   causal_masktop_bottom_borderside_borderrQ   s                        r   r   0AttentionMaskVisualizer.visualize_attention_mask   s~   

;;!!%<<wC**X\\#d;??@C %55dllUefIy-00'33'11GGIaIaHbcdef!/!7!7!Mcv^bcF(22HH)JbJbIcdefgD#$45N6)+12B+C'(((>>vk?RST?UVF[[##'>>%55dllCI''7F&~dKL\]N{5<<+B+B*CClmnn,3)!/!5!5
{{JELL<T<T#U]a]g]g]m]mnj1(<<%)) 
 ")..00N+55a8BB1ELLZYZ\fsN .t{{/E/E.Fc$//IZ[\_``
 $%&'5dkk6L6L5MQt||n\deietete}e}d~  G  G%& 	
 	
 	"#%6&&"4;;0@$G!::&67-
 	h"#%rl   )ri   ru   r{   r|   r   rF   N)r*   )	rm   rn   ro   rp   rB   rf   r   r   rq   rr   rl   r   r[   r[      s0    3 2Es EJ&s J& J&rl   r[   )r_   NNN)r   PILr   masking_utilsr   models.auto.auto_factoryr   models.auto.configuration_autor   models.auto.modeling_autor   r	   models.auto.processing_autor
   r   models.auto.tokenization_autor   r   import_utilsr   r9   torch.nnrd   r#   r    r"   r!   r$   rY   r[   rr   rl   r   <module>r      sh       . 7 7 T P R ,  		 `diXg& g&rl   