
    çgQ                     .
   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&d> Z'ej        j(        d?             Z)d@ Z*dA Z+dB Z,dC Z-dD Z.dE Z/dF Z0dG Z1dH Z2dI Z3ej                            dJdKg dLf          dM             Z4ej                            dNdOg dPf          dQ             Z5dR Z6dS Z7ej                            dTdU          dV             Z8ej                            dTdU          dW             Z9dX Z:dY Z;dZ Z<d[ Z=ej                            d\ej>        ej?        f          d]             Z@ej                            d\ej>        ej?        f          d^             ZAd_ ZBej                            d` ej                    dag ejC                    d	g ejD                    d	gf          db             ZEej                            d` ej                    dag ejC                    d	g ejD                    d	gf          dc             ZFdd ZGde ZHdf ZIej                            dgdNd:idJdhididjidkdlidmdlif          dn             ZJej                            doej>        ejK        f          dp             ZLej                            dqddrg          ej                            dsej?        ejM        ejN        ejO        ejP        g          dt                         ZQdS )uz,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           .n# t          $ r Y nw xY w	 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ModuleNotFoundErrorosunlinkOSError)	functionsoptionsfunctionoptions       ]/var/www/html/ai-engine/env/lib/python3.11/site-packages/networkx/drawing/tests/test_pylab.py	test_drawr&      s6    NNNM
	 #*aHHI ) 1)W E E 	# 	#HfHW'''''KK	""""	#    	Ii      	 	 	DD		Ii     	 	 	D	s`   BB C 
