
    \Mh                     &   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
                    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                            d0dded         fd1d2f          d3             Zej                            d4d5          d6             Zd7 Zej        j        d8             Zd9 Zej        j        d:             Zej        j        d;             Zej        j        d<             Zej                            d=d>          ej                            d?ej        ej        f          d@                         Zej                            d?ej        ej        f          dA             Zej                            d?ej        ej        f          dB             ZdC Z ej                            d?ej        ej        f          dD             Z!ej                            d?ej        ej        f          dE             Z"ej                            d4ded!         ed!         gfdFdFdFgfdGdFdHgff          ej                            d?ej        ej        f          dI                         Z#ej                            d4ded)         ed)         gfdJdJdJgfdKd*dJgff          ej                            d?ej        ej        f          dL                         Z$dM Z%dN Z&ej        j        dO             Z'dP Z(dQ Z)dR Z*dS Z+ej                            ddT          dU             Z,ej                            dVddg          dW             Z-dX Z.dY Z/ej0        dZ             Z1d[ Z2d\ Z3d] Z4d^ Z5d_ Z6ej                            d=d`dadbgdcfdddegdffdgdhgdifdjdkgdlff	          ej                            dmddngf          do                         Z7ej                            d=d`dadbgdcfdddegdffdgdhgdifdjdkgdlff	          ej                            dmddngf          dp                         Z8dq Z9dr Z:ds Z;dt Z<du Z=ej                            d?ej        ej        f          dv             Z>ej                            dwdxdygdyff          dz             Z?ej                            dwdxdygdyff          d{             Z@ej                            dmg d|ddnd}gf          d~             ZAd ZBd ZCej                            dKd          d             ZDej                            ddgdgdgg ddd*gg df          d             ZEd ZFd ZGej        j        d             ZHd ZId ZJd ZKd ZLd ZMd ZNd ZOd ZPd ZQd ZRej                            ddg df          d             ZSej                            ddg df          d             ZTd ZUd ZVej                            ddT          d             ZWej                            ddT          d             ZXd ZYd ZZd Z[d Z\ej                            dej]        ej^        f          d             Z_ej                            dej]        ej^        f          d             Z`d Zaej                            d ej                    dg ejb                    d	g ejc                    d	gf          d             Zdej                            d ej                    dg ejb                    d	g ejc                    d	gf          d             Zed Zfd Zgd Zhej                            ddd*iddiddiddHiddHif          d             Ziej                            dej]        ejj        f          d             Zkej                            dddg          ej                            dej^        ejl        ejm        ejn        ejo        g          d                         Zpd ZqdS )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                                                              d          }t          j        |fd|i| |i t          j        	                    |
                                d                                         d         |          sJ t                                           d S )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/test/jupyter/venv/lib/python3.11/site-packages/networkx/drawing/tests/test_pylab.py$test_display_arg_handling_node_colorrM   C   s     	aA1i111ZZ\\%%c**FJq===J#<===:  !4!4!6!6q!9!H!H!J!J1!MxXXXXXIIKKKKK    )r6   r7   ))N)   rO   rO   rO   )r)   )r)   r)   r)   r)   )n_alpha)r   r)   gUUUUUU?      ?c                    t          j        d          }t          j        |d |                                D             d           t                                                              d          }t          j        |||            t          |	                                d         
                                d d df         |k              sJ t                                           d S )Nr   c                      i | ]}|d |d z   z  S )rO    .0ns     rL   
<dictcomp>z8test_display_arg_handling_node_alpha.<locals>.<dictcomp>^   s"    AAA!q!q1u+AAArN   rP   r<   )r=   r   r      )r>   r?   r@   nodesrA   rB   rC   rD   allrH   get_fcrJ   )r6   r7   rK   r=   s       rL   $test_display_arg_handling_node_alphar]   T   s     	aA1AAqwwyyAAA9MMMZZ\\%%c**FJqK8888a ''))!!!Q$/8;     IIKKKKKrN   c                      t          j        d          } t          j        | d |                                 D             d           t                                                              d          }t          j        | |d           t          	                    |
                                d                                         j        ddgddgddgd	d	ggk              sJ t                                           d S )
Nr   c                     i | ]}|||fS rT   rT   rU   s     rL   rX   z.test_display_node_position.<locals>.<dictcomp>i       <<<Qq1a&<<<rN   r*   r<   r=   r   r   rO      rY   )r>   r?   r@   rZ   rA   rB   rC   rD   npr[   rH   get_offsetsdatarJ   )rK   r=   s     rL   test_display_node_positionrf   g   s    
aA1<<!''))<<<eDDDZZ\\%%c**FJq%000066a ,,..3AAAQRTUPV7WW     IIKKKKKrN   c            	         t          j                    } t                                          \  }}t          j        | ddddddd           t          j        | d |                                 D                        t          j        | dd	d
dd           |                    d           t                                           t          	                    d           |S )a  
    Originally, I wanted to use the exact samge image as test_house_with_colors.
    But I can't seem to find the correct value for the margins to get the figures
    to line up perfectly. To the human eye, these visualizations are basically the
    same.
    r   r   rO   r   r   rO   rO   rO   r)          @r   rO   rb   rY   r   r*   c                 :    i | ]}||d k    rdnd|d k    rdnddS )r       tab:blue
tab:orange)r   r   rT   rU   s     rL   rX   z2test_display_house_with_colors.<locals>.<dictcomp>   sR     	
 	
 	

 	  !QD'(Avv< 	
 	
 	
rN   r)   r   Nk)r   r.   r"   r   r   g(\?off)
r>   house_graphrA   subplotsr@   rZ   rD   marginstight_layoutaxisrK   figaxs      rL   test_display_house_with_colorsr~   r   s     	AllnnGC	v&V:FF   		
 	

 WWYY	
 	
 	
	 	 	 J	    JJtHHUOOOJrN   c                  0   t          j                    } t          j        | d |                                 D             d           t                                                              d          }t          j        | |d           d |                                D             d         }t          |
                                          t          d |                                 D                       k    sJ t                                           d S )	Nc                 2    i | ]\  }}||f||z   d z  rdndS )rb   -|>r-   rT   rV   uvs      rL   rX   z0test_display_line_collection.<locals>.<dictcomp>   s3    HHHdaQFa!eq[1EEcHHHrN   
arrowstyler<   
   )r=   r0   c                 P    g | ]#}t          |t          j        j                  !|$S rT   
isinstancerE   collectionsLineCollectionrV   ls     rL   
<listcomp>z0test_display_line_collection.<locals>.<listcomp>   s=     
 
 
a788
	
 
 
rN   r   c                 (    g | ]\  }}||z   d z  dS )rb   rO   rT   r   s      rL   r   z0test_display_line_collection.<locals>.<listcomp>   s)    &N&N&NTQ1q5A+&Nq&N&N&NrN   )r>   karate_club_graphset_edge_attributesedgesrA   rB   rC   rD   rH   len	get_pathssumrJ   )rK   r=   lcs      rL   test_display_line_collectionr      s    
A	HHaggiiHHH,   ZZ\\%%c**FJq3333
 
$$&&
 
 
 	
	B
 r||~~#&N&NQWWYY&N&N&N"O"OOOOOIIKKKKKrN   c                     t                                           \  } }t          j                    }t          j        |d          }t          j        ||d           t          g d          t          j        |fd|                                D                        t          j        |dd           g dt          j	        |fd	|
                                D                        t          j        |dd
           g dt          j	        |fd|
                                D                        t          j        |dd
           t                                            t                               d           | S )z'See 'Labels and Colors' gallery example   \<1s seedr*   )$a$$b$$c$$d$$\alpha$$\beta$$\gamma$$\delta$c           
      R    i | ]#}|d d|dk     rdndt                    dddd$S )	i   g?r   tab:redrr      
whitesmoke)labelr   r   )r   r   r   r   next)rV   rW   labelss     rL   rX   z2test_display_labels_and_colors.<locals>.<dictcomp>   s]     	
 	
 	
  &'!ee#'<<lSS	 	
 	
 	
rN   ztab:grey)r   r#   )rj   rO   rb   rb   rY   r   rY   c                 2    i | ]\  }}||fd dd||fv dS )   r)   r   )widthr   r   visiblerT   rV   r   r   edgelists      rL   rX   z2test_display_labels_and_colors.<locals>.<dictcomp>   sR     	
 	
 	
 1 F"q6X-	 	
 	
 	
rN   F)r   r	   )r      r   r   r      )r   r   c                 .    i | ]\  }}||fd ||fv dS )rr   )r   r   rT   r   s      rL   rX   z2test_display_labels_and_colors.<locals>.<dictcomp>   sL     	
 	
 	

 1	 F#q6X- 	
 	
 	
rN   ru   )rA   rw   r>   cubical_graphspring_layoutr@   iterrZ   rD   r   r   ry   rz   )r|   r}   rK   r*   r   r   s       @@rL   test_display_labels_and_colorsr      s    llnnGC
A

