U
    ¹mœd¸k  ã                   @   sˆ  d Z ddlZddlZddlZddlZe d¡Ze d¡Ze d¡ e d¡Z	de	j
d< ddlZe d	d
¡Zdd„ Zdd„ Zdd„ Zdd„ Zej ddddgdfddgdfddgdfddgd ff	¡ej d!dd"gf¡d#d$„ ƒƒZej ddddgdfddgdfddgdfddgd ff	¡ej d!dd"gf¡d%d&„ ƒƒZd'd(„ Zd)d*„ Zd+d,„ Zd-d.„ Zd/d0„ Zej d1ejejf¡d2d3„ ƒZej d4d5d6gd6ff¡d7d8„ ƒZej d4d5d6gd6ff¡d9d:„ ƒZ ej d!d"d;d<gdd"d;gf¡d=d>„ ƒZ!d?d@„ Z"dAdB„ Z#ej dCdD¡dEdF„ ƒZ$ej dGdHgdIgdJgdIdKdLgdIdKgdIdKdLdMgf¡dNdO„ ƒZ%dPdQ„ Z&ejj'dRdS„ ƒZ(dTdU„ Z)dVdW„ Z*dXdY„ Z+dZd[„ Z,d\d]„ Z-d^d_„ Z.d`da„ Z/ej dbdcdddedcgf¡dfdg„ ƒZ0dhdi„ Z1djdk„ Z2ej dldm¡dndo„ ƒZ3dpdq„ Z4drds„ Z5dtdu„ Z6dvdw„ Z7ej dxej8ej9f¡dydz„ ƒZ:ej dxej8ej9f¡d{d|„ ƒZ;d}d~„ Z<dd€„ Z=d�d‚„ Z>dƒd„„ Z?ej d…d†dKidbdeid‡dˆid‰ddidŠddif¡d‹dŒ„ ƒZ@dS )�z,Unit tests for matplotlib drawing functions.é    NÚ
matplotlibÚnumpyZPSzmatplotlib.pyplotFztext.usetexé   é   c                  C   sŠ   z^tjtjtjtjtjtj	tj
g} ddddœg}t | |¡D ]\}}|tf|Ž t d¡ q<W 5 zt  d¡ W n tk
r‚   Y nX X d S )Nútest.psÚblackéd   é   )Ú
node_colorÚ	node_sizeÚwidth)ÚosÚunlinkÚOSErrorÚnxZdraw_circularZdraw_kamada_kawaiZdraw_planarZdraw_randomZdraw_spectralÚdraw_springÚ
draw_shellÚ	itertoolsÚproductÚbarbellÚpltÚsavefig)Z	functionsÚoptionsÚfunctionÚoption© r   úZ/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/networkx/drawing/tests/test_pylab.pyÚ	test_draw   s"    ù	r   c                  C   sn   zBttdƒƒttddƒƒttddƒƒg} tjt| d� t 	d¡ W 5 zt  d¡ W n tk
rf   Y nX X d S )Nr   r   é
   é   ©Znlist)
r   r   r   ÚlistÚranger   r   r   r   r   r    r   r   r   Útest_draw_shell_nlist+   s    &r#   c                  C   s(   t t ¡ ƒ} tjt| dtjjdd� d S )Nr   T)Ú
edge_colorr   Z	edge_cmapZwith_labels)r"   r   Znumber_of_edgesr   r   r   ÚcmZBlues)Úcolorsr   r   r   Útest_edge_colormap7   s        ÿr'   c                   C   s   t  t ¡ ¡ d S ©N)r   r   r   Úto_directedr   r   r   r   Útest_arrows?   s    r*   )r$   Úexpected)Nr   )ÚrÚredr,   r-   )©ç      ð?r/   g        Úyellowr.   r0   )©r   é   r   r2   Úlimer1   r3   )ú#0000ffÚbluer4   r5   Úedgelist©r   r2   c                 C   s<   t  d¡}t j|t  |¡|| d�}tj | ¡ |¡s8t‚dS )z`Tests ways of specifying all edges have a single color for edges
    drawn with a LineCollectionr	   ©Úposr6   r$   N)	r   Ú
