o
    ]ZŽhU"  ã                   @   sL   d Z ddlZddlZe d¡ZddlZddlmZm	Z	m
Z
 G dd„ dƒZdS )z$Unit tests for PyGraphviz interface.é    NÚ
pygraphviz)Úedges_equalÚgraphs_equalÚnodes_equalc                   @   s\  e Zd Zdd„ Zdd„ Zej de 	¡ e 
¡ e ¡ e ¡ f¡dd„ ƒZdd	„ Zej d
ej	ej
ejejf¡dd„ ƒZdd„ Zdd„ Zej d
ej	ejf¡dd„ ƒZdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Zd!d"„ Zejjd#d$d%d&„ ƒZd'd(„ Zd)d*„ Zejjd+d$d,d-„ ƒZd.d/„ Z ej d0e!d1ƒ¡d2d3„ ƒZ"d4d5„ Z#d6d7„ Z$d8d9„ Z%d:S );Ú
TestAGraphc                 C   s*   g d¢}|  |¡ | d¡ d|jd< |S )N)©ÚAÚB©r   ÚCr
   )r	   r   )r   ÚDÚEZbronzeÚmetal)Zadd_edges_fromÚadd_nodeÚgraph)ÚselfÚGÚedges© r   úQ/var/www/auris/lib/python3.10/site-packages/networkx/drawing/tests/test_agraph.pyÚbuild_graph   s
   


zTestAGraph.build_graphc                 C   sH   t | ¡ | ¡ ƒsJ ‚t| ¡ | ¡ ƒsJ ‚|jd |jd ks"J ‚d S )Nr   )r   Únodesr   r   r   )r   ZG1ZG2r   r   r   Úassert_equal   s   zTestAGraph.assert_equalr   c                 C   sä   |   |¡}tj |¡}tj |¡}|  ||¡ |d }tjj ||¡ tj |¡}|  ||¡ |d }t	|dƒ}tjj ||¡ W d   ƒ n1 sKw   Y  t	|ƒ}tj |¡}W d   ƒ n1 sew   Y  |  ||¡ d S )Nztest.dotzfh_test.dotÚw)
r   ÚnxÚ	nx_agraphÚ	to_agraphÚfrom_agraphr   ZdrawingZ	write_dotZread_dotÚopen)r   r   Útmp_pathr   ÚHÚfnameZHinÚfhr   r   r   Útest_agraph_roundtripping   s    
ÿ
ÿz$TestAGraph.test_agraph_roundtrippingc                 C   s6   t jdd}t j |¡}t j |¡}|jdksJ ‚d S )NÚtest)Úname)r   ÚGraphr   r   r   r%   ©r   r   r   r    r   r   r   Útest_from_agraph_name1   s   z TestAGraph.test_from_agraph_nameÚgraph_classc                 C   s8   t  d¡}t j |¡}t jj||d}t||ƒsJ ‚d S )Né   )Zcreate_using)r   Z
path_graphr   r   r   Ú
isinstance)r   r)   r   r   r    r   r   r   Útest_from_agraph_create_using7   s   
z(TestAGraph.test_from_agraph_create_usingc                 C   sp   t  ¡ }| ddg¡ t j |¡}|jdddd t j |¡}t|t jƒs'J ‚ddddif|jdd	v s6J ‚d S )
Nr   é   Úfoo)ÚkeyÚ0Ú1r/   T©Údata)	r   r&   Úadd_nodes_fromr   r   Úadd_edger   r+   r   r'   r   r   r   Útest_from_agraph_named_edges@   s   "z'TestAGraph.test_from_agraph_named_edgesc                 C   sD   t  ¡ }|jddd t j |¡}t| ¡ d jƒddiks J ‚d S )Nr-   Úred©Úcolorr   r9   )r   r&   r   r   r   Údictr   Úattr©r   r   r   r   r   r   Útest_to_agraph_with_nodedataL   s   "z'TestAGraph.test_to_agraph_with_nodedatac                 C   sR   |ƒ }|  ddg¡ |jdddd tj |¡}t| ¡ d jƒddiks'J ‚d S )Nr   r-   Úyellowr8   r9   )r4   r5   r   r   r   r:   r   r;   )r   r)   r   r   r   r   r   Útest_to_agraph_with_edgedataR   s
   "z'TestAGraph.test_to_agraph_with_edgedatac                 C   s~   t  d¡}t|d ƒ}t jj||dd\}}||ksJ ‚t|dƒ}| ¡ }W d   ƒ n1 s0w   Y  t|ƒdks=J ‚d S )Nr*   z	graph.pngF)ÚpathÚshowÚrbr   )r   Úcomplete_graphÚstrr   Úview_pygraphvizr   ÚreadÚlen)r   r   r   Z
