U
    9%ek                     @   s  d Z ddlZddlZddlZddlZedZedZed edZ	de	j
d< ddlZed	d
Zdd Zdd Zdd Zdd Zejddddgdfddgdfddgdfddgd ff	ejd!dd"gfd#d$ Zejddddgdfddgdfddgdfddgd ff	ejd!dd"gfd%d& Zd'd( Zd)d* Zd+d, Zd-d. Zd/d0 Zejd1ejejfd2d3 Zejd4d5d6gd6ffd7d8 Zejd4d5d6gd6ffd9d: Z ejd!d"d;d<gdd"d;gfd=d> Z!d?d@ Z"dAdB Z#ejdCdDdEdF Z$ejdGdHgdIgdJgdIdKdLgdIdKgdIdKdLdMgfdNdO Z%dPdQ Z&ejj'dRdS Z(dTdU Z)dVdW Z*dXdY Z+dZd[ Z,d\d] Z-d^d_ Z.d`da Z/ejdbdcdddedcgfdfdg Z0dhdi Z1djdk Z2ejdldmdndo Z3dpdq Z4drds Z5dtdu Z6dvdw Z7ejdxej8ej9fdydz Z:ejdxej8ej9fd{d| Z;d}d~ Z<dd Z=dd Z>dd Z?ejdddKidbdeiddidddidddifdd Z@dS )z,Unit tests for matplotlib drawing functions.    N
matplotlibnumpyZPSzmatplotlib.pyplotFztext.usetex      c                  C   s   z^tjtjtjtjtjtj	tj
g} ddddg}t| |D ]\}}|tf| td q<W 5 zt d W n tk
r   Y nX X d S )Ntest.psblackd      )
node_color	node_sizewidth)osunlinkOSErrornxZdraw_circularZdraw_kamada_kawaiZdraw_planarZdraw_randomZdraw_spectraldraw_spring
draw_shell	itertoolsproductbarbellpltsavefig)Z	functionsoptionsfunctionoption r   `/var/www/html/Darija-Ai-API/env/lib/python3.8/site-packages/networkx/drawing/tests/test_pylab.py	test_draw   s"    	r   c                  C   sn   zBttdttddttddg} tjt| d t	d W 5 zt d W n tk
rf   Y nX X d S )Nr   r   
      Znlist)
r   r   r   listranger   r   r   r   r   r    r   r   r   test_draw_shell_nlist+   s    &r#   c                  C   s(   t t } tjt| dtjjdd d S )Nr   T)
edge_colorr   Z	edge_cmapZwith_labels)r"   r   Znumber_of_edgesr   r   r   cmZBlues)colorsr   r   r   test_edge_colormap7   s        r'   c                   C   s   t t  d S N)r   r   r   to_directedr   r   r   r   test_arrows?   s    r*   )r$   expected)Nr   )rredr,   r-   )      ?r/   g        yellowr.   r0   )r      r   r2   limer1   r3   )#0000ffbluer4   r5   edgelistr   r2   c                 C   s<   t d}t j|t ||| d}tj| |s8tdS )z`Tests ways of specifying all edges have a single color for edges
    drawn with a LineCollectionr	   posr6   r$   N)	r   
path_graphdraw_networkx_edgesrandom_layoutmplr&   
same_color	get_colorAssertionError)r$   r+   r6   Gdrawn_edgesr   r   r   !test_single_edge_color_undirectedD   s    
   rC   c                 C   sL   t jdt jd}t j|t ||| d}|D ]}tj| |s,t	q,dS )zaTests ways of specifying all edges have a single color for edges drawn
    with FancyArrowPatchesr	   Zcreate_usingr8   N)