path_graphÚdraw_networkx_edgesÚrandom_layoutÚmplr&   Ú
same_colorÚ	get_colorÚAssertionError)r$   r+   r6   ÚGÚdrawn_edgesr   r   r   Ú!test_single_edge_color_undirectedD   s    
   ÿrC   c                 C   sL   t jdt jd�}t j|t  |¡|| d�}|D ]}tj | ¡ |¡s,t	‚q,dS )zaTests ways of specifying all edges have a single color for edges drawn
    with FancyArrowPatchesr	   ©Zcreate_usingr8   N)
r   r:   ÚDiGraphr;   r<   r=   r&   r>   Úget_edgecolorr@   )r$   r+   r6   rA   rB   Úfapr   r   r   Útest_single_edge_color_directed^   s       ÿrH   c                  C   sò  t jdt jd�} dd„ tt| ƒƒD ƒ}dD ]j}t j| ||d�}|D ]}tj | 	¡ |¡sBt
‚qBt j| |ddg|d	�}|D ]}tj | 	¡ |¡sxt
‚qxq*t j| |ddd
gdd	�}|D ]}tj | 	¡ d¡s²t
‚q²t j| |ddd
dgdd	�}|D ]}tj | 	¡ d¡sìt
‚qìt j| |ddd
gdd	�}tj |d  	¡ |d  	¡ ¡�sDt
‚|D ]}tj | 	¡ d¡�rHt
‚�qHt j| |ddd
dgdd	�}tj |d  	¡ |d  	¡ ¡�s¦t
‚tj |d  	¡ |d  	¡ ¡�sÊt
‚|D ]}tj | 	¡ d¡�rÎt
‚�qÎdS )z†If edge_color is a sequence with the same length as edgelist, then each
    value in edge_color is mapped onto each edge via colormap.r   rD   c                 S   s   i | ]}|||f“qS r   r   ©Ú.0Únr   r   r   Ú
<dictcomp>}   s      z8test_edge_color_tuple_interpretation.<locals>.<dictcomp>)©r   r   r2   ©r   r   r2   r2   ©r$   r7   ©r2   é   )r6   r$   ©rQ   r	   rN   r5   )r	   r   rM   r   r2   rQ   r	   N)r   r:   rE   r"   Úlenr;   r=   r&   r>   rF   r@   )rA   r9   ÚecrB   rG   r   r   r   Ú$test_edge_color_tuple_interpretationy   st       ÿ   ÿ  
 ÿ   ÿ
 
ÿ
  
 ÿ
 
ÿ

 
ÿ
rU   c                  C   sZ   t  ¡ } t t ¡}d}tj| ||d�}t|t |¡ƒD ]\}}tj	 
| ¡ |¡s6t‚q6dS )zZTest that the edge colors are cycled when there are fewer specified
    colors than edges.)r,   ÚgÚbrO   N)r   r)   r   r<   r;   Úzipr   Úcycler=   r&   r>   rF   r@   ©rA   r9   Z
edgecolorsrB   rG   r+   r   r   r   Ú.test_fewer_edge_colors_than_num_edges_directed²   s    
r[   c                  C   sd   t jdt jd�} t  t¡}d}t j| ||d�}t||dd… ƒD ]\}}tj 	| 
¡ |¡s@t‚q@dS )z\Test that extra edge colors are ignored when there are more specified
    colors than edges.r   rD   )r,   rV   rW   ÚcrO   Néÿÿÿÿ)r   r:   rE   r<   r   r;   rX   r=   r&   r>   rF   r@   rZ   r   r   r   Ú-test_more_edge_colors_than_num_edges_directed½   s    