1:
.
.
.C1c5)))		
 		
 		
 F 		
 	
 	
 	
 WWYY	
 	
 	
   Jq5Z8888 0//H		
 	
 	
 	
 			
 	
 	
   Jq5u5555///H		
 	
 	
 	

 			
 	
 	
	 	 	 Jq5u5555HHUOOOJrN   c            	        	 dd l } t                                          \  }}t          j                    }d}t          |                     |d                    dz  }t          j                    }t          |          D ]1\  }\  }}|                    ||t          |dz  d                     2t          j
        |t          j        |d	          d
           |                     d |                     dgdz            D                       	t          j        |	fd|                    d          D             d           t          j        |d |                    dd          D             d           t          j        |ddt"          j        d         d           t          j        ||d
           t                                           t                              d           |S )Nr   ABCrb   )repeatr   rY   )wr   r   r*   c                     g | ]}d | S )	arc3,rad=rT   )rV   rs     rL   r   z(test_display_complex.<locals>.<listcomp>   s    GGGOOOGGGrN   g333333?c                 0    i | ]}|t                    S rT   r   )rV   ecsis     rL   rX   z(test_display_complex.<locals>.<dictcomp>   s!    HHHq$s))HHHrN   Tkeys	curvaturec                 >    i | ]^ }}t          |          |d didS )r   r   )r   r   tuple)rV   r   r   s      rL   rX   z(test_display_complex.<locals>.<dictcomp>   s@     	
 	
 	
A !HHGQ<88	
 	
 	
rN   r   )r   re   r   r   infernoFrZ   ra   ru   )	itertoolsrA   rw   r>   MultiDiGraphlistproduct	enumerateadd_edger%   r@   r   cycle
accumulater   r   apply_matplotlib_colorsrE   	colormapsrD   ry   rz   )
itr|   r}   rK   rZ   prodir   r   r   s
            @rL   test_display_complexr      s   llnnGC
AE

5
++,,q0D
At__ , ,	6Aq	

1a5Q??
++++1b.qzBBBEJJJ
((GGR]]D6A:-F-FGGG
H
HC1HHHHQWW$W5G5GHHH+VVV		
 	
d55	
 	
 	
 	   q#wi0HPUVVVVJqe,,,,HHUOOOJrN   c                     t                                           \  } }t          j                    }|                    g 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           t          j        |ddd          }t          t          ||dd                              t          j	        |t          j
        |d          d           t          j        |fd|                    d          D                        t          j        ||           t                                            t                               d           | S )N)ABCDEFrK   Hr   r   r   r   r   r   r      r   r   r   Irb   r   	      r   rK   rO   r   r   %   r   r*   c           	          i | ]?\  }}}||f||fv s t          t          ||f                    v rd nd|d         ddd@S )r9   blackr   F)r   r+   )r   r   )r   reversed)rV   r   r   d
path_edgess       rL   rX   z.test_display_shortest_path.<locals>.<dictcomp>%  s     
	
 
	
 
	
 1a F 1v++uXq!f5E5E/F/F*/T/T E #$X;%@@ 
	
 
	
 
	
rN   T)re   r=   ru   )rA   rw   r>   Graphadd_nodes_fromr   shortest_pathr   zipr@   r   r   r   rD   ry   rz   )r|   r}   rK   pathr   s       @rL   test_display_shortest_pathr   	  sv   llnnGC


A===>>>JJsCJ"""JJsCJ"""JJsCJ"""JJsCJ###JJsCJ"""JJsCJ"""JJsCJ"""JJsCJ"""JJsCJ###JJsCJ###JJsCJ"""JJsCJ"""JJsCJ"""JJsCJ""" AsC999D c$QRR))**J1b.qr:::EBBB	
	
 
	
 
	
 
	
 777--
	
 
	
 
	
   JqHHUOOOJrN   )r#   r7   )Nr   r   r9   r   r           yellowr   rO   r   rO   r:   )r   blue)#0000FFr  
graph_typec                 
   t          j        d|          }t          j        |dd           t                                                              d          }t          j        || |           |                                rd |                                D             }n)d |j	        D             d	         
                                }t          fd
|D                       sJ t                                           d S )NrY   create_usingr  r   r<   )r#   r=   c                 t    g | ]5}t          |t          j        j                  !|                                6S rT   r   rE   patchesFancyArrowPatchr\   rV   fs     rL   r   z2test_display_edge_single_color.<locals>.<listcomp>I  E     
 
 
!S[899
HHJJ
 
 
rN   c                 P    g | ]#}t          |t          j        j                  !|$S rT   r   r   s     rL   r   z2test_display_edge_single_color.<locals>.<listcomp>O  =     
 
 
!S_;<<

 
 
rN   r   c              3   X   K   | ]$}t           j                            |          V  %d S N)rE   rF   rG   )rV   cr7   s     rL   	<genexpr>z1test_display_edge_single_color.<locals>.<genexpr>T  s5      BBasz$$Q11BBBBBBrN   )r>   r?   r   rA   rB   rC   rD   is_directedrH   r   
get_colorsr[   rJ   )r#   r7   r  rK   r=   rF   s    `    rL   test_display_edge_single_colorr  7  s    	aj111A1i111ZZ\\%%c**FJqZ7777}} 
 
((**
 
 

 
'
 
 
 	 Z\\	 	
 BBBB6BBBBBBBBIIKKKKKrN   c                    t          j        d|           }t          j        |dddd           t                                                              d          }t          j        ||           d	d
g}|                                rd |                                D             }n)d |j	        D             d         
                                }t          j                            ||          sJ t                                           d S )NrY   r  r8   r   r   rO   rj   r   r   r<   r   r9   r  c                 t    g | ]5}t          |t          j        j                  !|                                6S rT   r  r  s     rL   r   z5test_display_edge_multiple_colors.<locals>.<listcomp>`  r  rN   c                 P    g | ]#}t          |t          j        j                  !|$S rT   r   r   s     rL   r   z5test_display_edge_multiple_colors.<locals>.<listcomp>f  s<     
 
 
As7U)V)V

 
 
rN   r   )r>   r?   r   rA   rB   rC   rD   r  rH   r   r  rE   rF   rG   rJ   )r  rK   r}   r7   rF   s        rL   !test_display_edge_multiple_colorsr  X  s   
aj111A1y)DDgNNN		!	!#	&	&BJqvH}} 	
 
__&&
 
 

 
~
 
 

Z\\ 	 :  22222IIKKKKKrN   c                     t          j        d|           }t          j        |d |                                D             d           t                                                              d          }t          j        ||           |                                rd |	                                D             }n5d |j
        D             d	         }d
 |                                D             }ddg}d}t          ||          D ][\  }}|\  }	}
|\  }}t          t          |	|z
            ||fk               r%t          t          |
|z
            ||fk               sJ \t                                           d S )NrY   r  c                     i | ]}|||fS rT   rT   rU   s     rL   rX   z.test_display_edge_position.<locals>.<dictcomp>p  r`   rN   r*   r<   r   c                     g | ]g}t          |t          j        j                  !|                                j        d ddf         |                                j        dddf         fhS )r   N)r   rE   r	  r
  get_pathverticesr  s     rL   r   z.test_display_edge_position.<locals>.<listcomp>t  sr     
 
 
!S[899
ZZ\\"1aaa4(!**,,*?AAA*FG
 
 
rN   c                 P    g | ]#}t          |t          j        j                  !|$S rT   r   r   s     rL   r   z.test_display_edge_position.<locals>.<listcomp>z  s<     
 
 
As7U)V)V

 
 
rN   r   c                 R    g | ]$}|j         d ddf         |j         dddf         f%S )r   N)r"  rV   ps     rL   r   z.test_display_edge_position.<locals>.<listcomp>}  sH     
 
 
67QZ111qz"aaa%01
 
 
rN   )rh   rk   )rk   rb   rb   g?)r>   r?   r@   rZ   rA   rB   rC   rD   r  rH   r   r   r   r[   absrJ   )r  rK   r}   
end_pointsline_collectionr7   	thresholdar   	act_startact_end	exp_startexp_ends                rL   test_display_edge_positionr2  m  s   
aj111A1<<!''))<<<eDDD		!	!#	&	&BJq}} 

 
__&&
 
 



 
~
 
 


 
;J;T;T;V;V
 
 

 !"23H IJ)) 
 
1	7	73y9,--I0FFGG 	
C'!""i%;;M
 M
 	
 	
 	
 	
 IIKKKKKrN   c                  &   t          j                    } d } ||           }t                                                              d          }t          j        | ||           d t          |                                 |                                d         	                                j
                  D             }|                                 D ]#}t          ||         ||         k              sJ $t                                           d S )Nc                 .    t          j        | d          S )Ni/ r   )r>   r   rK   s    rL   fixed_layoutz4test_display_position_function.<locals>.fixed_layout  s    ////rN   r<   )r   r=   c                 4    i | ]\  }}|t          |          S rT   r   )rV   rW   r'  s      rL   rX   z2test_display_position_function.<locals>.<dictcomp>  s1       1588  rN   r   )r>   r   rA   rB   rC   rD   r   rZ   rH   rd   re   r[   rJ   )rK   r6  r*   r}   act_posrW   s         rL   test_display_position_functionr9    s    
A0 0 0 ,q//C		!	!#	&	&BJq<3333  #AGGIIr/@/@/C/O/O/Q/Q/V W W  G WWYY ) )3q6WQZ'((((((IIKKKKKrN   c                    t          j        d|           }t          j        |dddd           t          j        d         }t          j        |dd|d	
           t                                                              d          }t          j	        ||           t          j
                            |          }|                    dd           |                    d          |                    d          g}|                                rd |                                D             }n)d |j        D             d                                         }t          j                            |d         |j        d         d                   sJ t          j                            |d         |j        d         d                   sJ t          j                            ||          sJ t                                           d S )NrY   r  r   rO   r  r   plasmar   Fr   r<   r   cmapc                 t    g | ]5}t          |t          j        j                  !|                                6S rT   )r   rE   r	  r
  get_facecolorr  s     rL   r   z/test_display_edge_colormaps.<locals>.<listcomp>  G     
 
 
!S[899
OO
 
 
rN   c                 P    g | ]#}t          |t          j        j                  !|$S rT   r   r   s     rL   r   z/test_display_edge_colormaps.<locals>.<listcomp>  r  rN   rj   r   )r>   r?   r   rE   r   r   rA   rB   rC   rD   cmScalarMappableset_climto_rgbar  rH   r   r  rF   rG   r   rJ   r  rK   r=  r=   mapperr7   rF   s          rL   test_display_edge_colormapsrH    s   
aj111A1q!44h???="Dq(GTGGGGZZ\\%%c**FJq    V"""--F
OOAqq!!6>>!#4#45H}} 
 
