
    sh                        S r SSKrSSKrSSKrSSKrSSKr\R                  " S5      r\R                  " S5      r	\R                  S5        \R                  " S5      rS\R                  S'   \R                  " S	S
5      r0 SS_SS_SS_SS_SSSSSSSSSSSS.
_SS_SS_SS_SS_S S_S!S_S"S_S#SSSSSS$S%S%S&.SSS'SS(.
_S)S*_S+S_S,S*_S-S_S.SSS/.Er\R                   R#                  S0SS\S   4S1S245      S3 5       r\R                   R#                  S4S55      S6 5       rS7 r\R                   R*                  S8 5       rS9 r\R                   R*                  S: 5       r\R                   R*                  S; 5       r\R                   R*                  S< 5       r\R                   R#                  S=S>5      \R                   R#                  S?\R6                  \R8                  45      S@ 5       5       r\R                   R#                  S?\R6                  \R8                  45      SA 5       r\R                   R#                  S?\R6                  \R8                  45      SB 5       rSC r \R                   R#                  S?\R6                  \R8                  45      SD 5       r!\R                   R#                  S?\R6                  \R8                  45      SE 5       r"\R                   R#                  S4S\S!   \S!   /4SFSFSF/4SGSFSH/445      \R                   R#                  S?\R6                  \R8                  45      SI 5       5       r#\R                   R#                  S4S\S)   \S)   /4SJSJSJ/4SKS*SJ/445      \R                   R#                  S?\R6                  \R8                  45      SL 5       5       r$SM r%SN r&\R                   R*                  SO 5       r'SP r(SQ r)SR r*SS r+\R                   R#                  SST5      SU 5       r,\R                   R#                  SVSS/5      SW 5       r-SX r.SY r/\R`                  SZ 5       r1S[ r2S\ r3S] r4S^ r5S_ r6\R                   R#                  S=S`SaSb/Sc4SdSe/Sf4SgSh/Si4SjSk/Sl44	5      \R                   R#                  SmSSn/45      So 5       5       r7\R                   R#                  S=S`SaSb/Sc4SdSe/Sf4SgSh/Si4SjSk/Sl44	5      \R                   R#                  SmSSn/45      Sp 5       5       r8Sq r9Sr r:Ss r;St r<Su r=\R                   R#                  S?\R6                  \R8                  45      Sv 5       r>\R                   R#                  SwSxSy/Sy445      Sz 5       r?\R                   R#                  SwSxSy/Sy445      S{ 5       r@\R                   R#                  Sm/ S|QSSnS}/45      S~ 5       rAS rBS rC\R                   R#                  SKS5      S 5       rD\R                   R#                  SS/S/S// SQSS*// SQ45      S 5       rES rFS rG\R                   R*                  S 5       rHS rIS rJS rKS rLS rMS rNS rOS rPS rQS rR\R                   R#                  SS/ SQ45      S 5       rS\R                   R#                  SS/ SQ45      S 5       rTS rUS rV\R                   R#                  SST5      S 5       rW\R                   R#                  SST5      S 5       rXS rYS rZS r[S r\\R                   R#                  S\R                  \R                  45      S 5       r_\R                   R#                  S\R                  \R                  45      S 5       r`S ra\R                   R#                  S\R8                  " 5       S/\R                  " 5       S	/\R                  " 5       S	/45      S 5       rd\R                   R#                  S\R8                  " 5       S/\R                  " 5       S	/\R                  " 5       S	/45      S 5       reS rfS rgS rh\R                   R#                  SSS*0SS0SS0SSH0SSH045      S 5       ri\R                   R#                  S\R                  \R                  45      S 5       rk\R                   R#                  SSS/5      \R                   R#                  S\R                  \R                  \R                  \R                  \R                  /5      S 5       5       rpS rqg)z,Unit tests for matplotlib drawing functions.    N
matplotlibnumpyPSzmatplotlib.pyplotFztext.usetex      node_posnode_visibleT
node_colorz#1f78b4	node_sizei,  
node_label   z#000000z
sans-serifnormal      ?center)
sizecolorfamilyweightalphabackground_colorbackground_alphah_alignv_alignbbox
node_shapeo
node_alphanode_border_widthnode_border_colorfaceedge_visible
edge_width
edge_color
edge_labelround)r   r   r   )boxstyleecfc      ?)
r   r   r   r   r   r   r   r   posrotate
edge_style-
edge_alphaedge_arrowstyleedge_arrowsizearc3)edge_curvatureedge_source_marginedge_target_margin)
param_nameparam_valueexpected)r
   #FF0000red)r
   r   limec                    [         R                  " S5      n[         R                  " USS5        [        R	                  5       R                  S5      n[         R                  " U4SU0X0D6  [        R                  R                  UR                  5       S   R                  5       S   U5      (       d   e[        R                  5         g )Nr   z#00FF00r   o   canvasr   )nx
path_graphset_node_attributespltfigureadd_subplotdisplaymplcolors
same_colorget_childrenget_edgecolorsclose)r5   r6   r7   Gr=   s        u/Users/tiagomarins/Projetos/claudeai/copy_bank/venv/lib/python3.13/site-packages/networkx/drawing/tests/test_pylab.py$test_display_arg_handling_node_colorrM   C   s     	aA1i1ZZ\%%c*FJJq==J#<=::  !4!4!6q!9!H!H!J1!MxXXXXIIK    )r6   r7   ))N)   rO   rO   rO   )r)   )r)   r)   r)   r)   )n_alpha)r   r)   gUUUUUU?      ?c           
         [         R                  " S5      n[         R                  " X"R                  5        Vs0 s H  o3SUS-   -  _M     snS5        [        R                  5       R                  S5      n[         R                  " X$U S9  [        UR                  5       S   R                  5       S S 2S4   U:H  5      (       d   e[        R                  5         g s  snf )Nr   rO   rP   r<   )r=   r   r      )r>   r?   r@   nodesrA   rB   rC   rD   allrH   get_fcrJ   )r6   r7   rK   nr=   s        rL   $test_display_arg_handling_node_alpharX   T   s     	aA1wwyAy!!q1u+~yA9MZZ\%%c*FJJqK8a '')!Q$/8;    IIK Bs   C
c            	         [         R                  " S5      n [         R                  " X R                  5        Vs0 s H  oX4_M     snS5        [        R                  5       R                  S5      n[         R                  " XSS9  [        R                  UR                  5       S   R                  5       R                  SS/SS/SS/SS//:H  5      (       d   e[        R                  5         g s  snf )	Nr   r*   r<   r=   r   r   rO      rS   )r>   r?   r@   rT   rA   rB   rC   rD   nprU   rH   get_offsetsdatarJ   )rK   rW   r=   s      rL   test_display_node_positionr_   g   s    
aA1'')<)Q1&y)<eDZZ\%%c*FJJq%066a ,,.33AAAQRTUPV7WW    IIK =s   C/
c            
         [         R                  " 5       n [        R                  5       u  p[         R                  " U SSSSSS.S5        [         R                  " U U R                  5        Vs0 s H  nUUS:w  a  S	OS
US:w  a  SOSS._M     sn5        [         R                  " U SSSSSS9  UR                  S5        [        R                  5         [        R                  S5        U$ s  snf )z
Originally, I wanted to use the exact samge image as test_house_with_colors.
But I can't seem to find the correct value for the margins to get the figures
to line up perfectly. To the human eye, these visualizations are basically the
same.
r   r   rO   r   r   rO   rO   rO   r)          @r   rO   r[   rS   r   r*   r       tab:blue
tab:orange)r   r   r)   r   Nk)r   r.   r"   r   r   g(\?off)
r>   house_graphrA   subplotsr@   rT   rD   marginstight_layoutaxis)rK   figaxrW   s       rL   test_display_house_with_colorsru   r   s     	AllnGC	v&V:F 	 WWY	

 	  !QD'(Av<  	
	 JJ	 JJtHHUOJ'	
