
    ܛ7i)                     :   d Z ddlZddlZddlZddlZddlZ ej                  d      Z ej                  d      Z	ej                  d        ej                  d      Zdej                  d<    ej                  d	d
      Zi dddddddddddddddddddd
ddddddddd dd!dd"dd#dddddd$d%d%d&ddd'dd(
d)d*d+dd,d*d-dd.ddd/Zej                   j#                  d0dded   fd1d2f      d3        Zej                   j#                  d4d5      d6        Zd7 Zd8 Zej                   j#                  d9d:      ej                   j#                  d;ej,                  ej.                  f      d<               Zej                   j#                  d;ej,                  ej.                  f      d=        Zej                   j#                  d;ej,                  ej.                  f      d>        Zd? Zej                   j#                  d;ej,                  ej.                  f      d@        Zej                   j#                  d;ej,                  ej.                  f      dA        Zej                   j#                  d4ded!   ed!   gfdBdBdBgfdCdBdDgff      ej                   j#                  d;ej,                  ej.                  f      dE               Zej                   j#                  d4ded)   ed)   gfdFdFdFgfdGd*dFgff      ej                   j#                  d;ej,                  ej.                  f      dH               ZdI Z dJ Z!dK Z"dL Z#dM Z$dN Z%ej                   j#                  ddO      dP        Z&ej                   j#                  dQddg      dR        Z'dS Z(dT Z)ejT                  dU        Z+ej                   j#                  dVejX                  ejZ                  ej\                  ej^                  ej`                  ejb                  ejd                  ejf                  g      dW        Z4dX Z5dY Z6dZ Z7d[ Z8d\ Z9ej                   j#                  d9d]d^d_gd`fdadbgdcfdddegdffdgdhgdiff	      ej                   j#                  djddkgf      dl               Z:ej                   j#                  d9d]d^d_gd`fdadbgdcfdddegdffdgdhgdiff	      ej                   j#                  djddkgf      dm               Z;dn Z<do Z=dp Z>dq Z?dr Z@ej                   j#                  d;ej,                  ej.                  f      ds        ZAej                   j#                  dtdudvgdvff      dw        ZBej                   j#                  dtdudvgdvff      dx        ZCej                   j#                  djg dyddkdzgf      d{        ZDd| ZEd} ZFej                   j#                  dGd~      d        ZGej                   j#                  ddgdgdgg ddd*gg df      d        ZHd ZId ZJd ZKd ZLd ZMd ZNd ZOd ZPd ZQd ZRd ZSd ZTej                   j#                  ddg df      d        ZUej                   j#                  ddg df      d        ZVd ZWd ZXd ZYej                   j#                  ddO      d        ZZej                   j#                  ddO      d        Z[d Z\d Z]d Z^d Z_ej                   j#                  dej                  ej                  f      d        Zbej                   j#                  dej                  ej                  f      d        Zcd Zdej                   j#                  d ej.                         dg ej                         d	g ej                         d	gf      d        Zgej                   j#                  d ej.                         dg ej                         d	g ej                         d	gf      d        Zhd Zid Zjd Zkej                   j#                  ddd*iddiddiddDiddDif      d        Zlej                   j#                  dej                  ejX                  f      d        Zmej                   j#                  dddg      ej                   j#                  dej                  ej                  ej                  ej                  ej                  g      d               Zrej                   j#                  dGg d      d        Zsej                   j#                  dddg      d        Zty)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                    t        j                  d      }t        j                  |dd       t        j	                         j                  d      }t        j                  |fd|i| |i t        j                  j                  |j                         d   j                         d   |      sJ t        j                          y )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        ^/home/rose/Desktop/poly/venv/lib/python3.12/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IIK    )r6   r7   ))N)   rO   rO   rO   )r)   )r)   r)   r)   r)   )n_alpha)r   r)   gUUUUUU?      ?c           
         t        j                  d      }t        j                  ||j                         D ci c]  }|d|dz   z   c}d       t        j                         j                  d      }t        j                  |||        t        |j                         d   j                         d d df   |k(        sJ t        j                          y c c}w )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1qwwyAy!q!q1u+~yA9MZZ\%%c*FJJqK8a '')!Q$/8;   IIK Bs   C
c            	         t        j                  d      } t        j                  | | j                         D ci c]  }|||f	 c}d       t        j                         j                  d      }t        j                  | |d       t        j                  |j                         d   j                         j                  ddgddgddgddggk(        sJ t        j                          y c c}w )	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!'')<)Qq1a&y)<eDZZ\%%c*FJJq%066a ,,.33AAAQRTUPV7WW   IIK =s   C+
c            
         t        j                         } t        j                  | | j                         D ci c]  \  }}||f||z   dz  rdnd c}}d       t        j                         j                  d      }t        j                  | |d       |j                         D cg c](  }t        |t        j                  j                        r|* c}d   }t        |j                               t        | j                         D cg c]  \  }}||z   dz  sd	 c}}      k(  sJ t        j!                          y c c}}w c c}w c c}}w )
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	aggiHidaQFa!eq[Ec1iH, ZZ\%%c*FJJq3 $$&
&Aa778 	
&
 	
	B
 r||~#QWWY&NYTQ1q5A+qY&N"OOOOIIK I


 'Os   E '-E
EE)r#   r7   )Nblackrr9   r   r           yellowr   rO   r   rO   r:   )r   blue)#0000FFr{   
graph_typec                    t        j                  d|      }t        j                  |dd       t        j	                         j                  d      }t        j                  || |       |j                         rP|j                         D cg c]6  }t        |t        j                  j                        r|j                         8 }}nO|j                  D cg c](  }t        |t        j                  j                        r|* c}d   j!                         }t#        fd|D              sJ t        j%                          y c c}w c c}w )	NrS   create_usingr|   r   r<   )r#   r=   r   c              3   ^   K   | ]$  }t         j                  j                  |       & y wN)rE   rF   rG   ).0cr7   s     rL   	<genexpr>z1test_display_edge_single_color.<locals>.<genexpr>   s#     B6aszz$$Q16s   *-)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JJqZ7}} ((*
*!S[[889 HHJ* 	 
 ''
'!S__;;< '
 	 Z\	 	
 B6BBBBIIK

s   ;E-E
c                    t        j                  d|       }t        j                  |dddd       t        j	                         j                  d      }t        j                  ||       d	d
g}|j                         rP|j                         D cg c]6  }t        |t        j                  j                        r|j                         8 }}nP|j                  D cg c])  }t        |t        j                  j                        s(|+ c}d   j!                         }t        j"                  j%                  ||      sJ t        j'                          y c c}w c c}w )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 HHJ& 	 
 ~~
