§
    |@Äjå-  ã                   óL  — d dl Z d dlZd dlmZ d dlmZ d dlmZmZm	Z	m
Z
 d dlZd dlZd dlmc mZ d dlmZmZ ddlmZ ddlmZ dd	lmZ 	 d d
lmZ dZn# eeef$ r dZdZY nw xY we G d„ d¦  «        ¦   «         Z G d„ dej         ¦  «        Z  G d„ dej!        ¦  «        Z! G d„ dej"        ¦  «        Z"d"d„Z#ed„ ¦   «         Z$ G d„ dej%        ¦  «        Z& G d„ dej%        ¦  «        Z' G d„ dej%        ¦  «        Z( G d„ dej%        ¦  «        Z) G d „ d!ej%        ¦  «        Z*dS )#é    N)Úcontextmanager)Ú	dataclass)ÚDictÚIterableÚOptionalÚTuple)ÚTensorÚnné   )Údecode)Údetect_language)Ú
transcribe)Úscaled_dot_product_attentionTFc                   ót   — e Zd ZU eed<   eed<   eed<   eed<   eed<   eed<   eed<   eed<   eed	<   eed
<   dS )ÚModelDimensionsÚ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_layerN)Ú__name__Ú
__module__Ú__qualname__ÚintÚ__annotations__© ó    ú>C:\Projects\Historical\venv\Lib\site-packages\whisper/model.pyr   r      s�   € € € € € € à€K€K�KØÐÐÑØÐÐÑØÐÐÑØÐÐÑØ€L€L�LØ€O€O�OØÐÐÑØÐÐÑØÐÐÑÐÐr"   r   c                   ó(   ‡ — e Zd Zdedefˆ fd„Zˆ xZS )Ú	LayerNormÚxÚreturnc                 óš   •— t          ¦   «                              |                     ¦   «         ¦  «                             |j        ¦  «        S ©N)ÚsuperÚforwardÚfloatÚtypeÚdtype)Úselfr&   Ú	__class__s     €r#   r+   zLayerNorm.forward(   s1   ø€ Ý‰wŒw�Š˜qŸwšw™yœyÑ)Ô)×.Ò.¨q¬wÑ7Ô7Ð7r"   )r   r   r   r	   r+   Ú__classcell__©r0   s   @r#   r%   r%   '   sK   ø€ € € € € ð8˜ð 8 Fð 8ð 8ð 8ð 8ð 8ð 8ð 8ð 8ð 8ð 8r"   r%   c                   ó   — e Zd Zdedefd„ZdS )ÚLinearr&   r'   c                 ó´   — t          j        || j                             |j        ¦  «        | j        €d n| j                             |j        ¦  «        ¦  «        S r)   )ÚFÚlinearÚweightÚtor.   Úbias)r/   r&   s     r#   r+   zLinear.forward-   sJ   € ÝŒxØØŒK�NŠN˜1œ7Ñ#Ô#Ø”IÐ%ˆDˆD¨4¬9¯<ª<¸¼Ñ+@Ô+@ñ
ô 
ð 	
r"   N)r   r   r   r	   r+   r!   r"   r#   r4   r4   ,   s6   € € € € € ð
˜ð 
 Fð 
