
    Gdk                        d Z ddlZddlZddlZddlZ ej        d          Z ej        d          Ze                    d            ej        d          Z	de	j
        d<   ddlZ ej        d	d
          Zd Zd Zd Z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                         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                          Zd! Zd" Zd# Zd$ Zd% Zej                            d&ej        ej        f          d'             Zej                            d(d)d*gd*ff          d+             Zej                            d(d)d*gd*ff          d,             Z ej                            dg d-ddd.gf          d/             Z!d0 Z"d1 Z#ej                            d2d3          d4             Z$ej                            d5d6gd7gd8gg d9d7d:gg d;f          d<             Z%d= Z&ej        j'        d>             Z(d? Z)d@ Z*dA Z+dB Z,dC Z-dD Z.dE Z/ej                            dFdGg dHf          dI             Z0dJ Z1dK Z2ej                            dLdM          dN             Z3dO Z4dP Z5dQ Z6dR Z7ej                            dSej8        ej9        f          dT             Z:ej                            dSej8        ej9        f          dU             Z;dV Z<dW Z=dX Z>dY Z?ej                            dZd[d:idFd\id]d^id_d`idad`if          db             Z@dS )cz,Unit tests for matplotlib drawing functions.    N
matplotlibnumpyPSzmatplotlib.pyplotFztext.usetex      c                     	 t           j        t           j        t           j        t           j        t           j        t           j        t           j        g} ddddg}t          j	        | |          D ]-\  }} |t          fi | t                              d           .	 	 t          j        d           d S # t          $ r Y d S w xY w# 	 t          j        d           w # t          $ r Y w w xY wxY 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osunlinkOSError)	functionsoptionsfunctionoptions       Alib/python3.11/site-packages/networkx/drawing/tests/test_pylab.py	test_drawr%      s    NNNM
	 #*aHHI ) 1)W E E 	# 	#HfHW'''''KK	""""	#
	Ii      	 	 	DD		Ii     	 	 	D	sB   BC B3 3
C CC+CC+
C(%C+'C((C+c                     	 t          t          d                    t          t          dd                    t          t          dd                    g} t          j        t          |            t
                              d           	 t          j        d           d S # t          $ r Y d S w xY w# 	 t          j        d           w # t          $ r Y w w xY wxY w)Nr   
      nlistr   )
listranger   r   r   r   r   r   r   r   r)   s    r$   test_draw_shell_nlistr-   +   s    eAhheArll!3!3T%B--5H5HI
gU++++I	Ii      	 	 	DD		Ii     	 	 	D	sB   B
B4 B# #
B10B14C6C
C
CCCCc                      t          t                                                    } t          j        t          | dt
          j        j        d           d S )Nr   T)
edge_colorr   	edge_cmapwith_labels)r,   r   number_of_edgesr   r   r   cmBlues)colorss    r$   test_edge_colormapr6   7   sN    7**,,--FNF!sv|QU         c                  \    t          j        t                                                     d S N)r   r   r   to_directed r7   r$   test_arrowsr<   ?   s$    N7&&(()))))r7   )r/   expected)Nr	   )rredr>   r?   )      ?rA   g        yellowr@   rB   )r      r   rD   limerC   rE   )#0000ffbluerF   rG   edgelistr   rD   c                     t          j        d          }t          j        |t          j        |          ||           }t          j                            |                                |          sJ dS )z`Tests ways of specifying all edges have a single color for edges
    drawn with a LineCollectionr   posrH   r/   N)r   
