
    9i)                     :   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S8 r\R                   R#                  S9S:5      \R                   R#                  S;\R,                  \R.                  45      S< 5       5       r\R                   R#                  S;\R,                  \R.                  45      S= 5       r\R                   R#                  S;\R,                  \R.                  45      S> 5       rS? r\R                   R#                  S;\R,                  \R.                  45      S@ 5       r\R                   R#                  S;\R,                  \R.                  45      SA 5       r\R                   R#                  S4S\S!   \S!   /4SBSBSB/4SCSBSD/445      \R                   R#                  S;\R,                  \R.                  45      SE 5       5       r\R                   R#                  S4S\S)   \S)   /4SFSFSF/4SGS*SF/445      \R                   R#                  S;\R,                  \R.                  45      SH 5       5       rSI r SJ r!SK r"SL r#SM r$SN r%\R                   R#                  SSO5      SP 5       r&\R                   R#                  SQSS/5      SR 5       r'SS r(ST r)\RT                  SU 5       r+\R                   R#                  SV\RX                  \RZ                  \R\                  \R^                  \R`                  \Rb                  \Rd                  \Rf                  /5      SW 5       r4SX r5SY r6SZ r7S[ r8S\ r9\R                   R#                  S9S]S^S_/S`4SaSb/Sc4SdSe/Sf4SgSh/Si44	5      \R                   R#                  SjSSk/45      Sl 5       5       r:\R                   R#                  S9S]S^S_/S`4SaSb/Sc4SdSe/Sf4SgSh/Si44	5      \R                   R#                  SjSSk/45      Sm 5       5       r;Sn r<So r=Sp r>Sq r?Sr r@\R                   R#                  S;\R,                  \R.                  45      Ss 5       rA\R                   R#                  StSuSv/Sv445      Sw 5       rB\R                   R#                  StSuSv/Sv445      Sx 5       rC\R                   R#                  Sj/ SyQSSkSz/45      S{ 5       rDS| rES} rF\R                   R#                  SGS~5      S 5       rG\R                   R#                  SS/S/S// SQSS*// SQ45      S 5       rHS rIS rJS rKS rLS rMS rNS rOS rPS rQS rRS rSS rT\R                   R#                  SS/ SQ45      S 5       rU\R                   R#                  SS/ SQ45      S 5       rVS rWS rXS rY\R                   R#                  SSO5      S 5       rZ\R                   R#                  SSO5      S 5       r[S r\S r]S r^S r_\R                   R#                  S\R                  \R                  45      S 5       rb\R                   R#                  S\R                  \R                  45      S 5       rcS rd\R                   R#                  S\R.                  " 5       S/\R                  " 5       S	/\R                  " 5       S	/45      S 5       rg\R                   R#                  S\R.                  " 5       S/\R                  " 5       S	/\R                  " 5       S	/45      S 5       rhS riS rjS rk\R                   R#                  SSS*0SS0SS0SSD0SSD045      S 5       rl\R                   R#                  S\R                  \RX                  45      S 5       rm\R                   R#                  SSS/5      \R                   R#                  S\R                  \R                  \R                  \R                  \R                  /5      S 5       5       rr\R                   R#                  SG/ SQ5      S 5       rs\R                   R#                  SSS/5      S 5       rtg)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        a/var/www/html/land-doc-ocr/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                  " 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 )
