a
    œç1b¹!  ã                   @   sT   d Z ddlZddlZddlZe d¡ZddlmZmZm	Z	 ddl
ZG dd„ dƒZdS )z$Unit tests for PyGraphviz interface.é    NÚ
pygraphviz)Únodes_equalÚedges_equalÚgraphs_equalc                   @   sN  e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zej 	d	e
je
je
je
jf¡d
d„ ƒZdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zej 	d	e
je
jf¡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ejjd*d+d,d-„ ƒZ d.d/„ Z!d0d1„ Z"ejjd2d+d3d4„ ƒZ#d5d6„ Z$ej 	d7e%d8ƒ¡d9d:„ ƒZ&d;d<„ Z'd=d>„ Z(d?S )@Ú
TestAGraphc                 C   s*   g d¢}|  |¡ | d¡ d|jd< |S )N)©ÚAÚB©r   ÚCr
   )r	   r   )r   ÚDÚEZbronzeÚmetal)Zadd_edges_fromÚadd_nodeÚgraph)ÚselfÚGÚedges© r   úAlib/python3.9/site-packages/networkx/drawing/tests/test_agraph.pyÚbuild_graph   s
    


zTestAGraph.build_graphc                 C   sH   t | ¡ | ¡ ƒsJ ‚t| ¡ | ¡ ƒs,J ‚|jd |jd ksDJ ‚d S )Nr   )r   Únodesr   r   r   )r   ZG1ZG2r   r   r   Úassert_equal   s    zTestAGraph.assert_equalc                 C   s  |   |¡}tj |¡}tj |¡}|  ||¡ t ¡ \}}tjj 	||¡ tj 
|¡}|  ||¡ t |¡ t |¡ t ¡ \}}t|dƒ }tjj 	||¡ W d   ƒ n1 s²0    Y  t|ƒ}tj 
|¡}W d   ƒ n1 sæ0    Y  t |¡ t |¡ |  ||¡ d S )NÚw)r   ÚnxÚ	nx_agraphÚ	to_agraphÚfrom_agraphr   ÚtempfileZmkstempZdrawingZ	write_dotZread_dotÚosÚcloseÚunlinkÚopen)r   r   r   ÚHÚfdÚfnameZHinÚfhr   r   r   Úagraph_checks   s$    


.
*

zTestAGraph.agraph_checksc                 C   s6   t jdd}t j |¡}t j |¡}|jdks2J ‚d S )NÚtest)Úname)r   ÚGraphr   r   r   r)   ©r   r   r   r#   r   r   r   Útest_from_agraph_name2   s    z TestAGraph.test_from_agraph_nameÚgraph_classc                 C   s8   t  d¡}t j |¡}t jj||d}t||ƒs4J ‚d S )Né   )Zcreate_using)r   Z
path_graphr   r   r   Ú
isinstance)r   r-   r   r   r#   r   r   r   Útest_from_agraph_create_using8   s    
z(TestAGraph.test_from_agraph_create_usingc                 C   sp   t  ¡ }| ddg¡ t j |¡}|jdddd t j |¡}t|t jƒsNJ ‚ddddif|jdd	v slJ ‚d S )
Nr   é   Úfoo)ÚkeyÚ0Ú1r3   T©Údata)	r   r*   Úadd_nodes_fromr   r   Úadd_edger   r/   r   r+   r   r   r   Útest_from_agraph_named_edgesA   s    z'TestAGraph.test_from_agraph_named_edgesc                 C   s   |   t ¡ ¡ d S ©N)r'   r   r*   ©r   r   r   r   Útest_undirectedM   s    zTestAGraph.test_undirectedc                 C   s   |   t ¡ ¡ d S r;   )r'   r   ÚDiGraphr<   r   r   r   Útest_directedP   s    zTestAGraph.test_directedc                 C   s   |   t ¡ ¡ d S r;   )r'   r   Ú
MultiGraphr<   r   r   r   Útest_multi_undirectedS   s    z TestAGraph.test_multi_undirectedc                 C   s   |   t ¡ ¡ d S r;   )r'   r   ÚMultiDiGraphr<   r   r   r   Útest_multi_directedV   s    zTestAGraph.test_multi_directedc                 C   sD   t  ¡ }|jddd t j |¡}t| ¡ d jƒddiks@J ‚d S )Nr1   Zred©Úcolorr   rE   )r   r*   r   r   r   Údictr   Úattr©r   r   r   r   r   r   Útest_to_agraph_with_nodedataY   s    z'TestAGraph.test_to_agraph_with_nodedatac                 C   sR   |ƒ }|  ddg¡ |jdddd tj |¡}t| ¡ d jƒddiksNJ ‚d S )Nr   r1   ZyellowrD   rE   )r8   r9   r   r   r   rF   r   rG   )r   r-   r   r   r   r   r   Útest_to_agraph_with_edgedata_   s
    z'TestAGraph.test_to_agraph_with_edgedatac                 C   s~   t  d¡}t|d ƒ}t jj||dd\}}||ks8J ‚t|dƒ}| ¡ }W d   ƒ n1 s`0    Y  t|ƒdkszJ ‚d S )Nr.   z	graph.pngF)ÚpathÚshowÚrbr   )r   Úcomplete_graphÚstrr   Úview_pygraphvizr"   ÚreadÚlen)r   Útmp_pathr   Z
