Ë
    È: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„«       Z1y)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                 ór  — |€!t        | j                  | j                  ¬«      }|j                  �|j                  |j
                  vrt        d«      ‚|j                  dk(  }|r|j                  d«      }|j                  dd | j                  j                  | j                  j                  fk7  r| j                  |«      }|j                  d   }t        j                  |j                   gg|z  «      j#                  |j$                  «      }| j'                  ||«      dd…df   }t        j(                  |j                  d   t        j*                  ¬«      }d	|t-        |j.                  «      <   t0        j2                   |dd…|f<   |j5                  d¬
«      }|j7                  d¬
«      j9                  «       }	t;        |«      D �
��cg c]I  }
t=        |j.                  |j>                  «      D ��ci c]  \  }}||	|
|f   jA                  «       “Œ c}}‘ŒK }}}
}|r
|d   }|d   }||fS c c}}w c c}}}
w )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©Údim)!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ÚlistÚall_language_tokensÚnpÚinfÚargmaxÚsoftmaxÚcpuÚrangeÚzipÚall_language_codesÚitem)r   r   r   ÚsingleÚn_audioÚxr3   ÚmaskÚlanguage_tokensÚlanguage_token_probsÚiÚjÚcÚlanguage_probss                 úe/home/mcse/projects/srt_converter/srt-converter-venv/lib/python3.12/site-packages/whisper/decoding.pyÚdetect_languagerL      s  € ð  ÐÜ!Ø×!Ñ!°×1DÑ1Dô
ˆ	ð 	×ÑÐ"Ø×#Ñ#¨9×+AÑ+AÑAäØQó
ð 	
ð �X‰X˜‰]€FÙØ�m‰m˜AÓˆð ‡y�y��€~˜%Ÿ*™*×0Ñ0°%·*±*×2JÑ2JÐKÒKØ�m‰m˜CÓ ˆð �i‰i˜‰l€GÜ�‰�y—}‘}�oÐ&¨Ñ0Ó1×4Ñ4°S·Z±ZÓ@€AØ�\‰\˜!˜SÓ!¢! Q $Ñ'€Fô �:‰:�f—l‘l 2Ñ&¬e¯j©jÔ9€DØ05€DŒˆi×+Ñ+Ó	,Ñ-Ü—v‘v�g€FŠ1ˆdˆ7�OØ—m‘m¨�mÓ+€OØ!Ÿ>™>¨b˜>Ó1×5Ñ5Ó7Ðô �w“÷ð ð
 ô ˜I×9Ñ9¸9×;WÑ;WÓX÷	
á��1ð Ð# A q DÑ)×.Ñ.Ó0Ñ0õ	
ð€Nò ñ Ø)¨!Ñ,ˆØ'¨Ñ*ˆà˜NÐ*Ð*ùó	
ùôs   Ç
(H2Ç2 H,ÈH2È,H2T)Úfrozenc                   óL  — 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<   y)ÚDecodingOptionsÚ
transcribeÚtaskNr#   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__rQ   ÚstrÚ__annotations__r#   r
   rR   ÚfloatrS   ÚintrT   rU   rV   rW   rX   r   r	   rY   rZ   r   r[   r5   r\   r^   r_   © ó    rK   rO   rO   P   sþ   … ð €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€FˆH�U˜3  S¡	˜>Ñ*Ñ+Ó2ð <@€O�X˜e C¨°#©Ð$6Ñ7Ñ8Ó?Ø€N�DÓð  %Ð˜Ó$Ø-0Ð˜8 E™?Ó0ð €Dˆ$Ôrh   rO   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<   y)ÚDecodingResultÚaudio_featuresr#   NrJ   )Údefault_factoryÚtokensÚ ÚtextÚavg_logprobÚno_speech_probrR   r   )r`   ra   rb   r   rd   rc   rJ   r
   r   re   r   r6   rm   r	   rf   ro   r8   Únanrp   rq   rR   r   rg   rh   rK   rj   rj   u   sz   … àÓØƒMØ15€N�H˜T # u *Ñ-Ñ.Ó5Ù¨dÔ3€FˆD�‰IÓ3Ø€Dˆ#ƒNØŸ™€K�ÓØŸF™F€N�EÓ"ØŸ™€K�ÓØ!Ÿv™vÐ�uÔ%rh   rj   c                   ó0   — e Zd Zdededefd„Zdd„Zdd„Zy)	Ú	Inferencerm   rk   r   c                 ó   — t         ‚)zAPerform a forward pass on the decoder and return per-token logits©ÚNotImplementedError©Úselfrm   rk   s      rK   r3   zInference.logitsƒ   ó   € ä!Ð!rh   Nc                 ó   — t         ‚)z9Update the key-value cache according to the updated beamsrv   )ry   Úsource_indicess     rK   Úrearrange_kv_cachezInference.rearrange_kv_cache‡   rz   rh   c                  ó   — y)z:Clean up any resources or hooks after decoding is finishedNrg   ©ry   s    rK   Úcleanup_cachingzInference.cleanup_caching‹   s   € àrh   )r   N)r`   ra   rb   r   r3   r}   r€   rg   rh   rK   rt   rt   ‚   s&   „ ð"˜Vð "°Vð "Àó "ó"ôrh   rt   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y)ÚPyTorchInferencer   r   Úinitial_token_lengthc                 óh  — || _         || _        i | _        g | _        | j                   j                  j
                  D �cg c]  }|j                  j                  ‘Œ }}| j                   j                  j
                  D �cg c]  }|j                  j                  ‘Œ }}||z   | _	        y c c}w c c}w ©N)
