
    h                         S SK r S SKrS SKrS SKJr  S SKrS SKrS SKJ	r	J
r
Jr  S SKJr  S SKJrJrJrJr  S SKJr  S SKJr  S SKJr  S S	KJr  S S
KJr  \R:                  " \5      r/ SQr  " S S5      r!g)    N)Path)add_cache_indirection_to_mhaadd_output_qk_to_mhafix_past_sequence_length)optimize_model)AutoTokenizerWhisperConfigWhisperForConditionalGenerationWhisperProcessor)WhisperDecoder)WhisperEncoder)WhisperEncoderDecoderInit)WhisperJumpTimes)InferenceSession)zwhisper-tinyzwhisper-tiny.enzwhisper-basezwhisper-base.enzwhisper-smallzwhisper-small.enzwhisper-mediumzwhisper-medium.enzwhisper-largezwhisper-large-v2zwhisper-large-v3zwhisper-large-v3-turboc                      \ rS rSr\  S5S\S\S\S\S\4
S jj5       r\S\S\S	\S
\S\S\S\S\S\SS4S j5       r\   S6S\S\S\S\	R                  S\	R                  S\S\S\S\\\	R                  R                  4   4S jj5       r\S\\-  \-  S\S\S\S\S\S\S\S\4S j5       r\       S7S\S \S!\S"\S#\S$\S\S%\S\S&\S\S
\S\4S' jj5       r\  S8S(\S)\	R                  R                  S\	R                  S*\S+\4
S, jj5       r\S*\S+\4S- j5       r\S.\R4                  S/\R4                  S0\4S1 j5       r\  S8S\S\S2\S\	R                  S*\S+\4S3 jj5       rS4rg)9WhisperHelper)   
output_dirmodel_name_or_pathsuffix
new_folderreturnc                 D   Un[         R                  R                  U5      (       a  [        U5      R                  S   nOUR                  S5      S   nXB-  nU(       a  [         R                  R                  X5      OU n[         R                  R                  XTS-   5      $ )a  Build onnx path

Args:
    output_dir (str): output directory
    model_name_or_path (str): pretrained model name, or path to the model checkpoint
    suffix (str, optional): suffix like "_encoder" or "_decoder_fp16" will be appended to file name. Defaults to None.
    new_folder (bool, optional): create a new directory for the model. Defaults to False.
Returns:
    str: path of onnx model
/z.onnx)ospathisdirr   partssplitjoin)r   r   r   r   
model_name	directorys         p/var/www/fran/franai/venv/lib/python3.13/site-packages/onnxruntime/transformers/models/whisper/whisper_helper.pyget_onnx_pathWhisperHelper.get_onnx_path*   s~    " (
77==+,,0177;J#))#.r2J
<FBGGLL8J	ww||IG';<<    provider!separate_encoder_and_decoder_inituse_decoder_masked_mha	output_qkencoder_pathdecoder_path	cache_dirNc	                    [         R                  " XS9n	U	R                  U5        [        R                  " XS9n
U
R                  U5        [        R                  " XS9nUR                  U5        U(       a  g SSSSSS.0SSS	S
S
S/ SQS.S.0SSSSSS
U	R
                  S.S.0/00n[        R                  " USS9n[        [        R                  R                  US5      S5       nUR                  U5        S S S 5        SU;   a  / OU 0 0/nU	R                  U	R                  SUS.[        R                  R                  U5      U	R                   U	R"                  -  U	R                   SSSSSS.S S!S"S#.U	R"                  U	R$                  U	R"                  S$.	SUS.[        R                  R                  U5      U	R                   U	R&                  -  U	R                   S%S%0S&S'S(S).U	R&                  U	R(                  U	R&                  S$.	U	R*                  U	R,                  S*U	R.                  S+.S,S-S.S/U	R                  S0S0S1S1US/S/S1S/S2.S3.nU(       a  US4   S5   S6   R1                  S7S8S9.5        U(       a  US4   S5   S:   R1                  S;S<05        [        [        R                  R                  US=5      S5       n[        R2                  " UUSS9  S S S 5        g ! , (       d  f       GN= f! , (       d  f       g = f)>Nr.   feature_extractionsequence	operationaudio_decoderAudioDecoder)nametypeSTFTSTFTNormi     (               ,?    +0?    @0B?    @*P?g    @Y?    -b?    `h?    (&p?    xnt?    6y?     ~?g    L#?    F?g    H?g    K?g    ?g    %?g    bT?g    L?g    ?g    ?g    D?g    ?g    +?g    |?g    ?g    G?g    A]?g    ?g    ?g    ?g    ^?g    а?g   4ӱ?g    ܲ?g   ?g    D?g   9"?g    F?g   !r?g    ?g   3ܺ?g   ?g   _?g   ?g   \?g   ?g   @X?g    8
?g   @þ?g   @*v?g   a0?g    ]?g   @?g   qo?g   @r4?g   ?g   !?g    ?g    a?g   @3?g   ?g   ?g   ?g   b?g   k?g    4%?g   y?g   @?g    x?g   ?g   @`?g    ?g   J?g   ?g   R8?g   U?g    )?g    x?g   ?g   8?g   @?g   @Z?g   
?g   ?g   ?g   `Ă?g     ?g   ?g   `}?g   }?g   `E?g   }?g   ?g   C}?g    ?g   ~?g   ?g   S?      ?g   `V@?g   ?g   ?g   0?g   `^A?g   w?g   x?g   ]?g   !A?g   ?g   8?g   ?g    >?g   }?g   `1?g   `?g    8?g   `v?g   c?g   ?g    .?g   xk?g   @է?g   ?g   x?g   Z?g   @?g    ?g   	?g   C?g    |?g   C?g   @f?g   %?g   '\?g   @?g   @?g   @K?g   83?g   g?g   `R?g   w?g    ?g   2?g   #d?g    ?g    ?g   ?g   u"?g   @OP?g    r}?g    ۩?g   ?g   t ?g   *?g   T?g   |?g   y?g   @?   ?g   @$?g   ;?   w_?    ^?    j?g   ?g   @?g   @Z?g   #?g    A?g   @R^?g    ,z?g   ?g   ?g    6?g   `]?g   @?    ?g   *#?g    7?g   J?g    ]]?   n?g    Q?   ӎ?g    [?   ?g   r?    ?   @?    #?g   ?g   C?   `?   _?   ?    t?   ?   ~?   rX   rW   rV   rU   rT   rS   g   C?g   ?rR   rQ   rP   g   r?rO   g   Z?rN   g    Q?rM   g   \]?g   J?g    7?g   @*#?rL   g    ?g   @]?g   5?g   `?g   ?g   +z?g    R^?g    A?g   @#?g    Z?g    ?g   @?rK   rJ   rI   g   ;?g    $?rH   g    ?g   y?g   |?g   T?g   `*?g   `t ?g   @?g   ک?g   q}?g    OP?g   @u"?g   ?g   ?g   ?g   #d?g   @2?g   @ ?g   w?g    R?g   @g?g   83?g    K?g    ?g   ྒ?g   @'\?g   `%?g   e?g    C?g   |?g   @C?g   `	?g   ?g   ?g   Z?g   `x?g   @?g   ԧ?g    xk?g   .?g   ?g   @c?g    v?g   8?g   ?g   0?g   `}?g   >?g    ?g   @8?g    ?g   @!A?g    ]?g   @x?g   @w?g   ]A?g    0?g   @?g    ?g   @V@?rG   g   `S?g   ?g   ~?g   ?g   @C}?g   ?g   `}?g    E?g   }?g    }?g   `?g    ?g    Ă?g   @?g   `?g   @
?g   Y?g    ?g   8?g    ?g   w?g   )?g   @U?g   R8?g   @?g   @J?g   ?g   `?g   @?g   x?g   ?g    y?g   3%?g   k?g   @a?g   ?g   ?g   ?g   @3?g    a?g    ?g    ?g   @?g    q4?g   po?g    ?g    \?g   @`0?g   @)v?g   @¾?g    7
?g    X?g   @?g   Z?g   ?g   _?g   ?g   1ܺ?g    ?g   r?g    F?g   7"?g    B?g    ?g    ܲ?g   2ӱ?g    а?g    Z?g    ?g    ?g    ?g    >]?g    C?g    ?g    |?g    (?g    ?g    D?g    ?g    ?g    F?g    ^T?g    %?g    ?g    K?g    D?rF   g    H#?rE   rD   rC   rB   rA   r@   g    @Y?r?   r>   r=   r<   )n_fftframe_length
hop_length_comment)r6   r7   attrslog_mel_spectrogramLogMelSpectrum   )
chunk_sizer\   rZ   n_mel   )indentzaudio_processor_config.jsonwcpuzonnxruntime-genai)log_idprovider_options	input_idszpast_key_self_%dzpast_value_self_%dzpast_key_cross_%dzpast_value_cross_%d)rj   past_key_namespast_value_namescross_past_key_namescross_past_value_nameslogitszpresent_key_self_%dzpresent_value_self_%d)ro   present_key_namespresent_value_names)	session_optionsfilename	head_sizehidden_sizeinputsoutputsnum_attention_headsnum_hidden_layersnum_key_value_headsaudio_featuresencoder_hidden_stateszpresent_key_cross_%dzpresent_value_cross_%d)r|   cross_present_key_namescross_present_value_nameswhisper)bos_token_idcontext_lengthdecoderencodereos_token_idpad_token_idr7   
vocab_sizer;   FT      ?r   rY   )diversity_penalty	do_sampleearly_stoppinglength_penalty
max_length
min_lengthno_repeat_ngram_size	num_beamsnum_return_sequencespast_present_share_bufferrepetition_penaltytemperaturetop_ktop_p)modelsearchr   r   rv   past_sequence_lengthcache_indirection)r   r   rw   output_cross_qk_nameszoutput_cross_qk_%dzgenai_config.json)r	   from_pretrainedsave_pretrainedr   r   num_mel_binsjsondumpsopenr   r   r!   writer   r   basenamed_modeldecoder_attention_headsdecoder_layersencoder_attention_headsencoder_layersr   r   r   updatedump)r   r(   r)   r*   r+   r,   r-   r   r.   config	tokenizer	processoraudio_processor_cfgaudio_processor_jsonfri   genai_configs                    r$   save_processingWhisperHelper.save_processingF   s^    ../AWz*!112DZ	!!*-$445G]	!!*- - ! ?N"ST#$*$.),03.1Q-"	V&Z&\| $$9$446cTWbhbubu%v&fh#j
V  $zz*=aH"'',,z+HI3OSTGG() P "'(!22XJ9L8M !' 3 3"("3"3 #6,<( !# 0 0 >!'63Q3Q!Q#)>>%0*<,@0C2G #+-B/F 
 ,2+I+I)/)>)>+1+I+I-4 #6,<( !# 0 0 >!'63Q3Q!Q#)>>/1AB1H3I5M 
 ,2+I+I)/)>)>+1+I+I!$ !' 3 3 & 3 3!$//a1f &)""&"%$//()()-C&)"gC
