+
    &j!                     h   ^ RI t ^ RIt^ RIt^ RIHt ^ RIHt ^ RIHt	 ^ RI
Ht ^ RIt^RIHt ^RIHt ] ! R R4      4       tRR lt ! R	 R
]P*                  4      t ! R R]P*                  4      t ! R R]P*                  4      t ! R R]P*                  4      t ! R R]P*                  4      tR# )    N)	dataclass)Union)decode)detect_languagec                   ,   a  ] tR t^t o V 3R ltRtV tR# )ModelDimensionsc                   < V ^8  d   Qh/ S[ ;R&   S[ ;R&   S[ ;R&   S[ ;R&   S[ ;R&   S[ ;R&   S[ ;R&   S[ ;R&   S[ ;R	&   S[ ;R
&   # )   n_melsn_audio_ctxn_audio_staten_audio_headn_audio_layern_vocab
n_text_ctxn_text_staten_text_headn_text_layerint)format__classdict__s   "k/Users/jameslopez/projects/CWCArchive/cwc-podcast/.venv/lib/python3.14/site-packages/mlx_whisper/whisper.py__annotate__ModelDimensions.__annotate__   s     K    	 
     L  O            N)__name__
__module____qualname____firstlineno____annotate_func____static_attributes____classdictcell__)r   s   @r   r   r      s      r   r   c                   V^,          ^ 8X  g   Q h\         P                  ! V4      V^,          ^,
          ,          p\        P                  ! V) \        P                  ! V^,          4      ,          4      p\        P                  ! V 4      R,          VR,          ,          p\        P
                  ! \        P                  ! V4      \        P                  ! V4      .^R7      # )z*Returns sinusoids for positional embeddingaxis)NNNN)Nr(   )mathlogmxexparangeconcatenatesincos)lengthchannelsmax_timescalelog_timescale_incrementinv_timescalesscaled_times   &&&   r   	sinusoidsr7      s    a<1"hh}5Q9JKVV44ryyQ7OOPN))F#G,~g/FFK>>266+.{0CD1MMr   c                   R   a a ] tR t^(t oV3R lV 3R lltRR ltRR ltRtVtV ;t	# )MultiHeadAttentionc                &   < V ^8  d   QhRS[ RS[ /# )r
   n_staten_headr   )r   r   s   "r   r   MultiHeadAttention.__annotate__)   s     / / /S /r   c                  < \         SV `  4        W n        \        P                  ! W4      V n        \        P                  ! WR R7      V n        \        P                  ! W4      V n        \        P                  ! W4      V n        R# )F)biasN)	super__init__r<   nnLinearquerykeyvalueout)selfr;   r<   	__class__s   &&&r   rA   MultiHeadAttention.__init__)   sU    YYw0
99WE:YYw0
99W.r   c                   V P                  V4      pVfj   V P                  V4      pV P                  V4      pVeC   \        P                  ! V^ ,          V.^R7      p\        P                  ! V^,          V.^R7      pM+Vf$   V P                  V4      pV P                  V4      pMVw  rgV P                  WVWs4      w  rV P                  V4      Wg3V	3# )Nr&   )rD   rE   rF   r+   r.   qkv_attentionrG   )
rH   xxamaskkv_cacheqkvwvqks
   &&&&&     r   __call__MultiHeadAttention.__call__1   s     JJqM:A

1A#NNHQK#3!<NNHQK#3!<A

2ADA##A!2xx|aVR''r   c                   VP                   w  rVpWpP                  ,          R,          pVP                  ! . VP                   R,          OV P                  NRN5!  P                  ^ ^^^4      V,          pVP                  ! . VP                   R,          OV P                  NRN5!  P                  ^ ^^^4      V,          pVP                  ! . VP                   R,          OV P                  NRN5!  P                  ^ ^^^4      pW,          p	Ve   WRV1RV13,          ,           p	\        P
                  ! V	RRR7      p
