
    hU"                     l    S r SSKrSSKr\R                  " S5      rSSKrSSKJrJ	r	J
r
   " S S5      rg)z$Unit tests for PyGraphviz interface.    N
pygraphviz)edges_equalgraphs_equalnodes_equalc                   "   \ rS rSrS rS r\R                  R                  S\	R                  " 5       \	R                  " 5       \	R                  " 5       \	R                  " 5       45      S 5       rS r\R                  R                  S\	R                  \	R                  \	R                  \	R                  45      S 5       rS	 rS
 r\R                  R                  S\	R                  \	R                  45      S 5       rS rS rS rS rS rS rS rS r\R                  R9                  SS9S 5       rS rS r\R                  R9                  SS9S 5       r S r!\R                  R                  S\"" S5      5      S 5       r#S r$S  r%S! r&S"r'g#)$
TestAGraph   c                 p    / SQnUR                  U5        UR                  S5        SUR                  S'   U$ )N)ABr   Cr   )r   r   )r   DEbronzemetal)add_edges_fromadd_nodegraph)selfGedgess      T/var/www/html/env/lib/python3.13/site-packages/networkx/drawing/tests/test_agraph.pybuild_graphTestAGraph.build_graph   s3    L		

3#    c                    [        UR                  5       UR                  5       5      (       d   e[        UR                  5       UR                  5       5      (       d   eUR                  S   UR                  S   :X  d   eg )Nr   )r   nodesr   r   r   )r   G1G2s      r   assert_equalTestAGraph.assert_equal   s`    288:rxxz2222288:rxxz2222xx BHHW$5555r   r   c                    U R                  U5      n[        R                  R                  U5      n[        R                  R	                  U5      nU R                  X5        US-  n[        R                  R                  R                  XE5        [        R                  R                  U5      nU R                  XF5        US-  n[        US5       n[        R                  R                  R                  XG5        S S S 5        [        U5       n[        R                  R                  U5      nS S S 5        U R                  XF5        g ! , (       d  f       NS= f! , (       d  f       N1= f)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fhs           r   test_agraph_roundtripping$TestAGraph.test_agraph_roundtripping   s    QLL""1%LL$$Q'!:%


&&q0ll##E*!!=(%JJ  **11  %[B,,''+C !!  [s   *E E
E
E&c                     [         R                  " SS9n[         R                  R                  U5      n[         R                  R	                  U5      nUR
                  S:X  d   eg )Ntest)name)r&   Graphr'   r(   r)   r7   r   r   r   r/   s       r   test_from_agraph_name TestAGraph.test_from_agraph_name1   sJ    HH&!LL""1%LL$$Q'vvr   graph_classc                     [         R                  " S5      n[         R                  R                  U5      n[         R                  R	                  X1S9n[        XA5      (       d   eg )N   )create_using)r&   
path_graphr'   r(   r)   
isinstance)r   r<   r   r   r/   s        r   test_from_agraph_create_using(TestAGraph.test_from_agraph_create_using7   sN     MM!LL""1%LL$$Q$A!))))r   c                 h   [         R                  " 5       nUR                  SS/5        [         R                  R	                  U5      nUR                  SSSS9  [         R                  R                  U5      n[        U[         R                  5      (       d   eSSSS04UR                  SS	9;   d   eg )
Nr      foo)key01rG   Tdata)	r&   r8   add_nodes_fromr'   r(   add_edger)   rA   r   r9   s       r   test_from_agraph_named_edges'TestAGraph.test_from_agraph_named_edges@   s    HHJ	!Q LL""1%	

1aU
#LL$$Q'!RXX&&&&S5%.)QWW$W-????r   c                     [         R                  " 5       nUR                  SSS9  [         R                  R	                  U5      n[        UR                  5       S   R                  5      SS0:X  d   eg )NrE   redcolorr   rS   )r&   r8   r   r'   r(   dictr   attrr   r   r   s      r   test_to_agraph_with_nodedata'TestAGraph.test_to_agraph_with_nodedataL   sY    HHJ	

1E
"LL""1%AGGIaL%%&7E*::::r   c                     U" 5       nUR                  SS/5        UR                  SSSS9  [        R                  R	                  U5      n[        UR                  5       S   R                  5      SS0:X  d   eg )Nr   rE   yellowrR   rS   )rL   rM   r&   r'   r(   rT   r   rU   )r   r<   r   r   s       r   test_to_agraph_with_edgedata'TestAGraph.test_to_agraph_with_edgedataR   si    M	!Q 	

