
    ܛ7i"                     l    d Z ddlZddlZddlZddlmZmZmZ  ej                  d      Z
 G d d      Zy)z$Unit tests for PyGraphviz interface.    N)edges_equalgraphs_equalnodes_equal
pygraphvizc                   &   e Zd Zd Zd Zej                  j                  d ej                          ej                          ej                          ej                         f      d        Zd Zej                  j                  dej                  ej                  ej                  ej                  f      d        Zd Zd	 Zej                  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                  j7                  d      d        Zd Zd Zej                  j7                  d      d        Zd Z ej                  j                  d e!d            d        Z"d Z#d Z$d  Z%y!)"
TestAGraphc                 p    g d}|j                  |       |j                  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      _/home/rose/Desktop/poly/venv/lib/python3.12/site-packages/networkx/drawing/tests/test_agraph.pybuild_graphzTestAGraph.build_graph   s3    L		

3#    c                    t        |j                         |j                               sJ t        |j                         |j                         |j	                               sJ |j
                  d   |j
                  d   k(  sJ y )N)directedr   )r   nodesr   r   is_directedr   )r   G1G2s      r   assert_equalzTestAGraph.assert_equal   sc    288:rxxz222288:rxxzBNN<LMMMxx BHHW$5555r   r   c                    | j                  |      }t        j                  j                  |      }t        j                  j	                  |      }| j                  ||       |dz  }t        j                  j                  j                  ||       t        j                  j                  |      }| j                  ||       |dz  }t        |d      5 }t        j                  j                  j                  ||       d d d        t        |      5 }t        j                  j                  |      }d d d        | j                  ||       y # 1 sw Y   OxY w# 1 sw Y   (xY w)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_roundtrippingz$TestAGraph.test_agraph_roundtripping   s    QLL""1%LL$$Q'!Q:%


&&q%0ll##E*!S!=(%JJ  **1b1  %[B,,''+C !S!  [s   +E EEE!c                     t        j                  d      }t         j                  j                  |      }t         j                  j	                  |      }|j
                  dk(  sJ y )Ntest)name)r%   Graphr&   r'   r(   r5   r   r   r   r.   s       r   test_from_agraph_namez TestAGraph.test_from_agraph_name0   sJ    HH&!LL""1%LL$$Q'vvr   graph_classc                     t        j                  d      }t         j                  j                  |      }t         j                  j	                  ||      }t        ||      sJ y )N   )create_using)r%   
path_graphr&   r'   r(   
isinstance)r   r9   r   r   r.   s        r   test_from_agraph_create_usingz(TestAGraph.test_from_agraph_create_using6   sO     MM!LL""1%LL$$Q[$A![)))r   c                 d   t        j                         }|j                  ddg       t         j                  j	                  |      }|j                  ddd       t         j                  j                  |      }t        |t         j                        sJ ddddif|j                  d	      v sJ y )
Nr      foo)key01rC   Tdata)	r%   r6   add_nodes_fromr&   r'   add_edger(   r>   r   r7   s       r   test_from_agraph_named_edgesz'TestAGraph.test_from_agraph_named_edges?   s    HHJ	!Q LL""1%	

1aU
#LL$$Q'!RXX&&&S5%.)QWW$W-????r   c                     t        j                         }|j                  dd       t         j                  j	                  |      }t        |j                         d   j                        ddik(  sJ y )NrA   redcolorr   rN   )r%   r6   r   r&   r'   dictr   attrr   r   r   s      r   test_to_agraph_with_nodedataz'TestAGraph.test_to_agraph_with_nodedataK   sY    HHJ	

1E
"LL""1%AGGIaL%%&7E*::::r   c                      |       }|j                  ddg       |j                  ddd       t        j                  j	                  |      }t        |j                         d   j                        ddik(  sJ y )Nr   rA   yellowrM   rN   )rH   rI   r%   r&   r'   rO   r   rP   )r   r9   r   r   s       r   test_to_agraph_with_edgedataz'TestAGraph.test_to_agraph_with_edgedataQ   si    M	!Q 	