r^   c                  C   sl   t jtt  t¡ddgddd�} |  ¡  ¡ }t|  ¡ ƒdks>t‚t	j
 |d d… d¡sXt‚|d dksht‚d S ©Nr7   rP   Úpurpleçš™™™™™É?)r9   r6   r$   ÚalpharQ   r]   )r   r;   r   r<   r?   ZsqueezerS   Ú	get_pathsr@   r=   r&   r>   )Zedge_collectionrT   r   r   r   Ú3test_edge_color_string_with_global_alpha_undirectedÈ   s    ûrd   c                  C   sr   t jt ¡ t  t¡ddgddd�} t| ƒdks2t‚| D ]6}| ¡ }tj	 
|d d… d¡s\t‚|d dks6t‚q6d S r_   )r   r;   r   r)   r<   rS   r@   rF   r=   r&   r>   )rB   rG   rT   r   r   r   Ú1test_edge_color_string_with_global_alpha_directedÖ   s    ûre   Ú
graph_typec                 C   sV   t jd| d�}dd„ tt|ƒƒD ƒ}t  ||¡}t|tƒrB|d }| ¡ dksRt‚dS )z^Test the default linewidth for edges drawn either via LineCollection or
    FancyArrowPatches.rQ   rD   c                 S   s   i | ]}|||f“qS r   r   rI   r   r   r   rL   ê   s      z1test_edge_width_default_value.<locals>.<dictcomp>r   r2   N)	r   r:   r"   rS   r;   Ú
isinstancer!   Úget_linewidthr@   )rf   rA   r9   rB   r   r   r   Útest_edge_width_default_valueå   s    
ri   )Ú	edgewidthr+   ©r	   r	   r	   c                 C   sX   t  d¡}dd„ tt|ƒƒD ƒ}t j||| d�}t| ¡ ƒdksDt‚| ¡ |ksTt‚d S )Nr   c                 S   s   i | ]}|||f“qS r   r   rI   r   r   r   rL   ú   s      z;test_edge_width_single_value_undirected.<locals>.<dictcomp>©r   r	   )r   r:   r"   rS   r;   rc   r@   rh   )rj   r+   rA   r9   rB   r   r   r   Ú'test_edge_width_single_value_undirectedñ   s
    
rm   c                 C   sd   t jdt jd�}dd„ tt|ƒƒD ƒ}t j||| d�}t|ƒdksFt‚|D ]}| ¡ |ksJt‚qJd S )Nr   rD   c                 S   s   i | ]}|||f“qS r   r   rI   r   r   r   rL   	  s      z9test_edge_width_single_value_directed.<locals>.<dictcomp>rl   r	   )r   r:   rE   r"   rS   r;   r@   rh   )rj   r+   rA   r9   rB   rG   r   r   r   Ú%test_edge_width_single_value_directed   s    rn   rP   rR   c                 C   sV   t  ¡ }t |¡}d}tj||| |d�}t|t |¡ƒD ]\}}| ¡ |ks8t	‚q8d S )N)ç      à?ç       @g      (@)r6   r   )
r   r)   r   r<   r;   rX   r   rY   rh   r@   )r6   rA   r9   ÚwidthsrB   rG   Zexpected_widthr   r   r   Útest_edge_width_sequence  s    	
rr   c                  C   sx   t jdt jd�} t  | ¡}t j| |ddgd�}dd„ |D ƒ}t j| |dd	gdd	d
�}dd„ |D ƒ}tj ||¡stt‚dS )zyTest that edge_vmin and edge_vmax properly set the dynamic range of the
    color map when num edges == len(edge_colors).r	   rD   r   r/   rO   c                 S   s   g | ]}|  ¡ ‘qS r   ©rF   ©rJ   Úer   r   r   Ú
