a
    ==ic¸.  ã                   @   sd   d dl mZ d dlmZ d dlZd dlmZ d dl	m
Z
mZ d dl	mZ eƒ ZG dd„ dejƒZdS )é    )ÚgivenN)ÚTransformer)ÚcoreÚ	workspace)Ú	test_utilc                   @   s   e Zd Zdd„ Zdd„ Zd3dd„Zdd	„ Zd
d„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zee dd¡e dd¡e dd¡e ddg¡ejdd d!d"d#d$„ ƒZee dd¡e dd¡e dd¡e ddg¡ejdd d!d"d%d&„ ƒZee dd¡e dd¡e dd¡e ddg¡ejdd d!d"d'd(„ ƒZee dd¡e dd¡e d)d*¡e d)d*¡e d)d*¡e dd¡ejdd d!d+d,d-„ ƒZd.d/„ Zd0d1„ Zd2S )4ÚTestTransformationsc                 C   s*   t  d¡}|jg d¢dgddddd |S )	NÚnet©ÚXÚwÚbÚYé   r   é   ÚNCHW©ZstrideÚpadZkernelÚorder)r   ÚNetÚConv©Úselfr   © r   ús/home/droni/.local/share/virtualenvs/DPS-5Je3_V2c/lib/python3.9/site-packages/caffe2/python/transformations_test.pyÚ_base_test_net!   s    
z"TestTransformations._base_test_netc                 C   s*   t  |¡ t | ¡ jd jd¡s&J ‚d S )Nr   ZNNPACK)ÚtransformerÚ	AddNNPACKÚtuÚstr_compareÚProtoÚopZenginer   r   r   r   Ú_add_nnpack&   s    
zTestTransformations._add_nnpackTc                 C   s~   |   |¡ t |¡ |  t |¡|¡ d}| ¡ jd jD ](}t 	|j
d¡r:t 	|jd¡s^J ‚d}q:|rr|szJ ‚n|rzJ ‚d S )NFr   Z
activationÚReluT)r!   r   ZFuseNNPACKConvReluZassertEqualsr   ÚnumOpsr   r    Úargr   ÚnameÚs)r   r   Zexpected_result_num_opsÚexpected_activation_argZhas_activation_argr$   r   r   r   Ú_fuse_nnpack_convrelu*   s    