%!As7U7U)VA~

Z\ 	 ::  222IIK

s   ;E)EEc           	      H   t        j                  d|       }t        j                  ||j                         D ci c]  }|||f	 c}d       t        j                         j                  d      }t        j                  ||       |j                         r|j                         D cg c]h  }t        |t        j                  j                        rB|j                         j                  dd d f   |j                         j                  dd d f   fj }}n|j                   D cg c])  }t        |t        j                   j"                        s(|+ c}d   }|j%                         D cg c](  }|j                  dd d f   |j                  dd d f   f* }}d	d
g}	d}
t'        ||	      D ]I  \  }}|\  }}|\  }}t)        t+        ||z
        |
|
fk        rt)        t+        ||z
        |
|
fk        rIJ  t        j-                          y c c}w c c}w c c}w c c}w )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!'')<)Qq1a&y)<eD		!	!#	&BJJq}} __&
&!S[[889 ZZ\""1a4(!**,*?*?A*FG& 	 
 ~~
%!As7U7U)VA~

 <K;T;T;V
;VaQZZ1qzz"a%01;V 	 
 !"23H IJ)1	7	73y9,-I0FFGC'!"i%;;M
 	
 
 * IIK5 =


s   H
*A-H()HH.-Hc                      t        j                         } d } ||       }t        j                         j	                  d      }t        j
                  | ||       t        | j                         |j                         d   j                         j                        D ci c]  \  }}|t        |       }}}| j                         D ]  }t        ||   ||   k(        rJ  t        j                          y c c}}w )Nc                 0    t        j                  | d      S )Ni/ seed)r>   spring_layoutrK   s    rL   fixed_layoutz4test_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158 W   WWY3q6WQZ'((( IIKs   !C:c                    t        j                  d|       }t        j                  |dddd       t        j                  d   }t        j
                  |dd|d	
       t        j                         j                  d      }t        j                  ||       t        j                  j                  |      }|j                  dd       |j                  d      |j                  d      g}|j                         rP|j                         D cg c]6  }t!        |t        j"                  j$                        r|j'                         8 }}nO|j(                  D cg c](  }t!        |t        j(                  j*                        r|* c}d   j-                         }t        j.                  j1                  |d   |j2                  d   d         sJ t        j.                  j1                  |d   |j2                  d   d         sJ t        j.                  j1                  ||      sJ t        j5                          y c c}w c c}w )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 OO* 	 
 ''
'!S__;;< '
 	 Z\	 	
 ::  !aggdmG.DEEE::  !aggdmG.DEEE::  6222IIK

s   ;H=-Ic                 N   t        j                  d|       }t        j                  |ddddd       t        j                  d   }t        j
                  |dd	|       t        j                         j                  d
      }t        j                  ||       t        j                  j                  |      }|j                  dd       |j                  d      |j                  d      |j                  d      g}|j                  D cg c])  }t        |t        j                  j                         s(|+ c}d   j#                         }t        j$                  j'                  |d   |j(                  d   d	         sJ t        j$                  j'                  |d   |j(                  d   d	         sJ t        j$                  j'                  |d   |j(                  d   d	         sJ t        j$                  j'                  ||      sJ t        j+                          y c c}w )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::  !aggaj.ABBB::  !aggaj.ABBB::  6222IIKs   
)H"4H"   widthrb   c           	      n   t        j                  d|      }t        j                  |dddd       t        j	                         j                  d      }t        j                  || |       |j                         rP|j                         D cg c]6  }t        |t        j                  j                        r|j                         8 }}nXt        |j                  D cg c](  }t        |t        j                  j                         r|* c}d	   j#                               }||k(  sJ y c c}w c c}w )
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 OO* 	 
   +++Aa!?!?@ + 	  !
 X
s   ;D- -D2:stylec           	         t        j                  d|      }t        j                  |dddd       t        j	                         j                  d      }t        j                  || |       |j                         rP|j                         D cg c]6  }t        |t        j                  j                        r|j                         8 }}n|ddd	}|j                  D cg c](  }t        |t        j                  j                        r|* c}d
   j!                         D 	cg c]  }	||	d
   |	d   t#        |	d         nd f   ! }}	||k(  sJ t        j%                          y c c}w c c}w c c}	w )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 OO* 	 
 "%c:

  +++Aa!?!?@ + 	  !	"
" !QqT-=eAaDk4HI" 	 
 XIIK#

s   ;E% -E*#$E/c                     t        j                  d      } t        j                         j	                  d      }t        j
                  | |ddi       |j                         D cg c])  }t        |t        j                  j                        s(|+ }}t        | j                         |      D ]8  \  }}|j                         t        |      k(  sJ |j                         dk(  r8J  t        j!                          y c c}w )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JJqVRL9,,.O.A*Q2Na.FOAGGIv&1zz|s1v%%%zz|t### ' IIK	 Ps   %)C?C?c                     t        j                  d      } t        j                         j	                  d      }t        j
                  | | j                         D ci c]  \  }}||fd||z   i c}}       t        j                  | |ddid        |j                         D cg c])  }t        |t        j                  j                        s(|+ }}t        |       t        | j                         |      D ]A  \  }}|j                         t!        |d   |d   z         k(  sJ |j#                         dk(  rAJ  t        j%                          y c c}}w c c}w )	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 1AGGINIDAq1vQ'77INOJJqWcNtL,,.O.A*Q2Na.FO	&MAGGIv&1zz|s1Q4!A$;////{{}### ' IIK OOs   E%)EEc                  |   t        j                         } | j                  g d       | j                  g d       t        j                  | | j                  d      D ci c]  }|ddt        |d         z    c}d       t        j                         j                  d	      }t        j                  | |
       |j                         D cg c]@  }t        |t        j                  j                        r|j!                         j"                  B }}|g dk(  sJ t        j%                          y c c}w c c}w )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)*	
	 	agg4g6HI6HA3QqT?+,,6HI; ZZ\%%c*FJJq  $$&&Aa445 	