input_pathZout_pathr   r"   r3   r   r   r   Útest_view_pygraphviz_pathZ   s   

ÿz$TestAGraph.test_view_pygraphviz_pathc                 C   s8   t  d¡}t jj|ddd\}}|dd … dksJ ‚d S )Nr*   r-   F)ÚsuffixrA   iúÿÿÿz_1.png)r   rC   r   rE   )r   r   r   r@   r   r   r   r   Ú test_view_pygraphviz_file_suffixd   s   
z+TestAGraph.test_view_pygraphviz_file_suffixc                 C   s<   t  ¡ }t t jt jj|¡ t  dd¡}t jj|dd d S )Né   é   F©rA   )r   r&   ÚpytestZraisesZNetworkXExceptionr   rE   Zbarbell_graph)r   r   r   r   r   Útest_view_pygraphvizi   s   zTestAGraph.test_view_pygraphvizc                 C   sb   t  ¡ }|jdddd |jdddd t jj|ddd	\}}| ¡ D ]}|jd d
v s.J ‚q#d S )Nr-   é   é   )Úweightr*   é   rR   F©Z	edgelabelrA   )Ú7Ú8)r   r&   r5   r   rE   r   r;   )r   r   r@   r   Úedger   r   r   Útest_view_pygraphviz_edgelabelo   s   ÿz)TestAGraph.test_view_pygraphviz_edgelabelc                 C   sL   t  d¡}dd„ }t jj||dd\}}| ¡ D ]}|jd dks#J ‚qd S )Nr*   c                 S   s   dS )Nr.   r   r2   r   r   r   Ú	foo_labelz   s   zETestAGraph.test_view_pygraphviz_callable_edgelabel.<locals>.foo_labelFrT   Úlabelr.   )r   rC   r   rE   r   r;   )r   r   rY   r@   r   rW   r   r   r   Ú'test_view_pygraphviz_callable_edgelabelw   s   
ÿz2TestAGraph.test_view_pygraphviz_callable_edgelabelc                 C   s~   t  ¡ }|jddddd |jddddd t jj|ddd\}}| ¡ }t|ƒd	ks-J ‚|D ]}|jd
  ¡ dv s<J ‚q/d S )Nr   r-   Ú	left_fork)r/   r%   Ú
right_forkr%   FrT   rP   rZ   )r\   r]   )	r   Ú
MultiGraphr5   r   rE   r   rG   r;   Ústrip)r   r   r@   r   r   rW   r   r   r   Ú*test_view_pygraphviz_multigraph_edgelabels   s   ÿz5TestAGraph.test_view_pygraphviz_multigraph_edgelabelsc                 C   sL   t  ¡ }|  |¡}d|jd d< d|jd d< d|jd d< t j |¡}d S )NÚkeywordr   Únr   ÚuÚv)r   r&   r   r   r   r   r   r<   r   r   r   Ú!test_graph_with_reserved_keywords‹   s   
z,TestAGraph.test_graph_with_reserved_keywordsc                 C   s0   t  d¡}t jj|dd\}}|ji ksJ ‚d S )NrP   FrM   )r   rC   r   rE   r   ©r   r   r@   r   r   r   r   Ú,test_view_pygraphviz_no_added_attrs_to_input–   s   
z7TestAGraph.test_view_pygraphviz_no_added_attrs_to_inputzknown bug in clean_attrs)Úreasonc                 C   sZ   t  d¡}ddi|jd< ddi|jd< t jj|dd	\}}|jddiddid
œks+J ‚d S )NrP   Úwidthú0.80ÚnodeÚfontsizeÚ14rW   FrM   )rk   rW   )r   rC   r   r   rE   rf   r   r   r   Ú2test_view_pygraphviz_leaves_input_graph_unmodified›   s
   
 z=TestAGraph.test_view_pygraphviz_leaves_input_graph_unmodifiedc                 C   sj   t  d¡}ddi|jd< ddi|jd< t jj|dd	\}}t|jƒd dks(J ‚t|jƒd dks3J ‚d S )