path_graphdraw_networkx_edgesrandom_layoutmplr5   
same_color	get_color)r/   r=   rH   Gdrawn_edgess        r$   !test_single_edge_color_undirectedrU   D   sp    & 	aA(	r""X*  K :  !6!6!8!8(CCCCCCCr7   c                    t          j        dt           j                  }t          j        |t          j        |          ||           }|D ]6}t
          j                            |                                |          sJ 7dS )zaTests ways of specifying all edges have a single color for edges drawn
    with FancyArrowPatchesr   create_usingrK   N)	r   rM   DiGraphrN   rO   rP   r5   rQ   get_edgecolor)r/   r=   rH   rS   rT   faps         r$   test_single_edge_color_directedr\   ^   s    & 	abj111A(	r""X*  K  D Dz$$S%6%6%8%8(CCCCCCD Dr7   c                  f   t          j        dt           j                  } d t          t	          |                     D             }dD ]}t          j        | ||          }|D ]6}t          j                            |	                                |          sJ 7t          j        | |ddg|          }|D ]6}t          j                            |	                                |          sJ 7t          j        | |g d	d
          }|D ]6}t          j                            |	                                d          sJ 7t          j        | |g dd          }|D ]6}t          j                            |	                                d          sJ 7t          j        | |g d	d          }t          j                            |d         	                                |d         	                                          sJ |D ]6}t          j                            |	                                d          rJ 7t          j        | |g dd
          }t          j                            |d         	                                |d         	                                          sJ t          j                            |d         	                                |d         	                                          sJ |D ]6}t          j                            |	                                d          rJ 7d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   rW   c                     i | ]}|||fS r;   r;   .0ns     r$   
<dictcomp>z8test_edge_color_tuple_interpretation.<locals>.<dictcomp>}       
,
,
,1q!f
,
,
,r7   )r   r   rD   r   r   rD   rD   r/   rI   rD      )rH   r/   rI   rg   rh   r   re   rG   )rI   rg   rj   )r   r   rd   r   rD   rh   r   N)
r   rM   rY   r,   lenrN   rP   r5   rQ   rZ   )rS   rL   ecrT   r[   s        r$   $test_edge_color_tuple_interpretationrm   y   s    	abj111A
,
,eCFFmm
,
,
,C ( 
B 
B,QCCC 	B 	BC:(():):)<)<bAAAAAA,sff-"
 
 
  	B 	BC:(():):)<)<bAAAAAA	B (	3111l  K  B Bz$$S%6%6%8%8&AAAAAA (	3999i  K  B Bz$$S%6%6%8%8&AAAAAA (	3111i  K :  A$$&&A(D(D(F(F      F F:(():):)<)<fEEEEEE (	3999l  K :  A$$&&A(D(D(F(F     :  A$$&&A(D(D(F(F      F F:(():):)<)<fEEEEEEF Fr7   c                  T   t                                           } t          j        t                     }d}t          j        | ||          }t          |t          j        |                    D ]9\  }}t          j	        
                    |                                |          sJ :dS )zZTest that the edge colors are cycled when there are fewer specified
    colors than edges.r>   gbrf   N)r   r:   r   rO   rN   zipr   cyclerP   r5   rQ   rZ   rS   rL   
edgecolorsrT   r[   r=   s         r$   .test_fewer_edge_colors_than_num_edges_directedrv      s     	A

7
#
#C J(CJGGGK[)/**E*EFF D DXz$$S%6%6%8%8(CCCCCCD Dr7   c                  N   t          j        dt           j                  } t          j        t                    }d}t          j        | ||          }t          ||dd                   D ]9\  }}t          j        	                    |
                                |          sJ :dS )z\Test that extra edge colors are ignored when there are more specified
    colors than edges.r   rW   )r>   rp   rq   crf   N)r   rM   rY   rO   r   rN   rr   rP   r5   rQ   rZ   rt   s         r$   -test_more_edge_colors_than_num_edges_directedrz      s     	abj111A

7
#
#C%J(CJGGGK[*SbS/:: D DXz$$S%6%6%8%8(CCCCCCD Dr7   c                  ~   t          j        t          t          j        t                    ddgdd          } |                                                                 }t          |                                           dk    sJ t          j	        
                    |d d         d          sJ |d         dk    sJ d S NrI   rg   purple皙?)rL   rH   r/   alpharh   ry   )r   rN   r   rO   rR   squeezerk   	get_pathsrP   r5   rQ   )edge_collectionrl   s     r$   3test_edge_color_string_with_global_alpha_undirectedr      s    ,W%%&!  O 
	"	"	$	$	,	,	.	.B((**++q0000:  CRC(33333b6S======r7   c                  d   t          j        t                                          t          j        t                    ddgdd          } t          |           dk    sJ | D ]N}|                                }t          j        	                    |d d         d          sJ |d         dk    sJ Od S r|   )