((**
 
 

 
'
 
 
 	 Z\\	 	
 :  !agdmG.DEEEEE:  !agdmG.DEEEEE:  622222IIKKKKKrN   c                 B   t          j        d|           }t          j        |ddddd           t          j        d         }t          j        |dd	|           t                                                              d
          }t          j	        ||           t          j
                            |          }|                    dd           |                    d          |                    d          |                    d          g}d |j        D             d                                         }t          j                            |d         |j        d         d	                   sJ t          j                            |d         |j        d         d	                   sJ t          j                            |d         |j        d         d	                   sJ t          j                            ||          sJ t                                           d S )NrY   r  r   r)   rO   r   rO   rb   r   r;  r   r<   r   r<  c                 P    g | ]#}t          |t          j        j                  !|$S rT   r   rE   r   PathCollectionrV   ss     rL   r   z/test_display_node_colormaps.<locals>.<listcomp>  s<       As7U)V)V	  rN   rb   )r>   r?   r@   rE   r   r   rA   rB   rC   rD   rB  rC  rD  rE  r   rI   rF   rG   rZ   rJ   rF  s          rL   test_display_node_colormapsrP    s   
aj111A1!22H===="Dq(GT:::ZZ\\%%c**FJq    V"""--F
OOAqq!!6>>##6#6q8I8IJH %  				  :  !agaj.ABBBBB:  !agaj.ABBBBB:  !agaj.ABBBBB:  622222IIKKKKKrN   r   r   r   c                    t          j        d|          }t          j        |dddd           t                                                              d          }t          j        || |           |                                rd	 |                                D             }n6t          d
 |j
        D             d                                                   }||k    sJ d S )NrY   r  r   r   r  r   r<   )r"   r=   c                 t    g | ]5}t          |t          j        j                  !|                                6S rT   )r   rE   r	  r
  get_linewidthr  s     rL   r   z+test_display_edge_width.<locals>.<listcomp>  r@  rN   c                 P    g | ]#}t          |t          j        j                  !|$S rT   r   r   s     rL   r   z+test_display_edge_width.<locals>.<listcomp>  s=       a!?@@  rN   r   )r>   r?   r   rA   rB   rC   rD   r  rH   r   r   get_linewidths)r6   r7   r  rK   r=   widthss         rL   test_display_edge_widthrW    s    	aj111A1q"55w???ZZ\\%%c**FJq[8888}} 

 
((**
 
 
  +   	  !!
 
 XrN   :stylec                    t          j        d|          }t          j        |dddd           t                                                              d          }t          j        || |           |                                rd	 |                                D             }n:ddd
fdd |j	        D             d         
                                D             }||k    sJ t                                           d S )NrY   r  r-   rX  r  rY  r<   )r,   r=   c                 t    g | ]5}t          |t          j        j                  !|                                6S rT   )r   rE   r	  r
  get_linestyler  s     rL   r   z+test_display_edge_style.<locals>.<listcomp>  r@  rN   ))r   N)r   )rO   gffffff?c                 j    g | ]/}|d          |d         t          |d                   ndf         0S )r   rO   Nr   )rV   rO  
linestyless     rL   r   z+test_display_edge_style.<locals>.<listcomp>  sN     
 
 
 !QqT-=eAaDkkk4HI
 
 
rN   c                 P    g | ]#}t          |t          j        j                  !|$S rT   r   r   s     rL   r   z+test_display_edge_style.<locals>.<listcomp>	  s=       a!?@@  rN   r   )r>   r?   r   rA   rB   rC   rD   r  rH   r   get_linestylesrJ   )r6   r7   r  rK   r=   stylesr^  s         @rL   test_display_edge_stylerb    s2    	aj111A1sC88'BBBZZ\\%%c**FJq[8888}} 

 
((**
 
 
 "%c::

 
 
 
 +   	  !!
 
 
 XIIKKKKKrN   c                     t          j        d          } t                                                              d          }t          j        | |ddi           d |                                D             }t          |                                 |          D ]F\  }}|	                                t          |          k    sJ |                                dk    sJ Gt                                           d S )Nr   r<   r      )r=   r   c                 P    g | ]#}t          |t          j        j                  !|$S rT   r   rE   textTextrV   ts     rL   r   z,test_display_node_labels.<locals>.<listcomp>  +    OOOA*Q2N2NOaOOOrN   g      4@)r>   r?   rA   rB   rC   rD   rH   r   rZ   get_textstrget_sizerJ   )rK   r=   r   rW   r   s        rL   test_display_node_labelsro    s    
aAZZ\\%%c**FJqVRL9999OO,,..OOOFAGGIIv&& $ $1zz||s1vv%%%%zz||t#####IIKKKKKrN   c                     t          j        d          } t                                                              d          }t          j        | d |                                 D                        t          j        | |ddid            d |                                D             }t          |           t          |                                 |          D ]U\  }}|                                t          |d         |d	         z             k    sJ |                                dk    sJ Vt                                           d S )
Nr   r<   c                 (    i | ]\  }}||fd ||z   iS )r   rT   r   s      rL   rX   z,test_display_edge_labels.<locals>.<dictcomp>#  s+    NNNDAq1vQ'7NNNrN   r   r   )r=   r$   r   c                 P    g | ]#}t          |t          j        j                  !|$S rT   rf  ri  s     rL   r   z,test_display_edge_labels.<locals>.<listcomp>%  rk  rN   r   rO   )r>   r?   rA   rB   rC   r   r   rD   rH   printr   rl  rm  	get_colorrJ   )rK   r=   r   r   r   s        rL   test_display_edge_labelsru    s   
aAZZ\\%%c**F 1NNAGGIINNNOOOJqWcNtLLLLOO,,..OOOF	&MMMAGGIIv&& $ $1zz||s1Q4!A$;//////{{}}#####IIKKKKKrN   c                      t          j                    } t                                          \  }}t          j        | |           t                                           t                              d           |S )Nr   ru   )r>   empty_graphrA   rw   rD   ry   rz   r{   s      rL   test_display_empty_graphrx  -  s[    
AllnnGCJqHHUOOOJrN   c                     t          j                    } |                     g d           |                     g d           t          j        | d |                     d          D             d           t                                                              d          }t          j	        | |           d	 |
                                D             }|g d
k    sJ t                                           d S )N)r   r   r   r   ))r   r   0)r   r   1)r   r   -1)r   r   r{  )r   r   r|  )r   r   rz  c           	      F    i | ]}|d dt          |d                   z   S )r   皙?rb   intrV   r   s     rL   rX   z<test_display_multigraph_non_integer_keys.<locals>.<dictcomp>E  s1    IIIA,3QqT?,,IIIrN   Tr   r   r<   r   c                 ~    g | ]:}t          |t          j        j                  !|                                j        ;S rT   )r   rE   r	  r
  get_connectionstyleradr  s     rL   r   z<test_display_multigraph_non_integer_keys.<locals>.<listcomp>I  sL       a455	#  rN   )r   r~  皙ɿr~  r  r   )r>   
MultiGraphr   add_edges_fromr   r   rA   rB   rC   rD   rH   rJ   )rK   r=   radss      rL   (test_display_multigraph_non_integer_keysr  7  s   
A)))***	
 	
 	
	 	 	 	IIagg4g6H6HIII;   ZZ\\%%c**FJq     $$&&  D
 3333333IIKKKKKrN   c                      t          j                    } t          j        t           j                  5  t          j        | d           t                                           d d d            d S # 1 swxY w Y   d S )Nbad_arg)r  )r>   r   pytestraisesNetworkXErrorrD   rA   rJ   r5  s    rL   test_display_raises_for_bad_argr  R  s    
A	r'	(	(  

