o
    }oi7<                     @   sn   d dl Z d dl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 G dd	 d	ZdS )
    N)	OmegaConf)modules)
Hypothesis)numba_utils)__NUMBA_MINIMUM_VERSION__)config_utilsloggingc                   @   s  e Zd Zejjdd Zejjdd Zejddd Z	ejjdd	 Z
ejjejdd
d Zejjejddd Zejjdd Zejjdd Zejjdd Zejjdd Zejjdd Zejjdd Zejjdd Zejjdd ZdS )TestASRModulesBasicTestsc                 C   @   t tjtjj}|\}}}|sJ |d u sJ |d u sJ d S N)r    assert_dataclass_signature_matchr   !AudioToMelSpectrogramPreprocessoraudio_preprocessing'AudioToMelSpectrogramPreprocessorConfigselfresultsignatures_match
cls_subsetdataclass_subset r   Z/home/ubuntu/.local/lib/python3.10/site-packages/tests/collections/asr/test_asr_modules.py-test_AudioToMelSpectrogramPreprocessor_config      
zFTestASRModulesBasicTests.test_AudioToMelSpectrogramPreprocessor_configc              	   C   s>  t jdddd}tdD ]}|ddd\}}t I g g }}t|dD ] }||||d  |||d  d	\}}	|| ||	 q(t|d}t|d}|||d	\}
}W d    n1 sgw   Y  |j	|
j	kstJ |j	|j	ks|J t
t||
 }|d
ksJ tt||
 }|d
ksJ qd S )Nper_featurer   )	normalizeditherpad_to
               input_signallengthgMbP?)r   r   rangeinput_exampletorchno_gradsizeappendcatshapemeanabsmax)r   	instance1_r$   r%   res_instancelength_instanceires_ins
length_ins	res_batchlength_batchdiffr   r   r   ,test_AudioToMelSpectrogramPreprocessor_batch(   s(   

(
zETestASRModulesBasicTests.test_AudioToMelSpectrogramPreprocessor_batchGPUc                 C   sf   t  d}| \}}t  |||d\}}W d    n1 s$w   Y  |j|jks1J d S )Ncudar#   )r   r   tor'   r(   r)   device)r   	instance0r$   r%   processed_signalr2   r   r   r   *test_AudioToMelSpectrogramPreprocessor_gpuF   s   
zCTestASRModulesBasicTests.test_AudioToMelSpectrogramPreprocessor_gpuc                 C   sv   t jdddddd}t|t jsJ t jdd}|ddd	\}}|||d
}||d |d}|j|d jks9J d S )Nr      F
freq_masks
time_masks
rect_masksuse_numba_spec_augmentuse_vectorized_spec_augmentr   r   r   r    r!   r#   
input_specr%   r   SpectrogramAugmentation
isinstancer   r'   r-   r   r1   r@   r$   r%   res0resr   r   r   $test_SpectrogramAugmentationr_legacyP   s   
z=TestASRModulesBasicTests.test_SpectrogramAugmentationr_legacyc                 C   sv   t jdddddd}t|t jsJ t jdd}|dd	d
\}}|||d}||d |d}|j|d jks9J d S )Nr   rC   FTrD   r   rJ   r   r    r!   r#   rK   rM   rP   r   r   r   (test_SpectrogramAugmentationr_vectorized`   s   
zATestASRModulesBasicTests.test_SpectrogramAugmentationr_vectorizedc           	      C   s   t t dtj_t }ttj |	tj t
jdddddd}t|t
js+J t
jdd}|dd	d
\}}|||d}||d |d}|j|d jksRJ d|jv sYJ dtj_t| d S )NTr   rC   FrD   r   rJ      r    r!   r#   rK   z%Numba SpecAugment kernel is available)r   #skip_numba_cuda_test_if_unsupportedr   r   _logger	propagateget_verbosityset_verbosityDEBUG	set_levelr   rN   rO   r   r'   r-   text)	r   caplogoriginal_verbosityr1   r@   r$   r%   rQ   rR   r   r   r   *test_SpectrogramAugmentationr_numba_kernelq   s"   

zCTestASRModulesBasicTests.test_SpectrogramAugmentationr_numba_kernelc                 C   r
   r   )r   r   r   rN   r   SpectrogramAugmentationConfigr   r   r   r   $test_SpectrogramAugmentationr_config   r   z=TestASRModulesBasicTests.test_SpectrogramAugmentationr_configc           	      C   s   d}t j|d}t|t jsJ t jdd}|ddd\}}|||d}||d |d\}}|jtdd	|gks<J t|t	dgd ksJJ d S )
N   )audio_lengthr   rJ   r   r    r!   r#   @   )
r    CropOrPadSpectrogramAugmentationrO   r   r'   r-   r(   Sizealltensor)	r   rd   r1   r@   r$   r%   rQ   rR   
new_lengthr   r   r   %test_CropOrPadSpectrogramAugmentation   s    z>TestASRModulesBasicTests.test_CropOrPadSpectrogramAugmentationc                 C   r
   r   )r   r   r   rf   r   &CropOrPadSpectrogramAugmentationConfigr   r   r   r   ,test_CropOrPadSpectrogramAugmentation_config   r   zETestASRModulesBasicTests.test_CropOrPadSpectrogramAugmentation_configc                 C   sx   d}t jddddd}t|t jsJ t jdd}|d	d
