U
    9vf¸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=dd‚„ 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Ú
matplotlibZ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   úE/tmp/pip-unpacked-wheel-_lngutwb/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-   r/   )©r   é   r   r1   Úlimer0   r2   )ú#0000ffÚbluer3   r4   Úedgelist©r   r1   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   ©Úposr5   r#   N)	r   Ú
path_graphÚdraw_networkx_edgesÚrandom_layoutÚmplr%   Ú
same_colorÚ	get_colorÚAssertionError)r#   r*   r5   ÚGÚdrawn_edgesr   r   r   Ú!test_single_edge_color_undirectedD   s    
   ÿrB   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_usingr7   N)
r   r9   ÚDiGraphr:   r;   r<   r%   r=   Úget_edgecolorr?   )r#   r*   r5   r@   rA   Úfapr   r   r   Útest_single_edge_color_directed^   s       ÿrG   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   rC   c                 S   s   i | ]}|||f“qS r   r   ©Ú.0Únr   r   r   Ú
<dictcomp>}   s      z8test_edge_color_tuple_interpretation.<locals>.<dictcomp>)©r   r   r1   ©r   r   r1   r1   ©r#   r6   ©r1   é   )r5   r#   ©rP   r   rM   r4   )r   r   rL   r   r1   rP   r   N)r   r9   rD   r!   Úlenr:   r<   r%   r=   rE   r?   )r@   r8   ÚecrA   rF   r   r   r   Ú$test_edge_color_tuple_interpretationy   st       ÿ   ÿ  
 ÿ   ÿ
 
ÿ
  
 ÿ
 
ÿ

 
ÿ
rT   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ÚbrN   N)r   r(   r   r;   r:   Úzipr   Úcycler<   r%   r=   rE   r?   ©r@   r8   Z
edgecolorsrA   rF   r*   r   r   r   Ú.test_fewer_edge_colors_than_num_edges_directed²   s    
rZ   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   rC   )r+   rU   rV   ÚcrN   Néÿÿÿÿ)r   r9   rD   r;   r   r:   rW   r<   r%   r=   rE   r?   rY   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 ©Nr6   rO   Zpurpleçš™™™™™É?)r8   r5   r#   ÚalpharP   r\   )r   r:   r   r;   r>   ZsqueezerR   Ú	get_pathsr?   r<   r%   r=   )Zedge_collectionrS   r   r   r   Ú3test_edge_color_string_with_global_alpha_undirectedÈ   s    ûrb   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;   rR   r?   rE   r<   r%   r=   )rA   rF   rS   r   r   r   Ú1test_edge_color_string_with_global_alpha_directedÖ   s    ûrc   Ú
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.rP   rC   c                 S   s   i | ]}|||f“qS r   r   rH   r   r   r   rK   ê   s      z1test_edge_width_default_value.<locals>.<dictcomp>r   r1   N)	r   r9   r!   rR   r:   Ú
isinstancer    Úget_linewidthr?   )rd   r@   r8   rA   r   r   r   Útest_edge_width_default_valueå   s    
rg   )Ú	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   rH   r   r   r   rK   ú   s      z;test_edge_width_single_value_undirected.<locals>.<dictcomp>©r   r   )r   r9   r!   rR   r:   ra   r?   rf   )rh   r*   r@   r8   rA   r   r   r   Ú'test_edge_width_single_value_undirectedñ   s
    