1i((((		                 s   0A//A36A3c                     t          j        dt           j                  } t          j        | d |                                 D             d           t
                                          }t          j        | |           g dd |                                D             k    sJ t
          	                                 d S )Nr   r  c                 0    i | ]\  }}||f||z   d z   d z  S )rb   rT   r   s      rL   rX   z+test_display_arrow_size.<locals>.<dictcomp>\  s/    ;;;AQFQUQY1$;;;rN   	arrowsizer   )r      1   c                 t    g | ]5}t          |t          j        j                  !|                                6S rT   )r   rE   r	  r
  get_mutation_scaler  s     rL   r   z+test_display_arrow_size.<locals>.<listcomp>`  sI       a455	  rN   )
r>   r?   DiGraphr   r   rA   axesrD   rH   rJ   )rK   r}   s     rL   test_display_arrow_sizer  Y  s    
abj111A	;;;;;[   
BJq;;  ""      
 IIKKKKKrN   c                  ^   t          j        d          } t          j        | dddddd           t          j        | d |                                 D             d	           t	          j        t           j                  5  t          j        |            d
d
d
           d
S # 1 swxY w Y   d
S )zP
    This test ensures that a error is raised for incomplete position data.
    r   rh   rk   r(  )r   r   )r   rO   rb   r   r*   c                     i | ]	}||d k     
S )r   rT   rU   s     rL   rX   z9test_display_mismatched_edge_position.<locals>.<dictcomp>p  s    ;;;Aq!a%;;;rN   r   N)r>   r?   r@   rZ   r  r  r  rD   r5  s    rL   %test_display_mismatched_edge_positionr  h  s     	aA1&V6JJERRR1;;;;;YGGG 
r'	(	(  

1                 s    B""B&)B&)r   rO  c                 H   t                                                               d          }t          j        dg          }t          j        |dddd           t          j        |||            d |                                D             d         }|                                	                                d	d	d
df         }t                                                               d          }t          j        ||dd|            d |                                D             d         }|                                	                                d	d	d
df         }|d         |d         k    sJ |d         |d         k     sJ t           
                                 d	S )a	  
    Test that there is a wider gap between the node and the start of an
    incident edge when min_source_margin is specified.

    This test checks that the use 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<   rj   rh   rk   r*   )r=   r   c                 P    g | ]#}t          |t          j        j                  !|$S rT   r   rE   r	  r
  r  s     rL   r   z-test_display_edge_margins.<locals>.<listcomp>  s<       
1ck6Q(R(R	  rN   r   Nrb   d   )r=   r3   r4   r   c                 P    g | ]#}t          |t          j        j                  !|$S rT   r  r  s     rL   r   z-test_display_edge_margins.<locals>.<listcomp>  s<       
1ck6Q(R(R	  rN   rO   )rA   rB   rC   r>   r  r@   rD   rH   get_extentscornersrJ   )r   r}   rK   default_arrowdefault_extentpadded_arrowpadded_extents          rL   test_display_edge_marginsr  y  s   * 
	!	!#	&	&B

F8A1&V44e<<<Jq
3333 ??$$  	M #..0088::33Q36BN		!	!#	&	&BJ	    ??$$  	L !,,..66881a@M nQ/////nQ/////IIKKKKKrN   ticksc                    t          j        d          }t          j        |d |                                D             d           t                                          }t          j        ||            |j        |j        fD ])}t          |
                                          | k    sJ *t                                           d S )NrY   c                     i | ]}|||fS rT   rT   rU   s     rL   rX   z+test_display_hide_ticks.<locals>.<dictcomp>  r`   rN   r*   )
hide_ticks)r>   r?   r@   rZ   rA   r  rD   xaxisyaxisboolget_ticklabelsrJ   )r  rK   r}   rz   s       rL   test_display_hide_ticksr    s    
aA1<<!''))<<<eDDD	BJqU####28$ 4 4D''))**e33333IIKKKKKrN   c                  f   t                                           } t          j                    }|                    d           |                    dd           t          j        |ddid           t          j        ||            d |                                 D             d         }|	                                }t          |j                   t          |j                   |j        dk    r|j        dk    sJ t                               |            t                                            d S )Nr   rh   r*   r   c                 P    g | ]#}t          |t          j        j                  !|$S rT   r  r  s     rL   r   z*test_display_self_loop.<locals>.<listcomp>  s<       
1ck6Q(R(R	  rN   )rA   r  r>   r  add_noder   r@   rD   rH   r  rs  r   heightdelaxesrJ   )r}   rK   arrowr   s       rL   test_display_self_loopr    s   	B

AJJqMMMJJq!1q&k5111Jq ??$$  	E D	$*	$+:>>dkAooooKKOOOIIKKKKKrN   c                      t          j                    } t          j        |            t          j        | d          i k    sJ dS )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>   r   rD   get_node_attributesr5  s    rL   test_display_remove_pos_attrr    sD     	AJqMMM!!%HIIROOOOOOrN   c               #      K   t                                           \  } }| |fV  t                               |           t                                            d S r  )rA   rw   r  rJ   )r|   r}   s     rL   rw   rw     sD      llnnGC
r'MMMKKOOOIIKKKKKrN   c                     	 t           j        t           j        t           j        t           j        t           j        t           j        t           j        g} ddddg}t          j	        | |          D ]-\  }} |t          fi | t                              d           .n# t          $ r Y nw xY w	 t          j        d           d S # t           $ r Y d S w xY w# 	 t          j        d           w # t           $ r Y w w xY wxY w)Nr   r  rY   )r
   r   r   test.ps)r>   draw_circulardraw_kamada_kawaidraw_planardraw_randomdraw_spectraldraw_spring
draw_shellr   r   barbellrA   savefigModuleNotFoundErrorosunlinkOSError)	functionsoptionsfunctionoptions       rL   	test_drawr    s6    NNNM
	 #*aHHI ) 1)W E E 	# 	#HfHW'''''KK	""""	#    	Ii      	 	 	DD		Ii     	 	 	D	s`   BB C 
B)&C (B))C -C 
CCC;C+*C;+
C85C;7C88C;c                     	 t          t          d                    t          t          dd                    t          t          dd                    g} t          j        t          |            t
                              d           	 t          j        d           d S # t          $ r Y d S w xY w# 	 t          j        d           w # t          $ r Y w w xY wxY w)Nr   r   r   nlistr  )
r   ranger>   r  r  rA   r  r  r  r  r  s    rL   test_draw_shell_nlistr    s    eAhheArll!3!3T%B--5H5HI
gU++++I	Ii      	 	 	DD		Ii     	 	 	D	sB   B
B4 B# #
B10B14C6C
C
CCCCc                  .   	 t          j        dd          } t          j        |            t                              d           	 t          j        d           d S # t          $ r Y d S w xY w# 	 t          j        d           w # t          $ r Y w w xY wxY w)Nrb   r   r  )r>   complete_bipartite_graphdraw_bipartiterA   r  r  r  r  r5  s    rL   test_draw_bipartiter    s    '1--
!I	Ii      	 	 	DD		Ii     	 	 	D	sB   AA- A 
A*)A*-B/BB
BBBBc                      t          t                                                    } t          j        t          | dt
          j        j        d           d S )Nr   T)r#   r   	edge_cmapwith_labels)r  r  number_of_edgesr>   r  rA   rB  Blues)rF   s    rL   test_edge_colormapr    sN    7**,,--FNF!sv|QU     rN   c                  \    t          j        t                                                     d S r  )r>   r  r  to_directedrT   rN   rL   test_arrowsr    s$    N7&&(()))))rN   r   r   r   r9   r   r   r   r   r   r:   )#0000ffr  r  r  r   rj   c                     t          j        d          }t          j        |t          j        |          ||           }t          j                            |                                |          sJ dS )z`Tests ways of specifying all edges have a single color for edges
    drawn with a LineCollectionrY   r*   r   r#   N)r>   r?   draw_networkx_edgesrandom_layoutrE   rF   rG   rt  )r#   r7   r   rK   drawn_edgess        rL   !test_single_edge_color_undirectedr    sp    & 	aA(	r""X*  K :  !6!6!8!8(CCCCCCCrN   c                    t          j        dt           j                  }t          j        |t          j        |          ||           }|D ]6}t
          j                            |                                |          sJ 7dS )zaTests ways of specifying all edges have a single color for edges drawn
    with FancyArrowPatchesrY   r  r  N)	r>   r?   r  r  r  rE   rF   rG   get_edgecolor)r#   r7   r   rK   r  faps         rL   test_single_edge_color_directedr  5  s    & 	abj111A(	r""X*  K  D Dz$$S%6%6%8%8(CCCCCCD DrN   c                  f   t          j        dt           j                  } d t          t	          |                     D             }dD ]}t          j        | ||          }|D ]6}t          j                            |	                                |          sJ 7t          j        | |ddg|          }|D ]6}t          j                            |	                                |          sJ 7t          j        | |g d	d
          }|D ]6}t          j                            |	                                d          sJ 7t          j        | |g dd          }|D ]6}t          j                            |	                                d          sJ 7t          j        | |g d	d          }t          j                            |d         	                                |d         	                                          sJ |D ]6}t          j                            |	                                d          rJ 7t          j        | |g dd
          }t          j                            |d         	                                |d         	                                          sJ t          j                            |d         	                                |d         	                                          sJ |D ]6}t          j                            |	                                d          rJ 7dS )zIf edge_color is a sequence with the same length as edgelist, then each
    value in edge_color is mapped onto each edge via colormap.r   r  c                     i | ]}|||fS rT   rT   rU   s     rL   rX   z8test_edge_color_tuple_interpretation.<locals>.<dictcomp>T      
