
    Gd!                     x    d Z ddlZddlZddlZ ej        d          ZddlZddlm	Z	m
Z
mZ  G d d          ZdS )z$Unit tests for PyGraphviz interface.    N
pygraphviz)edges_equalgraphs_equalnodes_equalc                   Z   e Zd Zd Zd Zd Zd Zej        	                    de
j        e
j        e
j        e
j        f          d             Zd Zd Zd	 Zd
 Zd Zd Zej        	                    de
j        e
j        f          d             Zd Zd Zd Zd Zd Zd Zd Zd Zej                            d          d             Z d Z!d Z"ej                            d          d             Z#d Z$ej        	                    d e%d                    d              Z&d! Z'd" Z(d#S )$
TestAGraphc                 v    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edgess      Blib/python3.11/site-packages/networkx/drawing/tests/test_agraph.pybuild_graphzTestAGraph.build_graph   sA    LLL		

3#    c                    t          |                                |                                          sJ t          |                                |                                          sJ |j        d         |j        d         k    sJ d S )Nr   )r   nodesr   r   r   )r   G1G2s      r   assert_equalzTestAGraph.assert_equal   ss    288::rxxzz22222288::rxxzz22222x BHW$5555555r   c                    |                      |          }t          j                            |          }t          j                            |          }|                     ||           t          j                    \  }}t          j        j        	                    ||           t          j        
                    |          }|                     ||           t          j        |           t          j        |           t          j                    \  }}t          |d          5 }t          j        j        	                    ||           d d d            n# 1 swxY w Y   t          |          5 }t          j        
                    |          }d d d            n# 1 swxY w Y   t          j        |           t          j        |           |                     ||           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fhs           r   agraph_checkszTestAGraph.agraph_checks   s   QL""1%%L$$Q''!Q$&&	E

&&q%000l##E**!S!!!

	%&((U% 	2J **1b111	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 %[[ 	,B,''++C	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,

	%!S!!!!!s$   (&EE!E4 F  F$'F$c                     t          j        d          }t           j                            |          }t           j                            |          }|j        dk    sJ d S )Ntest)name)r#   Graphr$   r%   r&   r8   r   r   r   r0   s       r   test_from_agraph_namez TestAGraph.test_from_agraph_name2   sW    H&!!!L""1%%L$$Q''vr   graph_classc                     t          j        d          }t           j                            |          }t           j                            ||          }t          ||          sJ d S )N   )create_using)r#   
path_graphr$   r%   r&   
isinstance)r   r<   r   r   r0   s        r   test_from_agraph_create_usingz(TestAGraph.test_from_agraph_create_using8   s^     M!L""1%%L$$Q[$AA![)))))))r   c                 |   t          j                    }|                    ddg           t           j                            |          }|                    ddd           t           j                            |          }t          |t           j                  sJ ddddif|                    d	          v sJ d S )
Nr      foo)key01rF   Tdata)	r#   r9   add_nodes_fromr$   r%   add_edger&   rA   r   r:   s       r   test_from_agraph_named_edgesz'TestAGraph.test_from_agraph_named_edgesA   s    HJJ	!Q   L""1%%	

1aU
###L$$Q''!RX&&&&&S5%.)QWW$W-?-???????r   c                 R    |                      t          j                               d S N)r5   r#   r9   r   s    r   test_undirectedzTestAGraph.test_undirectedM   s"    28::&&&&&r   c                 R    |                      t          j                               d S rO   )r5   r#   DiGraphrP   s    r   test_directedzTestAGraph.test_directedP   s"    2:<<(((((r   c                 R    |                      t          j                               d S rO   )r5   r#   
MultiGraphrP   s    r   test_multi_undirectedz TestAGraph.test_multi_undirectedS   s"    2=??+++++r   c                 R    |                      t          j                               d S rO   )r5   r#   MultiDiGraphrP   s    r   test_multi_directedzTestAGraph.test_multi_directedV   s$    2?,,-----r   c                     t          j                    }|                    dd           t           j                            |          }t          |                                d         j                  ddik    sJ d S )NrD   redcolorr   r^   )r#   r9   r   r$   r%   dictr   attrr   r   r   s      r   test_to_agraph_with_nodedataz'TestAGraph.test_to_agraph_with_nodedataY   sk    HJJ	