r   rN   r   r:   rO   rk   rZ   rP   r5   rQ   )rT   r[   rl   s      r$   1test_edge_color_string_with_global_alpha_directedr      s    (W%%&!  K {q        z$$RWh77777"v}}}}} r7   
graph_typec                    t          j        d|           }d t          t          |                    D             }t          j        ||          }t          |t                    r|d         }|                                dk    sJ dS )z^Test the default linewidth for edges drawn either via LineCollection or
    FancyArrowPatches.rh   rW   c                     i | ]}|||fS r;   r;   r_   s     r$   rb   z1test_edge_width_default_value.<locals>.<dictcomp>   rc   r7   r   rD   N)r   rM   r,   rk   rN   
isinstancer+   get_linewidth)r   rS   rL   rT   s       r$   test_edge_width_default_valuer      s     	aj111A
,
,eCFFmm
,
,
,C(C00K+t$$ %!!n$$&&!++++++r7   )	edgewidthr=   r   r   r   c                 *   t          j        d          }d t          t          |                    D             }t          j        |||           }t          |                                          dk    sJ |                                |k    sJ d S )Nr   c                     i | ]}|||fS r;   r;   r_   s     r$   rb   z;test_edge_width_single_value_undirected.<locals>.<dictcomp>   rc   r7   r   r   )r   rM   r,   rk   rN   r   r   )r   r=   rS   rL   rT   s        r$   'test_edge_width_single_value_undirectedr      s     	aA
,
,eCFFmm
,
,
,C(CyAAAK{$$&&''1,,,,$$&&(222222r7   c                 (   t          j        dt           j                  }d t          t	          |                    D             }t          j        |||           }t	          |          dk    sJ |D ]}|                                |k    sJ d S )Nr   rW   c                     i | ]}|||fS r;   r;   r_   s     r$   rb   z9test_edge_width_single_value_directed.<locals>.<dictcomp>	  rc   r7   r   r   )r   rM   rY   r,   rk   rN   r   )r   r=   rS   rL   rT   r[   s         r$   %test_edge_width_single_value_directedr      s     	abj111A
,
,eCFFmm
,
,
,C(CyAAAK{q     / /  ""h...../ /r7   ri   rg   c                    t                                           }t          j        |          }d}t          j        ||| |          }t          |t          j        |                    D ]\  }}|                                |k    sJ  d S )N)      ?       @g      (@)rH   r   )	r   r:   r   rO   rN   rr   r   rs   r   )rH   rS   rL   widthsrT   r[   expected_widths          r$   test_edge_width_sequencer     s     	A

1

CF(C(&QQQK";	0G0GHH 5 5^  ""n444445 5r7   c                  J   t          j        dt           j                  } t          j        |           }t          j        | |ddg          }d |D             }t          j        | |ddg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   rW   r   rA   rf   c                 6    g | ]}|                                 S r;   rZ   r`   es     r$   
<listcomp>z7test_edge_color_with_edge_vmin_vmax.<locals>.<listcomp>(  s"    :::1??$$:::r7   r~   g?)r/   	edge_vmin	edge_vmaxc                 6    g | ]}|                                 S r;   r   r   s     r$   r   z7test_edge_color_with_edge_vmin_vmax.<locals>.<listcomp>-  s"    <<<1Q__&&<<<r7   N)r   rM   rY   rO   rN   rP   r5   rQ   )rS   rL   rT   orig_colorsscaled_colorss        r$   #test_edge_color_with_edge_vmin_vmaxr   !  s     	abj111A

1

C(CQHEEEK::k:::K(	3C:  K =<<<<M:  m<<<<<<<r7   c                  $   t          j        dt           j                  } d t          t	          |                     D             }t          j        | |          }t	          |          dk    sJ |D ]}|                                dk    sJ dS )z>Test default linestyle for edges drawn with FancyArrowPatches.r   rW   c                     i | ]}|||fS r;   r;   r_   s     r$   rb   z9test_directed_edges_linestyle_default.<locals>.<dictcomp>4  rc   r7   r   solidNr   rM   rY   r,   rk   rN   get_linestyle)rS   rL   rT   r[   s       r$   %test_directed_edges_linestyle_defaultr   1  s    
abj111A
,
,eCFFmm
,
,
,C (C00K{q     . .  ""g-----. .r7   style)dashed--rD   rD   rD   c                 (   t          j        dt           j                  }d t          t	          |                    D             }t          j        |||           }t	          |          dk    sJ |D ]}|                                | k    sJ 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   rW   c                     i | ]}|||fS r;   r;   r_   s     r$   rb   z>test_directed_edges_linestyle_single_value.<locals>.<dictcomp>K  rc   r7   r   r   Nr   )r   rS   rL   rT   r[   s        r$   *test_directed_edges_linestyle_single_valuer   =  s     	abj111A
,
,eCFFmm
,
,
,C(Cu===K{q     , ,  ""e+++++, ,r7   	style_seqr   r   r   )r   -:r   )r   r   r   z-.c                 n   t          j        dt           j                  }d t          t	          |                    D             }t          j        |||           }t	          |          dk    sJ t          |t          j        |                     D ]\  }}|	                                |k    sJ  dS )zTests support for specifying linestyles with sequences in
    ``draw_networkx_edges`` for FancyArrowPatch outputs (e.g. directed edges).r   rW   c                     i | ]}|||fS r;   r;   r_   s     r$   rb   z:test_directed_edges_linestyle_sequence.<locals>.<dictcomp>c  rc   r7   r   r   N)
