a
    ==icC<  ã                   @   sd   d dl mZmZ d dlmZ d dlm  mZ d dl	m
Z
 d dlmZ d dlZG dd„ dejƒZdS )é    )ÚcoreÚ	test_util)Ú
caffe2_pb2N)Úgivenc                   @   s  e Z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g¡dd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d&d'„ Zd(d)„ Zd*d+„ Zd,d-„ Zd.d/„ Zd0d1„ Zd2d3„ Zd4d5„ Zd6d7„ Zd8d9„ Z d:d;„ Z!d<d=„ Z"d>d?„ Z#d@dA„ Z$dBS )CÚTestBindingsc                 C   sH   t  ¡ }|j}| t  d¡¡ | t  d¡¡ t|j ¡ ƒdksDJ ‚d S )NÚXÚFCé   )ÚngÚNNModuleÚdataFlowÚ
createNodeÚNeuralNetDataÚNeuralNetOperatorÚlenÚgetMutableNodes©ÚselfÚnnÚdfg© r   ún/home/droni/.local/share/virtualenvs/DPS-5Je3_V2c/lib/python3.9/site-packages/caffe2/python/nomnigraph_test.pyÚtest_simple   s
    zTestBindings.test_simplec                 C   sl   t  d¡}| ddgdg¡ t |¡}|j ¡ D ]6}| ¡ rN| ¡ dksfJ ‚q0| 	¡ r0| ¡ dv s0J ‚q0d S ©NÚnamer   ÚWÚYr   )r   r   r   )
r   ÚNetr   r
   r   r   r   Ú
isOperatorÚgetNameÚisTensor©r   Únetr   Únoder   r   r   Útest_core_net_simple   s    

z!TestBindings.test_core_net_simplec                 C   s”   t  d¡}| ddgdg¡ | dgdg¡ t |¡}t|jƒdksHJ ‚|jD ]}| ¡ dksNJ ‚qN|jd  	¡ d	kszJ ‚|jd
  	¡ dksJ ‚d S )Nr   r   r   r   ÚZr	   ÚOperatorr   r   é   ÚRelu)
r   r   r   r(   r
   r   r   ÚcontrolFlowZgetTyper   )r   r"   r   Úinstrr   r   r   Útest_core_net_controlflow!   s    


z&TestBindings.test_core_net_controlflowc           	      C   sÌ   t  d¡}| ddgdg¡ | dgdg¡ t |¡}tƒ }|jD ]}| |j	¡ qB|tg d¢ƒkshJ ‚tƒ }|j
D ]}| |j	¡ qt|tddgƒksšJ ‚tƒ }|jD ]}| |j	¡ q¦|||B ksÈJ ‚d S )	Nr   r   r   r   r%   )r   r   r   r%   r   r(   )r   r   r   r(   r
   r   ÚsetÚtensorsÚaddr   Ú	operatorsÚnodes)	r   r"   r   r-   ÚtÚopsÚopr0   r#   r   r   r   Útest_core_net_nn_accessors,   s     




z'TestBindings.test_core_net_nn_accessorsc                 C   sx   t  d¡}| ddgdg¡ t | ¡ ¡}|j ¡ D ]>}| ¡ rV| 	¡  
¡ dksrJ ‚q4| ¡ r4| ¡  
¡ dv s4J ‚q4d S r   )r   r   r   r
   r   ÚProtor   r   r   ÚgetOperatorr   r    Z	getTensorr!   r   r   r   Útest_netdef_simple>   s    
