
    Ǆg1                     b   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j0                  d	efd
Z ej6                  d      de
j8                  fd       Z ej6                  dd      de
j8                  fd       Zd.dZdej0                  de
j8                  fdZ e G d d             Z!ddddddedee   dej0                  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j0                  ded*e$d+e$d,e"fd-Z'y)/    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kD  r|dz  dk(  sJ d       d}t        j                  | |dz  |dz  ddfd      } | j                  r	 dd	lm}  || |      }|,| j                  d|d      j                         d   d|dz  f   }|dk  r|d   }|S # t        t        j                  f$ r t        j                  d
       Y jw xY w)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         V/home/mcse/projects/flask_80/flask-venv/lib/python3.12/site-packages/whisper/timing.pymedian_filterr%      s'   !Iwwr{i1dD!m 	q\A-20/02 F	a,!#\Q%61=INAyy	6'<8F ~"lA.335a8la>O9OPqyM j;;< 	MMK	s   :C .C43C4T)nopythontracec                    | j                   d   dz
  }| j                   d   dz
  }d| dd d f<   d| d d df<   g }|dkD  s|dkD  re|j                  |dz
  |dz
  f       | ||f   dk(  r|dz  }|dz  }n+| ||f   dk(  r|dz  }n| ||f   dk(  r|dz  }nt        d      |dkD  r_|dkD  ret        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!Q$KE!Q$KF
a%1q5q1ua!en%A;!FAFA1a4[AFA1a4[AFA566 a%1q5 XXfF$B$'?    )r&   parallelc                 &   | 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 ]u  }t        d|dz         D ]a  }||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<   c w t        |      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   s?   77DAq77AE1q5>4rvv=DWWa!eQU^2::66EDJ1a!e_ q!a% 	Aa!eQUl#Ba!eQhBaQhBBw2711bR"W11111q5!a%<1,DAJE!Q$K	  Ur1   c                 h   ddl m} | j                  \  }}||k  s
J d|       t        j                  | d|dz   ft
        j                        j                         d |||z   z   j                  |||z         }|j                  j                         }t        j                  ||z   dz   |dz         t
        j                  z  }d|d<   |j                         }t        j                  |t        j                        } |d	   ||||j!                  d      |j!                  d      |j!                  d      |||
	       |j                  j                         d |dz   ||z   dz   z   j                  |dz   ||z   dz         d d d |dz   f   }t#        |j%                         j'                               S )Nr   )
dtw_kernelz$M should be smaller than BLOCK_SIZE=r   )valuer   r   r4   )r   )
BLOCK_SIZE   )r   rD   r   r   r   r+   r8   flattenreshaper-   
contiguoustorchr6   cuda
zeros_likeint32strider0   cpunumpy)r   rF   rD   r;   r:   x_skewr<   r'   s           r$   dtw_cudarS   l   s   &77DAqz>DBzmDD> 	
a!QU266*224]qAE{CKKAqSTuU  XX  "F::a!eaiQ'"&&0DDJ99;DT5EJtaAQ		
 GGOO5Q1q519 56>>q1ua!eaiP	7QU7
E UYY[&&())r1   returnc                    | j                   r	 t        |       S t        | j                         j                         j                               S # t        t        j                  f$ r t        j                  d       Y ew xY w)NzsFailed to launch Triton kernels, likely due to missing CUDA toolkit; falling back to a slower DTW implementation...)r   rS   r   r   r   r   r   rB   doublerP   rQ   )r   s    r$   dtwrW      si    yy	A; 188:>>#))+,, j;;< 	MMA	s   
A .A?>A?c                   F    e Zd ZU eed<   ee   ed<   eed<   eed<   eed<   y)
WordTimingwordtokensstartendprobabilityN)__name__
__module____qualname__str__annotations__r   intfloat r1   r$   rY   rY      s!    
IIL	Jr1   rY      g      ?)medfilt_widthqk_scalemodelr   	tokenizertext_tokensmel
num_framesrh   ri   c                  ' t        |      dk(  rg S t        j                  g |j                  |j                  ||j
                        j                  | j                        }d g| j                  j                  z  't        | j                  j                        D 	cg c]%  \  }}	|	j                  j                  |f'fd	      ' }
}}	ddlm} t        j"                         5   |       5   | |j%                  d      |j%                  d            d   }|t        |j                        d d |j
                  f   }|j'                  d      }|t)        j*                  t        |            |f   }|j-                         }d d d        d d d        |