r   rM   rY   r,   rk   rN   rr   r   rs   r   )r   rS   rL   rT   r[   r   s         r$   &test_directed_edges_linestyle_sequencer   S  s     	abj111A
,
,eCFFmm
,
,
,C(CyAAAK{q    +yy'A'ABB , ,
U  ""e+++++, ,r7   c            
         t          j                    } t          j        |           }t          j        | |g dddd           t          j        | |g dddg d           t          j        | |d	d
           t          j        | |g ddd
d           t          j        | |g ddd
d           t          j        | |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"#           t          j        | |d d$%           t          j        | |d&d'i(           d S ))Nr   rD   rh   r   r>   i        ?)nodelistr   r   r   )r      r      rq   )g      ?r   r   rA   rA   r   )r   r   )rI   rg   rj   )r   r      )rH   r   r   r/   )r   r   )r   r   )r   r   )r   r   T)rH   arrowsmin_source_marginmin_target_marginr   r/   z$a$r   z$b$rD   z$c$rh   z$d$r   z$\alpha$r   z$\beta$r   z$\gamma$r   z$\delta$r      )	font_sizeF)edge_labelsrotater   z4-5r   )r   cubical_graphspring_layoutdraw_networkx_nodesrN   draw_networkx_labelsdraw_networkx_edge_labels)rS   rL   labelss      r$   test_labels_and_colorsr   k  s   
A

1

C	3#D    	$$$    1cC8888	111    	111    	111	 	 	 	 FF1IF1IF1IF1IF1IF1IF1IF1IAsFb9999 CT%HHHH Cfe_EEEEEEr7   c                     t          j                    } t                                          \  }}dddddd}t          j        | |dg dd	
           t          j        | |ddgd
           t          j        | |dd           |                    d           t                                           t                              d           |S )Nr   r   rD   r   rI   r   )r   r   )r   rD   rh   r   r   i  r   ztab:blue)r   r   r   i  r   z