V "!),X6==,B)< !),Y7>>+-A "'',,z+>?EIIlAa0 FE} PO| FEs   'K;K-
K*-
K;
model_impldevicedtypemerge_encoder_and_decoder_initno_beam_search_opc                    US:X  a  [         R                  " XSS9nOSSSKn	[        R                  R                  U 5      (       d  U R                  S5      S   SS n
OU n
U	R                  XUS	S
9nUR                  5       R                  US9  US:X  a  UR                  US9  [        R                  " XS9n[        XX5      R                  5       nSU0nU(       a.  [        XX5      R                  5       nUR                  SU05        O-[        XU5      R                  5       nUR                  XS.5        U(       a-  [        XU5      R                  5       nUR                  SU05        U$ )a  Load model given a pretrained name or path, then build models for ONNX conversion.

Args:
    model_name_or_path (str): pretrained model name or path
    model_impl (str): library to load model from
    cache_dir (str): cache directory
    device (torch.device): device to run the model
    dtype (torch.dtype): dtype to run the model
    merge_encoder_and_decoder_init (bool, optional): Whether merge encoder and decoder initialization into one ONNX model. Defaults to True.
    no_beam_search_op (bool, optional): Whether to use beam search op or not. Defaults to False.
    output_qk (bool, optional): Whether to output QKs to calculate batched jump times for word-level timestamps. Defaults to False.
Returns:
    Dict[str, torch.nn.Module]: mapping from name to modules for ONNX conversion.
hfeagerr.   attn_implementationr   Nr   r      T)download_root	in_memoryr   r   r0   r   r   )r   decoder_init
jump_times)r
   r   r   r   r   existsr    