B)&C (B))C -C 
CCC;C+*C;+
C85C;7C88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_colormapr7   9   sN    7**,,--FNF!sv|QU         c                  \    t          j        t                                                     d S N)r   r   r   to_directed r8   r%   test_arrowsr=   A   s$    N7&&(()))))r8   )r0   expected)Nr	   )rredr?   r@   )      ?rB   g        yellowrA   rC   )r      r   rE   limerD   rF   )#0000ffbluerG   rH   edgelistr   rE   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   posrI   r0   N)r   
path_graphdraw_networkx_edgesrandom_layoutmplr6   
same_color	get_color)r0   r>   rI   Gdrawn_edgess        r%   !test_single_edge_color_undirectedrV   F   sp    & 	aA(	r""X*  K :  !6!6!8!8(CCCCCCCr8   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_usingrL   N)	r   rN   DiGraphrO   rP   rQ   r6   rR   get_edgecolor)r0   r>   rI   rT   rU   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r8   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   rX   c                     i | ]}|||fS r<   r<   .0ns     r%   
<dictcomp>z8test_edge_color_tuple_interpretation.<locals>.<dictcomp>       
,
,
,1q!f
,
,
,r8   )r   r   rE   r   r   rE   rE   r0   rJ   rE      )rI   r0   rJ   rh   ri   r   rf   rH   )rJ   rh   rk   )r   r   re   r   rE   ri   r   N)
r   rN   rZ   r-   lenrO   rQ   r6   rR   r[   )rT   rM   ecrU   r\   s        r%   $test_edge_color_tuple_interpretationrn   {   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r8   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brg   N)r   r;   r   rP   rO   zipr   cyclerQ   r6   rR   r[   rT   rM   
edgecolorsrU   r\   r>   s         r%   .test_fewer_edge_colors_than_num_edges_directedrw      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r8   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   rX   )r?   rq   rr   crg   N)r   rN   rZ   rP   r   rO   rs   rQ   r6   rR   r[   ru   s         r%   -test_more_edge_colors_than_num_edges_directedr{      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r8   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 NrJ   rh   purple皙?)rM   rI   r0   alphari   rz   )r   rO   r   rP   rS   squeezerl   	get_pathsrQ   r6   rR   )edge_collectionrm   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======r8   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   rO   r   r;   rP   rl   r[   rQ   r6   rR   )rU   r\   rm   s      r%   1test_edge_color_string_with_global_alpha_directedr      s    (W%%&!  K {q        z$$RWh77777"v}}}}} r8   
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.ri   rX   c                     i | ]}|||fS r<   r<   r`   s     r%   rc   z1test_edge_width_default_value.<locals>.<dictcomp>   rd   r8   r   rE   N)r   rN   r-   rl   rO   
isinstancer,   get_linewidth)r   rT   rM   rU   s       r%   test_edge_width_default_valuer      s     	aj111A
,
,eCFFmm
,
,
,C(C00K+t$$ %!!n$$&&!++++++r8   )	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%   rc   z;test_edge_width_single_value_undirected.<locals>.<dictcomp>   rd   r8   r   r   )r   rN   r-   rl   rO   r   r   )r   r>   rT   rM   rU   s        r%   'test_edge_width_single_value_undirectedr      s     	aA
,
,eCFFmm
,
,
,C(CyAAAK{$$&&''1,,,,$$&&(222222r8   c                 (   t          j        dt           j                  }d t          t	          |                    D             }t          j        |||           }t	          |          dk    sJ |D ]}|                                |k    sJ d S )Nr   rX   c                     i | ]}|||fS r<   r<   r`   s     r%   rc   z9test_edge_width_single_value_directed.<locals>.<dictcomp>  rd   r8   r   r   )r   rN   rZ   r-   rl   rO   r   )r   r>   rT   rM   rU   r\   s         r%   %test_edge_width_single_value_directedr     s     	abj111A
,
,eCFFmm
,
,
,C(CyAAAK{q     / /  ""h...../ /r8   rj   rh   c                    t                                           }t          j        |          }d}t          j        ||| |          }t          |t          j        |                    D ]\  }}|                                |k    sJ  d S )N)      ?       @g      (@)rI   r   )	r   r;   r   rP   rO   rs   r   rt   r   )rI   rT   rM   widthsrU   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 5r8   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   rX   r   rB   rg   c                 6    g | ]}|                                 S r<   r[   ra   es     r%   
<listcomp>z7test_edge_color_with_edge_vmin_vmax.<locals>.<listcomp>*  s"    :::1??$$:::r8   r   g?)r0   	edge_vmin	edge_vmaxc                 6    g | ]}|                                 S r<   r   r   s     r%   r   z7test_edge_color_with_edge_vmin_vmax.<locals>.<listcomp>/  s"    <<<1Q__&&<<<r8   N)r   rN   rZ   rP   rO   rQ   r6   rR   )rT   rM   rU   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<<<<<<<r8   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   rX   c                     i | ]}|||fS r<   r<   r`   s     r%   rc   z9test_directed_edges_linestyle_default.<locals>.<dictcomp>6  rd   r8   r   solidNr   rN   rZ   r-   rl   rO   get_linestyle)rT   rM   rU   r\   s       r%   %test_directed_edges_linestyle_defaultr   3  s    
abj111A
,
,eCFFmm
,
,
,C (C00K{q     . .  ""g-----. .r8   style)dashed--rE   rE   rE   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   rX   c                     i | ]}|||fS r<   r<   r`   s     r%   rc   z>test_directed_edges_linestyle_single_value.<locals>.<dictcomp>M  rd   r8   r   r   Nr   )r   rT   rM   rU   r\   s        r%   *test_directed_edges_linestyle_single_valuer   ?  s     	abj111A
,
,eCFFmm
,
,
,C(Cu===K{q     , ,  ""e+++++, ,r8   	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   rX   c                     i | ]}|||fS r<   r<   r`   s     r%   rc   z:test_directed_edges_linestyle_sequence.<locals>.<dictcomp>e  rd   r8   r   r   N)
r   rN   rZ   r-   rl   rO   rs   r   rt   r   )r   rT   rM   rU   r\   r   s         r%   &test_directed_edges_linestyle_sequencer   U  s     	abj111A
,
,eCFFmm
,
,
,C(CyAAAK{q    +yy'A'ABB , ,
U  ""e+++++, ,r8   c                  D   ddl m} m} ddlm} t          j        t
          j                  }t          j        t
          j                  }t          j	        |          }t          j	        |          }t          j
        ||          }t          ||          sJ t          j        ||d          }t          |t                    sJ t          |          dk    rt          |d         |          sJ t          j        ||d          }t          ||           sJ t          j        ||d           }t          ||           sJ t          j        ||d           }t          |t                    sJ t          |          dk    rt          |d         |          sJ d S d S )Nr   )LineCollectionPathCollection)FancyArrowPatchTarrowsF)matplotlib.collectionsr   r   matplotlib.patchesr   r   cubical_graphGraphrZ   spring_layoutdraw_networkx_nodesr   rO   r,   rl   )	r   r   r   rT   dGrM   dposnodesedgess	            r%   test_return_typesr   m  s   EEEEEEEE222222
""A		"*	%	%B

1

CBD"1c**Ee^,,,,,"2tD999EeT"""""
5zzA~~%(O44444"2tE:::Ee^,,,,,"1d4888Ee^,,,,,"2s4888EeT"""""
5zzA~~%(O44444 ~44r8   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!<   d" t          d          D             }t          j        | ||d#$           t          j        | ||d#|%           t          j        | |d d&'           t          j        | |d(d)i*           d S )+Nr   rE   ri   r   r?   i        ?)nodelistr   r   r   )r      r      rr   )g      ?r   r   rB   rB   r   )r   r   )rJ   rh   rk   )r   r      )rI   r   r   r0   )r   r   )r   r   )r   r   )r   r   T)rI   r   min_source_marginmin_target_marginr   r0   z$a$r   z$b$rE   z$c$ri   z$d$r   z$\alpha$r   z$\beta$r   z$\gamma$r   z$\delta$r   c                 *    i | ]}||d z  dk    rdndS )ri   r   kr?   r<   r`   s     r%   rc   z*test_labels_and_colors.<locals>.<dictcomp>  s*    >>>aA