NrZ   -|>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_collectionrp   r   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 )r#   r7   )Nblackrr9   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>   s%     B6aszz$$Q116s   -0)r>   r?   rd   rA   rB   rC   rD   is_directedrH   rf   rE   patchesFancyArrowPatchrV   rg   rh   
get_colorsrU   rJ   )r#   r7   r}   rK   r=   frF   rn   s    `      rL   test_display_edge_single_colorr      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   r   rO   rO   rZ   r   r<   r=   r9   r{   r   )r>   r?   rd   rA   rB   rC   rD   r   rH   rf   rE   r   r   rV   rg   rh   r   rF   rG   rJ   )r}   rK   axr7   r   rF   rn   s          rL   !test_display_edge_multiple_colorsr      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   )r   r   rO   rO   )r   rZ   rZ   g?)r>   r?   r@   rT   rA   rB   rC   rD   r   rH   rf   rE   r   r   get_pathverticesrg   rh   rj   ziprU   absrJ   )r}   rK   rW   r   r   
end_pointsrn   line_collectionpr7   	thresholdae	act_startact_end	exp_startexp_ends                    rL   test_display_edge_positionr      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/ seed)r>   spring_layoutrK   s    rL   fixed_layout4test_display_position_function.<locals>.fixed_layout   s    //rN   r<   )r   r=   r   )r>   rc   rA   rB   rC   rD   r   rT   rH   r\   r]   tuplerU   rJ   )rK   r   r*   r   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   F)rT   r<   r   cmapr   r   )r>   r?   rd   rE   	colormapsapply_matplotlib_colorsrA   rB   rC   rD   cmScalarMappableset_climto_rgbar   rH   rf   r   r   get_facecolorrg   rh   r   rF   rG   re   rJ   )	r}   rK   r   r=   mapperr7   r   rF   rn   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   rZ   r   r   r   r<   r   r   rZ   )r>   r?   r@   rE   r   r   rA   rB   rC   rD   r   r   r   r   rg   rf   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   widthrb   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   rb   r   r   r<   )r"   r=   r   )r>   r?   rd   rA   rB   rC   rD   r   rH   rf   rE   r   r   get_linewidthlistrg   rh   get_linewidths)r6   r7   r}   rK   r=   r   widthsrn   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?   rd   rA   rB   rC   rD   r   rH   rf   rE   r   r   get_linestylerg   rh   get_linestylesr   rJ   )
r6   r7   r}   rK   r=   r   styles
linestylesrn   r   s
             rL   test_display_edge_styler   <  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   rf   rE   textTextr   rT   get_textstrget_sizerJ   )rK   r=   tlabelsrW   rn   s         rL   test_display_node_labelsr   _  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<   labelr   rt   )r=   r$   r   r   rO   )r>   r?   rA   rB   rC   rd   re   rD   rH   rf   rE   r   r   printr   r   r   	get_colorrJ   )rK   r=   rl   rm   r   r   r   rn   s           rL   test_display_edge_labelsr   j  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 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)ABCD))r   r   0)r   r   1)r   r   -1)r   r   r   )r   r   r   )r   r   r   T)keysz	arc3,rad=皙?rZ   	curvaturer<   r   )rw   r   皙ɿr   r   rw   )r>   