z)TestTransformations._fuse_nnpack_convreluc                 C   s&   |   ¡ }| dgdg¡ |  |¡ d S )Nr   ÚY2)r   r"   r!   r   r   r   r   Útest_transformer_AddNNPACK9   s    z.TestTransformations.test_transformer_AddNNPACKc                 C   s(   |   ¡ }| dgdg¡ |  |d¡ d S )Nr   r)   r   ©r   r"   r(   r   r   r   r   Ú#test_transformer_FuseNNPACKConvRelu>   s    z7TestTransformations.test_transformer_FuseNNPACKConvReluc                 C   s<   |   ¡ }| dgdg¡ | dgdg¡ | j|ddd d S )Nr   r)   ZY3r   F)r'   r+   r   r   r   r   Útest_noFuseNNPACKConvReluC   s    z-TestTransformations.test_noFuseNNPACKConvReluc                 C   sT   |   ¡ }| dgdg¡ |  |d¡ | ¡ jd jd | ¡ jd jd ksPJ ‚d S )Nr   r
   r   r   ©r   r"   r(   r   r    ÚoutputÚinputr   r   r   r   Ú,test_transformer_FuseNNPACKConvReluNoInplaceI   s    z@TestTransformations.test_transformer_FuseNNPACKConvReluNoInplacec                 C   sT   |   ¡ }| dgdg¡ |  |d¡ | ¡ jd jd | ¡ jd jd ksPJ ‚d S )Nr   r   r   r.   r   r   r   r   Ú.test_transformer_FuseNNPACKConvReluInplaceReluO   s    zBTestTransformations.test_transformer_FuseNNPACKConvReluInplaceReluc                 C   sœ   |   ¡ }| dgdg¡ |jg d¢dgddddd |  |d	¡ | ¡ jd jd | ¡ jd jd kslJ ‚| ¡ jd jd | ¡ jd jd ks˜J ‚d S )
Nr   r
   r	   r   r   r   r   r   é   ©r   r"   r   r(   r   r    r/   r0   r   r   r   r   Ú1test_transformer_FuseNNPACKConvReluPingPongNamingU   s    ,zETestTransformations.test_transformer_FuseNNPACKConvReluPingPongNamingc                 C   s¬   |   ¡ }| dgdg¡ |jg d¢dgddddd | dgdg¡ |  |d	¡ | ¡ jd jd | ¡ jd jd ks|J ‚| ¡ jd jd | ¡ jd jd ks¨J ‚d S )
Nr   r)   )r)   r   r   r   r   r   r   r   r3   r4   r   r   r   r   Ú<test_transformer_FuseNNPACKConvReluFollowedByMultipleInputOp]   s    ,zPTestTransformations.test_transformer_FuseNNPACKConvReluFollowedByMultipleInputOpc                 C   s¬   |   ¡ }| dgdg¡ |jg d¢dgddddd | dgdg¡ |  |d	¡ | ¡ jd jd | ¡ jd jd ks|J ‚| ¡ jd jd | ¡ jd jd ks¨J ‚d S )
Nr   )r   r   r   r)   r   r   r   r   r   r3   r4   r   r   r   r   ÚCtest_transformer_FuseNNPACKConvReluInplaceFollowedByMultipleInputOpf   s    ,zWTestTransformations.test_transformer_FuseNNPACKConvReluInplaceFollowedByMultipleInputOpé   é
   r   r   iÿÿ  r   ZNHWCgñhãˆµøä>ç{®Gáz„?)Ú	min_valueÚ	max_value)ÚsizeÚinput_channelsÚseedr   Úepsilonc                 C   sR  t  ¡  t d¡}|}|}|}	d}
|jg d¢dgdd|
|d |jg d¢d	gd
||d tj |¡ |dkr’t	 
dd|||	¡ t	 
d|||
|
¡ n$t	 
dd||	|¡ t	 
d||
|
|¡ t	 g d¢|¡ t	j
d|dd t  |¡ t  d	¡ ¡ }t  d	t d¡¡ t |¡ t	 |¡dksJ ‚t  |¡ t  d	¡ ¡ }tj||dddsNJ ‚d S )Nr   r   r	   r   r   r   r   ©r   ÚscaleÚbiasÚmeanÚvarr)   T©Úis_testr   r@   r   r
   r   ©r   rB   rC   rD   rE   ç      à?©Úoffset©r   r   çš™™™™™©?çü©ñÒMbP?©ZrtolZatol©r   ÚResetWorkspacer   r   r   Ú	SpatialBNÚnpÚrandomr?   r   ÚrandBlobFloat32ÚrandBlobsFloat32Ú
RunNetOnceÚ	FetchBlobÚflattenÚFeedBlobÚzerosr   Ú
FuseConvBNr#   Úallclose©r   r=   r>   r?   r   r@   r   ÚcÚhr   ÚkÚpreTransformOutputÚpostTransformOutputr   r   r   Útest_transformer_FuseConvBNo   sF    
û


üz/TestTransformations.test_transformer_FuseConvBNc                 C   sR  t  ¡  t d¡}|}|}|}	d}
|jddgdgdd|
|d |jg d	¢d
gd||d tj |¡ |dkr’t	 
dd|||	¡ t	 
d|||
|
¡ n$t	 
dd||	|¡ t	 
d||
|
|¡ t	 g d¢|¡ t	j
d|dd t  |¡ t  d
¡ ¡ }t  d
t d¡¡ t |¡ t	 |¡dksJ ‚t  |¡ t  d
¡ ¡ }tj||dddsNJ ‚d S )Nr   r   r
   r   r   r   r   r   rA   r)   TrF   r   )rB   rC   rD   rE   rI   rJ   rL   rM   rN   rO   rP   r^   r   r   r   Ú%test_transformer_FuseConvBNNoConvBias£   sF    