tab:oranger   r   )r   r   g)\(?off)	r   house_graphr   subplotsr   rN   marginstight_layoutaxis)rS   figaxrL   s       r$   test_house_with_colorsr     s    
AllnnGCFv*
E
EC 	    	3$!    1cA6666JJtHHUOOOJr7   c                      t                                           \  } }t          j        t          |           t          j        t          t          j        t                    |           d S )Nr   )r   r   r   drawr   r   circular_layout)r   r   s     r$   	test_axesr     sQ    llnnGCGG "*<W*E*E"MMMMMMr7   c                  T    t          j                    } t          j        |            d S r9   )r   Graphr   rS   s    r$   test_empty_graphr     s    


AGAJJJJJr7   c                  V   dd l } t          j        ddg          }t          j        ddg          }t          j        |          }t          t          j        ||g           t          j        j	                  sJ t          t          j        ||g           t          j        j	                  sJ t          j
        ||g d          g k    sJ t          j
        ||g d          g k    sJ t          j
        ||g d          g k    sJ t          j
        ||g d          g k    sJ d S )Nr   rg   rj   )r   T)rH   r   F)matplotlib.collectionsr   r   rY   r   r   r   rP   collectionsPathCollectionrN   )r   rS   DGrL   s       r$   #test_draw_empty_nodes_return_valuesr     sT   !!!!
&&!""A	VV$	%	%B

Q

C
q#333S_5S     
r3444co6T     !!S2dCCCrIIII!!S2eDDDJJJJ!"cBuEEEKKKK!"cBtDDDJJJJJJr7   c                      t          j        dt           j                  } t          j        | dg           t          j        | dgg d           d S )Nr   rW   )r   rD   r   rH   )r'      r   )rH   r   )r   rM   MultiDiGraphdraw_networkxr   s    r$   test_multigraph_edgelist_tuplesr     sT    
abo666AQ)----Q)DDDDDDr7   c                  H   t          j        t                    } t                                          }|                    d           t          j        t          | ddg           t          t          j                  fdt                    D             }t                    }|                    d           t          j        t          | ||           |
                    d           |                    d	           t          j        t          | |           d S )