##& 	 
 3333IIK Js   D4
AD9c                      t        j                         } t        j                  t         j                        5  t        j
                  | d       t        j                          d d d        y # 1 sw Y   y xY w)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--A6c            
         t        j                  dt         j                        } t        j                  | | j	                         D ci c]  \  }}||f||z   dz   dz   c}}d       t
        j                         }t        j                  | |       g d|j                         D cg c]6  }t        |t        j                  j                        r|j                         8 c}k(  sJ t
        j                          y c c}}w c c}w )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	;AQFQUQY1$$;[ 
BJJq""Aa445 	
"   
 IIK <s   	D*;Dc            	      x   t        j                  d      } t        j                  | dddddd       t        j                  | | j                         D ci c]  }||dk  
 c}d	       t	        j
                  t         j                        5  t        j                  |        d
d
d
       y
c c}w # 1 sw Y   y
xY w)zP
    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;Aq!a%x;YG 
r''	(


1 
)	( < 
)	(s   B+
B00B9)r   r   c                 t   t         j                         j                  d      }t        j                  dg      }t        j
                  |dddd       t        j                  |||        |j                         D cg c])  }t        |t        j                  j                        s(|+ c}d   }|j                         j                         ddd	df   }t         j                         j                  d      }t        j                  ||d
d
|        |j                         D cg c])  }t        |t        j                  j                        s(|+ c}d   }|j                         j                         ddd	df   }|d   |d   kD  sJ |d   |d   k  sJ t         j                          yc c}w c c}w )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   >)F0(F0')F5F5ticksc           	         t        j                  d      }t        j                  ||j                         D ci c]  }|||f	 c}d       t        j                         }t        j                  ||        |j                  |j                  fD ]   }t        |j                               | k7  r J  t        j                          y c c}w )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!'')<)Qq1a&y)<eD	BJJqU#288$D'')*e333 % IIK =s   C
c                     t         j                         } t        j                         }|j	                  d       |j                  dd       t        j                  |ddid       t        j                  ||        | j                         D cg c])  }t        |t        j                  j                        s(|+ c}d   }|j                         }t        |j                         t        |j                          |j                  dkD  r|j                   dkD  sJ t         j#                  |        t         j%                          y c c}w )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8Ec                      t        j                         } t        j                  |        t        j                  | d      i k(  sJ y)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               #      K   t         j                         \  } }| |f t         j                  |       t         j                          y wr   )rA   subplotsr   rJ   )figr   s     rL   r'  r'    s2     llnGC
r'MKKOIIKs   AA
functionc                     | t         j                  k(  rt        j                  dd       |\  }}dddd} | t        fi | |j                  |dz         y )	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_drawr5     sV     2'''G,NOFC$3CGW  KK9$%rN   c                     | \  }}t        t        d            t        t        dd            t        t        dd            g}t        j                  t        |       |j                  |dz         y )Nr   rb      )nlistr-  )r   ranger>   
draw_shellr0  r1  )r'  r2  r(  r3  r8  s        rL   test_draw_shell_nlistr;  6  sT    FC%(^T%2,/eBm1DEEMM''KK9$%rN   c                     | \  }}t        j                  dd      }t        j                  |       |j                  |dz         y )NrZ   r   r-  )r>   complete_bipartite_graphdraw_bipartiter1  )r'  r2  r(  r3  rK   s        rL   test_draw_bipartiter?  =  s<    FC
##Aq)AaKK9$%rN   c                      t        t        j                               } t        j                  t        | dt
        j                  j                  d       y )Nr   T)r#   r   	edge_cmapwith_labels)r9  r0  number_of_edgesr>   draw_springrA   r   Blues)rF   s    rL   test_edge_colormaprF  D  s5    7**,-FNNF!svv||QUrN   c                     | \  }}d}t        j                  |g      }|D ci c]  }|||f	 }}t        j                  ||       t        j                  |||di       |j	                  |dz         y c c}w )Nr   )r*   edgeedge_labelsr-  )r>   r  drawdraw_networkx_edge_labelsr1  )r'  r2  r(  r3  rH  rK   rW   r*   s           rL   test_draw_networkx_edge_labelsrM  L  sv    FCD


D6A
 a1q!f9aC
 GGA3  CdF^DKK9$% !s   A6c                  R    t        j                  t        j                                y r   )r>   rD  r0  to_directed rN   rL   test_arrowsrQ  V  s    NN7&&()rN   rq   rs   rt   r9   ru   rv   rx   ry   rz   r:   )#0000ffr{   rR  r{   edgelistr   c                     t        j                  d      }t        j                  |t        j                  |      ||       }t        j
                  j                  |j                         |      sJ y)z`Tests ways of specifying all edges have a single color for edges
    drawn with a LineCollectionrS   r*   rS  r#   N)r>   r?   draw_networkx_edgesrandom_layoutrE   rF   rG   r   )r#   r7   rS  rK   drawn_edgess        rL   !test_single_edge_color_undirectedrY  [  s[    & 	aA((	r"X*K ::  !6!6!8(CCCrN   c                    t        j                  dt         j                        }t        j                  |t        j                  |      ||       }|D ]2  }t
        j                  j                  |j                         |      r2J  y)zaTests ways of specifying all edges have a single color for edges drawn
    with FancyArrowPatchesrS   r   rU  N)	r>   r?   r  rV  rW  rE   rF   rG   get_edgecolor)r#   r7   rS  rK   rX  faps         rL   test_single_edge_color_directedr]  u  sk    & 	abjj1A((	r"X*K zz$$S%6%6%8(CCC rN   c                     t        j                  dt         j                        } t        t	        |             D ci c]  }|||f	 }}dD ]  }t        j
                  | ||      }|D ]2  }t        j                  j                  |j                         |      r2J  t        j
                  | |ddg|      }|D ]2  }t        j                  j                  |j                         |      r2J   t        j
                  | |g dd	      }|D ]2  }t        j                  j                  |j                         d
      r2J  t        j
                  | |g dd      }|D ]2  }t        j                  j                  |j                         d
      r2J  t        j
                  | |g dd      }t        j                  j                  |d   j                         |d   j                               sJ |D ]2  }t        j                  j                  |j                         d
      s2J  t        j
                  | |g dd	      }t        j                  j                  |d   j                         |d   j                               sJ t        j                  j                  |d   j                         |d   j                               sJ |D ]2  }t        j                  j                  |j                         d
      s2J  yc c}w )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   )rS  r#   r   r   rZ   rS   r_  r{   )r   r   rb  )rS   r   r   r   rO   rZ   rS   N)
r>   r?   r  r9  ri   rV  rE   rF   rG   r[  )rK   rW   r*   r'   rX  r\  s         rL   $test_edge_color_tuple_interpretationrc    s    	abjj1A#CFm
,m1q!f9mC
, (,,QCC::(():):)<bAAA  ,,sff-"
 C::(():):)<bAAA  ( ((	31lK zz$$S%6%6%8&AAA  ((	39iK zz$$S%6%6%8&AAA  ((	31iK ::  A$$&A(D(D(F   ::(():):)<fEEE  ((	39lK ::  A$$&A(D(D(F   ::  A$$&A(D(D(F   ::(():):)<fEEE c -s   Lc                  @   t         j                         } t        j                  t               }d}t        j                  | ||      }t        |t        j                  |            D ]5  \  }}t        j                  j                  |j                         |      r5J  y)zZTest that the edge colors are cycled when there are fewer specified
    colors than edges.rt   gbr`  N)r0  rO  r>   rW  rV  r   	itertoolscyclerE   rF   rG   r[  rK   r*   
edgecolorsrX  r\  r7   s         rL   .test_fewer_edge_colors_than_num_edges_directedrl    s}     	A


7
#C J((CJGK[)//**EFXzz$$S%6%6%8(CCC GrN   c                  B   t        j                  dt         j                        } t        j                  t              }d}t        j
                  | ||      }t        ||dd       D ]5  \  }}t        j                  j                  |j                         |      r5J  y)z\Test that extra edge colors are ignored when there are more specified
    colors than edges.r   r   )rt   rf  rg  r   r`  Nr   )r>   r?   r  rW  r0  rV  r   rE   rF   rG   r[  rj  s         rL   -test_more_edge_colors_than_num_edges_directedrn    s     	abjj1A


7
#C%J((CJGK[*Sb/:Xzz$$S%6%6%8(CCC ;rN   c                  H   t        j                  t        t        j                  t              ddgdd      } | j	                         j                         }t        | j                               dk(  sJ t        j                  j                  |d d d      sJ |d   dk(  sJ y Nr   r   purpler   )r*   rS  r#   r   rZ   r   )r>   rV  r0  rW  r   squeezeri   rj   rE   rF   rG   )edge_collectionr'   s     rL   3test_edge_color_string_with_global_alpha_undirectedrt    s    ,,W%&!O 
	"	"	$	,	,	.B((*+q000::  CR(333b6S==rN   c                  :   t        j                  t        j                         t        j                  t              ddgdd      } t        |       dk(  sJ | D ]A  }|j                         }t        j                  j                  |d d d      sJ |d   dk(  rAJ  y rp  )
r>   rV  r0  rO  rW  ri   r[  rE   rF   rG   )rX  r\  r'   s      rL   1test_edge_color_string_with_global_alpha_directedrv    s    ((W%&!K {q    zz$$RWh777"v}} rN   c                    t        j                  d|       }t        t        |            D ci c]  }|||f	 }}t        j                  ||      }t        |t              r|d   }|j                         dk(  sJ yc c}w )z^Test the default linewidth for edges drawn either via LineCollection or
    FancyArrowPatches.rZ   r   r   rO   N)r>   r?   r9  ri   rV  rf   r   r   )r}   rK   rW   r*   rX  s        rL   test_edge_width_default_valuerx    sy     	aj1A#CFm
,m1q!f9mC
,((C0K+t$!!n$$&!+++	 -s   A=)	edgewidthr7   rS   rS   rS   c                    t        j                  d      }t        t        |            D ci c]  }|||f	 }}t        j                  |||       }t        |j                               dk(  sJ |j                         |k(  sJ y c c}w )Nr   r   rS   )r>   r?   r9  ri   rV  rj   r   )ry  r7   rK   rW   r*   rX  s         rL   'test_edge_width_single_value_undirectedr}    s     	aA#CFm
,m1q!f9mC
,((CyAK{$$&'1,,,$$&(222 -s   Bc                 (   t        j                  dt         j                        }t        t	        |            D ci c]  }|||f	 }}t        j
                  |||       }t	        |      dk(  sJ |D ]  }|j                         |k(  rJ  y c c}w )Nr   r   r|  rS   )r>   r?   r  r9  ri   rV  r   )ry  r7   rK   rW   r*   rX  r\  s          rL   %test_edge_width_single_value_directedr    s     	abjj1A#CFm
,m1q!f9mC
,((CyAK{q     "h...  -   Bra  r   c                    t         j                         }t        j                  |      }d}t        j                  ||| |      }t        |t        j                  |            D ]  \  }}|j                         |k(  rJ  y )N)r)   g       @g      (@)rS  r   )	r0  rO  r>   rW  rV  r   rh  ri  r   )rS  rK   r*   r   rX  r\  expected_widths          rL   test_edge_width_sequencer  '  st     	A


1
CF((C(&QK";	0GH^  "n444  IrN   c                     t        j                  dt         j                        } t        j                  |       }t        j                  | |ddg      }|D cg c]  }|j                          }}t        j                  | |ddgdd      }|D cg c]  }|j                          }}t        j                  j                  ||      sJ y	c c}w c c}w )
zyTest 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`  r   g?)r#   	edge_vmin	edge_vmaxN)	r>   r?   r  rW  rV  r[  rE   rF   rG   )rK   r*   rX  r   orig_colorsscaled_colorss         rL   #test_edge_color_with_edge_vmin_vmaxr  8  s     	abjj1A


1
C((CQHEK.9:k1??$kK:((	3C:K 1<<1Q__&M<::  m<<< ;
 =s   CCc                  $   t        j                  dt         j                        } t        t	        |             D ci c]  }|||f	 }}t        j
                  | |      }t	        |      dk(  sJ |D ]  }|j                         dk(  rJ  yc c}w )z>Test default linestyle for edges drawn with FancyArrowPatches.r   r   rS   solidNr>   r?   r  r9  ri   rV  r   )rK   rW   r*   rX  r\  s        rL   %test_directed_edges_linestyle_defaultr  H  s    
abjj1A#CFm
,m1q!f9mC
, ((C0K{q     "g---  -s   B)dashed--rO   r   c                 (   t        j                  dt         j                        }t        t	        |            D ci c]  }|||f	 }}t        j
                  |||       }t	        |      dk(  sJ |D ]  }|j                         | k(  rJ  yc c}w )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*   rX  r\  s         rL   *test_directed_edges_linestyle_single_valuer  T  s     	abjj1A#CFm
,m1q!f9mC
,((Cu=K{q     "e+++ 	 -r  	style_seqr  r  r  )r  r-   r   )r  r-   r   z-.c                 h   t        j                  dt         j                        }t        t	        |            D ci c]  }|||f	 }}t        j
                  |||       }t	        |      dk(  sJ t        |t        j                  |             D ]  \  }}|j                         |k(  rJ  yc c}w )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  r9  ri   rV  r   rh  ri  r   )r  rK   rW   r*   rX  r\  r   s          rL   &test_directed_edges_linestyle_sequencer  j  s     	abjj1A#CFm
,m1q!f9mC
,((CyAK{q   +yy'AB
U  "e+++ C	 -s   B/c                     ddl m} m} ddlm} t        j                  t
        j                        }t        j                  t
        j                        }t        j                  |d      }t        j                  |d      }t        j                  ||      }t        ||      sJ t        j                  ||d      }t        |t              sJ t        |      dkD  rt        |d   |      sJ t        j                  ||d	      }t        ||       sJ t        j                  ||d       }t        ||       sJ t        j                  ||d       }t        |t              sJ t        |      dkD  rt        |d   |      sJ y y )
Nr   )rh   r   )r   r   *   r   TarrowsF)matplotlib.collectionsrh   r   matplotlib.patchesr   r>   frucht_graphGraphr  r   draw_networkx_nodesrf   rV  r   ri   )	rh   r   r   rK   dGr*   dposrT   re   s	            rL   test_return_typesr    sE   E2
RXX.A	bjj	1B


12
&CBR(D""1c*Ee^,,,""2tD9EeT"""
5zA~%(O444""2tE:Ee^,,,""1d48Ee^,,,""2s48EeT"""
5zA~%(O444 rN   c            
      &   t        j                         } t        j                  | d      }t        j                  | |g dddd       t        j                  | |g dd	dg d
       t        j                  | |dd       t        j                  | |g dddd       t        j                  | |g dddd	       t        j                  | |g dddddd	       i }d|d<   d|d<   d|d<   d|d<   d|d<   d|d<   d |d!<   d"|d#<   t        d      D ci c]  }||dz  dk(  rd$nd }}t        j                  | ||d%&       t        j                  | ||d%|'       t        j                  | |d d()       t        j                  | |d*d+i,       y c c}w )-Nr  r   )r   rO   rZ   rS   rt   i        ?)nodelistr
   r   r   )r   r   r      rg  )rQ   r)   r  r   r   r)   )r   r   )r   r   rb  )rS   r      )rS  r   r   r#   )r   r   )r   r   )r   r  )r  r   T)rS  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)rJ  r+   r  z4-5rI  )r>   cubical_graphr   r  rV  r9  draw_networkx_labelsrL  )rK   r*   r   rW   rF   s        rL   test_labels_and_colorsr    s   
A


12
&C	3#D 	$ 1cC8	1 	1 	1	 FF1IF1IF1IF1IF1IF1IF1IF1I5:1X>XaA
+XF>AsFb9AsFbVL  CT%H  Cfe_E	 ?s   Fc                     | \  }}t        j                  t        |       t        j                  t        t        j                  t              |       y )Nr   )r>   rK  r0  rL  circular_layout)r'  r(  r   s      rL   	test_axesr    s6    GCGGG  "*<*<W*E"MrN   c                  V    t        j                         } t        j                  |        y r   )r>   r  rK  r   s    rL   test_empty_graphr    s    

AGGAJrN   c                  r   dd l } t        j                  ddg      }t        j                  ddg      }t        j                  |      }t        t        j                  ||g       t        j                  j                        sJ t        t        j                  ||g       t        j                  j                        sJ t        j                  ||g d      g k(  sJ t        j                  ||g d      g k(  sJ t        j                  ||g d      g k(  sJ t        j                  ||g d      g k(  sJ y )Nr   r   rb  )r  T)rS  r  F)r  r>   r  r  r  rf   r  rE   rg   r   rV  )r   rK   DGr*   s       rL   #test_draw_empty_nodes_return_valuesr    s   !
&&!"A	VV$	%B


Q
C
q#3S__5S5S   
r34coo6T6T   !!!S2dCrIII!!!S2eDJJJ!!"cBuEKKK!!"cBtDJJJrN   c                      t        j                  dt         j                        } t        j                  | dg       t        j                  | dgg d       y )NrS   r   )r   rO   r   rS  )rb   r   r   )rS  r   )r>   r?   MultiDiGraphdraw_networkxr   s    rL   test_multigraph_edgelist_tuplesr    s<    
aboo6AQ)-Q)DrN   c                     t        j                  t              } t        j	                         }|j                  d       t        j                  t        | ddg       t        t        j                        }t        |      D cg c]  }||z  	 }}t        |      }|j                  d       t        j                  t        | ||       |j                  d       |j                  d       t        j                  t        | |       y c c}w )	N   皙?r   )r      )r
   r   rO      )r>   rW  r0  rA   rB   rC   r  ri   rT   r9  append)r*   r(  	num_nodesxr   rF   s         rL   test_alpha_iterr    s    


7
#C
**,COOC7CSz:GMM"I$))$45$4qQ]$4E59FOOC7CF%H	LLOOOC7Cu5 6s   D	c                    | \  }}t        j                  d      }t        j                  |g d|       |j                         D cg c])  }t	        |t
        j                  j                        s(|+ }}t        |      dk(  sJ y c c}w )Nr   )r   hr   ^)r   r   )	r>   r?   rK  rH   rf   rE   rg   r   ri   )r'  r(  r   rK   r   scatterss         rL   test_multiple_node_shapesr    sz    GC
aAGGA.26??$$a
1coo6T6T(U$   x=As   )B1Bc                    t        j                         }| \  }}t        j                  |||j                         D ci c]  }||dz  rdnd c}|j                         D ci c]  }|t	        |dz  dz          c}       t        |j                         |j                         D cg c]D  }t        |t        j                  j                        rt        |j                               dkD  r|F c}      D ]b  \  }}|dz  rdnd	}t        j                  j                  |j                         |      sJ t	        |dz  dz         |j!                         k(  rbJ  y c c}w c c}w c c}w )
NrZ   r  rt   g""""""@r   )r   r  r  r   rr   r9   )r>   rc   rK  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    s@   
AGCGG	67ggi@iAa!es,i@67ggi@i1c!w-!+,,i@	 		 __&	
&!SXX]]+AJJL0AA0E &	
1  !e7zz$$Q[[]H===1=1$%555 A@	
s   E"E$)A	E)
c                 L   t        j                         }| \  }}|j                         D cg c]  \  }}||z   dz  dk(  rdnd }}}|j                         D cg c]  \  }}d|dz  |dz  z   z  dz    }}}t        j                  ||d||       |j	                         D cg c])  }t        |t        j                  j                        s(|+ }	}t        |j                         |	      D ]  \  }
}|j                         d|
d   dz  |
d   dz  z   z  dz   k(  sJ t        |
      dz  r$t        j                  j                  j                  n#t        j                  j                  j                  }t        |j                         |      rJ  y c c}}w c c}}w c c}w )	NrZ   r   r`   -[rb   T)r   r  ra   r   rO   )r>   rc   re   rK  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  s   
AGCCD779M941aQUaK1,5$69KM89	B	1"AA&+	JBGGA"TkZP??$$a
1ckk6Q6Q(R$   AGGIv&1##%qtax!A$(/B)Cb)HHHH 1vz KK""++''44 	
 !**,h777 ' NBs   FF&)F!F!c                      t        j                  t        d      5  t        j                  t
        d       d d d        y # 1 sw Y   y xY w)NzReceived invalid argumentmatchbar)foo)r   r   
ValueErrorr>   rK  r0  rP  rN   rL   test_error_invalid_kwdsr  G  s,    	z)D	E
U# 
F	E	Es   AA
c                      t        j                  g d      } g d}t        j                  t        d      5  t        j
                  | |       d d d        y # 1 sw Y   y xY w)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  rK  )rK   r   s     rL   +test_draw_networkx_arrowsize_incorrect_sizer  L  sH    


34AI	M
 	Y'
 
 
s   AA!r      )rb   r   r  c                 Z   t        j                  g d      }dddd}t        j                  |||       }t        | t              rt        j                  |       n| } t        ||       D ]@  \  }}t        |t        j                  j                        sJ |j                         |k(  r@J  y )Nr   r  r   r   r   rO   r   r   )r*   r   )r>   r  rV  rf   r   rh  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	  +yIUI.X#s{{::;;;%%'8333 /rN   ra   r`   r`   r  z<|-|>c                 F   t        j                  g d      }dddd}t        j                  |||       }t        | t              rt        j                  |       n| } t        j                  j                  j                  t        j                  j                  j                  t        j                  j                  j                  d}t        ||       D ]J  \  }}t        |t        j                  j                        sJ t        |j                         ||         rJJ  y )Nr  r   r   r  r   )r*   ra   r  )r>   r  rV  rf   r   rh  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	$ 
 {{%%22kk$$--''55M UJ/X#s{{::;;;#,,.h0GHHH 0rN   c                  d    t        j                  t        t        j	                  ddg             y )Nr  r  r  )r>   r  r0  r[   arrayrP  rN   rL   test_np_edgelistr  w  s     Wrxx0@'ABrN   c                      t        j                  d      } ddd}t        j                  t         j                  d      5  t        j
                  | |       d d d        y # 1 sw Y   y xY w)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  |  sL    
aA
 C	r''/@	A
q#& 
B	A	As    A  A)c                     | \  }}t        j                  d      }|D ci c]  }|||f	 }}g d}t        j                  ||d||      }t        |j	                               dkD  sJ yc c}w )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    s~     GC
qA
 a1q!f9aC
 &F""	E u  "#a''' !s   A*c                    |\  }}t        j                  dg      }ddd}t        j                  ||||       d   }|j                         j	                         ddddf   }t        j                  |||| dd	      d   }|j                         j	                         ddddf   }	|	d   |d   kD  sJ |	d
   |d
   k  sJ y)  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  rV  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 **1cbZPQRSM"..088:3Q36BN ))	 	L !,,.6681a@M nQ////nQ////rN   c           	         |\  }}t        j                  ddg      }dddd}t        j                  ||||       }|D cg c](  }|j                         j	                         ddd	d