s   - C)
c            
         [         R                  " 5       n [         R                  " X R                  5        VVs0 s H  u  pX4X-   S-  (       a  SOS_M     snnS5        [        R                  5       R                  S5      n[         R                  " XSS9  UR                  5        Vs/ s H0  n[        U[        R                  R                  5      (       d  M.  UPM2     snS   n[        UR                  5       5      [        U R                  5        VVs/ s H  u  pX-   S-  (       d  M  S	PM     snn5      :X  d   e[        R!                  5         g s  snnf s  snf s  snnf )
Nr[   -|>r-   
arrowstyler<   
   )r=   r0   r   rO   )r>   karate_club_graphset_edge_attributesedgesrA   rB   rC   rD   rH   
isinstancerE   collectionsLineCollectionlen	get_pathssumrJ   )rK   uvr=   llcs         rL   test_display_line_collectionr      s   
A	ggiHidaQFaeq[Ec1iH, ZZ\%%c*FJJq3 $$&
&Aa778 	
&
 	
	B
 r||~#QWWY&NYTQ15A+qY&N"OOOOIIK I


 'Os   E*-EEE -E c                     [         R                  5       u  p[        R                  " 5       n[        R                  " USS9n[        R
                  " X#S5        [        / SQ5      n[        R
                  " UUR                  5        Vs0 s H   nUSSUS:  a  SOS	[        U5      S
SS.S._M"     sn5        [        R                  " USSS9  / SQn[        R                  " UUR                  5        VVs0 s H  u  pxXx4SSSXx4U;   S._M     snn5        [        R                  " USSS9  / SQn[        R                  " UUR                  5        VVs0 s H  u  pxXx4S	Xx4U;   S._M     snn5        [        R                  " USSS9  [         R                  5         [         R                  S5        U $ s  snf s  snnf s  snnf )z'See 'Labels and Colors' gallery example   \<1s seedr*   )$a$$b$$c$$d$$\alpha$$\beta$$\gamma$$\delta$i   g?r   ztab:redrj      
whitesmoke)labelr   r   )r   r   r   r   ztab:grey)r   r#   )rc   rO   r[   r[   rS   r   rS      r)   )widthr   r   visibleF)r   r	   )r      r   r   r      )r   r   )r   r   rm   )rA   ro   r>   cubical_graphspring_layoutr@   iterrT   nextrD   r{   r|   rq   rr   )	rs   rt   rK   r*   labelsrW   edgelistr   r   s	            rL   test_display_labels_and_colorsr      s    llnGC
A


1:
.C15)		
F 	 WWY	
  &'!e#'<lS	  	
 JJq5Z8 0H	 		
 " F"6X-	  "	
 JJq5u5/H	 		

 "	 F#6X-  "	
	 JJq5u5HHUOJW	
"	
	
s   'F3
4F8F>c                     SS K n [        R                  5       u  p[        R                  " 5       nSn[        U R                  USS95      S-  n[        R                  " 5       n[        U5       H%  u  nu  pxUR                  Xx[        US-  S5      S9  M'     [        R                  " U[        R                  " USS	9S
5        U R                  U R                  S/S-  5       V	s/ s H  n	SU	 3PM
     sn	5      n
[        R                  " X3R                  SS9 Vs0 s H  o[!        U
5      _M     snS5        [        R                  " UUR                  SSS9 VVs0 s H  Gt p[#        U5      USS0S._M     snnS5        [        R$                  " USS[&        R(                  S   SS9  [        R*                  " X2S
S9  [        R-                  5         [        R/                  S5        U$ s  sn	f s  snf s  snnf )Nr   ABCr[   )repeatr   rS   )wr   r   r*   g333333?	arc3,rad=Tkeys	curvaturer   )r   r^   r   )r   r   r   r   infernoFrT   rZ   rm   )	itertoolsrA   ro   r>   MultiDiGraphlistproduct	enumerateadd_edger%   r@   r   cycle
accumulater{   r|   r   tupleapply_matplotlib_colorsrE   	colormapsrD   rq   rr   )itrs   rt   rK   rT   prodir   r   rcsier   s                rL   test_display_complexr      s   llnGC
AE

5
+,q0D
At_	6A	

15Q?
+ %1b..qzBEJ
((R]]D6A:-FG-FisO-FG
HC1WW$W5GH5G$s)|5GH+V	 d5	
5 !HGQ<885	
 	 q#wi0HPUVJJqe,HHUOJ HH	
s   $G+G0
G5c                  j   [         R                  5       u  p[        R                  " 5       nUR	                  / SQ5        UR                  SSSS9  UR                  SSSS9  UR                  SSSS9  UR                  SSS	S9  UR                  SS
SS9  UR                  SSSS9  UR                  SSSS9  UR                  S
SSS9  UR                  S
SSS9  UR                  SSSS9  UR                  SSSS9  UR                  SSSS9  UR                  SSSS9  UR                  SSSS9  [        R                  " USSSS9n[        [        X3SS  5      5      n[        R                  " U[        R                  " USS9S5        [        R                  " UUR                  SS9 VVVs0 s H5  u  pVnXV4XV4U;   d  [        [        XV45      5      U;   a  SOSUS   SS.S ._M7     snnn5        [        R                  " X!S!9  [         R!                  5         [         R#                  S"5        U $ s  snnnf )#N)ABCDEFrK   Hr   r   r   r   r   r   r      r   r   r   Ir[   r   	      ry   rK   rO   r   r   %   r   r*   T)r^   r9   blackF)r   r+   )r   r   r=   rm   )rA   ro   r>   Graphadd_nodes_fromr   shortest_pathr   zipr@   r   r{   r|   r   reversedrD   rq   rr   )rs   rt   rK   path
path_edgesr   r   ds           rL   test_display_shortest_pathr   	  s"   llnGC

A=>JJsCJ"JJsCJ"JJsCJ"JJsCJ#JJsCJ"JJsCJ"JJsCJ"JJsCJ"JJsCJ#JJsCJ#JJsCJ"JJsCJ"JJsCJ"JJsCJ" AsC9D c$QR)*J1b..qr:EB	 777-
	
 .a F v+uXqf5E/F*/T  #$X;%@  .
	
 JJqHHUOJ
	
s   *<H.)r#   r7   )Nr   r   r9   r   r           yellowr   rO   r   rO   r:   )r   blue)#0000FFr   
graph_typec                   ^ [         R                  " SUS9n[         R                  " USS5        [        R	                  5       R                  S5      n[         R                  " X0US9  UR                  5       (       aZ  UR                  5        Vs/ s H>  n[        U[        R                  R                  5      (       d  M.  UR                  5       PM@     nnOYUR                   Vs/ s H0  n[        U[        R                  R                  5      (       d  M.  UPM2     snS   R!                  5       n[#        U4S jU 5       5      (       d   e[        R%                  5         g s  snf s  snf )	NrS   create_usingr   r   r<   )r#   r=   r   c              3   d   >#    U  H%  n[         R                  R                  UT5      v   M'     g 7fN)rE   rF   rG   ).0cr7   s     rL   	<genexpr>1test_display_edge_single_color.<locals>.<genexpr>T  s%     B6aszz$$Q116s   -0)r>   r?   r{   rA   rB   rC   rD   is_directedrH   r}   rE   patchesFancyArrowPatchrV   r~   r   
get_colorsrU   rJ   )r#   r7   r   rK   r=   frF   r   s    `      rL   test_display_edge_single_colorr   7  s    	aj1A1i1ZZ\%%c*FJJq7}} ((*
*!S[[889 AHHJ* 	 
 ''
'!S__;;< '
 	 Z\	 	
 B6BBBBBIIK

s   -E ?E $-E%E%c                    [         R                  " SU S9n[         R                  " USSS.S5        [        R	                  5       R                  S5      n[         R                  " XS9  S	S
/nUR                  5       (       aZ  UR                  5        Vs/ s H>  n[        U[        R                  R                  5      (       d  M.  UR                  5       PM@     nnOYUR                   Vs/ s H0  n[        U[        R                  R                  5      (       d  M.  UPM2     snS   R!                  5       n[        R"                  R%                  XS5      (       d   e[        R'                  5         g s  snf s  snf )NrS   r   r8   r   r   rO   rc   r   r   r<   r   r9   r   r   )r>   r?   r{   rA   rB   rC   rD   r   rH   r}   rE   r   r   rV   r~   r   r   rF   rG   rJ   )r   rK   rt   r7   r   rF   r   s          rL   !test_display_edge_multiple_colorsr   X  s   
aj1A1y)DgN		!	!#	&BJJqvH}} __&
&!S[[889 AHHJ& 	 
 ~~
%!As7U7U)VA~

Z\ 	 ::  2222IIK

s   -E/E/)-E4E4c           	         [         R                  " SU S9n[         R                  " XR                  5        Vs0 s H  o"X"4_M     snS5        [        R                  5       R                  S5      n[         R                  " XS9  UR                  5       (       a  UR                  5        Vs/ s Hp  n[        U[        R                  R                  5      (       d  M.  UR                  5       R                  SS S 24   UR                  5       R                  SS S 24   4PMr     nnOUR                    Vs/ s H0  n[        U[        R                   R"                  5      (       d  M.  UPM2     snS   nUR%                  5        Vs/ s H(  oR                  SS S 24   UR                  SS S 24   4PM*     nnS	S
/n	Sn
['        XY5       HO  u  pUu  pUu  nn[)        [+        X-
  5      X4:  5      (       a"  [)        [+        UU-
  5      X4:  5      (       a  MO   e   [        R-                  5         g s  snf s  snf s  snf s  snf )NrS   r   r*   r<   r   r   )ra   rd   )rd   r[   r[   g?)r>   r?   r@   rT   rA   rB   rC   rD   r   rH   r}   rE   r   r   get_pathverticesr~   r   r   r   rU   absrJ   )r   rK   rW   rt   r   
end_pointsr   line_collectionpr7   	thresholdar   	act_startact_end	exp_startexp_ends                    rL   test_display_edge_positionr  m  s   
aj1A1'')<)Q1&y)<eD		!	!#	&BJJq}} __&
&!S[[889 HQZZ\""1a4(!**,*?*?A*FG& 	 

 ~~
%!As7U7U)VA~

 <K;T;T;V
;VaZZ1qzz"a%01;V 	 
 !"23H IJ)		73y,-0FFGGC'!"i%;;M
 M
 	
 
 * IIK5 =


s$   H,
+-H1AH13-H6$H6/H;c                  
   [         R                  " 5       n S nU" U 5      n[        R                  5       R	                  S5      n[         R
                  " XUS9  [        U R                  5       UR                  5       S   R                  5       R                  5       VVs0 s H  u  pEU[        U5      _M     nnnU R                  5        H  n[        X$   Xd   :H  5      (       a  M   e   [        R                  5         g s  snnf )Nc                 ,    [         R                  " U SS9$ )Ni/ r   )r>   r   rK   s    rL   fixed_layout4test_display_position_function.<locals>.fixed_layout  s    //rN   r<   )r   r=   r   )r>   rz   rA   rB   rC   rD   r   rT   rH   r]   r^   r   rU   rJ   )rK   r  r*   rt   rW   r  act_poss          rL   test_display_position_functionr    s    
A0 q/C		!	!#	&BJJq3 !$AGGIr/@/C/O/O/Q/V/V W W58 W   WWY36WZ'(((( IIKs   C?c                    [         R                  " SU S9n[         R                  " USSS.S5        [        R                  S   n[         R
                  " USSUS	S
9  [        R                  5       R                  S5      n[         R                  " XS9  [        R                  R                  US9nUR                  SS5        UR                  S5      UR                  S5      /nUR                  5       (       aZ  UR                  5        Vs/ s H>  n[!        U[        R"                  R$                  5      (       d  M.  UR'                  5       PM@     nnOYUR(                   Vs/ s H0  n[!        U[        R(                  R*                  5      (       d  M.  UPM2     snS   R-                  5       n[        R.                  R1                  US   UR2                  S   S   5      (       d   e[        R.                  R1                  US   UR2                  S   S   5      (       d   e[        R.                  R1                  XW5      (       d   e[        R5                  5         g s  snf s  snf )NrS   r   r   rO   r   r   plasmar   Fr   r<   r   cmaprc   r   )r>   r?   r{   rE   r   r   rA   rB   rC   rD   cmScalarMappableset_climto_rgbar   rH   r}   r   r   get_facecolorr~   r   r   rF   rG   r|   rJ   )	r   rK   r  r=   mapperr7   r   rF   r   s	            rL   test_display_edge_colormapsr    s   
aj1A1q!4h?=="Dq(GTGZZ\%%c*FJJq VV"""-F
OOAqq!6>>!#45H}} ((*
*!S[[889 AOO* 	 
 ''
'!S__;;< '
 	 Z\	 	
 ::  !aggdmG.DEEEE::  !aggdmG.DEEEE::  2222IIK

s   -I<I!-I I c                 z   [         R                  " SU S9n[         R                  " USSSS.S5        [        R                  S   n[         R
                  " USS	U5        [        R                  5       R                  S
5      n[         R                  " XS9  [        R                  R                  US9nUR                  SS5        UR                  S5      UR                  S5      UR                  S5      /nUR                   Vs/ s H0  n[        U[        R                  R                   5      (       d  M.  UPM2     snS   R#                  5       n[        R$                  R'                  US   UR(                  S   S	   5      (       d   e[        R$                  R'                  US   UR(                  S   S	   5      (       d   e[        R$                  R'                  US   UR(                  S   S	   5      (       d   e[        R$                  R'                  XW5      (       d   e[        R+                  5         g s  snf )NrS   r   r   r)   rO   r   rO   r[   r   r  r   r<   r   r  r[   )r>   r?   r@   rE   r   r   rA   rB   rC   rD   r  r  r  r  r~   r}   PathCollectionrI   rF   rG   rT   rJ   )r   rK   r  r=   r  r7   srF   s           rL   test_display_node_colormapsr#    s   
aj1A1!2H==="Dq(GT:ZZ\%%c*FJJq VV"""-F
OOAqq!6>>##6q8IJH%%%aAs7U7U)V%			  ::  !aggaj.ABBBB::  !aggaj.ABBBB::  !aggaj.ABBBB::  2222IIKs   -H85H8r   r   ry   c           	         [         R                  " SUS9n[         R                  " USSS.S5        [        R	                  5       R                  S5      n[         R                  " X0US9  UR                  5       (       aZ  UR                  5        Vs/ s H>  n[        U[        R                  R                  5      (       d  M.  UR                  5       PM@     nnOb[        UR                   Vs/ s H0  n[        U[        R                  R                   5      (       d  M.  UPM2     snS	   R#                  5       5      nXa:X  d   eg s  snf s  snf )
NrS   r   r   ry   r   r   r<   )r"   r=   r   )r>   r?   r{   rA   rB   rC   rD   r   rH   r}   rE   r   r   get_linewidthr   r~   r   get_linewidths)r6   r7   r   rK   r=   r   widthsr   s           rL   test_display_edge_widthr(    s    	aj1A1q"5w?ZZ\%%c*FJJq8}} ((*
*!S[[889 AOO* 	 
   +++Aa!?!?@ + 	  !
 
s   -EE+-EE:stylec           	         [         R                  " SUS9n[         R                  " USSS.S5        [        R	                  5       R                  S5      n[         R                  " X0US9  UR                  5       (       aZ  UR                  5        Vs/ s H>  n[        U[        R                  R                  5      (       d  M.  UR                  5       PM@     nnOSSS	.nUR                   Vs/ s H0  n[        U[        R                  R                  5      (       d  M.  UPM2     snS
   R!                  5        V	s/ s H   n	XyS
   U	S   b  [#        U	S   5      OS 4   PM"     nn	Xa:X  d   e[        R%                  5         g s  snf s  snf s  sn	f )NrS   r   r-   r)  r   r*  r<   )r,   r=   ))r   N)r   )rO   gffffff?r   rO   )r>   r?   r{   rA   rB   rC   rD   r   rH   r}   rE   r   r   get_linestyler~   r   get_linestylesr   rJ   )
r6   r7   r   rK   r=   r   styles
linestylesr   r"  s
             rL   test_display_edge_styler0    sf    	aj1A1sC8'BZZ\%%c*FJJq8}} ((*
*!S[[889 AOO* 	 
 "%c:

  +++Aa!?!?@ + 	  !	"
" !QqT-=eAaDk4HI" 	 
 IIK#

s   -E=E=+-FF8'Fc                     [         R                  " S5      n [        R                  5       R	                  S5      n[         R
                  " XSS0S9  UR                  5        Vs/ s H0  n[        U[        R                  R                  5      (       d  M.  UPM2     nn[        U R                  5       U5       H:  u  pEUR                  5       [        U5      :X  d   eUR                  5       S:X  a  M:   e   [        R!                  5         g s  snf )Nr   r<   r      )r=   r   g      4@)r>   r?   rA   rB   rC   rD   rH   r}   rE   textTextr   rT   get_textstrget_sizerJ   )rK   r=   tr   rW   r   s         rL   test_display_node_labelsr9    s    
aAZZ\%%c*FJJqVRL9,,.O.A*Q2Na.FOAGGIv&zz|s1v%%%zz|t### ' IIK	 Ps   #-D	D	c                     [         R                  " S5      n [        R                  5       R	                  S5      n[         R
                  " X R                  5        VVs0 s H  u  p#X#4SX#-   0_M     snn5        [         R                  " XSS0S S9  UR                  5        Vs/ s H0  n[        U[        R                  R                  5      (       d  M.  UPM2     nn[        U5        [        U R                  5       U5       HC  u  pgUR                  5       [!        US   US   -   5      :X  d   eUR#                  5       S:X  a  MC   e   [        R%                  5         g s  snnf s  snf )	Nr   r<   r   r   r   )r=   r$   r   r   rO   )r>   r?   rA   rB   rC   r{   r|   rD   rH   r}   rE   r3  r4  printr   r5  r6  	get_colorrJ   )rK   r=   r   r   r8  r   r   r   s           rL   test_display_edge_labelsr=    s   
aAZZ\%%c*F 1GGINIDAv'77INOJJqWcNtL,,.O.A*Q2Na.FO	&MAGGIv&zz|s1Q4!A$;////{{}### ' IIK OOs   E#-E#E#c                      [         R                  " 5       n [        R                  5       u  p[         R                  " XS9  [        R                  5         [        R                  S5        U$ )Nr   rm   )r>   empty_graphrA   ro   rD   rq   rr   )rK   rs   rt   s      rL   test_display_empty_graphr@  -  sC    
AllnGCJJqHHUOJrN   c                     [         R                  " 5       n U R                  / SQ5        U R                  / SQ5        [         R                  " X R                  SS9 Vs0 s H  oSS[        US   5      -   3_M     snS5        [        R                  5       R                  S	5      n[         R                  " XS
9  UR                  5        Vs/ s HH  n[        U[        R                  R                  5      (       d  M.  UR!                  5       R"                  PMJ     nnU/ SQ:X  d   e[        R%                  5         g s  snf s  snf )N)r   r   r   r   ))r   r   0)r   r   1)r   r   -1)r   r   rC  )r   r   rD  )r   r   rB  Tr   r   皙?r[   r   r<   r   )r   rE  皙ɿrE  rF  r   )r>   
MultiGraphr   add_edges_fromr{   r|   intrA   rB   rC   rD   rH   r}   rE   r   r   get_connectionstyleradrJ   )rK   r   r=   r   radss        rL   (test_display_multigraph_non_integer_keysrM  7  s   
A)*	
	 	gg4g6HI6H3QqT?+,,6HI; ZZ\%%c*FJJq  $$&&Aa445 	$##& 	 
 3333IIK Js   D<
-E=Ec                      [         R                  " 5       n [        R                  " [         R                  5         [         R
                  " U SS9  [        R                  5         S S S 5        g ! , (       d  f       g = f)Nbad_arg)rO  )r>   rz   pytestraisesNetworkXErrorrD   rA   rJ   r  s    rL   test_display_raises_for_bad_argrS  R  sE    
A	r''	(


1i(		 
)	(	(s   *A--
A;c            
      $   [         R                  " S[         R                  S9n [         R                  " X R	                  5        VVs0 s H  u  pX4X-   S-   S-  _M     snnS5        [
        R                  5       n[         R                  " XS9  / SQUR                  5        Vs/ s H>  n[        U[        R                  R                  5      (       d  M.  UR                  5       PM@     sn:X  d   e[
        R                  5         g s  snnf s  snf )Nr   r   r[   	arrowsizer   )r      1   )r>   r?   DiGraphr{   r|   rA   axesrD   rH   r}   rE   r   r   get_mutation_scalerJ   )rK   r   r   rt   r   s        rL   test_display_arrow_sizer[  Y  s    
abjj1A	;QFQUQY1$$;[ 
BJJq""Aa445 	"   
 IIK <s   D%-DDc            	         [         R                  " S5      n [         R                  " U SSSSS.S5        [         R                  " X R                  5        Vs0 s H  oUS:  _M
     snS	5        [        R
                  " [         R                  5         [         R                  " U 5        S
S
S
5        g
s  snf ! , (       d  f       g
= f)zH
This test ensures that a error is raised for incomplete position data.
r   ra   rd   r   )r   r   )r   rO   r[   r   r*   r   r   N)r>   r?   r@   rT   rP  rQ  rR  rD   )rK   rW   s     rL   %test_display_mismatched_edge_positionr]  h  s     	aA1&V6JER1;A!a%x;YG 
r''	(


1 
)	( < 
)	(s   B1
B66
C)r   r"  c                    [         R                  5       R                  S5      n[        R                  " S/5      n[        R
                  " USSS.S5        [        R                  " X!U S9  UR                  5        Vs/ s H0  n[        U[        R                  R                  5      (       d  M.  UPM2     snS   nUR                  5       R                  5       SSS	2S4   n[         R                  5       R                  S5      n[        R                  " UUS
S
U S9  UR                  5        Vs/ s H0  n[        U[        R                  R                  5      (       d  M.  UPM2     snS   nUR                  5       R                  5       SSS	2S4   nUS   US   :  d   eUS   US   :  d   e[         R                  5         gs  snf s  snf )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 os min_{source/target}_margin edge
attributes result is 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

r<   rc   ra   rd   r*   )r=   r   r   Nr[   d   )r=   r3   r4   r   rO   )rA   rB   rC   r>   rX  r@   rD   rH   r}   rE   r   r   get_extentscornersrJ   )r   rt   rK   r   default_arrowdefault_extentpadded_arrowpadded_extents           rL   test_display_edge_marginsrf  y  s   * 
	!	!#	&B


F8A1&V4e<JJq
3??$$a
1ckk6Q6Q(R$	M #..088:3Q36BN		!	!#	&BJJ	 ??$$a
1ckk6Q6Q(R$	L !,,.6681a@M nQ////nQ////IIK-s   =-G.G--GGticksc           	         [         R                  " S5      n[         R                  " XR                  5        Vs0 s H  o"X"4_M     snS5        [        R                  5       n[         R                  " XS9  UR                  UR                  4 H"  n[        UR                  5       5      U :w  a  M"   e   [        R                  5         g s  snf )NrS   r*   )
hide_ticks)r>   r?   r@   rT   rA   rY  rD   xaxisyaxisboolget_ticklabelsrJ   )rg  rK   rW   rt   rr   s        rL   test_display_hide_ticksrn    s    
aA1'')<)Q1&y)<eD	BJJq#288$D'')*e333 % IIK =s   C	
c                     [         R                  5       n [        R                  " 5       nUR	                  S5        UR                  SS5        [        R                  " USS0S5        [        R                  " XS9  U R                  5        Vs/ s H0  n[        U[        R                  R                  5      (       d  M.  UPM2     snS   nUR                  5       n[        UR                  5        [        UR                   5        UR                  S:  a  UR                   S:  d   e[         R#                  U 5        [         R%                  5         g s  snf )Nr   ra   r*   r   )rA   rY  r>   rX  add_noder   r@   rD   rH   r}   rE   r   r   r`  r;  r   heightdelaxesrJ   )rt   rK   r   arrowr   s        rL   test_display_self_looprt    s    	B


AJJqMJJq!1q&k51JJq??$$a
1ckk6Q6Q(R$	E D	$**	$++::>dkkAo--KKOIIKs   -E>Ec                      [         R                  " 5       n [         R                  " U 5        [         R                  " U S5      0 :X  d   eg)z
If the pos attribute isn't provided or is a function, display computes the layout
and adds it to the graph. We need to ensure that this new attribute is removed from
the returned graph.
z!display's position attribute nameN)r>   rz   rD   get_node_attributesr  s    rL   test_display_remove_pos_attrrw    s9     	AJJqM!!!%HIROOOrN   c               #      #    [         R                  5       u  pX4v   [         R                  U5        [         R                  5         g 7fr   )rA   ro   rr  rJ   )rs   rt   s     rL   ro   ro     s-     llnGC
'MKKOIIKs   AAc                  2    [         R                  [         R                  [         R                  [         R                  [         R
                  [         R                  [         R                  /n SSSS./n[        R                  " X5       H'  u  p#U" [        40 UD6  [        R                  S5        M)      [        R                  " S5        g ! [         a     N$f = f! [          a     g f = f!  [        R                  " S5        f ! [          a     f f = f= f)Nr   r_  rS   )r
   r   r   test.ps)r>   draw_circulardraw_kamada_kawaidraw_planardraw_randomdraw_spectraldraw_spring
draw_shellr   r   barbellrA   savefigModuleNotFoundErrorosunlinkOSError)	functionsoptionsfunctionoptions       rL   	test_drawr    s      NNNNNNMM
	 #*aHI ) 1 1) EHW''KK	" !F	IIi 	  
  			IIi  		sZ   B3C 6C 
CC- CC- 
C*)C*-D/DD
DDDDc                      [        [        S5      5      [        [        SS5      5      [        [        SS5      5      /n [        R                  " [        U S9  [
        R                  S5         [        R                  " S5        g ! [         a     g f = f!  [        R                  " S5        f ! [         a     f f = f= f)Nr   ry   r   nlistrz  )
r   ranger>   r  r  rA   r  r  r  r  r  s    rL   test_draw_shell_nlistr    s    eAheArl!3T%B-5HI
gU+I	IIi  			IIi  		sB   A+B .B 
BBB>B.-B>.
B;8B>:B;;B>c                  0    [         R                  " SS5      n [         R                  " U 5        [        R	                  S5         [
        R                  " S5        g ! [         a     g f = f!  [
        R                  " S5        f ! [         a     f f = f= f)Nr[   r   rz  )r>   complete_bipartite_graphdraw_bipartiterA   r  r  r  r  r  s    rL   test_draw_bipartiter    sy    ''1-
!I	IIi  			IIi  		sB   AA, A 
A)(A),B.BB
BBBBc                      [        [        R                  5       5      n [        R                  " [        U S[
        R                  R                  SS9  g )Nr   T)r#   r   	edge_cmapwith_labels)r  r  number_of_edgesr>   r  rA   r  Blues)rF   s    rL   test_edge_colormapr    s5    7**,-FNNF!svv||QUrN   c                  T    [         R                  " [        R                  5       5        g r   )r>   r  r  to_directed rN   rL   test_arrowsr    s    NN7&&()rN   r   r   r   r9   r   r   r   r   r   r:   )#0000ffr   r  r   r   rc   c                     [         R                  " S5      n[         R                  " U[         R                  " U5      X S9n[        R
                  R                  UR                  5       U5      (       d   eg)z\Tests ways of specifying all edges have a single color for edges
drawn with a LineCollectionrS   r*   r   r#   N)r>   r?   draw_networkx_edgesrandom_layoutrE   rF   rG   r<  )r#   r7   r   rK   drawn_edgess        rL   !test_single_edge_color_undirectedr    s\    & 	aA((	r"XK ::  !6!6!8(CCCCrN   c                    [         R                  " S[         R                  S9n[         R                  " U[         R                  " U5      X S9nU H8  n[
        R                  R                  UR                  5       U5      (       a  M8   e   g)z]Tests ways of specifying all edges have a single color for edges drawn
with FancyArrowPatchesrS   r   r  N)	r>   r?   rX  r  r  rE   rF   rG   get_edgecolor)r#   r7   r   rK   r  faps         rL   test_single_edge_color_directedr  5  sl    & 	abjj1A((	r"XK zz$$S%6%6%8(CCCC rN   c                  h   [         R                  " S[         R                  S9n [        [	        U 5      5       Vs0 s H  oX4_M     nnS H  n[         R
                  " XUS9nU H8  n[        R                  R                  UR                  5       U5      (       a  M8   e   [         R
                  " XSS/US9nU H8  n[        R                  R                  UR                  5       U5      (       a  M8   e   M     [         R
                  " X/ SQS	S9nU H8  n[        R                  R                  UR                  5       S
5      (       a  M8   e   [         R
                  " X/ SQSS9nU H8  n[        R                  R                  UR                  5       S
5      (       a  M8   e   [         R
                  " X/ SQSS9n[        R                  R                  US   R                  5       US   R                  5       5      (       d   eU H8  n[        R                  R                  UR                  5       S
5      (       d  M8   e   [         R
                  " X/ SQS	S9n[        R                  R                  US   R                  5       US   R                  5       5      (       d   e[        R                  R                  US   R                  5       US   R                  5       5      (       d   eU H8  n[        R                  R                  UR                  5       S
5      (       d  M8   e   gs  snf )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   r   )r   r   r   rO   rO   r#   rc   r   )r   r#   rc   r   r   r  r   )rc   r   r   )rS   r   r   r   rO   r[   rS   N)
r>   r?   rX  r  r   r  rE   rF   rG   r  )rK   rW   r*   r'   r  r  s         rL   $test_edge_color_tuple_interpretationr  P  s    	abjj1A#CFm
,mqf9mC
, (,,QCC::(():):)<bAAAA  ,,ff-"
 C::(():):)<bAAAA  ( ((	1lK zz$$S%6%6%8&AAAA  ((	9iK zz$$S%6%6%8&AAAA  ((	1iK ::  A$$&A(D(D(F    ::(():):)<fEEEE  ((	9lK ::  A$$&A(D(D(F    ::  A$$&A(D(D(F    ::(():):)<fEEEE c -s   L/c                  J   [         R                  5       n [        R                  " [         5      nSn[        R                  " XUS9n[        U[        R                  " U5      5       H:  u  pE[        R                  R                  UR                  5       U5      (       a  M:   e   g)zVTest that the edge colors are cycled when there are fewer specified
colors than edges.r   gbr  N)r  r  r>   r  r  r   r   r   rE   rF   rG   r  rK   r*   
edgecolorsr  r  r7   s         rL   .test_fewer_edge_colors_than_num_edges_directedr    s|     	A


7
#C J((JGK[)//**EFzz$$S%6%6%8(CCCC GrN   c                  D   [         R                  " S[         R                  S9n [         R                  " [        5      nSn[         R
                  " XUS9n[        X2SS 5       H:  u  pE[        R                  R                  UR                  5       U5      (       a  M:   e   g)zXTest that extra edge colors are ignored when there are more specified
colors than edges.r   r   )r   r  r  r   r  Nr   )r>   r?   rX  r  r  r  r   rE   rF   rG   r  r  s         rL   -test_more_edge_colors_than_num_edges_directedr    s|     	abjj1A


7
#C%J((JGK[Sb/:zz$$S%6%6%8(CCCC ;rN   c                  T   [         R                  " [        [         R                  " [        5      SS/SSS9n U R	                  5       R                  5       n[        U R                  5       5      S:X  d   e[        R                  R                  US S S5      (       d   eUS   S:X  d   eg Nrc   r   purplerE  )r*   r   r#   r   r[   r   )r>   r  r  r  r<  squeezer   r   rE   rF   rG   )edge_collectionr'   s     rL   3test_edge_color_string_with_global_alpha_undirectedr    s    ,,W%&!O 
	"	"	$	,	,	.B((*+q000::  CR(3333b6S==rN   c                  J   [         R                  " [        R                  5       [         R                  " [        5      SS/SSS9n [        U 5      S:X  d   eU  HH  nUR                  5       n[        R                  R                  US S S5      (       d   eUS   S:X  a  MH   e   g r  )
r>   r  r  r  r  r   r  rE   rF   rG   )r  r  r'   s      rL   1test_edge_color_string_with_global_alpha_directedr    s    ((W%&!K {q    zz$$RWh7777"v}} rN   c                    [         R                  " SU S9n[        [        U5      5       Vs0 s H  o"X"4_M     nn[         R                  " X5      n[        U[        5      (       a  US   nUR                  5       S:X  d   egs  snf )zZTest the default linewidth for edges drawn either via LineCollection or
FancyArrowPatches.r[   r   r   rO   N)r>   r?   r  r   r  r}   r   r%  )r   rK   rW   r*   r  s        rL   test_edge_width_default_valuer    sv     	aj1A#CFm
,mqf9mC
,((0K+t$$!!n$$&!+++	 -s   B)	edgewidthr7   rS   rS   rS   c                    [         R                  " S5      n[        [        U5      5       Vs0 s H  o3X34_M     nn[         R                  " X$U S9n[        UR                  5       5      S:X  d   eUR                  5       U:X  d   eg s  snf )Nr   r   rS   )r>   r?   r  r   r  r   r%  )r  r7   rK   rW   r*   r  s         rL   'test_edge_width_single_value_undirectedr    s|     	aA#CFm
,mqf9mC
,((yAK{$$&'1,,,$$&(222 -s   Bc                 (   [         R                  " S[         R                  S9n[        [	        U5      5       Vs0 s H  o3X34_M     nn[         R
                  " X$U S9n[	        U5      S:X  d   eU H  nUR                  5       U:X  a  M   e   g s  snf )Nr   r   r  rS   )r>   r?   rX  r  r   r  r%  )r  r7   rK   rW   r*   r  r  s          rL   %test_edge_width_single_value_directedr    s     	abjj1A#CFm
,mqf9mC
,((yAK{q     "h...  -   Br  r   c                    [         R                  5       n[        R                  " U5      nSn[        R                  " XXS9n[        U[        R                  " U5      5       H  u  pVUR                  5       U:X  a  M   e   g )N)r)   rf   g      (@)r   r   )	r  r  r>   r  r  r   r   r   r%  )r   rK   r*   r'  r  r  expected_widths          rL   test_edge_width_sequencer    sn     	A


1
CF(((QK";	0GH  "n444  IrN   c                     [         R                  " S[         R                  S9n [         R                  " U 5      n[         R                  " XSS/S9nU Vs/ s H  o3R                  5       PM     nn[         R                  " XSS/SSS9nU Vs/ s H  o3R                  5       PM     nn[        R                  R                  XE5      (       d   eg	s  snf s  snf )
zuTest that edge_vmin and edge_vmax properly set the dynamic range of the
color map when num edges == len(edge_colors).rS   r   r   r   r  rE  g?)r#   	edge_vmin	edge_vmaxN)	r>   r?   rX  r  r  r  rE   rF   rG   )rK   r*   r  r   orig_colorsscaled_colorss         rL   #test_edge_color_with_edge_vmin_vmaxr    s     	abjj1A


1
C((QHEK.9:k??$kK:((	C:K 1<<1__&M<::  <<<< ;
 =s   CCc                  *   [         R                  " S[         R                  S9n [        [	        U 5      5       Vs0 s H  oX4_M     nn[         R
                  " X5      n[	        U5      S:X  d   eU H  nUR                  5       S:X  a  M   e   gs  snf )z>Test default linestyle for edges drawn with FancyArrowPatches.r   r   rS   solidNr>   r?   rX  r  r   r  r,  )rK   rW   r*   r  r  s        rL   %test_directed_edges_linestyle_defaultr    s    
abjj1A#CFm
,mqf9mC
, ((0K{q     "g---  -s   B)dashed--rO   rd   c                 (   [         R                  " S[         R                  S9n[        [	        U5      5       Vs0 s H  o"X"4_M     nn[         R
                  " XU S9n[	        U5      S:X  d   eU H  nUR                  5       U :X  a  M   e   gs  snf )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   r   r*  rS   Nr  )r*  rK   rW   r*   r  r  s         rL   *test_directed_edges_linestyle_single_valuer    s     	abjj1A#CFm
,mqf9mC
,((u=K{q     "e+++ 	 -r  	style_seqr  r  r  )r  r-   r)  )r  r-   r)  z-.c                 h   [         R                  " S[         R                  S9n[        [	        U5      5       Vs0 s H  o"X"4_M     nn[         R
                  " XU S9n[	        U5      S:X  d   e[        U[        R                  " U 5      5       H  u  pVUR                  5       U:X  a  M   e   gs  snf )zTests support for specifying linestyles with sequences in
``draw_networkx_edges`` for FancyArrowPatch outputs (e.g. directed edges).r   r   r  rS   N)
r>   r?   rX  r  r   r  r   r   r   r,  )r  rK   rW   r*   r  r  r*  s          rL   &test_directed_edges_linestyle_sequencer  *  s     	abjj1A#CFm
,mqf9mC
,((yAK{q   +yy'AB
  "e+++ C	 -s   B/c                  2   SSK Jn Jn  SSKJn  [
        R                  " [
        R                  S9n[
        R                  " [
        R                  S9n[
        R                  " U5      n[
        R                  " U5      n[
        R                  " X55      n[        Xq5      (       d   e[
        R                  " XFSS9n[        U[        5      (       d   e[        U5      S:  a  [        US   U5      (       d   e[
        R                  " XFSS9n[        X5      (       d   e[
        R                  " X6S S9n[        X5      (       d   e[
        R                  " XES S9n[        U[        5      (       d   e[        U5      S:  a  [        US   U5      (       d   eg g )Nr   )r   r!  )r   r   TarrowsF)matplotlib.collectionsr   r!  matplotlib.patchesr   r>   frucht_graphr   rX  r   draw_networkx_nodesr}   r  r   r   )	r   r!  r   rK   dGr*   dposrT   r|   s	            rL   test_return_typesr  B  sF   E2
RXX.A	bjj	1B


1
CBD""1*Ee,,,,""2D9EeT""""
5zA~%(O4444""2E:Ee,,,,""148Ee,,,,""248EeT""""
5zA~%(O4444 rN   c                     [         R                  " 5       n [         R                  " U 5      n[         R                  " X/ SQSSSS9  [         R                  " U U/ SQSS/ SQS9  [         R                  " XS	S
S9  [         R                  " U U/ SQSS
SS9  [         R                  " U U/ SQSS
SS9  [         R                  " U U/ SQSS
SSSS9  0 nSUS'   SUS'   SUS'   SUS'   SUS'   SUS'   SUS'   S US!'   [        S5       Vs0 s H  o3US-  S:X  a  S"OS_M     nn[         R                  " XUS#S$9  [         R                  " XUS#US%9  [         R                  " XS S&S'9  [         R                  " XS(S)0S*9  g s  snf )+Nr   rO   r[   rS   r   i        ?)nodelistr
   r   r   )r   r   r   r   r  )rQ   r)   r  r   r   r)   )r   r   )rc   r   r   )rS   r   r   )r   r   r   r#   )r   r   r   )r   r   T)r   r  min_source_marginmin_target_marginr   r#   r   r   r   rO   r   r[   r   rS   r   r   r   r   r   r   r   r   rl      )	font_size)r  
font_colorF)edge_labelsr+   r   z4-5r  )r>   r   r   r  r  r  draw_networkx_labelsdraw_networkx_edge_labels)rK   r*   r   rW   rF   s        rL   test_labels_and_colorsr  \  s   
A


1
C	#D 	$ 1C8	1 	1 	1	 FF1IF1IF1IF1IF1IF1IF1IF1I5:1X>XA
+XF>AFb9AFbVL  T%H  fe_E	 ?s   E7c                  p   [         R                  " 5       n [        R                  5       u  pSSSSSS.n[         R                  " U US/ SQS	S
9  [         R                  " XSS/SS
9  [         R
                  " XSSS9  UR                  S5        [        R                  5         [        R                  S5        U$ )Nra   rb   rc   rd   re   rg   rh   r  rj   )r   r  r
   ri   r   rk   r)   r   )r   r   g)\(?rm   )	r>   rn   rA   ro   r  r  rp   rq   rr   )rK   rs   rt   r*   s       rL   test_house_with_colorsr    s    
AllnGCFv*
EC 	 	$! 1A6JJtHHUOJrN   c                     U u  p[         R                  " [        US9  [         R                  " [        [         R                  " [        5      US9  g )Nrt   )r>   drawr  r  circular_layout)ro   rs   rt   s      rL   	test_axesr    s4    GCGGG  "*<*<W*E"MrN   c                  Z    [         R                  " 5       n [         R                  " U 5        g r   )r>   r   r  r  s    rL   test_empty_graphr    s    

AGGAJrN   c                  p   SS K n [        R                  " SS/5      n[        R                  " SS/5      n[        R                  " U5      n[        [        R                  " X/ S9[        R                  R                  5      (       d   e[        [        R                  " X#/ S9[        R                  R                  5      (       d   e[        R                  " X/ SS9/ :X  d   e[        R                  " X/ SS9/ :X  d   e[        R                  " X#/ SS9/ :X  d   e[        R                  " X#/ SS9/ :X  d   eg )Nr   r   r   )r  T)r   r  F)r  r>   r   rX  r  r}   r  rE   r~   r!  r  )r   rK   DGr*   s       rL   #test_draw_empty_nodes_return_valuesr    s   !
&&!"A	VV$	%B


Q
C
q3S__5S5S    
r4coo6T6T    !!!2dCrIII!!!2eDJJJ!!"BuEKKK!!"BtDJJJrN   c                      [         R                  " S[         R                  S9n [         R                  " U S/S9  [         R                  " U S// SQS9  g )NrS   r   )r   rO   r   r   )ry   r2  r   )r   r   )r>   r?   r   draw_networkxr  s    rL   test_multigraph_edgelist_tuplesr    s<    
aboo6AQ)-Q)DrN   c                     [         R                  " [        5      n [        R	                  5       nUR                  S5        [         R                  " [        U SS/S9  [        [        R                  5      n[        U5       Vs/ s H  o3U-  PM	     nn[        U5      nUR                  S5        [         R                  " [        XUS9  UR                  S5        UR                  S5        [         R                  " [        XS9  g s  snf )	N   皙?rE  )r      )r
   r   rO      )r>   r  r  rA   rB   rC   r  r   rT   r  append)r*   rs   	num_nodesxr   rF   s         rL   test_alpha_iterr    s    


7
#C
**,COOC7CSz:GMM"I$))$45$4q]$4E59FOOC7C%H	LLOOOC7C5 6s   Dc                 *   U u  p[         R                  " S5      n[         R                  " U/ SQUS9  UR                  5        Vs/ s H0  n[	        U[
        R                  R                  5      (       d  M.  UPM2     nn[        U5      S:X  d   eg s  snf )Nr   )r   hr"  ^)r   rt   )	r>   r?   r  rH   r}   rE   r~   r!  r   )ro   rs   rt   rK   r"  scatterss         rL   test_multiple_node_shapesr    sx    GC
aAGGA.26??$$a
1coo6T6T(U$   x=As   -B6Bc                    [         R                  " 5       nU u  p#[         R                  " UUUR                  5        Vs0 s H  oDUS-  (       a  SOS_M     snUR                  5        Vs0 s H  oD[	        US-  S-   5      _M     snS9  [        UR                  5       UR                  5        Vs/ s HO  n[        U[        R                  R                  5      (       d  M.  [        UR                  5       5      S:  d  MM  UPMQ     sn5       Hm  u  pEUS-  (       a  SOS	n[        R                  R                  UR                  5       U5      (       d   e[	        US-  S-   5      UR!                  5       :X  a  Mm   e   g s  snf s  snf s  snf )
Nr[   rl   r   g""""""@r   )rt   r  r  r   r   r9   )r>   rz   r  rT   rI  r   rH   r}   rE   r3  r4  r   r5  rF   rG   r<  r7  )ro   rK   rs   rt   rW   r8  r7   s          rL   #test_individualized_font_attributesr    sA   
AGCGG	67ggi@ia!es,i@67ggi@ic!w-!+,,i@	 		 __&	
&!SXX]]+ 03AJJL0AA0E &	
  !e7zz$$Q[[]H====1=1$%555 A@	
s   E?*F0-F	
!F	
 F	
c                 v   [         R                  " 5       nU u  p#UR                  5        VVs/ s H  u  pEXE-   S-  S:X  a  SOSPM     nnnUR                  5        VVs/ s H  u  pESUS-  US-  -   -  S-   PM     nnn[         R                  " XSXgS9  UR	                  5        Vs/ s H0  n[        U[        R                  R                  5      (       d  M.  UPM2     n	n[        UR                  5       U	5       H  u  pUR                  5       SU
S   S-  U
S   S-  -   -  S-   :X  d   e[        U
5      S-  (       a$  [        R                  R                  R                  O#[        R                  R                  R                  n[        UR                  5       U5      (       a  M   e   g s  snnf s  snnf s  snf )	Nr[   r   rw   -[ry   T)rt   r  rx   rU  rO   )r>   rz   r|   r  rH   r}   rE   r   r   r   rZ  r   
ArrowStyleBracketBCurveFilledBget_arrowstyle)ro   rK   rs   rt   r   r   arrowstyles
arrowsizesr   r  r   r  r7   s                rL   #test_individualized_edge_attributesr!    su   
AGCCD779M941QUaK1,5$69KM89	B	"AA&+	JBGGATkP??$$a
1ckk6Q6Q(R$   AGGIv&##%qtax!A$(/B)Cb)HHHH 1vz KK""++''44 	
 !**,h7777 ' NBs   F*F0&-F6F6c                      [         R                  " [        SS9   [        R                  " [
        SS9  S S S 5        g ! , (       d  f       g = f)NzReceived invalid argumentmatchbar)foo)rP  rQ  
ValueErrorr>   r  r  r  rN   rL   test_error_invalid_kwdsr(  !  s,    	z)D	E
U# 
F	E	Es	   =
Ac                      [         R                  " / SQ5      n / SQn[        R                  " [        SS9   [         R
                  " XS9  S S S 5        g ! , (       d  f       g = f)N)rc   r   r[   r   rO   rS   )rO   r[   rS   z1arrowsize should have the same length as edgelistr#  )rU  )r>   rX  rP  rQ  r'  r  )rK   rU  s     rL   +test_draw_networkx_arrowsize_incorrect_sizer,  &  sF    


34AI	M
 	'
 
 
s   A
A"rU     )ry   r2  r-  c                 n   [         R                  " / SQ5      nSSSS.n[         R                  " XU S9n[        U [        5      (       a  [
        R                  " U 5      OU n [        X05       HF  u  pE[        U[        R                  R                  5      (       d   eUR                  5       U:X  a  MF   e   g )Nrc   r*  r   ra   rc   rb   r   )r*   rU  )r>   rX  r  r}   rI  r   r   r   rE   r   r   rZ  )rU  rK   r*   r|   r  r7   s         rL   test_draw_edges_arrowsizer0  /  s    


+,AF
+C""1CE/9)S/I/I	  +yIU.#s{{::;;;;%%'8333 /rN   rx   rw   rw   r  z<|-|>c                 `   [         R                  " / SQ5      nSSSS.n[         R                  " XU S9n[        U [        5      (       a  [
        R                  " U 5      OU n [        R                  R                  R                  [        R                  R                  R                  [        R                  R                  R                  S.n[        X05       HS  u  pV[        U[        R                  R                  5      (       d   e[        UR                  5       XF   5      (       a  MS   e   g )Nr/  ra   rc   rb   r   )r*   rx   r1  )r>   rX  r  r}   r6  r   r   rE   r   r  r  r  CurveFilledABr   r   r  )rx   rK   r*   r|   arrow_objectsr  r7   s          rL   test_draw_edges_arrowstyler5  <  s    


+,AF
+C""1*EE )3:s(C(C	$ 
 {{%%22kk$$--''55M U/#s{{::;;;;#,,.0GHHHH 0rN   c                  `    [         R                  " [        [        R	                  SS/5      S9  g )Nr*  r   r  )r>   r  r  r\   arrayr  rN   rL   test_np_edgelistr8  Q  s     Wrxx0@'ABrN   c                      [         R                  " S5      n SSS.n[        R                  " [         R                  SS9   [         R
                  " X5        S S S 5        g ! , (       d  f       g = f)NrS   ra   rd   rc   zhas no positionr#  )r>   r?   rP  rQ  rR  r  )rK   r*   s     rL   *test_draw_nodes_missing_node_from_positionr:  V  sJ    
aA
 C	r''/@	A
q& 
B	A	As   A
A-c           	      |   Uu  p#[         R                  " S/5      nSSS.n[         R                  " XEX0S9S   nUR                  5       R	                  5       SSS2S4   n[         R                  " UUUU SSS	9S   nUR                  5       R	                  5       SSS2S4   n	U	S   US   :  d   eU	S
   US
   :  d   eg)  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

rc   ra   rb   rt   r   r   Nr[   r_  rt   r   r  r  rO   )r>   rX  r  r`  ra  )
r   ro   rs   rt   rK   r*   default_patchrc  padded_patchre  s
             rL   )test_draw_edges_min_source_target_marginsrA  _  s    & GC


F8A
 C **1bPQRSM"..088:3Q36BN ))	 	L !,,.6681a@M nQ////nQ////rN   c           	         Uu  p#[         R                  " SS/5      nSSSS.n[         R                  " XEX0S9nU Vs/ s H(  owR                  5       R	                  5       SSS	2S
4   PM*     nn[         R                  " UUUU SS/SS/S9n	U	 V
s/ s H(  oR                  5       R	                  5       SSS	2S
4   PM*     nn
[        X5       H!  u  pzU
S
   US
   :  d   eU
S   US   :  a  M!   e   gs  snf s  sn
f )r<  rc   r   ra   rb   )r[   r   r   r=  Nr[   r   b   f   r>  rO   )r>   rX  r  r`  ra  r   )r   ro   rs   rt   rK   r*   r?  r   rc  r@  r  re  s               rL   4test_draw_edges_min_source_target_margins_individualrE    s   & GC


FF#$AF
+C **1bPMANOAmmo--/!Q7NO ))	s)s)L AMM1]]_,,.ssAv6MMN2 tad{{tad{{ 3 P Ns   /C0/C5c                    U u  p[         R                  " 5       nUR                  S5        UR                  SS5        [         R                  " USS05      S   nUR                  5       nUR                  S:  a  UR                  S:  d   eg)zDEnsure that selfloop extent is non-zero when there is only one node.r   ra   N)r>   rX  rp  r   r  r`  r   rq  )ro   rs   rt   rK   patchr   s         rL   &test_nonzero_selfloop_with_single_noderH    su     GC


AJJqMJJq!""1q&k215ED::>dkkAo--orN   c                 P   U u  p[         R                  " S[         R                  S9nUR                  SS5        UR                   Vs0 s H  oDXD4_M     nn[         R
                  " X5S/S9S   nUR                  5       nUR                  S:  a  UR                  S:  d   egs  snf )z^Ensure that selfloop extent is non-zero when only a single edge is
specified in the edgelist.
r[   r   rO   rd   r  r   N)	r>   r?   rX  r   rT   r  r`  r   rq  )ro   rs   rt   rK   rW   r*   rG  r   s           rL   2test_nonzero_selfloop_with_single_edge_in_edgelistrJ    s    
 GC
abjj1AJJq!gg
&gqf9gC
&""1VH=a@ED::>dkkAo--o 's   B#c                      / SQn / SQnSn[         R                  R                  R                  XU 5      n[	        USS2S4   U:H  5      (       d   eg)z^Test apply_alpha when there is a mismatch between the number of
supplied colors and elements.
r   r  r)   Nr   )r>   drawingnx_pylabapply_alpharU   )r  	colorlistr   rgba_colorss       rL   test_apply_alpharQ    sN     HIE**%%11)HMK{1b5!U*++++rN   c                  ~   SSK n SSKn [        R                  " S5      n[        R                  " S[        R                  S9nU Vs0 s H  o3X34_M     nnX4 Hj  n[        R
                  " XTSS9n[        U5      [        UR                  5      :X  d   e[        US   [        R                  R                  5      (       a  Mj   e   X4 HC  n[        R
                  " XTSS9n[        U[        R                  R                  5      (       a  MC   e   [        R
                  " X5      n[        U[        R                  R                  5      (       d   e[        R
                  " X$5      n[        U5      [        WR                  5      :X  d   e[        US   [        R                  R                  5      (       d   egs  snf )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   NrS   r   Tr  F)r  r  r>   r?   rX  r  r   r|   r}   rE   r   r   r~   r   )r   UGr  rW   r*   rK   r|   s          rL   *test_draw_edges_toggling_with_arrows_kwargrT    s[    "	q	B	qrzz	2B 
!bqf9bC
! X&&qd;5zS\)))%(CKK$?$?@@@@  X&&qe<%!?!?@@@@ 
 ""2+EeS__;;<<<<""2+Eu:QWW%%%eAh ; ;<<<<% "s   F:drawing_funcc                     SS K n[        R                  " S5      nUu  pEU " X5S9  [        S UR                   5       5      (       d   eUR
                  (       a   eg )Nr   rS   r  c              3   j   #    U  H)  n[        U[        R                  R                  5      v   M+     g 7fr   r}   rE   r~   r   r   r   s     rL   r   ?test_draw_networkx_arrows_default_undirected.<locals>.<genexpr>  s$     Unz!S__;;<<n   13)r  r>   r?   anyr~   r   rU  ro   r   rK   rs   rt   s         rL   ,test_draw_networkx_arrows_default_undirectedr^    sK    !
aAGCUbnnUUUUUzz>zrN   c                     SS K n[        R                  " S[        R                  S9nUu  pEU " X5S9  [	        S UR
                   5       5      (       a   eUR                  (       d   eg )Nr   rS   r   r  c              3   j   #    U  H)  n[        U[        R                  R                  5      v   M+     g 7fr   rX  rY  s     rL   r   =test_draw_networkx_arrows_default_directed.<locals>.<genexpr>  s'      ?M!
1coo4455~r[  )r  r>   r?   rX  r\  r~   r   r]  s         rL   *test_draw_networkx_arrows_default_directedrb    s^    !
abjj1AGC ?A~~     :::rN   c                     [         R                  " S5      nUR                  SS5        U u  p#[         R                  " USS/US9  UR                  (       a   eg )NrS   r   rc   r   )r   rt   )r>   r?   r   r  r   )ro   rK   rs   rt   s       rL   test_edgelist_kwarg_not_ignoredrd     sH    
aAJJq!GCGGA(R0zz>zrN   )rK   expected_n_edgesr[   c           	      6   [        / SQ5       H%  u  nu  p4U R                  X4[        US-  S5      S9  M'     U  Vs0 s H  oUXU4_M     nnSSS// SQ4 H>  n[        R                  " XUS9  [        R                  " XUS9n[        U5      U:X  a  M>   e   gs  snf )	zGDraws edges correctly for 3 types of graphs and checks for valid lengthrc   rc   rc   r*  rS   r[   r   arc3,rad=0.1)rh  rh  arc3,rad=0.2connectionstyleN)r   r   r%   r>   r  r   )	rK   re  r   r   r   rW   r*   
conn_styler  s	            rL   2test_draw_networkx_edges_multiedge_connectionstylerm  )  s     ?@	6A	

1a!eQ
0 A
 aqf9aC
  		(8

 	qzB''
K6{.... !s   Bc           	         [        / SQ5       H%  u  nu  p4U R                  X4[        US-  S5      S9  M'     U  Vs0 s H  oUXU4_M     nn[        R                  " X/ SQS9nSSS// SQ4 H\  n[        R
                  " XUS9n	[        U	5      U:X  d   eU	R                  5        H  n
U
R                  R                  S	:X  a  M   e   M^     g
s  snf )zXDraws labels correctly for 3 types of graphs and checks for valid length and class namesrg  rS   r[   r   )rh  rh  rh  rj  rh  ri  CurvedArrowTextN)
r   r   r%   r>   r  r  r   values	__class____name__)rK   re  r   r   r   rW   r*   r  rl  
text_itemstis              rL   8test_draw_networkx_edge_labels_multiedge_connectionstyleru  =  s     ?@	6A	

1a!eQ
0 A
 aqf9aC
 ##	 PF 		(8

 11!*U
:"2222##%B<<((,==== & !s   Cc                  $   [         R                  " 5       n U R                  SSSS9  U R                  SSSS9  [         R                  " U S5      nU  Vs0 s H  o"X"4_M     nn[         R                  " U UUSS/S	9n[        U5      S
:X  d   eg s  snf )Nr   rO   ry   r   r2  r   rh  ri  r  rk  r[   )r>   rG  r   get_edge_attributesr  r   )rK   r  rW   r*   rs  s        rL   'test_draw_networkx_edge_label_multiedgery  U  s    
AJJq!BJJJq!BJ((H5K
 aqf9aC
 --	'8	J z?a !s   Bc                      [         R                  " S5      n U R                   Vs0 s H  oX4_M     nn[         R                  " X0 S90 :X  d   egs  snf )zKRegression test for draw_networkx_edge_labels with empty dict. See
gh-5372.rS   r  N)r>   r?   rT   r  )rK   rW   r*   s      rL   (test_draw_networkx_edge_label_empty_dictr{  d  sN     	aAgg
&gqf9gC
&''B?2EEE 's   Ac                 L   U u  p/ SQn/ SQn[         R                  " U5      nUR                   Vs0 s H  ofXf4_M     nn[         R                  " XWX#US9  [	        UR
                  5      S:X  d   e[        R                  USS 5      [        R                  SS/5      -   n[        UR
                  USS U5       Ha  u  pnU	R                  5       R                  U5      (       d   e[        R                  R                  U	R                  5       U
5      (       a  Ma   e   gs  snf )	zpWhen an edgelist is supplied along with a sequence of colors, check that
the self-loops have the correct colors.)r+  r   r   rd   r  r   )pinkcyanr   r9   r   green)rt   r   r#   rS   Nr   r  )r>   r   rT   r  r   r   r\   r7  r   r   contains_pointrE   rF   rG   r  )ro   rs   rt   r   edge_colorsrK   rW   r*   	sl_pointsr  clrslps               rL   3test_draw_networkx_edges_undirected_selfloop_colorsr  l  s     GC?HCK
Agg
&gqf9gC
&1bT rzz?a
 "#'"((As8*<<I RZZRS)99E#||~,,S1111zz$$S%6%6%8#>>>> F 's   D!fap_only_kwargr2  rk  ri  r  r  c                 0   [         R                  " S5      nU Vs0 s H  o3X34_M     nnUu  pV[        U R                  5       5      S   n[        R
                  " [        SU S3S9   [         R                  " X$4SU0U D6  SSS5        [        R                  " 5          [        R                  " S5        [        R                  " S	[        S
9  [         R                  " X$4USS.U D6  SSS5        gs  snf ! , (       d  f       N{= f! , (       d  f       g= f)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.rS   r   z

The z# keyword argument is not applicabler#  rt   Nerrorignore)categoryT)rt   r  )r>   r?   r   r   rP  warnsUserWarningr  warningscatch_warningssimplefilterfilterwarningsDeprecationWarning)r  ro   rK   rW   r*   rs   rt   
kwarg_names           rL   1test_user_warnings_for_unused_edge_drawing_kwargsr    s     	aA
 aqf9aC
 GC n))+,Q/J	Xj\1TU
 	q?"??
 
	 	 	"g&3EF
qL"TL^L	 
#	" !

 
 
#	"s   C1'C6A
D6
D
Ddraw_fnc                     Uu  p#[         R                  " S5      n[        R                  " SS9 nU " XCS9  S S S 5        [	        W5      S:X  d   eg ! , (       d  f       N = f)Nr   T)recordr  r   )r>   cycle_graphr  r  r   )r  ro   rs   rt   rK   r   s         rL   *test_no_warning_on_default_draw_arrowstyler    sO     GC
qA		 	 	- 
.q6Q;; 
.	-s   A
Ari  methodc                    [         R                  " S5      nUR                   Vs0 s H  oDXD4_M     nnUu  pgU " X5XqS9  UR                  UR                  4 H"  n[        UR                  5       5      U:w  a  M"   e   g s  snf )NrS   )r*   rt   ri  )r>   r?   rT   rj  rk  rl  rm  )	r  ri  ro   rK   rW   r*   _rt   rr   s	            rL   test_hide_ticksr    sw     	aAgg
&gqf9gC
&EA
1"4288$D'')*j888 % 's   A>c                    U u  pSn[         R                  " U/5      nU Vs0 s H  oUUS4_M	     nnSnSn[         R                  " XFUS0US9n	[         R                  " XFUS0US9n
X   R                  (       d*   X   R                  [
        R                  " S5      :H  5       eX   R                  X   R                  :  d   egs  snf )	zpCheck that FancyArrowPatches with `bar` connectionstyle are also supported
in edge label rendering. See gh-7735.rc   r   zarc3,rad=0.0zbar,fraction=0.1edgerw  )r)   r   N)r>   rX  r  r  yrP  approx)ro   rs   rt   r  rK   rW   r*   	style_arc	style_bararc_lblbar_lbls              rL   #test_edge_label_bar_connectionstyler    s     GCD


D6A
 aq!f9aC
 I"I**	T6NIG **	T6NIG
 =??FGMOOv}}X/FFF?=??W]__,,,! !s   C)r__doc__r   r  r  rP  networkxr>   importorskiprE   r\   userA   rcParamsbarbell_graphr  defaultsmarkparametrizerM   rX   r_   mpl_image_compareru   r   r   r   r   r   rX  r   r   r  r  r  r#  r(  r0  r9  r=  r@  rM  rS  r[  r]  rf  rn  rt  rw  fixturero   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r!  r(  r,  r0  r5  r8  r:  rA  rE  rH  rJ  rQ  rT  r  r  r^  rb  rd  rG  r   rm  ru  ry  r{  r  r  r{  r  r  r  r  r  r  r  r  rN   rL   <module>r     sJ   2  	   ,'! -.#]  

1a
 ,,D, ), 	,
   ," ##,$ #%,& ',( ),* D+,, #-,. )/,0 $O?S1,H #I,J #K,N sO,P aQ,R W,^ -	tXl34('  ! !H" ? ?D  : * *Z 
 "**'=> ?
* "**'=> ?( "**'=> ?>$ "**'=> ?8 "**'=> ?( 	&(>?@	
QF	1b' "**'=> ?, 	&(>?@	sCj	3* "**'=> ?4  6" z2/ 3/d 5$-0 1&P  0		*
 
#
	H%
 
f
 dVH%56D 7D 
#
	H%
 
f
 dVH%56	D 7	D6FrDD "**'=>, ?, 
a33 
a//  	55= 	. ,, 	
			s

,

,549Fz  2N
K,E6$6.8&$
( r<&89	4 :	4 /E'FGI HI(C
' z2)0 3)0\ z2) 3)X..",=D "''23C3C)DE F "''23C3C)DE	 F	 jjlA!,r/@!.DE/	/  jjlA!,r/@!.DE>	>( F?6 	s	b	N+	b!	b!	M	M. RWWb.>.>$?@ A t}5

$$


	9	 69-rN   