o
    hQ                     @   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!g d;dd"d<gfd=d> Z!d?d@ Z"dAdB Z#ejdCdDdEdF Z$ejdGdHgdIgdJgg dKdIdLgg dMfdNdO Z%dPdQ Z&dRdS Z'ejj(dTdU Z)dVdW Z*dXdY Z+dZd[ Z,d\d] Z-d^d_ Z.d`da Z/dbdc Z0ddde Z1dfdg Z2dhdi Z3ejdjdkg dlfdmdn Z4ejdodpg dqfdrds Z5dtdu Z6dvdw Z7ejdxdydzd{ Z8ejdxdyd|d} Z9d~d Z:dd Z;dd Z<dd Z=ejdej>ej?fdd Z@ejdej>ej?fdd ZAdd ZBejde dgeC d	geD d	gfdd ZEejde dgeC d	geD d	gfdd ZFdd ZGdd ZHdd ZIejddodLidjdiddiddiddifdd ZJejdej>ejKfdd ZLejdddgejdej?ejMejNejOejPgdd ZQdS )z,Unit tests for matplotlib drawing functions.    N
matplotlibnumpyPSzmatplotlib.pyplotFztext.usetex      c                  C   s   zOz1t jt jt jt jt jt jt jg} ddddg}t	| |D ]\}}|t
fi | td qW n	 ty;   Y nw W ztd W d S  tyO   Y d S w ztd W w  ty`   Y w w )Nblackd      )
node_color	node_sizewidthtest.ps)nxdraw_circulardraw_kamada_kawaidraw_planardraw_randomdraw_spectraldraw_spring
draw_shell	itertoolsproductbarbellpltsavefigModuleNotFoundErrorosunlinkOSError)	functionsoptionsfunctionoption r#   U/var/www/vscode/kcb/lib/python3.10/site-packages/networkx/drawing/tests/test_pylab.py	test_draw   s8   	r%   c                  C   s   z3t tdt tddt tddg} tjt| d td W ztd W d S  t	y3   Y d S w ztd W w  t	yD   Y w w )Nr   
      nlistr   )
listranger   r   r   r   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   	edge_cmapwith_labels)r+   r   number_of_edgesr   r   r   cmBlues)colorsr#   r#   r$   test_edge_colormap9   s   
r4   c                   C   s   t t  d S N)r   r   r   to_directedr#   r#   r#   r$   test_arrowsA   s   r7   )r-   expected)Nr   )rredr9   r:   )      ?r<   g        yellowr;   r=   )r      r   r?   limer>   r@   )#0000ffbluerA   rB   edgelistr   r?   c                 C   s<   t d}t j|t ||| d}tj| |sJ dS )z`Tests ways of specifying all edges have a single color for edges
    drawn with a LineCollectionr	   posrC   r-   N)r   
path_graphdraw_networkx_edgesrandom_layoutmplr3   
same_color	get_color)r-   r8   rC   Gdrawn_edgesr#   r#   r$   !test_single_edge_color_undirectedF   s
   
rO   c                 C   sL   t jdt jd}t j|t ||| d}|D ]}tj| |s#J qdS )zaTests ways of specifying all edges have a single color for edges drawn
    with FancyArrowPatchesr	   create_usingrE   N)	r   rG   DiGraphrH   rI   rJ   r3   rK   get_edgecolor)r-   r8   rC   rM   rN   fapr#   r#   r$   test_single_edge_color_directed`   s   rU   c                  C   s  t jdt jd} dd tt| D }dD ]5}t j| ||d}|D ]}tj|	 |s.J q!t j| |ddg|d	}|D ]}tj|	 |sIJ q<qt j| |g d