rk   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   rC   c                 S   s   i | ]}|||f“qS r   r   rH   r   r   r   rK   	  s      z9test_edge_width_single_value_directed.<locals>.<dictcomp>rj   r   )r   r9   rD   r!   rR   r:   r?   rf   )rh   r*   r@   r8   rA   rF   r   r   r   Ú%test_edge_width_single_value_directed   s    rl   rO   rQ   c                 C   sV   t  ¡ }t |¡}d}tj||| |d}t|t |¡ƒD ]\}}| ¡ |ks8t	‚q8d S )N)ç      à?ç       @g      (@)r5   r   )
r   r(   r   r;   r:   rW   r   rX   rf   r?   )r5   r@   r8   ZwidthsrA   rF   Zexpected_widthr   r   r   Útest_edge_width_sequence  s    	
ro   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   rC   r   r.   rN   c                 S   s   g | ]}|  ¡ ‘qS r   ©rE   ©rI   Úer   r   r   Ú
<listcomp>(  s     z7test_edge_color_with_edge_vmin_vmax.<locals>.<listcomp>r_   gš™™™™™é?)r#   Z	edge_vminZ	edge_vmaxc                 S   s   g | ]}|  ¡ ‘qS r   rp   rq   r   r   r   rs   -  s     N)	r   r9   rD   r;   r:   r<   r%   r=   r?   )r@   r8   rA   Zorig_colorsZscaled_colorsr   r   r   Ú#test_edge_color_with_edge_vmin_vmax!  s    
    ÿrt   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   rC   c                 S   s   i | ]}|||f“qS r   r   rH   r   r   r   rK   4  s      z9test_directed_edges_linestyle_default.<locals>.<dictcomp>r   ZsolidN©r   r9   rD   r!   rR   r:   r?   Úget_linestyle)r@   r8   rA   rF   r   r   r   Ú%test_directed_edges_linestyle_default1  s    rw   Ústyle)Údashedú--©r1   ©r1   r1   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   rC   c                 S   s   i | ]}|||f“qS r   r   rH   r   r   r   rK   K  s      z>test_directed_edges_linestyle_single_value.<locals>.<dictcomp>©rx   r   Nru   )rx   r@   r8   rA   rF   r   r   r   Ú*test_directed_edges_linestyle_single_value=  s    r~   Ú	style_seqry   rz   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   rC   c                 S   s   i | ]}|||f“qS r   r   rH   r   r   r   rK   c  s      z:test_directed_edges_linestyle_sequence.<locals>.<dictcomp>r}   r   N)r   r9   rD   r!   rR   r:   r?   rW   r   rX   rv   )r   r@   r8   rA   rF   rx   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   r1   rP   r   r+   iô  g      è?)Únodelistr	   r
   r`   r   é   r   é   rV   g      Ð?rm   r.   )r   r`   r6   rO   rQ   )r   r   é   )r5   r   r`   r#   )r   r„   )r„   r   )r   r…   )r…   r   T)r5   Ú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)r@   r8   Ú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   ©r1   r   r6   r|   )rm   rn   )r   r1   rP   r   r   i¸  r   r1   rP   r   ztab:blue)r
   rƒ   r	   iÐ  r   z
tab:orangerm   r   )r`   r   g)\Âõ(¼?Úoff)	r   Zhouse_graphr   ÚsubplotsrŽ   r:   ZmarginsZtight_layoutZaxis)r@   ÚfigÚaxr8   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š   ©r@   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   rO   rQ   )rƒ   T)r5   r‡   F)Úmatplotlib.collectionsr   r   rD   r›   re   rŽ   r<   ÚcollectionsZPathCollectionr?   r:   )r   r@   ÚDGr8   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   rC   )r   r1   r   ©r5   r   é   r   )r5   r
   )r   r9   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éƒ   çš™™™™™¹?r_   )r`   c                    s   g | ]}|ˆ  ‘qS r   r   )rI   Úx©Z	num_nodesr   r   rs   ð  s     z#test_alpha_iter.<locals>.<listcomp>é„   )r	   r`   r1   é…   )r   r;   r   r   ÚfigureZadd_subplotrŽ   rR   Únodesr!   Úappend)r8   r–   r`   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 )Nr6   ©r   rP   ©r   r   ©r1   r   r1   rP   r   z1arrowsize should have the same length as edgelistr²   )Ú	arrowsize)r   rD   rµ   r¶   r·   rš   )r@   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 )Nr6   r¹   rO   r’   r“   )r   r1   rP   )r8   r¼   )r   rD   r:   re   Úintr   ÚrepeatrW   r<   ÚpatchesÚFancyArrowPatchr?   Zget_mutation_scale)r¼   r@   r8   ÚedgesrF   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|   r6   zhas no positionr²   )r   r9   rµ   r¶   ÚNetworkXErrorrŽ   ©r@   r8   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

    r6   r’   r“   )r—   rË   r   NrP   r   )r—   rË   rˆ   r‰   r1   )r   r•   r   rD   r:   Úget_extentsZcornersr?   )	rË   r–   r—   r@   r8   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   rD   Úadd_nodeÚadd_edger:   rÎ   r   Úheightr?   Údelaxes)r–   r—   r@   Ú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.
    rP   rC   r1   c                 S   s   i | ]}|||f“qS r   r   rH   r   r   r   rK   j  s      zFtest_nonzero_selfloop_with_single_edge_in_edgelist.<locals>.<dictcomp>r|   r¤   r   N)r   r•   r   r9   rD   rÑ   r¯   r:   rÎ   r   rÒ   r?   rÓ   )r–   r—   r@   r8   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   r1   rP   r+   rU   rV   rm   Nr\   )r   ZdrawingZnx_pylabZapply_alphaÚallr?   )rƒ   Z	colorlistr`   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   rC   c                 S   s   i | ]}|||f“qS r   r   rH   r   r   r   rK   Œ  s      z>test_draw_edges_toggling_with_arrows_kwarg.<locals>.<dictcomp>T)r‡   F)r    Zmatplotlib.patchesr   r9   rD   r:   rR   rÃ   r?   re   r<   rÁ   rÂ   r¡   ÚLineCollection)r   ZUGr¢   r8   r@   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'   ©re   r<   r¡   rÚ   ©rI   r[   r   r   r   Ú	<genexpr>¨  s     z?test_draw_networkx_arrows_default_undirected.<locals>.<genexpr>)
r    r   r9   r   r•   Úanyr¡   r?   rÁ   rÓ   ©rÜ   r   r@   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   rC   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   r9   rD   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   r6   rO   )r5   r—   )	r   r9   rÑ   r   r•   rš   rÁ   r?   rÓ   )r@   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   r1   r   )Úweightr¥   rå   c                 S   s   i | ]}|||f“qS r   r   rH   r   r   r   rK   Ï  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_msgr@   r‹   r8   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   rH   r   r   r   rK   Ø  s      z<test_draw_networkx_edge_label_empty_dict.<locals>.<dictcomp>r   N)r   r9   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»   rO   rQ   r|   ri   )rP   rP   ZpinkZcyanr   r,   r4   Zgreenc                 S   s   i | ]}|||f“qS r   r   rH   r   r   r   rK   å  s      zGtest_draw_networkx_edges_undirected_selfloop_colors.<locals>.<dictcomp>)r—   r5   r#   r   éýÿÿÿNr   r©   )r   r•   r   r   r¯   r:   rR   rÁ   r?   rÅ   rÆ   rW   Úget_pathZcontains_pointr<   r%   r=   rE   rÓ   )
r–   r—   r5   Zedge_colorsr@   r8   Z	sl_pointsrF   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   rH   r   r   r   rK     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   r9   r   r•   r    Úkeysrµ   ZwarnsÚUserWarningr:   ÚwarningsÚcatch_warningsÚsimplefilterrÓ   )rë   r@   r8   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parametrizerB   rG   rT   rZ   r]   rb   rc   r   rD   rg   rk   rl   ro   rt   rw   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
þþ
þþ
	ýþ
	þ

úþ
;
	
	
,"


ûþ