N   皙?r~   )r   c                     g | ]}|z  S r;   r;   )r`   x	num_nodess     r$   r   z#test_alpha_iter.<locals>.<listcomp>  s    555qQ]555r7      )r   r   rD      )r   rO   r   r   figureadd_subplotr   rk   nodesr,   append)rL   r   r   r5   r   s       @r$   test_alpha_iterr     s    

7
#
#C
**,,COOC7CSz::::GM""I5555E)$4$4555E9FOOC7CF%HHHH	LLOOOOOC7Cu555555r7   c                      t          j        t          d          5  t          j        t
          d           d d d            d S # 1 swxY w Y   d S )NzReceived invalid argumentmatchbar)foo)pytestraises
ValueErrorr   r   r   r;   r7   r$   test_error_invalid_kwdsr	    s    	z)D	E	E	E $ $
U####$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $s   AA	A	c                      t          j        g d          } g d}t          j        t          d          5  t          j        | |           d d d            d S # 1 swxY w Y   d S )N)rI   r   rh   r   r   rD   r   )rD   rh   r   z1arrowsize should have the same length as edgelistr  )	arrowsize)r   rY   r  r  r  r   )rS   r  s     r$   +test_draw_networkx_arrowsize_incorrect_sizer    s    

33344A		I	M
 
 
 ( ( 	Y''''( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (s   AA!Ar     )r'   r   r  c                 d   t          j        g d          }dddd}t          j        |||           }t          | t                    rt          j        |           n| } t          ||           D ]@\  }}t          |t          j	        j
                  sJ |                                |k    sJ Ad S )N)rI   r  rg   r   rI   r   r   rD   rh   )rL   r  )r   rY   rN   r   intr   repeatrr   rP   patchesFancyArrowPatchget_mutation_scale)r  rS   rL   edgesr[   r=   s         r$   test_draw_edges_arrowsizer    s    

+++,,AF
+
+C"1#CCCE/9)S/I/IX	 +++yIUI.. 4 4X#s{:;;;;;%%''8333334 4r7   c                  p    t          j        t          t                              ddg                     d S )Nr  r  r   )r   r   r   nparrayr;   r7   r$   test_np_edgelistr    s/    Wrxx0@'A'ABBBBBBr7   c                      t          j        d          } ddd}t          j        t           j        d          5  t          j        | |           d d d            d S # 1 swxY w Y   d S )Nr   r   r   rI   zhas no positionr  )r   rM   r  r  NetworkXErrorr   rS   rL   s     r$   *test_draw_nodes_missing_node_from_positionr!    s    
aA
 
 C	r'/@	A	A	A ' '
q#&&&' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 's   AA!$A!
node_shape)osc                    t                                           \  }}t          j        dg          }ddd}t          j        ||||           d         }|                                                                ddddf         }t          j        |||| dd	          d         }|                                                                ddddf         }|d         |d         k    sJ |d
         |d
         k     sJ 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

    rI   r   r   )r   r"  r   Nrh   r
   )r   r"  r   r   rD   )r   r   r   rY   rN   get_extentscorners)	r"  r   r   rS   rL   default_patchdefault_extentpadded_patchpadded_extents	            r$   )test_draw_edges_min_source_target_marginsr,  #  s!   & llnnGC

F8A
 
 C *1cbZPPPQRSM"..0088::33Q36BN )	   	L !,,..66881a@M nQ/////nQ///////r7   c                     t                                           \  } }t          j                    }|                    d           |                    dd           t          j        |ddi          d         }|                                }|j        dk    r|j	        dk    sJ t           
                    |           dS )zDEnsure that selfloop extent is non-zero when there is only one node.r   r   N)r   r   r   rY   add_nodeadd_edgerN   r&  r   heightdelaxes)r   r   rS   patchbboxs        r$   &test_nonzero_selfloop_with_single_noder4  P  s     llnnGC

AJJqMMMJJq!"1q&k2215ED:>>dkAooooKKOOOOOr7   c                     t                                           \  } }t          j        dt          j                  }|                    dd           d |j        D             }t          j        ||dg          d         }|                                }|j	        dk    r|j
        dk    sJ t                               |           dS )	zfEnsure that selfloop extent is non-zero when only a single edge is
    specified in the edgelist.
    rh   rW   rD   c                     i | ]}|||fS r;   r;   r_   s     r$   rb   zFtest_nonzero_selfloop_with_single_edge_in_edgelist.<locals>.<dictcomp>j      
&
&
&1q!f
&
&
&r7   r   r   r   N)r   r   r   rM   rY   r/  r   rN   r&  r   r0  r1  )r   r   rS   rL   r2  r3  s         r$   2test_nonzero_selfloop_with_single_edge_in_edgelistr8  a  s    
 llnnGC
abj111AJJq!
&
&ag
&
&
&C"1cVH===a@ED:>>dkAooooKKOOOOOr7   c                      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  ro   r   Nry   )r   drawingnx_pylabapply_alphaall)r   	colorlistr   rgba_colorss       r$   test_apply_alphar@  t  sc     yyHIE*%11)UHMMK{111b5!U*+++++++r7   c                     ddl } ddl} t          j        d          }t          j        dt          j                  }d |D             }||fD ]g}t          j        ||d          }t          |          t          |j                  k    sJ t          |d         t          j
        j                  sJ h||fD ]:}t          j        ||d          }t          |t          j        j                  sJ ;t          j        ||          }t          |t          j        j                  sJ t          j        ||          }t          |          t          |j                  k    sJ t          |d         t          j
        j                  sJ 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   rW   c                     i | ]}|||fS r;   r;   r_   s     r$   rb   z>test_draw_edges_toggling_with_arrows_kwarg.<locals>.<dictcomp>  s    
!
!
!1q!f
!
!
!r7   T)r   F)r   matplotlib.patchesr   rM   rY   rN   rk   r  r   rP   r  r  r   LineCollection)r   UGr   rL   rS   r  s         r$   *test_draw_edges_toggling_with_arrows_kwargrF    s    "!!!	q		B	qrz	2	2	2B
!
!b
!
!
!C "X A A&q#d;;;5zzS\\))))%(CK$?@@@@@@ "X A A&q#e<<<%!?@@@@@@ "2s++EeS_;<<<<<"2s++Eu::QW%%%%eAh ;<<<<<<<r7   drawing_funcc                    dd l }t          j        d          }t                                          \  }} | ||           t          d |j        D                       sJ |j        rJ t                              |           d S )Nr   r   r   c              3   T   K   | ]#}t          |t          j        j                  V  $d S r9   r   rP   r   rD  r`   rx   s     r$   	<genexpr>z?test_draw_networkx_arrows_default_undirected.<locals>.<genexpr>  s1      UUz!S_;<<UUUUUUr7   )	r   r   rM   r   r   anyr   r  r1  rG  r   rS   r   r   s        r$   ,test_draw_networkx_arrows_default_undirectedrO    s    !!!!
aAllnnGCLrUUbnUUUUUUUUzKKOOOOOr7   c                 &   dd l }t          j        dt          j                  }t                                          \  }} | ||           t          d |j        D                       rJ |j        sJ t          	                    |           d S )Nr   r   rW   r   c              3   T   K   | ]#}t          |t          j        j                  V  $d S r9   rJ  rK  s     r$   rL  z=test_draw_networkx_arrows_default_directed.<locals>.<genexpr>  sB        :;
1co455     r7   )
r   r   rM   rY   r   r   rM  r   r  r1  rN  s        r$   *test_draw_networkx_arrows_default_directedrR    s    !!!!
abj111AllnnGCLr  ?A~        :KKOOOOOr7   c                  
   t          j        d          } |                     dd           t                                          \  }}t          j        | ddg|           |j        rJ t                              |           d S )Nr   r   rI   rg   )rH   r   )r   rM   r/  r   r   r   r  r1  )rS   r   r   s      r$   test_edgelist_kwarg_not_ignoredrT    ss    