dd	}|D ]}tj|	 dseJ qXt j| |g ddd	}|D ]}tj|	 dsJ qst j| |g d
dd	}tj|d 	 |d 	 sJ |D ]}tj|	 drJ qt j| |g ddd	}tj|d 	 |d 	 sJ tj|d 	 |d 	 sJ |D ]}tj|	 drJ qdS )zIf 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   rP   c                 S      i | ]}|||fqS r#   r#   .0nr#   r#   r$   
<dictcomp>       z8test_edge_color_tuple_interpretation.<locals>.<dictcomp>)r   r   r?   r   r   r?   r?   r-   rD   r?      )rC   r-   rD   r_   r`   r	   r]   rB   )rD   r_   rb   )r	   r   r\   r   r?   r`   r	   N)
r   rG   rR   r+   lenrH   rJ   r3   rK   rS   )rM   rF   ecrN   rT   r#   r#   r$   $test_edge_color_tuple_interpretation{   sT   re   c                  C   sZ   t  } tt }d}tj| ||d}t|t|D ]\}}tj	
| |s*J qdS )zZTest that the edge colors are cycled when there are fewer specified
    colors than edges.r9   gbr^   N)r   r6   r   rI   rH   zipr   cyclerJ   r3   rK   rS   rM   rF   
edgecolorsrN   rT   r8   r#   r#   r$   .test_fewer_edge_colors_than_num_edges_directed   s   
rm   c                  C   sd   t jdt jd} t t}d}t j| ||d}t||dd D ]\}}tj	|
 |s/J q dS )z\Test that extra edge colors are ignored when there are more specified
    colors than edges.r   rP   )r9   rg   rh   cr^   N)r   rG   rR   rI   r   rH   ri   rJ   r3   rK   rS   rk   r#   r#   r$   -test_more_edge_colors_than_num_edges_directed   s   
rp   c                  C   sl   t jtt tddgddd} |   }t|  dksJ tj	
|d d ds,J |d dks4J d S NrD   r_   purple皙?)rF   rC   r-   alphar`   ro   )r   rH   r   rI   rL   squeezerc   	get_pathsrJ   r3   rK   )edge_collectionrd   r#   r#   r$   3test_edge_color_string_with_global_alpha_undirected   s   rx   c                  C   sr   t jt t tddgddd} t| dksJ | D ]}| }tj	|d d ds.J |d dks6J qd S rq   )
r   rH   r   r6   rI   rc   rS   rJ   r3   rK   )rN   rT   rd   r#   r#   r$   1test_edge_color_string_with_global_alpha_directed   s   ry   
graph_typec                 C   sV   t jd| d}dd tt|D }t ||}t|tr!|d }| dks)J dS )z^Test the default linewidth for edges drawn either via LineCollection or
    FancyArrowPatches.r`   rP   c                 S   rV   r#   r#   rW   r#   r#   r$   rZ      r[   z1test_edge_width_default_value.<locals>.<dictcomp>r   r?   N)r   rG   r+   rc   rH   
isinstancer*   get_linewidth)rz   rM   rF   rN   r#   r#   r$   test_edge_width_default_value   s   
r}   )	edgewidthr8   r	   r	   r	   c                 C   sX   t d}dd tt|D }t j||| d}t| dks"J | |ks*J d S )Nr   c                 S   rV   r#   r#   rW   r#   r#   r$   rZ      r[   z;test_edge_width_single_value_undirected.<locals>.<dictcomp>r   r	   )r   rG   r+   rc   rH   rv   r|   )r~   r8   rM   rF   rN   r#   r#   r$   'test_edge_width_single_value_undirected   s
   