ð 
ð 
ð 
ð 
ð 
r"   r4   c                   ó<   ‡ — e Zd Zdededee         defˆ fd„Zˆ xZS )ÚConv1dr&   r8   r:   r'   c                 ó²   •— t          ¦   «                              ||                     |j        ¦  «        |€d n|                     |j        ¦  «        ¦  «        S r)   )r*   Ú_conv_forwardr9   r.   )r/   r&   r8   r:   r0   s       €r#   r>   zConv1d._conv_forward6   sL   ø€ õ ‰wŒw×$Ò$Øˆv�yŠy˜œÑ!Ô!¨4¨< 4 4¸T¿WºWÀQÄWÑ=MÔ=Mñ
ô 
ð 	
r"   )r   r   r   r	   r   r>   r1   r2   s   @r#   r<   r<   5   sb   ø€ € € € € ð
Øð
Ø!'ð
Ø/7¸Ô/?ð
à	ð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
r"   r<   é'  c                 ó¢  — |dz  dk    sJ ‚t          j        |¦  «        |dz  dz
  z  }t          j        | t          j        |dz  ¦  «        z  ¦  «        }t          j        | ¦  «        dd…t           j        f         |t           j        dd…f         z  }t          j        t          j        |¦  «        t          j        |¦  «        gd¬¦  «        S )z*Returns sinusoids for positional embeddingé   r   r   N©Údim)	ÚnpÚlogÚtorchÚexpÚarangeÚnewaxisÚcatÚsinÚcos)ÚlengthÚchannelsÚmax_timescaleÚlog_timescale_incrementÚinv_timescalesÚscaled_times         r#   Ú	sinusoidsrS   >   s¿   € à�a‰<˜1ÒÐÐÐÝ œf ]Ñ3Ô3°xÀ1±}ÀqÑ7HÑIÐÝ”YÐ 7Ð7½%¼,ÀxÐSTÁ}Ñ:UÔ:UÑUÑVÔV€NÝ”,˜vÑ&Ô& q q q­"¬* }Ô5¸ÅrÄzÐSTÐSTÐSTÀ}Ô8UÑU€KÝŒ9•e”i Ñ,Ô,­e¬i¸Ñ.DÔ.DÐEÈ1ÐMÑMÔMÐMr"   c               #   ó~   K  — t           j        } 	 dt           _        d V — | t           _        d S # | t           _        w xY w)NF)ÚMultiHeadAttentionÚuse_sdpa)Ú
prev_states    r#   Údisable_sdparX   G   sI   è è € å#Ô,€Jð1Ø&+ÕÔ#Øˆˆˆà&0ÕÔ#Ð#Ð#ø jÕÔ#Ð0Ð0Ð0Ð0s   �. ®<c                   óÌ   ‡ — e Zd ZdZdedefˆ fd„Z	 	 	 ddedee         dee         d	ee         fd
„Z		 ddedededee         de
ej        eej                 f         f
d„Zˆ xZS )rU   TÚn_stateÚn_headc                 ó  •— t          ¦   «                              ¦   «          || _        t          ||¦  «        | _        t          ||d¬¦  «        | _        t          ||¦  «        | _        t          ||¦  «        | _        d S )NF)r:   )r*   Ú__init__r[   r4   ÚqueryÚkeyÚvalueÚout)r/   rZ   r[   r0   s      €r#   r]   zMultiHeadAttention.__init__T   sm   ø€ Ý‰Œ×ÒÑÔÐØˆŒÝ˜G WÑ-Ô-ˆŒ
Ý˜' 7°Ð7Ñ7Ô7ˆŒÝ˜G WÑ-Ô-ˆŒ
Ý˜' 7Ñ+Ô+ˆŒˆˆr"   Nr&   ÚxaÚmaskÚkv_cachec                 óD  — |                       |¦  «        }|�|�	| j        |vr3|                      |€|n|¦  «        }|                      |€|n|¦  «        }n|| j                 }|| j                 }|                      ||||¦  «        \  }}	|                      |¦  «        |	fS r)   )r^   r_   r`   Úqkv_attentionra   )
r/   r&   rb   rc   rd   ÚqÚkÚvÚwvÚqks
             r#   r+   zMultiHeadAttention.forward\   s«   € ð �JŠJ�q‰MŒMˆàÐ˜r˜z¨T¬X¸XÐ-EÐ-Eð —’˜b˜j˜˜¨bÑ1Ô1ˆAØ—
’
  
˜1˜1°Ñ3Ô3ˆAˆAð ˜œÔ"ˆAØ˜œÔ$ˆAà×#Ò# A q¨!¨TÑ2Ô2‰ˆˆBØ�xŠx˜‰|Œ|˜RÐÐr"   rg   rh   ri   r'   c                 ó¸  — |j         \  }}}|| j        z  dz  } |j        g |j         d d…         ¢| j        ‘d‘R Ž                      dddd¦  «        } |j        g |j         d d…         ¢| j        ‘d‘R Ž                      dddd¦  «        } |j        g |j         d d…         ¢| j        ‘d‘R Ž                      dddd¦  «        }t          rVt
          j        rJt          ||||d uo|dk    ¬¦  «        }	|	                     dddd¦  «                             d¬¦  «        }