1ax
(LL""1%AGGIaL%%&7H*====r   c                 $   t        j                  d      }t        |dz        }t         j                  j	                  ||d      \  }}||k(  sJ t        |d      5 }|j                         }d d d        t              dkD  sJ y # 1 sw Y   xY w)Nr;   z	graph.pngF)pathshowrbr   )r%   complete_graphstrr&   view_pygraphvizr,   readlen)r   r-   r   
input_pathout_pathr   r1   rG   s           r   test_view_pygraphviz_pathz$TestAGraph.test_view_pygraphviz_pathY   s    a K/0
ll221:E2R!:%%%*d#r779D $4y1}} $#s   BBc                     t        j                  d      }t         j                  j                  |dd      \  }}|dd  dk(  sJ y )Nr;   rA   F)suffixrX   iz_1.png)r%   rZ   r&   r\   )r   r-   r   rW   r   s        r    test_view_pygraphviz_file_suffixz+TestAGraph.test_view_pygraphviz_file_suffixc   sE    a ,,..q.GaBCyH$$$r   c                    t        j                         }t        j                  t         j                  t         j
                  j                  |       t        j                  dd      }t         j
                  j                  |d       y )N      FrX   )r%   r6   pytestraisesNetworkXExceptionr&   r\   barbell_graph)r   r   s     r   test_view_pygraphvizzTestAGraph.test_view_pygraphvizh   sV    HHJb**BLL,H,H!LQ"
$$QU$3r   c                    t        j                         }|j                  ddd       |j                  ddd       t         j                  j	                  |dd	      \  }}|j                         D ]  }|j                  d   d
v rJ  y )NrA         )weightr;      rq   F	edgelabelrX   )78)r%   r6   rI   r&   r\   r   rP   )r   r   rW   r   edges        r   test_view_pygraphviz_edgelabelz)TestAGraph.test_view_pygraphviz_edgelabeln   sw    HHJ	

1a
"	

1a
",,..qH5.QaGGID99X&*444 r   c                     t        j                  d      }d }t         j                  j                  ||d      \  }}|j	                         D ]  }|j
                  d   dk(  rJ  y )Nr;   c                      y)NrB    rF   s    r   	foo_labelzETestAGraph.test_view_pygraphviz_callable_edgelabel.<locals>.foo_labely   s    r   Frs   labelrB   )r%   rZ   r&   r\   r   rP   )r   r   r|   rW   r   rw   s         r   'test_view_pygraphviz_callable_edgelabelz2TestAGraph.test_view_pygraphviz_callable_edgelabelv   s_    a 	 ,,..qIE.RaGGID99W%... r   c                 Z   t        j                         }|j                  dddd       |j                  dddd       t         j                  j	                  |dd      \  }}|j                         }t        |      d	k(  sJ |D ]#  }|j                  d
   j                         dv r#J  y )Nr   rA   	left_fork)rC   r5   
right_forkr5   Frs   ro   r}   )r   r   )	r%   
MultiGraphrI   r&   r\   r   r^   rP   strip)r   r   rW   r   r   rw   s         r   *test_view_pygraphviz_multigraph_edgelabelsz5TestAGraph.test_view_pygraphviz_multigraph_edgelabels   s    MMO	

1aQ[
1	

1aQ\
2,,..qF.Oa	5zQD99W%++-1LLLL r   c                     t        j                         }| j                  |      }d|j                  d   d<   d|j                  d   d<   d|j                  d   d<   t         j
                  j                  |      }y )Nkeywordr   nr
   uv)r%   r6   r   r   r   r&   r'   rQ   s      r   !test_graph_with_reserved_keywordsz,TestAGraph.test_graph_with_reserved_keywords   sk     HHJQ%S#,