r   r:   DiGraphr;   r<   r=   r&   r>   get_edgecolorr@   )r$   r+   r6   rA   rB   fapr   r   r   test_single_edge_color_directed^   s       rH   c                  C   s  t jdt jd} dd tt| D }dD ]j}t j| ||d}|D ]}tj|	 |sBt
qBt j| |ddg|d	}|D ]}tj|	 |sxt
qxq*t j| |ddd
gdd	}|D ]}tj|	 dst
qt j| |ddd
dgdd	}|D ]}tj|	 dst
qt j| |ddd
gdd	}tj|d 	 |d 	 sDt
|D ]}tj|	 drHt
qHt j| |ddd
dgdd	}tj|d 	 |d 	 st
tj|d 	 |d 	 st
|D ]}tj|	 drt
qd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   rD   c                 S   s   i | ]}|||fqS r   r   .0nr   r   r   
<dictcomp>}   s      z8test_edge_color_tuple_interpretation.<locals>.<dictcomp>)r   r   r2   r   r   r2   r2   r$   r7   r2      )r6   r$   rQ   r	   rN   r5   )r	   r   rM   r   r2   rQ   r	   N)r   r:   rE   r"   lenr;   r=   r&   r>   rF   r@   )rA   r9   ecrB   rG   r   r   r   $test_edge_color_tuple_interpretationy   st            
    
 

  
 
 


 

rU   c                  C   sZ   t  } tt }d}tj| ||d}t|t|D ]\}}tj	
| |s6tq6dS )zZTest that the edge colors are cycled when there are fewer specified
    colors than edges.)r,   gbrO   N)r   r)   r   r<   r;   zipr   cycler=   r&   r>   rF   r@   rA   r9   Z
edgecolorsrB   rG   r+   r   r   r   .test_fewer_edge_colors_than_num_edges_directed   s    
r[   c                  C   sd   t jdt jd} t t}d}t j| ||d}t||dd D ]\}}tj	|
 |s@tq@dS )z\Test that extra edge colors are ignored when there are more specified
    colors than edges.r   rD   )r,   rV   rW   crO   N)r   r:   rE   r<   r   r;   rX   r=   r&   r>   rF   r@   rZ   r   r   r   -test_more_edge_colors_than_num_edges_directed   s    
r^   c                  C   sl   t jtt tddgddd} |   }t|  dks>tt	j
|d d dsXt|d dkshtd S Nr7   rP   purple皙?)r9   r6   r$   alpharQ   r]   )r   r;   r   r<   r?   ZsqueezerS   	get_pathsr@   r=   r&   r>   )Zedge_collectionrT   r   r   r   3test_edge_color_string_with_global_alpha_undirected   s    rd   c                  C   sr   t jt t tddgddd} t| dks2t| D ]6}| }tj	
|d d ds\t|d dks6tq6d S r_   )r   r;   r   r)   r<   rS   r@   rF   r=   r&   r>   )rB   rG   rT   r   r   r   1test_edge_color_string_with_global_alpha_directed   s    re   
graph_typec                 C   sV   t jd| d}dd tt|D }t ||}t|trB|d }| dksRtdS )z^Test the default linewidth for edges drawn either via LineCollection or
    FancyArrowPatches.rQ   rD   c                 S   s   i | ]}|||fqS r   r   rI   r   r   r   rL      s      z1test_edge_width_default_value.<locals>.<dictcomp>r   r2   N)	r   r:   r"   rS   r;   
isinstancer!   get_linewidthr@   )rf   rA   r9   rB   r   r   r   test_edge_width_default_value   s    
ri   )	edgewidthr+   r	   r	   r	   c                 C   sX   t d}dd tt|D }t j||| d}t| dksDt| |ksTtd S )Nr   c                 S   s   i | ]}|||fqS r   r   rI   r   r   r   rL      s      z;test_edge_width_single_value_undirected.<locals>.<dictcomp>r   r	   )r   r:   r"   rS   r;   rc   r@   rh   )rj   r+   rA   r9   rB   r   r   r   'test_edge_width_single_value_undirected   s
    