<listcomp>(  s     z7test_edge_color_with_edge_vmin_vmax.<locals>.<listcomp>ra   gš™™™™™é?)r$   Z	edge_vminZ	edge_vmaxc                 S   s   g | ]}|  ¡ ‘qS r   rs   rt   r   r   r   rv   -  s     N)	r   r:   rE   r<   r;   r=   r&   r>   r@   )rA   r9   rB   Zorig_colorsZscaled_colorsr   r   r   Ú#test_edge_color_with_edge_vmin_vmax!  s    
    ÿrw   c                  C   s`   t jdt jd�} dd„ tt| ƒƒD ƒ}t  | |¡}t|ƒdksBt‚|D ]}| ¡ dksFt‚qFdS )z>Test default linestyle for edges drawn with FancyArrowPatches.r   rD   c                 S   s   i | ]}|||f“qS r   r   rI   r   r   r   rL   4  s      z9test_directed_edges_linestyle_default.<locals>.<dictcomp>r	   ZsolidN©r   r:   rE   r"   rS   r;   r@   Úget_linestyle)rA   r9   rB   rG   r   r   r   Ú%test_directed_edges_linestyle_default1  s    rz   Ústyle)Údashedú--©r2   ©r2   r2   c                 C   sd   t jdt jd�}dd„ tt|ƒƒD ƒ}t j||| d�}t|ƒdksFt‚|D ]}| ¡ | ksJt‚qJdS )z¬Tests support for specifying linestyles with a single value to be applied to
    all edges in ``draw_networkx_edges`` for FancyArrowPatch outputs
    (e.g. directed edges).r   rD   c                 S   s   i | ]}|||f“qS r   r   rI   r   r   r   rL   K  s      z>test_directed_edges_linestyle_single_value.<locals>.<dictcomp>©r{   r	   Nrx   )r{   rA   r9   rB   rG   r   r   r   Ú*test_directed_edges_linestyle_single_value=  s    r�   Ú	style_seqr|   r}   r~   ú-ú:z-.c                 C   st   t jdt jd�}dd„ tt|ƒƒD ƒ}t j||| d�}t|ƒdksFt‚t|t 	| ¡ƒD ]\}}| 
¡ |ksVt‚qVdS )zˆTests support for specifying linestyles with sequences in
    ``draw_networkx_edges`` for FancyArrowPatch outputs (e.g. directed edges).r   rD   c                 S   s   i | ]}|||f“qS r   r   rI   r   r   r   rL   c  s      z:test_directed_edges_linestyle_sequence.<locals>.<dictcomp>r€   r	   N)r   r:   rE   r"   rS   r;   r@   rX   r   rY   ry   )r‚   rA   r9   rB   rG   r{   r   r   r   Ú&test_directed_edges_linestyle_sequenceS  s    r…   c               
   C   sF  t  ¡ } t  | ¡}t j| |ddddgdddd� t j| |d	d
ddgddddddgd� t j| |ddd� t j| |ddddgdddd� t j| |ddddgdddd� t j| |ddddgdddddd� i }d|d< d|d< d |d< d!|d< d"|d	< d#|d
< d$|d< d%|d< t j| ||d&d'� t j| |d d(d)� t j| |dd*id+� d S ),Nr   r2   rQ   r	   r,   iô  g      è?)Únodelistr
   r   rb   r   é   r   é   rW   g      Ð?ro   r/   )r   rb   r7   rP   rR   )r	   r   é   )r6   r   rb   r$   )r   r‡   )r‡   r   )r   rˆ   )rˆ   r   T)r6   ÚarrowsÚmin_source_marginÚmin_target_marginr   r$   z$a$z$b$z$c$z$d$z$\alpha$z$\beta$z$\gamma$z$\delta$é   )Z	font_sizeF)Úedge_labelsÚrotatez4-5©rŽ   )r   Zcubical_graphZspring_layoutÚdraw_networkx_nodesr;   Zdraw_networkx_labelsÚdraw_networkx_edge_labels)rA   r9   Úlabelsr   r   r   Útest_labels_and_colorsk  sr    
  
   ÿ

ú	
ú
ú
ør”   c                  C   sˆ   t  ¡ } t ¡ \}}ddddddœ}t j| |ddd	d
dgdd� t j| |ddgdd� t j| |ddd� | d¡ t ¡  t d¡ |S )N©r   r   ©r2   r   r7   r   )ro   rp   )r   r2   rQ   r	   r   i¸  r   r2   rQ   r	   ztab:blue)r   r†   r
   iÐ  r   z
tab:orangero   r   )rb   r   g)\�Âõ(¼?Úoff)	r   Zhouse_graphr   Úsubplotsr‘   r;   ZmarginsZtight_layoutZaxis)rA   ÚfigÚaxr9   r   r   r   Útest_house_with_colors¦  s,    
û    ÿ

r›   c                  C   s4   t  ¡ \} }tjt|d� tjtt t¡|d� d S )N©rš   )r   r˜   r   Údrawr   r’   Úcircular_layout)r™   rš   r   r   r   Ú	test_axesÀ  s    rŸ   c                  C   s   t  ¡ } t  | ¡ d S r(   )r   ÚGraphr�   ©rA   r   r   r   Útest_empty_graphÆ  s    r¢   c                  C   sÖ   dd l } t ddg¡}t ddg¡}t |¡}ttj||g d�tjj	ƒsLt
‚ttj||g d�tjj	ƒsjt
‚tj||g dd�g ks„t
‚tj||g dd�g ksžt
‚tj||g dd�g ks¸t
‚tj||g dd�g ksÒt
‚d S )Nr   rP   rR   )r†   T)r6   rŠ   F)Úmatplotlib.collectionsr   r    rE   rž   rg   r‘   r=   ÚcollectionsZPathCollectionr@   r;   )r   rA   ÚDGr9   r   r   r   Ú#test_draw_empty_nodes_return_valuesË  s     
 ÿ ÿr¦   c                  C   s<   t jdt jd�} t j| dgd� t j| dgdddgd� d S )	Nr	   rD   )r   r2   r   ©r6   r   é   r   )r6   r   )r   r:   ZMultiDiGraphÚdraw_networkxr¡   r   r   r   Útest_multigraph_edgelist_tuplesá  s    rª   c                     sœ   t  t¡} t ¡ }| d¡ t jt| ddgd� ttjƒ‰ ‡ fdd„t	ˆ ƒD ƒ}t	ˆ ƒ}| d¡ t jt| ||d� | 
d	¡ | d
¡ t jt| |d� d S )Néƒ   çš™™™™™¹?ra   )rb   c                    s   g | ]}|ˆ  ‘qS r   r   )rJ   Úx©Z	num_nodesr   r   rv   ð  s     z#test_alpha_iter.<locals>.<listcomp>é„   )r
   rb   r2   é…   )r   r<   r   r   ZfigureZadd_subplotr‘   rS   Únodesr"   Úappend)r9   r™   rb   r&   r   r®   r   Útest_alpha_iterè  s    





r³   c                	   C   s,   t jtdd�� tjtdd� W 5 Q R X d S )NzReceived invalid argument©ÚmatchÚbar)Zfoo)ÚpytestÚraisesÚ
ValueErrorr   r�   r   r   r   r   r   Útest_error_invalid_kwdsú  s    rº   c               	   C   sH   t  ddddg¡} dddg}tjtdd	�� t j| |d
� W 5 Q R X d S )Nr7   ©r   rQ   ©r   r	   ©r2   r	   r2   rQ   r	   z1arrowsize should have the same length as edgelistr´   )Ú	arrowsize)r   rE   r·   r¸   r¹   r�   )rA   r¾   r   r   r   Ú+test_draw_networkx_arrowsize_incorrect_sizeÿ  s    
 ÿr¿   r¾   é   r   r¨   c                 C   s~   t  dddg¡}ddddœ}t j||| d�}t| tƒr@t | ¡n| } t|| ƒD ]*\}}t|tj	j
ƒsht‚| ¡ |ksNt‚qNd S )Nr7   r»   rP   r•   r–   )r   r2   rQ   )r9   r¾   )r   rE   r;   rg   Úintr   ÚrepeatrX   r=   ÚpatchesÚFancyArrowPatchr@   Zget_mutation_scale)r¾   rA   r9   ÚedgesrG   r+   r   r   r   Útest_draw_edges_arrowsize  s    rÆ   c                   C   s   t jtt ddg¡d� d S )Nr»   r¼   r§   )r   r©   r   ÚnpÚarrayr   r   r   r   Útest_np_edgelist  s    rÉ   c               	   C   s@   t  d¡} dddœ}tjt jdd�� t  | |¡ W 5 Q R X d S )Nr	   r•   r   r7   zhas no positionr´   )r   r:   r·   r¸   ÚNetworkXErrorr‘   ©rA   r9   r   r   r   Ú*test_draw_nodes_missing_node_from_position  s    

rÌ   Ú
node_shape)ÚoÚsc           	      C   s²   t  ¡ \}}t dg¡}dddœ}tj|||| d�d }| ¡  ¡ ddd…df }tj|||| ddd	�d }| ¡  ¡ ddd…df }|d |d ksšt‚|d
 |d
 k s®t‚dS )aõ  Test that there is a wider gap between the node and the start of an
    incident edge when min_source_margin is specified.

    This test checks that the use of min_{source/target}_margin kwargs result
    in shorter (more padding) between the edges and source and target nodes.
    As a crude visual example, let 's' and 't' represent source and target
    nodes, respectively:

       Default:
       s-----------------------------t

       With margins:
       s   -----------------------   t

    r7   r•   r–   )rš   rÍ   r   NrQ   r   )rš   rÍ   r‹   rŒ   r2   )r   r˜   r   rE   r;   Úget_extentsZcornersr@   )	rÍ   r™   rš   rA   r9   Zdefault_patchZdefault_extentZpadded_patchZpadded_extentr   r   r   Ú)test_draw_edges_min_source_target_margins#  s$    
úùrÑ   c                  C   sl   t  ¡ \} }t ¡ }| d¡ | dd¡ t |ddi¡d }| ¡ }|jdkrZ|j	dks^t
‚t  |¡ dS )zDEnsure that selfloop extent is non-zero when there is only one node.r   r•   N)r   r˜   r   rE   Úadd_nodeÚadd_edger;   rÐ   r   Úheightr@   Údelaxes)r™   rš   rA   ÚpatchÚbboxr   r   r   Ú&test_nonzero_selfloop_with_single_nodeP  s    
rØ   c                  C   s|   t  ¡ \} }tjdtjd�}| dd¡ dd„ |jD ƒ}tj||dgd�d }| ¡ }|j	dkrj|j
dksnt‚t  |¡ d	S )
zfEnsure that selfloop extent is non-zero when only a single edge is
    specified in the edgelist.
    rQ   rD   r2   c                 S   s   i | ]}|||f“qS r   r   rI   r   r   r   rL   j  s      zFtest_nonzero_selfloop_with_single_edge_in_edgelist.<locals>.<dictcomp>r   r§   r   N)r   r˜   r   r:   rE   rÓ   r±   r;   rÐ   r   rÔ   r@   rÕ   )r™   rš   rA   r9   rÖ   r×   r   r   r   Ú2test_nonzero_selfloop_with_single_edge_in_edgelista  s    rÙ   c                  C   sJ   dddg} dddg}d}t jj ||| ¡}t|dd…d	f |kƒsFt‚dS )
zfTest apply_alpha when there is a mismatch between the number of
    supplied colors and elements.
    r   r2   rQ   r,   rV   rW   ro   Nr]   )r   ZdrawingZnx_pylabZapply_alphaÚallr@   )r†   Z	colorlistrb   Zrgba_colorsr   r   r   Útest_apply_alphat  s
    

rÛ   c                  C   s  ddl } ddl} t d¡}tjdtjd�}dd„ |D ƒ}||fD ]@}tj||dd�}t|ƒt|jƒksjt‚t	|d t
jjƒs@t‚q@||fD ]&}tj||d	d�}t	|t
jjƒsŠt‚qŠt ||¡}t	|t
jjƒsÐt‚t ||¡}t|ƒt|jƒksòt‚t	|d t
jjƒ�s
t‚dS )
a/  
    The `arrows` keyword argument is used as a 3-way switch to select which
    type of object to use for drawing edges:
      - ``arrows=None`` -> default (FancyArrowPatches for directed, else LineCollection)
      - ``arrows=True`` -> FancyArrowPatches
      - ``arrows=False`` -> LineCollection
    r   Nr	   rD   c                 S   s   i | ]}|||f“qS r   r   rI   r   r   r   rL   Œ  s      z>test_draw_edges_toggling_with_arrows_kwarg.<locals>.<dictcomp>T)rŠ   F)r£   Zmatplotlib.patchesr   r:   rE   r;   rS   rÅ   r@   rg   r=   rÃ   rÄ   r¤   ÚLineCollection)r   ZUGr¥   r9   rA   rÅ   r   r   r   Ú*test_draw_edges_toggling_with_arrows_kwarg  s"    
rÝ   Údrawing_funcc                 C   sZ   dd l }t d¡}t ¡ \}}| ||d� tdd„ |jD ƒƒsBt‚|jrLt‚t 	|¡ d S )Nr   r	   rœ   c                 s   s   | ]}t |tjjƒV  qd S r(   ©rg   r=   r¤   rÜ   ©rJ   r\   r   r   r   Ú	<genexpr>¨  s     z?test_draw_networkx_arrows_default_undirected.<locals>.<genexpr>)
r£   r   r:   r   r˜   Úanyr¤   r@   rÃ   rÕ   ©rÞ   r   rA   r™   rš   r   r   r   Ú,test_draw_networkx_arrows_default_undirected¡  s    

rä   c                 C   s`   dd l }tjdtjd�}t ¡ \}}| ||d� tdd„ |jD ƒƒrHt‚|j	sRt‚t 
|¡ d S )Nr   r	   rD   rœ   c                 s   s   | ]}t |tjjƒV  qd S r(   rß   rà   r   r   r   rá   ´  s    z=test_draw_networkx_arrows_default_directed.<locals>.<genexpr>)r£   r   r:   rE   r   r˜   râ   r¤   r@   rÃ   rÕ   rã   r   r   r   Ú*test_draw_networkx_arrows_default_directed­  s    ÿ
rå   c                  C   sN   t  d¡} |  dd¡ t ¡ \}}t j| ddg|d� |jr@t‚t |¡ d S )Nr	   r   r7   rP   )r6   rš   )	r   r:   rÓ   r   r˜   r�   rÃ   r@   rÕ   )rA   r™   rš   r   r   r   Útest_edgelist_kwarg_not_ignored»  s    

