§
    |@Äj›}  ã                   óJ  — d dl mZmZmZ d dlmZmZmZmZ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 d dlmZ ddlmZ ddlmZmZ dd	lmZ erdd
lmZ  ej         ¦   «         	 d1dddededeeee!         f         fd„¦   «         Z" ed¬¦  «         G d„ d¦  «        ¦   «         Z# ed¬¦  «         G d„ d¦  «        ¦   «         Z$ G d„ d¦  «        Z% G d„ de%¦  «        Z& G d„ d¦  «        Z' G d„ de'¦  «        Z( G d„ d ¦  «        Z) G d!„ d"e)¦  «        Z* G d#„ d$e)¦  «        Z+ G d%„ d&¦  «        Z, G d'„ d(e,¦  «        Z- G d)„ d*e,¦  «        Z. G d+„ d,e,¦  «        Z/ G d-„ d.¦  «        Z0 ej         ¦   «          e#¦   «         fddded/e#dee$ee$         f         fd0„¦   «         Z1dS )2é    )Ú	dataclassÚfieldÚreplace)ÚTYPE_CHECKINGÚDictÚIterableÚListÚOptionalÚSequenceÚTupleÚUnionN)ÚTensor)ÚCategoricalé   )ÚCHUNK_LENGTH)Ú	TokenizerÚget_tokenizer)Úcompression_ratio)ÚWhisperÚmodelr   ÚmelÚ	tokenizerÚreturnc                 óš  ‡‡
— ‰€t          | j        | j        ¬¦  «        Š‰j        �‰j        ‰j        vrt          d¦  «        ‚|j        dk    }|r|                     d¦  «        }|j	        dd…         | j
        j        | j
        j        fk    r|                      |¦  «        }|j	        d         }t          j        ‰j        gg|z  ¦  «                             |j        ¦  «        }|                      ||¦  «        dd…df         }t          j        |j	        d         t          j        ¬¦  «        }d	|t-          ‰j        ¦  «        <   t0          j         |dd…|f<   |                     d¬
¦  «        }|                     d¬
¦  «                             ¦   «         Š
ˆ
ˆfd„t;          |¦  «        D ¦   «         }	|r|d         }|	d         }	||	fS )ao  
    Detect the spoken language in the audio, and return them as list of strings, along with the ids
    of the most probable language tokens and the probability distribution over all language tokens.
    This is performed outside the main decode loop in order to not interfere with kv-caching.

    Returns
    -------
    language_tokens : Tensor, shape = (n_audio,)
        ids of the most probable language tokens, which appears after the startoftranscript token.
    language_probs : List[Dict[str, float]], length = n_audio
        list of dictionaries containing the probability distribution over all languages.
    N)Únum_languageszCThis model doesn't have language tokens so it can't perform lang idé   r   éþÿÿÿéÿÿÿÿ)ÚdtypeF©Údimc                 ó`   •‡— g | ])Šˆˆfd „t          ‰j        ‰j        ¦  «        D ¦   «         ‘Œ*S )c                 óP   •— i | ]"\  }}|‰‰|f                               ¦   «         “Œ#S © )Úitem)Ú.0ÚjÚcÚiÚlanguage_token_probss      €€úAC:\Projects\Historical\venv\Lib\site-packages\whisper/decoding.pyú
<dictcomp>z.detect_language.<locals>.<listcomp>.<dictcomp>B   sE   ø€ ð 	
ð 	
ð 	
á��1ð Ð# A q DÔ)×.Ò.Ñ0Ô0ð	
ð 	
ð 	
ó    )ÚzipÚall_language_tokensÚall_language_codes)r&   r)   r*   r   s    @€€r+   ú
<listcomp>z#detect_language.<locals>.<listcomp>A   sb   øø€ ð ð ð ð
 ð		
ð 	
ð 	
ð 	
ð 	
å˜IÔ9¸9Ô;WÑXÔXð	
ñ 	
ô 	
ðð ð r-   )r   Úis_multilingualr   ÚlanguageÚlanguage_tokenÚsot_sequenceÚ
ValueErrorÚndimÚ	unsqueezeÚshapeÚdimsÚn_audio_ctxÚn_audio_stateÚencoderÚtorchÚtensorÚsotÚtoÚdeviceÚlogitsÚonesÚboolÚlistr/   ÚnpÚinfÚargmaxÚsoftmaxÚcpuÚrange)r   r   r   ÚsingleÚn_audioÚxrC   ÚmaskÚlanguage_tokensÚlanguage_probsr*   s     `       @r+   Údetect_languagerS      së  øø€ ð  ÐÝ!ØÔ!°Ô1Dð
ñ 
ô 
ˆ	ð 	ÔÐ"ØÔ#¨9Ô+AÐAÐAåØQñ
ô 
ð 	
ð ŒX˜Š]€FØð Ø�mŠm˜AÑÔˆð „y���„~˜%œ*Ô0°%´*Ô2JÐKÒKÐKØ�mŠm˜CÑ Ô ˆð Œi˜Œl€GÝŒ�y”}�oÐ&¨Ñ0Ñ1Ô1×4Ò4°S´ZÑ@Ô@€AØ�\Š\˜!˜SÑ!Ô! ! ! ! Q $Ô'€Fõ Œ:�f”l 2Ô&­e¬jÐ9Ñ9Ô9€DØ05€D�ˆiÔ+Ñ	,Ô	,Ñ-Ý”v�g€Fˆ1ˆ1ˆ1ˆdˆ7�OØ—m’m¨�mÑ+Ô+€OØ!Ÿ>š>¨b˜>Ñ1Ô1×5Ò5Ñ7Ô7Ððð ð ð ð õ
 �w‘”ðñ ô €Nð ð +Ø)¨!Ô,ˆØ'¨Ô*ˆà˜NÐ*Ð*r-   T)Úfrozenc                   ó®  — e Zd ZU dZeed<   dZee         ed<   dZe	ed<   dZ
