o
    }o™iz  ã                   @   s  d dl Z d dlZd dlmZmZmZmZ d dlZd dlm	Z	 d dl
mZmZmZmZ d dlmZ d dlmZ d dlmZ d dlmZ d d	l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# d dl$m%Z% d dl&m'Z' d dl(m)Z)m*Z* G dd„ deeƒZ+dS )é    N)ÚDictÚListÚOptionalÚUnion)ÚTrainer)Ú
DictConfigÚ
ListConfigÚ	OmegaConfÚ	open_dict)Úaudio_to_text_dataset)Ú_AudioTextDataset)ÚAudioToBPEDALIDataset)ÚLhotseSpeechToTextBpeDataset)ÚRNNTLoss)ÚWER)ÚEncDecRNNTModel)ÚASRBPEMixin)ÚRNNTBPEDecodingÚRNNTBPEDecodingConfig)Úget_semi_sorted_batch_sampler)Ú!get_lhotse_dataloader_from_config)ÚPretrainedModelInfo)ÚloggingÚmodel_utilsc                       s    e Zd ZdZedee fdd„ƒZddede	f‡ fdd	„Z
	dd
eeef dedee fdd„Zddedefdd„Zdee fdd„Zdeddfdd„Z‡  ZS )ÚEncDecRNNTBPEModelzKBase class for encoder decoder RNNT-based models with subword tokenization.Úreturnc                 C   s   g }t dddd}| |¡ t dddd}| |¡ t dd	d
d}| |¡ t dddd}| |¡ t dddd}| |¡ t dddd}| |¡ t dddd}| |¡ t dddd}| |¡ t dddd}| |¡ t dddd}| |¡ t d d!d"d}| |¡ t d#d$d%d}| |¡ t d&d'd(d}| |¡ t d)d*d+d}| |¡ t d,d-d.d}| |¡ t d/d0d1d}| |¡ t d2d3d4d}| |¡ t d5d6d7d}| |¡ t d8d9d:d}| |¡ t d;d<d=d}| |¡ t d>d?d@d}| |¡ t dAdBdCd}| |¡ t dDdEdFd}| |¡ t dGdHdId}| |¡ t dJdKdLd}| |¡ t dMdNdOd}| |¡ t dPdQdRd}| |¡ t dSdTdUd}| |¡ t dVdWdXd}| |¡ t dYdZd[d}| |¡ t d\d]d^d}| |¡ t d_d`dad}| |¡ t dbdcddd}| |¡ |S )ezÁ
        This method returns a list of pre-trained model which can be instantiated directly from NVIDIA's NGC cloud.

        Returns:
            List of available pre-trained models.
        Ústt_en_contextnet_256zrFor details about this model, please visit https://ngc.nvidia.com/catalog/models/nvidia:nemo:stt_en_contextnet_256zvhttps://api.ngc.nvidia.com/v2/models/nvidia/nemo/stt_en_contextnet_256/versions/1.6.0/files/stt_en_contextnet_256.nemo)Úpretrained_model_nameÚdescriptionÚlocationÚstt_en_contextnet_512zrFor details about this model, please visit https://ngc.nvidia.com/catalog/models/nvidia:nemo:stt_en_contextnet_512zvhttps://api.ngc.nvidia.com/v2/models/nvidia/nemo/stt_en_contextnet_512/versions/1.6.0/files/stt_en_contextnet_512.nemoÚstt_en_contextnet_1024zsFor details about this model, please visit https://ngc.nvidia.com/catalog/models/nvidia:nemo:stt_en_contextnet_1024zxhttps://api.ngc.nvidia.com/v2/models/nvidia/nemo/stt_en_contextnet_1024/versions/1.9.0/files/stt_en_contextnet_1024.nemoÚstt_en_contextnet_256_mlszvFor details about this model, please visit https://ngc.nvidia.com/catalog/models/nvidia:nemo:stt_en_contextnet_256_mlsz~https://api.ngc.nvidia.com/v2/models/nvidia/nemo/stt_en_contextnet_256_mls/versions/1.0.0/files/stt_en_contextnet_256_mls.nemoÚstt_en_contextnet_512_mlszvFor details about this model, please visit https://ngc.nvidia.com/catalog/models/nvidia:nemo:stt_en_contextnet_512_mlsz~https://api.ngc.nvidia.com/v2/models/nvidia/nemo/stt_en_contextnet_512_mls/versions/1.0.0/files/stt_en_contextnet_512_mls.nemoÚstt_en_contextnet_1024_mlszwFor details about this model, please visit https://ngc.nvidia.com/catalog/models/nvidia:nemo:stt_en_contextnet_1024_mlsz€https://api.ngc.nvidia.com/v2/models/nvidia/nemo/stt_en_contextnet_1024_mls/versions/1.0.0/files/stt_en_contextnet_1024_mls.nemoÚ!stt_en_conformer_transducer_smallz~For details about this model, please visit https://ngc.nvidia.com/catalog/models/nvidia:nemo:stt_en_conformer_transducer_smallzŽhttps://api.ngc.nvidia.com/v2/models/nvidia/nemo/stt_en_conformer_transducer_small/versions/1.6.0/files/stt_en_conformer_transducer_small.nemoÚ"stt_en_conformer_transducer_mediumzFor details about this model, please visit https://ngc.nvidia.com/catalog/models/nvidia:nemo:stt_en_conformer_transducer_mediumzhttps://api.ngc.nvidia.com/v2/models/nvidia/nemo/stt_en_conformer_transducer_medium/versions/1.6.0/files/stt_en_conformer_transducer_medium.nemoÚ!stt_en_conformer_transducer_largez~For details about this model, please visit https://ngc.nvidia.com/catalog/models/nvidia:nemo:stt_en_conformer_transducer_largezhttps://api.ngc.nvidia.com/v2/models/nvidia/nemo/stt_en_conformer_transducer_large/versions/1.10.0/files/stt_en_conformer_transducer_large.nemoÚ$stt_en_conformer_transducer_large_lszFor details about this model, please visit https://ngc.nvidia.com/catalog/models/nvidia:nemo:stt_en_conformer_transducer_large_lsz”https://api.ngc.nvidia.com/v2/models/nvidia/nemo/stt_en_conformer_transducer_large_ls/versions/1.8.0/files/stt_en_conformer_transducer_large_ls.nemoÚ"stt_en_conformer_transducer_xlargezFor details about this model, please visit https://ngc.nvidia.com/catalog/models/nvidia:nemo:stt_en_conformer_transducer_xlargez‘https://api.ngc.nvidia.com/v2/models/nvidia/nemo/stt_en_conformer_transducer_xlarge/versions/1.10.0/files/stt_en_conformer_transducer_xlarge.nemoÚ#stt_en_conformer_transducer_xxlargez€For details about this model, please visit https://ngc.nvidia.com/catalog/models/nvidia:nemo:stt_en_conformer_transducer_xxlargez’https://api.ngc.nvidia.com/v2/models/nvidia/nemo/stt_en_conformer_transducer_xxlarge/versions/1.8.0/files/stt_en_conformer_transducer_xxlarge.nemoÚstt_de_contextnet_1024zsFor details about this model, please visit https://ngc.nvidia.com/catalog/models/nvidia:nemo:stt_de_contextnet_1024zxhttps://api.ngc.nvidia.com/v2/models/nvidia/nemo/stt_de_contextnet_1024/versions/1.4.0/files/stt_de_contextnet_1024.nemoÚstt_fr_contextnet_1024zsFor details about this model, please visit https://ngc.nvidia.com/catalog/models/nvidia:nemo:stt_fr_contextnet_1024zvhttps://api.ngc.nvidia.com/v2/models/nvidia/nemo/stt_fr_contextnet_1024/versions/1.5/files/stt_fr_contextnet_1024.nemoÚstt_es_contextnet_1024zsFor details about this model, please visit https://ngc.nvidia.com/catalog/models/nvidia:nemo:stt_es_contextnet_1024zxhttps://api.ngc.nvidia.com/v2/models/nvidia/nemo/stt_es_contextnet_1024/versions/1.8.0/files/stt_es_contextnet_1024.nemoÚ!stt_de_conformer_transducer_largez~For details about this model, please visit https://ngc.nvidia.com/catalog/models/nvidia:nemo:stt_de_conformer_transducer_largezŽhttps://api.ngc.nvidia.com/v2/models/nvidia/nemo/stt_de_conformer_transducer_large/versions/1.5.0/files/stt_de_conformer_transducer_large.nemoÚ!stt_fr_conformer_transducer_largez‰For details about this model, please visit https://catalog.ngc.nvidia.com/orgs/nvidia/teams/nemo/models/stt_fr_conformer_transducer_largezŒhttps://api.ngc.nvidia.com/v2/models/nvidia/nemo/stt_fr_conformer_transducer_large/versions/1.5/files/stt_fr_conformer_transducer_large.nemoÚ!stt_es_conformer_transducer_largez~For details about this model, please visit https://ngc.nvidia.com/catalog/models/nvidia:nemo:stt_es_conformer_transducer_largezŽhttps://api.ngc.nvidia.com/v2/models/nvidia/nemo/stt_es_conformer_transducer_large/versions/1.8.0/files/stt_es_conformer_transducer_large.nemoÚ#stt_enes_conformer_transducer_largez€For details about this model, please visit https://ngc.nvidia.com/catalog/models/nvidia:nemo:stt_enes_conformer_transducer_largez’https://api.ngc.nvidia.com/v2/models/nvidia/nemo/stt_enes_conformer_transducer_large/versions/1.0.0/files/stt_enes_conformer_transducer_large.nemoÚstt_enes_contextnet_largezvFor details about this model, please visit https://ngc.nvidia.com/catalog/models/nvidia:nemo:stt_enes_contextnet_largez~https://api.ngc.nvidia.com/v2/models/nvidia/nemo/stt_enes_contextnet_large/versions/1.0.0/files/stt_enes_contextnet_large.nemoÚ!stt_ca_conformer_transducer_largez~For details about this model, please visit https://ngc.nvidia.com/catalog/models/nvidia:nemo:stt_ca_conformer_transducer_largezhttps://api.ngc.nvidia.com/v2/models/nvidia/nemo/stt_ca_conformer_transducer_large/versions/1.11.0/files/stt_ca_conformer_transducer_large.nemoÚ!stt_rw_conformer_transducer_largez~For details about this model, please visit https://ngc.nvidia.com/catalog/models/nvidia:nemo:stt_rw_conformer_transducer_largezhttps://api.ngc.nvidia.com/v2/models/nvidia/nemo/stt_rw_conformer_transducer_large/versions/1.11.0/files/stt_rw_conformer_transducer_large.nemoÚ*stt_enes_conformer_transducer_large_codeswz‡For details about this model, please visit https://ngc.nvidia.com/catalog/models/nvidia:nemo:stt_enes_conformer_transducer_large_codeswz https://api.ngc.nvidia.com/v2/models/nvidia/nemo/stt_enes_conformer_transducer_large_codesw/versions/1.0.0/files/stt_enes_conformer_transducer_large_codesw.nemoÚ"stt_kab_conformer_transducer_largezFor details about this model, please visit https://ngc.nvidia.com/catalog/models/nvidia:nemo:stt_kab_conformer_transducer_largez‘https://api.ngc.nvidia.com/v2/models/nvidia/nemo/stt_kab_conformer_transducer_large/versions/1.12.0/files/stt_kab_conformer_transducer_large.nemoÚ!stt_be_conformer_transducer_largez~For details about this model, please visit https://ngc.nvidia.com/catalog/models/nvidia:nemo:stt_be_conformer_transducer_largezhttps://api.ngc.nvidia.com/v2/models/nvidia/nemo/stt_be_conformer_transducer_large/versions/1.12.0/files/stt_be_conformer_transducer_large.nemoÚ!stt_hr_conformer_transducer_largez~For details about this model, please visit https://ngc.nvidia.com/catalog/models/nvidia:nemo:stt_hr_conformer_transducer_largezhttps://api.ngc.nvidia.com/v2/models/nvidia/nemo/stt_hr_conformer_transducer_large/versions/1.11.0/files/stt_hr_conformer_transducer_large.nemoÚ!stt_it_conformer_transducer_largez~For details about this model, please visit https://ngc.nvidia.com/catalog/models/nvidia:nemo:stt_it_conformer_transducer_largezhttps://api.ngc.nvidia.com/v2/models/nvidia/nemo/stt_it_conformer_transducer_large/versions/1.13.0/files/stt_it_conformer_transducer_large.nemoÚ!stt_ru_conformer_transducer_largez~For details about this model, please visit https://ngc.nvidia.com/catalog/models/nvidia:nemo:stt_ru_conformer_transducer_largezhttps://api.ngc.nvidia.com/v2/models/nvidia/nemo/stt_ru_conformer_transducer_large/versions/1.13.0/files/stt_ru_conformer_transducer_large.nemoÚ!stt_eo_conformer_transducer_largez~For details about this model, please visit https://ngc.nvidia.com/catalog/models/nvidia:nemo:stt_eo_conformer_transducer_largezhttps://api.ngc.nvidia.com/v2/models/nvidia/nemo/stt_eo_conformer_transducer_large/versions/1.14.0/files/stt_eo_conformer_transducer_large.nemoÚ%stt_en_fastconformer_transducer_largez‚For details about this model, please visit https://ngc.nvidia.com/catalog/models/nvidia:nemo:stt_en_fastconformer_transducer_largez–https://api.ngc.nvidia.com/v2/models/nvidia/nemo/stt_en_fastconformer_transducer_large/versions/1.0.0/files/stt_en_fastconformer_transducer_large.nemoÚ(stt_en_fastconformer_transducer_large_lsz…For details about this model, please visit https://ngc.nvidia.com/catalog/models/nvidia:nemo:stt_en_fastconformer_transducer_large_lszœhttps://api.ngc.nvidia.com/v2/models/nvidia/nemo/stt_en_fastconformer_transducer_large_ls/versions/1.0.0/files/stt_en_fastconformer_transducer_large_ls.nemoÚ&stt_en_fastconformer_transducer_xlargezƒFor details about this model, please visit https://ngc.nvidia.com/catalog/models/nvidia:nemo:stt_en_fastconformer_transducer_xlargez™https://api.ngc.nvidia.com/v2/models/nvidia/nemo/stt_en_fastconformer_transducer_xlarge/versions/1.20.1/files/stt_en_fastconformer_transducer_xlarge.nemoÚ'stt_en_fastconformer_transducer_xxlargez„For details about this model, please visit https://ngc.nvidia.com/catalog/models/nvidia:nemo:stt_en_fastconformer_transducer_xxlargez›https://api.ngc.nvidia.com/v2/models/nvidia/nemo/stt_en_fastconformer_transducer_xxlarge/versions/1.20.1/files/stt_en_fastconformer_transducer_xxlarge.nemo)r   Úappend)ÚclsÚresultsÚmodel© rD   ú_/home/ubuntu/.local/lib/python3.10/site-packages/nemo/collections/asr/models/rnnt_bpe_models.pyÚlist_available_models)   s  ý
