3
Md{#                 @   sT   d Z ddlZddlZddlZej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)assert_edges_equalassert_nodes_equalassert_graphs_equalc               @   sV  e Zd Zdd Zdd Zdd Zdd Zej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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j	d7e%d8d9d: Z&d;d< Z'd=d> Z(d?d@ Z)dAS )B
TestAGraphc             C   s0   dd	d
ddg}|j | |jd d|jd< |S )NABCDEZbronzemetal)r   r   )r   r	   )r   r	   )r   r	   )r   r
   )Zadd_edges_fromadd_nodegraph)selfGedges r   T/var/www/html/virt/lib/python3.6/site-packages/networkx/drawing/tests/test_agraph.pybuild_graph   s
    


zTestAGraph.build_graphc             C   s@   t |j |j  t|j |j  |jd |jd ks<td S )Nr   )r   nodesr   r   r   AssertionError)r   ZG1ZG2r   r   r   assert_equal   s    zTestAGraph.assert_equalc             C   s   | j |}tjj|}tjj|}| j|| tj }tjjj	|| tjj
|}tj| | j|| tj \}}t|d}tjjj	|| W d Q R X t|}tjj
|}W d Q R X tj| | j|| d S )Nw)r   nx	nx_agraph	to_agraphfrom_agraphr   tempfilemktempZdrawingZ	write_dotZread_dotosunlinkmkstempopen)r   r   r   HfnameZHinfdfhr   r   r   agraph_checks   s     



zTestAGraph.agraph_checksc             C   s6   t jdd}t jj|}t j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_name0   s    z TestAGraph.test_from_agraph_namegraph_classc             C   s8   t jd}t j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_using6   s    
z(TestAGraph.test_from_agraph_create_usingc             C   sp   t j }|jddg t jj|}|jdddd t jj|}t|t jsNtddddif|j	dd	ksltd S )
Nr      foo)key01r2   T)data)
r   r*   add_nodes_fromr   r   add_edger   r.   r   r   )r   r   r   r#   r   r   r   test_from_agraph_named_edges?   s    z'TestAGraph.test_from_agraph_named_edgesc             C   s   | j tj  d S )N)r'   r   r*   )r   r   r   r   test_undirectedK   s    zTestAGraph.test_undirectedc             C   s   | j tj  d S )N)r'   r   DiGraph)r   r   r   r   test_directedN   s    zTestAGraph.test_directedc             C   s   | j tj  d S )N)r'   r   
MultiGraph)r   r   r   r   test_multi_undirectedQ   s    z TestAGraph.test_multi_undirectedc             C   s   | j tj  d S )N)r'   r   MultiDiGraph)r   r   r   r   test_multi_directedT   s    zTestAGraph.test_multi_directedc             C   sD   t j }|jddd t jj|}t|j d jddiks@td S )Nr0   red)colorr   rA   )	r   r*   r   r   r   dictr   attrr   )r   r   r   r   r   r   test_to_agraph_with_nodedataW   s    z'TestAGraph.test_to_agraph_with_nodedatac             C   sR   | }|j ddg |jdddd tjj|}t|j d jddiksNtd S )Nr   r0   yellow)rA   rA   )	r6   r7   r   r   r   rB   r   rC   r   )r   r,   r   r   r   r   r   test_to_agraph_with_edgedata]   s
    z'TestAGraph.test_to_agraph_with_edgedatac          	   C   sj   t jd}t|d }t jj||dd\}}||ks8tt|d}|j }W d 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&   r5   r   r   r   test_view_pygraphviz_pathe   s    