ee         ed<   dZee         ed<   dZee         ed	<   dZee	         ed
<   dZee	         ed<   dZeeeee         f                  ed<   dZeeeee         f                  ed<   dZeeeee         f                  ed<   dZeed<   dZeed<   dZee	         ed<   dZeed<   dS )ÚDecodingOptionsÚ
transcribeÚtaskNr3   g        ÚtemperatureÚ
sample_lenÚbest_ofÚ	beam_sizeÚpatienceÚlength_penaltyÚpromptÚprefixz-1Úsuppress_tokensTÚsuppress_blankFÚwithout_timestampsç      ð?Úmax_initial_timestampÚfp16)Ú__name__Ú
__module__Ú__qualname__rX   ÚstrÚ__annotations__r3   r
   rY   ÚfloatrZ   Úintr[   r\   r]   r^   r_   r   r	   r`   ra   r   rb   rE   rc   re   rf   r$   r-   r+   rV   rV   P   sh  € € € € € € ð €Dˆ#ÐÐÑð #€Hˆh�sŒmÐ"Ð"Ñ"ð €K�ÐÐÑØ $€J�˜”Ð$Ð$Ñ$Ø!€GˆX�cŒ]Ð!Ð!Ñ!Ø#€Iˆx˜Œ}Ð#Ð#Ñ#Ø $€Hˆh�uŒoÐ$Ð$Ñ$ð '+€N�H˜U”OÐ*Ð*Ñ*ð /3€FˆH�U˜3  S¤	˜>Ô*Ô+Ð2Ð2Ñ2Ø.2€FˆH�U˜3  S¤	˜>Ô*Ô+Ð2Ð2Ñ2ð <@€O�X˜e C¨°#¬Ð$6Ô7Ô8Ð?Ð?Ñ?Ø€N�DÐÐÑð  %Ð˜Ð$Ð$Ñ$Ø-0Ð˜8 Eœ?Ð0Ð0Ñ0ð €Dˆ$ÐÐÑÐÐr-   rV   c                   óê   — e Zd ZU eed<   eed<   dZeeee	f                  ed<    e
e¬¦  «        Zee         ed<   dZeed<   ej        Ze	ed	<   ej        Ze	ed
<   ej        Ze	ed<   ej        Ze	ed<   dS )ÚDecodingResultÚaudio_featuresr3   NrR   )Údefault_factoryÚtokensÚ ÚtextÚavg_logprobÚno_speech_probrY   r   )rg   rh   ri   r   rk   rj   rR   r
   r   rl   r   rF   rr   r	   rm   rt   rG   Únanru   rv   rY   r   r$   r-   r+   ro   ro   u   s¼   € € € € € € àÐÐÑØ€M€M�MØ15€N�H˜T # u *Ô-Ô.Ð5Ð5Ñ5Ø˜¨dÐ3Ñ3Ô3€FˆD�ŒIÐ3Ð3Ñ3Ø€Dˆ#€N€N�NØœ€K�ÐÐÑØœF€N�EÐ"Ð"Ñ"Øœ€K�ÐÐÑØ!œvÐ�uÐ%Ð%Ñ%Ð%Ð%r-   ro   c                   ó2   — e Zd Zdededefd„Zdd„Zdd„ZdS )	Ú	Inferencerr   rp   r   c                 ó   — t           ‚)zAPerform a forward pass on the decoder and return per-token logits©ÚNotImplementedError©Úselfrr   rp   s      r+   rC   zInference.logitsƒ   ó   € å!Ð!r-   Nc                 ó   — t           ‚)z9Update the key-value cache according to the updated beamsr{   )r~   Úsource_indicess     r+   Úrearrange_kv_cachezInference.rearrange_kv_cache‡   r   r-   c                 ó   — dS )z:Clean up any resources or hooks after decoding is finishedNr$   ©r~   s    r+   Úcleanup_cachingzInference.cleanup_caching‹   s   € àˆr-   )r   N)rg   rh   ri   r   rC   r‚   r…   r$   r-   r+   ry   ry   ‚   se   € € € € € ð"˜Vð "°Vð "Àð "ð "ð "ð "ð"ð "ð "ð "ðð ð ð ð ð r-   ry   c                   ó>   — e Zd Zdddefd„Zdededefd„Zd	„ Zd
„ ZdS )ÚPyTorchInferencer   r   Úinitial_token_lengthc                 ó¾   — || _         || _        i | _        g | _        d„ | j         j        j        D ¦   «         }d„ | j         j        j        D ¦   «         }||z   | _        d S )Nc                 ó&   — g | ]}|j         j        ‘ŒS r$   )ÚattnÚkey©r&   Úblocks     r+   r1   z-PyTorchInference.__init__.<locals>.<listcomp>—   s   € ÐMÐMÐM¨%�u”z”~ÐMÐMÐMr-   c                 ó&   — g | ]}|j         j        ‘ŒS r$   )r‹   Úvaluer�   s     r+   r1   z-PyTorchInference.__init__.<locals>.<listcomp>˜   s   € ÐQÐQÐQ¨e˜œÔ)ÐQÐQÐQr-   )r   rˆ   Úkv_cacheÚhooksÚdecoderÚblocksÚ
kv_modules)r~   r   rˆ   Úkey_modulesÚvalue_moduless        r+   Ú__init__zPyTorchInference.__init__‘   se   € Ø %ˆŒ
Ø$8ˆÔ!ØˆŒØˆŒ
àMÐM°4´:Ô3EÔ3LÐMÑMÔMˆØQÐQ°t´zÔ7IÔ7PÐQÑQÔQˆØ%¨Ñ5ˆŒˆˆr-   rr   rp   r   c                 óè   — | j         s&| j                             ¦   «         \  | _         | _        |j        d         | j        k    r|d d …dd …f         }| j                             ||| j         ¬¦  «        S )Nr   )r‘   )r‘   r   Úinstall_kv_cache_hooksr’   r9   rˆ   r“   r}   s      r+   rC   zPyTorchInference.logits›   sr   € ØŒ}ð 	LØ(,¬
×(IÒ(IÑ(KÔ(KÑ%ˆDŒM˜4œ:àŒ<˜Ô˜dÔ7Ò7Ð7à˜A˜A˜A˜r˜s˜s˜F”^ˆFàŒz×!Ò! &¨.À4Ä=Ð!ÑQÔQÐQr-   c                 ó^   — | j         D ]}|                     ¦   «          Œi | _        g | _         d S ©N)r’   Úremover‘   )r~   Úhooks     r+   r…   z PyTorchInference.cleanup_caching¥   s4   € Ø”Jð 	ð 	ˆDØ�KŠK‰MŒMˆMˆMàˆŒØˆŒ
ˆ
ˆ
r-   c                 óÒ   — |t          t          t          |¦  «        ¦  «        ¦  «        k    r7| j        D ]1}| j        |         |                              ¦   «         | j        |<   Œ0d S d S rœ   )rF   rL   Úlenr•   r‘   Údetach)r~   r�   Úmodules      r+   r‚   z#PyTorchInference.rearrange_kv_cache¬   ss   € Ø�T¥%­¨NÑ(;Ô(;Ñ"<Ô"<Ñ=Ô=Ò=Ð=Øœ/ð Wð W�à(,¬°fÔ(=¸nÔ(M×(TÒ(TÑ(VÔ(V�”˜fÑ%Ð%ð >Ð=ðWð Wr-   N)	rg   rh   ri   rm   r˜   r   rC   r…   r‚   r$   r-   r+   r‡   r‡   �   s‰   € € € € € ð6˜ið 6¸sð 6ð 6ð 6ð 6ðR˜Vð R°Vð RÀð Rð Rð Rð Rðð ð ðWð Wð Wð Wð Wr-   r‡   c                   ó^   — e Zd Zdeee                  deee                  dee         fd„ZdS )ÚSequenceRankerrr   Úsum_logprobsr   c                 ó   — t           ‚)z±
        Given a list of groups of samples and their cumulative log probabilities,
        return the indices of the samples in each group to select as the final result
        r{   ©r~   rr   r¥   s      r+   ÚrankzSequenceRanker.rank´   s
   € õ "Ð!r-   N)rg   rh   ri   r	   r   rl   rm   r¨   r$   r-   r+   r¤   r¤   ³   sV   € € € € € ð"Ø˜4 œ<Ô(ð"Ø8<¸TÀ%¼[Ô8Ið"à	ˆcŒð"ð "ð "ð "ð "ð "r-   r¤   c                   ój   — e Zd ZdZdee         fd„Zdeee                  deee                  fd„Z	dS )ÚMaximumLikelihoodRankerz�
    Select the sample with the highest log probabilities, penalized using either
    a simple length normalization or Google NMT paper's length penalty
    r^   c                 ó   — || _         d S rœ   )r^   )r~   r^   s     r+   r˜   z MaximumLikelihoodRanker.__init__Ä   s   € Ø,ˆÔÐÐr-   rr   r¥   c                 ó`   ‡ ‡— ˆ fd„Šd„ |D ¦   «         }ˆfd„t          ||¦  «        D ¦   «         S )Nc                 óœ   •— g }t          | |¦  «        D ]7\  }}‰j        €|}nd|z   dz  ‰j        z  }|                     ||z  ¦  «         Œ8|S )Né   é   )r.   r^   Úappend)ÚlogprobsÚlengthsÚresultÚlogprobÚlengthÚpenaltyr~   s         €r+   Úscoresz,MaximumLikelihoodRanker.rank.<locals>.scoresÈ   sl   ø€ ØˆFÝ#& x°Ñ#9Ô#9ð 1ð 1‘�˜ØÔ&Ð.Ø$�G�Gð !" F¡