r   rƒ   Úkv_cacheÚhooksÚdecoderÚblocksÚattnÚkeyÚvalueÚ
kv_modules)ry   r   rƒ   ÚblockÚkey_modulesÚvalue_moduless         rK   Ú__init__zPyTorchInference.__init__‘   sŒ   € Ø %ˆŒ
Ø$8ˆÔ!ØˆŒØˆŒ
à37·:±:×3EÑ3E×3LÑ3LÖM¨%�u—z‘z—~“~ÐMˆÐMØ7;·z±z×7IÑ7I×7PÑ7PÖQ¨e˜Ÿ™×)Ó)ÐQˆÐQØ%¨Ñ5ˆ�ùò NùÚQs   ¿B*Â B/rm   rk   r   c                 ó  — | j                   s'| j                  j                  «       \  | _         | _        |j                  d   | j
                  kD  r|d d …dd …f   }| j                  j                  ||| j                   ¬«      S )Nr   )r†   )r†   r   Úinstall_kv_cache_hooksr‡   r)   rƒ   rˆ   rx   s      rK   r3   zPyTorchInference.logits›   sj   € Ø�}Š}Ø(,¯
©
×(IÑ(IÓ(KÑ%ˆDŒM˜4œ:à�<‰<˜Ñ˜d×7Ñ7Ò7àšA˜r™s˜F‘^ˆFà�z‰z×!Ñ! &¨.À4Ç=Á=Ð!ÓQÐQrh   c                 ób   — | j                   D ]  }|j                  «        Œ i | _        g | _         y r…   )r‡   Úremover†   )ry   Úhooks     rK   r€   z PyTorchInference.cleanup_caching¥   s.   € Ø—J‘Jò 	ˆDØ�K‰K�Mð	ð ˆŒØˆ�
rh   c                 óÂ   — |t        t        t        |«      «      «      k7  r?| j                  D ]/  }| j                  |   |   j                  «       | j                  |<   Œ1 y y r…   )r6   r=   Úlenr�   r†   Údetach)ry   r|   Úmodules      rK   r}   z#PyTorchInference.rearrange_kv_cache¬   sX   € ØœT¤%¬¨NÓ(;Ó"<Ó=Ò=ØŸ/™/ò W�à(,¯©°fÑ(=¸nÑ(M×(TÑ(TÓ(V�—‘˜fÒ%ñWð >rh   N)	r`   ra   rb   rf   r‘   r   r3   r€   r}   rg   rh   rK   r‚   r‚   �   s>   „ ð6˜ið 6¸só 6ðR˜Vð R°Vð RÀó RòóWrh   r‚   c                   ó>   — e Zd Zdeee      deee      dee   fd„Zy)ÚSequenceRankerrm   Ú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
        rv   ©ry   rm   r�   s      rK   ÚrankzSequenceRanker.rank´   s
   € ô "Ð!rh   N)r`   ra   rb   r	   r   re   rf   r    rg   rh   rK   rœ   rœ   ³   s5   „ ð"Ø˜4 ™<Ñ(ð"Ø8<¸TÀ%¹[Ñ8Ið"à	ˆc‰ô"rh   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	y)ÚMaximumLikelihoodRankerz�
    Select the sample with the highest log probabilities, penalized using either
    a simple length normalization or Google NMT paper's length penalty
    rW   c                 ó   — || _         y r…   )rW   )ry   rW   s     rK   r‘   z MaximumLikelihoodRanker.__init__Ä   s
   € Ø,ˆÕrh   rm   r�   c           
      óò   ‡ — ˆ fd„}|D ��cg c]  }|D �cg c]  }t        |«      ‘Œ c}‘Œ }}}t        ||«      D ��cg c]!  \  }}t        j                   |||«      «      ‘Œ# c}}S c c}w c c}}w c c}}w )Nc                 ó¤   •— g }t        | |«      D ]=  \  }}‰j                  €|}nd|z   dz  ‰j                  z  }|j                  ||z  «       Œ? |S )Né   é   )r>   rW   Úappend)ÚlogprobsÚlengthsÚresultÚlogprobÚlengthÚpenaltyry   s         €rK   Úscoresz,MaximumLikelihoodRanker.rank.<locals>.scoresÈ   sf   ø€ ØˆFÜ#& x°Ó#9ò 1‘�˜Ø×&Ñ&Ð.Ø$‘Gð !" F¡
¨aÑ/°D×4GÑ4GÑG�GØ—‘˜g¨Ñ/Õ0ð1ð ˆMrh   )r˜   r>   r8   r:   )	ry   rm   r�   r¯   ÚsÚtrª   ÚpÚls	   `        rK   r    zMaximumLikelihoodRanker.rankÇ   sb   ø€ ô		ð 17×7¨1 AÖ&˜q”C˜•FÔ&Ð7ˆÑ7Ü47¸ÀgÓ4N×O©D¨A¨q”—	‘	™&  A›,Õ'ÓOÐOùò 'ùÓ7ùÛOs   Œ	A-•A(§A-¾&A3Á(A-N)
r`   ra   rb   Ú__doc__r
   re   r‘   r	   r   r    rg   rh   rK   r¢   r¢   ¾   s?   „ ñð
- x°¡ó -ðP˜4  V¡Ñ-ð P¸TÀ$ÀuÁ+Ñ=Nô Prh   r¢   c            
       ój   — 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y)	ÚTokenDecoderc                  ó   — y)z=Initialize any stateful variables for decoding a new sequenceNrg   r   s    rK   ÚresetzTokenDecoder.resetÙ   s   � rh   rm   r3   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

        rv   )ry   rm   r3   r�   s       rK   ÚupdatezTokenDecoder.updateÜ   s
   € ô2 "Ð!rh   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

        rv   rŸ   s      rK   ÚfinalizezTokenDecoder.finalize÷   s
   € ô, "Ð!rh   N)r`   ra   rb   r¸   r   r   r5   rº   r   r	   re   r¼   rg   rh   rK   r¶   r¶   Ø   sp   „ òLð"Øð"Ø&,ð"Ø<Bð"à	ˆv�tˆ|Ñ	ó"ð6"Øð"Ø,2ð"à	ˆx˜ Ñ(Ñ)¨4°°U±Ñ+<Ð<Ñ	=ô"rh   r¶   c            
       óN   — 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