d }n·||z  ||z   	                    dd	¦  «        z  }|�||d |…d |…f         z   }| 
                    ¦   «         }t          j        |d¬
¦  «                             |j        ¦  «        }||z                       dddd¦  «                             d¬¦  «        }
|                     ¦   «         }|
|fS )Ng      Ð¿rA   éÿÿÿÿr   r   é   )Ú	is_causal)Ú	start_diméþÿÿÿrB   )Úshaper[   ÚviewÚpermuteÚSDPA_AVAILABLErU   rV   r   ÚflattenÚ	transposer,   r6   Úsoftmaxr9   r.   Údetach)r/   rg   rh   ri   rc   Ún_batchÚn_ctxrZ   ÚscaleÚara   rk   Úws                r#   rf   z MultiHeadAttention.qkv_attentionr   s  € ð #$¤'Ñˆ�˜Ø˜DœKÑ'¨EÑ1ˆØˆAŒFÐ1�A”G˜B˜Q˜B”KÐ1 ¤Ð1¨bÐ1Ð1Ð1×9Ò9¸!¸QÀÀ1ÑEÔEˆØˆAŒFÐ1�A”G˜B˜Q˜B”KÐ1 ¤Ð1¨bÐ1Ð1Ð1×9Ò9¸!¸QÀÀ1ÑEÔEˆØˆAŒFÐ1�A”G˜B˜Q˜B”KÐ1 ¤Ð1¨bÐ1Ð1Ð1×9Ò9¸!¸QÀÀ1ÑEÔEˆåð 	Õ0Ô9ð 	Ý,Ø�1�a 4¨tÐ#3Ð#A¸Àº	ðñ ô ˆAð —)’)˜A˜q ! QÑ'Ô'×/Ò/¸!Ð/Ñ<Ô<ˆCØˆBˆBà�e‘)  E¡	×4Ò4°R¸Ñ<Ô<Ñ<ˆBØÐØ˜$˜v ˜v v¨ v˜~Ô.Ñ.�Ø—’‘”ˆBå”	˜" "Ð%Ñ%Ô%×(Ò(¨¬Ñ1Ô1ˆAØ�q‘5—/’/ ! Q¨¨1Ñ-Ô-×5Ò5ÀÐ5ÑBÔBˆCØ—’‘”ˆBà�Bˆwˆr"   ©NNNr)   )r   r   r   rV   r   r]   r	   r   Údictr+   r   rF   rf   r1   r2   s   @r#   rU   rU   Q   s  ø€ € € € € Ø€Hð, ð ,¨Sð ,ð ,ð ,ð ,ð ,ð ,ð  $Ø!%Ø#'ð ð  àð ð �VÔð ð �vÔð	 ð
 ˜4”.ð ð  ð  ð  ð. IMðð ØðØ"ðØ'-ðØ5=¸fÔ5Eðà	ˆuŒ|˜X e¤lÔ3Ð3Ô	4ðð ð ð ð ð ð ð r"   rU   c            
       ór   ‡ — e Zd Zddededefˆ fd„Z	 	 	 ddedee         d	ee         d