rm   c                 C   sd   t jdt jd}dd tt|D }t j||| d}t|dksFt|D ]}| |ksJtqJd S )Nr   rD   c                 S   s   i | ]}|||fqS r   r   rI   r   r   r   rL   	  s      z9test_edge_width_single_value_directed.<locals>.<dictcomp>rl   r	   )r   r:   rE   r"   rS   r;   r@   rh   )rj   r+   rA   r9   rB   rG   r   r   r   %test_edge_width_single_value_directed   s    rn   rP   rR   c                 C   sV   t  }t|}d}tj||| |d}t|t|D ]\}}| |ks8t	q8d S )N)      ?       @g      (@)r6   r   )
r   r)   r   r<   r;   rX   r   rY   rh   r@   )r6   rA   r9   widthsrB   rG   Zexpected_widthr   r   r   test_edge_width_sequence  s    	
rr   c                  C   sx   t jdt jd} t | }t j| |ddgd}dd |D }t j| |dd	gdd	d
}dd |D }tj||sttdS )zyTest that edge_vmin and edge_vmax properly set the dynamic range of the
    color map when num edges == len(edge_colors).r	   rD   r   r/   rO   c                 S   s   g | ]}|  qS r   rF   rJ   er   r   r   
<listcomp>(  s     z7test_edge_color_with_edge_vmin_vmax.<locals>.<listcomp>ra   g?)r$   Z	edge_vminZ	edge_vmaxc                 S   s   g | ]}|  qS r   rs   rt   r   r   r   rv   -  s     N)	r   r:   rE   r<   r;   r=   r&   r>   r@   )rA   r9   rB   Zorig_colorsZscaled_colorsr   r   r   #test_edge_color_with_edge_vmin_vmax!  s    
    rw   c                  C   s`   t jdt jd} dd tt| D }t | |}t|dksBt|D ]}| dksFtqFdS )z>Test default linestyle for edges drawn with FancyArrowPatches.r   rD   c                 S   s   i | ]}|||fqS r   r   rI   r   r   r   rL   4  s      z9test_directed_edges_linestyle_default.<locals>.<dictcomp>r	   ZsolidNr   r:   rE   r"   rS   r;   r@   get_linestyle)rA   r9   rB   rG   r   r   r   %test_directed_edges_linestyle_default1  s    rz   style)dashed--r2   r2   r2   c                 C   sd   t jdt jd}dd tt|D }t j||| d}t|dksFt|D ]}| | ksJtqJd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   rD   c                 S   s   i | ]}|||fqS r   r   rI   r   r   r   rL   K  s      z>test_directed_edges_linestyle_single_value.<locals>.<dictcomp>r{   r	   Nrx   )r{   rA   r9   rB   rG   r   r   r   *test_directed_edges_linestyle_single_value=  s    r   	style_seqr|   r}   r~   -:z-.c                 C   st   t jdt jd}dd tt|D }t j||| d}t|dksFtt|t	| D ]\}}|
 |ksVtqVdS )zTests support for specifying linestyles with sequences in
    ``draw_networkx_edges`` for FancyArrowPatch outputs (e.g. directed edges).r   rD   c                 S   s   i | ]}|||fqS r   r   rI   r   r   r   rL   c  s      z:test_directed_edges_linestyle_sequence.<locals>.<dictcomp>r   r	   N)r   r:   rE   r"   rS   r;   r@   rX   r   rY   ry   )r   rA   r9   rB   rG   r{   r   r   r   &test_directed_edges_linestyle_sequenceS  s    r   c               
   C   sF  t  } t | }t j| |ddddgdddd t j| |d	d
ddgddddddgd t j| |ddd t j| |ddddgdddd t j| |ddddgdddd t j| |ddddgdddddd i }d|d< d|d< d |d< d!|d< d"|d	< d#|d
< d$|d< d%|d< t j| ||d&d' t j| |d d(d) t j| |dd*id+ d S ),Nr   r2   rQ   r	   r,   i  g      ?)nodelistr
   r   rb   r      r      rW   g      ?ro   r/   )r   rb   r7   rP   rR   )r	   r      )r6   r   rb   r$   )r   r   )r   r   )r   r   )r   r   T)r6   arrowsmin_source_marginmin_target_marginr   r$   z$a$z$b$z$c$z$d$z$\alpha$z$\beta$z$\gamma$z$\delta$   )Z	font_sizeF)edge_labelsrotatez4-5r   )r   Zcubical_graphZspring_layoutdraw_networkx_nodesr;   Zdraw_networkx_labelsdraw_networkx_edge_labels)rA   r9   labelsr   r   r   test_labels_and_colorsk  sr    
  
   

	


r   c                  C   s   t  } t \}}dddddd}t j| |ddd	d
dgdd t j| |ddgdd t j| |ddd |d t  td |S )Nr   r   r2   r   r7   r   )ro   rp   )r   r2   rQ   r	   r   i  r   r2   rQ   r	   ztab:blue)r   r   r
   i  r   z
tab:orangero   r   )rb   r   g)\(?off)	r   Zhouse_graphr   subplotsr   r;   ZmarginsZtight_layoutZaxis)rA   figaxr9   r   r   r   test_house_with_colors  s,    
    

r   c                  C   s4   t  \} }tjt|d tjttt|d d S )Nr   )r   r   r   drawr   r   circular_layout)r   r   r   r   r   	test_axes  s    r   c                  C   s   t  } t |  d S r(   )r   Graphr   rA   r   r   r   test_empty_graph  s    r   c                  C   s   dd l } tddg}tddg}t|}ttj||g dtjj	sLt
ttj||g dtjj	sjt
tj||g ddg kst
tj||g ddg kst
tj||g ddg kst
tj||g ddg kst
d S )Nr   rP   rR   )r   T)r6   r   F)matplotlib.collectionsr   r   rE   r   rg   r   r=   collectionsZPathCollectionr@   r;   )r   rA   DGr9   r   r   r   #test_draw_empty_nodes_return_values  s     
  r   c                  C   s<   t jdt jd} t j| dgd t j| dgdddgd d S )	Nr	   rD   )r   r2   r   r6   r      r   )r6   r   )r   r:   ZMultiDiGraphdraw_networkxr   r   r   r   test_multigraph_edgelist_tuples  s    r   c                     s   t t} t }|d t jt| ddgd ttj  fddt	 D }t	 }|d t jt| ||d |
d	 |d
 t jt| |d d S )N   皙?ra   )rb   c                    s   g | ]}|  qS r   r   )rJ   xZ	num_nodesr   r   rv     s     z#test_alpha_iter.<locals>.<listcomp>   )r
   rb   r2      )r   r<   r   r   ZfigureZadd_subplotr   rS   nodesr"   append)r9   r   rb   r&   r   r   r   test_alpha_iter  s    





r   c                	   C   s,   t jtdd tjtdd W 5 Q R X d S )NzReceived invalid argumentmatchbar)Zfoo)pytestraises
ValueErrorr   r   r   r   r   r   r   test_error_invalid_kwds  s    r   c               	   C   sH   t ddddg} dddg}tjtdd	 t j| |d
 W 5 Q R X d S )Nr7   r   rQ   r   r	   r2   r	   r2   rQ   r	   z1arrowsize should have the same length as edgelistr   )	arrowsize)r   rE   r   r   r   r   )rA   r   r   r   r   +test_draw_networkx_arrowsize_incorrect_size  s    
 r   r      r   r   c                 C   s~   t dddg}dddd}t j||| d}t| tr@t| n| } t|| D ]*\}}t|tj	j
sht| |ksNtqNd S )Nr7   r   rP   r   r   )r   r2   rQ   )r9   r   )r   rE   r;   rg   intr   repeatrX   r=   patchesFancyArrowPatchr@   Zget_mutation_scale)r   rA   r9   edgesrG   r+   r   r   r   test_draw_edges_arrowsize  s    r   c                   C   s   t jttddgd d S )Nr   r   r   )r   r   r   nparrayr   r   r   r   test_np_edgelist  s    r   c               	   C   s@   t d} ddd}tjt jdd t | | W 5 Q R X d S )Nr	   r   r   r7   zhas no positionr   )r   r:   r   r   NetworkXErrorr   rA   r9   r   r   r   *test_draw_nodes_missing_node_from_position  s    

r   
node_shape)osc           	      C   s   t  \}}tdg}ddd}tj|||| dd }|  ddddf }tj|||| ddd	d }|  ddddf }|d |d kst|d
 |d
 k st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 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

    r7   r   r   )r   r   r   NrQ   r   )r   r   r   r   r2   )r   r   r   rE   r;   get_extentsZcornersr@   )	r   r   r   rA   r9   Zdefault_patchZdefault_extentZpadded_patchZpadded_extentr   r   r   )test_draw_edges_min_source_target_margins#  s$    
r   c                  C   sl   t  \} }t }|d |dd t|ddid }| }|jdkrZ|j	dks^t
t | dS )zDEnsure that selfloop extent is non-zero when there is only one node.r   r   N)r   r   r   rE   add_nodeadd_edger;   r   r   heightr@   delaxes)r   r   rA   patchbboxr   r   r   &test_nonzero_selfloop_with_single_nodeP  s    
r   c                  C   s|   t  \} }tjdtjd}|dd dd |jD }tj||dgdd }| }|j	dkrj|j
dksntt | d	S )
zfEnsure that selfloop extent is non-zero when only a single edge is
    specified in the edgelist.
    rQ   rD   r2   c                 S   s   i | ]}|||fqS r   r   rI   r   r   r   rL   j  s      zFtest_nonzero_selfloop_with_single_edge_in_edgelist.<locals>.<dictcomp>r   r   r   N)r   r   r   r:   rE   r   r   r;   r   r   r   r@   r   )r   r   rA   r9   r   r   r   r   r   2test_nonzero_selfloop_with_single_edge_in_edgelista  s    r   c                  C   sJ   dddg} dddg}d}t jj||| }t|ddd	f |ksFtdS )
zfTest apply_alpha when there is a mismatch between the number of
    supplied colors and elements.
    r   r2   rQ   r,   rV   rW   ro   Nr]   )r   ZdrawingZnx_pylabZapply_alphaallr@   )r   Z	colorlistrb   Zrgba_colorsr   r   r   test_apply_alphat  s
    

r   c                  C   s  ddl } ddl} td}tjdtjd}dd |D }||fD ]@}tj||dd}t|t|jksjtt	|d t
jjs@tq@||fD ]&}tj||d	d}t	|t
jjstqt||}t	|t
jjstt||}t|t|jkstt	|d t
jjs
tdS )
a/  
    The `arrows` keyword argument is used as a 3-way switch to select which
    type of object to use for drawing edges:
      - ``arrows=None`` -> default (FancyArrowPatches for directed, else LineCollection)
      - ``arrows=True`` -> FancyArrowPatches
      - ``arrows=False`` -> LineCollection
    r   Nr	   rD   c                 S   s   i | ]}|||fqS r   r   rI   r   r   r   rL     s      z>test_draw_edges_toggling_with_arrows_kwarg.<locals>.<dictcomp>T)r   F)r   Zmatplotlib.patchesr   r:   rE   r;   rS   r   r@   rg   r=   r   r   r   LineCollection)r   ZUGr   r9   rA   r   r   r   r   *test_draw_edges_toggling_with_arrows_kwarg  s"    
r   drawing_funcc                 C   sZ   dd l }td}t \}}| ||d tdd |jD sBt|jrLtt	| d S )Nr   r	   r   c                 s   s   | ]}t |tjjV  qd S r(   rg   r=   r   r   rJ   r\   r   r   r   	<genexpr>  s     z?test_draw_networkx_arrows_default_undirected.<locals>.<genexpr>)
r   r   r:   r   r   anyr   r@   r   r   r   r   rA   r   r   r   r   r   ,test_draw_networkx_arrows_default_undirected  s    

r   c                 C   s`   dd l }tjdtjd}t \}}| ||d tdd |jD rHt|j	sRtt
| d S )Nr   r	   rD   r   c                 s   s   | ]}t |tjjV  qd S r(   r   r   r   r   r   r     s    z=test_draw_networkx_arrows_default_directed.<locals>.<genexpr>)r   r   r:   rE   r   r   r   r   r@   r   r   r   r   r   r   *test_draw_networkx_arrows_default_directed  s    
r   c                  C   sN   t d} | dd t \}}t j| ddg|d |jr@tt| d S )Nr	   r   r7   rP   )r6   r   )	r   r:   r   r   r   r   r   r@   r   )rA   r   r   r   r   r   test_edgelist_kwarg_not_ignored  s    