D ]  }|j/                           t        j0                  | j2                  j5                         j6                  D cg c]  \  }}'|   |    c}}      }|d d d d d |dz  f   }||z  j'                  d      }t        j8                  |dd	d
      \  }}||z
  |z  }t;        ||      }|j=                  d      }|t        |j                        d }t?        |       \  }}|jA                  ||j
                  gz         \  }}t        |      dk  rg S t)        jB                  t)        jD                  |d d D cg c]  }t        |       c}      d      }t)        jB                  t)        jF                  |      dd      jI                  tJ              }||   tL        z  }||d d    }||dd     } tO        |d d |dd        D !cg c]  \  }}!t)        j<                  ||!        }"}}!tO        |||| |"      D #$%&cg c]  \  }#}}$}%}&tQ        |#||$|%|&       c}&}%}$}}#S c c}	}w # 1 sw Y   OxY w# 1 sw Y   TxY wc c}}w c c}w c c}!}w c c}&}%}$}}#w )Nr   c                 4    j                  ||d   d         S )Nr   r   )__setitem__)_insoutsindexQKss       r$   <lambda>z find_alignment.<locals>.<lambda>   s    #//%b!*M r1   r   )disable_sdpar   )dimr   TF)ry   keepdimunbiased)axis)r   r   )constant_values))lenrK   tensorsot_sequenceno_timestampseottodevicedimsn_text_layer	enumeratedecoderblocks
cross_attnregister_forward_hookrj   rx   no_grad	unsqueezesoftmaxr+   arangetolistremovestackalignment_headsindicesr-   std_meanr%   meanrW   split_to_word_tokensr   cumsumdiffastypeboolr	   ziprY   )(rj   rk   rl   rm   rn   rh   ri   r[   r.   blockhooksrx   logitssampled_logitstoken_probstext_token_probshook_l_hweightsstdr   matrixtext_indicestime_indiceswordsword_tokensrA   word_boundariesjumps
jump_timesstart_times	end_timesr/   word_probabilitiesrZ   r\   r]   r^   rv   s(                                          @r$   find_alignmentr      s    ;1	\\	
##	
##	
 	
 MM		
 	b  &5::**
*C
 "%--"6"67	 Au 	..'(M	
E  $	 5,. 5s}}Q')9)9!)<=a@I$:$: ; = NO$,,,4&ryy[1A'BK'OP+2245 5   kkU5J5J5R5R5T5V5VW62r3r72;WXGa-jAo--.G!**r*2GwBuMIC~$GG]3G\\q\!FC	../"5F!$fWL,"77y}}o8UVE;
;1 	ffRYYCR8H'I1A'IJFSOFF277<(&!DKKDQEe$'88J_Sb12K?12./I ,oab.ABAq 	 1%&  69;Y8J6
 1D&%k 	4[9 e5 5 5 5 X& (J
sC   "*O)O#1BO	O#&O0
&O63"O;-PO 	O##O-	alignment	prependedappendedc                    t        |       dz
  }t        |       dz
  }|dk\  r| |   }| |   }|j                  j                  d      rg|j                  j                         |v rK|j                  |j                  z   |_        |j                  |j                  z   |_        d|_        g |_        n|}|dz  }|dk\  rd}d}|t        |       k  r| |   }| |   }|j                  j                  d      sY|j                  |v rK|j                  |j                  z   |_        |j                  |j                  z   |_        d|_        g |_        n|}|dz  }|t        |       k  ry y )Nr   r   r     )r   rZ   
startswithstripr[   endswith)r   r   r   r.   r/   previous	followings          r$   merge_punctuationsr      sI   IAIA
q&Q<aL	==##C(X]]-@-@-Bi-O%]]Y^^;IN'1A1AAIHM HOA	Q q& 	
A	A
c)n
Q<aL	}}%%c*y~~/I$MMINN:HM&oo	0@0@@HOIN!IA	Q c)n
r1   u   "'“¿([{-u   "'.。,，!！?？:：”)]}、)prepend_punctuationsappend_punctuationssegmentsr   r   last_speech_timestampc                 ^   t        |       dk(  ry | D 	
cg c]%  }	|	d   D 
cg c]  }
|
|j                  k  s|
 c}
