
    Sܶi1                     F   d dl Z d dlZd dlZd dlmZ d dlmZmZ d dlZd dl	Z
d dlZd dlmc mZ ddlmZmZmZ ddlmZ erddlmZ dej        d	efd
Z ej        d          de
j        fd            Z ej        dd          de
j        fd            Zd/dZdej        de
j        fdZ e G d d                      Z!ddddddedee         dej        ded ed!e"dee!         fd"Z#d#ee!         d$e$d%e$fd&Z%d'd(d)d*ee&         dddedej        ded+e$d,e$d-e"fd.Z'dS )0    N)	dataclass)TYPE_CHECKINGList   )
HOP_LENGTHSAMPLE_RATETOKENS_PER_SECOND)	Tokenizer)Whisperxfilter_widthc                    |dz  }| j         d         |k    r| S | j        x}dk    r| ddddf         } |dk    r	|dz  dk    s
J d            d}t          j        | |dz  |dz  ddfd          } | j        rD	 dd	lm}  || |          }n0# t          t          j	        f$ r t          j        d
           Y nw xY w|:|                     d|d                                          d         d|dz  f         }|dk    r|d         }|S )zMApply a median filter of width `filter_width` along the last dimension of `x`   Nr   r   z&`filter_width` should be an odd numberreflect)mode)median_filter_cudaz}Failed to launch Triton kernels, likely due to missing CUDA toolkit; falling back to a slower median kernel implementation....r   r   )shapendimFpadis_cuda
triton_opsr   RuntimeError
subprocessCalledProcessErrorwarningswarnunfoldsort)r   r   	pad_widthr   resultr   s         Q/root/projects/openclaw-proxy/venv/lib/python3.11/site-packages/whisper/timing.pymedian_filterr%      ss   !Iwr{i1dD!!!m 	q\A-222/ 322 F	a,!#\Q%61=INNNAy 		666666''<88FFj;< 	 	 	MK    	 ~"lA..3355a8la>O9OPqyyMs   7B
 
*B76B7T)nopythontracec                    | j         d         dz
  }| j         d         dz
  }d| dd d f<   d| d d df<   g }|dk    s|dk    ry|                    |dz
  |dz
  f           | ||f         dk    r|dz  }|dz  }n7| ||f         dk    r|dz  }n#| ||f         dk    r|dz  }nt          d          |dk    s|dk    yt          j        |          }|d d dd d f         j        S )Nr   r   r   zUnexpected trace[i, j]r   )r   append
ValueErrornparrayT)r'   ijr#   s       r$   	backtracer0   9   s)   AAAAE!QQQ$KE!!!Q$KF
a%%1q55q1ua!en%%%A;!FAFAA1a4[AFAA1a4[AFAA5666 a%%1q55 XfF$$B$'?    )r&   parallelc                 0   | j         \  }}t          j        |dz   |dz   ft          j                  t          j        z  }t          j        |dz   |dz   ft          j                   }d|d<   t          d|dz             D ]}t          d|dz             D ]q}||dz
  |dz
  f         }||dz
  |f         }|||dz
  f         }	||k     r||	k     r|d}}
n||k     r||	k     r|d}}
n|	d}}
| |dz
  |dz
  f         |
z   |||f<   ||||f<   rt          |          S )Nr   dtyper   r   r   )r   r+   onesfloat32infranger0   )r   NMcostr'   r/   r.   c0c1c2cts               r$   dtw_cpurB   R   sY   7DAq7AE1q5>444rv=DWa!eQU^2:6666EDJ1a!e__  q!a% 	 	Aa!eQUl#Ba!eQhBaQhBBww27711bR"WW11111q5!a%<1,DAJE!Q$KK	 Ur1      c                    ddl m} | j        \  }}||k     sJ d|            t          j        | d|dz   ft
          j                                                  d |||z   z                               |||z             }|j	        
                                }t          j        ||z   dz   |dz             t
          j        z  }d|d<   |                    | j                  }t          j        |t          j                  } |d	         ||||                    d          |                    d          |                    d          |||
	  	         |j	                                        d |dz   ||z   dz   z                               |dz   ||z   dz             d d d |dz   f         }t%          |                                                                          S )Nr   )
dtw_kernelz$M should be smaller than BLOCK_SIZE=r   )valuer   r   r4   )r   )
BLOCK_SIZE   )r   rE   r   r   r   r+   r8   flattenreshaper-   
contiguoustorchr6   todevice
zeros_likeint32strider0   cpunumpy)r   rG   rE   r;   r:   x_skewr<   r'   s           r$   dtw_cudarU   l   s   &&&&&&7DAqz>>>DzDD>>> 	
a!QU26***2244]qAE{]CKKAqSTuUU  X  ""F:a!eaiQ''"&0DDJ7718DT555EJtaAQ		
 
 
 
 GOO5Q1q519 556>>q1ua!eaiPP	7QU7