input_pathZout_pathr   r&   r7   r   r   r   Útest_view_pygraphviz_pathg   s    
&z$TestAGraph.test_view_pygraphviz_pathc                 C   s8   t  d¡}t jj|ddd\}}|dd … dks4J ‚d S )Nr.   r1   F)ÚsuffixrL   iúÿÿÿz_1.png)r   rN   r   rP   )r   rS   r   rK   r   r   r   r   Ú test_view_pygraphviz_file_suffixq   s    
z+TestAGraph.test_view_pygraphviz_file_suffixc                 C   s<   t  ¡ }t t jt jj|¡ t  dd¡}t jj|dd d S )Né   é   F©rL   )r   r*   ÚpytestZraisesZNetworkXExceptionr   rP   Zbarbell_graph)r   r   r   r   r   Útest_view_pygraphvizv   s    zTestAGraph.test_view_pygraphvizc                 C   sb   t  ¡ }|jdddd |jdddd t jj|ddd	\}}| ¡ D ]}|jd d
v sFJ ‚qFd S )Nr1   é   é   )Úweightr.   é   r^   F©Z	edgelabelrL   )Ú7Ú8)r   r*   r9   r   rP   r   rG   )r   r   rK   r   Úedger   r   r   Útest_view_pygraphviz_edgelabel|   s    z)TestAGraph.test_view_pygraphviz_edgelabelc                 C   sL   t  d¡}dd„ }t jj||dd\}}| ¡ D ]}|jd dks0J ‚q0d S )Nr.   c                 S   s   dS )Nr2   r   r6   r   r   r   Ú	foo_label‡   s    zETestAGraph.test_view_pygraphviz_callable_edgelabel.<locals>.foo_labelFr`   Úlabelr2   )r   rN   r   rP   r   rG   )r   r   re   rK   r   rc   r   r   r   Ú'test_view_pygraphviz_callable_edgelabel„   s
    
z2TestAGraph.test_view_pygraphviz_callable_edgelabelc                 C   s~   t  ¡ }|jddddd |jddddd t jj|ddd\}}| ¡ }t|ƒd	ksZJ ‚|D ]}|jd
  ¡ dv s^J ‚q^d S )Nr   r1   Ú	left_fork)r3   r)   Ú
right_forkr)   Fr`   r\   rf   )rh   ri   )	r   r@   r9   r   rP   r   rR   rG   Ústrip)r   r   rK   r   r   rc   r   r   r   Ú*test_view_pygraphviz_multigraph_edgelabelsŽ   s    z5TestAGraph.test_view_pygraphviz_multigraph_edgelabelsc                 C   sL   t  ¡ }|  |¡}d|jd d< d|jd d< d|jd d< t j |¡}d S )NÚkeywordr   Únr   ÚuÚv)r   r*   r   r   r   r   r   rH   r   r   r   Ú!test_graph_with_reserved_keywords˜   s    
z,TestAGraph.test_graph_with_reserved_keywordsc                 C   s0   t  d¡}t jj|dd\}}|ji ks,J ‚d S )Nr\   FrY   )r   rN   r   rP   r   ©r   r   rK   r   r   r   r   Ú,test_view_pygraphviz_no_added_attrs_to_input£   s    
z7TestAGraph.test_view_pygraphviz_no_added_attrs_to_inputzknown bug in clean_attrs)Úreasonc                 C   sZ   t  d¡}ddi|jd< ddi|jd< t jj|dd	\}}|jddiddid
œksVJ ‚d S )Nr\   Úwidthú0.80ÚnodeÚfontsizeÚ14rc   FrY   )rv   rc   )r   rN   r   r   rP   rq   r   r   r   Ú2test_view_pygraphviz_leaves_input_graph_unmodified¨   s
    
