
    hm                        S r SSKJr  SSKrSSKrSSKJr  \R                  " S5      r	 " S S5      r
S r\R                  R                  S	\R                  \R                  \R                   \R"                  /5      S
 5       rS rg)z'Unit tests for pydot drawing functions.    )StringION)graphs_equalpydotc                       \ rS rSr\R
                  R                  S\R                  " 5       \R                  " 5       45      \R
                  R                  SS5      S 5       5       r
S rSrg)		TestPydot   Gprog)neatodotc                    SUR                   S'   UR                  / SQ5        UR                  S5        [        R                  R                  XS9n[        U[        5      (       d   e[        R                  R                  U5      nUR                  [        R                  R                  U5      5      n[        X5      (       d   eUS-  nUR                  U5        [        R                  USS9n[        U5      S	:X  d   eUS
   n	[!        S UR#                  5        5       5      n
[!        S U	R#                  5        5       5      nX:X  d   e[!        S UR%                  5        5       5      n[!        S U	R%                  5        5       5      nX:X  d   e[        R                  R'                  U5      nUR                  U5      n[        X5      (       d   eg)z
Validate :mod:`pydot`-based usage of the passed NetworkX graph with the
passed basename of an external GraphViz command (e.g., `dot`, `neato`).
r	   name)AB)r   Cr   r   )r   DEr
   zout.dotzutf-8)pathencoding   r   c              3   @   #    U  H  oR                  5       v   M     g 7fNget_name.0ps     S/var/www/html/env/lib/python3.13/site-packages/networkx/drawing/tests/test_pydot.py	<genexpr>'TestPydot.test_pydot.<locals>.<genexpr>:   s     <*;QJJLL*;   c              3   @   #    U  H  oR                  5       v   M     g 7fr   r   r   s     r!   r"   r#   =   s     >*=QJJLL*=r$   c              3   `   #    U  H$  oR                  5       UR                  5       4v   M&     g 7fr   
get_sourceget_destinationr   es     r!   r"   r#   C   s$     UCTa\\^Q%6%6%89CT   ,.c              3   `   #    U  H$  oR                  5       UR                  5       4v   M&     g 7fr   r'   r*   s     r!   r"   r#   F   s$     WCVa\\^Q%6%6%89CVr,   N)graphadd_edges_fromadd_nodenxnx_pydotpydot_layout
isinstancedictto_pydot	__class__
from_pydotr   	write_rawr   graph_from_dot_filelensortedget_node_listget_edge_listread_dot)selfr	   r
   tmp_pathgraph_layoutPG2fnamePin_listPinn1n2e1e2Hins                  r!   
test_pydotTestPydot.test_pydot   s     	
IJ	

3 {{///=,---- KK  # [[//23 A""""9$ 	
E ,,%',J 8}!!! qk <!//*;<< >#*;*;*=>> xx U1??CTUU W3CTCTCVWW xx kk""5)kk# A####    c                 D   [         R                  " 5       nSUR                  S'   UR                  SSSS9  [	        5       n[         R
                  R                  X5        UR                  S5        [         R
                  R                  U5      n[        X5      (       d   eg )Nr	   r   120)keyr   )
r1   
MultiGraphr.   add_edger   r2   	write_dotseekr?   r   )r@   r	   fhHs       r!   test_read_writeTestPydot.test_read_writeR   su    MMO	

3
%Z
a$

KK  $A!!!!rO    N)__name__
__module____qualname____firstlineno__pytestmarkparametrizer1   GraphDiGraphrM   r[   __static_attributes__r]   rO   r!   r   r      sX    [[S288:rzz|"<=[[V%56@$ 7 >@$D"rO   r   c                    [         R                  " 5       nUR                  / SQ5        [         R                  R	                  USS9n[        U[        5      (       d   e[         R                  R                  U5      n[         R                  " [         R                  R                  U5      5      n[        X5      (       d   eg)zValidate that `nx_pydot.pydot_layout` handles nodes
    with characters like "
", " ".

    Those characters cause `pydot` to escape and quote them on output,
    which caused #7581.
    ))
A
big testr   )ri   r   r   r   r   N)
r1   re   r/   r2   r3   r4   r5   r6   r8   r   )rA   r	   rB   rC   rD   s        r!   test_pydot_issue_7581rj   ]   s     	
AMN;;++AE+:LlD)))) 	QA	"++((+	,BrO   
graph_typec           	         U " 5       nUR                  S[        S/5      SSS9  UR                  SSSS	[        S
/5      S9  UR                  SSSS9  SSS.SSSS.SS0/[        R                  R	                  [        R                  R                  U5      5      R                  R                  5        VVs/ s H  u    p#UPM
     snn:X  d   eUR                  5        Vs1 s H  n[        U5      iM     sn[        [        R                  R	                  [        R                  R                  U5      5      R                  5      :X  d   eg s  snnf s  snf )N5r   z"Example:A"F)tlrQ      T)node1rq   )wrn   ro   node)   rt   string)rr   FalseTruez
('node1',)zfrozenset({'node1'})rr   )rV   	frozensetr1   r2   r8   r6   edgesdatanodesstrset)rk   r	   _attris        r!   test_hashable_pydotr   p   s7   
 	AJJsIqcNmuJ=JJsAy'/CJDJJvvJ* '*<.DE	h ++001E1Ea1HIOOTTV
VJAq 	V
	   GGI&IqCFI&#
r{{33A67==+   

 's   6E Ec                     [         R                  " 5       n U R                  SS/5        [         R                  R	                  U SS9n[        U[        5      (       d   eSU;  d   eSU;   d   eSU;  d   eSU;   d   eS	U;   d   eS
U;   d   eg )Nr   )r   r   r   r   rS   r   rQ   r   r   r   )r1   re   r/   r2   r3   r4   r5   )r	   rB   s     r!   test_pydot_numerical_namer      s    

Aj&)*;;++AE+:LlD))))l"""l""",,rO   )__doc__ior   rb   networkxr1   networkx.utilsr   importorskipr   r   rj   rc   rd   re   rf   rU   MultiDiGraphr   r   r]   rO   r!   <module>r      s|    -    'G$M" M"`& 288RZZH*
rO   