zTestBindings.test_netdef_simplec                 C   s`   t  ¡ }|j}tjddgdgdd}| |¡ | ¡ D ]$}| ¡ sFJ ‚| ¡  	¡ dks6J ‚q6d S )NZCeilr   r   ZCUDNN©Úengine)
r
   r   r   r   ÚCreateOperatorr   r   r   r6   r   )r   r   r   r3   r#   r   r   r   Útest_operatordef_simpleH   s    
z$TestBindings.test_operatordef_simplec                 C   sF   t  ¡ }|j}|  t¡ | d¡ W d   ƒ n1 s80    Y  d S )Né   )r
   r   r   ÚassertRaisesÚ	Exceptionr   r   r   r   r   Útest_invalid_nodeQ   s    zTestBindings.test_invalid_nodec                 C   sè   t  ¡ }|j}| t  d¡¡}| t  d¡¡}| t  d¡¡}|  t¡ | ||¡ W d   ƒ n1 sj0    Y  | ||¡ | ||¡ t	|ƒ 
d¡sžJ ‚t  ¡ }| |¡ | |¡ | ¡  t|ƒdksÒJ ‚t	|ƒ 
d¡säJ ‚d S )Nr   r   ÚOpú	digraph Gr	   )r
   r   r   r   r   r   r=   r>   Ú
createEdgeÚstrÚ
startswithZ
NNSubgraphZaddNodeZinduceEdgesr   )r   r   r   ÚxÚwr3   Zsgr   r   r   Útest_edges_simpleW   s     *

zTestBindings.test_edges_simpleé
   é2   )Úsizec           	   
   C   s²   t  d¡ t ¡ }|j}g }g }t|ƒD ]}| | t d¡¡¡ q(t|ƒD ]"}| | t 	dt
|ƒ ¡¡¡ qLt|ƒD ]4}t|ƒD ]&}tt  d¡ƒr„| || || ¡ q„qxd S )Ni9  r   r@   r'   )ÚrandomÚseedr
   r   r   ÚrangeÚappendr   r   r   rC   ÚboolÚgetrandbitsrB   )	r   rJ   r   r   Údatar2   Ú_ÚiÚjr   r   r   Útest_edges_complexp   s    
 zTestBindings.test_edges_complexc                 C   sò   t  d¡}| ddgdg¡ | dgdg¡ t |¡}|jd }|jd }|jd  ¡ r\J ‚|jd j	dkspJ ‚|jd j	dks„J ‚|j
d j	dks˜J ‚|jd j	dks¬J ‚|jd  ¡ s¾J ‚|jd jj	dksÔJ ‚|j
d jd j	d	ksîJ ‚d S )
NÚtestr   r   r   r%   r   r'   r   r(   )r   r   r   r(   r
   r   r)   ÚinputsZhasProducerr   ÚoutputsZproducerZ	consumers)r   r"   r   ÚfcZrelur   r   r   Útest_traversal‚   s    



zTestBindings.test_traversalc                 C   sN   t  ¡ }|j}| t  d¡¡ | t  d¡¡ | t  d¡¡ t  |j¡ d S )Nr   r   r@   )r
   r   r   r   r   r   Úrenderr   r   r   r   Ú
test_debug’   s    zTestBindings.test_debugc                 C   s    t  ¡ }| t  d¡¡ t  ¡ }|j t  d¡¡}|j t  d¡¡}|j ||¡ d}| |¡D ].}t	|ƒdkstJ ‚|d7 }t
|ƒ d¡s`J ‚q`|dksœJ ‚d S )NrV   r   r   r'   rA   )r
   ÚNNMatchGraphr   r   r   r   r   rB   Úmatchr   rC   rD   ©r   Úmgr   rV   rE   Úcountr^   r   r   r   Útest_match_graph_node›   s    z"TestBindings.test_match_graph_nodec                 C   s¼   t  ¡ }|jt  d¡dd t  ¡ }|j t  d¡¡}|j t  d¡¡}|j ||¡ d}| |¡D ]}t	|ƒdksxJ ‚|d7 }qd|  
t¡ |dksšJ ‚W d   ƒ n1 s®0    Y  d S )NrV   T©Ústrictr   r   r'   )r
   r]   r   r   r   r   r   rB   r^   r   r=   r>   r_   r   r   r   Útest_match_graph_node_strict«   s    
z)TestBindings.test_match_graph_node_strictc                 C   sú   t  ¡ }|jt  d¡dd}|jt  d¡dd}| t  d¡¡}| ||¡ | ||¡ t  ¡ }|j t  d¡¡}|j t  d¡¡}|j t  d¡¡}|j ||¡ |j ||¡ d}	| |¡D ](}
t	t
|
ƒƒ t
|
ƒdksàJ ‚|	d7 }	qÀ|	dksöJ ‚d S )	NÚtest2Trc   r   rV   r   é   r'   )r
   r]   r   r   r   rB   r   r   r^   Úprintr   )r   r`   Útest2mÚxmÚtestmr   rf   rE   rV   ra   r^   r   r   r   Útest_match_graph»   s$    
zTestBindings.test_match_graphc                 C   sæ   t  ¡ }|jt  d¡dd}|jt  d¡dd}| t  d¡¡}| ||¡ | ||¡ t  ¡ }|j t  d¡¡}|j t  d¡¡}|j t  d¡¡}|j ||¡ |j ||¡ | |¡D ]}	|	}
q¼| 	|
¡ t
|jƒdksâJ ‚d S )Nrf   Trc   r   rV   r   )r
   r]   r   r   r   rB   r   r   r^   ZdeleteSubgraphr   r)   )r   r`   ri   rj   rk   r   rf   rE   rV   Úmr^   r   r   r   Útest_delete_subgraphÑ   s     
z!TestBindings.test_delete_subgraphc                 C   s  t  ¡ }|jt  d¡dd}|jt  d¡dd}| t  d¡¡}| ||¡ | ||¡ t  ¡ }|j t  d¡¡}|j t  d¡¡}|j t  d¡¡}|j ||¡ |j ||¡ | |¡D ]}	|	}
q¼|j t  d¡¡}| 	|
|g g ¡ t
|jƒdksúJ ‚|jd jdksJ ‚d S )	Nrf   Trc   r   rV   Únew_opr'   r   )r
   r]   r   r   r   rB   r   r   r^   ZreplaceSubgraphr   r)   r   )r   r`   ri   rj   rk   r   rf   rE   rV   rm   r^   ro   r   r   r   Útest_replace_subraphå   s$    z!TestBindings.test_replace_subraphc                 C   s6   t  ¡ }| d¡}| d¡}| ||¡}t  |¡ d S )NZhello1Zhello2)r
   ZGraphr   rB   r[   )r   ÚgÚn1Ún2Úer   r   r   Útest_genericGraphû   s
    