r   c                 C   sd   t jdt jd}dd tt|D }t j||| d}t|dks#J |D ]
}| |ks/J q%d S )Nr   rP   c                 S   rV   r#   r#   rW   r#   r#   r$   rZ     r[   z9test_edge_width_single_value_directed.<locals>.<dictcomp>r   r	   )r   rG   rR   r+   rc   rH   r|   )r~   r8   rM   rF   rN   rT   r#   r#   r$   %test_edge_width_single_value_directed  s   r   ra   r_   c                 C   sV   t  }t|}d}tj||| |d}t|t|D ]\}}| |ks(J qd S )N)      ?       @g      (@)rC   r   )	r   r6   r   rI   rH   ri   r   rj   r|   )rC   rM   rF   widthsrN   rT   expected_widthr#   r#   r$   test_edge_width_sequence  s   	
r   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||s:J 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	   rP   r   r<   r^   c                 S      g | ]}|  qS r#   rS   rX   er#   r#   r$   
<listcomp>*      z7test_edge_color_with_edge_vmin_vmax.<locals>.<listcomp>rs   g?)r-   	edge_vmin	edge_vmaxc                 S   r   r#   r   r   r#   r#   r$   r   /  r   N)r   rG   rR   rI   rH   rJ   r3   rK   )rM   rF   rN   orig_colorsscaled_colorsr#   r#   r$   #test_edge_color_with_edge_vmin_vmax#  s   
r   c                  C   s`   t jdt jd} dd tt| D }t | |}t|dks!J |D ]
}| dks-J q#dS )z>Test default linestyle for edges drawn with FancyArrowPatches.r   rP   c                 S   rV   r#   r#   rW   r#   r#   r$   rZ   6  r[   z9test_directed_edges_linestyle_default.<locals>.<dictcomp>r	   solidNr   rG   rR   r+   rc   rH   get_linestyle)rM   rF   rN   rT   r#   r#   r$   %test_directed_edges_linestyle_default3  s   r   style)dashed--r?   r?   r?   c                 C   sd   t jdt jd}dd tt|D }t j||| d}t|dks#J |D ]
}| | ks/J q%dS )zTests 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   rP   c                 S   rV   r#   r#   rW   r#   r#   r$   rZ   M  r[   z>test_directed_edges_linestyle_single_value.<locals>.<dictcomp>r   r	   Nr   )r   rM   rF   rN   rT   r#   r#   r$   *test_directed_edges_linestyle_single_value?  s   r   	style_seqr   r   r   )r   -:r   )r   r   r   z-.c                 C   st   t jdt jd}dd tt|D }t j||| d}t|dks#J t|t| D ]\}}|	 |ks7J q+dS )zTests support for specifying linestyles with sequences in
    ``draw_networkx_edges`` for FancyArrowPatch outputs (e.g. directed edges).r   rP   c                 S   rV   r#   r#   rW   r#   r#   r$   rZ   e  r[   z:test_directed_edges_linestyle_sequence.<locals>.<dictcomp>r   r	   N)
r   rG   rR   r+   rc   rH   ri   r   rj   r   )r   rM   rF   rN   rT   r   r#   r#   r$   &test_directed_edges_linestyle_sequenceU  s   r   c            	      C   s  ddl m} m} ddlm} ttj}ttj}t	|}t	|}t
||}t||s1J tj||dd}t|ts@J t|dkrOt|d |sOJ tj||dd}t|| s^J tj||d d}t|| smJ tj||d d}t|ts|J t|dkrt|d |sJ d S d S )Nr   )LineCollectionPathCollection)FancyArrowPatchTarrowsF)matplotlib.collectionsr   r   matplotlib.patchesr   r   cubical_graphGraphrR   spring_layoutdraw_networkx_nodesr{   rH   r*   rc   )	r   r   r   rM   dGrF   dposnodesedgesr#   r#   r$   test_return_typesm  s,   

r   c               
   C   sT  t  } t | }t j| |g ddddd t j| |g dddg dd t j| |d	d
d t j| |g ddd
dd t j| |g ddd
dd t j| |g ddd
dddd i }d|d< d|d< d|d< d|d< d|d< d|d< d|d< d |d!< d"d# tdD }t j| ||d$d% t j| ||d$|d& t j| |d d'd( t j| |d)d*id+ d S ),Nr   r?   r`   r	   r9   i        ?)nodelistr
   r   rt   )r      r      rh   )g      ?r   r   r<   r<   r   )r   rt   )rD   r_   rb   )r	   r      )rC   r   rt   r-   )r   r   )r   r   )r   r   )r   r   T)rC   r   min_source_marginmin_target_marginr   r-   z$a$r   z$b$r?   z$c$r`   z$d$r	   z$\alpha$r   z$\beta$r   z$\gamma$r   z$\delta$r   c                 S   s"   i | ]}||d  dkrdndqS )r`   r   kr9   r#   rW   r#   r#   r$   rZ     s   " z*test_labels_and_colors.<locals>.<dictcomp>   )	font_size)r   
