+
    &j`)                        ^ RI t ^ RIt^ RIHt ^ RIHtHtHt ^ RIt	^ RI
t
^ RIHu Ht ^ RI
HtHt ] ! R R4      4       t ! R R]P"                  4      t ! R	 R
]P$                  4      t ! R R]P&                  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)DictIterableOptional)Tensornnc                   ,   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   "q/Users/jameslopez/projects/CWCArchive/cwc-podcast/.venv/lib/python3.14/site-packages/mlx_whisper/torch_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                   >   a a ] tR t^t oV3R lV 3R lltRtVtV ;t# )	LayerNormc                &   < V ^8  d   QhRS[ RS[ /# r   xreturnr   )r   r   s   "r   r   LayerNorm.__annotate__   s     8 8 8F 8r   c                p   < \         SV `  VP                  4       4      P                  VP                  4      # N)superforwardfloattypedtype)selfr,   	__class__s   &&r   r3   LayerNorm.forward   s'    wqwwy)..qww77r   r   )r    r!   r"   r#   r3   r%   r&   __classcell__r8   r   s   @@r   r)   r)      s     8 8 8r   r)   c                   2   a  ] tR t^!t o V 3R lR ltRtV tR# )Linearc                &   < V ^8  d   QhRS[ RS[ /# r+   r.   )r   r   s   "r   r   Linear.__annotate__"   s     
 
 
F 
r   c                    \         P                  ! TV P                  P                  VP                  4      V P
                  f   R 4      # V P
                  P                  VP                  4      4      # r1   )Flinearweighttor6   bias)r7   r,   s   &&r   r3   Linear.forward"   sV    xxKKNN177#II%D
 	
 ,099<<+@
 	
r   r   N)r    r!   r"   r#   r3   r%   r&   r'   s   @r   r=   r=   !   s     
 
r   r=   c                   >   a a ] tR t^*t oV3R lV 3R lltRtVtV ;t# )Conv1dc                B   < V ^8  d   QhRS[ RS[ RS[S[ ,          RS[ /# )r   r,   rC   rE   r-   r   r   )r   r   s   "r   r   Conv1d.__annotate__+   s2     
 

!'
/7/?
	
