o
    ]ZhQ                     @   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numpyZ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_circularZdraw_kamada_kawaiZdraw_planarZdraw_randomZdraw_spectraldraw_spring
draw_shell	itertoolsproductbarbellpltsavefigModuleNotFoundErrorosunlinkOSError)Z	functionsoptionsfunctionoption r   P/var/www/auris/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   
      Z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   Z	edge_cmapZwith_labels)r$   r   Znumber_of_edgesr   r   r   cmZBlues)colorsr   r   r   test_edge_colormap9   s   
r)   c                   C   s   t t  d S N)r   r   r   to_directedr   r   r   r   test_arrowsA   s   r,   )r&   expected)Nr   )rredr.   r/   )      ?r1   g        yellowr0   r2   )r      r   r4   limer3   r5   )#0000ffbluer6   r7   edgelistr   r4   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   posr8   r&   N)r   
path_graphdraw_networkx_edgesrandom_layoutmplr(   
same_color	get_color)r&   r-   r8   Gdrawn_edgesr   r   r   !test_single_edge_color_undirectedF   s
   
rD   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   Zcreate_usingr:   N)	r   r<   DiGraphr=   r>   r?   r(   r@   get_edgecolor)r&   r-   r8   rB   rC   fapr   r   r   test_single_edge_color_directed`   s   rI   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   rE   c                 S      i | ]}|||fqS r   r   .0nr   r   r   
<dictcomp>       z8test_edge_color_tuple_interpretation.<locals>.<dictcomp>)r   r   r4   r   r   r4   r4   r&   r9   r4      )r8   r&   r9   rS   rT   r   rQ   r7   )r9   rS   rV   )r   r   rP   r   r4   rT   r   N)
r   r<   rF   r$   lenr=   r?   r(   r@   rG   )rB   r;   ecrC   rH   r   r   r   $test_edge_color_tuple_interpretation{   sT   rY   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.r.   gbrR   N)r   r+   r   r>   r=   zipr   cycler?   r(   r@   rG   rB   r;   Z
edgecolorsrC   rH   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/J q dS )z\Test that extra edge colors are ignored when there are more specified
    colors than edges.r   rE   )r.   r[   r\   crR   N)r   r<   rF   r>   r   r=   r]   r?   r(   r@   rG   r_   r   r   r   -test_more_edge_colors_than_num_edges_directed   s   
rc   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 Nr9   rS   purple皙?)r;   r8   r&   alpharT   rb   )r   r=   r   r>   rA   ZsqueezerW   	get_pathsr?   r(   r@   )Zedge_collectionrX   r   r   r   3test_edge_color_string_with_global_alpha_undirected   s   ri   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 rd   )
r   r=   r   r+   r>   rW   rG   r?   r(   r@   )rC   rH   rX   r   r   r   1test_edge_color_string_with_global_alpha_directed   s   rj   
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.rT   rE   c                 S   rJ   r   r   rK   r   r   r   rN      rO   z1test_edge_width_default_value.<locals>.<dictcomp>r   r4   N)r   r<   r$   rW   r=   
isinstancer#   get_linewidth)rk   rB   r;   rC   r   r   r   test_edge_width_default_value   s   
rn   )	edgewidthr-   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   rJ   r   r   rK   r   r   r   rN      rO   z;test_edge_width_single_value_undirected.<locals>.<dictcomp>r   r   )r   r<   r$   rW   r=   rh   rm   )ro   r-   rB   r;   rC   r   r   r   'test_edge_width_single_value_undirected   s
   
rr   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   rE   c                 S   rJ   r   r   rK   r   r   r   rN     rO   z9test_edge_width_single_value_directed.<locals>.<dictcomp>rq   r   )r   r<   rF   r$   rW   r=   rm   )ro   r-   rB   r;   rC   rH   r   r   r   %test_edge_width_single_value_directed  s   rs   rU   rS   c                 C   sV   t  }t|}d}tj||| |d}t|t|D ]\}}| |ks(J qd S )N)      ?       @g      (@)r8   r   )	r   r+   r   r>   r=   r]   r   r^   rm   )r8   rB   r;   widthsrC   rH   Zexpected_widthr   r   r   test_edge_width_sequence  s   	
rw   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   rE   r   r1   rR   c                 S      g | ]}|  qS r   rG   rL   er   r   r   
<listcomp>*      z7test_edge_color_with_edge_vmin_vmax.<locals>.<listcomp>rf   g?)r&   Z	edge_vminZ	edge_vmaxc                 S   rx   r   ry   rz   r   r   r   r|   /  r}   N)r   r<   rF   r>   r=   r?   r(   r@   )rB   r;   rC   Zorig_colorsZ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   rE   c                 S   rJ   r   r   rK   r   r   r   rN   6  rO   z9test_directed_edges_linestyle_default.<locals>.<dictcomp>r   ZsolidNr   r<   rF   r$   rW   r=   get_linestyle)rB   r;   rC   rH   r   r   r   %test_directed_edges_linestyle_default3  s   r   style)dashed--r4   r4   r4   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   rE   c                 S   rJ   r   r   rK   r   r   r   rN   M  rO   z>test_directed_edges_linestyle_single_value.<locals>.<dictcomp>r   r   Nr   )r   rB   r;   rC   rH   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   rE   c                 S   rJ   r   r   rK   r   r   r   rN   e  rO   z:test_directed_edges_linestyle_sequence.<locals>.<dictcomp>r   r   N)
r   r<   rF   r$   rW   r=   r]   r   r^   r   )r   rB   r;   rC   rH   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GraphrF   spring_layoutdraw_networkx_nodesrl   r=   r#   rW   )	r   r   r   rB   ZdGr;   Z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   r4   rT   r   r.   i        ?)nodelistr	   r
   rg   )r      r      r\   )g      ?rt   r   r1   r1   rt   )r   rg   )r9   rS   rV   )r   r      )r8   r   rg   r&   )r   r   )r   r   )r   r   )r   r   T)r8   r   min_source_marginmin_target_marginr   r&   z$a$r   z$b$r4   z$c$rT   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 )rT   r   kr.   r   rK   r   r   r   rN     s   " z*test_labels_and_colors.<locals>.<dictcomp>   )	font_size)r   
font_colorF)edge_labelsrotater   z4-5r   )r   r   r   r   r=   r$   draw_networkx_labelsdraw_networkx_edge_labels)rB   r;   labelsr(   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   r4   r   r9   r   )rt   ru   )r   r4   rT   r   r   i  r   ztab:blue)r
   r   r	   i  r   z
tab:orangert   r   )rg   r   g)\(?off)	r   Zhouse_graphr   subplotsr   r=   ZmarginsZtight_layoutaxis)rB   figaxr;   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   r   r   rB   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   rS   rV   )r   T)r8   r   F)r   r   r   rF   r   rl   r   r?   collectionsr   r=   )r   rB   DGr;   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   rE   )r   r4   r   r8   )r       r   )r8   r
   )r   r<   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   皙?rf   )rg   c                    s   g | ]}|  qS r   r   )rL   xZ	num_nodesr   r   r|     r}   z#test_alpha_iter.<locals>.<listcomp>   )r	   rg   r4      )r   r>   r   r   figureadd_subplotr   rW   r   r$   append)r;   r   rg   r(   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   )rl   r?   r   r   )rL   r   r   r   r   r|     
    z-test_multiple_node_shapes.<locals>.<listcomp>)r   r<   r   r   r   r   get_childrenrW   )rB   r   Z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 )rT   r   r.   r   rK   r   r   r   rN   (      z7test_individualized_font_attributes.<locals>.<dictcomp>c                 S   s   i | ]}|t |d  d qS )""""""@r   )intrK   r   r   r   rN   )  r   )r   r   r   c                 S   s.   g | ]}t |tjjrt| d kr|qS )r   )rl   r?   textTextrW   Zget_text)rL   tr   r   r   r|   -  s    z7test_individualized_font_attributes.<locals>.<listcomp>rT   r   r/   r   r   )r   karate_club_graphr   r   r   r   r   r]   r   r?   r(   r@   rA   r   get_size)rB   r   rM   r   r-   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 )rT   r   -|>-[r   rL   uvr   r   r   r|   <     ( z7test_individualized_edge_attributes.<locals>.<listcomp>c                 S   s(   g | ]\}}d |d |d   d  qS )r    rT   r   r   r   r   r   r|   =  r   T)r   r   
arrowstyle	arrowsizec                 S   r   r   )rl   r?   patchesr   )rL   fr   r   r   r|   ?  r   r    r   rT   r4   )r   r   r   r   r   r   r   r   r]   get_mutation_scalesumr?   r   
ArrowStyleBracketBCurveFilledBrl   get_arrowstyle)rB   r   ZarrowstylesZ
arrowsizesr   r{   ar-   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)Z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)r9   r   rT   r   r   r4   r   )r4   rT   r   z1arrowsize should have the same length as edgelistr   )r   )r   rF   r   r   r   r   )rB   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r9   r   rS   r   r9   r   r   r4   rT   )r;   r   )r   rF   r=   rl   r   r   repeatr]   r?   r   r   r   )r   rB   r;   r   rH   r-   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   r9   r   r  )r;   r   r  )r   rF   r=   rl   strr   r  r?   r   r   r   r   ZCurveFilledABr]   r   r   )r   rB   r;   r   Zarrow_objectsrH   r-   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   r9   zhas no positionr   )r   r<   r   r   ZNetworkXErrorr   rB   r;   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

    r9   r   r   r   r   r   NrT   r   r   r   r   r   r4   )r   r   r   rF   r=   get_extentscorners)	r   r   r   rB   r;   default_patchdefault_extentpadded_patchpadded_extentr   r   r   )test_draw_edges_min_source_target_margins  s$   
r  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  r9   rS   r   r   )rT   r   r  r  c                 S   &   g | ]}|   d d ddf qS NrT   r   r  r  )rL   dr   r   r   r|        & zHtest_draw_edges_min_source_target_margins_individual.<locals>.<listcomp>b   f   r  c                 S   r  r  r  )rL   pr   r   r   r|     r  zp=z, d=r   r4   N)r   r   r   rF   r=   r]   print)r   r   r   rB   r;   r  r  r  r  r  r  r   r   r   4test_draw_edges_min_source_target_margins_individual  s&   r  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   rF   add_nodeadd_edger=   r  r   heightdelaxesclose)r   r   rB   patchbboxr   r   r   &test_nonzero_selfloop_with_single_node  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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.
    rT   rE   r4   c                 S   rJ   r   r   rK   r   r   r   rN     rO   zFtest_nonzero_selfloop_with_single_edge_in_edgelist.<locals>.<dictcomp>r   r   r   N)r   r   r   r<   rF   r!  r   r=   r  r   r"  r#  r$  )r   r   rB   r;   r%  r&  r   r   r   2test_nonzero_selfloop_with_single_edge_in_edgelist  s   
r(  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  rZ   rt   Nrb   )r   ZdrawingZnx_pylabZapply_alphaall)r   Z	colorlistrg   Zrgba_colorsr   r   r   test_apply_alpha  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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   rE   c                 S   rJ   r   r   rK   r   r   r   rN   %  rO   z>test_draw_edges_toggling_with_arrows_kwarg.<locals>.<dictcomp>Tr   F)r   r   r   r<   rF   r=   rW   r   rl   r?   r   r   r   r   )r   ZUGr   r;   rB   r   r   r   r   *test_draw_edges_toggling_with_arrows_kwarg  s"   
r+  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 r*   rl   r?   r   r   rL   ra   r   r   r   	<genexpr>A  s    z?test_draw_networkx_arrows_default_undirected.<locals>.<genexpr>)
r   r   r<   r   r   anyr   r   r#  r$  r,  r   rB   r   r   r   r   r   ,test_draw_networkx_arrows_default_undirected:  s   


r3  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   rE   r   c                 s   r-  r*   r.  r/  r   r   r   r0  N  s    
z=test_draw_networkx_arrows_default_directed.<locals>.<genexpr>)r   r   r<   rF   r   r   r1  r   r   r#  r$  r2  r   r   r   *test_draw_networkx_arrows_default_directedG  s   

r4  c                  C   sV   t d} | dd t \}}t j| ddg|d |jr J t| t  d S )Nr   r   r9   rS   )r8   r   )	r   r<   r!  r   r   r   r   r#  r$  )rB   r   r   r   r   r   test_edgelist_kwarg_not_ignoredV  s   


r5  )rB   expected_n_edgesrT   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r9   r9   r9   r   r   rT   weightc                 S   rJ   r   r   rK   r   r   r   rN   i  rO   zFtest_draw_networkx_edges_multiedge_connectionstyle.<locals>.<dictcomp>arc3,rad=0.1)r:  r:  arc3,rad=0.2connectionstyleN)	enumerater!  roundr   r=   rW   )rB   r6  ir   r   r;   
conn_styler   r   r   r   2test_draw_networkx_edges_multiedge_connectionstylea  s   rB  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 namesr7  r   rT   r8  c                 S   rJ   r   r   rK   r   r   r   rN   }  rO   zLtest_draw_networkx_edge_labels_multiedge_connectionstyle.<locals>.<dictcomp>)r:  r:  r:  r<  r:  r;  ZCurvedArrowTextN)
r>  r!  r?  r   r=   r   rW   values	__class____name__)
rB   r6  r@  r   r   r;   r   rA  
text_itemstir   r   r   8test_draw_networkx_edge_labels_multiedge_connectionstyleu  s    
rH  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   r4   r    r8  r   r9  c                 S   rJ   r   r   rK   r   r   r   rN     rO   z;test_draw_networkx_edge_label_multiedge.<locals>.<dictcomp>r:  r;  )r   r=  rT   )r   
MultiGraphr!  Zget_edge_attributesr   rW   )rB   r   r;   rF  r   r   r   'test_draw_networkx_edge_label_multiedge  s   rJ  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   rJ   r   r   rK   r   r   r   rN     rO   z<test_draw_networkx_edge_label_empty_dict.<locals>.<dictcomp>r   N)r   r<   r   r   r
  r   r   r   (test_draw_networkx_edge_label_empty_dict  s   
rK  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   rS   rV   r   rp   )rT   rT   )Zpinkcyanr   r/   r7   greenc                 S   rJ   r   r   rK   r   r   r   rN     rO   zGtest_draw_networkx_edges_undirected_selfloop_colors.<locals>.<dictcomp>)r   r8   r&   r   Nr   r   )r   r   r   r   r   r=   rW   r   r  r  r]   get_pathZcontains_pointr?   r(   r@   rG   r#  r$  )
r   r   r8   Zedge_colorsrB   r;   Z	sl_pointsrH   ZclrZslpr   r   r   3test_draw_networkx_edges_undirected_selfloop_colors  s   
  
rP  fap_only_kwargr   r=  r;  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   rJ   r   r   rK   r   r   r   rN     rO   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   r<   r   r   r#   keysr   ZwarnsUserWarningr=   warningscatch_warningssimplefilterr#  r$  )rQ  rB   r;   r   r   Z
kwarg_namer   r   r   1test_user_warnings_for_unused_edge_drawing_kwargs  s   



rX  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   Zcycle_graphrU  rV  rW   r#  r$  )rY  r   r   rB   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   rJ   r   r   rK   r   r   r   rN     rO   z#test_hide_ticks.<locals>.<dictcomp>)r;   r   r]  )r   r<   r   r   r   ZxaxisZyaxisboolZget_ticklabelsr#  r$  )r^  r]  rB   r;   _r   r   r   r   r   test_hide_ticks  s   

ra  )R__doc__r   r   rU  r   Zimportorskipr?   r  Zuser   ZrcParamsZnetworkxr   Zbarbell_graphr   r   r%   r)   r,   markZparametrizerD   rI   rY   r`   rc   ri   rj   r   rF   rn   rr   rs   rw   r~   r   r   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   r3  r4  r5  rI  r   rB  rH  rJ  rK  rP  rX  r   r\  r   r=   r   r   ra  r   r   r   r   <module>   sD   




9


	
	

=

	

	
.
-"

 
 


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