o
    hU"                     @   sL   d 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                   @   s\  e Zd Zdd Zdd Zejde	 e
 e e f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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d)d* Zejjd+d$d,d- Zd.d/ Z ejd0e!d1d2d3 Z"d4d5 Z#d6d7 Z$d8d9 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   V/var/www/vscode/kcb/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_equalr   c                 C   s   |  |}tj|}tj|}| || |d }tjj|| tj|}| || |d }t	|d}tjj|| W d    n1 sKw   Y  t	|}tj|}W d    n1 sew   Y  | || d S )Nztest.dotzfh_test.dotw)
r   nx	nx_agraph	to_agraphfrom_agraphr   drawing	write_dotread_dotopen)r   r   tmp_pathr   HfnameHinfhr   r   r   test_agraph_roundtripping   s    

z$TestAGraph.test_agraph_roundtrippingc                 C   s6   t jdd}t j|}t j|}|jdksJ d S )Ntest)name)r   Graphr   r    r!   r-   r   r   r   r'   r   r   r   test_from_agraph_name1   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   r1   r   r   r'   r   r   r   test_from_agraph_create_using7   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1r9   Tdata)	r   r.   add_nodes_fromr   r    add_edger!   r5   r   r/   r   r   r   test_from_agraph_named_edges@   s   "z'TestAGraph.test_from_agraph_named_edgesc                 C   sD   t  }|jddd t j|}t| d jddiks J d S )Nr7   redcolorr   rC   )r   r.   r   r   r    dictr   attrr   r   r   r   r   r   test_to_agraph_with_nodedataL   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   r7   yellowrB   rC   )r>   r?   r   r   r    rD   r   rE   )r   r1   r   r   r   r   r   test_to_agraph_with_edgedataR   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 )Nr2   z	graph.pngF)pathshowrbr   )r   complete_graphstrr   view_pygraphvizr%   readlen)r   r&   r   
input_pathout_pathr   r*   r=   r   r   r   test_view_pygraphviz_pathZ   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 )Nr2   r7   F)suffixrK   iz_1.png)r   rM   r   rO   )r   r&   r   rJ   r   r   r   r    test_view_pygraphviz_file_suffixd   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rK   )r   r.   pytestraisesNetworkXExceptionr   rO   barbell_graph)r   r   r   r   r   test_view_pygraphvizi   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 )Nr7         )weightr2      ra   F	edgelabelrK   )78)r   r.   r?   r   rO   r   rE   )r   r   rJ   r   edger   r   r   test_view_pygraphviz_edgelabelo   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 )Nr2   c                 S   s   dS )Nr8   r   r<   r   r   r   	foo_labelz   s   zETestAGraph.test_view_pygraphviz_callable_edgelabel.<locals>.foo_labelFrc   labelr8   )r   rM   r   rO   r   rE   )r   r   ri   rJ   r   rg   r   r   r   'test_view_pygraphviz_callable_edgelabelw   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   r7   	left_fork)r9   r-   
right_forkr-   Frc   r_   rj   )rl   rm   )	r   
MultiGraphr?   r   rO   r   rQ   rE   strip)r   r   rJ   r   r   rg   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    rF   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   rM   r   rO   r   r   r   rJ   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 )Nr_   width0.80nodefontsize14rg   FrY   )r{   rg   )r   rM   r   r   rO   rv   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 )
Nr_   ry   rz   r{   r|   r}   rg   FrY   )r   rM   r   r   rO   rD   	node_attr	edge_attrrv   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{   rg   )r   r.   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 )Nr2   )r   rM   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sJ d S N)r   r   r.   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 r   )float).0rt   r   r   r   	<genexpr>   s    z9TestAGraph.test_pygraphviz_layout_root.<locals>.<genexpr>r;   pos,r7   )r   rM   r   r    r   layouttuplerD   get_noderE   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 )Nr_   dimenneator   r   r   	r   r.   r   r   r   r   listvaluesrQ   r   r   r   r   r   r   test_2d_layout      

zTestAGraph.test_2d_layoutc                 C   r   )Nr2   r   r   r   r   r   r   r   r   r   r   test_3d_layout   r   zTestAGraph.test_3d_layoutc                 C   sx   t  }|jddd |jddd t j|}tjdd}|  W d    n1 s-w   Y  t|dks:J d S )Nr   )r   r   )r   r7   )r7   r7   T)record)	r   r.   r   r   r    warningscatch_warningsr   rQ   )r   r   r   r   r   r   r   test_no_warnings_raised   s   
z"TestAGraph.test_no_warnings_raisedN)&__name__
__module____qualname__r   r   rZ   markparametrizer   r.   DiGraphrn   MultiDiGraphr+   r0   r6   r@   rG   rI   rT   rV   r^   rh   rk   rp   ru   rw   xfailr~   r   r   r   r   ranger   r   r   r   r   r   r   r   r      sH    









		r   )__doc__r   rZ   importorskipr   networkxr   networkx.utilsr   r   r   r   r   r   r   r   <module>   s    