z$TestAGraph.test_view_pygraphviz_pathc             C   s8   t jd}t jj|ddd\}}|dd  dks4td S )Nr-   r0   F)suffixrH      z_1.pngi)r   rJ   r   rL   r   )r   rO   r   rG   r   r   r   r    test_view_pygraphviz_file_suffixo   s    
z+TestAGraph.test_view_pygraphviz_file_suffixc             C   s<   t j }tjt jt jj| t jdd}t jj|dd d S )N   rR   F)rH   )r   r*   pytestZraisesZNetworkXExceptionr   rL   Zbarbell_graph)r   r   r   r   r   test_view_pygraphvizt   s    zTestAGraph.test_view_pygraphvizc             C   sf   t j }|jdddd |jdddd t jj|ddd	\}}x"|j D ]}|jd dksHtqHW d S )Nr0         )weightr-      rY   F)	edgelabelrH   78)r\   r]   )r   r*   r7   r   rL   r   rC   r   )r   r   rG   r   edger   r   r   test_view_pygraphviz_edgelabelz   s    z)TestAGraph.test_view_pygraphviz_edgelabelc             C   sP   t jd}dd }t jj||dd\}}x"|j D ]}|jd dks2tq2W d S )Nr-   c             S   s   dS )Nr1   r   )r5   r   r   r   	foo_label   s    zETestAGraph.test_view_pygraphviz_callable_edgelabel.<locals>.foo_labelF)r[   rH   labelr1   )r   rJ   r   rL   r   rC   r   )r   r   r`   rG   r   r^   r   r   r   'test_view_pygraphviz_callable_edgelabel   s
    
z2TestAGraph.test_view_pygraphviz_callable_edgelabelc             C   s   t j }|jddddd |jddddd t jj|ddd\}}|j }t|d	ksZtx"|D ]}|jd
 j	 dks`tq`W d S )Nr   r0   	left_fork)r2   r)   
right_forkr)   F)r[   rH   rW   ra   )rc   rd   )
r   r<   r7   r   rL   r   rN   r   rC   strip)r   r   rG   r   r   r^   r   r   r   *test_view_pygraphviz_multigraph_edgelabels   s    
z5TestAGraph.test_view_pygraphviz_multigraph_edgelabelsc             C   sL   t j }| j|}d|jd d< d|jd d< d|jd	 d< t jj|}d S )
Nkeywordr   nr   r   uv)r   r   )r   r   )r   r*   r   r   r   r   r   )r   r   r   r   r   r   !test_graph_with_reserved_keywords   s    
z,TestAGraph.test_graph_with_reserved_keywordsc             C   s0   t jd}t jj|dd\}}|ji ks,td S )NrW   F)rH   )r   rJ   r   rL   r   r   )r   r   rG   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 j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 )NrW   widthz0.80nodefontsize14r^   F)rH   )ro   r^   )r   rJ   r   r   rL   r   )r   r   rG   r   r   r   r   2test_view_pygraphviz_leaves_input_graph_unmodified   s
    
z=TestAGraph.test_view_pygraphviz_leaves_input_graph_unmodifiedc             C   sj   t j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 )
NrW   rn   z0.80ro   rp   rq   r^   F)rH   )	r   rJ   r   r   rL   rB   Z	node_attrr   Z	edge_attr)r   r   rG   r   r   r   r   test_graph_with_AGraph_attrs   s    
z'TestAGraph.test_graph_with_AGraph_attrsc             C   sn   t j }t jj|}t jj|}t jj|}t jj|}t|| i |jd< i |jd< i |jd< t|| d S )Nr   ro   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   s0   t jd}t jj|}t jj|}t|| d S )Nr-   )r   rJ   r   r   r   r   )r   r   r   r#   r   r   r   test_round_trip_integer_nodes   s    
z(TestAGraph.test_round_trip_integer_nodesc             C   s6   | j tj }tjj|}tjj|}||ks2td S )N)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 jd}t jj|}t jj|d|d}|jd| dd tdd t|jdj	d	 j
d
D }|d |ksttd S )Nry   Zcirco)progrx   z-Groot=)argsrz   c             s   s   | ]}t |V  qd S )N)float).0rj   r   r   r   	<genexpr>   s    z9TestAGraph.test_pygraphviz_layout_root.<locals>.<genexpr>r4   pos,r0   )r   rJ   r   r   rv   ZlayouttuplerB   Zget_noderC   splitr   )r   rx   r   r   Zpygv_layoutZa1_posr   r   r   test_pygraphviz_layout_root   s    
(z&TestAGraph.test_pygraphviz_layout_rootc             C   s`   t j }| j|}d|jd< t jj|dd}t|j }t|dksHt	t|d dks\t	d S )NrW   dimenneato)rz   ry   r   )
r   r*   r   r   r   rv   listvaluesrN   r   )r   r   r   r   r   r   test_2d_layout   s    

zTestAGraph.test_2d_layoutc             C   s`   t j }| j|}d|jd< t jj|dd}t|j }t|dksHt	t|d dks\t	d S )Nr-   r   r   )rz   ry   r   )
r   r*   r   r   r   rv   r   r   rN   r   )r   r   r   r   r   r   test_3d_layout   s    

zTestAGraph.test_3d_layoutc             C   sp   t jd}t jj|dd\}}dd t j_tjtdd. t	|d}t jj
||d	d
 W d Q R X W d Q R X d S )NrW   F)rH   c             S   s   d S )Nr   )xr   r   r   <lambda>   s    zHTestAGraph.test_display_pygraphviz_deprecation_warning.<locals>.<lambda>z display_pygraphviz is deprecated)matchwbdot)rz   )r   rJ   r   rL   utilsZdefault_openerrU   ZwarnsDeprecationWarningr"   Zdisplay_pygraphviz)r   r   Z	path_namer   r&   r   r   r   +test_display_pygraphviz_deprecation_warning   s    
z6TestAGraph.test_display_pygraphviz_deprecation_warningN)*__name__
__module____qualname__r   r   r'   r+   rU   markZparametrizer   r*   r:   r<   r>   r/   r8   r9   r;   r=   r?   rD   rF   rP   rS   rV   r_   rb   rf   rk   rl   Zxfailrr   rs   rt   ru   rw   ranger   r   r   r   r   r   r   r   r      s<    


	
		r   )__doc__r   r   rU   Zimportorskipr   Znetworkx.testingr   r   r   Znetworkxr   r   r   r   r   r   <module>   s   