1E
"""L""1%%AGGIIaL%&&7E*:::::::r   c                     |            }|                     ddg           |                    ddd           t          j                            |          }t          |                                d         j                  ddik    sJ d S )Nr   rD   yellowr]   r^   )rK   rL   r#   r$   r%   r_   r   r`   )r   r<   r   r   s       r   test_to_agraph_with_edgedataz'TestAGraph.test_to_agraph_with_edgedata_   s    KMM	!Q   	

1ax
(((L""1%%AGGIIaL%&&7H*=======r   c                 N   t          j        d          }t          |dz            }t           j                            ||d          \  }}||k    sJ t          |d          5 }|                                }d d d            n# 1 swxY w Y   t          |          dk    sJ d S )Nr>   z	graph.pngF)pathshowrbr   )r#   complete_graphstrr$   view_pygraphvizr/   readlen)r   tmp_pathr   
input_pathout_pathr   r4   rJ   s           r   test_view_pygraphviz_pathz$TestAGraph.test_view_pygraphviz_pathg   s    a  K/00
l221:E2RR!:%%%%*d## 	r7799D	 	 	 	 	 	 	 	 	 	 	 	 	 	 	4yy1}}}}}}s   $BB	B	c                     t          j        d          }t           j                            |dd          \  }}|dd          dk    sJ d S )Nr>   rD   F)suffixrh   iz_1.png)r#   rj   r$   rl   )r   ro   r   rg   r   s        r    test_view_pygraphviz_file_suffixz+TestAGraph.test_view_pygraphviz_file_suffixq   sQ    a  ,..q.GGaBCCyH$$$$$$r   c                     t          j                    }t          j        t           j        t           j        j        |           t          j        dd          }t           j                            |d           d S )N      Frh   )r#   r9   pytestraisesNetworkXExceptionr$   rl   barbell_graph)r   r   s     r   test_view_pygraphvizzTestAGraph.test_view_pygraphvizv   s\    HJJb*BL,H!LLLQ""
$$QU$33333r   c                 &   t          j                    }|                    ddd           |                    ddd           t           j                            |dd	          \  }}|                                D ]}|j        d         d
v sJ d S )NrD         )weightr>      r   F	edgelabelrh   )78)r#   r9   rL   r$   rl   r   r`   )r   r   rg   r   edges        r   test_view_pygraphviz_edgelabelz)TestAGraph.test_view_pygraphviz_edgelabel|   s    HJJ	

1a
"""	