>>>r8      )	font_size)r   
font_colorF)edge_labelsrotater   z4-5r   )r   r   r   r   rO   r-   draw_networkx_labelsdraw_networkx_edge_labels)rT   rM   labelsr6   s       r%   test_labels_and_colorsr     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>>U1XX>>>FAsFb9999AsFbVLLLL CT%HHHH Cfe_EEEEEEr8   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   rE   r   rJ   r   )r   r   )r   rE   ri   r   r   i  r   ztab:blue)r   r   r   i  r   z
tab:oranger   r   )r   r   g)\(?off)	r   house_graphr   subplotsr   rO   marginstight_layoutaxis)rT   figaxrM   s       r%   test_house_with_colorsr     s    
AllnnGCFv*
E
EC 	    	3$!    1cA6666JJtHHUOOOJr8   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Mr8   c                  T    t          j                    } t          j        |            d S r:   )r   r   r   rT   s    r%   test_empty_graphr     s    


AGAJJJJJr8   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   rh   rk   )r   T)rI   r   F)r   r   r   rZ   r   r   r   rQ   collectionsr   rO   )r   rT   DGrM   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Jr8   c                      t          j        dt           j                  } t          j        | dg           t          j        | dgg d           d S )Nr   rX   )r   rE   r   rI   )r(      r   )rI   r   )r   rN   MultiDiGraphdraw_networkxr   s    r%   test_multigraph_edgelist_tuplesr    sT    
abo666AQ)----Q)DDDDDDr8   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<   )ra   x	num_nodess     r%   r   z#test_alpha_iter.<locals>.<listcomp>  s    555qQ]555r8      )r   r   rE      )r   rP   r   r   figureadd_subplotr   rl   r   r-   append)rM   r   r   r6   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5r8   c                     t          j        d          } t                                                              d          }t          j        | g d|           d |                                D             }t          |          dk    sJ d S )Nr   o   )ohs^)
node_shaper   c                 P    g | ]#}t          |t          j        j                  !|$S r<   )r   rQ   r   r   )ra   r  s     r%   r   z-test_multiple_node_shapes.<locals>.<listcomp>  s<       
1co6T(U(U	  r8   )r   rN   r   r
  r  r   get_childrenrl   )rT   r   scatterss      r%   test_multiple_node_shapesr    s    
aA		!	!#	&	&BGA...26666 ??$$  H x==Ar8   c                     t          j                    } t                                                              d          }t          j        | |d |                                 D             d |                                 D                        t          |                                 d |                                D                       D ]o\  }}|dz  rdnd}t          j
                            |                                |          sJ t          |d	z  d