¨aÑ/°DÔ4GÑG�GØ—’˜g¨Ñ/Ñ0Ô0Ð0Ð0ØˆMr-   c                 ó&   — g | ]}d „ |D ¦   «         ‘ŒS )c                 ó,   — g | ]}t          |¦  «        ‘ŒS r$   ©r    ©r&   Úts     r+   r1   z;MaximumLikelihoodRanker.rank.<locals>.<listcomp>.<listcomp>Ô   s   € Ð&Ð&Ð&˜q•C˜‘F”FÐ&Ð&Ð&r-   r$   )r&   Úss     r+   r1   z0MaximumLikelihoodRanker.rank.<locals>.<listcomp>Ô   s'   € Ð7Ð7Ð7¨1Ð&Ð& AÐ&Ñ&Ô&Ð7Ð7Ð7r-   c                 óR   •— g | ]#\  }}t          j         ‰||¦  «        ¦  «        ‘Œ$S r$   )rG   rI   )r&   ÚpÚlr·   s      €r+   r1   z0MaximumLikelihoodRanker.rank.<locals>.<listcomp>Õ   s1   ø€ ÐOÐOÐO©D¨A¨q•”	˜&˜&  A™,œ,Ñ'Ô'ÐOÐOÐOr-   )r.   )r~   rr   r¥   r²   r·   s   `   @r+   r¨   zMaximumLikelihoodRanker.rankÇ   sV   øø€ ð		ð 		ð 		ð 		ð 		ð 8Ð7°Ð7Ñ7Ô7ˆØOÐOÐOÐOµC¸ÀgÑ4NÔ4NÐOÑOÔOÐOr-   N)
rg   rh   ri   Ú__doc__r
   rl   r˜   r	   r   r¨   r$   r-   r+   rª   rª   ¾   sy   € € € € € ðð ð
- x°¤ð -ð -ð -ð -ðP˜4  V¤Ô-ð P¸TÀ$ÀuÄ+Ô=Nð Pð Pð Pð Pð Pð Pr-   rª   c            
       ó�   — e Zd Zd„ Zdedededeeef         fd„Zdededeeee                  e	e	e
                  f         fd„ZdS )	ÚTokenDecoderc                 ó   — dS )z=Initialize any stateful variables for decoding a new sequenceNr$   r„   s    r+   ÚresetzTokenDecoder.resetÙ   s   € € € r-   rr   rC   r¥   r   c                 ó   — t           ‚)a  Specify how to select the next token, based on the current trace and logits

        Parameters
        ----------
        tokens : Tensor, shape = (n_batch, current_sequence_length)
            all tokens in the context so far, including the prefix and sot_sequence tokens

        logits : Tensor, shape = (n_batch, vocab_size)
            per-token logits of the probability distribution at the current step

        sum_logprobs : Tensor, shape = (n_batch)
            cumulative log probabilities for each sequence

        Returns
        -------
        tokens : Tensor, shape = (n_batch, current_sequence_length + 1)
            the tokens, appended with the selected next token

        completed : bool
            True if all sequences has reached the end of text

        r{   )r~   rr   rC   r¥   s       r+   ÚupdatezTokenDecoder.updateÜ   s
   € õ2 "Ð!r-   c                 ó   — t           ‚)aÆ  Finalize search and return the final candidate sequences

        Parameters
        ----------
        tokens : Tensor, shape = (n_audio, n_group, current_sequence_length)
            all tokens in the context so far, including the prefix and sot_sequence

        sum_logprobs : Tensor, shape = (n_audio, n_group)
            cumulative log probabilities for each sequence

        Returns
        -------
        tokens : Sequence[Sequence[Tensor]], length = n_audio
            sequence of Tensors containing candidate token sequences, for each audio input

        sum_logprobs : List[List[float]], length = n_audio
            sequence of cumulative log probabilities corresponding to the above

        r{   r§   s      r+   ÚfinalizezTokenDecoder.finalize÷   s
   € õ, "Ð!r-   N)rg   rh   ri   rÅ   r   r   rE   rÇ   r   r	   rl   rÉ   r$   r-   r+   rÃ   rÃ   Ø   s¬   € € € € € ðLð Lð Lð"Øð"Ø&,ð"Ø<Bð"à	ˆv�tˆ|Ô	ð"ð "ð "ð "ð6"Øð"Ø,2ð"à	ˆx˜ Ô(Ô)¨4°°U´Ô+<Ð<Ô	=ð"ð "ð "ð "ð "ð "r-   rÃ   c            
       óV   — e Zd Zdedefd„Zdedededeeef         fd„Z	dedefd	„Z
d
S )ÚGreedyDecoderrY   Úeotc                 ó"   — || _         || _        d S rœ   )rY   rÌ   )r~   rY   rÌ   s      r+   r˜   zGreedyDecoder.__init__  s   € Ø&ˆÔØˆŒˆˆr-   rr   rC   r¥   r   c                 óB  — | j         dk    r|                     d¬¦  «        }n*t          || j         z  ¬¦  «                             ¦   «         }t	          j        |                     ¦   «         d¬¦  «        }|t          j        |j	        d         ¦  «        |f         }|||d d …df         | j
        k    z  z  }| j
        ||d d …df         | j
        k    <   t          j        ||d d …d f         gd¬¦  «        }|d d …df         | j
        k                         ¦   «         }||fS )Nr   r   r    )rC   )rY   rI   r   ÚsampleÚFÚlog_softmaxrl   r>   Úaranger9   rÌ   ÚcatÚall)r~   rr   rC   r¥   Únext_tokensr±   Úcurrent_logprobsÚ	completeds           r+   rÇ   zGreedyDecoder.update  s  € ð Ô˜qÒ Ð Ø Ÿ-š-¨B˜-Ñ/Ô/ˆKˆKå%¨V°dÔ6FÑ-FÐGÑGÔG×NÒNÑPÔPˆKå”= §¢¡¤°RÐ8Ñ8Ô8ˆØ#¥E¤L°´ÀÔ1BÑ$CÔ$CÀ[Ð$PÔQÐØÐ(¨F°1°1°1°b°5¬M¸T¼XÒ,EÑFÑFˆà15´ˆ�F˜1˜1˜1˜b˜5”M T¤XÒ-Ñ.Ý”˜F K°°°°4°Ô$8Ð9¸rÐBÑBÔBˆà˜A˜A˜A˜r˜E”] d¤hÒ.×3Ò3Ñ5Ô5ˆ	Ø�yÐ Ð r-   c                 óf   — t          j        |d| j        ¬¦  «        }||                     ¦   «         fS )N)r   r   )r�   )rÐ   ÚpadrÌ   Útolistr§   s      r+   rÉ   zGreedyDecoder.finalize'  s1   € å”�v˜v¨T¬XÐ6Ñ6Ô6ˆØ�|×*Ò*Ñ,Ô,Ð,Ð,r-   N)rg   rh   ri   rl   rm   r˜   r   r   rE   rÇ   rÉ   r$   r-   r+   rË   rË     s•   € € € € € ð Eð °ð ð ð ð ð!Øð!Ø&,ð!Ø<Bð!à	ˆv�tˆ|Ô	ð!ð !ð !ð !ð$-˜vð -°Vð -ð -ð -ð -ð -ð -r-   rË   c            
       ót   — e Zd Z	 ddedededee         fd„Zd„ Zde	d	e	d
e	de
e	ef         fd„Zde	d
e	fd„ZdS )ÚBeamSearchDecoderNr\   rÌ   Ú	inferencer]   c                 óÀ   — || _         || _        || _        |pd| _        t	          || j        z  ¦  «        | _        d | _        | j        dk    sJ d|› d|› d�¦   «         ‚d S )Nrd   r   zInvalid beam size (z) or patience (ú))r\   rÌ   rÝ   r]   ÚroundÚmax_candidatesÚfinished_sequences)r~   r\   rÌ   rÝ   r]   s        r+   r˜   zBeamSearchDecoder.__init__.  s}   € ð #ˆŒØˆŒØ"ˆŒØ ˜ CˆŒÝ#(¨°T´]Ñ)BÑ#CÔ#CˆÔØ"&ˆÔð Ô !Ò#Ð#Ð#ØF ÐFÐF¸8ÐFÐFÐFñ $Ô#Ð#Ð#Ð#r-   c                 ó   — d | _         d S rœ   )râ   r„   s    r+   rÅ   zBeamSearchDecoder.reset@  s   € Ø"&ˆÔÐÐr-   rr   rC   r¥   r   c                 óð  ‡ — |j         d         ‰ j        z  dk    rt          |j         › d‰ j        › d�¦  «        ‚|j         d         ‰ j        z  }‰ j        €d„ t	          |¦  «        D ¦   «         ‰ _        t          j        |                     ¦   «         d¬¦  «        }g g g }}}t	          |¦  «        D �]k}	i i i }}}
t	          ‰ j        ¦  «        D ]¥}|	‰ j        z  |z   }||                              ¦   «         }t          ||          
                    ‰ j        dz   ¦  «        Ž D ]Q\  }}||         |z                        ¦   «         }t          ||                     ¦   «         gz   ¦  «        }||