zTestBindings.test_genericGraphc                 C   s®   t  d¡}t |¡}| d¡}|  |jd d¡ |j t 	d¡¡}| 
||¡ | d¡}| 
||¡ |  |jd d¡ |  |j|j¡ | d¡}| d¡}|  |j|j¡ d S )Nr   Úar   Útest1Úb)r   r   r
   r   ZcreateUniqueDataNodeÚassertEqualr   r   r   r&   rB   ZassertNotEqual)r   r"   r   rr   rs   Zn3r   r   r   Útest_createUniqueDataNode  s    





z&TestBindings.test_createUniqueDataNodec           	      C   sn  t  d¡}| ddgdg¡ t |¡}| ¡ }t|ƒ t| ¡ ƒ t|j	ƒt| ¡ j	ƒks^J ‚t
t|j	ƒƒD ]¤}| ¡ j	| }|j	| }|j|jks˜J ‚t|jƒt|jƒks°J ‚t|jƒt|jƒksÈJ ‚t|j|jƒD ]\}}||ksÖJ ‚qÖt|j|jƒD ]\}}||ksúJ ‚qúqlt|j| ¡ jƒD ]\}}||ks$J ‚q$t|j| ¡ jƒD ]\}}||ksPJ ‚qPd S )Nr   r   r   r   )r   r   r   r
   r   ÚconvertToCaffe2Protorh   r5   r   r3   rM   ÚtypeÚinputÚoutputÚzipZexternal_inputZexternal_output)	r   r"   r   Z
new_netdefrS   r3   ro   rv   rx   r   r   r   Útest_convertToProto  s*    


z TestBindings.test_convertToProtoc           
      C   sh  t  ¡ }|j}| t  d¡¡}| t  d¡¡}| t  d¡¡}| ||¡ | ||¡ | ¡ }t|ƒdksnJ ‚|d |ks~J ‚| t  d¡¡}| t  d¡¡}| ||¡ | ||¡ | ¡ }t|ƒdksÎJ ‚||v sÚJ ‚||v sæJ ‚t| 	¡ ƒdksúJ ‚t| 	¡ ƒdksJ ‚| 	¡ d |ks&J ‚|||fD ]}	|	 
¡ s0J ‚q0||fD ]}	|	 ¡ sNJ ‚qNd S )	Nrw   rf   rE   r'   r   Útest3Úyr	   )r
   r   r   r   r&   ZDatarB   ZgetOperatorPredecessorsr   ZgetOperatorSuccessorsr   r    )
r   r   r   rw   rf   rE   Úpr   r‚   r#   r   r   r   Útest_node_interactions(  s2    z#TestBindings.test_node_interactionsc                 C   s@   t  ¡ }|j t  d¡¡}|j |¡ t|j ¡ ƒdks<J ‚d S )NÚTestOpr   )r
   r   r   r   r   Ú
deleteNoder   r   )r   r   r#   r   r   r   Útest_delete_nodeI  s    zTestBindings.test_delete_nodec                 C   sˆ   t  d¡}| ddgdg¡ t |¡}|jd }|j t d¡¡}| 	|j
d |¡ | |¡ t|jƒdkspJ ‚|jd jdks„J ‚d S ©Nr   r   r   r   r   r…   r'   )r   r   r   r
   r   r)   r   r   r   ZreplaceProducerrX   r†   r   r   ©r   r"   r   rY   Ztest_opr   r   r   Útest_replace_producerO  s    



z"TestBindings.test_replace_producerc                 C   sŠ   t  d¡}| ddgdg¡ | ddgdg¡ t |¡}|jd }|j t d¡¡}| 	|j
d |¡ |jD ]}|j
d jdkslJ ‚qld S )	Nr   r   r   r   ZW2ZY2r   ÚT)r   r   r   r
   r   r)   r   r   r   ZreplaceAllUsesWithrW   r   )r   r"   r   rY   Ztest_tensorr3   r   r   r   Útest_replace_all_uses_withZ  s    