f   * }}t        j                  |||| ddgddg      }	|	D 
cg c](  }
|
j                         j	                         ddd	d
f   * }}
t        ||      D ]  \  }}
|
d
   |d
   kD  sJ |
d   |d   k  rJ  yc c}w c c}
w )r  r   r   r   r  )rZ   r   r   r  NrZ   r   b   f   r  rO   )r>   r  rV  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 **1cbZPMANOAammo--/!Q7NO ))	s)s)L AMM1Q]]_,,.ssAv6MMNM21 tad{{tad{{ 3 P Ns    -C0-C5c                    | \  }}t        j                         }|j                  d       |j                  dd       t        j                  |ddi      d   }|j                         }|j                  dkD  r|j                  dkD  sJ y)zDEnsure that selfloop extent is non-zero when there is only one node.r   r   N)r>   r  r  r  rV  r  r   r  )r'  r(  r   rK   patchr   s         rL   &test_nonzero_selfloop_with_single_noder    sw     GC


AJJqMJJq!""1q&k215ED::>dkkAo--orN   c                 V   | \  }}t        j                  dt         j                        }|j                  dd       |j                  D ci c]  }|||f	 }}t        j
                  ||dg      d   }|j                         }|j                  dkD  r|j                  dkD  sJ yc c}w )zfEnsure 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   rV  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1q!f9gC
