o
    }o™iL9  ã                   @   s<   d dl Z d dlZd dlmZ G dd„ dƒZG dd„ dƒZdS )é    N)Újasperc                   @   s   e Zd Zedd„ ƒZ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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 )"ÚTestJasperBlockc                  K   s0   t dddgddgdgddddd
}| | ¡ |S )	Né   é   é   é   ÚreluTF)
ÚinplanesÚplanesÚkernel_sizeÚrepeatÚstrideÚdilationÚ
activationÚ	conv_maskÚ	separableÚse)ÚdictÚupdate)ÚkwargsÚbase© r   ú[/home/ubuntu/.local/lib/python3.10/site-packages/tests/collections/asr/test_jasper_block.pyÚjasper_base_config   s   ö
z"TestJasperBlock.jasper_base_configc                    s*   da ‡ fdd„}| |¡ t dksJ ‚d S )Nr   c                    s   t | ˆ ƒrtd7 ad S d S )Nr   )Ú
isinstanceÚ_MODULE_EXISTS)Úm©Úclsr   r   Ú	_traverse+   s   
þz6TestJasperBlock.check_module_exists.<locals>._traverse)r   Úapply)ÚselfÚmoduler   r   r   r   r   Úcheck_module_exists'   s   
z#TestJasperBlock.check_module_existsc                 C   óª   | j dd}tj | d¡¡ƒ }tjd	i |¤d|i¤Ž}t ddd¡}t dg¡}||g|fƒ\}}t	|tjƒs:J ‚|d j
t d|d dg¡ksKJ ‚|d dksSJ ‚d S )
NF©Úresidualr   r   r   éƒ   r   r
   r   ©r   r   Újasper_activationsÚgetÚpopÚJasperBlockÚtorchÚrandnÚtensorr   ÚshapeÚSize©r!   ÚconfigÚactÚblockÚxÚxlenÚyÚylenr   r   r   Útest_basic_block3   ó   "z TestJasperBlock.test_basic_blockc                 C   r$   )
NTr%   r   r   r   r'   r   r
   r   r(   r2   r   r   r   Útest_residual_blockB   r;   z#TestJasperBlock.test_residual_blockc                 C   s¾   | j ddd}tj | d¡¡ƒ }tjdi |¤d|i¤Ž}t ddd¡}t dg¡}||g|fƒ\}}t	|tjƒs;J ‚|d j
t d|d	 dg¡ksLJ ‚|d dksTJ ‚t|jƒd
ks]J ‚d S )NFé   )r&   r   r   r   r   r'   r   r
   é
   r   ©r   r   r)   r*   r+   r,   r-   r.   r/   r   r0   r1   ÚlenÚmconvr2   r   r   r   Útest_basic_block_repeatQ   s   "z'TestJasperBlock.test_basic_block_repeatc                 C   sÂ   | j dddgd}tj | d¡¡ƒ }tjdi |¤d|i¤Ž}t ddd¡}t dg¡}||g|fƒ\}}t	|tjƒs=J ‚|d	 j
t d|d
 dg¡ksNJ ‚|d	 dksVJ ‚t|jƒdks_J ‚d S )NFr=   é   )r&   r   r   r   r   r   r'   r   r
   é   r>   r   r?   r2   r   r   r   Útest_basic_block_repeat_stridea   s   "z.TestJasperBlock.test_basic_block_repeat_stridec                 C   sÄ   | j dddgdd}tj | d¡¡ƒ }tjdi |¤d|i¤Ž}t ddd	¡}t d	g¡}||g|fƒ\}}t	|tjƒs>J ‚|d
 j
