
    \Mhm                         d Z ddlmZ ddlZddlZddlmZ  ej        d          Z	 G d d          Z
d Zej                            d	ej        ej        ej        ej        g          d
             Zd ZdS )z'Unit tests for pydot drawing functions.    )StringION)graphs_equalpydotc                       e Zd Zej                            d ej                     ej                    f          ej                            dd          d                         Z	d Z
dS )	TestPydotGprog)neatodotc                 R   d|j         d<   |                    g d           |                    d           t          j                            ||          }t          |t                    sJ t          j                            |          }|	                    t          j        
                    |                    }t          ||          sJ |dz  }|                    |           t                              |d          }t          |          d	k    sJ |d
         }	t!          d |                                D                       }
t!          d |	                                D                       }|
|k    sJ t!          d |                                D                       }t!          d |	                                D                       }||k    sJ t          j                            |          }|	                    |          }t          ||          sJ dS )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   >   K   | ]}|                                 V  d S Nget_name.0ps     a/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/networkx/drawing/tests/test_pydot.py	<genexpr>z'TestPydot.test_pydot.<locals>.<genexpr>:   s*      <<QAJJLL<<<<<<    c              3   >   K   | ]}|                                 V  d S r   r   r   s     r    r!   z'TestPydot.test_pydot.<locals>.<genexpr>=   s*      >>QAJJLL>>>>>>r"   c              3   f   K   | ],}|                                 |                                fV  -d S r   
get_sourceget_destinationr   es     r    r!   z'TestPydot.test_pydot.<locals>.<genexpr>C   s;      UUaQ\\^^Q%6%6%8%89UUUUUUr"   c              3   f   K   | ],}|                                 |                                fV  -d S r   r%   r(   s     r    r!   z'TestPydot.test_pydot.<locals>.<genexpr>F   s;      WWaQ\\^^Q%6%6%8%89WWWWWWr"   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_pydotzTestPydot.test_pydot   s#     	
IIIJJJ	

3 {///==,----- K  ## [[//2233 Ar"""""9$ 	
E ,,%',JJ 8}}!!!! qk <<!//*;*;<<<<< >>#*;*;*=*=>>>>> Rxxxx UU1??CTCTUUUUU WW3CTCTCVCVWWWWW Rxxxx k""5))kk# As#######r"   c                 X   t          j                    }d|j        d<   |                    ddd           t	                      }t           j                            ||           |                    d           t           j                            |          }t          ||          sJ d S )Nr   r   120)keyr   )
r.   
MultiGraphr+   add_edger   r/   	write_dotseekr<   r   )r=   r   fhHs       r    test_read_writezTestPydot.test_read_writeR   s    MOO	

3
%%%ZZ
a$$$



K  $$Aq!!!!!!!r"   N)__name__
__module____qualname__pytestmarkparametrizer.   GraphDiGraphrJ   rV    r"   r    r   r      s        [S828::zrz||"<==[V%566@$ @$ 76 >=@$D" " " " "r"   r   c                    t          j                    }|                    g d           t           j                            |d          }t          |t                    sJ t           j                            |          }t          j        t           j                            |                    }t          ||          sJ dS )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   )ra   r   r   r   r   N)
r.   r]   r,   r/   r0   r1   r2   r3   r5   r   )r>   r   r?   r@   rA   s        r    test_pydot_issue_7581rb   ]   s     	

AMMMNNN;++AE+::LlD))))) 	QA	"+((++	,	,B2r"   
graph_typec           	          |             }|                     dt          dg          dd           |                     dddd	t          d
g                     |                     ddd           dddddddddigd t          j                            t          j                            |                    j                                        D             k    sJ d |                                D             t          t          j                            t          j                            |                    j                  k    sJ d S )N5r   z"Example:A"F)tlrL      T)node1ri   )wrf   rg   node)   rl   string)rj   FalseTruez
('node1',)zfrozenset({'node1'})rj   c                     g | ]\  }}}|	S r_   r_   )r   _attrs      r    
<listcomp>z'test_hashable_pydot.<locals>.<listcomp>~   s.     
 
 
Aq$ 	
 
 
r"   c                 ,    h | ]}t          |          S r_   )str)r   is     r    	<setcomp>z&test_hashable_pydot.<locals>.<setcomp>   s    &&&qCFF&&&r"   )
rQ   	frozensetr.   r/   r5   r3   edgesdatanodesset)rc   r   s     r    test_hashable_pydotr}   p   s`   
 	
AJJsIqcNNmuJ===JJsAy'/C/CJDDDJJvvJ*** '**<.DEE	h
 
+001E1Ea1H1HIIOTTVV
 
 
	    '&AGGII&&&#
r{33A6677=+ +      r"   c                     t          j                    } |                     ddg           t           j                            | d          }t          |t                    sJ d|vsJ d|v sJ d|vsJ d|v sJ d	|v sJ d
|v sJ d S )Nr   )r   r   r   r   rN   r   rL   r   r   r   )r.   r]   r,   r/   r0   r1   r2   )r   r?   s     r    test_pydot_numerical_namer      s    


Aj&)***;++AE+::LlD)))))l""""l"""",,r"   )__doc__ior   rZ   networkxr.   networkx.utilsr   importorskipr   r   rb   r[   r\   r]   r^   rP   MultiDiGraphr}   r   r_   r"   r    <module>r      s    - -            ' ' ' ' ' 'G$$M" M" M" M" M" M" M" M"`  & 28RZH   *
 
 
 
 
r"   