|<   |||<   ŒRŒ¦d}t          |
|
j        d¬	¦  «        D ]y}|d         ‰ j        k    r|
|         ||<   Œ|
|         |t!          |¦  «        <   |                     |¦  «         |                     ||         ¦  «         |dz  }|‰ j        k    r nŒz|                     |¦  «         �Œmt%          j        ||j        ¬
¦  «        }‰ j                             |¦  «         t!          ‰ j        ¦  «        t!          |¦  «        k    sJ ‚t          ‰ j        |¦  «        D ]D\  }}t          ||j        d¬	¦  «        D ]'}t!          |¦  «        ‰ j        k    r n||         ||<   Œ(ŒEt1          ˆ fd„‰ j        D ¦   «         ¦  «        }||fS )Nr   z[0] % z != 0c                 ó   — g | ]}i ‘ŒS r$   r$   )r&   Ú_s     r+   r1   z,BeamSearchDecoder.update.<locals>.<listcomp>K  s   € Ð&BÐ&BÐ&B¨a rÐ&BÐ&BÐ&Br-   r   r    r   T)rŒ   Úreverse©rB   c              3   óH   •K  — | ]}t          |¦  «        ‰j        k    V — Œd S rœ   )r    rá   )r&   Ú	sequencesr~   s     €r+   ú	<genexpr>z+BeamSearchDecoder.update.<locals>.<genexpr>z  sE   øè è € ð 
ð 
àõ �	‰NŒN˜dÔ1Ò1ð
ð 
ð 
ð 
ð 
ð 
r-   )r9   r\   r6   râ   rL   rÐ   rÑ   rl   rÚ   r.   Útopkr%   ÚtupleÚsortedÚgetrÌ   r    r°   r>   r?   rB   rÝ   r‚   rá   rÔ   )r~   rr   rC   r¥   rN   r±   rÕ   r�   râ   r)   r·   ÚsourcesÚfinishedr'   Úidxr`   r´   ÚtokenÚnew_logprobÚsequenceÚsavedÚpreviously_finishedÚnewly_finishedÚseqr×   s   `                        r+   rÇ   zBeamSearchDecoder.updateC  sd  ø€ ð Œ<˜Œ?˜Tœ^Ñ+¨qÒ0Ð0Ý ¤ÐIÐI°D´NÐIÐIÐIÑJÔJÐJà”,˜q”/ T¤^Ñ3ˆØÔ"Ð*Ø&BÐ&Bµ5¸±>´>Ð&BÑ&BÔ&BˆDÔ#å”= §¢¡¤°RÐ8Ñ8Ô8ˆØ:<¸bÀ"Ð%7�^ˆÝ�w‘”ð 	0ñ 	0ˆAØ(*¨B°˜X�GˆFõ ˜4œ>Ñ*Ô*ð ,ð ,�Ø˜$œ.Ñ(¨1Ñ,�Ø œ×+Ò+Ñ-Ô-�Ý&)¨8°C¬=×+=Ò+=¸d¼nÈqÑ>PÑ+QÔ+QÐ&Rð ,ð ,‘N�G˜UØ#/°Ô#4°wÑ#>×"DÒ"DÑ"FÔ"F�KÝ$ V¨u¯zªz©|¬|¨nÑ%<Ñ=Ô=�HØ'2�F˜8Ñ$Ø(+�G˜HÑ%Ð%ð	,ð ˆEÝ" 6¨v¬zÀ4ÐHÑHÔHð 
ð 
�Ø˜B”< 4¤8Ò+Ð+Ø)/°Ô)9�H˜XÑ&Ð&à5;¸HÔ5E�L¥ [Ñ!1Ô!1Ñ2Ø×&Ò& xÑ0Ô0Ð0Ø"×)Ò)¨'°(Ô*;Ñ<Ô<Ð<à˜Q‘J�EØ ¤Ò.Ð.Ø˜ð /ð ×%Ò% hÑ/Ô/Ð/Ñ/å”˜k°&´-Ð@Ñ@Ô@ˆØŒ×)Ò)¨.Ñ9Ô9Ð9õ �4Ô*Ñ+Ô+­sÐ3EÑ/FÔ/FÒFÐFÐFÐFÝ36ØÔ#Ð%7ñ4
ô 4
ð 	?ð 	?Ñ/Ð õ ˜n°.Ô2DÈdÐSÑSÔSð ?ð ?�ÝÐ*Ñ+Ô+¨tÔ/BÒBÐBØ�EØ+9¸#Ô+>Ð# CÑ(Ð(øõ ð 
ð 
ð 
ð 
à!Ô4ð
ñ 
ô 
ñ 
ô 
ˆ	ð �yÐ Ð r-   Úpreceding_tokensc                 ó  — |                      ¦   «         }t          | j        ¦  «        D ]¿\  }}t          |¦  «        | j        k     r¢t          t          j        ||         ¦  «        ¦  «        d d d…         D ]q}|||f                              ¦   «         | j	        gz   }||         |          
                    ¦   «         |t          |¦  «        <   t          |¦  «        | j        k    r nŒrŒÀd„ | j        D ¦   «         }d„ | j        D ¦   «         }||fS )Nr   c                 óJ   — g | ] }d „ |                      ¦   «         D ¦   «         ‘Œ!S )c                 ó6   — g | ]}t          j        |¦  «        ‘ŒS r$   )r>   r?   )r&   rù   s     r+   r1   z9BeamSearchDecoder.finalize.<locals>.<listcomp>.<listcomp>Ž  s"   € Ð;Ð;Ð; 3�UŒ\˜#ÑÔÐ;Ð;Ð;r-   )Úkeys©r&   rê   s     r+   r1   z.BeamSearchDecoder.finalize.<locals>.<listcomp>�  s@   € ð &