z'TestBindings.test_replace_all_uses_withc                 C   s¶   t  d¡}| ddgdg¡ t |¡}|jd }|j t d¡¡}| 	||¡ | 
|¡ t|jƒdksjJ ‚|jd jdks~J ‚|jd jd jdks˜J ‚|jd jd jdks²J ‚d S rˆ   )r   r   r   r
   r   r)   r   r   r   ZreplaceAsConsumerr†   r   r   rW   r‰   r   r   r   Útest_replace_as_consumerf  s    



z%TestBindings.test_replace_as_consumerc                 C   s@   t  ¡ }| d¡ | ¡ dks"J ‚| d¡ | ¡ dks<J ‚d S )NÚwootr<   )r
   Ú
AnnotationZ	setDeviceZ	getDeviceÚsetDeviceTypeÚgetDeviceType)r   Úannotr   r   r   Útest_annotation_basics  s
    

z"TestBindings.test_annotation_basicc                 C   sR   t  ¡ }|j t  d¡¡}| ¡ }| d¡ | |¡ | ¡ }| ¡ dksNJ ‚d S )Nr…   r<   )	r
   r   r   r   r   ÚgetAnnotationr   ÚsetAnnotationr‘   )r   r   r#   r’   Ú	new_annotr   r   r   Útest_annotation_from_graphz  s    

z'TestBindings.test_annotation_from_graphc                 C   s„   t  ¡ }tjdg g dd}|j |¡}|jjjdks8J ‚tjdg g dd}||j_| 	¡ }t
|jƒdkslJ ‚|jd jdks€J ‚d S )NZConvZSENTINELr8   ZNEW_SENTINELr'   r   )r
   r   r   r:   r   r   Ú
annotationZoperator_defr9   r{   r   r3   )r   r   Zopdefr#   Znetdefr   r   r   Útest_annotation_operator_defƒ  s    z)TestBindings.test_annotation_operator_defc                 C   sN   t  ¡ }|j t  d¡¡}t ¡ }d|_||j_	|j
d jj	}||ksJJ ‚d S )Nr…   rV   r   )r
   r   r   r   r   r   ÚDeviceOptionZ	node_namer˜   Údevice_optionr)   )r   r   r#   ÚdZd_2r   r   r   Útest_annotation_device_optionŽ  s    z*TestBindings.test_annotation_device_optionc                 C   sJ   t  ¡ }|j t  d¡¡}|j ¡ r(J ‚t ¡ }||j_	|j ¡ sFJ ‚d S )Nr…   )
r
   r   r   r   r   r˜   ZhasDeviceOptionr   rš   r›   )r   r   r#   rœ   r   r   r   Útest_has_device_option˜  s    z#TestBindings.test_has_device_optionc                 C   sÊ   t  ¡ }|j t  d¡¡}|j t  d¡¡}|j t  d¡¡}t  ¡ }| |¡ | |¡ | 	g d¢¡ | 
|¡ | ¡ }| ¡ |ksŠJ ‚t| ¡ ƒdksžJ ‚| ¡ d dks²J ‚| ¡ d d	ksÆJ ‚d S )
NÚkeyÚlengthr…   )Ú rV   rŽ   rg   r   r¡   r	   rŽ   )r
   r   r   r   r   r   r   Z
setKeyNodeZsetLengthNodeZsetComponentLevelsr•   r”   Z
getKeyNoder   ZgetComponentLevels)r   r   rŸ   r    r#   r’   r–   r   r   r   Útest_distributed_annotations   s    


z)TestBindings.test_distributed_annotationsc                 C   sv   t  d¡}| ddgdg¡ t ¡ }t |||dœ¡}|  t¡" t |||dœ¡}W d   ƒ n1 sh0    Y  d S )Nr   r   r   r   )r   r   )r   ZFake)	r   r   r   r   rš   r
   r   r=   r>   )r   r"   rœ   r   r   r   r   Útest_distributed_device_map´  s    
z(TestBindings.test_distributed_device_mapN)%Ú__name__Ú
__module__Ú__qualname__r   r$   r+   r4   r7   r;   r?   rG   r   ÚstZsampled_fromrU   rZ   r\   rb   re   rl   rn   rp   ru   rz   r€   r„   r‡   rŠ   rŒ   r   r“   r—   r™   r   rž   r¢   r£   r   r   r   r   r      s@   

	
	!	
r   )Zcaffe2.pythonr   r   Zcaffe2.protor   Zcaffe2.python.nomnigraphÚpythonZ
nomnigraphr
   Z
hypothesisr   Zhypothesis.strategiesÚ
strategiesr§   rK   ZTestCaser   r   r   r   r   Ú<module>   s   