r   c               	   C   sv   d} t  }|jdddd |jdddd t |d}dd	 |D }tjt j| d
 t j|||d W 5 Q R X dS )zs
    draw_networkx_edge_labels should raise an informative error message when
    the edge label includes keys
    z5draw_networkx_edge_labels does not support multiedgesr   r2   r   )weightr   r   c                 S   s   i | ]}|||fqS r   r   rI   r   r   r   rL     s      zEtest_draw_networkx_edge_label_multiedge_exception.<locals>.<dictcomp>r   r   N)r   Z
MultiGraphr   Zget_edge_attributesr   r   r   r   )Zexception_msgrA   r   r9   r   r   r   1test_draw_networkx_edge_label_multiedge_exception  s    r   c                  C   s6   t d} dd | jD }t j| |i di ks2tdS )zORegression test for draw_networkx_edge_labels with empty dict. See
    gh-5372.r	   c                 S   s   i | ]}|||fqS r   r   rI   r   r   r   rL     s      z<test_draw_networkx_edge_label_empty_dict.<locals>.<dictcomp>r   N)r   r:   r   r   r@   r   r   r   r   (test_draw_networkx_edge_label_empty_dict  s    
r   c            
      C   s   t  \} }ddddddg}ddd	d
ddg}t|}dd |jD }tj|||||d t|jdksltt	
|dd t	
ddg }t|j|dd |D ]2\}}}	| |	sttj| |stqt | dS )ztWhen an edgelist is supplied along with a sequence of colors, check that
    the self-loops have the correct colors.r   rP   rR   r   rk   )rQ   rQ   Zpinkcyanr   r-   r5   greenc                 S   s   i | ]}|||fqS r   r   rI   r   r   r   rL     s      zGtest_draw_networkx_edges_undirected_selfloop_colors.<locals>.<dictcomp>)r   r6   r$   r	   Nr   r   )r   r   r   r   r   r;   rS   r   r@   r   r   rX   get_pathZcontains_pointr=   r&   r>   rF   r   )