ý
ý
ý
ý
ý
ý
ý
ý
ý
ý
ý
ý
ý
ý
ý
ý
ý
ý
ý
ý
ý
ý
ý
ý
ý
ý
ý
ý
ý
ý
ý
ý
z(EncDecRNNTBPEModel.list_available_modelsNÚcfgÚtrainerc                    s²  t  |¡}t  |¡}d|vrtdƒ‚t|tƒst |¡}|  |j	¡ | j	j	 
¡ }t|ƒ tt|ƒƒ|_W d   ƒ n1 s>w   Y  t|jƒ t|ƒ|j_W d   ƒ n1 sYw   Y  t|jƒ$ t|ƒ|j_tt|ƒƒ|j_|jj|jj_|jj|jj_W d   ƒ n1 sŠw   Y  tƒ j||d |  | jj¡| j_t| jj| j| j| j	d| _t | jd| j! "dd¡| j! "dd	¡d	d
| _#| jj$r×| j %| j&¡ | j '| j#¡ d S d S )NÚ	tokenizerz:`cfg` must have `tokenizer` config to create a tokenizer !)rG   rH   ©Údecoding_cfgÚdecoderÚjointrI   r   Úuse_cerFÚlog_predictionT©ÚdecodingÚbatch_dim_indexrN   rO   Údist_sync_on_step)(r   Ú#convert_model_config_to_dict_configÚmaybe_update_config_versionÚ
ValueErrorÚ
isinstancer   r	   ÚcreateÚ_setup_tokenizerrI   Ú	get_vocabr
   r   ÚlistÚlabelsrL   ÚlenÚ