,
,
,1q!f
,
,
,rN   )r  r   r   rO   rO   r#   rj   r   )r   r#   rj   r   r   r  r  )rj   r   r   )rY   r   r  r   rO   rb   rY   N)
r>   r?   r  r  r   r  rE   rF   rG   r  )rK   r*   r'   r  r  s        rL   $test_edge_color_tuple_interpretationr  P  s    	abj111A
,
,eCFFmm
,
,
,C ( 
B 
B,QCCC 	B 	BC:(():):)<)<bAAAAAA,sff-"
 
 
  	B 	BC:(():):)<)<bAAAAAA	B (	3111l  K  B Bz$$S%6%6%8%8&AAAAAA (	3999i  K  B Bz$$S%6%6%8%8&AAAAAA (	3111i  K :  A$$&&A(D(D(F(F      F F:(():):)<)<fEEEEEE (	3999l  K :  A$$&&A(D(D(F(F     :  A$$&&A(D(D(F(F      F F:(():):)<)<fEEEEEEF FrN   c                  T   t                                           } t          j        t                     }d}t          j        | ||          }t          |t          j        |                    D ]9\  }}t          j	        
                    |                                |          sJ :dS )zZTest that the edge colors are cycled when there are fewer specified
    colors than edges.r   gbr  N)r  r  r>   r  r  r   r   r   rE   rF   rG   r  rK   r*   
edgecolorsr  r  r7   s         rL   .test_fewer_edge_colors_than_num_edges_directedr    s     	A

7
#
#C J(CJGGGK[)/**E*EFF D DXz$$S%6%6%8%8(CCCCCCD DrN   c                  N   t          j        dt           j                  } t          j        t                    }d}t          j        | ||          }t          ||dd                   D ]9\  }}t          j        	                    |
                                |          sJ :dS )z\Test that extra edge colors are ignored when there are more specified
    colors than edges.r   r  )r   r  r  r  r  Nr%  )r>   r?   r  r  r  r  r   rE   rF   rG   r  r  s         rL   -test_more_edge_colors_than_num_edges_directedr    s     	abj111A

7
#
#C%J(CJGGGK[*SbS/:: D DXz$$S%6%6%8%8(CCCCCCD DrN   c                  ~   t          j        t          t          j        t                    ddgdd          } |                                                                 }t          |                                           dk    sJ t          j	        
                    |d d         d          sJ |d         dk    sJ d S Nrj   r   purpler~  )r*   r   r#   r   rb   r%  )r>   r  r  r  rt  squeezer   r   rE   rF   rG   )edge_collectionr'   s     rL   3test_edge_color_string_with_global_alpha_undirectedr    s    ,W%%&!  O 
	"	"	$	$	,	,	.	.B((**++q0000:  CRC(33333b6S======rN   c                  d   t          j        t                                          t          j        t                    ddgdd          } t          |           dk    sJ | D ]N}|                                }t          j        	                    |d d         d          sJ |d         dk    sJ Od S r  )
r>   r  r  r  r  r   r  rE   rF   rG   )r  r  r'   s      rL   1test_edge_color_string_with_global_alpha_directedr    s    (W%%&!  K {q        z$$RWh77777"v}}}}} rN   c                    t          j        d|           }d t          t          |                    D             }t          j        ||          }t          |t                    r|d         }|                                dk    sJ dS )z^Test the default linewidth for edges drawn either via LineCollection or
    FancyArrowPatches.rb   r  c                     i | ]}|||fS rT   rT   rU   s     rL   rX   z1test_edge_width_default_value.<locals>.<dictcomp>  r  rN   r   rO   N)r>   r?   r  r   r  r   r   rS  )r  rK   r*   r  s       rL   test_edge_width_default_valuer    s     	aj111A
,
,eCFFmm
,
,
,C(C00K+t$$ %!!n$$&&!++++++rN   )	edgewidthr7   rY   rY   rY   c                 *   t          j        d          }d t          t          |                    D             }t          j        |||           }t          |                                          dk    sJ |                                |k    sJ d S )Nr   c                     i | ]}|||fS rT   rT   rU   s     rL   rX   z;test_edge_width_single_value_undirected.<locals>.<dictcomp>  r  rN   r   rY   )r>   r?   r  r   r  r   rS  )r	  r7   rK   r*   r  s        rL   'test_edge_width_single_value_undirectedr    s     	aA
,
,eCFFmm
,
,
,C(CyAAAK{$$&&''1,,,,$$&&(222222rN   c                 (   t          j        dt           j                  }d t          t	          |                    D             }t          j        |||           }t	          |          dk    sJ |D ]}|                                |k    sJ d S )Nr   r  c                     i | ]}|||fS rT   rT   rU   s     rL   rX   z9test_edge_width_single_value_directed.<locals>.<dictcomp>  r  rN   r  rY   )r>   r?   r  r  r   r  rS  )r	  r7   rK   r*   r  r  s         rL   %test_edge_width_single_value_directedr    s     	abj111A
,
,eCFFmm
,
,
,C(CyAAAK{q     / /  ""h...../ /rN   r  r   c                    t                                           }t          j        |          }d}t          j        ||| |          }t          |t          j        |                    D ]\  }}|                                |k    sJ  d S )N)r)   rm   g      (@)r   r   )	r  r  r>   r  r  r   r   r   rS  )r   rK   r*   rV  r  r  expected_widths          rL   test_edge_width_sequencer    s     	A

1

CF(C(&QQQK";	0G0GHH 5 5^  ""n444445 5rN   c                  J   t          j        dt           j                  } t          j        |           }t          j        | |ddg          }d |D             }t          j        | |ddgdd	          }d
 |D             }t
          j                            ||          sJ dS )zyTest that edge_vmin and edge_vmax properly set the dynamic range of the
    color map when num edges == len(edge_colors).rY   r  r   r   r  c                 6    g | ]}|                                 S rT   r  r  s     rL   r   z7test_edge_color_with_edge_vmin_vmax.<locals>.<listcomp>  s"    :::1??$$:::rN   r~  g?)r#   	edge_vmin	edge_vmaxc                 6    g | ]}|                                 S rT   r  r  s     rL   r   z7test_edge_color_with_edge_vmin_vmax.<locals>.<listcomp>  s"    <<<1Q__&&<<<rN   N)r>   r?   r  r  r  rE   rF   rG   )rK   r*   r  orig_colorsscaled_colorss        rL   #test_edge_color_with_edge_vmin_vmaxr    s     	abj111A

1

C(CQHEEEK::k:::K(	3C:  K =<<<<M:  m<<<<<<<rN   c                  $   t          j        dt           j                  } d t          t	          |                     D             }t          j        | |          }t	          |          dk    sJ |D ]}|                                dk    sJ dS )z>Test default linestyle for edges drawn with FancyArrowPatches.r   r  c                     i | ]}|||fS rT   rT   rU   s     rL   rX   z9test_directed_edges_linestyle_default.<locals>.<dictcomp>  r  rN   rY   solidNr>   r?   r  r  r   r  r\  )rK   r*   r  r  s       rL   %test_directed_edges_linestyle_defaultr"    s    
abj111A
,
,eCFFmm
,
,
,C (C00K{q     . .  ""g-----. .rN   )dashed--rO   rk   c                 (   t          j        dt           j                  }d t          t	          |                    D             }t          j        |||           }t	          |          dk    sJ |D ]}|                                | k    sJ dS )zTests support for specifying linestyles with a single value to be applied to
    all edges in ``draw_networkx_edges`` for FancyArrowPatch outputs
    (e.g. directed edges).r   r  c                     i | ]}|||fS rT   rT   rU   s     rL   rX   z>test_directed_edges_linestyle_single_value.<locals>.<dictcomp>"  r  rN   rY  rY   Nr!  )rY  rK   r*   r  r  s        rL   *test_directed_edges_linestyle_single_valuer)    s     	abj111A
,
,eCFFmm
,
,
,C(Cu===K{q     , ,  ""e+++++, ,rN   	style_seqr#  r$  r%  )r$  r-   rX  )r$  r-   rX  z-.c                 n   t          j        dt           j                  }d t          t	          |                    D             }t          j        |||           }t	          |          dk    sJ t          |t          j        |                     D ]\  }}|	                                |k    sJ  dS )zTests support for specifying linestyles with sequences in
    ``draw_networkx_edges`` for FancyArrowPatch outputs (e.g. directed edges).r   r  c                     i | ]}|||fS rT   rT   rU   s     rL   rX   z:test_directed_edges_linestyle_sequence.<locals>.<dictcomp>:  r  rN   r(  rY   N)
r>   r?   r  r  r   r  r   r   r   r\  )r*  rK   r*   r  r  rY  s         rL   &test_directed_edges_linestyle_sequencer-  *  s     	abj111A
,
,eCFFmm
,
,
,C(CyAAAK{q    +yy'A'ABB , ,
U  ""e+++++, ,rN   c                  H   ddl m} m} ddlm} t          j        t
          j                  }t          j        t
          j                  }t          j	        |          }t          j	        |          }t          j
        ||          }t          ||          sJ t          j        ||d          }t          |t                    sJ t          |          dk    rt          |d         |          sJ t          j        ||d          }t          ||           sJ t          j        ||d           }t          ||           sJ t          j        ||d           }t          |t                    sJ t          |          dk    rt          |d         |          sJ d S d S )Nr   )r   rM  )r
  r  TarrowsF)matplotlib.collectionsr   rM  matplotlib.patchesr
  r>   frucht_graphr   r  r   draw_networkx_nodesr   r  r   r   )	r   rM  r
  rK   dGr*   dposrZ   r   s	            rL   test_return_typesr7  B  s   EEEEEEEE222222
RX...A	bj	1	1	1B

1