ð &
ð &
àð <Ð;¨)¯.ª.Ñ*:Ô*:Ð;Ñ;Ô;ð&
ð &
ð &
r-   c                 óP   — g | ]#}t          |                     ¦   «         ¦  «        ‘Œ$S r$   )rF   Úvaluesrÿ   s     r+   r1   z.BeamSearchDecoder.finalize.<locals>.<listcomp>‘  s9   € ð +
ð +
ð +
Ø)2�D�×!Ò!Ñ#Ô#Ñ$Ô$ð+
ð +
ð +
r-   )rK   Ú	enumeraterâ   r    r\   rF   rG   ÚargsortrÚ   rÌ   r%   rí   )r~   rú   r¥   r)   rê   r'   rõ   rr   s           r+   rÉ   zBeamSearchDecoder.finalize€  s)  € à#×'Ò'Ñ)Ô)ˆÝ% dÔ&=Ñ>Ô>ð 	ð 	‰LˆAˆyå�I‘” ¤Ò/Ð/å�bœj¨°a¬Ñ9Ô9Ñ:Ô:¸4¸4¸R¸4Ô@ð ð �AØ/°°1°Ô5×<Ò<Ñ>Ô>À$Ä(ÀÑK�HØ1=¸a´ÀÔ1C×1HÒ1HÑ1JÔ1J�I�e H™oœoÑ.Ý˜9‘~”~¨¬Ò7Ð7Ø˜ð 8øð&
ð &
à!Ô4ð&
ñ &
ô &
ˆð+
ð +
Ø6:Ô6Mð+
ñ +
ô +
ˆð �|Ð#Ð#r-   rœ   )rg   rh   ri   rm   ry   r
   rl   r˜   rÅ   r   r   rE   rÇ   rÉ   r$   r-   r+   rÜ   rÜ   -  sÔ   € € € € € ð %)ðGð GàðGð ðGð ð	Gð
 ˜5”/ðGð Gð Gð Gð$'ð 'ð 'ð;!Øð;!Ø&,ð;!Ø<Bð;!à	ˆv�tˆ|Ô	ð;!ð ;!ð ;!ð ;!ðz$¨ð $¸vð $ð $ð $ð $ð $ð $r-   rÜ   c                   ó"   — e Zd Zdededdfd„ZdS )ÚLogitFilterrC   rr   r   Nc                 ó   — t           ‚)aŠ  Apply any filtering or masking to logits in-place

        Parameters
        ----------
        logits : Tensor, shape = (n_batch, vocab_size)
            per-token logits of the probability distribution at the current step

        tokens : Tensor, shape = (n_batch, current_sequence_length)
            all tokens in the context so far, including the prefix and sot_sequence tokens

        r{   ©r~   rC   rr   s      r+   ÚapplyzLogitFilter.apply˜  s
   € õ "Ð!r-   )rg   rh   ri   r   r  r$   r-   r+   r  r  —  s=   € € € € € ð"˜Fð "¨Fð "°tð "ð "ð "ð "ð "ð "r-   r  c                   ó.   — e Zd Zdedefd„Zdedefd„ZdS )ÚSuppressBlankr   Úsample_beginc                 ó"   — || _         || _        d S rœ   )r   r  )r~   r   r  s      r+   r˜   zSuppressBlank.__init__¨  s   € Ø"ˆŒØ(ˆÔÐÐr-   rC   rr   c                 óª   — |j         d         | j        k    r<t          j         |d d …| j                             d¦  «        | j        j        gz   f<   d S d S )Nr   ú )r9   r  rG   rH   r   ÚencoderÌ   r  s      r+   r  zSuppressBlank.apply¬  sX   € ØŒ<˜Œ?˜dÔ/Ò/Ð/ÝLNÌFÈ7ˆF�1�1�1�d”n×+Ò+¨CÑ0Ô0°D´NÔ4FÐ3GÑGÐGÑHÐHÐHð 0Ð/r-   N)rg   rh   ri   r   rm   r˜   r   r  r$   r-   r+   r
  r
  §  s`   € € € € € ð) )ð )¸3ð )ð )ð )ð )ðS˜Fð S¨Fð Sð Sð Sð Sð Sð Sr-   r
  c                   ó6   — e Zd Zdee         fd„Zdedefd„ZdS )ÚSuppressTokensra   c                 ó.   — t          |¦  «        | _        d S rœ   )rF   ra   ©r~   ra   s     r+   r˜   zSuppressTokens.__init__²  s   € Ý# OÑ4Ô4ˆÔÐÐr-   rC   rr   c                 ó8   — t           j         |d d …| j        f<   d S rœ   )rG   rH   ra   r  s      r+   r  zSuppressTokens.applyµ  s"   € Ý+-¬6¨'ˆˆqˆqˆq�$Ô&Ð&Ñ'Ð'Ð'r-   N)rg   rh   ri   r   rm   r˜   r   r  r$   r-   r+   r  r  ±  sU   € € € € € ð5¨°¬ð 5ð 5ð 5ð 5ð2˜Fð 2¨Fð 2ð 2ð 2ð 2ð 2ð 2r-   r  c                   ó>   — e Zd Zdededee         fd„Zdedefd„ZdS )	ÚApplyTimestampRulesr   r  Úmax_initial_timestamp_indexc                 ó0   — || _         || _        || _        d S rœ   )r   r  r  )r~   r   r  r  s       r+   r˜   zApplyTimestampRules.__init__º  s!   € ð #ˆŒØ(ˆÔØ+FˆÔ(Ð(Ð(r-   rC   rr   c                 óL  — | j         j        �t          j         |d d …| j         j        f<   t	          |j        d         ¦  «        D �]8}||| j        d …f         }d„ |                     ¦   «         D ¦   «         }t          |¦  «        dk    o|d         | j         j	        k    }t          |¦  «        dk     p|d         | j         j	        k    }|r?|rt          j         ||| j         j	        d …f<   nt          j         ||d | j         j
        …f<   ||                     | j         j	        ¦  «                 }|                     ¦   «         dk    r6|r|s	|d         }	n|d         dz   }	t          j         ||| j         j	        |	…f<   �Œ:|j        d         | j        k    rTt          j         |d d …d | j         j	        …f<   | j        �-| j         j	        | j        z   }
t          j         |d d …|
dz   d …f<   t          j        |                     ¦   «         d¬¦  «        }t	          |j        d         ¦  «        D ]x}||| j         j	        d …f                              d¬¦  «        }||d | j         j	        …f                              ¦   «         }||k    rt          j         ||d | j         j	        …f<   Œyd S )Nr   c                 ó   — g | ]}|‘ŒS r$   r$   r»   s     r+   r1   z-ApplyTimestampRules.apply.<locals>.<listcomp>Ì  s   € Ð6Ð6Ð6˜�1Ð6Ð6Ð6r-   r   r   r   r   r    )r   Úno_timestampsrG   rH   rL   r9   r  rÚ   r    Útimestamp_beginrÌ   ÚgeÚnumelr  rÐ   rÑ   rl   Ú	logsumexpÚmax)r~   rC   rr   ÚkÚsampled_tokensrù   Úlast_was_timestampÚpenultimate_was_timestampÚ
timestampsÚtimestamp_lastÚlast_allowedr±   Útimestamp_logprobÚmax_text_token_logprobs                 r+   r  zApplyTimestampRules.applyÄ  së  € àŒ>Ô'Ð3Ý79´v°gˆF�1�1�1�d”nÔ2Ð2Ñ3õ �v”| A”Ñ'Ô'ð 	Uñ 	UˆAØ# A tÔ'8Ð':Ð':Ð$:Ô;ˆNØ6Ð6˜n×3Ò3Ñ5Ô5Ð6Ñ6Ô6ˆCå�C‘”˜A’ÐK # b¤'¨T¬^Ô-KÒ"Kð õ �C‘”˜1’ÐI  B¤¨4¬>Ô+IÒ Ið &ð "ð >Ø,ð >ÝCEÄ6À'�F˜1˜dœnÔ<Ð>Ð>Ð>Ñ?Ð?å79´v°g�F˜1Ð2 ¤Ô 2Ð2Ð2Ñ3à'Ø×!Ò! $¤.Ô"@ÑAÔAôˆJð ×ÒÑ!Ô! AÒ%Ð%ð &ð 8Ð.Gð 8Ø%/°¤^�N�Nà%/°¤^°aÑ%7�NÝNPÌfÈW��q˜$œ.Ô8¸>ÐIÐIÑJùàŒ<˜Œ?˜dÔ/Ò/Ð/å;=¼6¸'ˆF�1�1�1Ð6˜œÔ6Ð6Ð6Ñ7ð Ô/Ð;à”NÔ2°TÔ5UÑUð õ 24´°��q�q�q˜,¨Ñ*Ð,Ð,Ð,Ñ-õ ”= §¢¡¤°RÐ8Ñ8Ô8ˆÝ�v”| A”Ñ'Ô'ð 	Fð 	FˆAØ (¨¨D¬NÔ,JÐ,LÐ,LÐ)LÔ M× WÒ WØð !Xñ !ô !Ðð &.¨aÐ1Q°4´>Ô3QÐ1QÐ.QÔ%R×%VÒ%VÑ%XÔ%XÐ"Ø Ð#9Ò9Ð9Ý?A¼v¸g��qÐ:˜DœNÔ:Ð:Ð:Ñ;øð	Fð 	Fr-   N)	rg   rh   ri   r   rm   r
   r˜   r   r  r$   r-   r+   r  r  ¹  sy   € € € € € ðGàðGð ðGð &.¨c¤]ð	Gð Gð Gð Gð5F˜Fð 5F¨Fð 5Fð 5Fð 5Fð 5Fð 5Fð 5Fr-   r  c                   ó  — e Zd ZU eed<   eed<   eed<   ee         ed<   ddde	fd„Z
de	d	e	fd
„Zd	ee         fd„Zd	ee         fd„Zdefd„Zdedefd„Zdedefd„Z ej        ¦   «         ded	ee         fd„¦   «         ZdS )ÚDecodingTaskrÝ   Úsequence_rankerr“   Úlogit_filtersr   r   Úoptionsc                 ó:  — || _         |j        pd}t          |j        |j        ||j        ¬¦  «        }|| _        |                      |¦  «        | _        |j	        p|j
        pd| _        |j        j        | _        |j        p|j        j        dz  | _        |j        | _        | j        j        r|j        | _        |                      ¦   «         | _        t+          | j        ¦  «        | _        | j                             |j        ¦  «        | _        t5          |t+          | j        ¦  «        ¦  «        | _        t9          |j        ¦  «        | _        |j	        �,t?          |j	        |j         | j        |j!        ¦  «        | _"        ntG          |j$        |j         ¦  «        | _"        g | _%        | j        j&        r2| j%         '                    tQ          | j        | j        ¦  «        ¦  «         | j        j)        r9| j%         '                    tU          |  +                    ¦   «         ¦  «        ¦  «         |j        sitX          |j        j-        z  }d }|j.        rt_          | j        j.        |z  ¦  «        }| j%         '                    ta          || j        |¦  «        ¦  «         d S d S )NÚen)r   r3   rX   r   r   )1r   r3   r   r2   r   rX   r   Ú_verify_optionsr.  r\   r[   Ún_groupr:   Ú
n_text_ctxÚn_ctxrZ   r5   rc   Ú#sot_sequence_including_notimestampsÚ_get_initial_tokensÚinitial_tokensr    r  Úindexr@   Ú	sot_indexr‡   rÝ   rª   r^   r,  rÜ   rÌ   r]   r“   rË   rY   r-  rb   r°   r
  ra   r  Ú_get_suppress_tokensr   r;   re   rà   r  )r~   r   r.  r3   r   Ú	precisionr  s          r+   r˜   zDecodingTask.__init__  s€  € ØˆŒ
àÔ#Ð+ tˆÝ!ØÔ!ØÔ-ØØ”ð	
ñ 
ô 
ˆ	ð %.ˆŒØ(,×(<Ò(<¸WÑ(EÔ(EˆŒà#Ô-ÐE°´ÐEÀAˆŒØœ*Ô/ˆŒ
Ø&Ô1ÐO°U´ZÔ5JÈaÑ5OˆŒà(1Ô(>ˆÔØŒ<Ô*ð 	NØ )Ô MˆDÔà*.×*BÒ*BÑ*DÔ*DˆÔÝ!$ TÔ%8Ñ!9Ô!9ˆÔØ"Ô1×7Ò7¸	¼ÑFÔFˆŒõ *¨%µ°TÔ5HÑ1IÔ1IÑJÔJˆŒõ  7°wÔ7MÑNÔNˆÔð ÔÐ(Ý,ØÔ! 9¤=°$´.À'ÔBRñô ˆDŒLˆLõ )¨Ô)<¸i¼mÑLÔLˆDŒLð  ˆÔØŒ<Ô&ð 	XØÔ×%Ò%¥m°D´NÀDÔDUÑ&VÔ&VÑWÔWÐWØŒ<Ô'ð 	SØÔ×%Ò%¥n°T×5NÒ5NÑ5PÔ5PÑ&QÔ&QÑRÔRÐRØÔ)ð 	Ý$ u¤zÔ'=Ñ=ˆIØ*.Ð'ØÔ,ð Ý.3Ø”LÔ6¸ÑBñ/ô /Ð+ð Ô×%Ò%Ý#Ø˜tÔ0Ð2Mñô ñô ð ð ð ð	ð 	r-   r   c                 ó  — |j         �|j        �t          d¦  «        ‚|j        dk    r|j        �t          d¦  «        ‚|j        �|j         €t          d¦  «        ‚|j        �#d|j        cxk    rdk    sn t          d¦  «        ‚|S )Nz-beam_size and best_of can't be given togetherr   z4best_of with greedy sampling (T=0) is not compatiblez'patience requires beam_size to be givenr   z8length_penalty (alpha) should be a value between 0 and 1)r\   r[   r6   rY   r]   r^   )r~   r.  s     r+   r1  zDecodingTask._verify_options<  s¥   € ØÔÐ(¨W¬_Ð-HÝÐLÑMÔMÐMØÔ !Ò#Ð#ØŒÐ*Ý Ð!WÑXÔXÐXØÔÐ'¨GÔ,=Ð,EÝÐFÑGÔGÐGØÔ!Ð-Ø�Ô'Ð,Ð,Ò,Ð,¨1Ò,Ð,Ð,Ð,åÐWÑXÔXÐXàˆr-   c                 ó8  — t          | j        ¦  «        }| j        j        x}rot	          |t
          ¦  «        r/| j                             d|                     ¦   «         z   ¦  «        n|}| j	        �| j
        dz  | j	        z
  }|| d …         }||z   }| j        j        x}rmt	          |t
          ¦  «        r/| j                             d|                     ¦   «         z   ¦  «        n|}| j        j        g|| j
        dz  dz
   d …         z   |z   }t          |¦  «        S )Nr  r   r   )rF   r5   r.  r`   Ú
