+
    &j*                     r   ^ RI t ^ RIHt ^ RIHtHt ^ RIHt ^ RI	t	^ RI
t^ RIHt ^RIHtHtHt ^RIHt ]'       d   ^RIHt R R	 lt]	P.                  ! R
R7      R R l4       t]	P.                  ! R
R
R7      R R l4       tR R lt] ! R R4      4       tR^RR/R R lltR R ltRRRR/R  R! lltR# )"    N)	dataclass)TYPE_CHECKINGList)signal)
HOP_LENGTHSAMPLE_RATETOKENS_PER_SECOND)	Tokenizer)Whisperc                D    V ^8  d   QhR\         P                  R\        /# )   xfilter_width)npndarrayint)formats   "j/Users/jameslopez/projects/CWCArchive/cwc-podcast/.venv/lib/python3.14/site-packages/mlx_whisper/timing.py__annotate__r      s      RZZ s     c                   V^,          pV P                   R,          V8:  d   V # V P                  ;p^8:  d
   V R,          p V^ 8  d   V^,          ^8X  g   Q R4       h\        P                  ! V RRW"33RR7      p \        P
                  ! V P                  \        P                  4      ^^V3R7      RW") 13,          pV^8:  d
   VR,          pV# )	zMApply a median filter of width `filter_width` along the last dimension of `x`z&`filter_width` should be an odd numberreflect)mode)kernel_size.)NNNNNr   r   )shapendimr   padr   medfiltastypefloat32)r   r   	pad_widthr   results   &&   r   median_filterr&      s    !Iwwr{i1m 	q\A-20/02 	q66I#9:KA ^^AHHRZZ0q!\>RSYz!!F qyMr   T)nopythonc                8    V ^8  d   QhR\         P                  /# )r   tracer   r   )r   s   "r   r   r   0   s      RZZ r   c                     V P                   ^ ,          ^,
          pV P                   ^,          ^,
          p^V R&   ^V R&   . pV^ 8  g   V^ 8  d   VP                  V^,
          V^,
          34       WV3,          ^ 8X  d   V^,          pV^,          pKR  WV3,          ^8X  d   V^,          pKl  WV3,          ^8X  d   V^,          pK  \        R4      h\        P                  ! V4      pVRRR1R3,          P
                  # )r   r   zUnexpected trace[i, j]N)r   r   )r   r   r   )r   append