&""1cVH=a@ED::>dkkAo--o 's   B&c                      g d} g d}d}t         j                  j                  j                  |||       }t	        |dddf   |k(        sJ y)zfTest apply_alpha when there is a mismatch between the number of
    supplied colors and elements.
    r   re  r)   Nr   )r>   drawingnx_pylabapply_alpharU   )r  	colorlistr   rgba_colorss       rL   test_apply_alphar    sM     HIE**%%11)UHMK{1b5!U*+++rN   c                  Z   ddl } ddl} t        j                  d      }t        j                  dt        j                        }|D ci c]  }|||f	 }}||fD ]f  }t        j
                  ||d      }t        |      t        |j                        k(  sJ t        |d   t        j                  j                        rfJ  ||fD ]@  }t        j
                  ||d      }t        |t        j                  j                        r@J  t        j
                  ||      }t        |t        j                  j                        sJ t        j
                  ||      }t        |      t        j                        k(  sJ t        |d   t        j                  j                        sJ yc c}w )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  rV  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1q!f9bC
! "X&&q#d;5zS\)))%(CKK$?$?@@@  "X&&q#e<%!?!?@@@ 
 ""2s+EeS__;;<<<""2s+Eu:QWW%%%eAh ; ;<<<% "s   F(drawing_funcc                     dd l }t        j                  d      }|\  }} | ||       t        d |j                  D              sJ |j
                  rJ y )Nr   rS   r  c              3   d   K   | ](  }t        |t        j                  j                         * y wr   rf   rE   rg   rh   r   r   s     rL   r   z?test_draw_networkx_arrows_default_undirected.<locals>.<genexpr>P  s"     Unz!S__;;<n   .0)r  r>   r?   anyrg   r   r  r'  r   rK   r(  r   s         rL   ,test_draw_networkx_arrows_default_undirectedr  I  sL    !