ee         fd„Z	ˆ xZ
S )ÚResidualAttentionBlockFrZ   r[   Úcross_attentionc                 ó¾  •— t          ¦   «                              ¦   «          t          ||¦  «        | _        t	          |¦  «        | _        |rt          ||¦  «        nd | _        |rt	          |¦  «        nd | _        |dz  }t          j	        t          ||¦  «        t          j        ¦   «         t          ||¦  «        ¦  «        | _        t	          |¦  «        | _        d S )Né   )r*   r]   rU   Úattnr%   Úattn_lnÚ
cross_attnÚcross_attn_lnr
   Ú
Sequentialr4   ÚGELUÚmlpÚmlp_ln)r/   rZ   r[   rƒ   Ún_mlpr0   s        €r#   r]   zResidualAttentionBlock.__init__�   sÊ   ø€ Ý‰Œ×ÒÑÔÐå& w°Ñ7Ô7ˆŒ	Ý  Ñ)Ô)ˆŒð 4CÐLÕ˜w¨Ñ/Ô/Ð/Èð 	Œð 4CÐL�Y wÑ/Ô/Ð/ÈˆÔà˜!‘ˆÝ”=Ý�7˜EÑ"Ô"¥B¤G¡I¤I­v°e¸WÑ/EÔ/Eñ
ô 
ˆŒõ   Ñ(Ô(ˆŒˆˆr"   Nr&   rb   rc   rd   c                 ó:  — ||                       |                      |¦  «        ||¬¦  «        d         z   }| j        r4||                      |                      |¦  «        ||¬¦  «        d         z   }||                      |                      |¦  «        ¦  «        z   }|S )N©rc   rd   r   )rd   )r†   r‡   rˆ   r‰   rŒ   r�   )r/   r&   rb   rc   rd   s        r#   r+   zResidualAttentionBlock.forward    s�   € ð �—	’	˜$Ÿ,š, q™/œ/°¸x�	ÑHÔHÈÔKÑKˆØŒ?ð 	UØ�D—O’O D×$6Ò$6°qÑ$9Ô$9¸2È�OÑQÔQÐRSÔTÑTˆAØ�—’˜Ÿš Q™œÑ(Ô(Ñ(ˆØˆr"   )Fr   )r   r   r   r   Úboolr]   r	   r   r€   r+   r1   r2   s   @r#   r‚   r‚   Ž   s¯   ø€ € € € € ð)ð ) ð )¨Sð )À4ð )ð )ð )ð )ð )ð )ð(  $Ø!%Ø#'ðð àðð �VÔðð �vÔð	ð
 ˜4”.ðð ð ð ð ð ð ð r"   r‚   c            
       ó@   ‡ — e Zd Zdededededef
ˆ fd„Zdefd„Zˆ xZS )	ÚAudioEncoderr   r{   rZ   r[   Ún_layerc                 ó„  •‡‡— t          ¦   «                              ¦   «          t          |‰dd¬¦  «        | _        t          ‰‰ddd¬¦  «        | _        |                      dt          |‰¦  «        ¦  «         t          j        ˆˆfd„t          |¦  «        D ¦   «         ¦  «        | _
        t          ‰¦  «        | _        d S )Nrn   r   )Úkernel_sizeÚpaddingrA   )r–   Ústrider—   Úpositional_embeddingc                 ó0   •— g | ]}t          ‰‰¦  «        ‘ŒS r!   ©r‚   ©Ú.0Ú_r[   rZ   s     €€r#   ú
<listcomp>z)AudioEncoder.__init__.<locals>.<listcomp>¸   s$   ø€ ÐMÐMÐM¸Õ# G¨VÑ4Ô4ÐMÐMÐMr"   )r*   r]   r<   Úconv1Úconv2Úregister_bufferrS   r
   Ú