ValueErrorr   arrayT)r)   ijr%   s   &   r   	backtracer2   /   s    AAAAE$KE$KF
a%1q5q1ua!en%A;!FAFAa4[AFAa4[AFA566XXfF$B$'?r   )r'   parallelc                8    V ^8  d   QhR\         P                  /# )r   r   r*   )r   s   "r   r   r   I   s      rzz r   c                    V P                   w  r\        P                  ! V^,           V^,           3\        P                  R7      \        P                  ,          p\        P                  ! V^,           V^,           3\        P                  R7      ) p^ VR&   \        ^V^,           4       F  p\        ^V^,           4       F  pW6^,
          V^,
          3,          pW6^,
          V3,          pW6V^,
          3,          p	Wx8  d   Wy8  d   T^ rMW8  d   W8  d   T^rMT	^rW^,
          V^,
          3,          V
,           W6V3&   WWe3&   K  	  K  	  \        V4      # )   )dtyper   )r   r   onesr#   infranger2   )r   NMcostr)   r1   r0   c0c1c2cts   &           r   dtw_cpurC   H   s   77DA77AE1q5>4rvv=DWWa!eQU^2::66EDJ1a!e_q!a%A!eQUl#B!eQhBQhBw2711RW1111q5!a%<1,DAJ!$K !   Ur   c                X    V ^8  d   QhR\         P                  R\         P                  /# )r   r   returnr*   )r   s   "r   r   r   b   s"      2:: "** r   c                     \        V 4      # )N)rC   )r   s   &r   dtwrG   b   s    1:r   c                   ,   a  ] tR t^gt o V 3R ltRtV tR# )
WordTimingc                f   < V ^8  d   Qh/ S[ ;R&   S[S[,          ;R&   S[;R&   S[;R&   S[;R&   # )r   wordtokensstartendprobability)strr   r   float)r   __classdict__s   "r   r   WordTiming.__annotate__g   sE     
I  I  L	 
 
J   r    N)__name__
__module____qualname____firstlineno____annotate_func____static_attributes____classdictcell__)rR   s   @r   rI   rI   g   s      r   rI   medfilt_widthqk_scaleg      ?c                    V ^8  d   QhRRR\         R\        \        ,          R\        P                  R\        R\        R\
        R	\        \        ,          /# )
r   modelr   	tokenizertext_tokensmel
num_framesr\   r]   rE   )r
   r   r   mxr.   rQ   rI   )r   s   "r   r   r   p   so     G GGG cG 
	G
 G G G 
*Gr   c                   \        V4      ^ 8X  d   . # \        P                  ! . VP                  OVP                  NVOVP
                  N4      pV P                  VR,          VR,          4      w  rV^ ,          \        VP                  4      R1RVP
                  13,          p
\        P                  ! V
RRR7      p\        P                  ! V\        P                  ! V4      R,          ^R7      P                  ^4      p\        P                  ! V4      p\        P                  ! V P                  P                  4        UUu. uF  w  rW,          ^ V3,          NK  	  upp4      pVRRRV^,          13,          p\        P                  ! W,          RRR7      pVP                  \        P                  4      p\        P                   ! VRRR7      p\        P"                  ! VRR^ R7      P%                  4       pVV,
          V,          p\'        \        P                  ! V4      V4      pVP!                  ^ R7      pV\        VP                  4      R p\)        V) 4      w  ppVP+                  W!P
                  .,           4      w  pp\        V4      ^8:  d   . # \        P,                  ! \        P.                  ! VRR  Uu. uF  p\        V4      NK  	  up4      R4      p\        P,                  ! \        P0                  ! V4      R^R	7      P                  \2        4      pVV,          \4        ,          pVVRR ,          pVVR
,          ,          p\7        VRR VR
,          4       UUu. uF  w  pp\        P                   ! VVV 4      NK!  	  ppp\7        VVVVV4       U UU!U"U#u. uF  w  p pp!p"p#\9        V VV!V"V#4      NK  	  up#p"p!pp # u uppi u upi u uppi u up#p"p!pp i )r   Nr   T)preciseaxis)rg   )rg   rf   )rg   keepdims)rg   rh   ddof)constant_values:r6   NN)Nr   r   )r   N)r6   r   )lenrd   r.   sot_sequenceno_timestampseotforward_with_cross_qksoftmaxtake_along_axissqueezer   stackalignment_headstolistr"   r#   meanvarsqrtr&   rG   split_to_word_tokensr    cumsumdiffboolr	   ziprI   )$r_   r`   ra   rb   rc   r\   r]   rL   logitscross_qksampled_logitstoken_probstext_token_probs_l_hweightsrw   stdmatrixtext_indicestime_indiceswordsword_tokensrB   word_boundariesjumps
jump_timesstart_times	end_timesr0   r1   word_probabilitiesrK   rM   rN   rO   s$   &&&&&$$                             r   find_alignmentr   p   sy    ;1	XX	
##	
##	
 	
 MM		
F 223w<QFAYs9#9#9:R?9==PQN**^TCK))RXXk*73!gaj  xx 01 hh+0+@+@+G+G+IJ+Iae		+IJG a-jAo--.Gjj+"dCGnnRZZ(G777d3D
&&rDq
9
>
>
@C~$GBHHW-}=G\\q\!FC	../"5F!$fWL,"77}}o8UVE;
;1 	ffRYYCR8H'I8H1A8H'IJFSOFF277<(&!DKKDQEe$'88J_Sb12K?2./I ,ob.ABBDAq 	 1%&B   69;Y8J6
6
1D&%k 	4[96
 C 	K, (J
s   O
O+%O(Oc                R    V ^8  d   QhR\         \        ,          R\        R\        /# )r   	alignment	prependedappended)r   rI   rP   )r   s   "r   r   r      s&      $z"2 s c r   c                 (   \        V 4      ^,
          p\        V 4      ^,
          pV^ 8  d   W,          pW,          pVP                  P                  R4      '       ds   VP                  P                  4       V9   dT   VP                  VP                  ,           Vn        VP                  VP                  ,           Vn        RVn        . Vn        MTpV^,          pK  ^ p^pV\        V 4      8  d   W,          pW,          pVP                  P                  R4      '       ge   VP                  V9   dT   VP                  VP                  ,           Vn        VP                  VP                  ,           Vn        RVn        . Vn        MTpV^,          pK  R# )r     N)rl   rK   
startswithstriprL   endswith)r   r   r   r0   r1   previous	followings   &&&    r   merge_punctuationsr      s5   IAIA
q&<L	==##C((X]]-@-@-Bi-O%]]Y^^;IN'1A1AAIHM HOA	Q 	
A	A
c)n
<L	}}%%c**y~~/I$MMINN:HM&oo	0@0@@HOIN!IA	Q r   prepend_punctuationsu   "'“¿([{-append_punctuationsu   "'.。,，!！?？:：”)]}、c                    V ^8  d   QhR\         \        ,          RRR\        R\        P                  R\
        R\        R\        R	\        /# )