aAGCrUbnnUUUUzz>zrN   c                     dd l }t        j                  dt        j                        }|\  }} | ||       t	        d |j
                  D              rJ |j                  sJ y )Nr   rS   r   r  c              3   d   K   | ](  }t        |t        j                  j                         * y wr   r  r  s     rL   r   z=test_draw_networkx_arrows_default_directed.<locals>.<genexpr>[  s%      ?M!
1coo445~r  )r  r>   r?   r  r  rg   r   r  s         rL   *test_draw_networkx_arrows_default_directedr   T  s]    !
abjj1AGCr ?A~~    :::rN   c                     t        j                  d      }|j                  dd       | \  }}t        j                  |ddg|       |j                  rJ y )NrS   r   r   r   )rS  r   )r>   r?   r  rK  r   )r'  rK   r(  r   s       rL   test_edgelist_kwarg_not_ignoredr"  a  sJ    
aAJJq!GCGGA(R0zz>zrN   )rK   expected_n_edgesrZ   c           	      @   t        g d      D ])  \  }\  }}| j                  ||t        |dz  d             + | D ci c]  }|||f	 }}dddgg dfD ]B  }t        j                  | ||       t        j                  | ||      }t        |      |k(  rBJ  yc c}w )	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>   rV  ri   )	rK   r#  r  rl   rm   rW   r*   
conn_styler  s	            rL   2test_draw_networkx_edges_multiedge_connectionstyler-  j  s     ?@	6Aq	

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

 	q#zB''3