ModuleListÚrangeÚblocksr%   Úln_post)r/   r   r{   rZ   r[   r”   r0   s      `` €r#   r]   zAudioEncoder.__init__¯   s¸   øøø€ õ 	‰Œ×ÒÑÔÐÝ˜F G¸ÀAÐFÑFÔFˆŒ
Ý˜G W¸!ÀAÈqÐQÑQÔQˆŒ
Ø×ÒÐ3µY¸uÀgÑ5NÔ5NÑOÔOÐOå8:¼ØMÐMÐMÐMÐM½eÀG¹n¼nÐMÑMÔMñ9
ô 9
ˆŒõ ! Ñ)Ô)ˆŒˆˆr"   r&   c                 ó¶  — t          j        |                      |¦  «        ¦  «        }t          j        |                      |¦  «        ¦  «        }|                     ddd¦  «        }|j        dd…         | j        j        k    s
J d¦   «         ‚|| j        z                        |j        ¦  «        }| j	        D ]} ||¦  «        }Œ|  
                    |¦  «        }|S )zt
        x : torch.Tensor, shape = (batch_size, n_mels, n_ctx)
            the mel spectrogram of the audio
        r   rA   r   Nzincorrect audio shape)r6   Úgelur    r¡   rt   rr   r™   r9   r.   r¥   r¦   )r/   r&   Úblocks      r#   r+   zAudioEncoder.forward¼   sÆ   € õ
 ŒF�4—:’:˜a‘=”=Ñ!Ô!ˆÝŒF�4—:’:˜a‘=”=Ñ!Ô!ˆØ�IŠI�a˜˜AÑÔˆàŒw�q�r�rŒ{˜dÔ7Ô=Ò=Ð=Ð=Ð?VÑ=Ô=Ð=Ø�Ô*Ñ*×.Ò.¨q¬wÑ7Ô7ˆà”[ð 	ð 	ˆEØ��a‘”ˆAˆAà�LŠL˜‰OŒOˆØˆr"   )r   r   r   r   r]   r	   r+   r1   r2   s   @r#   r“   r“   ®   s€   ø€ € € € € ð*Øð*Ø"%ð*Ø03ð*Ø=@ð*ØKNð*ð *ð *ð *ð *ð *ð˜ð ð ð ð ð ð ð ð r"   r“   c            
       óV   ‡ — e Zd Zdededededef
ˆ fd„Zdded	ed
ee         fd„Zˆ xZ	S )ÚTextDecoderr   r{   rZ   r[   r”   c                 ó"  •‡‡— t          ¦   «                              ¦   «          t          j        |‰¦  «        | _        t          j        t          j        |‰¦  «        ¦  «        | _        t          j	        ˆˆfd„t          |¦  «        D ¦   «         ¦  «        | _        t          ‰¦  «        | _        t          j        ||¦  «                             t          j         ¦  «                             d¦  «        }|                      d|d¬¦  «         d S )Nc                 ó4   •— g | ]}t          ‰‰d ¬¦  «        ‘ŒS )T)rƒ   r›   rœ   s     €€r#   rŸ   z(TextDecoder.__init__.<locals>.<listcomp>Ù   s8   ø€ ð ð ð àõ ' w°ÈÐMÑMÔMðð ð r"   r   rc   F©Ú
persistent)r*   r]   r
   Ú	EmbeddingÚtoken_embeddingÚ	ParameterrF   Úemptyr™   r£   r¤   r¥   r%   ÚlnÚfill_rD   ÚinfÚtriu_r¢   )r/   r   r{   rZ   r[   r”   rc   r0   s      ``  €r#   r]   zTextDecoder.__init__Ð   sö   øøø€ õ 	‰Œ×ÒÑÔÐå!œ|¨G°WÑ=Ô=ˆÔÝ$&¤Lµ´¸UÀGÑ1LÔ1LÑ$MÔ$MˆÔ!å8:¼ðð ð ð ð å˜w™œðñ ô ñ9
ô 9
ˆŒõ ˜GÑ$Ô$ˆŒåŒ{˜5 %Ñ(Ô(×.Ò.µ´¨wÑ7Ô7×=Ò=¸aÑ@Ô@ˆØ×Ò˜V T°eÐÑ<Ô<Ð<Ð<Ð<r"   Nr&   rb   rd   c                 ó  — |r9t          t          |                     ¦   «         ¦  «        ¦  «        j        d         nd}|                      |¦  «        | j        |||j        d         z   …         z   }|                     |j        ¦  «        }| j        D ]} |||| j	        |¬¦  «        }Œ|  
                    |¦  «        }|t          j        | j        j                             |j        ¦  «        dd¦  «        z                       ¦   «         }|S )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   rm   r�   )ÚnextÚiterÚvaluesrr   r±   r™   r9   r.   r¥   rc   r´   rF   rw   r8   r,   )r/   r&   rb   rd   Úoffsetr©   Úlogitss          r#   r+   zTextDecoder.forwardã   sÿ   € ð <DÐJ••d˜8Ÿ?š?Ñ,Ô,Ñ-Ô-Ñ.Ô.Ô4°QÔ7Ð7Èˆà× Ò  Ñ#Ô#ØÔ'¨°¸!¼'À"¼+Ñ1EÐ(EÔFñGð 	