aAJJq!llnnGCGA(R0000zKKOOOOOr7   c                  r   d} t          j                    }|                    ddd           |                    ddd           t          j        |d          }d |D             }t	          j        t           j        | 	          5  t          j        |||
           ddd           dS # 1 swxY w Y   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   rD   r'   )weightr   rV  c                     i | ]}|||fS r;   r;   r_   s     r$   rb   zEtest_draw_networkx_edge_label_multiedge_exception.<locals>.<dictcomp>      
 
 
 1q!f
 
 
 r7   r  r   N)r   
MultiGraphr/  get_edge_attributesr  r  r  r   )exception_msgrS   r   rL   s       r$   1test_draw_networkx_edge_label_multiedge_exceptionr\    s   
 LM
AJJq!BJJJq!BJ(H55K
 
 a
 
 
 C	r'}	=	=	= F F
$QEEEEF F F F F F F F F F F F F F F F F Fs   B,,B03B0c                      t          j        d          } d | j        D             }t          j        | |i           i k    sJ dS )zORegression test for draw_networkx_edge_labels with empty dict. See
    gh-5372.r   c                     i | ]}|||fS r;   r;   r_   s     r$   rb   z<test_draw_networkx_edge_label_empty_dict.<locals>.<dictcomp>  r7  r7   r   N)r   rM   r   r   r   s     r$   (test_draw_networkx_edge_label_empty_dictr_    sQ     	aA
&
&ag
&
&
&C'3B???2EEEEEEr7   c                     t                                           \  } }g d}g d}t          j        |          }d |j        D             }t          j        |||||           t          |j                  dk    sJ t          	                    |dd                   t          	                    dd	g          z   }t          |j        |dd         |          D ]c\  }}}	|                                                    |	          sJ t          j                            |                                |          sJ dt                               |           dS )
ztWhen an edgelist is supplied along with a sequence of colors, check that
    the self-loops have the correct colors.)r  rg   rj   r   r   )rh   rh   )pinkcyanr	   r?   rG   greenc                     i | ]}|||fS r;   r;   r_   s     r$   rb   zGtest_draw_networkx_edges_undirected_selfloop_colors.<locals>.<dictcomp>  r7  r7   )r   rH   r/   r   Nr   r   )r   r   r   r   r   rN   rk   r  r  r  rr   get_pathcontains_pointrP   r5   rQ   rZ   r1  )