z             |                                k    sJ pd S )Nr  c                 "    i | ]}||d z  rdndS )ri   r   r?   r<   r`   s     r%   rc   z7test_individualized_font_attributes.<locals>.<dictcomp>(  s'    @@@Aa!e,ss@@@r8   c                 :    i | ]}|t          |d z  dz             S )""""""@r   )intr`   s     r%   rc   z7test_individualized_font_attributes.<locals>.<dictcomp>)  s+    @@@1c!w-!+,,@@@r8   )r   r   r   c                     g | ]H}t          |t          j        j                  r't	          |                                          d k    F|IS )r   )r   rQ   textTextrl   get_text)ra   ts     r%   r   z7test_individualized_font_attributes.<locals>.<listcomp>-  sU     	
 	
 	
!SX]++	
 14AJJLL0A0AA0E0E 0E0E0Er8   ri   r	   r@   r  r   )r   karate_club_graphr   r
  r  r   r   rs   r  rQ   r6   rR   rS   r  get_size)rT   r   rb   r"  r>   s        r%   #test_individualized_font_attributesr%  "  s=   
A		!	!#	&	&BG	@@aggii@@@@@aggii@@@	    				
 	
__&&	
 	
 	
  6 61  !e.77z$$Q[[]]H=====1=1$%%555556 6r8   c                     t          j                    } t                                                              d          }d |                                 D             }d |                                 D             }t          j        | |d||           d |                                D             }t          |                                 |          D ]\  }}|	                                d|d         d	z  |d
         d	z  z   z  dz   k    sJ t          |          d	z  rt          j        j        j        nt          j        j        j        }t!          |                                |          sJ d S )Nr  c                 4    g | ]\  }}||z   d z  dk    rdndS )ri   r   -|>-[r<   ra   uvs      r%   r   z7test_individualized_edge_attributes.<locals>.<listcomp><  s2    MMM41aQUaK1,,55$MMMr8   c                 6    g | ]\  }}d |dz  |dz  z   z  d z   S )r(   ri   r<   r*  s      r%   r   z7test_individualized_edge_attributes.<locals>.<listcomp>=  s2    BBB1"AA&+BBBr8   T)r   r   
arrowstyle	arrowsizec                 P    g | ]#}t          |t          j        j                  !|$S r<   )r   rQ   patchesr   )ra   fs     r%   r   z7test_individualized_edge_attributes.<locals>.<listcomp>?  s<       
1ck6Q(R(R	  r8   r(   r   ri   rE   )r   r#  r   r
  r  r   r   r  rs   get_mutation_scalesumrQ   r1  
ArrowStyleBracketBCurveFilledBr   get_arrowstyle)rT   r   arrowstyles
arrowsizesr   r   ar>   s           r%   #test_individualized_edge_attributesr<  9  si   
A		!	!#	&	&BMM17799MMMKBB		BBBJGA"TkZPPPP ??$$  F AGGIIv&& 8 81##%%qtax!A$(/B)Cb)HHHHH 1vvz5CK"++'4 	
 !**,,h7777778 8r8   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<   r8   r%   test_error_invalid_kwdsrE  L  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)rJ   r   ri   r   r   rE   r   )rE   ri   r   z1arrowsize should have the same length as edgelistr>  )r/  )r   rZ   rB  rC  rD  r   )rT   r/  s     r%   +test_draw_networkx_arrowsize_incorrect_sizerJ  Q  s    

33344A		I	M
 
 
 ( ( 	Y''''( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (s   AA!Ar/     )r(   r   rK  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rJ   rG  rh   r   rJ   r   r   rE   ri   )rM   r/  )r   rZ   rO   r   r  r   repeatrs   rQ   r1  r   r3  )r/  rT   rM   r   r\   r>   s         r%   test_draw_edges_arrowsizerP  Z  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 4r8   r.  r(  r(  r)  z<|-|>c                    t          j        g d          }dddd}t          j        |||           }t          | t                    rt          j        |           n| } t          j        j	        j
        t          j        j	        j        t          j        j	        j        d}t          ||           D ]P\  }}t          |t          j        j                  sJ t          |                                ||                   sJ Qd S )NrM  r   rJ   r   rN  )rM   r.  rQ  )r   rZ   rO   r   strr   rO  rQ   r1  r5  r7  r6  CurveFilledABrs   r   r8  )r.  rT   rM   r   arrow_objectsr\   r>   s          r%   test_draw_edges_arrowstylerV  g  s   

+++,,AF
+
+C"1#*EEEE )3:s(C(CS	$$$ 
 {%2k$-'5 M UJ// I IX#s{:;;;;;#,,..h0GHHHHHHI Ir8   c                  p    t          j        t          t                              ddg                     d S )NrG  rH  r   )r   r   r   nparrayr<   r8   r%   test_np_edgelistrZ  |  s/    Wrxx0@'A'ABBBBBBr8   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   rJ   zhas no positionr>  )r   rN   rB  rC  NetworkXErrorr   rT   rM   s     r%   *test_draw_nodes_missing_node_from_positionr^    s    
aA
 
 C	r'/@	A	A	A ' '
q#&&&' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 's   AA!$A!r  )r  r  c                    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 )  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

    rJ   r   r   r   r  r   Nri   r
   r   r  r   r   rE   )r   r   r   rZ   rO   get_extentscorners)	r  r   r   rT   rM   default_patchdefault_extentpadded_patchpadded_extents	            r%   )test_draw_edges_min_source_target_marginsri    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///////r8   c           	         t                                           \  }}t          j        ddg          }dddd}t          j        ||||           }d |D             }t          j        |||| d	d
gd	d
g          }d |D             }t          ||          D ]B\  }	}
t          d|
d|	           |
d         |	d         k    sJ |
d         |	d         k     sJ CdS )r`  rJ   rh   r   r   )ri   r   rN  ra  c                 p    g | ]3}|                                                                 d d ddf         4S Nri   r   rc  rd  )ra   ds     r%   r   zHtest_draw_edges_min_source_target_margins_individual.<locals>.<listcomp>  s;    OOOAammoo--//!Q7OOOr8   b   f   rb  c                 p    g | ]3}|                                                                 d d ddf         4S rl  rm  )ra   ps     r%   r   zHtest_draw_edges_min_source_target_margins_individual.<locals>.<listcomp>  s;    MMM1Q]]__,,..sssAv6MMMr8   zp=z, d=r   rE   N)r   r   r   rZ   rO   rs   print)r  r   r   rT   rM   re  rf  rg  rh  rn  rr  s              r%   4test_draw_edges_min_source_target_margins_individualrt    s   & llnnGC

FF#$$AF
+
+C *1cbZPPPMOOOOON )	s)s)  L NMMMMMNM22  1mmmqmm tad{{{{tad{{{{{ r8   c                     t                                           \  } }t          j                    }|                    d           |                    dd           t          j        |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   rZ   add_nodeadd_edgerO   rc  r   heightdelaxesclose)r   r   rT   patchbboxs        r%   &test_nonzero_selfloop_with_single_noder}    s     llnnGC

AJJqMMMJJq!"1q&k2215ED:>>dkAooooKKOOOIIKKKKKr8   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                               |           t                                            dS )	zfEnsure that selfloop extent is non-zero when only a single edge is
    specified in the edgelist.
    ri   rX   rE   c                     i | ]}|||fS r<   r<   r`   s     r%   rc   zFtest_nonzero_selfloop_with_single_edge_in_edgelist.<locals>.<dictcomp>      
&
&
&1q!f
&
&
&r8   r   r   r   N)r   r   r   rN   rZ   rw  r   rO   rc  r   rx  ry  rz  )r   r   rT   rM   r{  r|  s         r%   2test_nonzero_selfloop_with_single_edge_in_edgelistr    s    
 llnnGC
abj111AJJq!
&
&ag
&
&
&C"1cVH===a@ED:>>dkAooooKKOOOIIKKKKKr8   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.
    rN  rp   r   Nrz   )r   drawingnx_pylabapply_alphaall)r   	colorlistr   rgba_colorss       r%   test_apply_alphar    sc     yyHIE*%11)UHMMK{111b5!U*+++++++r8   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   rX   c                     i | ]}|||fS r<   r<   r`   s     r%   rc   z>test_draw_edges_toggling_with_arrows_kwarg.<locals>.<dictcomp>%  s    
!
!
!1q!f
!
!
!r8   Tr   F)r   r   r   rN   rZ   rO   rl   r   r   rQ   r1  r   r   r   )r   UGr   rM   rT   r   s         r%   *test_draw_edges_toggling_with_arrows_kwargr    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 ;<<<<<<<r8   drawing_funcc                 @   dd l }t          j        d          }t                                          \  }} | ||           t          d |j        D                       sJ |j        rJ t                              |           t          	                                 d S )Nr   r   r   c              3   T   K   | ]#}t          |t          j        j                  V  $d S r:   r   rQ   r   r   ra   ry   s     r%   	<genexpr>z?test_draw_networkx_arrows_default_undirected.<locals>.<genexpr>A  s1      UUz!S_;<<UUUUUUr8   )
r   r   rN   r   r   anyr   r1  ry  rz  r  r   rT   r   r   s        r%   ,test_draw_networkx_arrows_default_undirectedr  :  s    !!!!
aAllnnGCLrUUbnUUUUUUUUzKKOOOIIKKKKKr8   c                 X   dd l }t          j        dt          j                  }t                                          \  }} | ||           t          d |j        D                       rJ |j        sJ t          	                    |           t          
                                 d S )Nr   r   rX   r   c              3   T   K   | ]#}t          |t          j        j                  V  $d S r:   r  r  s     r%   r  z=test_draw_networkx_arrows_default_directed.<locals>.<genexpr>N  sB        :;
1co455     r8   )r   r   rN   rZ   r   r   r  r   r1  ry  rz  r  s        r%   *test_draw_networkx_arrows_default_directedr  G  s    !!!!
abj111AllnnGCLr  ?A~        :KKOOOIIKKKKKr8   c                  <   t          j        d          } |                     dd           t                                          \  }}t          j        | ddg|           |j        rJ t                              |           t                                           d S )Nr   r   rJ   rh   )rI   r   )	r   rN   rw  r   r   r   r1  ry  rz  )rT   r   r   s      r%   test_edgelist_kwarg_not_ignoredr  V  s    
aAJJq!llnnGCGA(R0000zKKOOOIIKKKKKr8   )rT   expected_n_edgesri   c           	      B   t          g d          D ]1\  }\  }}|                     ||t          |dz  d                     2d | D             }dddgg dfD ]E}t          j        | ||           t          j        | ||          }t          |          |k    sJ Fd	S )
zGDraws edges correctly for 3 types of graphs and checks for valid lengthrJ   rJ   rJ   rG  r   ri   weightc                     i | ]}|||fS r<   r<   r`   s     r%   rc   zFtest_draw_networkx_edges_multiedge_connectionstyle.<locals>.<dictcomp>i      
 
 
 1q!f
 
 
 r8   arc3,rad=0.1)r  r  arc3,rad=0.2connectionstyleN)	enumeraterw  roundr   rO   rl   )rT   r  ir+  r,  rM   
conn_styler   s           r%   2test_draw_networkx_edges_multiedge_connectionstyler  a  s     ???@@ 1 1	6Aq	

1aa!eQ
0000
 
 a
 
 
 C 		(888 / /

 	q#zBBBB'3
KKK6{{....../ /r8   c           	         t          g d          D ]1\  }\  }}|                     ||t          |dz  d                     2d | D             }t          j        | |g d          }ddd	gg dfD ]W}t          j        | ||          }t          |          |k    sJ |                                D ]}	|	j        j	        d
k    sJ XdS )zXDraws labels correctly for 3 types of graphs and checks for valid length and class namesr  r   ri   r  c                     i | ]}|||fS r<   r<   r`   s     r%   rc   zLtest_draw_networkx_edge_labels_multiedge_connectionstyle.<locals>.<dictcomp>}  r  r8   )r  r  r  r  r  r  CurvedArrowTextN)
r  rw  r  r   rO   r   rl   values	__class____name__)
rT   r  r  r+  r,  rM   r   r  
text_itemstis
             r%   8test_draw_networkx_edge_labels_multiedge_connectionstyler  u  s%    ???@@ 1 1	6Aq	

1aa!eQ
0000
 
 a
 
 
 C#	3 P P P  F 		(888 > >

 1!S*UUU
:"22222##%% 	> 	>B<(,======	>> >r8   c                  ,   t          j                    } |                     ddd           |                     ddd           t          j        | d          }d | D             }t          j        | ||dd	g
          }t          |          dk    sJ d S )Nr   rE   r(   r  r   r  c                     i | ]}|||fS r<   r<   r`   s     r%   rc   z;test_draw_networkx_edge_label_multiedge.<locals>.<dictcomp>  r  r8   r  r  )r   r  ri   )r   
MultiGraphrw  get_edge_attributesr   rl   )rT   r   rM   r  s       r%   'test_draw_networkx_edge_label_multiedger    s    
AJJq!BJJJq!BJ(H55K
 
 a
 
 
 C-	'8	  J z??ar8   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%   rc   z<test_draw_networkx_edge_label_empty_dict.<locals>.<dictcomp>  r  r8   r   N)r   rN   r   r   r]  s     r%   (test_draw_networkx_edge_label_empty_dictr    sQ     	aA
&
&ag
&
&
&C'3B???2EEEEEEr8   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                               |           t                                            dS )
ztWhen an edgelist is supplied along with a sequence of colors, check that
    the self-loops have the correct colors.)rI  rh   rk   r   r   )ri   ri   )pinkcyanr	   r@   rH   greenc                     i | ]}|||fS r<   r<   r`   s     r%   rc   zGtest_draw_networkx_edges_undirected_selfloop_colors.<locals>.<dictcomp>  r  r8   )r   rI   r0   r   Nr   r  )r   r   r   r   r   rO   rl   r1  rX  rY  rs   get_pathcontains_pointrQ   r6   rR   r[   ry  rz  )
r   r   rI   edge_colorsrT   rM   	sl_pointsr\   clrslps
             r%   3test_draw_networkx_edges_undirected_selfloop_colorsr    sS    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OOOIIKKKKKr8   fap_only_kwargr   r  r  r   r(   r   c                 t   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                              |           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%   rc   zEtest_user_warnings_for_unused_edge_drawing_kwargs.<locals>.<dictcomp>  r  r8   r   z

The z# keyword argument is not applicabler>  r   NerrorT)r   r   )r   rN   r   r   r,   keysrB  warnsUserWarningrO   warningscatch_warningssimplefilterry  rz  )r  rT   rM   r   r   
kwarg_names         r%   1test_user_warnings_for_unused_edge_drawing_kwargsr    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OOOIIKKKKKs$   B%%B),B)+C::C>C>draw_fnc                 j   t                                           \  }}t          j        d          }t	          j        d          5 } | ||           d d d            n# 1 swxY w Y   t          |          dk    sJ t                               |           t                                            d S )Nr   T)recordr   r   )	r   r   r   cycle_graphr  r  rl   ry  rz  )r  r   r   rT   ws        r%   *test_no_warning_on_default_draw_arrowstyler    s     llnnGC
qA		 	-	-	- b              q66Q;;;;KKOOOIIKKKKKs   A  A$'A$
hide_ticksTmethodc                 |   t          j        d          }d |j        D             }t                                          \  }} | ||||           |j        |j        fD ])}t          |                                          |k    sJ *t          	                    |           t          
                                 d S )Nr   c                     i | ]}|||fS r<   r<   r`   s     r%   rc   z#test_hide_ticks.<locals>.<dictcomp>  r  r8   )rM   r   r  )r   rN   r   r   r   xaxisyaxisboolget_ticklabelsry  rz  )r  r  rT   rM   _r   r   s          r%   test_hide_ticksr    s     	aA
&
&ag
&
&
&CLLNNEAr
F1#"444428$ 9 9D''))**j88888KKOOOIIKKKKKr8   )R__doc__r   r   r  rB  importorskiprQ   rX  user   rcParamsnetworkxr   barbell_graphr   r&   r.   r7   r=   markparametrizerV   r]   rn   rw   r{   r   r   r   rZ   r   r   r   r   r   r   r   r   r   r   mpl_image_comparer   r   r   r   r  r  r  r%  r<  rE  rJ  rP  rV  rZ  r^  ri  rt  r}  r  r  r  r   r   r  r  r  r  r   r  r  r  r  r  r  r   r  r   rO   r   r   r  r<   r8   r%   <module>r     s   2 2     				  f,''V!! f-..#]     
"
1a
 
   0	 	 	  * * *
 
#
	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
 

, 
,
 

,5 5 549F 9F 9Fz   2N N N  
K K K,E E E6 6 6$  6 6 6.8 8 8&$ $ $
( ( ( r<<<&899	4 	4 :9	4 /E/E/E'FGGI I HGI(C C C
' ' ' z22)0 )0 32)0\ z22* * 32*Z  $  (, , ,= = =D "'23C)DEE	 	 FE	 "'23C)DEE  FE   bjllA!,r/@/@!.DE / /	 /  bjllA!,r/@/@!.DE > >	 >(     F F F  : 	s	b	N+	b!	b!	 	 	 	2 RWb.>$?@@	 	 A@	 t}55

$


	 		 		 	 65	 	 	r8   