load_modelevaltor	   r   r   r   r   r   )r   r   r.   r   r   r   r   r+   r   r   name_or_pathr   r   
componentsencoder_decoder_initr   batched_jump_timess                    r$   r   WhisperHelper.load_modelm  sW   4 3CC"WE
 77>>"455177<R@D1&&|9`d&eE 	

v&HH5H!../AW !
NSSU)
)#<VJ#j#o#o#q y*>?@$VJ?DDFG'KL!1&)!L!Q!Q!S|-?@Ar'   r   onnx_model_pathverboseuse_external_data_formatuse_fp16_inputsuse_int32_inputsuse_encoder_hidden_statesuse_kv_cache_inputsc	           
         [        U [        5      (       a  U R                  UUUUU5        g[        U [        5      (       a  U R                  UUUUUU5        g[        U [        5      (       a  U R                  UUUUUUUU5        g[        U [
        5      (       a  U R                  UUUUUU5        g[        S[        U 5       35      e)a  Export model component to ONNX

Args:
    model (class): PyTorch class to export
    onnx_model_path (str): path to save ONNX model
    provider (str): provider to use for verifying parity on ONNX model
    verbose (bool): print verbose information.
    use_external_data_format (bool): use external data format or not.
    use_fp16_inputs (bool): use float16 inputs for the audio_features, encoder_hidden_states, logits, and KV caches.
    use_int32_inputs (bool): use int32 inputs for the decoder_input_ids.
    use_encoder_hidden_states (bool): use encoder_hidden_states as model input for decoder-init/decoder-without-past models.
    use_kv_cache_inputs (bool): use KV caches as model inputs for decoder-with-past models.
z%Unknown instance for model detected: N)
isinstancer   export_onnxr   r   r   
ValueErrorr7   )	r   r   r(   r   r   r   r   r   r   s	            r$   r   WhisperHelper.export_onnx  s    2 e^,,( 899(  ~..( )#	 /00(  DT%[MRSSr'   optimized_model_path
is_float16rx   ru   num_decoder_layersuse_gpu
is_decoderc                 0   SSK Jn  U" S5      nSUl        US:H  Ul        [	        U SUUSUUSS9nU	(       aP  U
(       aI  U(       a  [        U5      u  nn[        UU5      nU(       a!  [        U[        [        SSU-  S5      5      S	9nUR                  XSS
9  g)zHOptimize ONNX model with an option to convert it to use mixed precision.r   )FusionOptionsbartTrocmF)
model_type	num_headsru   	opt_leveloptimization_optionsr   only_onnxruntime   )skip_node_idxs)all_tensors_to_one_fileN)fusion_optionsr   use_multi_head_attention!disable_multi_head_attention_biasr   r   r   r   listrangesave_model_to_file)r   r   r   rx   ru   r   r   r   r(   r   r   r*   r+   r   r   mpast_seq_len_names                    r$   optimize_onnxWhisperHelper.optimize_onnx  s    $ 	1,V48<5AIVAS>)#!5"	
 +% (@'B$$04EF(4aM_I_ab@c;de	1eijr'   r   pt_model
batch_sizeprompt_modec           
          SSK Jn  SSK Jn  U" S	S
SS9n/ n	US:X  a  U " US   S   S   /SS9R                  n
OeU " US   S   S   /SS9R                  U " US   S   S   /SS9R                  /n	[        U	5      U:X  d   e[        R                  " U	S   U	S   45      n
Su  ppSu  nnU
R                  U5      UUUUUUSSS.	nU(       a  SS/nU Vs/ s H  nU R                  U5      PM     nn/ n/ n[        U5       H  n[        R                  " UU   5      R                  US9US'   U	U   R                  U5      US'   UR                   " S0 UD6R#                  5       R%                  5       R'                  5       nUR)                  U5        UR)                  U R+                  USS9S   5        M     U
US'   US	 O]/ nUR                   " S0 UD6R#                  5       R%                  5       R'                  5       nU R+                  USS9S   /n[-        U5      nUS	 US	 UUUU4$ ! [         aS  n[        R	                  SU 3SS9  Sn[        R                  SU S35        [        R                  " U5         S nAGNwS nAff = fs  snf )Nr   )load_datasetz.An error occurred while importing `datasets`: T)exc_infozpip install datasetszCCould not import `datasets`. Attempting to install `datasets` via `z`.z)hf-internal-testing/librispeech_asr_dummyclean
validation)r    rY   audioarraypt)return_tensors   )ra   r   rY   rY   )r   r   )	input_featuresr   r   r   r   r   r   r   	use_cachezJohn has doubtszMaria has grave doubtsr   
prompt_idsr  skip_special_tokensr   r   )datasetsr   	Exceptionloggererrorwarningr   systemr  lentorchcatr   get_prompt_idsr   
from_numpygeneratedetachrg   numpyappendbatch_decoder   )r   r   r   r   r   r   einstall_cmddsinput_features_r  r   r   r   r   r   r   rv   promptspr  pt_transcription
pt_outputsi	pt_outputs                            r$    pt_transcription_for_verify_onnx.WhisperHelper.pt_transcription_for_verify_onnx  s   	#- 	*EwVbc?&1gw(?'@QUVeeN 2a5>'23DIXX2a5>'23DIXXO ':555"YY(:OA<N'OPNBM?
	-5**,//7$$"$8,"4"

 (*BCG?FGw!)2215wJG!J :&','7'7
1'F'I'IQW'I'X|$+:1+=+@+@+H'($--77>>@DDFLLN	!!), ''	(>(>y^b(>(cde(fg ' (6F#$|$J!**4V4;;=AACIIKJ ) 6 6zW[ 6 \]^ _`j)J#$;'Z??s  	#LLI!MX\L]0KNN`al`mmopqIIk""		#H Hs   H' J'
J1AI??Jc                 V    U S:  a  U(       a  SnSnSnSnUUUU1nU$ SnSnSn	UUU	1nU$ )	NrY   z{ John has doubts whether Sir Frederick Layton's work is really Greek after all and can discover in it but little of Rocky Izy John has doubts whether Sir Frederick Latins work is really Greek after all and can discover in it but little of Rocky Iz Maria has grave doubts whether Sir Frederick Layton's work is really Greek after all and can discover in it but little of Rockyz Maria has grave doubts whether Sir Frederick Latins work is really Greek after all and can discover in it but little of Rocky IzX Mr. Quilter is the apostle of the middle classes and we are glad to welcome his gospel.zY Mr. Quilter is the apostle of the middle classes, and we are glad to welcome his gospel.zZ "Mr. Quilter is the apostle of the middle classes, and we are glad to welcome his gospel.r  )
r   r   'expected_transcription_no_comma_prompt1)expected_transcription_misspelled_prompt1'expected_transcription_no_comma_prompt2)expected_transcription_misspelled_prompt2expected_transcription_optionsexpected_transcription_no_comma!expected_transcription_with_comma+expected_transcription_with_quote_and_commas
             r$   select_transcription_options*WhisperHelper.select_transcription_optionsc  s    
 >k 7t3 9t5 7y3 9{57799	.** .- k , l . m 8 01;.*
 .-r'   r  ort_outputsr  c                 V   X   X   pCUR                   UR                   peXV:w  ah  [        U5      S:  a  US   nUR                   n[        U5      S:  a  US   nUR                   nUS   US   :w  a  [        US   US   5      nUSU nUSU nUR                   UR                   :X  d   eX44$ )z8Get PyTorch and ONNX Runtime output token ids at index irY   r   N)shaper  min)r  r.  r  r   
ort_outputpt_shape	ort_shapemin_lens           r$   get_outputsWhisperHelper.get_outputs  s     !+{~:'ooz/?/?)  8}q %aL	$??9~!']
&,,	{il*hqk9Q<8%hw/	'1
*"2"2222$$r'   ort_sessionc                 
   [         R                  " XSS9R                  U5      n[        R                  " XS9n[        R                  " XS9n[
        R                  UUUUUS9u  ppUR                  /nUR                  SSS9nU Vs/ s H  oS   PM	     nnX-   nUR                  5        Vs/ s H  nUR                  PM     nnUR                  5        Vs/ s H  nUR                  PM     nn[        R                  [        R                  [        R                  [        R                   [        R"                  [        R$                  S	.nS
U;   n['        UUSS9 GHC  u  nnUS:X  a4  U	U   R)                  5       R+                  5       R-                  5       U	U'   MA  US:X  a'  [        R.                  " UR0                  UU   S9U	U'   Mn  US:X  a(  [        R.                  " XHR0                  4UU   S9U	U'   M  US:X  a  U(       d*  U(       a  U/OU/n[        R2                  " UUU   S9U	U'   M  / n[5        U5       H%  nUR7                  UU   R9                  5       5        M'     [;        S U 5       5      n/ nU H7  n/ UQUR<                  /U[?        U5      -
  -  QnUR7                  UU-   5        M9     [        R2                  " UUU   S9U	U'   GMx  US:X  a  [        R2                  " S/UU   S9U	U'   GM  US:X  a!  [        R2                  " SS//UU   S9U	U'   GM  US
:X  a5  [        R@                  " [        R2                  " U/UU   S9US5      U	U'   GM  US:X  a  [        R2                  " S/UU   S9U	U'   GM$  [        R2                  " U	U   /UU   S9U	U'   GMF     URC                  SU	5      S   SS2SSS24   nURE                  USS9n [
        RG                  XE5      n!Sn"[5        U5       HQ  n[
        RI                  UUU5      u  n#n$U"[        RJ                  " U#U$5      -  n"U"U
U   U!;   =(       a    U U   U!;   -  n"MS     Sn%U"(       dh  [5        U5       HY  n[
        RI                  UUU5      u  n#n$U#U$-
  n&[;        U&RM                  5       U&R;                  5       [N        S9n'[;        U%U'5      n%M[     U%S:w  a0  [P        RS                  SU
 35        [P        RS                  SU  35        gs  snf s  snf s  snf )zRCompare the result from PyTorch and ONNX Runtime to verify the ONNX model is good.r   r   r0   )r   r   english
transcribe)languagetaskrY   )ztensor(float)ztensor(float16)ztensor(int64)ztensor(int32)ztensor(int8)ztensor(uint8)extra_decoding_idsF)strictr  
vocab_maskr   prefix_vocab_maskdecoder_input_idsc              3   8   #    U  H  n[        U5      v   M     g 7f)N)r  ).0r  s     r$   	<genexpr>,WhisperHelper.verify_onnx.<locals>.<genexpr>  s     !>+Q#a&&+s   logits_processorcross_qk_layer_headr   r   r   NTr  )keyzPyTorch outputs: zONNX Runtime outputs: )*r
   r   r   r   r	   r   r!  decoder_start_token_idget_decoder_prompt_ids
get_inputsr6   r7   npfloat32float16int64int32int8uint8zipr  rg   r  onesr   r   r   r  tolistmaxr   r  repeatrunr  r,  r6  allcloser1  absr	  r  )(r   r.   r8  r   r   r   r   r   r   rv   r  r  decoder_prompt_idsstart_idr  tokenforced_decoder_idsentry	ort_names
ort_dtypes	ort_to_npuse_extra_decoding_idsr6   r   raw_input_idsort_promptsr  max_lenpadded_promptsr  padded_promptr.  ort_transcriptionr(  parityr   r2  max_diffdiff
max_diff_is(                                           r$   verify_onnxWhisperHelper.verify_onnx  s    3BB

"V* 	 %445G]	../AWCPCqCq!# Dr D
@* 11255y|5\
,67J5AhJ
7%2-8-C-C-EF-EEUZZ-E	F.9.D.D.FG.FUejj.F
GZZ!zzXXXXGGXX
	 "6!By*UCKD%''%d|22488:@@Bt%!wwv'8'8	%@PQt,,!ww
4E4E'FiX]N^_t,,"2HXJOaNbM#%88M5AQ#RF4L #%K":.#**+=a+@+G+G+IJ /!!>+!>>G%'N(([!([0C0C/DRUVWRXHX/Y([&--m>P.PQ ) $&88N)EBR#SF4L++!xx9U3CDt..!xx!Q	%8HIt--!yy:,iPUFV)WYcefgt&!xxYu5EFt!xxi>NOtG DJ "oodF3A6q!Qw?%22;TX2Y)6)S)ST^)l&z"A$1$=$=j+WX$Y!Iz bkk)Z88F  #'EE K%a(,JJF # :&(5(A(A*k[\(]%	: :- TXXZSA
x4 ' q=NN./?.@ABNN34E3FGHe 8 GGs   S3.S8S=r  ) F)TFF)FFrg   FFFF)rY   F)__name__
__module____qualname____firstlineno__staticmethodstrboolr%   r   r  r   r   dictnnModuler   r   r   r   r   intr   r   r!  r,  rM  ndarrayr6  r   ro  __static_attributes__r  r'   r$   r   r   )   s     	=== = 	=
 
= =6 d1d1d1 ,0d1 !%	d1
 d1 d1 d1 d1 d1 
d1 d1L  04"';;; ; 	;
 {{; )-;  ; ; 
c588??"	#; ;z >T 99NJ>T>T >T 	>T
 #'>T >T >T $(>T ">T >T@  */ "'',.k.k!.k .k !	.k
 .k  .k #'.k .k .k .k  .k !%.k .k .k` 
 !C@#C@((//C@ C@ 	C@
 C@ C@J ... .@ %JJ%ZZ% % %4  !kkk &k 	k
 k k kr'   r   )"r   loggingr   pathlibr   r  rM  r  convert_generationr   r   r   	optimizerr   transformersr   r	   r
   r   whisper_decoderr   whisper_encoderr   whisper_encoder_decoder_initr   whisper_jump_timesr   onnxruntimer   	getLoggerrr  r	  PRETRAINED_WHISPER_MODELSr   r  r'   r$   <module>r     s[      	    k k $ h h * * B / (			8	$  b br'   