CBD"1c**Ee^,,,,,"2tD999EeT"""""
5zzA~~%(O44444"2tE:::Ee^,,,,,"1d4888Ee^,,,,,"2s4888EeT"""""
5zzA~~%(O44444 ~44rN   c            
         t          j                    } t          j        |           }t          j        | |g dddd           t          j        | |g dddg d           t          j        | |d	d
           t          j        | |g ddd
d           t          j        | |g ddd
d           t          j        | |g ddd
ddd           i }d|d<   d|d<   d|d<   d|d<   d|d<   d|d<   d|d<   d |d!<   d" t          d          D             }t          j        | ||d#$           t          j        | ||d#|%           t          j        | |d d&'           t          j        | |d(d)i*           d S )+Nr   rO   rb   rY   r   i        ?)nodelistr
   r   r   )r   r   r   r   r  )rQ   r)   r:  r   r   r)   )r   r   )rj   r   r   )rY   r   r   )r   r   r   r#   )r   r   r   )r   r   T)r   r0  min_source_marginmin_target_marginr   r#   r   r   r   rO   r   rb   r   rY   r   r   r   r   r   r   r   r   c                 *    i | ]}||d z  dk    rdndS )rb   r   rt   r   rT   rU   s     rL   rX   z*test_labels_and_colors.<locals>.<dictcomp>  s*    >>>aA

>>>rN      )	font_size)r@  
font_colorF)edge_labelsr+   r   z4-5rB  )r>   r   r   r4  r  r  draw_networkx_labelsdraw_networkx_edge_labels)rK   r*   r   rF   s       rL   test_labels_and_colorsrF  \  s   
A

1

C	3#D    	$$$    1cC8888	111    	111    	111	 	 	 	 FF1IF1IF1IF1IF1IF1IF1IF1I>>U1XX>>>FAsFb9999AsFbVLLLL CT%HHHH Cfe_EEEEEErN   c                     t          j                    } t                                          \  }}dddddd}t          j        | |dg dd	
           t          j        | |ddgd
           t          j        | |dd           |                    d           t                                           t                              d           |S )Nrh   ri   rj   rk   rl   rn   rp   r9  rr   )r   r;  r
   rq   r   rs   r)   r   )r   r   g)\(?ru   )	r>   rv   rA   rw   r4  r  rx   ry   rz   )rK   r|   r}   r*   s       rL   test_house_with_colorsrH    s    
AllnnGCFv*
E
EC 	    	3$!    1cA6666JJtHHUOOOJrN   c                     | \  }}t          j        t          |           t          j        t          t          j        t                    |           d S )Nr}   )r>   drawr  rE  circular_layout)rw   r|   r}   s      rL   	test_axesrM    sI    GCGG "*<W*E*E"MMMMMMrN   c                  T    t          j                    } t          j        |            d S r  )r>   r   rK  r5  s    rL   test_empty_graphrO    s    


AGAJJJJJrN   c                  V   dd l } t          j        ddg          }t          j        ddg          }t          j        |          }t          t          j        ||g           t          j        j	                  sJ t          t          j        ||g           t          j        j	                  sJ t          j
        ||g d          g k    sJ t          j
        ||g d          g k    sJ t          j
        ||g d          g k    sJ t          j
        ||g d          g k    sJ d S )Nr   r   r   )r;  T)r   r0  F)r1  r>   r   r  rL  r   r4  rE   r   rM  r  )r   rK   DGr*   s       rL   #test_draw_empty_nodes_return_valuesrR    sT   !!!!
&&!""A	VV$	%	%B

Q

C
q#333S_5S     
r3444co6T     !!S2dCCCrIIII!!S2eDDDJJJJ!"cBuEEEKKKK!"cBtDDDJJJJJJrN   c                      t          j        dt           j                  } t          j        | dg           t          j        | dgg d           d S )NrY   r  )r   rO   r   r   )r   rd  r   )r   r   )r>   r?   r   draw_networkxr5  s    rL   test_multigraph_edgelist_tuplesrV    sT    
abo666AQ)----Q)DDDDDDrN   c                  H   t          j        t                    } t                                          }|                    d           t          j        t          | ddg           t          t          j                  fdt                    D             }t                    }|                    d           t          j        t          | ||           |
                    d           |                    d	           t          j        t          | |           d S )
N   皙?r~  )r   c                     g | ]}|z  S rT   rT   )rV   x	num_nodess     rL   r   z#test_alpha_iter.<locals>.<listcomp>  s    555qQ]555rN      )r
   r   rO      )r>   r  r  rA   rB   rC   r4  r   rZ   r  append)r*   r|   r   rF   r\  s       @rL   test_alpha_iterr`    s    

7
#
#C
**,,COOC7CSz::::GM""I5555E)$4$4555E9FOOC7CF%HHHH	LLOOOOOC7Cu555555rN   c                     | \  }}t          j        d          }t          j        |g d|           d |                                D             }t	          |          dk    sJ d S )Nr   )r   hrO  ^)r   r}   c                 P    g | ]#}t          |t          j        j                  !|$S rT   rL  rN  s     rL   r   z-test_multiple_node_shapes.<locals>.<listcomp>  s<       
1co6T(U(U	  rN   )r>   r?   rK  rH   r   )rw   r|   r}   rK   scatterss        rL   test_multiple_node_shapesrf    s    GC
aAGA...26666 ??$$  H x==ArN   c                 2   t          j                    }| \  }}t          j        ||d |                                D             d |                                D                        t	          |                                d |                                D                       D ]o\  }}|dz  rdnd}t          j                            |	                                |          sJ t          |dz  d	z             |                                k    sJ pd S )
Nc                 "    i | ]}||d z  rdndS )rb   rt   r   rT   rU   s     rL   rX   z7test_individualized_font_attributes.<locals>.<dictcomp>  s'    @@@Aa!e,ss@@@rN   c                 :    i | ]}|t          |d z  dz             S )""""""@r   r  rU   s     rL   rX   z7test_individualized_font_attributes.<locals>.<dictcomp>  s+    @@@1c!w-!+,,@@@rN   )r}   rA  r@  c                     g | ]H}t          |t          j        j                  r't	          |                                          d k    F|IS r   )r   rE   rg  rh  r   rl  ri  s     rL   r   z7test_individualized_font_attributes.<locals>.<listcomp>  sU     	
 	
 	
!SX]++	
 14AJJLL0A0AA0E0E 0E0E0ErN   rb   r   r9   rj  r   )r>   r   rK  rZ   r   rH   rE   rF   rG   rt  r  rn  )rw   rK   r|   r}   rW   rj  r7   s          rL   #test_individualized_font_attributesrm    s+   
AGCG	@@aggii@@@@@aggii@@@	    				
 	
__&&	
 	
 	
  6 61  !e.77z$$Q[[]]H=====1=1$%%555556 6rN   c                    t          j                    }| \  }}d |                                D             }d |                                D             }t          j        ||d||           d |                                D             }t          |                                |          D ]\  }}|                                d|d         dz  |d	         dz  z   z  dz   k    sJ t          |          dz  rt          j	        j
        j        nt          j	        j
        j        }	t          |                                |	          sJ d S )
Nc                 4    g | ]\  }}||z   d z  dk    rdndS )rb   r   r   -[rT   r   s      rL   r   z7test_individualized_edge_attributes.<locals>.<listcomp>  s2    MMM41aQUaK1,,55$MMMrN   c                 6    g | ]\  }}d |dz  |dz  z   z  d z   S )r   rb   rT   r   s      rL   r   z7test_individualized_edge_attributes.<locals>.<listcomp>  s2    BBB1"AA&+BBBrN   T)r}   r0  r   r  c                 P    g | ]#}t          |t          j        j                  !|$S rT   r  r  s     rL   r   z7test_individualized_edge_attributes.<locals>.<listcomp>  s<       
1ck6Q(R(R	  rN   r   r   rb   rO   )r>   r   r   rK  rH   r   r  r   rE   r	  
ArrowStyleBracketBCurveFilledBr   get_arrowstyle)
rw   rK   r|   r}   arrowstyles
arrowsizesr0  r   r-  r7   s
             rL   #test_individualized_edge_attributesry    sW   
AGCMM17799MMMKBB		BBBJGA"TkZPPPP ??$$  F AGGIIv&& 8 81##%%qtax!A$(/B)Cb)HHHHH 1vvz5CK"++'4 	
 !**,,h7777778 8rN   c                      t          j        t          d          5  t          j        t
          d           d d d            d S # 1 swxY w Y   d S )NzReceived invalid argumentmatchbar)foo)r  r  
ValueErrorr>   rK  r  rT   rN   rL   test_error_invalid_kwdsr  !  s    	z)D	E	E	E $ $
U####$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $s   AA	A	c                      t          j        g d          } g d}t          j        t          d          5  t          j        | |           d d d            d S # 1 swxY w Y   d S )N)rj   r   rb   r   rO   rY   )rO   rb   rY   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  &  s    

33344A		I	M
 
 
 ( ( 	Y''''( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (s   AA!Ar     )r   rd  r  c                 d   t          j        g d          }dddd}t          j        |||           }t          | t                    rt          j        |           n| } t          ||           D ]@\  }}t          |t          j	        j
                  sJ |                                |k    sJ Ad S )Nrj   r  r   rh   rj   ri   rJ  )r*   r  )r>   r  r  r   r  r   r   r   rE   r	  r
  r  )r  rK   r*   r   r  r7   s         rL   test_draw_edges_arrowsizer  /  s    

+++,,AF
+
+C"1#CCCE/9)S/I/IX	 +++yIUI.. 4 4X#s{:;;;;;%%''8333334 4rN   r   r   r   rp  z<|-|>c                    t          j        g d          }dddd}t          j        |||           }t          | t                    rt          j        |           n| } t          j        j	        j
        t          j        j	        j        t          j        j	        j        d}t          ||           D ]P\  }}t          |t          j        j                  sJ t          |                                ||                   sJ Qd S )Nr  rh   rj   ri   rJ  )r*   r   r  )r>   r  r  r   rm  r   r   rE   r	  rs  ru  rt  CurveFilledABr   r
  rv  )r   rK   r*   r   arrow_objectsr  r7   s          rL   test_draw_edges_arrowstyler  <  s   

+++,,AF
+
+C"1#*EEEE )3:s(C(CS	$$$ 
 {%2k$-'5 M UJ// I IX#s{:;;;;;#,,..h0GHHHHHHI IrN   c                  p    t          j        t          t                              ddg                     d S )Nr  r   rT  )r>   rU  r  rc   arrayrT   rN   rL   test_np_edgelistr  Q  s/    Wrxx0@'A'ABBBBBBrN   c                      t          j        d          } ddd}t          j        t           j        d          5  t          j        | |           d d d            d S # 1 swxY w Y   d S )NrY   rh   rk   rj   zhas no positionr{  )r>   r?   r  r  r  r4  rK   r*   s     rL   *test_draw_nodes_missing_node_from_positionr  V  s    
aA
 
 C	r'/@	A	A	A ' '
q#&&&' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 's   AA!$A!c                    |\  }}t          j        dg          }ddd}t          j        ||||           d         }|                                                                ddddf         }t          j        |||| dd	          d         }|                                                                ddddf         }	|	d         |d         k    sJ |	d
         |d
         k     sJ dS )  Test that there is a wider gap between the node and the start of an
    incident edge when min_source_margin is specified.

    This test checks that the use of min_{source/target}_margin kwargs result
    in shorter (more padding) between the edges and source and target nodes.
    As a crude visual example, let 's' and 't' represent source and target
    nodes, respectively:

       Default:
       s-----------------------------t

       With margins:
       s   -----------------------   t

    rj   rh   ri   r}   r   r   Nrb   r  r}   r   r<  r=  rO   )r>   r  r  r  r  )
r   rw   r|   r}   rK   r*   default_patchr  padded_patchr  s
             rL   )test_draw_edges_min_source_target_marginsr  _  s   & GC

F8A
 
 C *1cbZPPPQRSM"..0088::33Q36BN )	   	L !,,..66881a@M nQ/////nQ///////rN   c           	      `   |\  }}t          j        ddg          }dddd}t          j        ||||           }d |D             }t          j        |||| d	d