ræ   c               	   C   sv   d} t  ¡ }|jdddd� |jdddd� t  |d¡}dd	„ |D ƒ}tjt j| d
�� t j|||d� W 5 Q R X dS )zs
    draw_networkx_edge_labels should raise an informative error message when
    the edge label includes keys
    z5draw_networkx_edge_labels does not support multiedgesr   r2   r   )Úweightr¨   rç   c                 S   s   i | ]}|||f“qS r   r   rI   r   r   r   rL   Ï  s      zEtest_draw_networkx_edge_label_multiedge_exception.<locals>.<dictcomp>r´   r�   N)r   Z
MultiGraphrÓ   Zget_edge_attributesr·   r¸   rÊ   r’   )Zexception_msgrA   rŽ   r9   r   r   r   Ú1test_draw_networkx_edge_label_multiedge_exceptionÅ  s    rè   c                  C   s6   t  d¡} dd„ | jD ƒ}t j| |i d�i ks2t‚dS )zORegression test for draw_networkx_edge_labels with empty dict. See
    gh-5372.r	   c                 S   s   i | ]}|||f“qS r   r   rI   r   r   r   rL   Ø  s      z<test_draw_networkx_edge_label_empty_dict.<locals>.<dictcomp>r�   N)r   r:   r±   r’   r@   rË   r   r   r   Ú(test_draw_networkx_edge_label_empty_dictÔ  s    
ré   c            
      C   sä   t  ¡ \} }ddddddg}ddd	d
