o
    }oi,                     @   s   d dl mZ d dlmZ d dlZd dlZd dlmZm	Z	 d dl
mZmZ d dlmZ d dlmZ ddefd	d
ZdefddZdefddZG dd dZdS )    )DictN)
DictConfig
ListConfig)EncDecCTCModelEncDecHybridRNNTCTCModel)CTCDecodingConfig)AccessMixin   returnc                 C   s2   dddddddgdgdgddddd	d

g|  dS )Nz+nemo.collections.asr.modules.ConvASREncoder@   reluT   r	   g        F)
filtersrepeatkernelstridedilationdropoutresidual	separablesese_context_size)_target_feat_in
activation	conv_maskjasper 
num_layersr   r   b/home/ubuntu/.local/lib/python3.10/site-packages/tests/collections/asr/test_asr_interctc_models.pyjasper_encoder_config   s&   r"   c                   C      dddddS )Nz-nemo.collections.asr.modules.ConformerEncoderr      r   r   r   n_layersd_modelr   r   r   r   r!   conformer_encoder_config2   
   r(   c                   C   r#   )N1nemo.collections.asr.modules.SqueezeformerEncoderr   r$   r   r%   r   r   r   r   r!   squeezeformer_encoder_config;   r)   r+   c                   @   s   e Zd Zejjejdeegejde	dde
 e gejdddgdd	gfdgd	gfg g fddgdgfdgdd	gfg d	gfgd
d ZdS )TestInterCTCLossmodel_classencoder_configr$   r   zapply_at_layers,loss_weights   r   g?333333?c                    s  ddi}g d}|t u r%dd t||d}tdt|t|t|d}n]dd	d
dd}dd	ddd}	dddid}
dddid}ddddd t||dttd}tdt|t|td	d	dt|t|t|	t|
t|t|d
}|d dkrd|d < |||d!d"d#id$ G d%d& d&tjjj	}tj
d'd(}tjd)d*d
gd+}tjd
|d, fd,d-d.}t|d, g}tj
g d/d(}td0g}t|t|krtjtd1d2 ||d3}|  |j||d4\}}}W d    d S 1 sw   Y  d S ||d3}|  tjd|jd5 |j||d6^}}| }t| t|t|ks/J |D ]'}|d, j|jksGt|d, |rGJ |t u rW|d, j|jksWJ q1tjd
d7d8}|j|tjjj|||||gd9d: d;tjjj|||||gd<d: d;d= t|d,krd>gng }|d?d@ |D 7 }dA | fdBd@|D 7 }|  dCg fdDd@|D  7 }|D ].}dE|v rdA|v r|d  r||jv sJ q||jvsJ q||jv sJ q|j|tjjj|||||gdFd: d;dG dHd@ |D }dI  fdJd@|D }|  dCg fdKd@|D  7 }|D ])}dE|v rE|d  r;||jv s9J q%||jvsCJ q%||jv sMJ q%d S )LNr   z>nemo.collections.asr.modules.AudioToMelSpectrogramPreprocessor) abcdefghijklmnopqrstuvwxyz'z+nemo.collections.asr.modules.ConvASRDecoder)r   r   num_classes
vocabularyT)compute_eval_losspreprocessorencoderdecoderz(nemo.collections.asr.modules.RNNTDecoderr   r	   )pred_hiddenpred_rnn_layers)r   prednetz&nemo.collections.asr.modules.RNNTJointr   )joint_hiddenr   )r   jointnetgreedy_batchmax_symbols   )strategygreedydefaultfastemit_lambdagMbP?)	loss_namewarprnnt_numba_kwargsr0   F
mean_batch)ctc_loss_weightuse_cerctc_reductionrR   decoding)
enc_hiddenrS   )
rO   labelsrP   model_defaultsrQ   rR   jointre   lossaux_ctcr*   rO   )loss_weightsapply_at_layersnameadamw)interctcoptimc                   @   s(   e Zd ZdZdd Zdd Zdd ZdS )	z3TestInterCTCLoss.test_forward.<locals>.DummyDatasetz&Simply returns a single set of values.c                 S   s
   || _ d S Nvalues)selfrt   r   r   r!   __init__   s   
z<TestInterCTCLoss.test_forward.<locals>.DummyDataset.__init__c                 S   s   dS )Nr	   r   )ru   r   r   r!   __len__   s   z;TestInterCTCLoss.test_forward.<locals>.DummyDataset.__len__c                 S   s   | j S rr   rs   )ru   idxr   r   r!   __getitem__   s   z?TestInterCTCLoss.test_forward.<locals>.DummyDataset.__getitem__N)__name__
__module____qualname____doc__rv   rw   ry   r   r   r   r!   DummyDataset   s
    r~   )r	   i   )size   i  )lowhighr   r      )r   r   r   )r	   r      r$   zELength of interctc.apply_at_layers has to match interctc.loss_weights)match)cfg)input_signalinput_signal_length)access_enabledguid)processed_signalprocessed_signal_lengthcpu)
max_epochsacceleratorc                 S      | d S Nr   r   rI   r   r   r!   <lambda>       z/TestInterCTCLoss.test_forward.<locals>.<lambda>)
collate_fnc                 S   r   r   r   r   r   r   r!   r      r   )train_dataloadersval_dataloaders
final_lossc                 S      g | ]}d | qS inter_ctc_loss_lr   .0rx   r   r   r!   
<listcomp>       z1TestInterCTCLoss.test_forward.<locals>.<listcomp>val_c                       g | ]}  | qS r   r   r   metricprefixr   r!   r          werc                       g | ]	}  d | qS inter_wer_lr   r   r   r   r!   r         rj   c                 S   r   r   r   r   r   r   r!   r     r   )dataloadersc                 S   r   r   r   r   r   r   r!   r     r   test_c                    r   r   r   r   r   r   r!   r     r   c                    r   r   r   r   r   r   r!   r     r   )r   lenr   r   r   updatetorchutilsdataDatasetrandnrandinttensorpytestraises
ValueErrortrainforwardr   set_access_enabled
model_guidget_captured_interctc_tensorsreset_registryshapeallcloseplTrainerfit
DataLoaderlogged_metricstest)ru   r-   r.   rm   rl   preprocessor_configrN   decoder_configmodel_configjoint_configdecoding_configloss_configaux_ctc_configr~   r   input_lengthtargettarget_lengthr   processed_length	asr_modellogprobs_captured_tensorsoutputtrainerrequired_metricsr   r   r   r!   test_forwardE   s   

"


(
"
"

zTestInterCTCLoss.test_forwardN)rz   r{   r|   r   markunitparametrizer   r   r"   r(   r+   r   r   r   r   r!   r,   D   s*    
r,   )r	   )typingr   lightning.pytorchpytorchr   r   r   	omegaconfr   r   nemo.collections.asr.modelsr   r   2nemo.collections.asr.parts.submodules.ctc_decodingr   nemo.core.classes.mixinsr   r"   r(   r+   r,   r   r   r   r!   <module>   s   		