y
)ÚGreedyDecoderrR   Úeotc                 ó    — || _         || _        y r…   )rR   r¿   )ry   rR   r¿   s      rK   r‘   zGreedyDecoder.__init__  s   € Ø&ˆÔØˆ�rh   rm   r3   r�   r   c                 ó:  — | j                   dk(  r|j                  d¬«      }n't        || j                   z  ¬«      j                  «       }t	        j
                  |j                  «       d¬«      }|t        j                  |j                  d   «      |f   }|||d d …df   | j                  k7  z  z  }| j                  ||d d …df   | j                  k(  <   t        j                  ||d d …d f   gd¬«      }|d d …df   | j                  k(  j                  «       }||fS )Nr   r   r    )r3   )rR   r:   r   ÚsampleÚFÚlog_softmaxre   r.   Úaranger)   r¿   ÚcatÚall)ry   rm   r3   r�   Únext_tokensr©   Úcurrent_logprobsÚ	completeds           rK   rº   zGreedyDecoder.update  s   € ð ×Ñ˜qÒ Ø Ÿ-™-¨B˜-Ó/‰Kä%¨V°d×6FÑ6FÑ-FÔG×NÑNÓPˆKä—=‘= §¡£°RÔ8ˆØ#¤E§L¡L°·±ÀÑ1BÓ$CÀ[Ð$PÑQÐØÐ(¨F²1°b°5©M¸T¿X¹XÑ,EÑFÑFˆà15·±ˆ�Fš1˜b˜5‘M T§X¡XÑ-Ñ.Ü—‘˜F K²°4°Ñ$8Ð9¸rÔBˆàšA˜r˜E‘] d§h¡hÑ.×3Ñ3Ó5ˆ	Ø�yÐ Ð rh   c                 ój   — t        j                  |d| j                  ¬«      }||j                  «       fS )N)r   r   )rŒ   )rÃ   Úpadr¿   ÚtolistrŸ   s      rK   r¼   zGreedyDecoder.finalize'  s,   € ä—‘�v˜v¨T¯X©XÔ6ˆØ�|×*Ñ*Ó,Ð,Ð,rh   N)r`   ra   rb   re   rf   r‘   r   r   r5   rº   r¼   rg   rh   rK   r¾   r¾     sV   „ ð Eð °ó ð!Øð!Ø&,ð!Ø<Bð!à	ˆv�tˆ|Ñ	ó!ð$-˜vð -°Vô -rh   r¾   c            
       óf   — 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y)ÚBeamSearchDecoderNrU   r¿   Ú	inferencerV   c                 óÆ   — || _         || _        || _        |xs d| _        t	        || j                  z  «      | _        d | _        | j
                  dkD  sJ d|› d|› d�«       ‚y )Nr]   r   zInvalid beam size (z) or patience (ú))rU   r¿   rÐ   rV   ÚroundÚmax_candidatesÚfinished_sequences)ry   rU   r¿   rÐ   rV   s        rK   r‘   zBeamSearchDecoder.__init__.  ss   € ð #ˆŒØˆŒØ"ˆŒØ š CˆŒÜ#(¨°T·]±]Ñ)BÓ#CˆÔØ"&ˆÔð ×Ñ !Ò#ð	Gà   ¨?¸8¸*ÀAÐFó	GÙ#rh   c                 ó   — d | _         y r…   )rÕ   r   s    rK   r¸   zBeamSearchDecoder.reset@  s
   € Ø"&ˆÕrh   rm   r3   r�   r   c                 óè  ‡ — |j                   d   ‰ j                  z  dk7  r%t        |j                   › d‰ j                  › d�«      ‚|j                   d   ‰ j                  z  }‰ j                  €t	        |«      D �cg c]  }i ‘Œ c}‰ _        t        j                  |j                  «       d¬«      }g g g }	}}t	        |«      D �]K  }