isinstancerj   r   r  ÚstriprZ   r4  r_   Úsot_prevrí   )r~   rr   r`   Úprefix_tokensÚmax_prefix_lenr_   Úprompt_tokenss          r+   r6  z DecodingTask._get_initial_tokensK  s3  € Ý�dÔ'Ñ(Ô(ˆà”\Ô(Ð(ˆ6ð 		,õ ˜f¥cÑ*Ô*ð�”×%Ò% c¨F¯LªL©N¬NÑ&:Ñ;Ô;Ð;àð ð
 ŒÐ*Ø!%¤¨q¡°4´?Ñ!B�Ø -¨~¨oÐ.>Ð.>Ô ?�Ø˜mÑ+ˆFà”\Ô(Ð(ˆ6ð 
	õ ˜f¥cÑ*Ô*ð�”×%Ò% c¨F¯LªL©N¬NÑ&:Ñ;Ô;Ð;àð ð ”Ô(Ð)Ø $¤*°¡/°AÑ"5Ð 6Ð 8Ð 8Ô9ñ:àñð õ �V‰}Œ}Ðr-   c                 ó�  — | j         j        }t          |t          ¦  «        rd„ |                     d¦  «        D ¦   «         }d|v r,d„ |D ¦   «         }|                     | j        j        ¦  «         n7|�t          |¦  «        dk    rg }nt          |t          ¦  «        s
J d¦   «         ‚|                     | j        j
        | j        j        | j        j        | j        j        | j        j        g¦  «         | j        j        �|                     | j        j        ¦  «         t#          t%          t'          |¦  «        ¦  «        ¦  «        S )Nc                 ó,   — g | ]}t          |¦  «        ‘ŒS r$   )rm   r»   s     r+   r1   z5DecodingTask._get_suppress_tokens.<locals>.<listcomp>k  s   € ÐJÐJÐJ¨!�s 1™vœvÐJÐJÐJr-   ú,r   c                 ó   — g | ]
}|d k    ¯|‘ŒS )r   r$   r»   s     r+   r1   z5DecodingTask._get_suppress_tokens.<locals>.<listcomp>n  s   € ÐDÐDÐD Q¸QÀ!ºV¸V˜q¸V¸V¸Vr-   r   zsuppress_tokens must be a list)r.  ra   r>  rj   ÚsplitÚextendr   Únon_speech_tokensr    rF   rW   Ú	translater@   r@  Úsot_lmÚ	no_speechr°   rí   rî   Úsetr  s     r+   r:  z!DecodingTask._get_suppress_tokensg  sA  € Øœ,Ô6ˆå�o¥sÑ+Ô+ð 	KØJÐJ¨×/DÒ/DÀSÑ/IÔ/IÐJÑJÔJˆOà�Ð Ð ØDÐD¨/ÐDÑDÔDˆOØ×"Ò" 4¤>Ô#CÑDÔDÐDÐDØÐ$­¨OÑ(<Ô(<ÀÒ(AÐ(AØ ˆOˆOå˜o­tÑ4Ô4ÐVÐVÐ6VÑVÔVÐ4à×Òà”Ô)Ø”Ô(Ø”Ô"Ø”Ô'Ø”Ô%ðñ	
ô 	
ð 	
ð Œ>Ô#Ð/à×"Ò" 4¤>Ô#;Ñ<Ô<Ð<å•V�C Ñ0Ô0Ñ1Ô1Ñ2Ô2Ð2r-   r   c                 ón  — | j         j        r|                     ¦   «         }|j        dd …         | j        j        j        | j        j        j        fk    r|}n| j                             |¦  «        }|j	        | j         j        rt          j        nt          j        k    rt          d|j	        › �¦  «        S |S )Nr   z'audio_features has an incorrect dtype: )r.  rf   Úhalfr9   r   r:   r;   r<   r=   r   r>   Úfloat16Úfloat32Ú	TypeError)r~   r   rp   s      r+   Ú_get_audio_featuresz DecodingTask._get_audio_features„  s¹   € ØŒ<Ôð 	Ø—(’(‘*”*ˆCàŒ9�R�S�SŒ>ØŒJŒOÔ'ØŒJŒOÔ)ð
ò 
ð 
ð
 !ˆNˆNà!œZ×/Ò/°Ñ4Ô4ˆNàÔØ!œ\Ô.ÐA�EŒMˆMµE´Mò
ð 
õ ØP¸.Ô:NÐPÐPñô ð ð Ðr-   rp   rr   c                 ó  — | j         j        g|j        d         z  }d }| j         j        �| j         j        dk    rL| j                             || j        ¦  «        \  }}d„ |D ¦   «         }| j         j        €||d d …| j        dz   f<   ||fS )Nr   Úlang_idc                 ó:   — g | ]}t          ||j        ¬ ¦  «        ‘ŒS ))rŒ   )r   rï   )r&   Úprobss     r+   r1   z1DecodingTask._detect_language.<locals>.<listcomp>¢  s'   € ÐKÐKÐK°u�˜U¨¬	Ð2Ñ2Ô2ÐKÐKÐKr-   r   )r.  r3   r9   rX   r   rS   r   r9  )r~   rp   rr   Ú	languagesÚ
lang_probsÚlang_tokenss         r+   Ú_detect_languagezDecodingTask._detect_languageš  s¤   € Ø”\Ô*Ð+¨nÔ.BÀ1Ô.EÑEˆ	Øˆ
àŒ<Ô Ð(¨D¬LÔ,=ÀÒ,JÐ,JØ&*¤j×&@Ò&@Ø ¤ñ'ô 'Ñ#ˆK˜ð LÐKÀ
ÐKÑKÔKˆIØŒ|Ô$Ð,Ø0;��q�q�q˜$œ.¨1Ñ,Ð,Ñ-à˜*Ð$Ð$r-   c                 óþ  — |j         d         }t          j        ||j        ¬¦  «        }t          j        g|z  }	 t          | j        ¦  «        D ]ó}| j         	                    ||¦  «        }|dk    rk| j
        j        �_|d d …| j        f                              ¦   «                              d¬¦  «        }|d d …| j
        j        f                              ¦   «         }|d d …df         }| j        D ]}	|	                     ||¦  «         Œ| j                             |||¦  «        \  }}
|
s|j         d         | j        k    r nŒô| j                             ¦   «          n# | j                             ¦   «          w xY w|||fS )Nr   rè   r   r    )r9   r>   ÚzerosrB   rG   rw   rL   rZ   rÝ   rC   r   rM  r9  rl   rJ   rÚ   r-  r  r“   rÇ   r4  r…   )r~   rp   rr   Ún_batchr¥   Úno_speech_probsr)   rC   Úprobs_at_sotÚlogit_filterr×   s              r+   Ú
_main_loopzDecodingTask._main_loop¨  s˜  € Ø”,˜q”/ˆÝ$œ{¨7¸>Ô;PÐQÑQÔQˆÝœ6˜( WÑ,ˆð	-Ý˜4œ?Ñ+Ô+ð ð �Øœ×.Ò.¨v°~ÑFÔF�ð ˜’F�F˜tœ~Ô7ÐCà#)¨!¨!¨!¨T¬^Ð*;Ô#<×#BÒ#BÑ#DÔ#D×#LÒ#LÐQSÐ#LÑ#TÔ#T�LØ&2°1°1°1°d´nÔ6NÐ3NÔ&O×&VÒ&VÑ&XÔ&X�Oð      2 œ�ð %)Ô$6ð 7ð 7�LØ ×&Ò& v¨vÑ6Ô6Ð6Ð6ð %)¤L×$7Ò$7¸ÀÈÑ$UÔ$UÑ!�˜	àð  ¤¨RÔ 0°4´:Ò =Ð =Ø�Eð !>ð ŒN×*Ò*Ñ,Ô,Ð,Ð,øˆDŒN×*Ò*Ñ,Ô,Ð,Ð,øøøà�| _Ð4Ð4s   ºDE ÅE7c           	      óV  ‡ ‡— ‰ j                              ¦   «          ‰ j        Š|j        d         }‰                      |¦  «        }t          j        ‰ j        g¦  «                             |d¦  «        }‰  	                    ||¦  «        \  }}‰ j
        j        dk    rd„ t          |||¦  «        D ¦   «         S |                     ‰ j        d¬¦  «                             |j        ¦  «        }‰                      ||¦  «        \  }}}|d d ‰ j        …         }|d d ‰ j        …         }|j        d         t%          |¦  «        cxk    r|k    sn J ‚|                     |‰ j        d¦  «        }|                     |‰ j        ¦  «        }‰ j                              ||¦  «        \  }}ˆ ˆfd„|D ¦   «         }‰ j                             ||¦  «        }	d„ t          |	|¦  «        D ¦   «         }ˆfd	„|D ¦   «         }
d
„ t          |	|¦  «        D ¦   «         }d„ t          ||¦  «        D ¦   «         }|
|||||f}t%          t/          t1          t$          |¦  «        ¦  «        ¦  «        dk    r2t3          dt5          t1          t$          |¦  «        ¦  «        › �¦  «        ‚ˆ fd„t          |Ž D ¦   «         S )Nr   r   rV  c                 ó:   — g | ]\  }}}t          |||¬ ¦  «        ‘ŒS ))rp   r3   rR   )ro   )r&   Úfeaturesr3   rX  s       r+   r1   z$DecodingTask.run.<locals>.<listcomp>Ô  sF   € ð ð ð ñ .�H˜h¨õ Ø#+°hÈuðñ ô ðð ð r-   r    r   c                 ó.   •— g | ]}ˆˆfd „|D ¦   «         ‘ŒS )c                 óp   •— g | ]2}|‰j         |‰j        k                         ¦   «         d          …         ‘Œ3S ))r   r   )r  rÌ   Únonzero)r&   r¼   r~   r   s     €€r+   r1   z/DecodingTask.run.<locals>.<listcomp>.<listcomp>î  s>   ø€ ÐTÐTÐTÈQˆQˆtÔ  A¨¬Ò$6×#?Ò#?Ñ#AÔ#AÀ$Ô#GÐGÔHÐTÐTÐTr-   r$   )r&   r½   r~   r   s     €€r+   r1   z$DecodingTask.run.<locals>.<listcomp>í  sB   ø€ ð &
ð &
ð &
àð UÐTÐTÐTÐTÐRSÐTÑTÔTð&
ð &
ð &
r-   c                 óH   — g | ]\  }}||                               ¦   «         ‘Œ S r$   )rÚ   )r&   r)   r¼   s      r+   r1   z$DecodingTask.run.<locals>.<listcomp>ô  s(   € Ð"SÐ"SÐ"S±T°Q¸ 1 Q¤4§;¢;¡=¤=Ð"SÐ"SÐ"Sr-   c                 ó^   •— g | ])}‰                      |¦  «                             ¦   «         ‘Œ*S r$   )Údecoder?  )r&   r¼   r   s     €r+   r1   z$DecodingTask.run.<locals>.<listcomp>õ  s3   ø€ ÐHÐHÐH¸A˜I×,Ò,¨QÑ/Ô/×5Ò5Ñ7Ô7ÐHÐHÐHr-   c                 ó$   — g | ]\  }}||         ‘ŒS r$   r$   )r&   r)   Úlps      r+   r1   z$DecodingTask.run.<locals>.<listcomp>÷  s    € Ð$TÐ$TÐ$T©u¨q°" R¨¤UÐ$TÐ$TÐ$Tr-   c                 ó>   — g | ]\  }}|t          |¦  «        d z   z  ‘ŒS )r   rº   )r&   r¼   rn  s      r+   r1   z$DecodingTask.run.<locals>.<listcomp>ø  s8   € ð %
ð %
ð %
Ù"' ! RˆB•#�a‘&”&˜1‘*Ñð%
ð %
ð %
r-   zinconsistent result lengths: c                 óz   •— g | ]7\  }}}}}}t          ||||||‰j        j        t          |¦  «        ¬ ¦  «        ‘Œ8S ))rp   r3   rr   rt   ru   rv   rY   r   )ro   r.  rY   r   )r&   rt   r3   rr   rf  ru   rv   r~   s          €r+   r1   z$DecodingTask.run.<locals>.<listcomp>  sl   ø€ ð 
ð 
ð 
ñ N��h ¨°+¸~õ Ø'Ø!ØØØ'Ø-Ø œLÔ4Ý"3°DÑ"9Ô"9ð	ñ 	ô 	ð
ð 
ð 
r-   )r“   rÅ   r   r9   rT  r>   r?   r7  Úrepeatr\  r.  rX   r.   Úrepeat_interleaver2  rA   rB   rc  r    ÚreshaperÉ   r,  r¨   rN  ÚmapÚRuntimeErrorrF   )r~   r   rN   rp   rr   rY  rR   r¥   r`  ÚselectedÚtextsÚavg_logprobsÚfieldsr   s   `            @r+   ÚrunzDecodingTask.runÈ  s  øø€ àŒ×ÒÑÔÐØ#œ~ˆ	Ø”y ”|ˆà!%×!9Ò!9¸#Ñ!>Ô!>ˆÝœ tÔ':Ð&;Ñ<Ô<×CÒCÀGÈQÑOÔOˆð %)×$9Ò$9¸.È&Ñ$QÔ$QÑ!ˆ	�>ØŒ<Ô 	Ò)Ð)ðð õ 25Ø" I¨~ñ2ô 2ð	ñ ô ð ð ×)Ò)¨$¬,¸AÐ)Ñ>Ô>×AÒAÀ.ÔBWÑXÔXˆð 15·²ÀÐPVÑ0WÔ0WÑ-ˆ�˜oð (¨¨¨4¬<¨Ô8ˆØ)¨/¨/¨T¬\¨/Ô:ˆØÔ# AÔ&­#¨oÑ*>Ô*>ÐIÐIÒIÐIÀ'ÒIÐIÐIÐIÐIÐIà—’ ¨¬°rÑ:Ô:ˆØ#×+Ò+¨G°T´\ÑBÔBˆð  $œ|×4Ò4°V¸\ÑJÔJÑˆ�ð&
ð &
ð &
ð &
ð &
àð&
ñ &
ô &
ˆð Ô'×,Ò,¨V°\ÑBÔBˆØ"SÐ"S½SÀÈ6Ñ=RÔ=RÐ"SÑ"SÔ"SˆØHÐHÐHÐHÀÐHÑHÔHˆà$TÐ$T½¸HÀlÑ8SÔ8SÐ$TÑ$TÔ$Tˆð%
ð %
Ý+.¨v°|Ñ+DÔ+Dð%
ñ %
ô %
ˆð
 ØØØØØð
ˆõ �s•3•s˜FÑ#Ô#Ñ$Ô$Ñ%Ô%¨Ò*Ð*ÝÐW½tÅCÍÈVÑDTÔDTÑ?UÔ?UÐWÐWÑXÔXÐXð
ð 
ð 
ð 
õ RUØðRð
ñ 
ô 
ð 	
r-   N)rg   rh   ri   ry   rk   r¤   rÃ   r	   r  rV   r˜   r1  r   rm   r6  r:  r   rT  r\  rc  r>   Úno_gradro   rz  r$   r-   r+   r+  r+  ü  sq  € € € € € € ØÐÐÑØ#Ð#Ð#Ñ#ØÐÐÑØ˜Ô$Ð$Ð$Ñ$ð8˜ið 8°/ð 8ð 8ð 8ð 8ðt ð ¸?ð ð ð ð ð U¨3¤Zð ð ð ð ð83 e¨C¤jð 3ð 3ð 3ð 3ð: vð ð ð ð ð,%¨vð %¸vð %ð %ð %ð %ð5¨ð 5¸ð 5ð 5ð 5ð 5ð@ €U„]�_„_ðL
�vð L
 $ ~Ô"6ð L
ð L
ð L
ñ „_ðL
ð L
ð L
r-   r+  r.  c                 óÂ   — |j         dk    x}r|                     d¦  «        }|rt          |fi |¤Ž}t          | |¦  «                             |¦  «        }|r|d         n|S )a;  
    Performs decoding of 30-second audio segment(s), provided as Mel spectrogram(s).

    Parameters
    ----------
    model: Whisper
        the Whisper model instance

    mel: torch.Tensor, shape = (80, 3000) or (*, 80, 3000)
        A tensor containing the Mel spectrogram(s)

    options: DecodingOptions
        A dataclass that contains all necessary options for decoding 30-second segments

    Returns
    -------
    result: Union[DecodingResult, List[DecodingResult]]
        The result(s) of decoding contained in `DecodingResult` dataclass instance(s)
    r   r   )r7   r8   r   r+  rz  )r   r   r.  ÚkwargsrM   r³   s         r+   rl  rl    su   € ð4 ”˜Q’Ð€vð Ø�mŠm˜AÑÔˆàð -Ý˜'Ð,Ð, VÐ,Ð,ˆå˜% Ñ)Ô)×-Ò-¨cÑ2Ô2€FàÐ*ˆ6�!Œ9ˆ9 FÐ*r-   rœ   )2Údataclassesr   r   r   Útypingr   r   r   r	   r
   r   r   r   ÚnumpyrG   r>   Útorch.nn.functionalÚnnÚ
functionalrÐ   r   Útorch.distributionsr   Úaudior   r   r   r   Úutilsr   r   r   r{  ÚdictrS   rV   ro   ry   r‡   r¤   rª   rÃ   rË   rÜ   r  r
  r  r  r+  rl  r$   r-   r+   ú<module>rˆ     s�  ðØ 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1Ø XÐ XÐ XÐ XÐ XÐ XÐ XÐ XÐ XÐ XÐ XÐ XÐ XÐ XÐ XÐ XÐ XÐ XÐ XÐ Xà Ð Ð Ð Ø €€€Ø Ð Ð Ð Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø +Ð +Ð +Ð +Ð +Ð +à Ð Ð Ð Ð Ð Ø /Ð /Ð /Ð /Ð /Ð /Ð /Ð /Ø $Ð $Ð $Ð $Ð $Ð $àð ØÐÐÐÐÐð €„�„à:>ð:+ð :+Øð:+Ø!ð:+Ø.7ð:+à
ˆ6�4˜”:ÐÔð:+ð :+ð :+ñ „ð:+ðz €�$ÐÑÔð!ð !ð !ð !ð !ñ !ô !ñ Ôð!ðH €�$ÐÑÔð	&ð 	&ð 	&ð 	&ð 	&ñ 	&ô 	&ñ Ôð	&ðð ð ð ð ñ ô ð ð Wð  Wð  Wð  Wð  W�yñ  Wô  Wð  WðF"ð "ð "ð "ð "ñ "ô "ð "ðPð Pð Pð Pð P˜nñ Pô Pð Pð45"ð 5"ð 5"ð 5"ð 5"ñ 5"ô 5"ð 5"ðp-ð -ð -ð -ð -�Lñ -ô -ð -ð:g$ð g$ð g$ð g$ð g$˜ñ g$ô g$ð g$ðT"ð "ð "ð "ð "ñ "ô "ð "ð Sð Sð Sð Sð S�Kñ Sô Sð Sð2ð 2ð 2ð 2ð 2�[ñ 2ô 2ð 2ð@Fð @Fð @Fð @Fð @F˜+ñ @Fô @Fð @FðFY
ð Y
ð Y
ð Y
ð Y
ñ Y
ô Y
ð Y
ðx €„�„ð  /˜Ñ0Ô0ð!+ð !+Øð!+à	ð!+ð ð!+ð
 ˆ>˜4 Ô/Ð/Ô0ð!+ð !+ð !+ñ „ð!+ð !+ð !+r-   