r   r   r6   Zedge_colorsrA   r9   Z	sl_pointsrG   ZclrZslpr   r   r   3test_draw_networkx_edges_undirected_selfloop_colors  s    
  r   fap_only_kwargZ
arrowstyleZconnectionstylezarc3,rad=0.2r   r   c              	   C   s   t d}dd |D }t \}}t|  d }tjtd| dd t j	||fd|i|  W 5 Q R X t
 * t
d	 t j	||f|d
d|  W 5 Q R X t| dS )zUsers should get a warning when they specify a non-default value for
    one of the kwargs that applies only to edges drawn with FancyArrowPatches,
    but FancyArrowPatches aren't being used under the hood.r	   c                 S   s   i | ]}|||fqS r   r   rI   r   r   r   rL     s      zEtest_user_warnings_for_unused_edge_drawing_kwargs.<locals>.<dictcomp>r   z

The z# keyword argument is not applicabler   r   errorT)r   r   N)r   r:   r   r   r!   keysr   ZwarnsUserWarningr;   warningscatch_warningssimplefilterr   )r   rA   r9   r   r   Z
kwarg_namer   r   r   1test_user_warnings_for_unused_edge_drawing_kwargs  s    
 
"

$r   )A__doc__r   r   r   r   Zimportorskipr=   r   Zuser   ZrcParamsZnetworkxr   Zbarbell_graphr   r   r#   r'   r*   markZparametrizerC   rH   rU   r[   r^   rd   re   r   rE   ri   rm   rn   rr   rw   rz   r   r   r   Zmpl_image_comparer   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   <module>   s  




9


	
	


;
	
	
,"