MultiGraphadd_nodes_fromadd_edges_fromrd   re   intrA   rB   rC   rD   rH   rf   rE   r   r   get_connectionstyleradrJ   )rK   r   r=   r   radss        rL   (test_display_multigraph_non_integer_keysr   y  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)r   )r>   rc   pytestraisesNetworkXErrorrD   rA   rJ   r   s    rL   test_display_raises_for_bad_argr     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   rZ   	arrowsizer   )	      1   )r>   r?   DiGraphrd   re   rA   axesrD   rH   rf   rE   r   r   get_mutation_scalerJ   )rK   rl   rm   r   r   s        rL   test_display_arrow_sizer    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   r   r   r   )r   r   )r   rO   rZ   r   r*   r   visibleN)r>   r?   r@   rT   r   r   r   rD   )rK   rW   s     rL   %test_display_mismatched_edge_positionr    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<   r   r   r   r*   )r=   r   r   NrZ   d   )r=   r3   r4   r   rO   )rA   rB   rC   r>   r  r@   rD   rH   rf   rE   r   r   get_extentscornersrJ   )r   r   rK   r   default_arrowdefault_extentpadded_arrowpadded_extents           rL   test_display_edge_marginsr    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   r  rD   xaxisyaxisboolget_ticklabelsrJ   )r  rK   rW   r   axiss        rL   test_display_hide_ticksr    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   r   r*   r   )rA   r  r>   r  add_nodeadd_edger@   rD   rH   rf   rE   r   r   r  r   r   heightdelaxesrJ   )r   rK   r   arrowr   s        rL   test_display_self_loopr$    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>   rc   rD   get_node_attributesr   s    rL   test_display_remove_pos_attrr'    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   subplotsr"  rJ   )figr   s     rL   r)  r)    s-     llnGC
'MKKOIIKs   AAfunctionc                     U [         R                  :X  a  [        R                  " SSS9  Uu  p4SSSS.nU " [        40 UD6  UR                  US-  5        g )	Nscipyz draw_kamada_kawai requires scipy)reasonrr   r  rS   )r
   r   r   test.ps)r>   draw_kamada_kawair   importorskipbarbellsavefig)r+  r)  tmp_pathr*  _optionss         rL   	test_drawr7     sT     2'''G,NOFC$3CGW  KK9$%rN   c                     U u  p#[        [        S5      5      [        [        SS5      5      [        [        SS5      5      /n[        R                  " [        US9  UR                  US-  5        g )Nr   rb      )nlistr/  )r   ranger>   
draw_shellr2  r3  )r)  r4  r*  r5  r:  s        rL   test_draw_shell_nlistr=  6  sR    FC%(^T%2,/eBm1DEEMM''KK9$%rN   c                     U u  p#[         R                  " SS5      n[         R                  " U5        UR                  US-  5        g )NrZ   r   r/  )r>   complete_bipartite_graphdraw_bipartiter3  )r)  r4  r*  r5  rK   s        rL   test_draw_bipartiterA  =  s:    FC
##Aq)AaKK9$%rN   c                      [        [        R                  5       5      n [        R                  " [        U S[
        R                  R                  SS9  g )Nr   T)r#   r   	edge_cmapwith_labels)r;  r2  number_of_edgesr>   draw_springrA   r   Blues)rF   s    rL   test_edge_colormaprH  D  s5    7**,-FNNF!svv||QUrN   c                     U u  p#Sn[         R                  " U/5      nU Vs0 s H  ofXf4_M     nn[         R                  " XWS9  [         R                  " XWUS0S9  UR	                  US-  5        g s  snf )Nr   )r*   edgeedge_labelsr/  )r>   r  drawdraw_networkx_edge_labelsr3  )r)  r4  r*  r5  rJ  rK   rW   r*   s           rL   test_draw_networkx_edge_labelsrO  L  sl    FCD


D6A
 aqf9aC
 GGA  dF^DKK9$% !s   A1c                  T    [         R                  " [        R                  5       5        g r   )r>   rF  r2  to_directed rN   rL   test_arrowsrS  V  s    NN7&&()rN   rq   rs   rt   r9   ru   rv   rx   ry   rz   r:   )#0000ffr{   rT  r{   edgelistr   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*   rU  r#   N)r>   r?   draw_networkx_edgesrandom_layoutrE   rF   rG   r   )r#   r7   rU  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   rW  N)	r>   r?   r  rX  rY  rE   rF   rG   get_edgecolor)r#   r7   rU  rK   rZ  faps         rL   test_single_edge_color_directedr_  u  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#   r   r   )rU  r#   r   r   rZ   rS   ra  r{   )r   r   rd  )rS   r   r   r   rO   rZ   rS   N)
r>   r?   r  r;  ri   rX  rE   rF   rG   r]  )rK   rW   r*   r'   rZ  r^  s         rL   $test_edge_color_tuple_interpretationre    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.rt   gbrb  N)r2  rQ  r>   rY  rX  r   	itertoolscyclerE   rF   rG   r]  rK   r*   
edgecolorsrZ  r^  r7   s         rL   .test_fewer_edge_colors_than_num_edges_directedrn    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   )rt   rh  ri  r   rb  Nr   )r>   r?   r  rY  r2  rX  r   rE   rF   rG   r]  rl  s         rL   -test_more_edge_colors_than_num_edges_directedrp    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 Nr   r   purpler   )r*   rU  r#   r   rZ   r   )r>   rX  r2  rY  r   squeezeri   rj   rE   rF   rG   )edge_collectionr'   s     rL   3test_edge_color_string_with_global_alpha_undirectedrv    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 rr  )
r>   rX  r2  rQ  rY  ri   r]  rE   rF   rG   )rZ  r^  r'   s      rL   1test_edge_color_string_with_global_alpha_directedrx    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.rZ   r   r   rO   N)r>   r?   r;  ri   rX  rf   r   r   )r}   rK   rW   r*   rZ  s        rL   test_edge_width_default_valuerz    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;  ri   rX  rj   r   )r{  r7   rK   rW   r*   rZ  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?   r  r;  ri   rX  r   )r{  r7   rK   rW   r*   rZ  r^  s          rL   %test_edge_width_single_value_directedr    s     	abjj1A#CFm
,mqf9mC
,((yAK{q     "h...  -   Brc  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)   g       @g      (@)rU  r   )	r2  rQ  r>   rY  rX  r   rj  rk  r   )rU  rK   r*   r   rZ  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   rb  r   g?)r#   	edge_vmin	edge_vmaxN)	r>   r?   r  rY  rX  r]  rE   rF   rG   )rK   r*   rZ  r   orig_colorsscaled_colorss         rL   #test_edge_color_with_edge_vmin_vmaxr  8  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?   r  r;  ri   rX  r   )rK   rW   r*   rZ  r^  s        rL   %test_directed_edges_linestyle_defaultr  H  s    
abjj1A#CFm
,mqf9mC
, ((0K{q     "g---  -s   B)dashed--rO   r   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*   rZ  r^  s         rL   *test_directed_edges_linestyle_single_valuer  T  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?   r  r;  ri   rX  r   rj  rk  r   )r  rK   rW   r*   rZ  r^  r   s          rL   &test_directed_edges_linestyle_sequencer  j  s     	abjj1A#CFm
,mqf9mC
,((yAK{q   +yy'AB
  "e+++ C	 -s   B/c                  .   SSK Jn Jn  SSKJn  [
        R                  " [
        R                  S9n[
        R                  " [
        R                  S9n[
        R                  " USS9n[
        R                  " USS9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   )rh   r   )r   r   *   r   TarrowsF)matplotlib.collectionsrh   r   matplotlib.patchesr   r>   frucht_graphGraphr  r   draw_networkx_nodesrf   rX  r   ri   )	rh   r   r   rK   dGr*   dposrT   re   s	            rL   test_return_typesr    sJ   E2
RXX.A	bjj	1B


12
&CBR(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 SS9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 )-Nr  r   )r   rO   rZ   rS   rt   i        ?)nodelistr
   r   r   )r   r   r      ri  )rQ   r)   r  r   r   r)   )r   r   )r   r   rd  )rS   r      )rU  r   r   r#   )r   r   )r   r   )r   r  )r  r   T)rU  r  min_source_marginmin_target_marginr   r#   z$a$r   z$b$rO   z$c$rZ   z$d$rS   z$\alpha$r   z$\beta$r   z$\gamma$r   z$\delta$r  k   )	font_size)r  
font_colorF)rL  r+   r  z4-5rK  )r>   cubical_graphr   r  rX  r;  draw_networkx_labelsrN  )rK   r*   r   rW   rF   s        rL   test_labels_and_colorsr    s   
A


12
&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   E6c                     U u  p[         R                  " [        US9  [         R                  " [        [         R                  " [        5      US9  g )Nr   )r>   rM  r2  rN  circular_layout)r)  r*  r   s      rL   	test_axesr    s4    GCGGG  "*<*<W*E"MrN   c                  Z    [         R                  " 5       n [         R                  " U 5        g r   )r>   r  rM  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   rd  )r  T)rU  r  F)r  r>   r  r  r  rf   r  rE   rg   r   rX  )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   rU  )rb   r   r   )rU  r   )r>   r?   MultiDiGraph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   皙?r   )r      )r
   r   rO      )r>   rY  r2  rA   rB   rC   r  ri   rT   r;  append)r*   r*  	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   r   )	r>   r?   rM  rH   rf   rE   rg   r   ri   )r)  r*  r   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 )
NrZ   r  rt   g""""""@r   )r   r  r  r   rr   r9   )r>   rc   rM  rT   r   r   rH   rf   rE   r   r   ri   r   rF   rG   r   r   )r)  rK   r*  r   rW   r   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 )	NrZ   r   r`   -[rb   T)r   r  ra   r  rO   )r>   rc   re   rM  rH   rf   rE   r   r   r   r  rk   
ArrowStyleBracketBCurveFilledBget_arrowstyle)r)  rK   r*  r   rl   rm   arrowstyles
arrowsizesr   r  r   r   r7   s                rL   #test_individualized_edge_attributesr  4  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)r   r   
ValueErrorr>   rM  r2  rR  rN   rL   test_error_invalid_kwdsr  G  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)r   r   rZ   r   rS   rO   rS   )rO   rZ   rS   z1arrowsize should have the same length as edgelistr  )r  )r>   r  r   r   r  rM  )rK   r  s     rL   +test_draw_networkx_arrowsize_incorrect_sizer  L  sF    


34AI	M
 	'
 
 
s   A
A"r     )rb   r   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r   r  r   r   r   rO   r   r   )r*   r  )r>   r  rX  rf   r   rj  repeatr   rE   r   r   r  )r  rK   r*   re   r^  r7   s         rL   test_draw_edges_arrowsizer  U  s    


+,AF
+C""1CE/9)S/I/I	  +yIU.#s{{::;;;;%%'8333 /rN   ra   r`   r`   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  r   r   r  r   )r*   ra   r  )r>   r  rX  rf   r   rj  r  rE   r   r  r  r  CurveFilledABr   r   r  )ra   rK   r*   re   arrow_objectsr^  r7   s          rL   test_draw_edges_arrowstyler  b  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  r2  r[   arrayrR  rN   rL   test_np_edgelistr  w  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   r   r   r   zhas no positionr  )r>   r?   r   r   r   r  )rK   r*   s     rL   *test_draw_nodes_missing_node_from_positionr  |  sJ    
aA
 C	r''/@	A
q& 
B	A	As   A
A-c                     U u  p[         R                  " S5      nU Vs0 s H  oDXD4_M     nn/ SQn[         R                  " UUSUUS9n[        UR	                  5       5      S:  d   egs  snf )zEnsure draw_networkx_nodes works when node_shape is a Python list.

This covers the case where node_shape is a sequence (list) and node_color
is a single scalar color, which should be supported.
r   )r   r  r   r  r   r9   )r
   r   r   r   N)r>   empty_graphr  ri   r\   )r)  r*  r   rK   ir*   shapesrT   s           rL   :test_draw_networkx_nodes_node_shape_list_with_scalar_colorr    sx     GC
qA
 aqf9aC
 &F""	E u  "#a''' !s   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