E UYY[[&&(()))r1   returnc                    | j         r@	 t          |           S # t          t          j        f$ r t          j        d           Y nw xY wt          |                                 	                                
                                          S )NzsFailed to launch Triton kernels, likely due to missing CUDA toolkit; falling back to a slower DTW implementation...)r   rU   r   r   r   r   r   rB   doublerR   rS   )r   s    r$   dtwrY      s    y 	A;;j;< 	 	 	MA    	 188::>>##))++,,,s    *AAc                   N    e Zd ZU eed<   ee         ed<   eed<   eed<   eed<   dS )
WordTimingwordtokensstartendprobabilityN)__name__
__module____qualname__str__annotations__r   intfloat r1   r$   r[   r[      sI         
IIIILLL	JJJr1   r[      g      ?)medfilt_widthqk_scalemodelr   	tokenizertext_tokensmel
num_framesrj   rk   c                l   t          |          dk    rg S t          j        g |j        |j        ||j                                      | j                  }d g| j        j	        z  fdt          | j        j                  D             }ddlm}	 t          j                    5   |	            5   | |                    d          |                    d                    d         }
|
t          |j                  d d |j        f         }|                    d          }|t%          j        t          |                    |f                                         d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   |D ]}|                                 t          j        fd| j                                        j        D                       }|d d d d d |dz  f         }||z                      d          }t          j        |d	d
d          \  }}||z
  |z  }t7          ||          }|                    d          }|t          |j                  d         }t;          |           \  }}|                    ||j        gz             \  }}t          |          dk    rg S t%          j        t%          j         d |d d         D                       d          }t%          j        t%          j!        |          dd          "                    tF                    }||         tH          z  }||d d                  }||dd                   }fdtK          |d d         |dd                    D             }d tK          |||||          D             S )Nr   c                 T    g | ]$\  }}|j                             |ffd 	          %S )c                 H                         ||d         d                   S )Nr   r   )__setitem__)_insoutsindexQKss       r$   <lambda>z+find_alignment.<locals>.<listcomp>.<lambda>   s    #//%b!*M*M r1   )