vocab_sizerM   Únum_classesÚ
vocabularyÚmodel_defaultsÚ
enc_hiddenÚjointnetÚencoder_hiddenÚpred_hiddenÚsuperÚ__init__Ú#set_decoding_type_according_to_lossrG   rQ   r   r   Ú_cfgÚgetÚwerÚfuse_loss_werÚset_lossÚlossÚset_wer)ÚselfrG   rH   r`   ©Ú	__class__rD   rE   rg     sN   




ÿÿüüû	þzEncDecRNNTBPEModel.__init__Únew_tokenizer_dirÚnew_tokenizer_typerK   c                 C   s   t |tƒr|dkr|}n	td|› ƒ‚d}|dur|}ntj |¡s)td|› ƒ‚| ¡ dvr3tdƒ‚t 	||dœ¡}|  
|¡ | jj ¡ }| j ¡ }t |¡}| jdkr\t|ƒ|d< n
tt| ¡ ƒƒ|d< t|ƒ|d	< | `t |¡| _| j ¡ }	t |	¡}
t|ƒ|
_| `t |
¡| _| `t| jjd
 d| _|du rŸ| jj}t t ¡}t 	t !|¡¡}t "||¡}|  #|¡}t$|| j| j| jd| _t%| j| j&j'| j&j(| j&j)dd| _&| jj*sä| jj+durò| jj+dkrò| j ,| j¡ | j -| j&¡ t.| jjƒ || j_W d  ƒ n	1 sw   Y  t.| jjƒ |
| j_W d  ƒ n	1 s#w   Y  t.| jjƒ || j_W d  ƒ n	1 s>w   Y  t/ 0d| jj1› d¡ dS )aš  
        Changes vocabulary used during RNNT decoding process. Use this method when fine-tuning
        on from pre-trained model. This method changes only decoder and leaves encoder and pre-processing
        modules unchanged. For example, you would use it if you want to use pretrained encoder when fine-tuning
        on data in another language, or when you'd need model to learn capitalization, punctuation
        and/or special characters.

        Args:
            new_tokenizer_dir: Directory path to tokenizer or a config for a new tokenizer
                (if the tokenizer type is `agg`)
            new_tokenizer_type: Type of tokenizer. Can be either `agg`, `bpe` or `wpe`.
            decoding_cfg: A config for the decoder, which is optional. If the decoding type
                needs to be changed (from say Greedy to Beam decoding etc), the config can be passed here.

        Returns: None

        ÚaggzxNew tokenizer dir should be a string unless the tokenizer is `agg`, but this tokenizer                         type is: NzDNew tokenizer dir must be non-empty path to a directory. But I got: )ÚbpeÚwpez0New tokenizer type must be either `bpe` or `wpe`)ÚdirÚtyper`   r_   é   )r_   rJ   TrP   r   zChanged decoder to output to z vocabulary.)2rW   r   rV   ÚosÚpathÚisdirÚNotADirectoryErrorÚlowerr	   rX   rY   rI   rZ   rM   Úto_config_dictÚcopyÚdeepcopyÚtokenizer_typer   r[   Úkeysr]   r   Úfrom_config_dictrL   r^   rn   r   Únum_classes_with_blankrG   rQ   Ú