i i i }}}t	        ‰ j                  «      D ]“  }|
‰ j                  z  |z   }||   j                  «       }t        ||   j                  ‰ j                  dz   «      Ž D ]B  \  }}||   |z   j                  «       }t        ||j                  «       gz   «      }|||<   |||<   ŒD Œ• d}t        ||j                  d¬«      D ]i  }|d   ‰ j                  k(  r	||   ||<   Œ||   |t!        |«      <   |j#                  |«       |j#                  ||   «       |dz  }|‰ j                  k(  sŒi n |	j#                  |«       �ŒN t%        j&                  ||j(                  ¬	«      }‰ j*                  j-                  |«       t!        ‰ j                  «      t!        |	«      k(  sJ ‚t        ‰ j                  |	«      D ]D  \  }}t        ||j                  d¬«      D ]$  }t!        |«      ‰ j.                  k\  r Œ;||   ||<   Œ& ŒF t1        ˆ fd
„‰ j                  D «       «      }||fS c c}w )Nr   z[0] % z != 0r   r    r   T)r‹   Úreverse©r2   c              3   óN   •K  — | ]  }t        |«      ‰j                  k\  –— Œ y ­wr…   )r˜   rÔ   )Ú.0Ú	sequencesry   s     €rK   ú	<genexpr>z+BeamSearchDecoder.update.<locals>.<genexpr>z  s(   øè ø€ ò 
àô �	‹N˜d×1Ñ1Õ1ñ
ùs   ƒ"%)r)   rU   r&   rÕ   r=   rÃ   rÄ   re   rÍ   r>   Útopkr@   ÚtupleÚsortedÚgetr¿   r˜   r¨   r.   r/   r2   rÐ   r}   rÔ   rÇ   )ry   rm   r3   r�   rB   Ú_r©   rÈ   r|   rÕ   rG   r¯   ÚsourcesÚfinishedrH   ÚidxrY   r¬   ÚtokenÚnew_logprobÚsequenceÚsavedÚpreviously_finishedÚnewly_finishedÚseqrÊ   s   `                         rK   rº   zBeamSearchDecoder.updateC  sö  ø€ ð �<‰<˜‰?˜TŸ^™^Ñ+¨qÒ0Ü §¡˜~¨V°D·N±NÐ3CÀ5ÐIÓJÐJà—,‘,˜q‘/ T§^¡^Ñ3ˆØ×"Ñ"Ð*Ü38¸³>Ö&B¨a¢rÒ&BˆDÔ#ä—=‘= §¡£°RÔ8ˆØ:<¸bÀ"Ð%7�^ˆÜ�w“ó 	0ˆAØ(*¨B°˜X�GˆFô ˜4Ÿ>™>Ó*ò ,�Ø˜$Ÿ.™.Ñ(¨1Ñ,�Ø ™×+Ñ+Ó-�Ü&)¨8°C©=×+=Ñ+=¸d¿n¹nÈqÑ>PÓ+QÐ&Rò ,‘N�G˜UØ#/°Ñ#4°wÑ#>×"DÑ"DÓ"F�KÜ$ V¨u¯z©z«|¨nÑ%<Ó=�HØ'2�F˜8Ñ$Ø(+�G˜HÒ%ñ	,ð,ð ˆEÜ" 6¨v¯z©zÀ4ÔHò 
�Ø˜B‘< 4§8¡8Ò+Ø)/°Ñ)9�H˜XÒ&à5;¸HÑ5E�L¤ [Ó!1Ñ2Ø×&Ñ& xÔ0Ø"×)Ñ)¨'°(Ñ*;Ô<à˜Q‘J�EØ §¡Ó.Ùð
ð ×%Ñ% hÖ/ð7	0ô: —‘˜k°&·-±-Ô@ˆØ�‰×)Ñ)¨.Ô9ô �4×*Ñ*Ó+¬sÐ3EÓ/FÒFÐFÐFÜ36Ø×#Ñ#Ð%7ó4
ò 	?Ñ/Ð ô ˜n°.×2DÑ2DÈdÔSò ?�ÜÐ*Ó+¨t×/BÑ/BÒBÙØ+9¸#Ñ+>Ð# CÒ(ñ?ð	?ô ó 
à!×4Ñ4ô
ó 
ˆ	ð �yÐ Ð ùòg 'Cs   Á;	K/Úpreceding_tokensc           
      óÀ  — |j                  «       }t        | j                  «      D ]©  \  }}t        |«      | j                  k  sŒt        t        j                  ||   «      «      d d d…   D ]a  }|||f   j                  «       | j                  gz   }||   |   j                  «       |t        |«      <   t        |«      | j                  k\  sŒa Œ© Œ« | j                  D ��cg c]3  }|j                  «       D �cg c]  }t        j                  |«      ‘Œ c}‘Œ5 }}}| j                  D �cg c]  }t        |j                  «       «      ‘Œ }}||fS c c}w c c}}w c c}w )Nr   )r<   Ú	enumeraterÕ   r˜   rU   r6   r8   ÚargsortrÍ   r¿   r@   rß   Úkeysr.   r/   Úvalues)	ry   rí   r�   rG   rÜ   rH   rè   rì   rm   s	            rK   r¼   zBeamSearchDecoder.finalize€  sI  € à#×'Ñ'Ó)ˆÜ% d×&=Ñ&=Ó>ò 	‰LˆAˆyä�I“ §¡Ó/äœbŸj™j¨°a©Ó9Ó:¹4¸R¸4Ñ@ò �AØ/°°1°Ñ5×<Ñ<Ó>À$Ç(Á(ÀÑK�HØ1=¸a±ÀÑ1C×1HÑ1HÓ1J�Iœe H›oÑ.Ü˜9“~¨¯©Ó7Ùñ	ð		ð "×4Ñ4÷&
àð +4¯.©.Ó*:Ö; 3ŒU�\‰\˜#ÕÔ;ð&
ˆñ &
ð
 7;×6MÑ6Mö+
Ø)2ŒD�×!Ñ!Ó#Õ$ð+
ˆð +
ð �|Ð#Ð#ùò <ùó&
ùò+
s   Ã!EÃ8EÄEÄ* EÅEr…   )r`   ra   rb   rf   rt   r
   re   r‘   r¸   r   r   r5   rº   r¼   rg   rh   rK   rÏ   rÏ   -  s‚   „ ð %)ñGàðGð ðGð ð	Gð
 ˜5‘/óGò$'ð;!Øð;!Ø&,ð;!Ø<Bð;!à	ˆv�tˆ|Ñ	ó;!ðz$¨ð $¸vô $rh   rÏ   c                   ó    — e Zd Zdededdfd„Zy)ÚLogitFilterr3   rm   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

        rv   ©ry   r3   rm   s      rK   ÚapplyzLogitFilter.apply˜  s
   € ô "Ð!rh   )r`   ra   rb   r   r÷   rg   rh   rK   rô   rô   —  s   „ ð"˜Fð "¨Fð "°tô "rh   rô   c                   ó,   — e Zd Zdedefd„Zdedefd„Zy)ÚSuppressBlankr   Úsample_beginc                 ó    — || _         || _        y r…   )r   rú   )ry   r   rú   s      rK   r‘   zSuppressBlank.__init__¨  s   € Ø"ˆŒØ(ˆÕrh   r3   rm   c                 óÐ   — |j                   d   | j                  k(  rJt        j                   |d d …| j                  j                  d«      | j                  j                  gz   f<   y y )Nr   ú )r)   rú   r8   r9   r   Úencoder¿   rö   s      rK   r÷   zSuppressBlank.apply¬  sS   € Ø�<‰<˜‰?˜d×/Ñ/Ò/ÜLNÏFÉFÈ7ˆF’1�d—n‘n×+Ñ+¨CÓ0°D·N±N×4FÑ4FÐ3GÑGÐGÒHð 0rh   N)r`   ra   rb   r   rf   r‘   r   r÷   rg   rh   rK   rù   rù   §  s+   „ ð) )ð )¸3ó )ðS˜Fð S¨Fô Srh   rù   c                   ó.   — e Zd Zdee   fd„Zdedefd„Zy)ÚSuppressTokensrZ   c                 ó$   — t        |«      | _        y r…   )r6   rZ   )ry   rZ   s     rK   r‘   zSuppressTokens.__init__²  s   € Ü# OÓ4ˆÕrh   r3   rm   c                 óH   — t         j                   |d d …| j                  f<   y r…   )r8   r9   rZ   rö   s      rK   r÷   zSuppressTokens.applyµ  s   € Ü+-¯6©6¨'ˆŠq�$×&Ñ&Ð&Ò'rh   N)r`   ra   rb   r   rf   r‘   r   r÷   rg   rh   rK   r   r   ±  s%   „ ð5¨°©ó 5ð2˜Fð 2¨Fô 2rh   r   c                   ó6   — e Zd Zdededee   fd„Zdedefd„Zy)	ÚApplyTimestampRulesr   rú   Úmax_initial_timestamp_indexc                 ó.   — || _         || _        || _        y r…   )r   rú   r  )ry   r   rú   r  s       rK   r‘   zApplyTimestampRules.__init__º  s   € ð #ˆŒØ(ˆÔØ+FˆÕ(rh   r3   rm   c                 óT  — | j                   j                  �,t        j                   |d d …| j                   j                  f<   t	        |j
                  d   «      D �]c  }||| j                  d …f   }|j                  «       D �cg c]  }|‘Œ }}t        |«      dk\  xr |d   | j                   j                  k\  }t        |«      dk  xs |d   | j                   j                  k\  }|r[|r-t        j                   ||| j                   j                  d …f<   n,t        j                   ||d | j                   j                  …f<   ||j                  | j                   j                  «         }	|	j                  «       dkD  s�Œ&|r|s|	d   }