r   r   r  r   r   r   NrZ   r  r   r   r  r  rO   )r>   r  rX  r  r  )
r   r)  r*  r   rK   r*   default_patchr  padded_patchr  s
             rL   )test_draw_edges_min_source_target_marginsr    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  r   r   r   r  )rZ   r   r   r  NrZ   r   b   f   r  rO   )r>   r  rX  r  r  r   )r   r)  r*  r   rK   r*   r   dr  r  r   r  s               rL   4test_draw_edges_min_source_target_margins_individualr    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   r   N)r>   r  r  r   rX  r  r   r!  )r)  r*  r   rK   patchr   s         rL   &test_nonzero_selfloop_with_single_noder
    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.
rZ   r   rO   r   r  r   N)	r>   r?   r  r   rT   rX  r  r   r!  )r)  r*  r   rK   rW   r*   r	  r   s           rL   2test_nonzero_selfloop_with_single_edge_in_edgelistr    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   rg  r)   Nr   )r>   drawingnx_pylabapply_alpharU   )r  	colorlistr   rgba_colorss       rL   test_apply_alphar    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?   r  rX  ri   re   rf   rE   r   r   rg   rh   )r   UGr  rW   r*   rK   re   s          rL   *test_draw_edges_toggling_with_arrows_kwargr  '  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   rf   rE   rg   rh   r   r   s     rL   r   ?test_draw_networkx_arrows_default_undirected.<locals>.<genexpr>P  s$     Unz!S__;;<<n   13)r  r>   r?   anyrg   r   r  r)  r   rK   r*  r   s         rL   ,test_draw_networkx_arrows_default_undirectedr   I  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   r  r  s     rL   r   =test_draw_networkx_arrows_default_directed.<locals>.<genexpr>[  s'      ?M!
1coo4455~r  )r  r>   r?   r  r  rg   r   r  s         rL   *test_draw_networkx_arrows_default_directedr$  T  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   r   r   )rU  r   )r>   r?   r   rM  r   )r)  rK   r*  r   s       rL   test_edgelist_kwarg_not_ignoredr&  a  sH    
aAJJq!GCGGA(R0zz>zrN   )rK   expected_n_edgesrZ   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r   r   r   r  rS   rZ   r   arc3,rad=0.1)r+  r+  arc3,rad=0.2connectionstyleN)	enumerater   r%   r>   rX  ri   )	rK   r'  r  rl   rm   rW   r*   
conn_styler  s	            rL   2test_draw_networkx_edges_multiedge_connectionstyler1  j  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 namesr)  rS   rZ   r*  )r+  r+  r+  r-  r+  r,  CurvedArrowTextN)
r/  r   r%   r>   rX  rN  ri   values	__class____name__)rK   r'  r  rl   rm   rW   r*   r  r0  
text_itemstis              rL   8test_draw_networkx_edge_labels_multiedge_connectionstyler9  ~  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   rb   r*  r   r   r+  r,  rL  r.  rZ   )r>   r   r   get_edge_attributesrN  ri   )rK   rL  rW   r*   r7  s        rL   'test_draw_networkx_edge_label_multiedger=    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   rK  N)r>   r?   rT   rN  )rK   rW   r*   s      rL   (test_draw_networkx_edge_label_empty_dictr?    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   rd  r   r|  r   )pinkcyanrr   r9   r{   green)r   rU  r#   rS   Nr   r  )r>   r  rT   rX  ri   r   r[   r  r   r   contains_pointrE   rF   rG   r]  )r)  r*  r   rU  edge_colorsrK   rW   r*   	sl_pointsr^  clrslps               rL   3test_draw_networkx_edges_undirected_selfloop_colorsrJ    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_kwargr   r.  r,  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  r   Nerrorignore)categoryT)r   r  )r>   r?   r   r   r   warnsUserWarningrX  warningscatch_warningssimplefilterfilterwarningsDeprecationWarning)rK  r)  rK   rW   r*   r*  r   
kwarg_names           rL   1test_user_warnings_for_unused_edge_drawing_kwargsrX    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_graphrR  rS  ri   )rY  r)  r*  r   rK   ws         rL   *test_no_warning_on_default_draw_arrowstyler^    sO     GC
qA		 	 	- 
.q6Q;; 
.	-s   A
Ar  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*   r   r  )r>   r?   rT   r  r  r  r  )	r_  r  r)  rK   rW   r*   r5  r   r  s	            rL   test_hide_ticksra    sw     	aAgg
&gqf9gC
&EA
1"4288$D'')*j888 % 's   A>)angleangle3arczarc3,rad=0.0zbar,fraction=0.1c                    U u  p#Sn[         R                  " U/5      nU Vs0 s H  ofUS4_M	     nnUR                  S5      S   n[         R                  " XWUS0US9n	US   S   US   S   -   S-  n
US   S   US   S   -   S-  nUS;   a?  X   R                  (       d+   X   R
                  [        R                  " X45      :H  5       eg
US	:X  a  X   R
                  U:  d   eg
g
s  snf )zz
Check that FancyArrowPatches with all `connectionstyle`s are supported
in edge label rendering. See gh-7735 and gh-8106.
r   r   ,rJ  r;  rO   rZ   >   rd  r1   r  N)r>   r  splitrN  r  yr   approx)r)  r   r*  r   rJ  rK   rW   r*   namer   hmidvmids               rL   $test_edge_label_all_connectionstylesrm    s     GCD