z=TestAGraph.test_view_pygraphviz_leaves_input_graph_unmodifiedc                 C   sj   t  d¡}ddi|jd< ddi|jd< t jj|dd	\}}t|jƒd dksPJ ‚t|jƒd dksfJ ‚d S )
Nr\   rt   ru   rv   rw   rx   rc   FrY   )r   rN   r   r   rP   rF   Z	node_attrZ	edge_attrrq   r   r   r   Útest_graph_with_AGraph_attrs±   s    
z'TestAGraph.test_graph_with_AGraph_attrsc                 C   sv   t  ¡ }t j |¡}t j |¡}t j |¡}t j |¡}t||ƒsFJ ‚i |jd< i |jd< i |jd< t||ƒsrJ ‚d S )Nr   rv   rc   )r   r*   r   r   r   r   r   )r   r   r   r#   ZAAZHHr   r   r   Útest_round_trip_empty_graph»   s    


z&TestAGraph.test_round_trip_empty_graphz-integer->string node conversion in round tripc                 C   s4   t  d¡}t j |¡}t j |¡}t||ƒs0J ‚d S )Nr.   )r   rN   r   r   r   r   r+   r   r   r   Útest_round_trip_integer_nodesÈ   s    
z(TestAGraph.test_round_trip_integer_nodesc                 C   s6   |   t ¡ ¡}tj |¡}tj |¡}||ks2J ‚d S r;   )r   r   r*   r   Zgraphviz_layoutÚpygraphviz_layout)r   r   Zpos_graphvizZpos_pygraphvizr   r   r   Útest_graphviz_aliasÏ   s    zTestAGraph.test_graphviz_aliasÚrooté   c                 C   sx   t  d¡}t j |¡}t jj|d|d}|jd|› dd tdd„ t| d¡j	ƒd	  
d
¡D ƒƒ}|d |kstJ ‚d S )Nr€   Zcirco)Úprogr   z-Groot=)Úargsr   c                 s   s   | ]}t |ƒV  qd S r;   )Úfloat)Ú.0ro   r   r   r   Ú	<genexpr>ß   ó    z9TestAGraph.test_pygraphviz_layout_root.<locals>.<genexpr>r5   Úposú,r1   )r   rN   r   r   r}   ZlayoutÚtuplerF   Zget_noderG   Úsplit)r   r   r   r   Zpygv_layoutZa1_posr   r   r   Útest_pygraphviz_layout_rootÕ   s    
(z&TestAGraph.test_pygraphviz_layout_rootc                 C   s`   t  ¡ }|  |¡}d|jd< t jj|dd}t| ¡ ƒ}t|ƒdksHJ ‚t|d ƒdks\J ‚d S )Nr\   ÚdimenÚneato©r   r€   r   ©	r   r*   r   r   r   r}   ÚlistÚvaluesrR   ©r   r   r‡   r   r   r   Útest_2d_layoutâ   s    

zTestAGraph.test_2d_layoutc                 C   s`   t  ¡ }|  |¡}d|jd< t jj|dd}t| ¡ ƒ}t|ƒdksHJ ‚t|d ƒdks\J ‚d S )Nr.   rŒ   r   rŽ   r€   r   r   r’   r   r   r   Útest_3d_layoutë   s    

zTestAGraph.test_3d_layoutN))Ú__name__Ú
__module__Ú__qualname__r   r   r'   r,   rZ   ZmarkZparametrizer   r*   r>   r@   rB   r0   r:   r=   r?   rA   rC   rI   rJ   rT   rV   r[   rd   rg   rk   rp   rr   Zxfailry   rz   r{   r|   r~   Úranger‹   r“   r”   r   r   r   r   r      sF   ÿ








	r   )Ú__doc__r   r   rZ   Zimportorskipr   Znetworkx.utilsr   r   r   Znetworkxr   r   r   r   r   r   Ú<module>   s   