r   segmentsr_   r   r`   rb   rc   r   r   last_speech_timestamp)r   dictr
   rd   r.   r   rP   rQ   )r   s   "r   r   r      sl     m! m!4jm! m! 	m!
 
m! m! m! m! !m!r   c                 `   \        V 4      ^ 8X  d   R# V  U	U
u. uF.  p	V	R,           U
u. uF  qVP                  8  g   K  V
NK  	  up
NK0  	  pp	p
\        \        P                  P                  V4      4      p\        WWV3/ VB p\        P                  ! V Uu. uF  qP                  VP                  ,
          NK!  	  up4      pWP                  4       ,          p\        V4      ^ 8  d   \        P                  ! V4      MRp\        R\        V4      4      pV^,          p\        V4      ^ 8  d   Rp\        ^\        V4      4       F  pVV,          P                  VV,          P                  ,
          V8  g   K5  VV,          P                   V9   d)   VV,          P                  V,           VV,          n	        Ku  VV^,
          ,          P                   V9   g   K  VV,          P                  V,
          VV,          n
        K  	  \#        WV4       V ^ ,          R,          \$        ,          \&        ,          p^ p\)        W4       EFR  w  r^ p. pV\        V4      8  d   V\        V4      8  d   VV,          pVP                   '       dr   VP+                  \-        VP                   \/        VVP                  ,           ^4      \/        VVP                  ,           ^4      \        VP0                  4      R7      4       V\        VP2                  4      ,          pV^,          pK  \        V4      ^ 8  Ed`   V^ ,          R,          V,
          V^,          8  Ed   V^ ,          R,          V^ ,          R	,          ,
          V8  gB   \        V4      ^8  d   V^,          R,          V^ ,          R	,          ,
          V^,          8  d   \        V4      ^8  dy   V^,          R,          V^,          R	,          ,
          V8  dO   \5        V^,          R,          ^,          V^,          R,          V,
          4      pV;V^ ,          R&   V^,          R	&   \5        ^ V^ ,          R,          V,
          4      V^ ,          R	&   V	R	,          V^ ,          R,          8  da   V	R	,          R
,
          V^ ,          R	,          8  d>   \5        ^ \        V^ ,          R,          V,
          V	R	,          4      4      V^ ,          R	&   MV^ ,          R	,          V	R	&   V	R,          VR,          R	,          8  dW   V	R,          R
,           VR,          R,          8  d4   \5        VR,          R	,          V,           V	R,          4      VR,          R&   MVR,          R,          V	R&   V	R,          pVV	R&   EKU  	  R# u up
i u up
p	i u upi )r   NrL   g        gffffff?u   .。!！?？seek)rK   rM   rN   rO   rN   rM   g      ?r   r   )rl   ro   list	itertoolschainfrom_iterabler   r   r.   rN   rM   nonzeromedianminrQ   r:   rK   r   r   r   r~   r,   r   roundrO   rL   max)r   r_   r`   rb   rc   r   r   r   kwargssegmenttokentext_tokens_per_segmentra   r   rB   word_durationsmedian_durationmax_durationsentence_end_marksr0   time_offset
word_indexsaved_tokensr   timingboundarys   $$$$$$$$,                 r   add_word_timestampsr      s    8}  G $H-G-51F-G  
 y445LMNKu:XQWXIXX	B	1uuqww	BCN#$:$:$<=N36~3F3Jbii/PSO#u_56O"Q&L >Q+q#i.)A|)A,"4"44|CQ<$$(::'0|'9'9L'HIaL$q1u%**.@@)21)9)9L)HIaL& * y8KL1+f%
2[@KJ #H F3y>)lS=M.Mz*F{{{#[[#K&,,$>B!+

":A>$)&*<*<$=	 C..L!OJ 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 !G; 	H Cs!   V%V V V%%V+ V%)r   dataclassesr   typingr   r   mlx.corecorerd   numbanumpyr   scipyr   audior   r   r	   r`   r
   r_   r   r&   jitr2   rC   rG   rI   r   r   r   rT   r   r   <module>r      s     ! &     = =  8 D 0 D4( )2
   G G GTDm! !/m!  Bm! m!r   