U
    9vf¹!  ã                   @   sT   d Z ddlZddlZddlZe d¡ZddlZddlm	Z	m
Z
mZ G dd„ dƒZdS )z$Unit tests for PyGraphviz interface.é    NÚ
pygraphviz)Úedges_equalÚgraphs_equalÚnodes_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   s0   dddddg}|  |¡ | d¡ d|jd< |S )N©ÚAÚB)r   ÚC)r	   r
   )r   ÚDÚEZbronzeÚmetal)Zadd_edges_fromÚadd_nodeÚgraph)ÚselfÚGÚedges© r   úF/tmp/pip-unpacked-wheel-_lngutwb/networkx/drawing/tests/test_agraph.pyÚbuild_graph   s
    


zTestAGraph.build_graphc                 C   sH   t | ¡ | ¡ ƒst‚t| ¡ | ¡ ƒs,t‚|jd |jd ksDt‚d S )Nr   )r   ÚnodesÚAssertionErrorr   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 5 Q R X t|ƒ}tj 
|¡}W 5 Q R X t |¡ t |¡ |  ||¡ d S )NÚw)r   ÚnxÚ	nx_agraphÚ	to_agraphÚfrom_agraphr   ÚtempfileÚ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s2t‚d S )NÚtest)Úname)r   ÚGraphr   r   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||ƒs4t‚d S )Né   )Zcreate_using)r   Z
path_graphr   r   r   Ú
isinstancer   )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ƒsNt‚ddddif|j	dd	kslt‚d S )
Nr   é   Úfoo)ÚkeyÚ0Ú1r4   T©Údata)
r   r+   Úadd_nodes_fromr   r   Úadd_edger   r0   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@t‚d S )Nr2   Zred©Úcolorr   rF   )	r   r+   r   r   r   Údictr   Úattrr   ©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sNt‚d S )Nr   r2   ZyellowrE   rF   )	r9   r:   r   r   r   rG   r   rH   r   )r   r.   r   r   r   r   r   Útest_to_agraph_with_edgedata_   s
    z'TestAGraph.test_to_agraph_with_edgedatac              	   C   sj   t  d¡}t|d ƒ}t jj||dd\}}||ks8t‚t|dƒ}| ¡ }W 5 Q R X t|ƒdksft‚d S )Nr/   z	graph.pngF)ÚpathÚshowÚrbr   )	r   Úcomplete_graphÚstrr   Úview_pygraphvizr   r#   ÚreadÚlen)r   Útmp_pathr   Z
input_pathZout_pathr   r'   r8   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s4t‚d S )Nr/   r2   F)ÚsuffixrM   iúÿÿÿz_1.png)r   rO   r   rQ   r   )r   rT   r   rL   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©rM   )r   r+   ÚpytestZraisesZNetworkXExceptionr   rQ   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
ksFt‚qFd S )Nr2   é   é   )Úweightr/   é   r_   F©Z	edgelabelrM   )Ú7Ú8)r   r+   r:   r   rQ   r   rH   r   )r   r   rL   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s0t‚q0d S )Nr/   c                 S   s   dS )Nr3   r   r7   r   r   r   Ú	foo_label‡   s    zETestAGraph.test_view_pygraphviz_callable_edgelabel.<locals>.foo_labelFra   Úlabelr3   )r   rO   r   rQ   r   rH   r   )r   r   rf   rL   r   rd   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sZt‚|D ]}|jd
  	¡ dks^t‚q^d S )Nr   r2   Ú	left_fork)r4   r*   Ú
right_forkr*   Fra   r]   rg   )ri   rj   )
r   rA   r:   r   rQ   r   rS   r   rH   Ústrip)r   r   rL   r   r   rd   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   rI   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,t‚d S )Nr]   FrZ   )r   rO   r   rQ   r   r   ©r   r   rL   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sVt‚d S )Nr]   Úwidthú0.80ÚnodeÚfontsizeÚ14rd   FrZ   )rw   rd   )r   rO   r   r   rQ   r   rr   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sPt‚t|jƒd dksft‚d S )
Nr]   ru   rv   rw   rx   ry   rd   FrZ   )	r   rO   r   r   rQ   rG   Z	node_attrr   Z	edge_attrrr   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||ƒsFt‚i |jd< i |jd< i |jd< t||ƒsrt‚d S )Nr   rw   rd   )r   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||ƒs0t‚d S )Nr/   )r   rO   r   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s2t‚d S r<   )r   r   r+   r   Zgraphviz_layoutÚpygraphviz_layoutr   )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stt‚d S )Nr   Zcirco)Úprogr€   z-Groot=)Úargsr‚   c                 s   s   | ]}t |ƒV  qd S r<   )Úfloat)Ú.0rp   r   r   r   Ú	<genexpr>ß   s     z9TestAGraph.test_pygraphviz_layout_root.<locals>.<genexpr>r6   Úposú,r2   )r   rO   r   r   r~   ZlayoutÚtuplerG   Zget_noderH   Úsplitr   )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sHt	‚t|d ƒdks\t	‚d S )Nr]   ÚdimenÚneato©r‚   r   r   ©
r   r+   r   r   r   r~   ÚlistÚvaluesrS   r   ©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sHt	‚t|d ƒdks\t	‚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-   r[   ÚmarkZparametrizer   r+   r?   rA   rC   r1   r;   r>   r@   rB   rD   rJ   rK   rU   rW   r\   re   rh   rl   rq   rs   Zxfailrz   r{   r|   r}   r   Úranger‹   r“   r”   r   r   r   r   r      sH    ÿ








	r   )Ú__doc__r    r   r[   Zimportorskipr   Znetworkxr   Znetworkx.utilsr   r   r   r   r   r   r   r   Ú<module>   s   