n|	d   dz   }
t        j                   ||| j                   j                  |
…f<   �Œf |j
                  d   | j                  k(  rzt        j                   |d d …d | j                   j                  …f<   | j                  �@| j                   j                  | j                  z   }t        j                   |d d …|dz   d …f<   t        j                  |j!                  «       d¬«      }t	        |j
                  d   «      D ]Œ  }||| j                   j                  d …f   j#                  d¬«      }||d | j                   j                  …f   j%                  «       }||kD  sŒat        j                   ||d | j                   j                  …f<   ŒŽ y c c}w )Nr   r   r   r   r   r    )r   Úno_timestampsr8   r9   r=   r)   rú   rÍ   r˜   Útimestamp_beginr¿   ÚgeÚnumelr  rÃ   rÄ   re   Ú	logsumexpÚmax)ry   r3   rm   ÚkÚsampled_tokensr±   rì   Úlast_was_timestampÚpenultimate_was_timestampÚ
timestampsÚtimestamp_lastÚlast_allowedr©   Útimestamp_logprobÚmax_text_token_logprobs                  rK   r÷   zApplyTimestampRules.applyÄ  së  € à�>‰>×'Ñ'Ð3Ü79·v±v°gˆF’1�d—n‘n×2Ñ2Ð2Ñ3ô �v—|‘| A‘Ó'ó 	UˆAØ# A t×'8Ñ'8Ñ':Ð$:Ñ;ˆNØ,×3Ñ3Ó5Ö6˜’1Ð6ˆCÐ6ä�C“˜A‘ÒK # b¡'¨T¯^©^×-KÑ-KÑ"Kð ô �C“˜1‘ÒI  B¡¨4¯>©>×+IÑ+IÑ Ið &ñ "Ù,ÜCEÇ6Á6À'�F˜1˜dŸn™n×<Ñ<Ñ>Ð>Ò?ä79·v±v°g�F˜1Ð2 §¡× 2Ñ 2Ð2Ð2Ñ3à'Ø×!Ñ! $§.¡.×"@Ñ"@ÓAñˆJð ×ÑÓ! AÔ%ñ &Ñ.GØ%/°¡^‘Nà%/°¡^°aÑ%7�NÜNPÏfÉfÈW��q˜$Ÿ.™.×8Ñ8¸>ÐIÐIÓJð5	Uð8 �<‰<˜‰?˜d×/Ñ/Ò/ä;=¿6¹6¸'ˆF’1Ð6˜Ÿ™×6Ñ6Ð6Ð6Ñ7ð ×/Ñ/Ð;à—N‘N×2Ñ2°T×5UÑ5UÑUð ô 24·±°�’q˜,¨Ñ*Ñ,Ð,Ñ-ô —=‘= §¡£°RÔ8ˆÜ�v—|‘| A‘Ó'ò 	FˆAØ (¨¨D¯N©N×,JÑ,JÑ,LÐ)LÑ M× WÑ WØð !Xó !Ðð &.¨aÐ1Q°4·>±>×3QÑ3QÐ1QÐ.QÑ%R×%VÑ%VÓ%XÐ"Ø Ð#9Ó9Ü?A¿v¹v¸g��qÐ:˜DŸN™N×:Ñ:Ð:Ð:Ò;ñ	FùòO 7s   Â	L%N)	r`   ra   rb   r   rf   r
   r‘   r   r÷   rg   rh   rK   r  r  ¹  sA   „ ðGàðGð ðGð &.¨c¡]ó	Gð5F˜Fð 5F¨Fô 5Frh   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y)ÚDecodingTaskrÐ   Úsequence_rankerrˆ   Úlogit_filtersr   r   Úoptionsc                 ób  — || _         |j                  xs d}t        |j                  |j                  ||j
                  ¬«      }|| _        | j                  |«      | _        |j                  xs |j                  xs d| _        |j                  j                  | _        |j                  xs |j                  j                  dz  | _        |j                   | _        | j                  j"                  r|j$                  | _        | j'                  «       | _        t+        | j(                  «      | _        | j(                  j/                  |j0                  «      | _        t5        |t+        | j(                  «      «      | _        t9        |j:                  «      | _        |j                  �<t?        |j                  |j@                  | j6                  |jB                  «      | _"        n%tG        |jH                  |j@                  «      | _"        g | _%        | j                  jL                  r9| jJ                  jO                  tQ        | j                  | j,                  «      «       | j                  jR                  r2| jJ                  jO                  tU        | jW                  «       «      «       |j"                  s~tX        |j                  jZ                  z  }d }|j\                  r"t_        | j                  j\                  |z  «      }| jJ                  jO                  ta        || j,                  |«      «       y y )NÚen)r   r#   rQ   r   r   )1r   r#   r   r"   r   rQ   r   Ú_verify_optionsr  rU   rT   Ún_groupr*   Ú
