o
    }oi                     @   sj   d dl Z d dlZd dlZd dlmZ d dlZd dlZd dlm	Z	 d dl
mZmZ dd ZG dd dZdS )    N)
DictConfig)ASRModelEncDecCTCModelc                 C   s>   d|vr	t | |S |d}tt | |d d|dd  S )N.r      )getattrsplitgetattr2join)objectattrarr r   ]/home/ubuntu/.local/lib/python3.10/site-packages/tests/collections/asr/test_asr_local_attn.pyr	      s   

"r	   c                   @   st   e Zd Zej ejjdd Zej ejjdd Zejjej	dg dej	ddd	gd
d Z
dS )TestASRLocalAttentionc                 C   s   t d}| }d}tjd|f|jd}tj|g|jd}|jddd t  |j	||d	 W d    n1 s;w   Y  |jd
d t  |j	||d	 W d    d S 1 s]w   Y  d S )Nstt_en_conformer_ctc_smalli tr   )sizedevice)r   rel_pos_local_attn@   r   self_attention_modelatt_context_sizeinput_signalinput_signal_length)   r   )r   )
r   from_pretrainedevaltorchrandnr   tensorchange_attention_modelno_gradforward)self	asr_modelleninput_signal_longlength_longr   r   r   test_forward#   s   


"z"TestASRLocalAttention.test_forwardc           
   	   C   sv  t d}|jddd ddg}t }t .}|}tj||jj	 d}|j
|d tj||jj	 d}t|| W d    n1 sJw   Y  |d urYtj|r[J tj|rcJ tj|skJ |jj|d d	d
d d}|j|jks~J |d urt|dkr|D ]}	t||	t||	ksJ qW d    d S W d    d S W d    d S 1 sw   Y  d S )Nr   r   r   r   zencoder.self_attention_modelzencoder.att_context_sizez.nemo)	save_pathTF)restore_pathmap_locationstrictreturn_configoverride_config_pathr   )r   r   r#   tempfileTemporaryDirectoryospathr
   	__class____name__save_toshutilcopyexistsrestore_fromnum_weightsr(   r	   )
r&   modelattr_for_eq_checkrestore_foldersave_foldersave_folder_pathmodel_save_pathmodel_restore_path
model_copyr   r   r   r   test_change_save_restore7   s>   


	"z.TestASRLocalAttention.test_change_save_restoreglobal_tokens)r   r      global_tokens_spacingr   rH   c              	   C   sR  ddi}g d}dddddd	d	g||d
}dd t ||d}tt|t|t|ddid}G dd dtjjj}tjdd}	tdg}
tjdddd}tdg}t	|d}|
  |j|	|
d}tjddd}|j|tjjj||	|
||gdd  d!tjjj||	|
||gd"d  d!d# |j|tjjj||	|
||gd$d  d!d% d S )&N_target_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.ConformerEncoderr      rH   r      )rJ   feat_inn_layersd_modelr   r   rG   rI   z+nemo.collections.asr.modules.ConvASRDecoder)rJ   ri   num_classes
vocabularynameadamw)preprocessorencoderdecoderoptimc                   @   s(   e Zd ZdZdd Zdd Zdd ZdS )	z6TestASRLocalAttention.test_train.<locals>.DummyDatasetz&Simply returns a single set of values.c                 S   s
   || _ d S Nvalues)r&   rv   r   r   r   __init__   s   
z?TestASRLocalAttention.test_train.<locals>.DummyDataset.__init__c                 S   s   dS )Nr   r   )r&   r   r   r   __len__   s   z>TestASRLocalAttention.test_train.<locals>.DummyDataset.__len__c                 S   s   | j S rt   ru   )r&   idxr   r   r   __getitem__   s   zBTestASRLocalAttention.test_train.<locals>.DummyDataset.__getitem__N)r7   
__module____qualname____doc__rw   rx   rz   r   r   r   r   DummyDataset   s
    r~   )r     )r   r   )r     r      )r   lowhighr   )cfgr   r   cpu)
max_epochsacceleratorc                 S      | d S Nr   r   rc   r   r   r   <lambda>       z2TestASRLocalAttention.test_train.<locals>.<lambda>)
collate_fnc                 S   r   r   r   r   r   r   r   r      r   )train_dataloadersval_dataloadersc                 S   r   r   r   r   r   r   r   r      r   )dataloaders)r(   r   r    utilsdataDatasetr!   r"   randintr   trainr%   plTrainerfit
DataLoadertest)r&   rG   rI   preprocessor_configrm   encoder_configdecoder_configmodel_configr~   r   input_lengthtargettarget_lengthr'   _trainerr   r   r   
test_trainZ   sd   
	

z TestASRLocalAttention.test_trainN)r7   r{   r|   pytestmarkwith_downloadsunitr+   rF   parametrizer   r   r   r   r   r   "   s"    !r   )r4   r9   r2   lightning.pytorchpytorchr   r   r    	omegaconfr   nemo.collections.asr.modelsr   r   r	   r   r   r   r   r   <module>   s   