o
    h                     @   s~   d Z ddlmZ ddlZddlZddlmZ edZ	G dd dZ
dd	 Zejd
ejejejejgdd Zdd ZdS )z'Unit tests for pydot drawing functions.    )StringION)graphs_equalpydotc                   @   sD   e Zd Zejde e fejdddd Z	dd Z
dS )		TestPydotGprog)neatodotc                 C   s<  d|j d< |g d |d tjj||d}t|ts J tj|}|	tj
|}t||s6J |d }|| tj|dd}t|d	ksNJ |d
 }	tdd | D }
tdd |	 D }|
|ksnJ tdd | D }tdd |	 D }||ksJ tj|}|	|}t||sJ 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                 s       | ]}|  V  qd S Nget_name.0p r   \/var/www/html/env_mimamsha/lib/python3.10/site-packages/networkx/drawing/tests/test_pydot.py	<genexpr>9       z'TestPydot.test_pydot.<locals>.<genexpr>c                 s   r   r   r   r   r   r   r   r   <   r   c                 s        | ]}|  | fV  qd S r   
get_sourceget_destinationr   er   r   r   r   B       c                 s   r    r   r!   r$   r   r   r   r   E   r&   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Hinr   r   r   
test_pydot   s,   




zTestPydot.test_pydotc                 C   s^   t  }d|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seekr8   r   )r9   r   fhHr   r   r   test_read_writeQ   s   

zTestPydot.test_read_writeN)__name__
__module____qualname__pytestmarkparametrizer*   GraphDiGraphrF   rQ   r   r   r   r   r      s
    Br   c                  C   s8  t dg} tt t j|  W d    n1 sw   Y  tt t j|  W d    n1 s7w   Y  t  } | jdddd tt t j|  W d    n1 s^w   Y  | 	d | jdddd | j
 t jt j| j
 ksJ t  } | jddd	d
 tt t j|  W d    n1 sw   Y  t  } | jdddd
 | d d t jt j| d d ksJ t  } | jdddd
 | jdddd tt t j|  W d    n1 sw   Y  t  } | jdddd
 | jdddd dd | j D dd t jt j| j D ks/J t  } | dd d| d d d< tt t j|  W d    n	1 sXw   Y  t  } | dd d| d d d< | d d t jt j| d d ksJ t dg} t j| }t|tsJ d S )N)z	Example:Ar   z1.2filledz
red:yellow)style	fillcolorz"red:yellow"rG   rH   zbar:1)fooz"bar:1"zb:1zfoo:foo)barz"b:1"z	"foo:foo"c                 S      g | ]\}}}|qS r   r   r   _attrr   r   r   
<listcomp>~   s    z(test_pydot_issue_258.<locals>.<listcomp>r^   zf:ooz"f:oo")"Example:A"r   )r*   rX   rU   raises
ValueErrorr+   r/   r,   r)   remove_nodenodesdatar1   rY   rL   rK   edgesr-   r.   )r   layoutr   r   r   test_pydot_issue_258\   s`   
(,.rl   
graph_typec                 C   s   |  }|j dtdgddd |j dddd	td
gd |j dddd dddddddddigdd tjtj|j D ksFJ dd | D t	tjtj|jks^J d S )N5r   rd   F)tlrG      T)node1rr   )wro   rp   node)   ru   string)rs   FalseTruez
('node1',)zfrozenset({'node1'})rs   c                 S   r_   r   r   r`   r   r   r   rc      s    z'test_hashable_pydot.<locals>.<listcomp>c                 S   s   h | ]}t |qS r   )str)r   ir   r   r   	<setcomp>   s    z&test_hashable_pydot.<locals>.<setcomp>)
rL   	frozensetr*   r+   r1   r/   rj   ri   rh   set)rm   r   r   r   r   test_hashable_pydot   s   
	r~   c                  C   s   t  } | ddg t jj| dd}t|tsJ d|vs J d|v s&J d|vs,J d|v s2J d	|v s8J d
|v s>J d S )Nr   )r   r   r	   r   rI   r   rG   r   r   r   )r*   rX   r(   r+   r,   r-   r.   )r   r;   r   r   r   test_pydot_numerical_name   s   r   )__doc__ior   rU   networkxr*   networkx.utilsr   importorskipr   r   rl   rV   rW   rX   rY   rK   MultiDiGraphr~   r   r   r   r   r   <module>   s    
P6