font_colorF)edge_labelsrotater   z4-5r   )r   r   r   r   rH   r+   draw_networkx_labelsdraw_networkx_edge_labels)rM   rF   labelsr3   r#   r#   r$   test_labels_and_colors  sl   
	r   c                  C   s   t  } t \}}dddddd}t j| |dg dd	d
 t j| |ddgdd
 t j| |ddd |d t  td |S )Nr   r   r?   r   rD   r   )r   r   )r   r?   r`   r	   r   i  r   ztab:blue)r   r   r
   i  r   z
tab:oranger   r   )rt   r   g)\(?off)	r   house_graphr   subplotsr   rH   marginstight_layoutaxis)rM   figaxrF   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 r5   )r   r   r   rM   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	s&J ttj||g dtjj	s5J tj
||g ddg ksBJ tj
||g ddg ksOJ tj
||g ddg ks\J tj
||g ddg ksiJ d S )Nr   r_   rb   )r   T)rC   r   F)r   r   r   rR   r   r{   r   rJ   collectionsr   rH   )r   rM   DGrF   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g dd d S )Nr	   rP   )r   r?   r   rC   )r&      r   )rC   r   )r   rG   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   皙?rs   )rt   c                    s   g | ]}|  qS r#   r#   )rX   x	num_nodesr#   r$   r     r   z#test_alpha_iter.<locals>.<listcomp>   )r
   rt   r?      )r   rI   r   r   figureadd_subplotr   rc   r   r+   append)rF   r   rt   r3   r#   r   r$   test_alpha_iter  s   





r   c                  C   sR   t d} t d}t j| g d|d dd | D }t|dks'J d S )Nr   o   )ohs^)
node_shaper   c                 S      g | ]}t |tjjr|qS r#   )r{   rJ   r   r   )rX   r   r#   r#   r$   r     
    z-test_multiple_node_shapes.<locals>.<listcomp>)r   rG   r   r   r   r   get_childrenrc   )rM   r   scattersr#   r#   r$   test_multiple_node_shapes  s   
r   c                  C   s   t  } t d}t j| |dd |  D dd |  D d t|  dd | D D ]%\}}|d r:d	nd
}t	j
| |sGJ t|d d | ksUJ q0d S )Nr   c                 S   s   i | ]}||d  rdndqS )r`   r   r9   r#   rW   r#   r#   r$   rZ   (      z7test_individualized_font_attributes.<locals>.<dictcomp>c                 S   s   i | ]}|t |d  d qS )""""""@r   )intrW   r#   r#   r$   rZ   )  r   )r   r   r   c                 S   s.   g | ]}t |tjjrt| d kr|qS )r   )r{   rJ   textTextrc   get_text)rX   tr#   r#   r$   r   -  s    z7test_individualized_font_attributes.<locals>.<listcomp>r`   r   r:   r   r   )r   karate_club_graphr   r   r   r   r   ri   r   rJ   r3   rK   rL   r   get_size)rM   r   rY   r   r8   r#   r#   r$   #test_individualized_font_attributes"  s$   r   c                  C   s   t  } t d}dd |  D }dd |  D }t j| |d||d dd | D }t|  |D ]3\}}|	 d|d	 d
 |d d
   d ksQJ t
|d
 r\tjjjntjjj}t| |sjJ q7d S )Nr   c                 S   s(   g | ]\}}|| d  dkrdndqS )r`   r   -|>-[r#   rX   uvr#   r#   r$   r   <     ( z7test_individualized_edge_attributes.<locals>.<listcomp>c                 S   s(   g | ]\}}d |d |d   d  qS )r&   r`   r#   r  r#   r#   r$   r   =  r  T)r   r   