d\}}|||d}||d |d}|j|d jks:J d S )Nrc      g      ?   r   )
patch_sizemask_patchesrE   
freq_widthr   rJ   r   r    r!   r#   rK   )r   MaskedPatchAugmentationrO   r   r'   r-   )r   rd   r1   r@   r$   r%   rQ   rR   r   r   r   test_MaskedPatchAugmentation   s   z5TestASRModulesBasicTests.test_MaskedPatchAugmentationc                 C   r
   r   )r   r   r   rs   r   MaskedPatchAugmentationConfigr   r   r   r   #test_MaskedPatchAugmentation_config   r   z<TestASRModulesBasicTests.test_MaskedPatchAugmentation_configc                 C   s  t td}dd |D }t|}tdddd|dd	}tj|}|jj	}|d | }d
|| |  }|j
|| ks?J tjdtjd}||}	|	D ]}
|
j|jksXJ |
j|jks`J |
jd t|kskJ qN|}td|gd}i }|||\}}	}|jtdd|gksJ t|	dksJ |	D ]}
|
j|jksJ |
j|jksJ |
jd t|ksJ q|jd d ddd\}}	|jtdd|gksJ t|	dksJ |	D ]}
|
j|jksJ |
j|jksJ |
jd t|ksJ q|jd |	ddd\}}|jtdd|gksJ t|dksJ t|	|D ]\}
}|
|    dks/J qtjddgdtjd}|j||dd d\}}	|jtdd|gksUJ t|	dks^J tjddg|tjd}|j|d dd d\}}	|jtdd|gksJ t|	dksJ d S )Nr   c                 S      g | ]}t |qS r   str.0xr   r   r   
<listcomp>       z=TestASRModulesBasicTests.test_RNNTDecoder.<locals>.<listcomp>z(nemo.collections.asr.modules.RNNTDecoder    r"   )pred_hiddenpred_rnn_layersT)_target_prednet
vocab_sizeblank_as_padrU   r   )dtypeg        )score
y_sequencero   F)ystateadd_sos
batch_sizer   )
fill_valuer   )listr&   lenr   creater   RNNTDecoderfrom_config_dictr   r   num_weightsr(   zerosfloat32initialize_stater   r?   r-   r   score_hypothesisrg   predictzipsquaresumsqrtfulllong)r   vocabr   pred_configr   r   embedrnnx_statesstate_iblankhypcachepredr2   gstates2state_jtokenr   r   r   test_RNNTDecoder   sl   
"z)TestASRModulesBasicTests.test_RNNTDecoderc              
   C   s   t td}dd |D }t|}d}d}d}d}td|||||d	d
d}tj|}t	||d}	t	||d}
||	|
d}|j
t|dd|d gksRJ |	dd}|
dd}|||}||   dkspJ |j|d ksyJ d S )Nr   c                 S   rw   r   rx   rz   r   r   r   r}   *  r~   z;TestASRModulesBasicTests.test_RNNTJoint.<locals>.<listcomp>r   re   r   rn   z&nemo.collections.asr.modules.RNNTJointreluencoder_hiddenr   joint_hidden
activationr   num_classes
vocabularyjointnet0      encoder_outputsdecoder_outputsr"   ro   h㈵>)r   r&   r   r   r   r   	RNNTJointr   r(   r   r-   rg   	transposejointr/   r   num_classes_with_blank)r   r   r   	batchsizer   r   r   	joint_cfgr   encdecoutenc2dec2out2r   r   r   test_RNNTJoint'  s8    z'TestASRModulesBasicTests.test_RNNTJointc              
   C   sJ  t td}dd |D }t|}d}d}d}d}td|||||d	d
d}tj|}t	||d}	t	||d}
||	|
d}|j
t|dd|d gksRJ |	dd}|
dd}|||}||   dkspJ d|_|||}|j|j}}||   dksJ |j
t|dd|gksJ |j|d ksJ d S )Nr   c                 S   rw   r   rx   rz   r   r   r   r}   U  r~   z:TestASRModulesBasicTests.test_HATJoint.<locals>.<listcomp>r   re   r   rn   z%nemo.collections.asr.modules.HATJointr   r   r   r   r   r   r"   ro   r   T)r   r&   r   r   r   r   HATJointr   r(   r   r-   rg   r   r   r/   r   return_hat_ilmhat_logprobsilm_logprobsr   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   
hat_outputout3ilmr   r   r   test_HATJointR  sB    z&TestASRModulesBasicTests.test_HATJointN)__name__
__module____qualname__pytestmarkunitr   r;   run_only_onrB   rS   rT   r`   rb   rk   rm   rt   rv   r   r   r   r   r   r   r   r	      s>    



	








Q
*r	   )r   r(   	omegaconfr   nemo.collections.asrr   +nemo.collections.asr.parts.utils.rnnt_utilsr   nemo.core.utilsr   nemo.core.utils.numba_utilsr   
nemo.utilsr   r   r	   r   r   r   r   <module>   s   