W,          P                  ^ ^^^4      pVP                  WVV4      pW3# )g      ?:Nr
   NNT)r'   preciseg      п)shaper<   reshape	transposer+   softmax)rH   rQ   rR   rS   rO   n_batchn_ctxr;   scalerU   wrG   s   &&&&&       r   rL    MultiHeadAttention.qkv_attentionI   s:   "#''KK'E1II4qwwr{4DKK44>>q!QJURII4qwwr{4DKK44>>q!QJURII4qwwr{4DKK44>>q!QJU6E66E6>**BJJrD1u1a+kk''2wr   )rE   r<   rG   rD   rF   NNNN)
r   r   r    r!   rA   rV   rL   r#   r$   __classcell__rI   r   s   @@r   r9   r9   (   s     / /(0 r   r9   c                   L   a a ] tR t^Zt oRV3R lV 3R llltRR ltRtVtV ;t# )ResidualAttentionBlockc                ,   < V ^8  d   QhRS[ RS[ RS[/# )r
   r;   r<   cross_attention)r   bool)r   r   s   "r   r   #ResidualAttentionBlock.__annotate__[   s"     , , ,S ,4 ,r   c                  < \         SV `  4        \        W4      V n        \        P
                  ! V4      V n        V'       d   \        W4      MR V n        V'       d   \        P
                  ! V4      MR V n        V^,          p\        P                  ! W4      V n
        \        P                  ! WA4      V n        \        P
                  ! V4      V n        R # re   )r@   rA   r9   attnrB   	LayerNormattn_ln
cross_attncross_attn_lnrC   mlp1mlp2mlp_ln)rH   r;   r<   rk   n_mlprI   s   &&&& r   rA   ResidualAttentionBlock.__init__[   s    &w7	||G, 4Cw/ 	 7FR\\'24!IIg-	IIe-	ll7+r   c           
        V'       d   TMRw  rVV P                  V P                  V4      W5R7      w  rupW,          pR p	V P                  '       d.   V P                  V P                  V4      W&R7      w  rvp	W,          pWP	                  \
        P                  ! V P                  V P                  V4      4      4      4      ,           pWV3V	3# )NrO   rP   )rP   )NN)	ro   rq   rr   rs   ru   rB   gelurt   rv   )
rH   rM   rN   rO   rP   kvcross_kvy_cross_qks
   &&&&&     r   rV   ResidualAttentionBlock.__call__k   s    #+x99T\\!_49Eq	???$(OO""1%r %4 %!A FA		"''$))DKKN";<==x.(**r   )ro   rq   rr   rs   rt   ru   rv   )Frd   )	r   r   r    r!   rA   rV   r#   r$   rf   rg   s   @@r   ri   ri   Z   s     , , + +r   ri   c                   ^   a a ] tR t^yt o]P
                  3V3R lV 3R llltR tRtVt	V ;t
# )AudioEncoderc                R   < V ^8  d   QhRS[ RS[ RS[ RS[ RS[ RS[P                  /# )r
   r   r`   r;   r<   n_layerdtyper   r+   Dtype)r   r   s   "r   r   AudioEncoder.__annotate__z   sK     - -- - 	-
 - - xx-r   c                n  < \         SV `  4        \        P                  ! W^^R7      V n        \        P                  ! W3^^^R7      V n        \        W#4      P                  V4      V n        \        V4       Uu. uF  p\        W44      NK  	  upV n        \        P                  ! V4      V n        R# u upi )   )kernel_sizepadding)r   strider   N)r@   rA   rB   Conv1dconv1conv2r7   astype_positional_embeddingrangeri   blocksrp   ln_post)	rH   r   r`   r;   r<   r   r   r   rI   s	   &&&&&&& r   rA   AudioEncoder.__init__z   s     	YYvAqI
YYwQqRST
%.u%>%E%Ee%L"HMgW1-g>W||G, Xs   9B2c                   \         P                  ! V P                  V4      4      p\         P                  ! V P                  V4      4      pVP                  R ,          V P
                  P                  8X  g   Q R4       hWP
                  ,           pV P                   F  pV! V4      w  p pK  	  V P                  V4      pV# ):   NNzincorrect audio shape)rB   r{   r   r   r[   r   r   r   )rH   rM   blockr   s   &&  r   rV   AudioEncoder.__call__   s    GGDJJqM"GGDJJqM"wwr{d88>>>W@WW>***[[EAhGAq! ! LLOr   )r   r   r   r   r   r   r   r    r!   r+   float16rA   rV   r#   r$   rf   rg   s   @@r   r   r   y   s"      **- -"
 
r   r   c                   b   a a ] tR t^t o]P
                  3V3R lV 3R llltRR ltRtVt	V ;t
# )TextDecoderc                R   < V ^8  d   QhRS[ RS[ RS[ RS[ RS[ RS[P                  /# )r
   r   r`   r;   r<   r   r   r   )r   r   s   "r   r   TextDecoder.__annotate__   sK     
 

 
 	

 
 
 xx
r   c           	       < \         SV `  4        \        P                  ! W4      V n        \
        P                  ! W#34      V n        \        V4       Uu. uF  p\        W4R R7      NK  	  upV n
        \        P                  ! V4      V n        \        P                  P                  V4      P                  V4      V n        R# u upi )T)rk   N)r@   rA   rB   	Embeddingtoken_embeddingr+   zerospositional_embeddingr   ri   r   rp   lnr9   create_additive_causal_maskr   _mask)	rH   r   r`   r;   r<   r   r   r   rI   s	   &&&&&&& r   rA   TextDecoder.__init__   s     	!||G=$&HHe-=$>! 7^
# #7DI#
 ,,w'**FFuMTT


s   Cc                8   V'       d)   V^ ,          ^ ,          ^ ,          P                   ^,          M^ pV P                  V4      V P                  WDVP                   R,          ,            ,           pVf   R.\        V P                  4      ,          pR.\        V P                  4      ,          p\        V P                  4       F(  w  rgV! WV P                  W6,          R7      w  qV&   WV&   K*  	  V P                  V4      pV P                  P                  V4      W53# )z
x : mx.array, shape = (batch_size, <= n_ctx)
    the text tokens