1a
""",..qH5.QQaGGII 	5 	5D9X&*44444	5 	5r   c                     t          j        d          }d }t           j                            ||d          \  }}|                                D ]}|j        d         dk    sJ d S )Nr>   c                     dS )NrE    rI   s    r   	foo_labelzETestAGraph.test_view_pygraphviz_callable_edgelabel.<locals>.foo_label   s    5r   Fr   labelrE   )r#   rj   r$   rl   r   r`   )r   r   r   rg   r   r   s         r   'test_view_pygraphviz_callable_edgelabelz2TestAGraph.test_view_pygraphviz_callable_edgelabel   s    a  	 	 	 ,..qIE.RRaGGII 	/ 	/D9W%.....	/ 	/r   c                 |   t          j                    }|                    dddd           |                    dddd           t           j                            |dd          \  }}|                                }t          |          d	k    sJ |D ]%}|j        d
                                         dv sJ &d S )Nr   rD   	left_fork)rF   r8   
right_forkr8   Fr   r   r   )r   r   )	r#   rV   rL   r$   rl   r   rn   r`   strip)r   r   rg   r   r   r   s         r   *test_view_pygraphviz_multigraph_edgelabelsz5TestAGraph.test_view_pygraphviz_multigraph_edgelabels   s    MOO	

1aQ[
111	

1aQ\
222,..qF.OOa		5zzQ 	M 	MD9W%++--1LLLLLL	M 	Mr   c                     t          j                    }|                     |          }d|j        d         d<   d|j        d         d<   d|j        d         d<   t           j                            |          }d S )Nkeywordr   nr
   uv)r#   r9   r   r   r   r$   r%   ra   s      r   !test_graph_with_reserved_keywordsz,TestAGraph.test_graph_with_reserved_keywords   sm     HJJQ%S#,
C #,
C L""1%%r   c                     t          j        d          }t           j                            |d          \  }}|j        i k    sJ d S )Nr   Fry   )r#   rj   r$   rl   r   r   r   rg   r   s       r   ,test_view_pygraphviz_no_added_attrs_to_inputz7TestAGraph.test_view_pygraphviz_no_added_attrs_to_input   sC    a  ,..qu.==aw"}}}}}}r   zknown bug in clean_attrs)reasonc                     t          j        d          }ddi|j        d<   ddi|j        d<   t           j                            |d	          \  }}|j        ddiddid
k    sJ d S )Nr   width0.80nodefontsize14r   Fry   )r   r   )r#   rj   r   r$   rl   r   s       r   2test_view_pygraphviz_leaves_input_graph_unmodifiedz=TestAGraph.test_view_pygraphviz_leaves_input_graph_unmodified   s{    a  "F+%t,,..qu.==awGV#4z4>PQQQQQQQQr   c                 &   t          j        d          }ddi|j        d<   ddi|j        d<   t           j                            |d	          \  }}t          |j                  d         dk    sJ t          |j                  d         dk    sJ d S )
Nr   r   r   r   r   r   r   Fry   )r#   rj   r   r$   rl   r_   	node_attr	edge_attrr   s       r   test_graph_with_AGraph_attrsz'TestAGraph.test_graph_with_AGraph_attrs   s    a  "F+%t,,..qu.==aAK  )V3333AK  ,444444r   c                    t          j                    }t           j                            |          }t           j                            |          }t           j                            |          }t           j                            |          }t          ||          sJ i |j        d<   i |j        d<   i |j        d<   t          ||          sJ d S )Nr   r   r   )r#   r9   r$   r%   r&   r   r   )r   r   r   r0   AAHHs         r   test_round_trip_empty_graphz&TestAGraph.test_round_trip_empty_graph   s    HJJL""1%%L$$Q''\##A&&\%%b))Ar"""""Ar"""""""r   z-integer->string node conversion in round tripc                     t          j        d          }t           j                            |          }t           j                            |          }t          ||          sJ d S )Nr>   )r#   rj   r$   r%   r&   r   r:   s       r   test_round_trip_integer_nodesz(TestAGraph.test_round_trip_integer_nodes   sX    a  L""1%%L$$Q''Aq!!!!!!!r   c                     |                      t          j                              }t          j                            |          }t          j                            |          }||k    sJ d S rO   )r   r#   r9   r$   graphviz_layoutpygraphviz_layout)r   r   pos_graphvizpos_pygraphvizs       r   test_graphviz_aliaszTestAGraph.test_graphviz_alias   s\    RXZZ((|33A6677::~------r   root   c                    t          j        d          }t           j                            |          }t           j                            |d|          }|                    d| d           t          d t          |                    d          j	                  d         
                    d	          D                       }|d
         |k    sJ d S )Nr   circo)progr   z-Groot=)argsr   c              3   4   K   | ]}t          |          V  d S rO   )float).0r   s     r   	<genexpr>z9TestAGraph.test_pygraphviz_layout_root.<locals>.<genexpr>   s(      VVAuQxxVVVVVVr   rH   pos,rD   )r#   rj   r$   r%   r   layouttupler_   get_noder`   split)r   r   r   r   pygv_layouta1_poss         r   test_pygraphviz_layout_rootz&TestAGraph.test_pygraphviz_layout_root   s     a  L""1%%l44QW44PP	&&&W555VVajjoo.B)C)CE)J)P)PQT)U)UVVVVV1~''''''r   c                 N   t          j                    }|                     |          }d|j        d<   t           j                            |d          }t          |                                          }t          |          dk    sJ t          |d                   dk    sJ d S )Nr   dimenneator   r   r   	r#   r9   r   r   r$   r   listvaluesrn   r   r   r   s      r   test_2d_layoutzTestAGraph.test_2d_layout       HJJQl,,QW,==3::<<  3xx1}}}}3q6{{ar   c                 N   t          j                    }|                     |          }d|j        d<   t           j                            |d          }t          |                                          }t          |          dk    sJ t          |d                   dk    sJ d S )Nr>   r   r   r   r   r   r   r   s      r   test_3d_layoutzTestAGraph.test_3d_layout   r   r   N))__name__
__module____qualname__r   r    r5   r;   rz   markparametrizer#   r9   rS   rV   rY   rB   rM   rQ   rT   rW   rZ   rb   re   rr   ru   r~   r   r   r   r   r   xfailr   r   r   r   r   ranger   r   r   r   r   r   r   r      s         6 6 6
" " ".      ["*bmR_M * * *
@ 
@ 
@' ' ') ) ), , ,. . .; ; ; []RXr},EFF> > GF>  % % %
4 4 45 5 5/ / /M M M	& 	& 	&  
 [899R R :9R5 5 5# # # [MNN" " ON". . . [VUU1XX..
( 
( /.
(              r   r   )__doc__r,   r'   rz   importorskipr   networkxr#   networkx.utilsr   r   r   r   r   r   r   <module>r      s    * * 				   V ..
     A A A A A A A A A Ad  d  d  d  d  d  d  d  d  d r   