û


üz9TestTransformations.test_transformer_FuseConvBNNoConvBiasc                 C   sr  t  ¡  t d¡}|}|}|}	d}
|jddgdgdd|
|d |jg d	¢d
gd||d tj |¡ |dkr’t	 
dd|||	¡ t	 
d|||
|
¡ n$t	 
dd||	|¡ t	 
d||
|
|¡ t	 g d¢|¡ t	j
d|dd t  |¡ t  d
¡ ¡ }t  d
t d¡¡ t |¡ t	 |¡dksJ ‚t  |¡ t  d
¡ ¡ }tdƒ t|ƒ tdƒ t|ƒ tj||dddsnJ ‚d S )Nr   r   r
   r   r   r   r   r   )r   rB   Ú_bias0rD   rE   r)   TrF   r   )rB   rf   rD   rE   rI   rJ   rL   ÚpreÚafterrM   rN   rO   )r   rQ   r   r   r   rR   rS   rT   r?   r   rU   rV   rW   rX   rY   rZ   r[   r   r\   r#   Úprintr]   r^   r   r   r   Ú3test_transformer_FuseConvBNNoConvBiasDuplicatedNameÖ   sN    
û


üzGTestTransformations.test_transformer_FuseConvBNNoConvBiasDuplicatedNamer   é   )r=   r>   ÚktÚkhÚkwr?   r@   c                 C   s$  t  ¡  t d¡}|}	|}
|}|}|jg d¢dg|||gd |jg d¢dgd|d tj |¡ t	 
d	d
|	|
||¡ t	 
d|	|	|||¡ t	 g d¢|	¡ t	j
d|	dd t  |¡ t  d¡ ¡ }t  dt d¡¡ t |¡ t	 |¡d
ksðJ ‚t  |¡ t  d¡ ¡ }tj||ddds J ‚d S )Nr   r	   r   )ZkernelsrA   r)   T)rG   r@   r
   r   r   rH   rE   rI   rJ   rL   r:   g-Cëâ6?rO   rP   )r   r=   r>   rl   rm   rn   r?   r@   r   r_   Útr`   r   rb   rc   r   r   r   Útest_transformer_FuseConv3DBN  sF    
ýü


üz1TestTransformations.test_transformer_FuseConv3DBNc                 C   s:   t  d¡}| dgdg¡ | ¡ j dg¡ t |¡ d S ©Nr   r
   r   Zfake)r   r   r"   r   Zexternal_inputÚextendr   r   r   r   r   r   Ú%test_converterDontEnforceUnusedInputsC  s    
z9TestTransformations.test_converterDontEnforceUnusedInputsc                 C   s:   t  d¡}| dgdg¡ | ¡ j dg¡ t |¡ d S rq   )r   r   r"   r   Zexternal_outputrr   r   r   r   r   r   r   Ú&test_converterDontEnforceUnusedOutputsJ  s    
z:TestTransformations.test_converterDontEnforceUnusedOutputsN)T)Ú__name__Ú
__module__Ú__qualname__r   r!   r(   r*   r,   r-   r1   r2   r5   r6   r7   r   ÚstZintegersZsampled_fromZfloatsrd   re   rj   rp   rs   rt   r   r   r   r   r       s`    ÿ
		


û
-


û
,


û
0





ù	
-r   )Z
hypothesisr   Zhypothesis.strategiesÚ
strategiesrx   ÚnumpyrS   Zcaffe2.python.transformationsr   Zcaffe2.pythonr   r   r   r   r   ZTestCaser   r   r   r   r   Ú<module>   s   