n_text_ctxÚn_ctxrS   r%   r\   Ú#sot_sequence_including_notimestampsÚ_get_initial_tokensÚinitial_tokensr˜   rú   Úindexr0   Ú	sot_indexr‚   rÐ   r¢   rW   r  rÏ   r¿   rV   rˆ   r¾   rR   r  r[   r¨   rù   rZ   r   Ú_get_suppress_tokensr   r+   r^   rÓ   r  )ry   r   r  r#   r   Ú	precisionr  s          rK   r‘   zDecodingTask.__init__  sv  € ØˆŒ
à×#Ñ#Ò+ tˆÜ!Ø×!Ñ!Ø×-Ñ-ØØ—‘ô	
ˆ	ð %.ˆŒØ(,×(<Ñ(<¸WÓ(EˆŒà#×-Ñ-ÒE°·±ÒEÀAˆŒØŸ*™*×/Ñ/ˆŒ
Ø&×1Ñ1ÒO°U·Z±Z×5JÑ5JÈaÑ5OˆŒà(1×(>Ñ(>ˆÔØ�<‰<×*Ò*Ø )× MÑ MˆDÔà*.×*BÑ*BÓ*DˆÔÜ!$ T×%8Ñ%8Ó!9ˆÔØ"×1Ñ1×7Ñ7¸	¿¹ÓFˆŒô *¨%´°T×5HÑ5HÓ1IÓJˆŒô  7°w×7MÑ7MÓNˆÔð ×ÑÐ(Ü,Ø×!Ñ! 9§=¡=°$·.±.À'×BRÑBRóˆD�Lô )¨×)<Ñ)<¸i¿m¹mÓLˆDŒLð  ˆÔØ�<‰<×&Ò&Ø×Ñ×%Ñ%¤m°D·N±NÀD×DUÑDUÓ&VÔWØ�<‰<×'Ò'Ø×Ñ×%Ñ%¤n°T×5NÑ5NÓ5PÓ&QÔRØ×)Ò)Ü$ u§z¡z×'=Ñ'=Ñ=ˆIØ*.Ð'Ø×,Ò,Ü.3Ø—L‘L×6Ñ6¸ÑBó/Ð+ð ×Ñ×%Ñ%Ü#Ø˜t×0Ñ0Ð2Móõð *rh   r   c                 óN  — |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t        d«      ‚ 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)rU   rT   r&   rR   rV   rW   )ry   r  s     rK   r  zDecodingTask._verify_options<  s«   € Ø×ÑÐ(¨W¯_©_Ð-HÜÐLÓMÐMØ×Ñ !Ò#Ø�‰Ð*Ü Ð!WÓXÐXØ×ÑÐ'¨G×,=Ñ,=Ð,EÜÐFÓGÐGØ×!Ñ!Ð-Ø�×'Ñ'Ô,¨1Ò,äÐWÓXÐXð -äÐWÓXÐXàˆrh   c                 ób  — t        | j                  «      }| j                  j                  x}rqt	        |t
        «      r,| j                  j                  d|j                  «       z   «      n|}| j                  �"| j                  dz  | j                  z
  }|| d  }||z   }| j                  j                  x}rot	        |t
        «      r,| j                  j                  d|j                  «       z   «      n|}| j                  j                  g|| j                  dz  dz
   d  z   |z   }t        |«      S )Nrý   r   r   )r6   r%   r  rY   Ú
isinstancerc   r   rþ   ÚstriprS   r!  rX   Úsot_prevrß   )ry   rm   rY   Úprefix_tokensÚmax_prefix_lenrX   Úprompt_tokenss          rK   r#  z DecodingTask._get_initial_tokensK  s(  € Ü�d×'Ñ'Ó(ˆà—\‘\×(Ñ(Ð(ˆ6Ð(ô ˜f¤cÔ*ð —‘×%Ñ% c¨F¯L©L«NÑ&:Ô;àð ð
 �‰Ð*Ø!%§¡¨q¡°4·?±?Ñ!B�Ø -¨~¨oÐ.>Ð ?�Ø˜mÑ+ˆFà—\‘\×(Ñ(Ð(ˆ6Ð(ô ˜f¤cÔ*ð —‘×%Ñ% c¨F¯L©L«NÑ&:Ô;àð ð —‘×(Ñ(Ð)Ø $§*¡*°¡/°AÑ"5Ð 6Ð 8Ð9ñ:àñð ô �V‹}Ðrh   c                 ó&  — | j                   j                  }t        |t        «      r'|j	                  d«      D �cg c]  }t        |«      ‘Œ }}d|v r;|D �cg c]
  }|dk\  sŒ	|‘Œ }}|j                  | j                  j                  «       n*|�t        |«      dk(  rg }nt        |t        «      sJ d«       ‚|j                  | j                  j                  | j                  j                  | j                  j                  | j                  j                  | j                  j                  g«       | j                  j                   �%|j#                  | j                  j                   «       t%        t'        t)        |«      «      «      S c c}w c c}w )Nú,r   r   zsuppress_tokens must be a list)r  rZ   r+  rc   Úsplitrf   Úextendr   Únon_speech_tokensr˜   r6   rP   Ú	translater0   r-  Úsot_lmÚ	no_speechr¨   rß   rà   Úset)ry   rZ   r±   s      rK   r'  z!DecodingTask._get_suppress_tokensg  sB  € ØŸ,™,×6Ñ6ˆä�o¤sÔ+Ø/>×/DÑ/DÀSÓ/IÖJ¨!œs 1�vÐJˆOÐJà�Ñ Ø*9ÖD Q¸QÀ!»VšqÐDˆOÐDØ×"Ñ" 4§>¡>×#CÑ#CÕDØÐ$¬¨OÓ(<ÀÒ(AØ ‰Oä˜o¬tÔ4ÐVÐ6VÓVÐ4à×Ñà—‘×)Ñ)Ø—‘×(Ñ(Ø—‘×"Ñ"Ø—‘×'Ñ'Ø—‘×%Ñ%ðô	
ð �>‰>×#Ñ#Ð/à×"Ñ" 4§>¡>×#;Ñ#;Ô<ä”VœC Ó0Ó1Ó2Ð2ùò/ Kùò Es   ºF	Á
FÁ!Fr   c                 óä  — | j                   j                  r|j                  «       }|j                  dd  | j                  j
                  j                  | j                  j
                  j                  fk(  r|}n| j                  j                  |«      }|j                  | j                   j                  rt        j                  nt        j                  k7  rt        d|j                  › �«      S |S )Nr   z'audio_features has an incorrect dtype: )r  r_   Úhalfr)   r   r*   r+   r,   r-   r   r.   Úfloat16Úfloat32Ú	TypeError)ry   r   rk   s      rK   Ú_get_audio_featuresz DecodingTask._get_audio_features„  s½   € Ø�<‰<×ÒØ—(‘(“*ˆCà�9‰9�R�Sˆ>Ø�J‰J�O‰O×'Ñ'Ø�J‰J�O‰O×)Ñ)ð
