o
    ˷e!                     @   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   s*   g d}| | |d d|jd< |S )N)ABr   Cr
   )r	   r   )r   DEbronzemetal)add_edges_fromadd_nodegraph)selfGedges r   Y/var/www/ideatree/venv/lib/python3.10/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s"J d S )Nr   )r   nodesr   r   r   )r   G1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 sYw   Y  t|}tj
|}W d    n1 ssw   Y  t| t| | || d S )Nw)r   nx	nx_agraph	to_agraphfrom_agraphr   tempfilemkstempdrawing	write_dotread_dotoscloseunlinkopen)r   r   r   HfdfnameHinfhr   r   r   agraph_checks   s(   





zTestAGraph.agraph_checksc                 C   s6   t jdd}t j|}t j|}|jdksJ d S )Ntest)name)r   Graphr   r    r!   r2   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||sJ d S )N   )create_using)r   
path_graphr   r    r!   
isinstance)r   r6   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s'J ddddif|jdd	v s6J d S )
Nr      foo)key01r>   Tdata)	r   r3   add_nodes_fromr   r    add_edger!   r:   r   r4   r   r   r   test_from_agraph_named_edgesA   s   "z'TestAGraph.test_from_agraph_named_edgesc                 C      |  t  d S N)r0   r   r3   r   r   r   r   test_undirectedM      zTestAGraph.test_undirectedc                 C   rF   rG   )r0   r   DiGraphrH   r   r   r   test_directedP   rJ   zTestAGraph.test_directedc                 C   rF   rG   )r0   r   
MultiGraphrH   r   r   r   test_multi_undirectedS   rJ   z TestAGraph.test_multi_undirectedc                 C   rF   rG   )r0   r   MultiDiGraphrH   r   r   r   test_multi_directedV   rJ   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 )Nr<   redcolorr   rS   )r   r3   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s'J d S )Nr   r<   yellowrR   rS   )rC   rD   r   r   r    rT   r   rU   )r   r6   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sJ t|d}| }W d    n1 s0w   Y  t|dks=J d S )Nr7   z	graph.pngF)pathshowrbr   )r   complete_graphstrr   view_pygraphvizr*   readlen)r   tmp_pathr   
input_pathout_pathr   r/   rB   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sJ d S )Nr7   r<   F)suffixr[   iz_1.png)r   r]   r   r_   )r   rb   r   rZ   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r[   )r   r3   pytestraisesNetworkXExceptionr   r_   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 s.J q#d S )Nr<         )weightr7      rr   F	edgelabelr[   )78)r   r3   rD   r   r_   r   rU   )r   r   rZ   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s#J qd S )Nr7   c                 S   s   dS )Nr=   r   rA   r   r   r   	foo_label   s   zETestAGraph.test_view_pygraphviz_callable_edgelabel.<locals>.foo_labelFrt   labelr=   )r   r]   r   r_   r   rU   )r   r   rz   rZ   r   rx   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s-J |D ]}|jd
  dv s<J q/d S )Nr   r<   	left_fork)r>   r2   
right_forkr2   Frt   rp   r{   )r}   r~   )	r   rM   rD   r   r_   r   ra   rU   strip)r   r   rZ   r   r   rx   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   r3   r   r   r   r   r    rV   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 )Nrp   Frj   )r   r]   r   r_   r   r   r   rZ   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s+J d S )Nrp   width0.80nodefontsize14rx   Frj   )r   rx   )r   r]   r   r   r_   r   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s(J t|jd dks3J d S )
Nrp   r   r   r   r   r   rx   Frj   )r   r]   r   r   r_   rT   	node_attr	edge_attrr   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||s#J i |jd< i |jd< i |jd< t||s9J d S )Nr   r   rx   )r   r3   r   r    r!   r   r   )r   r   r   r+   AA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||sJ d S )Nr7   )r   r]   r   r    r!   r   r4   r   r   r   test_round_trip_integer_nodes   s   
z(TestAGraph.test_round_trip_integer_nodesc                 C   s6   |  t }tj|}tj|}||ksJ d S rG   )r   r   r3   r   graphviz_layoutpygraphviz_layout)r   r   pos_graphviz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s:J d S )Nr   circo)progr   z-Groot=)argsr   c                 s   s    | ]}t |V  qd S rG   )float).0r   r   r   r   	<genexpr>   s    z9TestAGraph.test_pygraphviz_layout_root.<locals>.<genexpr>r@   pos,r<   )r   r]   r   r    r   layouttuplerT   get_noderU   split)r   r   r   r   pygv_layouta1_posr   r   r   test_pygraphviz_layout_root   s   
(z&TestAGraph.test_pygraphviz_layout_rootc                 C   `   t  }| |}d|jd< t jj|dd}t| }t|dks$J t|d dks.J d S )Nrp   dimenneator   r   r   	r   r3   r   r   r   r   listvaluesra   r   r   r   r   r   r   test_2d_layout      

zTestAGraph.test_2d_layoutc                 C   r   )Nr7   r   r   r   r   r   r   r   r   r   r   test_3d_layout   r   zTestAGraph.test_3d_layoutN))__name__
__module____qualname__r   r   r0   r5   rk   markparametrizer   r3   rK   rM   rO   r;   rE   rI   rL   rN   rP   rW   rY   re   rg   ro   ry   r|   r   r   r   xfailr   r   r   r   r   ranger   r   r   r   r   r   r   r      sH    








	r   )__doc__r'   r"   rk   importorskipr   networkxr   networkx.utilsr   r   r   r   r   r   r   r   <module>   s    