K6{.... !s   Bc           	         t        g d      D ])  \  }\  }}| j                  ||t        |dz  d             + | D ci c]  }|||f	 }}t        j                  | |g d      }dddgg dfD ]Z  }t        j
                  | ||      }	t        |	      |k(  sJ |	j                         D ]  }
|
j                  j                  d	k(  rJ  \ y
c c}w )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>   rV  rL  ri   values	__class____name__)rK   r#  r  rl   rm   rW   r*   r  r,  
text_itemstis              rL   8test_draw_networkx_edge_labels_multiedge_connectionstyler5  ~  s     ?@	6Aq	

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

 11!S*U
:"2222##%B<<((,==== & !s   Cc                  ,   t        j                         } | j                  ddd       | j                  ddd       t        j                  | d      }| D ci c]  }|||f	 }}t        j                  | ||ddg	      }t        |      d
k(  sJ y c c}w )Nr   rO   rb   r&  r   r   r'  r(  rJ  r*  rZ   )r>   r   r  get_edge_attributesrL  ri   )rK   rJ  rW   r*   r3  s        rL   'test_draw_networkx_edge_label_multiedger9    s    
AJJq!BJJJq!BJ((H5K
 a1q!f9aC
 --	'8	J z?a !s   Bc                      t        j                  d      } | j                  D ci c]  }|||f	 }}t        j                  | |i       i k(  sJ yc c}w )zORegression test for draw_networkx_edge_labels with empty dict. See
    gh-5372.rS   rI  N)r>   r?   rT   rL  )rK   rW   r*   s      rL   (test_draw_networkx_edge_label_empty_dictr;    sT     	aAgg
&g1q!f9gC
&''3B?2EEE 's   Ac                 :   | \  }}g d}g d}t        j                  |      }|j                  D ci c]  }|||f	 }}t        j                  |||||       t	        |j
                        dk(  sJ t        j                  |dd       t        j                  ddg      z   }t        |j
                  |dd |      D ]W  \  }	}
}|	j                         j                  |      sJ t        j                  j                  |	j                         |
      rWJ  yc c}w )	ztWhen an edgelist is supplied along with a sequence of colors, check that
    the self-loops have the correct colors.)r  r   rb  r   rz  r   )pinkcyanrr   r9   r{   green)r   rS  r#   rS   Nr   r  )r>   r  rT   rV  ri   r   r[   r  r   r   contains_pointrE   rF   rG   r[  )r'  r(  r   rS  edge_colorsrK   rW   r*   	sl_pointsr\  clrslps               rL   3test_draw_networkx_edges_undirected_selfloop_colorsrF    s    GC?HCK