ò 
ð
 !‰Nà!ŸZ™Z×/Ñ/°Ó4ˆNà×ÑØ!Ÿ\™\×.Ò.ŒE�MŠM´E·M±Mò
ô Ø9¸.×:NÑ:NÐ9OÐPóð ð Ðrh   rk   rm   c                 ó¶  — | j                   j                  g|j                  d   z  }d }| j                   j                  �| j                   j                  dk(  ry| j                  j                  || j                  «      \  }}|D �cg c]  }t        ||j                  ¬«      ‘Œ }}| j                   j                  €||d d …| j                  dz   f<   ||fS c c}w )Nr   Úlang_id)r‹   r   )
r  r#   r)   rQ   r   rL   r   r  rá   r&  )ry   rk   rm   Ú	languagesÚ
lang_probsÚlang_tokensÚprobss          rK   Ú_detect_languagezDecodingTask._detect_languageš  sÇ   € Ø—\‘\×*Ñ*Ð+¨n×.BÑ.BÀ1Ñ.EÑEˆ	Øˆ
à�<‰<× Ñ Ð(¨D¯L©L×,=Ñ,=ÀÒ,JØ&*§j¡j×&@Ñ&@Ø §¡ó'Ñ#ˆK˜ð AKÖK°uœ˜U¨¯	©	Ö2ÐKˆIÐKØ�|‰|×$Ñ$Ð,Ø0;�’q˜$Ÿ.™.¨1Ñ,Ð,Ñ-à˜*Ð$Ð$ùò	 Ls   ÂCc                 ó>  — |j                   d   }t        j                  ||j                  ¬«      }t        j
                  g|z  }	 t        | j                  «      D �]  }| j                  j                  ||«      }|dk(  rr| j                  j                  �\|d d …| j                  f   j                  «       j                  d¬«      }|d d …| j                  j                  f   j                  «       }|d d …df   }| j                   D ]  }	|	j#                  ||«       Œ | j$                  j'                  |||«      \  }}
|
s|j                   d   | j(                  kD  s�Œ n | j                  j+                  «        |||fS # | j                  j+                  «        w xY w)Nr   rÙ   r   r    )r)   r.   Úzerosr2   r8   rr   r=   rS   rÐ   r3   r   r8  r&  re   r;   rÍ   r  r÷   rˆ   rº   r!  r€   )ry   rk   rm   Ún_batchr�   Úno_speech_probsrG   r3   Úprobs_at_sotÚlogit_filterrÊ   s              rK   Ú
_main_loopzDecodingTask._main_loop¨  so  € Ø—,‘,˜q‘/ˆÜ$Ÿ{™{¨7¸>×;PÑ;PÔQˆÜŸ6™6˜( WÑ,ˆð	-Ü˜4Ÿ?™?Ó+ó �ØŸ™×.Ñ.¨v°~ÓF�ð ˜’F˜tŸ~™~×7Ñ7ÐCà#)ª!¨T¯^©^Ð*;Ñ#<×#BÑ#BÓ#D×#LÑ#LÐQSÐ#LÓ#T�LØ&2²1°d·n±n×6NÑ6NÐ3NÑ&O×&VÑ&VÓ&X�Oð  ¢ 2 ™�ð %)×$6Ñ$6ò 7�LØ ×&Ñ& v¨vÕ6ð7ð %)§L¡L×$7Ñ$7¸ÀÈÓ$UÑ!�˜	á §¡¨RÑ 0°4·:±:Ô =Ùð)ð, �N‰N×*Ñ*Ô,à�| _Ð4Ð4øð �N‰N×*Ñ*Õ,ús   ÁDF  ÅF  Æ Fc                 óV  — | j                   j                  «        | j                  }|j                  d   }| j	                  |«      }t        j                  | j                  g«      j                  |d«      }| j                  ||«      \  }}| j                  j                  dk(  r/t        |||«      D ��	�
cg c]  \  }}	}
t        ||	|
¬«      ‘Œ c}
}	}S |j                  | j                  d¬«      j!                  |j"                  «      }| j%                  ||«      \  }}}|d d | j                  …   }|d d | j                  …   }|j                  d   t'        |«      cxk(  r|k(  sJ ‚ J ‚|j)                  || j                  d«      }|j)                  || j                  «      }| j                   j+                  ||«      \  }}|D ��cg c]=  }|D �cg c]/  }|| j,                  ||j.                  k(  j1                  «       d    ‘Œ1 c}‘Œ? }}}| j2                  j5                  ||«      }t        ||«      D ��cg c]  \  }}||   j7                  «       ‘Œ }}}|D �cg c]!  }|j9                  |«      j;                  «       ‘Œ# }}t        ||«      D ��cg c]
  \  }}||   ‘Œ }}}t        ||«      D ��cg c]  \  }}|t'        |«      dz   z  ‘Œ }}}||||||f}t'        t=        t?        t&        |«      «      «      dk7  r%tA        dtC        t?        t&        |«      «      › �«      ‚t        |Ž D ��	����cg c]9  \  }}	}}}}t        ||	||||| j                  jD                  tG        |«      ¬	«      ‘Œ; c}}}}}	}S c c}
}	}w c c}w c c}}w c c}}w c c}w c c}}w c c}}w c c}}}}}	}w )
Nr   r   rA  )rk   r#   rJ   r    r   )r   r   zinconsistent result lengths: )rk   r#   rm   ro   rp   rq   rR   r   )$rˆ   r¸   r   r)   r?  r.   r/   r$  ÚrepeatrF  r  rQ   r>   rj   Úrepeat_interleaver  r1   r2   rM  r˜   Úreshaper¼   rú   r¿   Únonzeror  r    rÍ   Údecoder,  r9  ÚmapÚRuntimeErrorr6   rR   r   )ry   r   r   rB   rk   rm   rB  rJ   Úfeaturesr#   rE  r�   rJ  r°   r±   ÚselectedrG   ÚtextsÚlpÚavg_logprobsÚfieldsro   rp   rq   s                           rK   ÚrunzDecodingTask.runÈ  s™  € à�‰×ÑÔØ#Ÿ~™~ˆ	Ø—y‘y ‘|ˆà!%×!9Ñ!9¸#Ó!>ˆÜŸ™ t×':Ñ':Ð&;Ó<×CÑCÀGÈQÓOˆð %)×$9Ñ$9¸.È&Ó$QÑ!ˆ	�>Ø�<‰<×Ñ 	Ò)ô
 25Ø" I¨~ó2÷	ð ñ .�H˜h¨ô Ø#+°hÈuöôð ð ×)Ñ)¨$¯,©,¸AÐ)Ó>×AÑAÀ.×BWÑBWÓXˆð 15·±ÀÐPVÓ0WÑ-ˆ�˜oð (©¨4¯<©<¨Ñ8ˆØ)©/¨T¯\©\¨/Ñ:ˆØ×#Ñ# AÑ&¬#¨oÓ*>ÔIÀ'ÒIÐIÑIÐIÐIà—‘ ¨¯©°rÓ:ˆØ#×+Ñ+¨G°T·\±\ÓBˆð  $Ÿ|™|×4Ñ4°V¸\ÓJÑˆ�ð ÷&