' }}	}
t        t        j                  j                  |            }t        |||||fi |}t        j                  |D cg c]  }|j                  |j                  z
   c}      }||j                            }t        |      dkD  rt        j                  |      nd}t        dt        |            }|dz  }t        |      dkD  rd}t        dt        |            D ]  }||   j                  ||   j                  z
  |kD  s&||   j                   |v r||   j                  |z   ||   _	        R||dz
     j                   |v sg||   j                  |z
  ||   _
         t#        |||       | d   d   t$        z  t&        z  }d}t)        | |      D ];  \  }	}d}g }|t        |      k  r|t        |      k  r||   }|j                   r`|j+                  t-        |j                   t/        ||j                  z   d      t/        ||j                  z   d      |j0                  	             |t        |j2                        z  }|dz  }|t        |      k  r|t        |      k  rt        |      dkD  rV|d   d
   |z
  |dz  kD  r|d   d
   |d   d   z
  |kD  s%t        |      dkD  r|d   d
   |d   d   z
  |dz  kD  rkt        |      dkD  rB|d   d
   |d   d   z
  |kD  r.t5        |d   d
   dz  |d   d
   |z
        }|x|d   d
<   |d   d<   t5        d|d   d
   |z
        |d   d<   |	d   |d   d
   k  r:|	d   dz
  |d   d   kD  r)t5        dt        |d   d
   |z
  |	d               |d   d<   n|d   d   |	d<   |	d
   |d   d   kD  r0|	d
   dz   |d   d
   k  rt5        |d   d   |z   |	d
         |d   d
<   n|d   d
   |	d
<   |	d
   }||	d<   > y c c}
w c c}
}	w c c}w )Nr   r[   g        gffffff?r   u   .。!！?？r   seek)rZ   r\   r]   r^   r]      r\   g      ?r   r   )r   r   list	itertoolschainfrom_iterabler   r+   r,   r]   r\   nonzeromedianminre   r9   rZ   r   r   r   r   r)   dictroundr^   r[   max)r   rj   rk   rm   rn   r   r   r   kwargssegmenttokentext_tokens_per_segmentrl   r   rA   word_durationsmedian_durationmax_durationsentence_end_marksr.   time_offset
word_indexsaved_tokensr   timingboundarys                             r$   add_word_timestampsr     s    8}   $H-G51FG 
 y445LMNKuic:XQWXIXX	B1quuqwwBCN#N$:$:$<=N36~3F3Jbii/PSO#u_56O"Q&L >Q+q#i.) 	IA|)A,"4"44|CQ<$$(::'0|'9'9L'HIaL$q1u%**.@@)21)9)9L)HIaL&	I y"68KL1+f%
2[@KJ #H.E F @!3y>)lS=M.Mz*F{{#[[#K&,,$>B!+

":A>$*$6$6	 C..L!OJ 3y>)lS=M.M$ u:> Qx!6619LLa%(7"33lBJNa%(7*;;lQ>NN JNa%(7*;;lJ"58E?Q#6a,8VWH:BBE!HUOeAhw&7$'58E?\+I$Ja!  58E?2G$s*U1Xg->>$'s58E?_<gg>NO%a! $)8G#4  r7!33ENS(59U+;;#&"Ig&8'%.$b	%  "'r5!1$+EN! A@!; 	H Cs    P$PPP$ P*P$)i   )(r   r   r   dataclassesr   typingr   r   numbarQ   r+   rK   torch.nn.functionalnn
functionalr   audior   r   r	   rk   r
   rj   r   Tensorrd   r%   jitndarrayr0   rB   rS   rW   rY   re   r   rb   r   r   r   rf   r1   r$   <module>r      s      ! &      = =  #U\\ # #L DRZZ  0 D4(rzz  )2*B
-5<< 
-BJJ 
-    OOO cO 
	O
 O O O 
*Od$z"2 s c R !/Am!4jm! m! 	m!
 
m! m! m! m! !m!r1   