Agg
&g1q!f9gC
&1cb8T rzz?a
 "#'"((As8*<<I RZZRS)99ES#||~,,S111zz$$S%6%6%8#>>> F 's   Dfap_only_kwargr   r*  r(  r  r  c                    t        j                  d      }|D ci c]  }|||f	 }}|\  }}t        | j                               d   }t	        j
                  t        d| d      5  t        j                  ||fd|i|  ddd       t        j                         5  t        j                  d       t        j                  d	t        
       t        j                  ||f|dd|  ddd       yc c}w # 1 sw Y   vxY w# 1 sw Y   yxY w)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UserWarningrV  warningscatch_warningssimplefilterfilterwarningsDeprecationWarning)rG  r'  rK   rW   r*   r(  r   
kwarg_names           rL   1test_user_warnings_for_unused_edge_drawing_kwargsrT    s     	aA
 a1q!f9aC
 GC n))+,Q/J	Xj\1TU
 	q#?"??
 
	 	 	"g&3EF
q#L"TL^L	 
#	" !

 
 
#	"s   C2(C7AD7D Ddraw_fnc                     |\  }}t        j                  d      }t        j                  d      5 } | ||       d d d        t	              dk(  sJ y # 1 sw Y   xY w)Nr   T)recordr  r   )r>   cycle_graphrN  rO  ri   )rU  r'  r(  r   rK   ws         rL   *test_no_warning_on_default_draw_arrowstylerZ    sS     GC
qA		 	 	-b 
.q6Q;; 
.	-s   AAr  methodc                    t        j                  d      }|j                  D ci c]  }|||f	 }}|\  }} | ||||       |j                  |j                  fD ]   }t        |j                               |k7  r J  y c c}w )NrS   )r*   r   r  )r>   r?   rT   r  r  r  r  )	r[  r  r'  rK   rW   r*   r3  r   r  s	            rL   test_hide_ticksr]    s     	aAgg
&g1q!f9gC
&EAr
1#"4288$D'')*j888 % 's   A?)angleangle3arczarc3,rad=0.0zbar,fraction=0.1c                    | \  }}d}t        j                  |g      }|D ci c]  }||df	 }}|j                  d      d   }t        j                  |||di|      }	|d   d   |d   d   z   dz  }
|d   d   |d   d   z   dz  }|dv r<|	|   j                  s,J |	|   j
                  t        j                  |
|f      k(         y
|d	k(  r|	|   j
                  |k  sJ y
y
c c}w )z
    Check that FancyArrowPatches with all `connectionstyle`s are supported
    in edge label rendering. See gh-7735 and gh-8106.
    r   r   ,rH  r7  rO   rZ   >   r`  r1   r  N)r>   r  splitrL  r  yr   approx)r'  r   r(  r   rH  rK   rW   r*   namer   hmidvmids               rL   $test_edge_label_all_connectionstylesri    s    GCD


D6A
 a1q!f9aC
 ;;sAD))	3T6NEF F1IAq	!Q&DF1IAq	!Q&Dd|~~Lvd|~~d|1LLL~	d|~~$$$ 
 !s   C"	label_posgg?c                    | \  }}d}t        j                  |g      }|D ci c]  }|||f	 }}t        j                  |||di|d      }||   j                  s,J ||   j                  t        j                  ||f      k(         yc c}w )zH
    Check that label positions can be extrapolated outside [0, 1].
    r   rH  r^  )rJ  rj  r*  N)r>   r  rL  r  rd  r   re  )	r'  rj  r(  r   rH  rK   rW   r*   lbls	            rL   test_edge_label_label_posrm  !  s    
 GCD


D6A
 a1q!f9aC
 

&
&	3T6NiQXC t9;;LD	v}}i5K'LLL; !s   B)u__doc__rh  osrN  r   networkxr>   r/  rE   r[   userA   rcParamsbarbell_graphr0  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_circularr.  draw_planardraw_randomdraw_spectralrD  r:  draw_forceatlas2r5  r;  r?  rF  rM  rQ  rY  r]  rc  rl  rn  rt  rv  rx  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  rK  r  r  r   r"  r   r  r-  r5  r9  r;  rF  rT  rZ  rL  rV  r  r  r]  ri  rm  rP  rN   rL   <module>r}     sf   2  	   f,'V! f-.#]  "

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	 bjjlA!,r/@!.DE/	/  bjjlA!,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   