arrowstyle	arrowsizec                 S   r   r#   )r{   rJ   patchesr   )rX   fr#   r#   r$   r   ?  r   r&   r   r`   r?   )r   r   r   r   r   r   r   r   ri   get_mutation_scalesumrJ   r  
ArrowStyleBracketBCurveFilledBr{   get_arrowstyle)rM   r   arrowstyles
arrowsizesr   r   ar8   r#   r#   r$   #test_individualized_edge_attributes9  s    ,
r  c                   C   sB   t jtdd tjtdd W d    d S 1 sw   Y  d S )NzReceived invalid argumentmatchbar)foo)pytestraises
ValueErrorr   r   r   r#   r#   r#   r$   test_error_invalid_kwdsL  s   "r  c                  C   sX   t g d} g d}tjtdd t j| |d W d    d S 1 s%w   Y  d S )N)rD   r   r`   r   r	   r?   r	   )r?   r`   r	   z1arrowsize should have the same length as edgelistr  )r  )r   rR   r  r  r  r   )rM   r  r#   r#   r$   +test_draw_networkx_arrowsize_incorrect_sizeQ  s   "r  r     )r&   r   r  c                 C   s|   t g d}dddd}t j||| d}t| trt| n| } t|| D ]\}}t|tj	j
s3J | |ks;J q&d S )NrD   r  r_   r   rD   r   r   r?   r`   )rF   r  )r   rR   rH   r{   r   r   repeatri   rJ   r  r   r	  )r  rM   rF   r   rT   r8   r#   r#   r$   test_draw_edges_arrowsizeZ  s   r#  r  r   r   r   z<|-|>c                 C   s   t g d}dddd}t j||| d}t| trt| n| } tjj	j
tjj	jtjj	jd}t|| D ]\}}t|tjjsBJ t| || sMJ q5d S )Nr   r   rD   r   r!  )rF   r  r$  )r   rR   rH   r{   strr   r"  rJ   r  r  r  r  CurveFilledABri   r   r  )r  rM   rF   r   arrow_objectsrT   r8   r#   r#   r$   test_draw_edges_arrowstyleg  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   sV   t d} ddd}tjt jdd t | | W d    d S 1 s$w   Y  d S )Nr	   r   r   rD   zhas no positionr  )r   rG   r  r  NetworkXErrorr   rM   rF   r#   r#   r$   *test_draw_nodes_missing_node_from_position  s
   

"r.  r   )r   r   c           	      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sMJ |d
 |d
 k sWJ dS )  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

    rD   r   r   r   r   r   Nr`   r   r   r   r   r   r?   )r   r   r   rR   rH   get_extentscorners)	r   r   r   rM   rF   default_patchdefault_extentpadded_patchpadded_extentr#   r#   r$   )test_draw_edges_min_source_target_margins  s$   
r8  c                 C   s   t  \}}tddg}dddd}tj|||| d}dd	 |D }tj|||| d
dgd
dgd}dd	 |D }t||D ]"\}	}
td|
d|	 |
d |	d ksVJ |
d |	d k s`J q>dS )r/  rD   r_   r   r   )r`   r   r!  r0  c                 S   &   g | ]}|   d d ddf qS Nr`   r   r2  r3  )rX   dr#   r#   r$   r        & zHtest_draw_edges_min_source_target_margins_individual.<locals>.<listcomp>b   f   r1  c                 S   r9  r:  r;  )rX   pr#   r#   r$   r     r=  zp=z, d=r   r?   N)r   r   r   rR   rH   ri   print)r   r   r   rM   rF   r4  r5  r6  r7  r<  r@  r#   r#   r$   4test_draw_edges_min_source_target_margins_individual  s&   rB  c                  C   st   t  \} }t }|d |dd t|ddid }| }|jdkr-|j	dks/J t 
| t   dS )zDEnsure that selfloop extent is non-zero when there is only one node.r   r   N)r   r   r   rR   add_nodeadd_edgerH   r2  r   heightdelaxesclose)r   r   rM   patchbboxr#   r#   r$   &test_nonzero_selfloop_with_single_node  s   

rJ  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r5|j
dks7J t | t   d	S )
zfEnsure that selfloop extent is non-zero when only a single edge is
    specified in the edgelist.
    r`   rP   r?   c                 S   rV   r#   r#   rW   r#   r#   r$   rZ     r[   zFtest_nonzero_selfloop_with_single_edge_in_edgelist.<locals>.<dictcomp>r   r   r   N)r   r   r   rG   rR   rD  r   rH   r2  r   rE  rF  rG  )r   r   rM   rF   rH  rI  r#   r#   r$   2test_nonzero_selfloop_with_single_edge_in_edgelist  s   
