
    ިsgU"                     l    d 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y)z$Unit tests for PyGraphviz interface.    N
pygraphviz)edges_equalgraphs_equalnodes_equalc                   &   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      U/var/www/html/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                               sJ |j                  d   |j                  d   k(  sJ y )Nr   )r   nodesr   r   r   )r   G1G2s      r   assert_equalzTestAGraph.assert_equal   sZ    288:rxxz222288:rxxz222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!=(% 	2JJ  **1b1	2 %[ 	,B,,''+C	,!S!	2 	2	, 	,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&   r3   r   r   r   r,   s       r   test_from_agraph_namez TestAGraph.test_from_agraph_name1   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   r7   r   r   r,   s        r   test_from_agraph_create_usingz(TestAGraph.test_from_agraph_create_using7   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1rA   Tdata)	r#   r4   add_nodes_fromr$   r%   add_edger&   r<   r   r5   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 )Nr?   redcolorr   rL   )r#   r4   r   r$   r%   dictr   attrr   r   r   s      r   test_to_agraph_with_nodedataz'TestAGraph.test_to_agraph_with_nodedataL   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   r?   yellowrK   rL   )rF   rG   r#   r$   r%   rM   r   rN   )r   r7   r   r   s       r   test_to_agraph_with_edgedataz'TestAGraph.test_to_agraph_with_edgedataR   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)Nr9   z	graph.pngF)pathshowrbr   )r#   complete_graphstrr$   view_pygraphvizr*   readlen)r   r+   r   
input_pathout_pathr   r/   rE   s           r   test_view_pygraphviz_pathz$TestAGraph.test_view_pygraphviz_pathZ   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 )Nr9   r?   F)suffixrV   iz_1.png)r#   rX   r$   rZ   )r   r+   r   rU   r   s        r    test_view_pygraphviz_file_suffixz+TestAGraph.test_view_pygraphviz_file_suffixd   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rV   )r#   r4   pytestraisesNetworkXExceptionr$   rZ   barbell_graph)r   r   s     r   test_view_pygraphvizzTestAGraph.test_view_pygraphvizi   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 )Nr?         )weightr9      ro   F	edgelabelrV   )78)r#   r4   rG   r$   rZ   r   rN   )r   r   rU   r   edges        r   test_view_pygraphviz_edgelabelz)TestAGraph.test_view_pygraphviz_edgelabelo   s|    HHJ	

1a
"	

1a
",,..qH5.QaGGI 	5D99X&*444	5r   c                     t        j                  d      }d }t         j                  j                  ||d      \  }}|j	                         D ]  }|j
                  d   dk(  rJ  y )Nr9   c                      y)Nr@    rD   s    r   	foo_labelzETestAGraph.test_view_pygraphviz_callable_edgelabel.<locals>.foo_labelz   s    r   Frq   labelr@   )r#   rX   r$   rZ   r   rN   )r   r   rz   rU   r   ru   s         r   'test_view_pygraphviz_callable_edgelabelz2TestAGraph.test_view_pygraphviz_callable_edgelabelw   sd    a 	 ,,..qIE.RaGGI 	/D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   r?   	left_fork)rA   r3   
right_forkr3   Frq   rm   r{   )r~   r   )	r#   
MultiGraphrG   r$   rZ   r   r\   rN   strip)r   r   rU   r   r   ru   s         r   *test_view_pygraphviz_multigraph_edgelabelsz5TestAGraph.test_view_pygraphviz_multigraph_edgelabels   s    MMO	

1aQ[
1	

1aQ\
2,,..qF.Oa	5zQ 	MD99W%++-1LLLL	M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#   r4   r   r   r   r$   r%   rO   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 )Nrm   Frf   )r#   rX   r$   rZ   r   r   r   rU   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 )Nrm   width0.80nodefontsize14ru   Frf   )r   ru   )r#   rX   r   r$   rZ   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 )
Nrm   r   r   r   r   r   ru   Frf   )r#   rX   r   r$   rZ   rM   	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                    t        j                         }t         j                  j                  |      }t         j                  j	                  |      }t         j                  j                  |      }t         j                  j	                  |      }t        ||      sJ i |j                  d<   i |j                  d<   i |j                  d<   t        ||      sJ y )Nr   r   ru   )r#   r4   r$   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'\\##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 )Nr9   )r#   rX   r$   r%   r&   r   r5   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 N)r   r#   r4   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     VAuQxVs   rC   pos,r?   )r#   rX   r$   r%   r   layouttuplerM   get_noderN   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 )Nrm   dimenneator   r   r   	r#   r4   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 )Nr9   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   r?   )r?   r?   T)record)	r#   r4   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1 	VHHJ	6{a	 	s   0BB#N)&__name__
__module____qualname__r   r    rg   markparametrizer#   r4   DiGraphr   MultiDiGraphr0   r6   r=   rH   rP   rS   r_   rb   rk   rv   r|   r   r   r   xfailr   r   r   r   r   ranger   r   r   r   ry   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   rg   importorskipr   networkxr#   networkx.utilsr   r   r   r   ry   r   r   <module>r      s7    *   V  .
  A Ac  c r   