D6A
 aq!f9aC
 ;;sAD))	T6NEF F1IAq	!Q&DF1IAq	!Q&D|~~Lv|~~|1LLL~	|~~$$$ 
 !s   C'	label_posgg?c                    U u  p#Sn[         R                  " U/5      nU Vs0 s H  ofXf4_M     nn[         R                  " XWUS0USS9nX   R                  (       d+   X   R                  [
        R                  " X45      :H  5       egs  snf )z@
Check that label positions can be extrapolated outside [0, 1].
r   rJ  rb  )rL  rn  r.  N)r>   r  rN  r  rh  r   ri  )	r)  rn  r*  r   rJ  rK   rW   r*   lbls	            rL   test_edge_label_label_posrq  !  s    
 GCD


D6A
 aqf9aC
 

&
&	T6NiQXC 9;;L	v}}i5K'LLL; !s   B	)u__doc__rj  osrR  r   networkxr>   r1  rE   r[   userA   rcParamsbarbell_graphr2  defaultsmarkparametrizerM   rX   r^   rp   r  r  r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r$  r'  fixturer)  draw_circularr0  draw_planardraw_randomdraw_spectralrF  r<  draw_forceatlas2r7  r=  rA  rH  rO  rS  r[  r_  re  rn  rp  rv  rx  rz  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  rM  r  r   r$  r&  r   r  r1  r9  r=  r?  rJ  rX  r^  rN  rX  r  r  ra  rm  rq  rR  rN   rL   <module>r     sR   2  	   ,'! -.#]  

1a
 ,,D, ), 	,
   ," ##,$ #%,& ',( ),* D+,, #-,. )/,0 $O?S1,H #I,J #K,N sO,P aQ,R W,^ -	tXl34(' " 
 "**'=> ?
* "**'=> ?( "**'=> ?>$ "**'=> ?8 "**'=> ?( 	&(>?@	
QF	1b' "**'=> ?, 	&(>?@	sCj	3* "**'=> ?46" z2/ 3/d 5$-0 1&P   







	&&&&&*
 
#
	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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 K%%. tSk2M 3MrN   