t d|d dg¡ksOJ ‚|d
 dksWJ ‚t|jƒdks`J ‚d S )NFr=   rC   T)r&   r   r   Ústride_lastr   r   r   r'   r   r
   éB   r>   r   r?   r2   r   r   r   Ú#test_basic_block_repeat_stride_lastq   s   "z3TestJasperBlock.test_basic_block_repeat_stride_lastc                 C   sÀ   | j dddd}tj | d¡¡ƒ }tjdi |¤d|i¤Ž}t ddd¡}t dg¡}||g|fƒ\}}t	|tjƒs<J ‚|d	 j
t d|d
 dg¡ksMJ ‚|d	 dksUJ ‚t|jƒdks^J ‚d S )NFr=   T)r&   r   r   r   r   r   r'   r   r
   é   r   r?   r2   r   r   r   Ú!test_basic_block_repeat_separable   s   "z1TestJasperBlock.test_basic_block_repeat_separablec                 C   s¶   | j dgdd}tj | d¡¡ƒ }t|ƒ tjdi |¤d|i¤Ž}t ddd¡}t 	dg¡}||g|fƒ\}}t
|tjƒs@J ‚|d jt d|d	 d
g¡ksQJ ‚|d d
ksYJ ‚d S )NrC   F)r   r&   r   r   r   r'   r   r
   rG   r   ©r   r   r)   r*   r+   Úprintr,   r-   r.   r/   r   r0   r1   r2   r   r   r   Útest_basic_block_stride‘   s   "z'TestJasperBlock.test_basic_block_stridec                 C   s¸   | j dgddd}tj | d¡¡ƒ }t|ƒ tjdi |¤d|i¤Ž}t ddd¡}t 	dg¡}||g|fƒ\}}t
|tjƒsAJ ‚|d	 jt d|d
 dg¡ksRJ ‚|d	 dksZJ ‚d S )NrC   TÚ
stride_add)r   r&   Úresidual_moder   r   r   r'   r   r
   rG   r   rK   r2   r   r   r   Útest_residual_block_stride¡   s   "z*TestJasperBlock.test_residual_block_stridec           	      C   sÈ   t j ¡ D ]\}| j|d}t j | d¡¡ƒ }t jdi |¤d|i¤Ž}t ddd¡}t 	dg¡}||g|fƒ\}}|  
||j¡ t|t jƒsHJ ‚|d jt d|d dg¡ksYJ ‚|d dksaJ ‚qd S )	N)r   r   r   r   r'   r   r
   r   )r   r)   Úkeysr   r*   r+   r,   r-   r.   r/   r#   Ú	__class__r   r0   r1   )	r!   r   r3   r4   r5   r6   r7   r8   r9   r   r   r   Útest_residual_block_activations±   s   "óz/TestJasperBlock.test_residual_block_activationsc           
      C   s¼   g d¢}|D ]U}| j |d}tj | d¡¡ƒ }tjd	i |¤d|i¤Ž}t ddd¡}t dg¡}||g|fƒ\}}	t	|tjƒsBJ ‚|d j
t d|d dg¡ksSJ ‚|	d dks[J ‚qd S )
N)ÚbatchÚlayerÚgroup)Únormalizationr   r   r   r'   r   r
   r   r(   )
r!   ÚNORMALIZATIONSrW   r3   r4   r5   r6   r7   r8   r9   r   r   r   Ú"test_residual_block_normalizationsÂ   s   "ôz2TestJasperBlock.test_residual_block_normalizationsc                 C   sº   | j ddd}tj | d¡¡ƒ }tjd
i |¤d|i¤Ž}t ddd¡}t dg¡}||g|fƒ\}}|  	|tj
¡ t|tjƒsBJ ‚|d jt d|d	 dg¡ksSJ ‚|d dks[J ‚d S )NTr   )r   Úse_reduction_ratior   r   r   r'   r   r
   r   )r   r   r)   r*   r+   r,   r-   r.   r/   r#   ÚSqueezeExciter   r0   r1   r2   r   r   r   Útest_residual_block_seÓ   s   "z&TestJasperBlock.test_residual_block_sec           
      C   s  g d¢}|D ]†}t |ƒ | j|d}tj | d¡¡ƒ }tjd
i |¤d|i¤Ž}t ddd¡}t 	dg¡}||g|fƒ\}}	|  
|tjj¡ |  
|tj¡ t|tjƒsUJ ‚|d jt d|d dg¡ksfJ ‚|	d dksnJ ‚|jd jd usxJ ‚|jd j|d	 d d | |fksŒJ ‚qd S )N)r   rC   é   r   ©Úfuture_contextr   r   r   r'   r   r
   r   r   )rL   r   r   r)   r*   r+   r,   r-   r.   r/   r#   ÚnnÚConstantPad1dÚMaskedConv1dr   r0   r1   rA   Ú	pad_layerÚ_padding)
r!   Úfuture_contextsr_   r3   r4   r5   r6   r7   r8   r9   r   r   r   Ú2test_residual_block_asymmetric_pad_future_contextsã   s"   "*îzBTestJasperBlock.test_residual_block_asymmetric_pad_future_contextsc           	      C   sø   d}t |ƒ | j|d}tj | d¡¡ƒ }tjdi |¤d|i¤Ž}t ddd¡}t 	dg¡}||g|fƒ\}}|  
|tj¡ t|tjƒsGJ ‚|d jt d|d dg¡ksXJ ‚|d dks`J ‚|jd jd u sjJ ‚|jd j|d	 d d
 kszJ ‚d S )Né   r^   r   r   r   r'   r   r
   r   rC   r   )rL   r   r   r)   r*   r+   r,   r-   r.   r/   r#   rb   r   r0   r1   rA   rc   rd   )	r!   r_   r3   r4   r5   r6   r7   r8   r9   r   r   r   Ú:test_residual_block_asymmetric_pad_future_context_fallbackÿ   s   "$zJTestJasperBlock.test_residual_block_asymmetric_pad_future_context_fallbackc              	   C   s~   d}d}g d¢}g d¢}d}t  ddd¡}|D ]%}|D ] }t |||¡}	t jj|||||	d}