ð �DŠD�”‰NŒNˆà”[ð 	@ð 	@ˆEØ��a˜ $¤)°hÐ?Ñ?Ô?ˆAˆAà�GŠG�A‰JŒJˆà•” Ô 4Ô ;× >Ò >¸q¼wÑ GÔ GÈÈAÑNÔNÑNß
Š%‰'Œ'ð 	ð ˆr"   r)   )
r   r   r   r   r]   r	   r   r€   r+   r1   r2   s   @r#   r«   r«   Ï   s—   ø€ € € € € ð=Øð=Ø#&ð=Ø14ð=Ø>Að=ØLOð=ð =ð =ð =ð =ð =ð&ð ˜ð  Vð °xÀ´~ð ð ð ð ð ð ð ð r"   r«   c                   ó  ‡ — e Zd Zdefˆ fd„Zdefd„Zdej        fd„Z	dej        dej        fd	„Z
dej        dej        d
eeej        f         fd„Zed„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Zddee         fd„ZeZeZeZˆ xZS )ÚWhisperÚdimsc                 ód  •— t          ¦   «                              ¦   «          || _        t          | j        j        | j        j        | j        j        | j        j        | j        j        ¦  «        | _	        t          | j        j        | j        j        | j        j        | j        j        | j        j        ¦  «        | _        t#          j        | j        j        | j        j        t"          j        ¬¦  «        }d|| j        j        dz  d …<   |                      d|                     ¦   «         d¬¦  «         d S )N©r.   TrA   Úalignment_headsFr®   )r*   r]   rÀ   r“   r   r   r   r   r   Úencoderr«   r   r   r   r   r   ÚdecoderrF   Úzerosr‘   r¢   Ú	to_sparse)r/   rÀ   Ú	all_headsr0   s      €r#   r]   zWhisper.__init__ý   s
  ø€ Ý‰Œ×ÒÑÔÐØˆŒ	Ý#ØŒIÔØŒIÔ!ØŒIÔ#ØŒIÔ"ØŒIÔ#ñ
ô 
ˆŒõ #ØŒIÔØŒIÔ ØŒIÔ"ØŒIÔ!ØŒIÔ"ñ
ô 
ˆŒõ ”KØŒIÔ" D¤IÔ$9ÅÄð
ñ 
ô 
ˆ	ð 48ˆ	�$”)Ô(¨AÑ-Ð/Ð/Ñ0Ø×ÒÐ.°	×0CÒ0CÑ0EÔ0EÐRWÐÑXÔXÐXÐXÐXr"   Údumpc                 ót  — t          j        t          j        t	          j        |¦  «        ¦  «        t          ¬¦  «                             ¦   «         }t          j	        |¦  «         
                    | j        j        | j        j        ¦  «        }|                      d|                     ¦   «         d¬¦  «         d S )NrÂ   rÃ   Fr®   )rD   Ú