1ax
(LL""1%AGGIaL%%&7H*====r   c                 (   [         R                  " S5      n[        US-  5      n[         R                  R	                  X#SS9u  pEXC:X  d   e[        US5       nUR                  5       nS S S 5        [        W5      S:  d   eg ! , (       d  f       N = f)Nr>   z	graph.pngF)pathshowrbr   )r&   complete_graphstrr'   view_pygraphvizr-   readlen)r   r.   r   
input_pathout_pathr   r2   rK   s           r   test_view_pygraphviz_path$TestAGraph.test_view_pygraphviz_pathZ   s}    a K/0
ll221E2R%%%*d#r779D $4y1}} $#s   B
Bc                     [         R                  " S5      n[         R                  R                  USSS9u  p4USS  S:X  d   eg )Nr>   rE   F)suffixr_   iz_1.png)r&   ra   r'   rc   )r   r.   r   r^   r   s        r    test_view_pygraphviz_file_suffix+TestAGraph.test_view_pygraphviz_file_suffixd   sC    a ,,..q.GBCyH$$$r   c                    [         R                  " 5       n[        R                  " [         R                  [         R
                  R                  U5        [         R                  " SS5      n[         R
                  R                  USS9  g )N      Fr_   )r&   r8   pytestraisesNetworkXExceptionr'   rc   barbell_graph)r   r   s     r   test_view_pygraphvizTestAGraph.test_view_pygraphvizi   sV    HHJb**BLL,H,H!LQ"
$$QU$3r   c                    [         R                  " 5       nUR                  SSSS9  UR                  SSSS9  [         R                  R	                  USSS	9u  p#UR                  5        H  nUR                  S   S
;   a  M   e   g )NrE         )weightr>      r{   F	edgelabelr_   )78)r&   r8   rM   r'   rc   r   rU   )r   r   r^   r   edges        r   test_view_pygraphviz_edgelabel)TestAGraph.test_view_pygraphviz_edgelabelo   su    HHJ	

1a
"	

1a
",,..qH5.QGGID99X&*444 r   c                     [         R                  " S5      nS n[         R                  R                  XSS9u  p4UR	                  5        H  nUR
                  S   S:X  a  M   e   g )Nr>   c                     g)NrF    rJ   s    r   	foo_labelETestAGraph.test_view_pygraphviz_callable_edgelabel.<locals>.foo_labelz   s    r   Fr}   labelrF   )r&   ra   r'   rc   r   rU   )r   r   r   r^   r   r   s         r   'test_view_pygraphviz_callable_edgelabel2TestAGraph.test_view_pygraphviz_callable_edgelabelw   s[    a 	 ,,..qE.RGGID99W%... r   c                 R   [         R                  " 5       nUR                  SSSSS9  UR                  SSSSS9  [         R                  R	                  USSS9u  p#UR                  5       n[        U5      S	:X  d   eU H&  nUR                  S
   R                  5       S;   a  M&   e   g )Nr   rE   	left_fork)rG   r7   
right_forkr7   Fr}   ry   r   )r   r   )	r&   
MultiGraphrM   r'   rc   r   re   rU   strip)r   r   r^   r   r   r   s         r   *test_view_pygraphviz_multigraph_edgelabels5TestAGraph.test_view_pygraphviz_multigraph_edgelabels   s    MMO	

1aQ[
1	

1aQ\
2,,..qF.O	5zQD99W%++-1LLLL r   c                     [         R                  " 5       nU R                  U5      nSUR                  S   S'   SUR                  S   S'   SUR                  S   S'   [         R
                  R                  U5      ng )Nkeywordr   nr   uv)r&   r8   r   r   r   r'   r(   rV   s      r   !test_graph_with_reserved_keywords,TestAGraph.test_graph_with_reserved_keywords   sk     HHJQ%S#,