C #,
C LL""1%r   c                     t        j                  d      }t         j                  j                  |d      \  }}|j                  i k(  sJ y )Nro   Frh   )r%   rZ   r&   r\   r   r   r   rW   r   s       r   ,test_view_pygraphviz_no_added_attrs_to_inputz7TestAGraph.test_view_pygraphviz_no_added_attrs_to_input   s?    a ,,..qu.=aww"}}r   zknown bug in clean_attrs)reasonc                     t        j                  d      }ddi|j                  d<   ddi|j                  d<   t         j                  j	                  |d	      \  }}|j                  ddiddid
k(  sJ y )Nro   width0.80nodefontsize14rw   Frh   )r   rw   )r%   rZ   r   r&   r\   r   s       r   2test_view_pygraphviz_leaves_input_graph_unmodifiedz=TestAGraph.test_view_pygraphviz_leaves_input_graph_unmodified   st    a "F+%t,,,..qu.=awwGV#4z4>PQQQQr   c                 .   t        j                  d      }ddi|j                  d<   ddi|j                  d<   t         j                  j	                  |d	      \  }}t        |j                        d   dk(  sJ t        |j                        d   dk(  sJ y )
Nro   r   r   r   r   r   rw   Frh   )r%   rZ   r   r&   r\   rO   	node_attr	edge_attrr   s       r   test_graph_with_AGraph_attrsz'TestAGraph.test_graph_with_AGraph_attrs   s    a "F+%t,,,..qu.=aAKK )V333AKK ,444r   c                 x   t        j                         }t         j                  j                  |      }t         j                  j	                  |      }t        ||      sJ t         j                  j                  |      }t         j                  j	                  |      }t        ||      sJ t        ||      sJ y N)r%   r6   r&   r'   r(   r   )r   r   r   r.   AAHHs         r   test_round_trip_empty_graphz&TestAGraph.test_round_trip_empty_graph   s    HHJLL""1%LL$$Q'Aq!!!\\##A&\\%%b)Ar"""Ar"""r   z-integer->string node conversion in round tripc                     t        j                  d      }t         j                  j                  |      }t         j                  j	                  |      }t        ||      sJ y )Nr;   )r%   rZ   r&   r'   r(   r   r7   s       r   test_round_trip_integer_nodesz(TestAGraph.test_round_trip_integer_nodes   sJ    a LL""1%LL$$Q'Aq!!!r   c                     | j                  t        j                               }t        j                  j	                  |      }t        j                  j                  |      }||k(  sJ y r   )r   r%   r6   r&   graphviz_layoutpygraphviz_layout)r   r   pos_graphvizpos_pygraphvizs       r   test_graphviz_aliaszTestAGraph.test_graphviz_alias   sN    RXXZ(||33A677:~---r   root   c                 |   t        j                  d      }t         j                  j                  |      }t         j                  j	                  |d|      }|j                  d| d       t        d t        |j                  d      j                        d   j                  d	      D              }|d
   |k(  sJ y )Nr   circo)progr   z-Groot=)argsr   c              3   2   K   | ]  }t        |        y wr   )float).0r   s     r   	<genexpr>z9TestAGraph.test_pygraphviz_layout_root.<locals>.<genexpr>   s     V)UAuQx)Us   rE   pos,rA   )r%   rZ   r&   r'   r   layouttuplerO   get_noderP   split)r   r   r   r   pygv_layouta1_poss         r   test_pygraphviz_layout_rootz&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                 &   t        j                         }| j                  |      }d|j                  d<   t         j                  j                  |d      }t        |j                               }t        |      dk(  sJ t        |d         dk(  sJ y )Nro   dimenneator   r   r   	r%   r6   r   r   r&   r   listvaluesr^   r   r   r   s      r   test_2d_layoutzTestAGraph.test_2d_layout   z    HHJQll,,QW,=3::< 3x1}}3q6{ar   c                 &   t        j                         }| j                  |      }d|j                  d<   t         j                  j                  |d      }t        |j                               }t        |      dk(  sJ t        |d         dk(  sJ y )Nr;   r   r   r   r   r   r   r   s      r   test_3d_layoutzTestAGraph.test_3d_layout   r   r   c                 L   t        j                         }|j                  dd       |j                  dd       t         j                  j	                  |      }t        j                  d      5 }|j                          d d d        t              dk(  sJ y # 1 sw Y   xY w)Nr   )r   r   )r   rA   )rA   rA   T)record)	r%   r6   r   r&   r'   warningscatch_warningsr   r^   )r   r   r   r   s       r   test_no_warnings_raisedz"TestAGraph.test_no_warnings_raised   s|     HHJ	

1&
!	

1&
!LL""1%$$D1VHHJ 26{a 21s   0BB#N)&__name__
__module____qualname__r   r"   ri   markparametrizer%   r6   DiGraphr   MultiDiGraphr2   r8   r?   rJ   rR   rU   ra   rd   rm   rx   r~   r   r   r   xfailr   r   r   r   r   ranger   r   r   r   r{   r   r   r   r      s   6
 [[hbhhj*"**,9JK""&  [["**bmmR__M**
@; [[]RXXr}},EF> G>%
45/M	&
 [[89R :R5# [[MN" O". [[VU1X.
( /
(  
 r   r   )__doc__r   ri   networkxr%   networkx.utilsr   r   r   importorskipr   r   r{   r   r   <module>r      s5    *    A A V  .
`  ` r   