ddg}t |¡}dd„ |jD ƒ}tj|||||d� t|jƒdkslt‚t	 
|dd… ¡t	 
ddg¡ }t|j|dd… |ƒD ]2\}}}	| ¡  |	¡s¾t‚tj | ¡ |¡s¢t‚q¢t  |¡ dS )ztWhen an edgelist is supplied along with a sequence of colors, check that
    the self-loops have the correct colors.r½   rP   rR   r   rk   )rQ   rQ   ZpinkÚcyanr   r-   r5   Úgreenc                 S   s   i | ]}|||f“qS r   r   rI   r   r   r   rL   å  s      zGtest_draw_networkx_edges_undirected_selfloop_colors.<locals>.<dictcomp>)rš   r6   r$   r	   éýÿÿÿNr   r¬   )r   r˜   r   r    r±   r;   rS   rÃ   r@   rÇ   rÈ   rX   Úget_pathZcontains_pointr=   r&   r>   rF   rÕ   )
r™   rš   r6   Zedge_colorsrA   r9   Z	sl_pointsrG   ZclrZslpr   r   r   Ú3test_draw_networkx_edges_undirected_selfloop_colorsÜ  s    
  rî   Úfap_only_kwargZ
arrowstyleZconnectionstylezarc3,rad=0.2r‹   rŒ   c              	   C   s´   t  d¡}dd„ |D ƒ}t ¡ \}}t|  ¡ ƒd }tjtd|› d�d�� t j	||fd|i| —Ž W 5 Q R X t
 ¡ �* t
 d	¡ t j	||f|d