C #,
C LL""1%r   c                     [         R                  " S5      n[         R                  R                  USS9u  p#UR                  0 :X  d   eg )Nry   Frq   )r&   ra   r'   rc   r   r   r   r^   r   s       r   ,test_view_pygraphviz_no_added_attrs_to_input7TestAGraph.test_view_pygraphviz_no_added_attrs_to_input   s=    a ,,..qu.=ww"}}r   zknown bug in clean_attrs)reasonc                     [         R                  " S5      nSS0UR                  S'   SS0UR                  S'   [         R                  R	                  USS	9u  p#UR                  SS0SS0S
.:X  d   eg )Nry   width0.80nodefontsize14r   Frq   )r   r   )r&   ra   r   r'   rc   r   s       r   2test_view_pygraphviz_leaves_input_graph_unmodified=TestAGraph.test_view_pygraphviz_leaves_input_graph_unmodified   sr    a "F+%t,,,..qu.=wwGV#4z4>PQQQQr   c                 ,   [         R                  " S5      nSS0UR                  S'   SS0UR                  S'   [         R                  R	                  USS	9u  p#[        UR                  5      S   S:X  d   e[        UR                  5      S   S:X  d   eg )
Nry   r   r   r   r   r   r   Frq   )r&   ra   r   r'   rc   rT   	node_attr	edge_attrr   s       r   test_graph_with_AGraph_attrs'TestAGraph.test_graph_with_AGraph_attrs   s    a "F+%t,,,..qu.=AKK )V333AKK ,444r   c                    [         R                  " 5       n[         R                  R                  U5      n[         R                  R	                  U5      n[         R                  R                  U5      n[         R                  R	                  U5      n[        X55      (       d   e0 UR                  S'   0 UR                  S'   0 UR                  S'   [        X5      (       d   eg )Nr   r   r   )r&   r8   r'   r(   r)   r   r   )r   r   r   r/   AAHHs         r   test_round_trip_empty_graph&TestAGraph.test_round_trip_empty_graph   s    HHJLL""1%LL$$Q'\\##A&\\%%b)A""""A""""r   z-integer->string node conversion in round tripc                     [         R                  " S5      n[         R                  R                  U5      n[         R                  R	                  U5      n[        X5      (       d   eg )Nr>   )r&   ra   r'   r(   r)   r   r9   s       r   test_round_trip_integer_nodes(TestAGraph.test_round_trip_integer_nodes   sK    a LL""1%LL$$Q'A!!!!r   c                     U R                  [        R                  " 5       5      n[        R                  R	                  U5      n[        R                  R                  U5      nX#:X  d   eg N)r   r&   r8   r'   graphviz_layoutpygraphviz_layout)r   r   pos_graphvizpos_pygraphvizs       r   test_graphviz_aliasTestAGraph.test_graphviz_alias   sL    RXXZ(||33A677:---r   root   c                 t   [         R                  " S5      n[         R                  R                  U5      n[         R                  R	                  USUS9nUR                  SU 3SS9  [        S [        UR                  S5      R                  5      S   R                  S	5       5       5      nUS
   U:X  d   eg )Nr   circo)progr   z-Groot=)argsr   c              3   8   #    U  H  n[        U5      v   M     g 7fr   )float).0r   s     r   	<genexpr>9TestAGraph.test_pygraphviz_layout_root.<locals>.<genexpr>   s     V)UAuQxx)Us   rI   pos,rE   )r&   ra   r'   r(   r   layouttuplerT   get_noderU   split)r   r   r   r   pygv_layouta1_poss         r   test_pygraphviz_layout_root&TestAGraph.test_pygraphviz_layout_root   s     a LL""1%ll44QW44P	v&W5Vajjo.B.B)CE)J)P)PQT)UVV1~'''r   c                 &   [         R                  " 5       nU R                  U5      nSUR                  S'   [         R                  R                  USS9n[        UR                  5       5      n[        U5      S:X  d   e[        US   5      S:X  d   eg )Nry   dimenneator   r   r   	r&   r8   r   r   r'   r   listvaluesre   r   r   r   s      r   test_2d_layoutTestAGraph.test_2d_layout   z    HHJQll,,QW,=3::< 3x1}}3q6{ar   c                 &   [         R                  " 5       nU R                  U5      nSUR                  S'   [         R                  R                  USS9n[        UR                  5       5      n[        U5      S:X  d   e[        US   5      S:X  d   eg )Nr>   r   r   r   r   r   r   r   s      r   test_3d_layoutTestAGraph.test_3d_layout   r   r   c                 J   [         R                  " 5       nUR                  SSS9  UR                  SSS9  [         R                  R	                  U5      n[
        R                  " SS9 nUR                  5         S S S 5        [        W5      S:X  d   eg ! , (       d  f       N = f)Nr   )r   r   )r   rE   )rE   rE   T)record)	r&   r8   r   r'   r(   warningscatch_warningsr   re   )r   r   r   r   s       r   test_no_warnings_raised"TestAGraph.test_no_warnings_raised   s|     HHJ	

1&
!	

1&
!LL""1%$$D1VHHJ 26{a 21s   )B
B"r   N)(__name__
__module____qualname____firstlineno__r   r"   rr   markparametrizer&   r8   DiGraphr   MultiDiGraphr3   r:   rB   rN   rW   r[   rh   rl   rv   r   r   r   r   r   xfailr   r   r   r   r   ranger   r   r   r   __static_attributes__r   r   r   r   r      s   6
 [[bhhj"**,9JK""&  [["**bmmR__M**
@; [[]RXXr}},EF> G>%
45/M	&
 [[89R :R5# [[MN" O". [[VU1X.
( /
(  
 r   r   )__doc__r   rr   importorskipr   networkxr&   networkx.utilsr   r   r   r   r   r   r   <module>r      s5    *    .
  A Ac  c r   