structuredr   Úto_containerÚmergerh   r   r   rk   rR   rN   rO   rl   Újoint_fused_batch_sizerm   ro   r
   r   Úinfor`   )rp   rs   rt   rK   Únew_tokenizer_cfgÚtokenizer_cfgr`   Újoint_configÚnew_joint_configÚdecoder_configÚnew_decoder_configÚdecoding_clsrD   rD   rE   Úchange_vocabularyT  sˆ   
ÿÿÿ








üû	
ÿ
ÿ
ÿz$EncDecRNNTBPEModel.change_vocabularyTÚverbosec                 C   s*  |du rt  d¡ | jj}t t¡}t t |¡¡}t 	||¡}|  
|¡}t|| j| j| jd| _t| j| jj| jj| jjdd| _| jjsR| jjdur`| jjdkr`| j | j¡ | j | j¡ | dd¡| j_t| jjƒ || j_W d  ƒ n1 s}w   Y  |r“t  d	t | jj¡› ¡ dS dS )
a[  
        Changes decoding strategy used during RNNT decoding process.

        Args:
            decoding_cfg: A config for the decoder, which is optional. If the decoding type
                needs to be changed (from say Greedy to Beam decoding etc), the config can be passed here.
            verbose: A flag to enable/disable logging.
        NzONo `decoding_cfg` passed when changing decoding strategy, using internal configrJ   TrP   r   Útemperatureg      ð?zChanged decoding strategy to 
)r   r‹   rG   rQ   r	   r‡   r   rX   rˆ   r‰   rh   r   rL   rM   rI   r   rk   rR   rN   rO   rl   rŠ   rm   rn   ro   rj   r•   r
   Úto_yaml)rp   rK   r”   r’   rD   rD   rE   Úchange_decoding_strategyÉ  s>   	