dœ| —Ž W 5 Q R X t |¡ dS )zÏUsers should get a warning when they specify a non-default value for
    one of the kwargs that applies only to edges drawn with FancyArrowPatches,
    but FancyArrowPatches aren't being used under the hood.r	   c                 S   s   i | ]}|||f“qS r   r   rI   r   r   r   rL     s      zEtest_user_warnings_for_unused_edge_drawing_kwargs.<locals>.<dictcomp>r   z

The z# keyword argument is not applicabler´   rš   ÚerrorT)rš   rŠ   N)r   r:   r   r˜   r!   Úkeysr·   ZwarnsÚUserWarningr;   ÚwarningsÚcatch_warningsÚsimplefilterrÕ   )rï   rA   r9   r™   rš   Z
kwarg_namer   r   r   Ú1test_user_warnings_for_unused_edge_drawing_kwargsø  s    
 
ÿ"

$rö   )AÚ__doc__r   r   ró   r·   Zimportorskipr=   rÇ   Zuser   ZrcParamsZnetworkxr   Zbarbell_graphr   r   r#   r'   r*   ÚmarkZparametrizerC   rH   rU   r[   r^   rd   re   r    rE   ri   rm   rn   rr   rw   rz   r�   r…   r”   Zmpl_image_comparer›   rŸ   r¢   r¦   rª   r³   rº   r¿   rÆ   rÉ   rÌ   rÑ   rØ   rÙ   rÛ   rÝ   r�   r©   rä   rå   ræ   rè   ré   rî   rö   r   r   r   r   Ú<module>   s  




÷þ÷þ9
þþ
þþ
	ýþ
	þ

úþ
;
	
	
,"


ûþ