NrP   ri   rj   rk   rl   rm   rW   FrM   )r   rC   r   r   rE   r:   Z	node_attrZ	edge_attrrf   r   r   r   Útest_graph_with_AGraph_attrs¤   s   
z'TestAGraph.test_graph_with_AGraph_attrsc                 C   sv   t  ¡ }t j |¡}t j |¡}t j |¡}t j |¡}t||ƒs#J ‚i |jd< i |jd< i |jd< t||ƒs9J ‚d S )Nr   rk   rW   )r   r&   r   r   r   r   r   )r   r   r   r    ZAAZHHr   r   r   Útest_round_trip_empty_graph®   s   


z&TestAGraph.test_round_trip_empty_graphz-integer->string node conversion in round tripc                 C   s4   t  d¡}t j |¡}t j |¡}t||ƒsJ ‚d S )Nr*   )r   rC   r   r   r   r   r'   r   r   r   Útest_round_trip_integer_nodes»   s   
z(TestAGraph.test_round_trip_integer_nodesc                 C   s6   |   t ¡ ¡}tj |¡}tj |¡}||ksJ ‚d S ©N)r   r   r&   r   Zgraphviz_layoutÚpygraphviz_layout)r   r   Zpos_graphvizZpos_pygraphvizr   r   r   Útest_graphviz_aliasÂ   s   zTestAGraph.test_graphviz_aliasÚrooté   c                 C   sx   t  d¡}t j |¡}t jj|d|d}|jd|› dd tdd„ t| d¡j	ƒd	  
d
¡D ƒƒ}|d |ks:J ‚d S )Nrv   Zcirco)Úprogru   z-Groot=)Úargsrw   c                 s   s    | ]}t |ƒV  qd S rr   )Úfloat)Ú.0rd   r   r   r   Ú	<genexpr>Ò   s   € z9TestAGraph.test_pygraphviz_layout_root.<locals>.<genexpr>r1   Úposú,r-   )r   rC   r   r   rs   ÚlayoutÚtupler:   Zget_noder;   Úsplit)r   ru   r   r   Zpygv_layoutZa1_posr   r   r   Útest_pygraphviz_layout_rootÈ   s   
(z&TestAGraph.test_pygraphviz_layout_rootc                 C   ó`   t  ¡ }|  |¡}d|jd< t jj|dd}t| ¡ ƒ}t|ƒdks$J ‚t|d ƒdks.J ‚d S )NrP   ÚdimenÚneato©rw   rv   r   ©	r   r&   r   r   r   rs   ÚlistÚvaluesrG   ©r   r   r|   r   r   r   Útest_2d_layoutÕ   ó   

zTestAGraph.test_2d_layoutc                 C   r‚   )Nr*   rƒ   r„   r…   rv   r   r†   r‰   r   r   r   Útest_3d_layoutÞ   r‹   zTestAGraph.test_3d_layoutc                 C   sx   t  ¡ }|jddd |jddd t j |¡}tjdd}| ¡  W d   ƒ n1 s-w   Y  t|ƒdks:J ‚d S )Nr   )r   r   )r|   r-   )r-   r-   T)Úrecord)	r   r&   r   r   r   ÚwarningsÚcatch_warningsr~   rG   )r   r   r   r   r   r   r   Útest_no_warnings_raisedç   s   
ÿz"TestAGraph.test_no_warnings_raisedN)&Ú__name__Ú
__module__Ú__qualname__r   r   rN   ÚmarkZparametrizer   r&   ZDiGraphr^   ZMultiDiGraphr#   r(   r,   r6   r=   r?   rH   rJ   rO   rX   r[   r`   re   rg   Zxfailrn   ro   rp   rq   rt   Úranger   rŠ   rŒ   r   r   r   r   r   r      sH    ÿ
ÿ








		r   )Ú__doc__rŽ   rN   Zimportorskipr   Znetworkxr   Znetworkx.utilsr   r   r   r   r   r   r   r   Ú<module>   s    