cross_attnregister_forward_hook).0r.   blockry   s      r$   
<listcomp>z"find_alignment.<locals>.<listcomp>   sT        Au 	..'(MMMMM	
 	
  r1   r   )disable_sdpar   )dimc                 2    g | ]\  }}|         |         S rh   rh   )r}   _l_hry   s      r$   r   z"find_alignment.<locals>.<listcomp>   s%    WWW62r3r72;WWWr1   r   TF)r   keepdimunbiased)axisc                 ,    g | ]}t          |          S rh   )lenr}   rA   s     r$   r   z"find_alignment.<locals>.<listcomp>   s    'I'I'I1A'I'I'Ir1   )r   r   )constant_valuesc                 N    g | ]!\  }}t          j        ||                   "S rh   )r+   mean)r}   r.   r/   text_token_probss      r$   r   z"find_alignment.<locals>.<listcomp>   sA       Aq 	 1%&&  r1   c           	      @    g | ]\  }}}}}t          |||||          S rh   )r[   )r}   r\   r]   r^   r_   r`   s         r$   r   z"find_alignment.<locals>.<listcomp>   sB       1D&%k 	4[99  r1   )&r   rL   tensorsot_sequenceno_timestampseotrM   rN   dimsn_text_layer	enumeratedecoderblocksrl   r   no_grad	unsqueezesoftmaxr+   arangetolistremovestackalignment_headsindicesr-   std_meanr%   r   rY   split_to_word_tokensr   cumsumdiffastypeboolr	   zip)rl   rm   rn   ro   rp   rj   rk   r]   hooksr   logitssampled_logitstoken_probshookweightsstdr   matrixtext_indicestime_indiceswordsword_tokensword_boundariesjumps
jump_timesstart_times	end_timesword_probabilitiesry   r   s                               @@r$   find_alignmentr      s    ;1	\	
#	
#	
 	
 M		
  	b  &5:*
*C    "%-"677	  E $#####	 5 5,,.. 5 5s}}Q'')9)9!)<)<==a@I$: ; ; = = NO$,,,44&ry[1A1A'B'BK'OP+22445 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5    kWWWWU5J5R5R5T5T5VWWWXXGaaa-jAo--.G!**r*22GwBuMMMIC~$GG]33G\\q\!!FC	.//"45F!$fWL,"77y}o8UVVE;
;1 	fRY'I'ICRC8H'I'I'IJJFSSOF27<((&!DDDKKDQQEe$'88J_SbS12K?122./I   ,oabb.ABB  
 58;Y8J6
 6
   s7   )F4B1E1%F1E5	5F8E5	9FFF	alignment	prependedappendedc                    t          |           dz
  }t          |           dz
  }|dk    r| |         }| |         }|j                            d          rR|j                                        |v r7|j        |j        z   |_        |j        |j        z   |_        d|_        g |_        n|}|dz  }|dk    d}d}|t          |           k     r| |         }| |         }|j                            d          s@|j        |v r7|j        |j        z   |_        |j        |j        z   |_        d|_        g |_        n|}|dz  }|t          |           k     d S d S )Nr   r   r     )r   r\   
startswithstripr]   endswith)r   r   r   r.   r/   previous	followings          r$   merge_punctuationsr      sk   IAIA
q&&Q<aL	=##C(( 	X]-@-@-B-Bi-O-O%]Y^;IN'1AAIHM HOOA	Q q&& 	
A	A
c)nn

Q<aL	}%%c** 	y~/I/I$MIN:HM&o	0@@HOIN!IA	Q c)nn





r1   u   "'“¿([{-u   "'.。,，!！?？:：”)]}、)prepend_punctuationsappend_punctuationssegmentsr   r   last_speech_timestampc                 	   t          |           dk    rd S fd| D             }	t          t          j                            |	                    }
t          ||
||fi |}t          j        d |D                       }||                                         }t          |          dk    rt          j	        |          nd}t          dt          |                    }|dz  }t          |          dk    rd}t          dt          |                    D ]y}||         j        ||         j        z
  |k    rX||         j        |v r||         j        |z   ||         _        L||dz
           j        |v r||         j        |z
  ||         _        zt!          |||           | d         d	         t"          z  t$          z  }d}t'          | |	          D ]\  }}
d}g }|t          |          k     r|t          |
          k     r||         }|j        r\|                    t+          |j        t-          ||j        z   d          t-          ||j        z   d          |j        
                     |t          |j                  z  }|dz  }|t          |          k     r|t          |
          k     t          |          dk    r|d         d         |z
  |dz  k    r|d         d         |d         d         z
  |k    s7t          |          dk    r|d         d         |d         d         z
  |dz  k    rt          |          dk    re|d         d         |d         d         z
  |k    rDt3          |d         d         dz  |d         d         |z
            }|x|d         d<   |d         d<   t3          d|d         d         |z
            |d         d<   |d         |d         d         k     rX|d         dz
  |d         d         k    r=t3          dt          |d         d         |z
  |d                             |d         d<   n|d         d         |d<   |d         |d         d         k    rJ|d         dz   |d         d         k     r/t3          |d         d         |z   |d                   |d         d<   n|d         d         |d<   |d         }||d<   d S )Nr   c                 8    g | ]}fd |d         D             S )c                 *    g | ]}|j         k     |S rh   )r   )r}   tokenrm   s     r$   r   z2add_word_timestamps.<locals>.<listcomp>.<listcomp>'  s%    GGG51F1F1F1F1Fr1   r]   rh   )r}   segmentrm   s     r$   r   z'add_word_timestamps.<locals>.<listcomp>&  sC        	HGGGGH-GGG  r1   c                 ,    g | ]}|j         |j        z
  S rh   )r_   r^   r   s     r$   r   z'add_word_timestamps.<locals>.<listcomp>-  s     BBB1quqwBBBr1   g        gffffff?r   u   .。!！?？r   seek)r\   r^   r_   r`   r_      r^   g      ?r   r   )r   list	itertoolschainfrom_iterabler   r+   r,   nonzeromedianminrg   r9   r_   r^   r\   r   r   r   r   r)   dictroundr`   r]   max)r   rl   rm   ro   rp   r   r   r   kwargstext_tokens_per_segmentrn   r   word_durationsmedian_durationmax_durationsentence_end_marksr.   time_offset
word_indexr   saved_tokensr   timingboundarys     `                     r$   add_word_timestampsr     s5    8}}     
 y445LMMNNKuic:XXQWXXIXBB	BBBCCN#N$:$:$<$<=N36~3F3F3J3Jbi///PSO#u_5566O"Q&L >Q+q#i..)) 	I 	IA|)A,"44|CCQ<$(:::'0|'9L'HIaL$$q1u%*.@@@)21)9L)HIaL&y"68KLLL1+f%
2[@KJ #H.E F F @! @!3y>>))lS=M=M.M.Mz*F{ #[#K&,$>BB!+
":A>>$*$6	     C...L!OJ 3y>>))lS=M=M.M.M$ u::>> Qx!6619LLLa%(7"33lBBJJNNa%(7*;;lQ>NNN JJNNa%(7*;;lJJ"58E?Q#6a,8VWWH:BBE!HUOeAhw&7$'58E?\+I$J$Ja!  58E?22G$s*U1Xg->>>$'s58E?_<gg>NOO% %a!! $)8G#4  r7!333ENS(59U+;;;#&"Ig&8'%.$ $b	%   "'r5!1$+EN! A@! @!r1   )rC   )(r   r   r   dataclassesr   typingr   r   numbarS   r+   rL   torch.nn.functionalnn
functionalr   audior   r   r	   rm   r
   rl   r   Tensorrf   r%   jitndarrayr0   rB   rU   rY   r[   rg   r   rd   r   r   r   rh   r1   r$   <module>r      s*            ! ! ! ! ! ! & & & & & & & &                = = = = = = = = = =             #U\ # # # # #L DRZ    0 D4(((rz    )(2* * * *B
-5< 
-BJ 
- 
- 
- 
-         O O OOO cO 
	O
 O O O 
*O O O Od$z"2 s c    R !/Am! m! m!4jm! m! 	m!
 
m! m! m! m! !m! m! m! m! m! m!r1   