xa : mx.array, shape = (batch_size, n_audio_ctx, n_audio_state)
    the encoded audio features to be attended on
Nrz   rZ   )	r[   r   r   lenr   	enumerater   r   	as_linear)rH   rM   rN   rP   offsetr   er   s   &&&&    r   rV   TextDecoder.__call__   s     08!Q"((+Q  #''!''"+1EFG 	

 vDKK 00H6C,,!$++.HA*/DJJ+'A{HK /
 GGAJ##--a0(DDr   )r   r   r   r   r   re   r   rg   s   @@r   r   r      s$      **
 
.E Er   r   c                      a a ] tR t^t o]P
                  3V3R lV 3R llltV3R lR ltR tR t	R t
R t]R	 4       t]R
 4       t]t]tRtVtV ;t# )Whisperc                :   < V ^8  d   QhRS[ RS[P                  /# )r
   dimsr   )r   r+   r   )r   r   s   "r   r   Whisper.__annotate__   s#     K K_ KRXX Kr   c                l  < \         SV `  4        Wn        \        V P                  P                  V P                  P
                  V P                  P                  V P                  P                  V P                  P                  V4      V n	        \        V P                  P                  V P                  P                  V P                  P                  V P                  P                  V P                  P                  V4      V n        \"        P$                  ! V P                  P                  V P                  P                  3\&        R 7      pRW0P                  P                  ^,          R% \(        P*                  ! \"        P,                  ! VP/                  4       4      P0                  4      V n        R# )r   TN)r@   rA   r   r   r   r   r   r   r   encoderr   r   r   r   r   r   decodernpr   rl   r+   arrayasarraynonzeroTalignment_heads)rH   r   r   	all_headsrI   s   &&& r   rA   Whisper.__init__   s(   	#IIII!!II##II""II##
 #IIII  II""II!!II""
 HHYY##TYY%:%:;4
	 48	))((A-/0!xx

93D3D3F(G(I(IJr   c                J   < V ^8  d   QhRS[ S[S[P                  3,          /# )r
   dump)r   bytesr   ndarray)r   r   s   "r   r   r      s"      eRZZ.?(@ r   c                   \        V\        P                  4      '       d   \        P                  ! V4      V n        R# \        V\        4      '       d   \        P                  ! \        P                  ! \        P                  ! V4      4      \        R 7      P                  4       pVP                  V P                  P                   V P                  P"                  4      p\        P                  ! \        P$                  ! VP'                  4       4      P(                  4      V n        R# \+        R\-        V4       R24      h)r   zInvalid type for `dump`: zU. Expected a np.ndarray or base85-encoded bytes containing alignment_head informationN)
isinstancer   r   r+   r   r   r   
frombuffergzip
decompressbase64	b85decoderl   copyr\   r   r   r   r   r   r   
ValueErrortype)rH   r   r   rO   s   &&  r   set_alignment_headsWhisper.set_alignment_heads   s    dBJJ''#%88D>D e$$MM 0 0 67tdf  ==!7!79N9NOD#%88BJJt||~,F,H,H#ID +DJ< 8. . r   c                $    V P                  V4      # re   )r   )rH   mels   &&r   embed_audioWhisper.embed_audio   s    ||C  r   c                2    V P                  W4      ^ ,          # r   )r   )rH   tokensaudio_featuress   &&&r   logitsWhisper.logits   s    ||F3A66r   c                N    V P                  W P                  V4      4      w  r4pW53# re   r   r   )rH   r   r   r   r   r   s   &&&   r   forward_with_cross_qkWhisper.forward_with_cross_qk   s'    "ll6<<3DE8r   c                P    V P                  W P                  V4      4      ^ ,          # r   r   )rH   r   r   s   &&&r   rV   Whisper.__call__   s    ||FLL$56q99r   c                4    V P                   P                  R 8  # )i  )r   r   rH   s   &r   is_multilingualWhisper.is_multilingual  s    yy  E))r   c                p    V P                   P                  R ,
          \        V P                  4      ,
          # )i5  )r   r   r   r   r   s   &r   num_languagesWhisper.num_languages  s'    yy  5(3t/C/C+DDDr   )r   r   r   r   )r   r   r    r!   r+   r   rA   r   r   r   r   rV   propertyr   r   detect_language_functionr   decode_functionr   r#   r$   rf   rg   s   @@r   r   r      sn     @B

 K K6 !7 : * * E E /OFFr   r   )i'  )r   r   r)   dataclassesr   typingr   mlx.corecorer+   mlx.nnrB   numpyr   decodingr   r   r   r   r   r7   Moduler9   ri   r   r   r   r   r   r   <module>r      s       !     / A 
 
 
N/ /d+RYY +>299 >.E")) .EbAbii Ar   