rK  c                  C   sF   g d} g d}d}t jj||| }t|dddf |ks!J dS )zfTest apply_alpha when there is a mismatch between the number of
    supplied colors and elements.
    r!  rf   r   Nro   )r   drawingnx_pylabapply_alphaall)r   	colorlistrt   rgba_colorsr#   r#   r$   test_apply_alpha  s
    rR  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s5J t|d t	j
js@J q ||fD ]}tj||d	d}t|t	jjsXJ qEt||}t|t	jjshJ t||}t|t|jksyJ t|d t	j
jsJ 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	   rP   c                 S   rV   r#   r#   rW   r#   r#   r$   rZ   %  r[   z>test_draw_edges_toggling_with_arrows_kwarg.<locals>.<dictcomp>Tr   F)r   r   r   rG   rR   rH   rc   r   r{   rJ   r  r   r   r   )r   UGr   rF   rM   r   r#   r#   r$   *test_draw_edges_toggling_with_arrows_kwarg  s"   
rT  drawing_funcc                 C   sb   dd l }td}t \}}| ||d tdd |jD s!J |jr&J t| t	  d S )Nr   r	   r   c                 s       | ]
}t |tjjV  qd S r5   r{   rJ   r   r   rX   rn   r#   r#   r$   	<genexpr>A  s    z?test_draw_networkx_arrows_default_undirected.<locals>.<genexpr>)
r   r   rG   r   r   anyr   r  rF  rG  rU  r   rM   r   r   r#   r#   r$   ,test_draw_networkx_arrows_default_undirected:  s   


r\  c                 C   sh   dd l }tjdtjd}t \}}| ||d tdd |jD r$J |js)J t	| t
  d S )Nr   r	   rP   r   c                 s   rV  r5   rW  rX  r#   r#   r$   rY  N  s    
z=test_draw_networkx_arrows_default_directed.<locals>.<genexpr>)r   r   rG   rR   r   r   rZ  r   r  rF  rG  r[  r#   r#   r$   *test_draw_networkx_arrows_default_directedG  s   

r]  c                  C   sV   t d} | dd t \}}t j| ddg|d |jr J t| t  d S )Nr	   r   rD   r_   )rC   r   )	r   rG   rD  r   r   r   r  rF  rG  )rM   r   r   r#   r#   r$   test_edgelist_kwarg_not_ignoredV  s   


r^  )rM   expected_n_edgesr`   c                 C   s   t g dD ]\}\}}| j||t|d dd qdd | D }dddgg dfD ]}tj| ||d	 tj| ||d	}t||ksDJ q*d
S )zGDraws edges correctly for 3 types of graphs and checks for valid lengthrD   rD   rD   r  r	   r`   weightc                 S   rV   r#   r#   rW   r#   r#   r$   rZ   i  r[   zFtest_draw_networkx_edges_multiedge_connectionstyle.<locals>.<dictcomp>arc3,rad=0.1)rc  rc  arc3,rad=0.2connectionstyleN)	enumeraterD  roundr   rH   rc   )rM   r_  ir  r  rF   
conn_styler   r#   r#   r$   2test_draw_networkx_edges_multiedge_connectionstylea  s   rk  c           
      C   s   t g dD ]\}\}}| j||t|d dd qdd | D }tj| |g dd}d	d	d
gg dfD ]!}tj| ||d}t||ksFJ | D ]
}	|	jj	dksTJ qJq4dS )zXDraws labels correctly for 3 types of graphs and checks for valid length and class namesr`  r	   r`   ra  c                 S   rV   r#   r#   rW   r#   r#   r$   rZ   }  r[   zLtest_draw_networkx_edge_labels_multiedge_connectionstyle.<locals>.<dictcomp>)rc  rc  rc  re  rc  rd  CurvedArrowTextN)
rg  rD  rh  r   rH   r   rc   values	__class____name__)
rM   r_  ri  r  r  rF   r   rj  
text_itemstir#   r#   r$   8test_draw_networkx_edge_labels_multiedge_connectionstyleu  s    
rr  c                  C   sl   t  } | jdddd | jdddd t | d}dd | D }t j| ||d	d
gd}t|dks4J d S )Nr   r?   r&   ra  r   rb  c                 S   rV   r#   r#   rW   r#   r#   r$   rZ     r[   z;test_draw_networkx_edge_label_multiedge.<locals>.<dictcomp>rc  rd  )r   rf  r`   )r   
MultiGraphrD  get_edge_attributesr   rc   )rM   r   rF   rp  r#   r#   r$   'test_draw_networkx_edge_label_multiedge  s   ru  c                  C   s6   t d} dd | jD }t j| |i di ksJ dS )zORegression test for draw_networkx_edge_labels with empty dict. See
    gh-5372.r	   c                 S   rV   r#   r#   rW   r#   r#   r$   rZ     r[   z<test_draw_networkx_edge_label_empty_dict.<locals>.<dictcomp>r   N)r   rG   r   r   r-  r#   r#   r$   (test_draw_networkx_edge_label_empty_dict  s   