àð STÖTÈQˆQˆt× Ñ  A¨¯©Ñ$6×#?Ñ#?Ó#AÀ$Ñ#GÒHÔTð&
ˆñ &
ð ×'Ñ'×,Ñ,¨V°\ÓBˆÜ=@ÀÈ6Ó=R×"S±T°Q¸ 1 Q¡4§;¡;¥=Ð"SˆÑ"SØAGÖH¸A˜I×,Ñ,¨QÓ/×5Ñ5Õ7ÐHˆÐHä8;¸HÀlÓ8S×$T©u¨q°" R¨£UÐ$TˆÑ$Tä+.¨v°|Ó+D÷%
Ù"' ! RˆB”#�a“&˜1‘*Óð%
ˆñ %
ð
 ØØØØØð
ˆô Œs”3”s˜FÓ#Ó$Ó%¨Ò*ÜÐ!>¼tÄCÌÈVÓDTÓ?UÐ>VÐWÓXÐXô RUØðR÷
ó 
ñ N��h ¨°+¸~ô Ø'Ø!ØØØ'Ø-Ø ŸL™L×4Ñ4Ü"3°DÓ"9ö	÷
ð 	
ùôgùò4 Uùó&
ùó #TùÚHùã$Tùó%
ù÷
s<   Â6M8Ç	NÇ4M?ÈNÈ7N
É&NÊNÊ3NÌ2>N!Í?NN)r`   ra   rb   rt   rd   rœ   r¶   r	   rô   rO   r‘   r  r   rf   r#  r'  r   r?  rF  rM  r.   Úno_gradrj   r\  rg   rh   rK   r  r  ü  sÌ   … ØÓØ#Ó#ØÓØ˜Ñ$Ó$ð8˜ið 8°/ó 8ðt ð ¸?ó ð U¨3¡Zó ð83 e¨C¡jó 3ð: vó ð,%¨vð %¸vó %ð5¨ð 5¸ó 5ð@ €U‡]�]ƒ_ðL
�vð L
 $ ~Ñ"6ò L
ó ñL
rh   r  r  c                 óª   — |j                   dk(  x}r|j                  d«      }|rt        |fi |¤Ž}t        | |«      j	                  |«      }|r|d   S |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   )r'   r(   r   r  r\  )r   r   r  ÚkwargsrA   r«   s         rK   rS  rS    s_   € ð4 —‘˜Q‘Ð€vÐØ�m‰m˜AÓˆáÜ˜'Ñ, VÑ,ˆä˜% Ó)×-Ñ-¨cÓ2€Fáˆ6�!‰9Ð* FÐ*rh   r…   )2Údataclassesr   r   r   Útypingr   r   r   r	   r
   r   r   r   Únumpyr8   r.   Útorch.nn.functionalÚnnÚ
functionalrÃ   r   Útorch.distributionsr   Úaudior   r   r   r   Úutilsr   r   r   r]  ÚdictrL   rO   rj   rt   r‚   rœ   r¢   r¶   r¾   rÏ   rô   rù   r   r  r  rS  rg   rh   rK   ú<module>rj     s°  ðß 1Ñ 1ß X× XÓ Xã Û ß Ð Ý Ý +å ß /Ý $áÝð €‡�ƒà:>ñ:+Øð:+Ø!ð:+Ø.7ð:+à
ˆ6�4˜‘:ÐÑò:+ó ð:+ñz �$Ô÷!ð !ó ð!ñH �$Ô÷	&ð 	&ó ð	&÷ñ ô W�yô  W÷F"ñ "ôP˜nô P÷45"ñ 5"ôp-�Lô -ô:g$˜ô g$÷T"ñ "ô S�Kô Sô2�[ô 2ô@F˜+ô @F÷FY
ñ Y
ðx €‡�ƒñ  /Ó0ñ!+Øð!+à	ð!+ð ð!+ð
 ˆ>˜4 Ñ/Ð/Ñ0ò!+ó ñ!+rh   