frombufferÚgzipÚ
decompressÚbase64Ú	b85decoder‘   ÚcopyrF   Ú
from_numpyÚreshaperÀ   r   r   r¢   rÇ   )r/   rÉ   Úarrayrc   s       r#   Úset_alignment_headszWhisper.set_alignment_heads  s�   € Ý”ÝŒO�FÔ,¨TÑ2Ô2Ñ3Ô3½4ð
ñ 
ô 
ç
Š$‰&Œ&ð 	õ Ô Ñ&Ô&×.Ò.ØŒIÔ" D¤IÔ$9ñ
ô 
ˆð 	×ÒÐ.°·²Ñ0@Ô0@ÈUÐÑSÔSÐSÐSÐSr"   Úmelc                 ó,   — |                       |¦  «        S r)   )rÄ   )r/   rÕ   s     r#   Úembed_audiozWhisper.embed_audio  s   € Ø�|Š|˜CÑ Ô Ð r"   ÚtokensÚaudio_featuresc                 ó.   — |                       ||¦  «        S r)   )rÅ   )r/   rØ   rÙ   s      r#   r½   zWhisper.logits"  s   € Ø�|Š|˜F NÑ3Ô3Ð3r"   r'   c                 óT   — |                       ||                      |¦  «        ¦  «        S r)   )rÅ   rÄ   )r/   rÕ   rØ   s      r#   r+   zWhisper.forward%  s$   € ð �|Š|˜F D§L¢L°Ñ$5Ô$5Ñ6Ô6Ð6r"   c                 óN   — t          |                      ¦   «         ¦  «        j        S r)   )r¹   Ú
parametersÚdevice©r/   s    r#   rÞ   zWhisper.device*  s   € å�D—O’OÑ%Ô%Ñ&Ô&Ô-Ð-r"   c                 ó"   — | j         j        dk    S )Ni™Ê  )rÀ   r   rß   s    r#   Úis_multilingualzWhisper.is_multilingual.  s   € àŒyÔ  EÒ)Ð)r"   c                 óJ   — | j         j        dz
  t          | j        ¦  «        z
  S )Ni5Ê  )rÀ   r   r   rá   rß   s    r#   Únum_languageszWhisper.num_languages2  s"   € àŒyÔ  5Ñ(­3¨tÔ/CÑ+DÔ+DÑDÐDr"   NÚcachec                 óŒ   ‡ ‡‡‡— ‰�i ‰¥ni Šg Šˆˆ fd„Šdt           j        fˆˆfd„}‰ j                             |¦  «         ‰‰fS )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
        Nc                 óÄ   •— | ‰vs|j         d         ‰j        j        k    r|‰| <   n3t          j        ‰|          |gd¬¦  «                             ¦   «         ‰| <   ‰|          S )Nr   rB   )rr   rÀ   r   rF   rJ   ry   )Úmodulerž   Úoutputrä   r/   s      €€r#   Úsave_to_cachez5Whisper.install_kv_cache_hooks.<locals>.save_to_cacheG  se   ø€ Ø˜UÐ"Ð" f¤l°1¤o¸¼	Ô8LÒ&LÐ&Là &��f‘�å %¤	¨5°¬=¸&Ð*AÀqÐ IÑ IÔ I× PÒ PÑ RÔ R��f‘Ø˜”=Ð r"   Úlayerc                 óê   •— t          | t          ¦  «        r\‰                     | j                             ‰¦  «        ¦  «         ‰                     | j                             ‰¦  «        ¦  «         d S d S r)   )Ú