üû	
ÿÿz+EncDecRNNTBPEModel.change_decoding_strategyÚconfigc                 C   sˆ  |  d¡r0t||  dd¡s| jn|  d¡|  dd¡s| jn|  d¡t| j|  dd¡d| jdS tj|| j| j| j| j| j	  dd ¡d	}|d u rJd S t
|tƒrQ|S |d
 }t
|tjjjƒr_d}t|dƒrh|j}nt|jd dƒrw|jd j}n	|jd jd j}d }|  dd¡r¦t
|tƒs–tdt|ƒ› ƒ‚t| ||ƒ}d |d< d|d< d}tjjj||d |d ||  dd¡||  dd¡|  dd¡d	S )NÚ
use_lhotseÚdo_transcribeFÚglobal_rankÚ
world_size)rI   Úreturn_cuts)r›   rœ   ÚdatasetrI   Úpreprocessor)r˜   Ú
local_rankr›   rœ   rI   Úpreprocessor_cfgÚshuffleÚ
collate_fnr   Úuse_semi_sorted_batchingzmSemi Sorted Batch sampler can be used with AudioToCharDataset or AudioToBPEDataset but found dataset of type Ú
batch_sizeÚ	drop_lastÚnum_workersÚ
pin_memory)	rž   r¥   ÚsamplerÚbatch_samplerr£   r¦   r¢   r§   r¨   )rj   r   r›   rœ   r   rI   r   Ú)get_audio_to_text_bpe_dataset_from_configr    rG   rW   r   ÚtorchÚutilsÚdataÚIterableDatasetÚhasattrr£   Údatasetsr   ÚRuntimeErrorry   r   Ú
DataLoader)rp   r˜   rž   r¢   r£   rª   rD   rD   rE   Ú_setup_dataloader_from_configü  sl   