rv  c            
      C   s   t  \} }g d}g d}t|}dd |jD }tj|||||d t|jdks.J t	|dd t	d	d
g }t
|j|dd |D ]\}}}	| |	sWJ tj| |sbJ qIt | t   dS )ztWhen an edgelist is supplied along with a sequence of colors, check that
    the self-loops have the correct colors.)r  r_   rb   r   r   )r`   r`   )pinkcyanr   r:   rB   greenc                 S   rV   r#   r#   rW   r#   r#   r$   rZ     r[   zGtest_draw_networkx_edges_undirected_selfloop_colors.<locals>.<dictcomp>)r   rC   r-   r	   Nr   r   )r   r   r   r   r   rH   rc   r  r)  r*  ri   get_pathcontains_pointrJ   r3   rK   rS   rF  rG  )
r   r   rC   edge_colorsrM   rF   	sl_pointsrT   clrslpr#   r#   r$   3test_draw_networkx_edges_undirected_selfloop_colors  s   
  
r  fap_only_kwargr   rf  rd  r   r&   r   c                 C   s   t d}dd |D }t \}}t|  d }tjtd| dd t j	||fd|i|  W d	   n1 s<w   Y  t
  t
d
 t j	||f|dd|  W d	   n1 sbw   Y  t| t  d	S )zUsers 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   rV   r#   r#   rW   r#   r#   r$   rZ     r[   zEtest_user_warnings_for_unused_edge_drawing_kwargs.<locals>.<dictcomp>r   z

The z# keyword argument is not applicabler  r   NerrorT)r   r   )r   rG   r   r   r*   keysr  warnsUserWarningrH   warningscatch_warningssimplefilterrF  rG  )r  rM   rF   r   r   
kwarg_namer#   r#   r$   1test_user_warnings_for_unused_edge_drawing_kwargs  s   



r  draw_fnc                 C   st   t  \}}td}tjdd}| ||d W d    n1 s"w   Y  t|dks/J t | t   d S )Nr   T)recordr   r   )	r   r   r   cycle_graphr  r  rc   rF  rG  )r  r   r   rM   wr#   r#   r$   *test_no_warning_on_default_draw_arrowstyle  s   

r  
hide_ticksTmethodc                 C   sr   t d}dd |jD }t \}}| ||||d |j|jfD ]}t| |ks-J q!t	| t
  d S )Nr	   c                 S   rV   r#   r#   rW   r#   r#   r$   rZ     r[   z#test_hide_ticks.<locals>.<dictcomp>)rF   r   r  )r   rG   r   r   r   xaxisyaxisboolget_ticklabelsrF  rG  )r  r  rM   rF   _r   r   r#   r#   r$   test_hide_ticks  s   

r  )R__doc__r   r   r  r  importorskiprJ   r)  user   rcParamsnetworkxr   barbell_graphr   r%   r,   r4   r7   markparametrizerO   rU   re   rm   rp   rx   ry   r   rR   r}   r   r   r   r   r   r   r   r   r   mpl_image_comparer   r   r   r   r   r   r   r   r  r  r  r#  r(  r+  r.  r8  rB  rJ  rK  rR  rT  r   r   r\  r]  r^  rs  r   rk  rr  ru  rv  r  r  r   r  r   rH   r   r   r  r#   r#   r#   r$   <module>   sD   




9


	
	

=

	

	
.
-"

 
 