isinstancerU   Úappendr_   Úregister_forward_hookr`   )rê   Úhooksré   s    €€r#   Úinstall_hooksz5Whisper.install_kv_cache_hooks.<locals>.install_hooksO  sm   ø€ Ý˜%Õ!3Ñ4Ô4ð OØ—’˜UœY×<Ò<¸]ÑKÔKÑLÔLÐLØ—’˜Uœ[×>Ò>¸}ÑMÔMÑNÔNÐNÐNÐNðOð Or"   )r
   ÚModulerÅ   Úapply)r/   rä   rð   rï   ré   s   `` @@r#   Úinstall_kv_cache_hookszWhisper.install_kv_cache_hooks6  s“   øøøø€ ð #Ð.�	�5�	�	°BˆØˆð	!ð 	!ð 	!ð 	!ð 	!ð 	!ð	O¥¤ð 	Oð 	Oð 	Oð 	Oð 	Oð 	Oð 	Oð
 	Œ×Ò˜=Ñ)Ô)Ð)Ø�eˆ|Ðr"   r)   )r   r   r   r   r]   ÚbytesrÔ   rF   r	   r×   r½   r   Ústrr+   ÚpropertyrÞ   rá   rã   r   r€   ró   Údetect_language_functionr   Útranscribe_functionr   Údecode_functionr   r1   r2   s   @r#   r¿   r¿   ü   sh  ø€ € € € € ðY˜_ð Yð Yð Yð Yð Yð Yð2T¨ð Tð Tð Tð Tð!˜uœ|ð !ð !ð !ð !ð4˜Uœ\ð 4¸5¼<ð 4ð 4ð 4ð 4ð7Ø”<ð7Ø).¬ð7à	ˆc�5”<ÐÔ	 ð7ð 7ð 7ð 7ð
 ð.ð .ñ „Xð.ð ð*ð *ñ „Xð*ð ðEð Eñ „XðEðð ¨H°T¬Nð ð ð ð ðB /€OØ$€JØ€F€F€F€F€Fr"   r¿   )r?   )+rÎ   rÌ   Ú
contextlibr   Údataclassesr   Útypingr   r   r   r   ÚnumpyrD   rF   Útorch.nn.functionalr
   Ú
functionalr6   r	   Údecodingr   rù   r   r÷   r   rø   r   ru   ÚImportErrorÚRuntimeErrorÚOSErrorr   r%   r4   r<   rS   rX   rñ   rU   r‚   r“   r«   r¿   r!   r"   r#   ú<module>r     s  ðØ €€€Ø €€€Ø %Ð %Ð %Ð %Ð %Ð %Ø !Ð !Ð !Ð !Ð !Ð !Ø 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2à Ð Ð Ð Ø €€€Ø Ð Ð Ð Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ð Ð à /Ð /Ð /Ð /Ð /Ð /Ø AÐ AÐ AÐ AÐ AÐ AØ 9Ð 9Ð 9Ð 9Ð 9Ð 9ðØ@Ð@Ð@Ð@Ð@Ð@à€N€NøØ�\ 7Ð+ð ð ð Ø#'Ð Ø€N€N€Nðøøøð
 ð
ð 
ð 
ð 
ð 
ñ 
ô 
ñ „ð
ð8ð 8ð 8ð 8ð 8�”ñ 8ô 8ð 8ð

ð 
ð 
ð 
ð 
ˆRŒYñ 
ô 
ð 
ð
ð 
ð 
ð 
ð 
ˆRŒYñ 
ô 
ð 
ðNð Nð Nð Nð ð1ð 1ñ „ð1ð:ð :ð :ð :ð :˜œñ :ô :ð :ðzð ð ð ð ˜RœYñ ô ð ð@ð ð ð ð �2”9ñ ô ð ðB*ð *ð *ð *ð *�"”)ñ *ô *ð *ðZ]ð ]ð ]ð ]ð ]ˆbŒiñ ]ô ]ð ]ð ]ð ]s   ÁA ÁA%Á$A%