þõú	


ÿÿ


÷z0EncDecRNNTBPEModel._setup_dataloader_from_configztorch.utils.data.DataLoaderc                 C   s²   d|v r|d }|d }nt j |d d¡}t|d t|d ƒƒ}|| jj|d| dt|t  ¡ d ƒ¡d	| d
d¡| j	j
 dd¡dœ}| d¡rO| d¡|d< | jt|ƒd}|S )aØ  
        Setup function for a temporary data loader which wraps the provided audio file.

        Args:
            config: A python dictionary which contains the following keys:
            paths2audio_files: (a list) of paths to audio files. The files should be relatively short fragments.                 Recommended length per file is between 5 and 25 seconds.
            batch_size: (int) batch size to use during inference.                 Bigger will result in better throughput performance but would use more memory.
            temp_dir: (str) A temporary directory where the audio manifest is temporarily
                stored.

        Returns:
            A pytorch DataLoader for the given audio file(s).
        Úmanifest_filepathr¥   Útemp_dirzmanifest.jsonÚpaths2audio_filesFr§   rz   TÚchannel_selectorNÚuse_start_end_token)rµ   Úsample_rater¥   r¢   r§   r¨   r¸   r¹   Ú	augmentor)r˜   )r{   r|   ÚjoinÚminr]   rŸ   Ú_sample_raterj   Ú	cpu_countrG   Úvalidation_dsr´   r   )rp   r˜   rµ   r¥   Ú	dl_configÚtemporary_datalayerrD   rD   rE   Ú_setup_transcribe_dataloaderB  s$   

ø
z/EncDecRNNTBPEModel._setup_transcribe_dataloader)N)T)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úclassmethodr   r   rF   r   r   rg   r   Ústrr   r“   Úboolr—   r   r´   rÃ   Ú__classcell__rD   rD   rq   rE   r   &   s"     s<ü
þý
üu3Fr   ),r   r{   Útypingr   r   r   r   r¬   Úlightning.pytorchr   Ú	omegaconfr   r   r	   r
   Únemo.collections.asr.datar   Ú'nemo.collections.asr.data.audio_to_textr   Ú,nemo.collections.asr.data.audio_to_text_dalir   Ú.nemo.collections.asr.data.audio_to_text_lhotser   Ú nemo.collections.asr.losses.rnntr   Ú nemo.collections.asr.metrics.werr   Ú'nemo.collections.asr.models.rnnt_modelsr   Ú!nemo.collections.asr.parts.mixinsr   Ú3nemo.collections.asr.parts.submodules.rnnt_decodingr   r   Ú-nemo.collections.asr.parts.utils.asr_batchingr   Ú#nemo.collections.common.data.lhotser   Únemo.core.classes.commonr   Ú
nemo.utilsr   r   r   rD   rD   rD   rE   Ú<module>   s(   