r   c                   < \         ST `  YP                  VP                  4      Vf   R 4      # VP                  VP                  4      4      # r1   )r2   _conv_forwardrD   r6   )r7   r,   rC   rE   r8   s   &&&&r   rM   Conv1d._conv_forward+   sG     w$yy!4<4
 	
=AWWQWW=M
 	
r   r   )r    r!   r"   r#   rM   r%   r&   r:   r;   s   @@r   rH   rH   *   s     
 
 
r   rH   c                   V^,          ^ 8X  g   Q h\         P                  ! V4      V^,          ^,
          ,          p\        P                  ! V) \        P                  ! V^,          4      ,          4      p\        P                  ! V 4      R\         P
                  3,          V\         P
                  R3,          ,          p\        P                  ! \        P                  ! V4      \        P                  ! V4      .^R7      # )z*Returns sinusoids for positional embedding:NNNdim)	nplogtorchexparangenewaxiscatsincos)lengthchannelsmax_timescalelog_timescale_incrementinv_timescalesscaled_times   &&&   r   	sinusoidsra   3   s    a<1 ff]3x1}q7HIYY 77%,,xST}:UUVN,,v&q"**}5rzzST}8UUK99eii,eii.DE1MMr   c                   j   a a ] tR t^<t oV3R lV 3R lltRV3R lR lltR	V3R lR l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        \        W4      V n        \        WR R7      V n        \        W4      V n        \        W4      V n        R# )F)rE   N)r2   __init__rf   r=   querykeyvalueout)r7   re   rf   r8   s   &&&r   ri   MultiHeadAttention.__init__=   sE    G-
'7G-
'+r   c          	      b   < V ^8  d   QhRS[ RS[S[ ,          RS[S[ ,          RS[S[,          /# r   r,   xamaskkv_cacher   r   dict)r   r   s   "r   r   rg   E   sA          V  v	 
 4. r   c                J   V P                  V4      pVe   Ve   V P                  V9  d0   T P                  Vf   TMT4      pT P                  Vf   TMT4      pM$W@P                  ,          pW@P                  ,          pV P                  WVWs4      w  rV P	                  V4      V	3# r1   )rj   rk   rl   qkv_attentionrm   )
r7   r,   rq   rr   rs   qkvwvqks
   &&&&&     r   r3   MultiHeadAttention.forwardE   s     JJqMrzTXXX-E bjb1A


13A "A$A##A!2xx|Rr   c          	      B   < V ^8  d   QhRS[ RS[ RS[ RS[S[ ,          /# )r   rx   ry   rz   rr   rJ   )r   r   s   "r   r   rg   [   s8     M MM"M'-M5=f5EM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	V	P	                  4       p	\
        P                  ! V	RR7      P                  VP                  4      p
W,          P                  ^ ^^^4      P                  ^R7      V	P                  4       3# )g      ?:Nr   NNrP   )	start_dimg      п)shaperf   viewpermuter4   rA   softmaxrD   r6   flattendetach)r7   rx   ry   rz   rr   n_batchn_ctxre   scaler|   ws   &&&&&      r   rw    MultiHeadAttention.qkv_attention[   sU    #$''KK'E1FF1AGGBK11b199!Q1EMFF1AGGBK11b199!Q1EMFF1AGGBK11b199!Q1EU6E66E6>**BXXZIIbb!$$QWW-q!Q*22Q2?LLr   )rk   rf   rm   rj   rl   NNNr1   )
r    r!   r"   r#   ri   r3   rw   r%   r&   r:   r;   s   @@r   rc   rc   <   s+     , ,   ,M M Mr   rc   c                   X   a a ] tR t^mt oRV3R lV 3R llltRV3R lR lltRtVtV ;t# )ResidualAttentionBlockc                ,   < V ^8  d   QhRS[ RS[ RS[/# )r   re   rf   cross_attention)r   bool)r   r   s   "r   r   #ResidualAttentionBlock.__annotate__n   s"     ) ) )S )4 )r   c                  < \         SV `  4        \        W4      V n        \	        V4      V n        V'       d   \        W4      MR V n        V'       d   \	        V4      MR V n        V^,          p\        P                  ! \        W4      \        P                  ! 4       \        WA4      4      V n        \	        V4      V n        R # r1   )r2   ri   rc   attnr)   attn_ln
cross_attncross_attn_lnr   
Sequentialr=   GELUmlpmlp_ln)r7   re   rf   r   n_mlpr8   s   &&&& r   ri   ResidualAttentionBlock.__init__n   s    &w7	 ) 4Cw/ 	 4CYw/!==7"BGGIve/E
  (r   c          	      b   < V ^8  d   QhRS[ RS[S[ ,          RS[S[ ,          RS[S[,          /# rp   rt   )r   r   s   "r   r   r      sA       V v	
 4.r   c                2   WP                  V P                  V4      W4R 7      ^ ,          ,           pV P                  '       d0   WP                  V P                  V4      W$R7      ^ ,          ,           pWP	                  V P                  V4      4      ,           pV# )rr   rs   )rs   r   r   r   r   r   r   )r7   r,   rq   rr   rs   s   &&&&&r   r3   ResidualAttentionBlock.forward   ss     		$,,q/	HKK???OOD$6$6q$92OQRSTTAQ((r   r   )Fr   	r    r!   r"   r#   ri   r3   r%   r&   r:   r;   s   @@r   r   r   m   s     ) )"  r   r   c                   P   a a ] tR t^t oV3R lV 3R lltV3R lR ltRtVtV ;t# )AudioEncoderc          
      8   < V ^8  d   QhRS[ RS[ RS[ RS[ RS[ /# )r   r   r   re   rf   n_layerr   )r   r   s   "r   r   AudioEncoder.__annotate__   s5     * **"%*03*=@*KN*r   c           	     L  < \         SV `  4        \        W^^R7      V n        \        W3^^^R7      V n        V P                  R\        W#4      4       \        P                  ! \        V4       Uu. uF  p\        W44      NK  	  up4      V n        \        V4      V n        R# u upi )   )kernel_sizepadding)r   strider   positional_embeddingN)r2   ri   rH   conv1conv2register_bufferra   r   
ModuleListranger   blocksr)   ln_post)r7   r   r   re   rf   r   _r8   s   &&&&&& r   ri   AudioEncoder.__init__   s     	FAF
G!AqQ
3Yu5NO8:>CGnMn#G4nM9
 !) Ns   /B!c                    < V ^8  d   QhRS[ /# )r   r,   r.   )r   r   s   "r   r   r      s       r   c                   \         P                  ! V P                  V4      4      p\         P                  ! V P                  V4      4      pVP	                  ^ ^^4      pVP
                  R,          V P                  P
                  8X  g   Q R4       hWP                  ,           P                  VP                  4      pV P                   F  pV! V4      pK  	  V P                  V4      pV# )z\
x : torch.Tensor, shape = (batch_size, n_mels, n_ctx)
    the mel spectrogram of the audio
:   NNzincorrect audio shape)rA   gelur   r   r   r   r   rD   r6   r   r   )r7   r,   blocks   && r   r3   AudioEncoder.forward   s    
 FF4::a=!FF4::a=!IIaAwwr{d77===V?VV=***..qww7[[EaA ! LLOr   )r   r   r   r   r   r;   s   @@r   r   r      s     * *  r   r   c                   T   a a ] tR t^t oV3R lV 3R lltRV3R lR lltRtVtV ;t# )TextDecoderc          
      8   < V ^8  d   QhRS[ RS[ RS[ RS[ RS[ /# )r   r   r   re   rf   r   r   )r   r   s   "r   r   TextDecoder.__annotate__   s5     = ==#&=14=>A=LO=r   c                  < \         SV `  4        \        P                  ! W4      V n        \        P
                  ! \        P                  ! W#4      4      V n        \        P                  ! \        V4       Uu. uF  p\        W4R R7      NK  	  up4      V n        \        V4      V n        \        P                  ! W"4      P                  \         P"                  ) 4      P%                  ^4      pV P'                  RVRR7       R# u upi )T)r   rr   F
persistentN)r2   ri   r   	Embeddingtoken_embedding	ParameterrT   emptyr   r   r   r   r   r)   lnfill_rR   inftriu_r   )	r7   r   r   re   rf   r   r   rr   r8   s	   &&&&&&  r   ri   TextDecoder.__init__   s     	!||G=$&LLU1L$M!8: w'A 'wM'9
 G${{5(..w7==a@VTe<s   7Dc                <   < V ^8  d   QhRS[ RS[ RS[S[,          /# )r   r,   rq   rs   rt   )r   r   s   "r   r   r      s&       V x~ r   c                T   V'       d4   \        \        VP                  4       4      4      P                  ^,          M^ pV P	                  V4      V P
                  WDVP                  R,          ,            ,           pVP                  VP                  4      pV P                   F  pV! WV P                  VR7      pK  	  V P                  V4      pV\        P                  ! V P                  P                  P                  VP                  4      ^ ^4      ,          P                  4       pV# )z
x : torch.LongTensor, shape = (batch_size, <= n_ctx)
    the text tokens
xa : torch.Tensor, shape = (batch_size, n_audio_ctx, n_audio_state)
    the encoded audio features to be attended on
r   r   )nextitervaluesr   r   r   rD   r6   r   rr   r   rT   	transposerC   r4   )r7   r,   rq   rs   offsetr   logitss   &&&&   r   r3   TextDecoder.forward   s     <Dd8??,-.44Q7  #''!''"+1EFG 	
 DDN[[Ea$))h?A ! GGAJ 4 4 ; ; > >qww GANN
%' 	 r   )r   r   r   r   r1   r   r;   s   @@r   r   r      s     = =&  r   r   c                      a a ] tR t^t oV3R lV 3R lltV3R lR ltV3R lR ltV3R lR ltV3R	 lR
 lt]	R 4       t
]	R 4       t]	R 4       tRV3R lR lltRtVtV ;t# )Whisperc                    < V ^8  d   QhRS[ /# )r   dims)r
   )r   r   s   "r   r   Whisper.__annotate__   s     Y Y_ Yr   c                0  < \         SV `  4        Wn        \        V P                  P                  V P                  P
                  V P                  P                  V P                  P                  V P                  P                  4      V n	        \        V P                  P                  V P                  P                  V P                  P                  V P                  P                  V P                  P                  4      V n        \"        P$                  ! V P                  P                  V P                  P                  \"        P&                  R 7      pRW P                  P                  ^,          R% V P)                  RVP+                  4       RR7       R# )r6   TNalignment_headsFr   )r2   ri   r   r   r   r   r   r   r   encoderr   r   r   r   r   r   decoderrT   zerosr   r   	to_sparse)r7   r   	all_headsr8   s   && r   ri   Whisper.__init__   s   	#IIII!!II##II""II##
 #IIII  II""II!!II""
 KKII""DII$9$9
	 48	))((A-/0.	0C0C0ERWXr   c                    < V ^8  d   QhRS[ /# )r   dump)bytes)r   r   s   "r   r   r      s     T T Tr   c                   \         P                  ! \        P                  ! \        P
                  ! V4      4      \        R 7      P                  4       p\        P                  ! V4      P                  V P                  P                  V P                  P                  4      pV P                  RVP                  4       RR7       R# )r   r   Fr   N)rR   
frombuffergzip
decompressbase64	b85decoder   copyrT   
from_numpyreshaper   r   r   r   r   )r7   r   arrayrr   s   &&  r   set_alignment_headsWhisper.set_alignment_heads   s    OOF,,T234

$& 	 &..II""DII$9$9
 	.0@USr   c                4   < V ^8  d   QhRS[ P                  /# )r   melrT   r   )r   r   s   "r   r   r      s     ! !u|| !r   c                $    V P                  V4      # r1   )r   )r7   r   s   &&r   embed_audioWhisper.embed_audio   s    ||C  r   c                N   < V ^8  d   QhRS[ P                  RS[ P                  /# )r   tokensaudio_featuresr   )r   r   s   "r   r   r     s#     4 4U\\ 45<< 4r   c                $    V P                  W4      # r1   )r   )r7   r   r   s   &&&r   r   Whisper.logits  s    ||F33r   c                ~   < V ^8  d   QhRS[ P                  RS[ P                  RS[S[S[ P                  3,          /# )r   r   r   r-   )rT   r   r   str)r   r   s   "r   r   r     s;     7 7<<7).7	c5<<	 7r   c                B    V P                  W P                  V4      4      # r1   )r   r   )r7   r   r   s   &&&r   r3   Whisper.forward  s     ||FLL$566r   c                H    \        V P                  4       4      P                  # r1   )r   
parametersdevicer7   s   &r   r  Whisper.device	  s    DOO%&---r   c                4    V P                   P                  R 8  # )i  )r   r   r  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   c                0   < V ^8  d   QhRS[ S[,          /# )r   cache)r   ru   )r   r   s   "r   r   r     s      HTN r   c                   a aaa Se   / SCM/ o. oVV 3R loR VV3R llpS P                   P                  V4       SS3# )a@  
The `MultiHeadAttention` module optionally accepts `kv_cache` which stores the key and value
tensors calculated for the previous positions. This method returns a dictionary that stores
all caches, and the necessary hooks for the key and value projection modules that save the
intermediate tensors to be reused during later calculations.

Returns
-------
cache : Dict[nn.Module, torch.Tensor]
    A dictionary object mapping the key/value projection modules to its cache
hooks : List[RemovableHandle]
    List of PyTorch RemovableHandle objects to stop the hooks to be called
c                    < V S9  g-   VP                   ^,          SP                  P                  8  d   VSV &   SV ,          # \        P                  ! SV ,          V.^R7      P                  4       SV &   SV ,          # )r   rP   )r   r   r   rT   rX   r   )moduler   outputr  r7   s   &&&r   save_to_cache5Whisper.install_kv_cache_hooks.<locals>.save_to_cache&  sk    U"fll1o		8L8L&L &f =  !&		5=&*Aq I P P Rf= r   c                8    V ^8  d   QhR\         P                  /# )r   layer)r   Module)r   s   "r   r   4Whisper.install_kv_cache_hooks.<locals>.__annotate__.  s     	O 	O 	Or   c                    < \        V \        4      '       dW   SP                  V P                  P	                  S4      4       SP                  V P
                  P	                  S4      4       R # R # r1   )
isinstancerc   appendrk   register_forward_hookrl   )r  hooksr  s   &r   install_hooks5Whisper.install_kv_cache_hooks.<locals>.install_hooks.  sL    %!344UYY<<]KLU[[>>}MN 5r   )r   apply)r7   r  r   r  r  s   ff @@r   install_kv_cache_hooksWhisper.install_kv_cache_hooks  sI     #.	5	B	!	O 	O
 	=)e|r   )r   r   r   r1   )r    r!   r"   r#   ri   r   r   r   r3   propertyr  r
  r  r#  r%   r&   r:   r;   s   @@r   r   r      s     Y Y2T T! !4 47 7
 . . * * E E  r   r   )i'  )r   r   dataclassesr   typingr   r   r   numpyrR   rT   torch.nn.functionalr   
functionalrA   r   r
   r)   r=   rH   ra   r  rc   r   r   r   r   r   r   r   <module>r+     s      ! + +      
 
 
8 8

RYY 

RYY 
N.M .MbRYY @299 B*")) *ZYbii Yr   