gd	d
g          }d |D             }	t          ||	          D ]-\  }
}|d         |
d         k    sJ |d         |
d         k     sJ .dS )r  rj   r   rh   ri   )rb   r   rJ  r  c                 p    g | ]3}|                                                                 d d ddf         4S Nrb   r   r  r  )rV   r   s     rL   r   zHtest_draw_edges_min_source_target_margins_individual.<locals>.<listcomp>  s;    OOOAammoo--//!Q7OOOrN   b   f   r  c                 p    g | ]3}|                                                                 d d ddf         4S r  r  r&  s     rL   r   zHtest_draw_edges_min_source_target_margins_individual.<locals>.<listcomp>  s;    MMM1Q]]__,,..sssAv6MMMrN   r   rO   N)r>   r  r  r   )r   rw   r|   r}   rK   r*   r  r  r  r  r   r'  s               rL   4test_draw_edges_min_source_target_margins_individualr    s    & GC

FF#$$AF
+
+C *1cbZPPPMOOOOON )	s)s)  L NMMMMMNM22  1 tad{{{{tad{{{{{ rN   c                    | \  }}t          j                    }|                    d           |                    dd           t          j        |ddi          d         }|                                }|j        dk    r|j        dk    sJ dS )zDEnsure that selfloop extent is non-zero when there is only one node.r   rh   N)r>   r  r  r   r  r  r   r  )rw   r|   r}   rK   patchr   s         rL   &test_nonzero_selfloop_with_single_noder    s     GC

AJJqMMMJJq!"1q&k2215ED:>>dkAoooooorN   c                 2   | \  }}t          j        dt           j                  }|                    dd           d |j        D             }t          j        ||dg          d         }|                                }|j        dk    r|j        dk    sJ dS )	zfEnsure that selfloop extent is non-zero when only a single edge is
    specified in the edgelist.
    rb   r  rO   c                     i | ]}|||fS rT   rT   rU   s     rL   rX   zFtest_nonzero_selfloop_with_single_edge_in_edgelist.<locals>.<dictcomp>      
&
&
&1q!f
&
&
&rN   rk   rT  r   N)	r>   r?   r  r   rZ   r  r  r   r  )rw   r|   r}   rK   r*   r  r   s          rL   2test_nonzero_selfloop_with_single_edge_in_edgelistr    s    
 GC
abj111AJJq!
&
&ag
&
&
&C"1cVH===a@ED:>>dkAoooooorN   c                      g d} g d}d}t           j        j                            |||           }t	          |dddf         |k              sJ dS )zfTest apply_alpha when there is a mismatch between the number of
    supplied colors and elements.
    rJ  r  r)   Nr%  )r>   drawingnx_pylabapply_alphar[   )r;  	colorlistr   rgba_colorss       rL   test_apply_alphar    sc     yyHIE*%11)UHMMK{111b5!U*+++++++rN   c                     ddl } ddl} t          j        d          }t          j        dt          j                  }d |D             }||fD ]g}t          j        ||d          }t          |          t          |j                  k    sJ t          |d         t          j
        j                  sJ h||fD ]:}t          j        ||d          }t          |t          j        j                  sJ ;t          j        ||          }t          |t          j        j                  sJ t          j        ||          }t          |          t          |j                  k    sJ t          |d         t          j
        j                  sJ dS )	a/  
    The `arrows` keyword argument is used as a 3-way switch to select which
    type of object to use for drawing edges:
      - ``arrows=None`` -> default (FancyArrowPatches for directed, else LineCollection)
      - ``arrows=True`` -> FancyArrowPatches
      - ``arrows=False`` -> LineCollection
    r   NrY   r  c                     i | ]}|||fS rT   rT   rU   s     rL   rX   z>test_draw_edges_toggling_with_arrows_kwarg.<locals>.<dictcomp>  s    
!
!
!1q!f
!
!
!rN   Tr/  F)r1  r2  r>   r?   r  r  r   r   r   rE   r	  r
  r   r   )r   UGrQ  r*   rK   r   s         rL   *test_draw_edges_toggling_with_arrows_kwargr    s    "!!!	q		B	qrz	2	2	2B
!
!b
!
!
!C "X A A&q#d;;;5zzS\\))))%(CK$?@@@@@@ "X A A&q#e<<<%!?@@@@@@ "2s++EeS_;<<<<<"2s++Eu::QW%%%%eAh ;<<<<<<<rN   drawing_funcc                     dd l }t          j        d          }|\  }} | ||           t          d |j        D                       sJ |j        rJ d S )Nr   rY   rJ  c              3   T   K   | ]#}t          |t          j        j                  V  $d S r  r   rV   r  s     rL   r  z?test_draw_networkx_arrows_default_undirected.<locals>.<genexpr>  s1      UUz!S_;<<UUUUUUrN   )r1  r>   r?   anyr   r	  r  rw   r   rK   r|   r}   s         rL   ,test_draw_networkx_arrows_default_undirectedr    st    !!!!
aAGCLrUUbnUUUUUUUUzrN   c                     dd l }t          j        dt          j                  }|\  }} | ||           t	          d |j        D                       rJ |j        sJ d S )Nr   rY   r  rJ  c              3   T   K   | ]#}t          |t          j        j                  V  $d S r  r   r  s     rL   r  z=test_draw_networkx_arrows_default_directed.<locals>.<genexpr>  sB        :;
1co455     rN   )r1  r>   r?   r  r  r   r	  r  s         rL   *test_draw_networkx_arrows_default_directedr    s    !!!!
abj111AGCLr  ?A~        :rN   c                     t          j        d          }|                    dd           | \  }}t          j        |ddg|           |j        rJ d S )NrY   r   rj   r   )r   r}   )r>   r?   r   rK  r	  )rw   rK   r|   r}   s       rL   test_edgelist_kwarg_not_ignoredr     s^    
aAJJq!GCGA(R0000zrN   )rK   expected_n_edgesrb   c           	      B   t          g d          D ]1\  }\  }}|                     ||t          |dz  d                     2d | D             }dddgg dfD ]E}t          j        | ||           t          j        | ||          }t          |          |k    sJ Fd	S )
zGDraws edges correctly for 3 types of graphs and checks for valid lengthrj   rj   rj   r  rY   rb   r   c                     i | ]}|||fS rT   rT   rU   s     rL   rX   zFtest_draw_networkx_edges_multiedge_connectionstyle.<locals>.<dictcomp>1      
 
 
 1q!f
 
 
 rN   arc3,rad=0.1)r  r  arc3,rad=0.2connectionstyleN)r   r   r%   r>   r  r   )rK   r  r   r   r   r*   