|
|ƒ}|j|jks;J ‚qqd S )Nr   )r=   é   r   )rC   r=   é   rC   é(   )r   r   Úpadding)r-   Úrandr   Úget_same_paddingr`   ÚConv1dr0   )r!   Úinput_channelsÚoutput_channelsÚkernel_sizesÚdilation_sizesr   Úinpr   Údilation_sizerl   ÚconvÚoutr   r   r   Útest_padding_size_conv1d  s    
ÿøÿz(TestJasperBlock.test_padding_size_conv1dN)Ú__name__Ú
__module__Ú__qualname__Ústaticmethodr   r#   ÚpytestÚmarkÚunitr:   r<   rB   rE   rH   rJ   rM   rP   rS   rY   r\   rf   rh   rx   r   r   r   r   r      s@    













r   c                   @   sx   e Zd Ze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 )ÚTestParallelBlockc                  K   s@   t jdi | ¤Ž}tj | d¡¡ƒ }tjdi |¤d|i¤Ž}|S )Nr   r   )r   r   r   r)   r*   r+   r,   )Úconfig_kwargsr3   r4   r5   r   r   r   Úcontrust_jasper_block,  s   z'TestParallelBlock.contrust_jasper_blockc           
      C   sš   g }d}d}t dƒD ]}| | j||d¡ q
tj|dd}t d|d¡}t dg¡}||g|fƒ\}}	|d	 jt 	d|dg¡ksCJ ‚|	d	 dksKJ ‚d S )
Nr   rC   ©r	   r
   Úsum©rO   r   éŒ   r'   r   ©
ÚrangeÚappendr‚   r   ÚParallelBlockr-   r.   r/   r0   r1   ©
r!   ÚblocksÚ	in_planesÚ
out_planesÚ_r5   r6   r7   r8   r9   r   r   r   Ú8test_blocks_with_same_input_output_channels_sum_residual3  s   zJTestParallelBlock.test_blocks_with_same_input_output_channels_sum_residualc                 C   s”   g }d}d}t dƒD ]}| | j||d¡ q
tj|dd}t d|d¡}t d	g¡}t 	t
¡ ||g|fƒ W d   ƒ d S 1 sCw   Y  d S )
Nr   r   rC   rƒ   r„   r…   r   r†   r'   )rˆ   r‰   r‚   r   rŠ   r-   r.   r/   r}   ÚraisesÚRuntimeError)r!   rŒ   r   rŽ   r   r5   r6   r7   r   r   r   Ú=test_blocks_with_different_input_output_channels_sum_residualC  s   "ÿzOTestParallelBlock.test_blocks_with_different_input_output_channels_sum_residualc           
      C   sž   g }d}d}t dƒD ]}| | j||d¡ q
tj|d||d}t d|d¡}t dg¡}||g|fƒ\}}	|d	 jt 	d|dg¡ksEJ ‚|	d	 dksMJ ‚d S )
Nr   rC   rƒ   rv   ©rO   Ú
in_filtersÚout_filtersr   r†   r'   r   r‡   r‹   r   r   r   Ú9test_blocks_with_same_input_output_channels_conv_residualR  ó   zKTestParallelBlock.test_blocks_with_same_input_output_channels_conv_residualc           
      C   sž   g }d}d}t dƒD ]}| | j||d¡ q
tj|d||d}t d|d¡}t d	g¡}||g|fƒ\}}	|d
 jt 	d|dg¡ksEJ ‚|	d
 d	ksMJ ‚d S )Nr   r   rC   rƒ   rv   r”   r   r†   r'   r   r‡   r‹   r   r   r   Ú>test_blocks_with_different_input_output_channels_conv_residualb  r˜   zPTestParallelBlock.test_blocks_with_different_input_output_channels_conv_residualc           	      C   s€   d}d}| j ||dg}t |¡}t d|d¡}t dg¡}||g|fƒ\}}|d jt d|dg¡ks6J ‚|d dks>J ‚d S )Nr   r   rƒ   r   r†   r'   r   )r‚   r   rŠ   r-   r.   r/   r0   r1   )	r!   r   rŽ   rŒ   r5   r6   r7   r8   r9   r   r   r   Útest_single_blockr  s   
z#TestParallelBlock.test_single_blockc           	      C   s€   g }d}d}t dƒD ]}| | j||d¡ q
tj|ddd}t d|d¡}t d	g¡}||g|fƒ\}}tj 	|d
 |¡ d S )Nr   rC   rƒ   Údropoutg      ð?)Úaggregation_modeÚblock_dropout_probr   r†   r'   r   )
rˆ   r‰   r‚   r   rŠ   r-   r.   r/   ÚtestingÚassert_close)	r!   rŒ   r   rŽ   r   r5   r6   r7   r8   r   r   r   Útest_tower_dropout€  s   z$TestParallelBlock.test_tower_dropoutN)ry   rz   r{   r|   r‚   r}   r~   r   r   r“   r—   r™   rš   r    r   r   r   r   r€   +  s    





r€   )r}   r-   Ú%nemo.collections.asr.parts.submodulesr   r   r€   r   r   r   r   Ú<module>   s     