r   r   rH   edge_colorsrS   rL   	sl_pointsr[   clrslps
             r$   3test_draw_networkx_edges_undirected_selfloop_colorsrl    sF    llnnGC???HCCCK
A
&
&ag
&
&
&C1cb8TTTT rz??a
 "##''"((As8*<*<<I RZRSS)99EE ? ?S#||~~,,S11111z$$S%6%6%8%8#>>>>>>KKOOOOOr7   fap_only_kwarg
arrowstyler   connectionstylezarc3,rad=0.2r   r'   r   c                 B   t          j        d          }d |D             }t                                          \  }}t	          |                                           d         }t          j        t          d| d          5  t          j	        ||fd|i|  ddd           n# 1 swxY w Y   t          j                    5  t          j        d	           t          j	        ||f|d
d|  ddd           n# 1 swxY w Y   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                     i | ]}|||fS r;   r;   r_   s     r$   rb   zEtest_user_warnings_for_unused_edge_drawing_kwargs.<locals>.<dictcomp>  rX  r7   r   z

The z# keyword argument is not applicabler  r   NerrorT)r   r   )r   rM   r   r   r+   keysr  warnsUserWarningrN   warningscatch_warningssimplefilterr1  )rm  rS   rL   r   r   
kwarg_names         r$   1test_user_warnings_for_unused_edge_drawing_kwargsrz    s    	aA
 
 a
 
 
 CllnnGC n))++,,Q/J	UjUUU
 
 
 @ @ 	q#??"????@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ 
	 	"	" M Mg&&&
q#L"TLL^LLLM M M M M M M M M M M M M M M
 KKOOOOOs$   B%%B),B)+C::C>C>)A__doc__r   r   rv  r  importorskiprP   r  user   rcParamsnetworkxr   barbell_graphr   r%   r-   r6   r<   markparametrizerU   r\   rm   rv   rz   r   r   r   rY   r   r   r   r   r   r   r   r   r   mpl_image_comparer   r   r   r   r   r   r	  r  r  r  r!  r,  r4  r8  r@  rF  r   r   rO  rR  rT  r\  r_  rl  rz  r;   r7   r$   <module>r     s   2 2     				  f,''V!! f-..#]     
"
1a
 
   .	 	 	  * * *
 
#
	H%
 
f
  dVH%566D D 76 D 
#
	H%
 
f
  dVH%566	D 	D 76 	D6F 6F 6FrD D DD D D     "*'=>>, , ?>, 
a 3 3 3 
a / / /    	 5 5 5= = = 	. 	. 	.  , , , 	
			s
 

, 
,
 

,7F 7F 7Fv   2N N N  
K K K,E E E6 6 6$$ $ $
( ( ( r<<<&899	4 	4 :9	4C C C
' ' ' z22)0 )0 32)0X  "  &, , ,= = =D "'23C)DEE  FE "'23C)DEE
 
 FE
  F F FF F F  8 	s	b	N+	b!	b!	 	 	 	  r7   