conn_styler0  s           rL   2test_draw_networkx_edges_multiedge_connectionstyler  )  s     ???@@ 1 1	6Aq	

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

 	q#zBBBB'3
KKK6{{....../ /rN   c           	         t          g d          D ]1\  }\  }}|                     ||t          |dz  d                     2d | D             }t          j        | |g d          }ddd	gg dfD ]W}t          j        | ||          }t          |          |k    sJ |                                D ]}	|	j        j	        d
k    sJ XdS )zXDraws labels correctly for 3 types of graphs and checks for valid length and class namesr  rY   rb   r   c                     i | ]}|||fS rT   rT   rU   s     rL   rX   zLtest_draw_networkx_edge_labels_multiedge_connectionstyle.<locals>.<dictcomp>E  r  rN   )r  r  r  r  r  r  CurvedArrowTextN)
r   r   r%   r>   r  rE  r   values	__class____name__)
rK   r  r   r   r   r*   r0  r  
text_itemstis
             rL   8test_draw_networkx_edge_labels_multiedge_connectionstyler  =  s%    ???@@ 1 1	6Aq	

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

 1!S*UUU
:"22222##%% 	> 	>B<(,======	>> >rN   c                  ,   t          j                    } |                     ddd           |                     ddd           t          j        | d          }d | D             }t          j        | ||dd	g
          }t          |          dk    sJ d S )Nr   rO   r   r   rd  r   c                     i | ]}|||fS rT   rT   rU   s     rL   rX   z;test_draw_networkx_edge_label_multiedge.<locals>.<dictcomp>Z  r  rN   r  r  rB  r  rb   )r>   r  r   get_edge_attributesrE  r   )rK   rB  r*   r  s       rL   'test_draw_networkx_edge_label_multiedger  U  s    
AJJq!BJJJq!BJ(H55K
 
 a
 
 
 C-	'8	  J z??arN   c                      t          j        d          } d | j        D             }t          j        | |i           i k    sJ dS )zORegression test for draw_networkx_edge_labels with empty dict. See
    gh-5372.rY   c                     i | ]}|||fS rT   rT   rU   s     rL   rX   z<test_draw_networkx_edge_label_empty_dict.<locals>.<dictcomp>h  r  rN   rC  N)r>   r?   rZ   rE  r  s     rL   (test_draw_networkx_edge_label_empty_dictr  d  sQ     	aA
&
&ag
&
&
&C'3B???2EEEEEErN   c                 R   | \  }}g d}g d}t          j        |          }d |j        D             }t          j        |||||           t	          |j                  dk    sJ t                              |dd                   t                              dd	g          z   }t          |j        |dd         |          D ]c\  }}	}
|	                                
                    |
          sJ t          j                            |                                |	          sJ ddS )
ztWhen an edgelist is supplied along with a sequence of colors, check that
    the self-loops have the correct colors.)r  r   r   rk   r
  r(  )pinkcyanr   r9   r  greenc                     i | ]}|||fS rT   rT   rU   s     rL   rX   zGtest_draw_networkx_edges_undirected_selfloop_colors.<locals>.<dictcomp>u  r  rN   )r}   r   r#   rY   Nr   rY  )r>   r   rZ   r  r   r	  rc   r  r   r!  contains_pointrE   rF   rG   r  )rw   r|   r}   r   edge_colorsrK   r*   	sl_pointsr  clrslps              rL   3test_draw_networkx_edges_undirected_selfloop_colorsr  l  s5    GC???HCCCK
A
&
&ag
&
&
&C1cb8TTTT rz??a
 "##''"((As8*<*<<I RZRSS)99EE ? ?S#||~~,,S11111z$$S%6%6%8%8#>>>>>>? ?rN   fap_only_kwargrd  r  r  r<  r=  c                    t          j        d          }d |D             }|\  }}t          |                                           d         }t	          j        t          d| d          5  t          j        ||fd|i|  ddd           n# 1 swxY w Y   t          j	                    5  t          j
        d	           t          j        d
t                     t          j        ||f|dd|  ddd           dS # 1 swxY w Y   dS )zUsers should get a warning when they specify a non-default value for
    one of the kwargs that applies only to edges drawn with FancyArrowPatches,
    but FancyArrowPatches aren't being used under the hood.rY   c                     i | ]}|||fS rT   rT   rU   s     rL   rX   zEtest_user_warnings_for_unused_edge_drawing_kwargs.<locals>.<dictcomp>  r  rN   r   z

The z# keyword argument is not applicabler{  r}   Nerrorignore)categoryT)r}   r0  )r>   r?   r   r   r  warnsUserWarningr  warningscatch_warningssimplefilterfilterwarningsDeprecationWarning)r  rw   rK   r*   r|   r}   
kwarg_names          rL   1test_user_warnings_for_unused_edge_drawing_kwargsr    s    	aA
 
 a
 
 
 CGC n))++,,Q/J	UjUUU
 
 
 @ @ 	q#??"????@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ 
	 	"	" M Mg&&&3EFFFF
q#L"TLL^LLL	M M M M M M M M M M M M M M M M M Ms%   ,BBB,AC??DDdraw_fnc                     |\  }}t          j        d          }t          j        d          5 } | ||           d d d            n# 1 swxY w Y   t	          |          dk    sJ d S )Nr   T)recordrJ  r   )r>   cycle_graphr  r  r   )r  rw   r|   r}   rK   r   s         rL   *test_no_warning_on_default_draw_arrowstyler    s     GC
qA		 	-	-	- b              q66Q;;;;;;s   A		AAr  methodc                     t          j        d          }d |j        D             }|\  }} | ||||           |j        |j        fD ])}t          |                                          |k    sJ *d S )NrY   c                     i | ]}|||fS rT   rT   rU   s     rL   rX   z#test_hide_ticks.<locals>.<dictcomp>  r  rN   )r*   r}   r  )r>   r?   rZ   r  r  r  r  )r  r  rw   rK   r*   _r}   rz   s           rL   test_hide_ticksr    s     	aA
&
&ag
&
&
&CEAr
F1#"444428$ 9 9D''))**j888889 9rN   c                 r   | \  }}d}t          j        |g          }d |D             }d}d}t          j        |||di|          }t          j        |||di|          }	||         j        s+J ||         j        t          j        d          k                |	|         j        ||         j        k     sJ dS )	ztCheck that FancyArrowPatches with `bar` connectionstyle are also supported
    in edge label rendering. See gh-7735.rj   c                     i | ]}||d fS rl  rT   rU   s     rL   rX   z7test_edge_label_bar_connectionstyle.<locals>.<dictcomp>  r  rN   zarc3,rad=0.0zbar,fraction=0.1edger  )r)   r   N)r>   r  rE  r[  yr  approx)
rw   r|   r}   r  rK   r*   	style_arc	style_bararc_lblbar_lbls
             rL   #test_edge_label_bar_connectionstyler    s     GCD

D6A
 
 a
 
 
 CI"I*	3T6NI  G *	3T6NI  G
 4=?FFGDMOv}X/F/FFFFF4=?WT]_,,,,,,rN   )r__doc__r   r  r  r  networkxr>   importorskiprE   rc   userA   rcParamsbarbell_graphr  defaultsmarkparametrizerM   r]   rf   mpl_image_comparer~   r   r   r   r   r   r  r  r  r2  r9  rH  rP  rW  rb  ro  ru  rx  r  r  r  r  r  r  r  r  fixturerw   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r"  r)  r-  r7  rF  rH  rM  rO  rR  rV  r`  rf  rm  ry  r  r  r  r  r  r  r  r  r  r  r  r  rK  rU  r  r  r  r  r   r  r  r  r  r  r  r  r  rE  r  rD  r4  r  r  rT   rN   rL   <module>r     s   2 2     				      f,''V!! f-..#]  "
1a
 
 ,,D, ), 	,
    ," ##,$ #%,& ',( ),* D+,, #-,. )/,0 $O?SS 1,H #I,J #K,N sO,P aQ,R W, , ,^ -	tXl34('          ! ! !H  " ? ? ?D   : * * *Z 
 
 "*'=>>  ?>
 
* "*'=>>  ?>( "*'=>>  ?>>  $ "*'=>>  ?>8 "*'=>>  ?>( 	&(>?@	
QF	1b'  "*'=>>  ?> , 	&(>?@	sCj	3*  "*'=>>  ?> 4         6      " z22/ / 32/d 5$-00  10  &P P P     0	 	 		 	 	  * * *
 
#
	H%
 
f
  dVH%566D D 76 D 
#
	H%
 
f
  dVH%566	D 	D 76 	D6F 6F 6FrD D DD D D     "*'=>>, , ?>, 
a 3 3 3 
a / / /    	 5 5 5= = = 	. 	. 	.  , , , 	
			s
 

, 
,
 

,5 5 549F 9F 9Fz   2N N N  
K K K,E E E6 6 6$  6 6 6.8 8 8&$ $ $
( ( ( r<<<&899	4 	4 :9	4 /E/E/E'FGGI I HGI(C C C
' ' ' z22)0 )0 32)0\ z22) ) 32)X. . .. . .", , ,= = =D "'23C)DEE  FE "'23C)DEE	 	 FE	   bjllA!,r/@/@!.DE / /	 /  bjllA!,r/@/@!.DE > >	 >(     F F F? ? ?6 	s	b	N+	b!	b!	 	M M	 	M. RWb.>$?@@  A@ t}55

$


	 	9 9	 	 659- - - - -rN   