U
    -ed                     @   sn  d dl Z d dlZd dlZd dlmZmZ G dd dZG dd dZej	
dejejejejfdd	 Zej	
d
ddddfddiddiddffdd Zej	
dejejfdd Zej	
d
ddddfddiddiddffdd Zej	
dejejfdd Zej	
d
ddddfddiddiddffdd Zdd Zd d! Zd"d# Zej	
dejejejejgd$d% Zej	
dejejejejgd&d' Zd(d) Zej	
dejejgd*d+ Zej	
dejejgd,d- Zd.d/ Zej	
d0e e e e fd1d2 Zej	
d0e e fd3d4 Zej	
d0e e fd5d6 Z dS )7    N)edges_equalnodes_equalc                   @   s   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& Zd'd( Zd)d* Zd+d, Zd-d. Zd/d0 Zd1d2 Zd3d4 Zd5S )6TestFunctionc                 C   s   t jdddgdddgg ddd| _dddddd| _ttd	| _d
dddddg| _t dddgdddgg d| _	dddddd| _
dddddd| _ttd	| _d
dddddg| _d S )N         r   )r   r      ZTest)name)r   r   r   r   r      r   r   r   r   r   r   r   r   r   r   r   r   )nxGraphGZGdegreelistrangeGnodesZGedgesDiGraphDGZDGin_degreeZDGout_degreeZDGnodesZDGedgesself r   e/var/www/html/Darija-Ai-Train/env/lib/python3.8/site-packages/networkx/classes/tests/test_function.pysetup_method
   s    $ zTestFunction.setup_methodc                 C   sD   t | j tt| js tt | j tt| js@td S N)r   r   nodesr   r   AssertionErrorr   r   r   r   r   
test_nodes   s     zTestFunction.test_nodesc                 C   s   t | j tt| js tt| j tt| jksBtt | jjdddgdttj| jdddgdsvtt| jjdddgdttj| jdddgdkstd S )Nr   r   r   Znbunch)r   r   edgesr   r   r    sortedr   r   r   r   r   
test_edges   s     " zTestFunction.test_edgesc                 C   s   t | j tt| js tt| j tt| jksBtt | jjddgdttj| jddgdsrtt| jjddgdttj| jddgdkstt | jjddttj| jddstt| jjddttj| jddkstd S )Nr   r   r"   weightr&   )r   r   Zdegreer   r   r    r$   r   r   r   r   r   test_degree#   s      " 
 zTestFunction.test_degreec                 C   sP   t | jdt t| jdks&tt | jdt t| jdksLtd S Nr   )r   r   	neighborsr   r    r   r   r   r   r   test_neighbors3   s    &zTestFunction.test_neighborsc                 C   s8   | j  t| j kst| j t| jks4td S r   )r   Znumber_of_nodesr   r    r   r   r   r   r   test_number_of_nodes7   s    z!TestFunction.test_number_of_nodesc                 C   s8   | j  t| j kst| j t| jks4td S r   )r   Znumber_of_edgesr   r    r   r   r   r   r   test_number_of_edges;   s    z!TestFunction.test_number_of_edgesc                 C   s8   | j  t| j kst| j t| jks4td S r   )r   Zis_directedr   r    r   r   r   r   r   test_is_directed?   s    zTestFunction.test_is_directedc                 C   s  | j  }ddddg}t|| t||dddgs<t| j  }tj||dd	 t|j|d
dddddifddddifddddifgst| j  }dg}t|| t|t| j | st| j  }g }t|| t|j	| j
stt|j| j jstd S )N            r/   r0   )r/   r1   r/   r2          @r'   Tdatar&   )r   copyr   Zadd_starr   r#   r    r   r   r   r   r   r   nlistr   r   r   test_add_starC   s,    

	

zTestFunction.test_add_starc                 C   sf  | j  }ddddg}t|| t||dddgs<t| j  }tj||dd	 t|j|d
dddddifddddifddddifgst| j  }dg}t|| t||g stt|t| j dg st| j  }t	dg}t|| t|dgg stt|t| j dg s0t| j  }dg}t|| t||g sbtt|t| j dg s~t| j  }t	dg}t|| t|dgg stt|t| j dg st| j  }g }t|| t|j| j jstt|t| j st| j  }t	g }t|| t|j| j jsLtt|t| j sbtd S )Nr/   r0   r1   r2   r3   r0   r1   r1   r2   r5   r'   Tr6   r&   node)
r   r8   r   Zadd_pathr   r#   r    r   r   iterr9   r   r   r   test_add_path_   sV    

	







zTestFunction.test_add_pathc                 C   sj  | j  }ddddg}ddddgdddd	gg}t|| t|||ksPt| j  }ddd
difddd
difddd
difddd
difgddd
difddd
difddd
difddd
difgg}tj||dd t|j|dd|kst| j  }dg}t|| t|t| j | s"t| j  }g }t|| t|j	| j
sPtt|j| j jsftd S )Nr/   r0   r1   r2   r3   r4   r<   r=   )r2   r/   r&         ?r'   Tr6   )r   r8   r   Z	add_cycler$   r#   r    r   r   r   r   r   )r   r   r:   Zoklistsr   r   r   test_add_cycle   s<    





zTestFunction.test_add_cyclec                 C   s  | j ddddgjt| j ddddgjks2t| jddddgjt| jddddgjksdt| j ddddgjt| j ddddgjkst| jddddgjt| jddddgjkstt| j ddddgdddg}|j| j k	st|j| j dddgjkstd S )Nr   r   r   r   )r   Zsubgraphadjr   r    r   Zinduced_subgraphZ_graph)r   Hr   r   r   test_subgraph   s    ,,"zTestFunction.test_subgraphc                 C   sX   | j ddgjt| j ddgjks*t| jddgjt| jddgjksTtd S )Nr   r   )r   Zedge_subgraphrC   r   r    r   r   r   r   r   test_edge_subgraph   s    zTestFunction.test_edge_subgraphc                 C   s   t j| jdd}t|t| js$t|ji ks2t|ji | j	 i ksNt|j
i | j	 i ksjtt | j}t|t| jst|j| jjkst|j| jjkst|j
i | j	 i kstd S )NF)Z	with_data)r   Zcreate_empty_copyr   r   r   r    graph_nodefromkeysr   Z_adjr   r   r   r   r   test_create_empty_copy   s    z#TestFunction.test_create_empty_copyc                 C   s"   t | jdddddgkstd S r)   )r   Zdegree_histogramr   r    r   r   r   r   test_degree_histogram   s    z"TestFunction.test_degree_histogramc                 C   sP   t | jdkstt | jdks(tt  }|d t |dksLtd S )Ng      ?g333333?r           )r   densityr   r    r   r   add_noderJ   r   r   r   test_density   s
    
zTestFunction.test_densityc                 C   sH   t  }|dd t |dks&t|dd t |dksDtd S )Nr   rM   r   r5   )r   r   add_edgerN   r    rJ   r   r   r   test_density_selfloop   s
    z"TestFunction.test_density_selfloopc                 C   s   t | j}|jsttt j|jd tt j|j	dg tt j|j
d tt j|jdg tt j|jdd tt j|jdg tt j|jdd tt j|jdg tt j|j tt j|j d S )Nr   r   r   )r   freezer   frozenr    pytestraisesNetworkXErrorrO   add_nodes_fromremove_nodeZremove_nodes_fromrQ   add_edges_fromZremove_edgeremove_edges_fromZclear_edgesclearrJ   r   r   r   test_freeze   s    
zTestFunction.test_freezec                 C   s@   t | jrtt | j}|jt | jks2t|js<td S r   )r   	is_frozenr   r    rS   rT   rJ   r   r   r   test_is_frozen  s    zTestFunction.test_is_frozenc                 C   s6   t t d}|jd }d|d< |d dks2td S )Nr   r   TZnode_attribute)r   rS   
path_graphr   r    )r   r   r>   r   r   r   6test_node_attributes_are_still_mutable_on_frozen_graph  s    
zCTestFunction.test_node_attributes_are_still_mutable_on_frozen_graphc                 C   s6   t t d}|jd }d|d< |d dks2td S )Nr   r   TZedge_attribute)r   rS   r`   r#   r    )r   r   edger   r   r   6test_edge_attributes_are_still_mutable_on_frozen_graph  s    
zCTestFunction.test_edge_attributes_are_still_mutable_on_frozen_graphc                 C   s   t d}tt|d}tt ||d }t|t|d ksFtt d}tt|dd }tt ||}|dkr|dkrt|dkstnt|dkstt 	d}tt |d}t|dkstd S )Nd   r   r   c   r   )
r   complete_graphrandomsampler   r*   lenr    r`   
star_graphr   rG   popZnborsr>   r   r   r   test_neighbors_complete_graph  s    


z*TestFunction.test_neighbors_complete_graphc                 C   s  t d}tt|d}tt ||d }t|dks>tt d}tt|dd }tt ||}|dkr|dkrt|dkstnt|dkstt 	d}tt |d}t|dkstt 
 }|td tt |d}t|dkstd S )	Nrd   r   r   re   a   b   
   	   )r   rf   rg   rh   r   Znon_neighborsri   r    r`   rj   r   rX   r   rk   r   r   r   test_non_neighbors)  s"    


zTestFunction.test_non_neighborsc                 C   s  t d}tt |}t|dks(tt d}dddg}tt |}|D ]$\}}||f|ksN||f|ksNtqNt d}dddd	d
dg}tt |}|D ]$\}}||f|ks||f|kstqt  }|	dddg dddg}tt |}|D ]}||kstqd S )Nr
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   )r   r   r   r   )
r   rf   r   Z	non_edgesri   r    r`   rj   r   rZ   )r   rG   Znedgesexpecteduver   r   r   test_non_edgesD  s&    




zTestFunction.test_non_edgesc                 C   s   t  }t |rtt d}t |r.tt |dr>t|d |jdddd t |rftt |dsvtt  }|dddd	d
dg t |stt |dst|	 }t |stt |dstt
t jt j|d d S )Nr   ru   r   r'   rw   03r   r~   1)r   r~   r   r~   2r   )r   r   r   r   r   r   r   r~   r   )r   r   Zis_weightedr    r`   rO   rQ   r   add_weighted_edges_fromZto_undirectedrU   rV   rW   rJ   r   r   r   test_is_weighted^  s2    


zTestFunction.test_is_weightedc                 C   s4  t  }t |rt|d |ddddg t |r@t|jdddd t |dr`t|dd	d
g d|d d d< t |rtt |drtd|d d d< t |d	stt |stt  }|	ddddddg t |stt |dr
tt |dstt
t jt j|d d S )Nr   r   r   r   r
   r'   r   rs   rv   )r      bluecolorr&   r}   r   )r   r~   r   r   )r   r   r   )r~   r   r   rt   )r   r   Zis_negatively_weightedr    rO   rX   rQ   rZ   r   r   rU   rV   rW   rJ   r   r   r   test_is_negatively_weighted  s8    

z(TestFunction.test_is_negatively_weightedN)__name__
__module____qualname__r   r!   r%   r(   r+   r,   r-   r.   r;   r@   rB   rE   rF   rK   rL   rP   rR   r]   r_   ra   rc   rm   rr   r|   r   r   r   r   r   r   r   	   s4   
4&
!r   c                   @   sP   e Zd Zedd Zdd Zdd Zdd Zd	d
 Zdd Z	dd Z
dd ZdS )TestCommonNeighborsc                    s&   t tj _ fdd}t | _d S )Nc                    s"   t  | ||}||kstd S r   )r$   funcr    )r   ry   rz   rx   resultclsr   r   	test_func  s    z2TestCommonNeighbors.setup_class.<locals>.test_func)staticmethodr   common_neighborsr   test)r   r   r   r   r   setup_class  s    zTestCommonNeighbors.setup_classc                 C   s$   t d}| |dddddg d S )Nr
   r   r   r   r   r   r   rf   r   rJ   r   r   r   test_K5  s    
zTestCommonNeighbors.test_K5c                 C   s    t d}| |dddg d S )Nr   r   r   r   )r   r`   r   rJ   r   r   r   test_P3  s    
zTestCommonNeighbors.test_P3c                 C   s    t d}| |dddg d S )Nr   r   r   r   )r   rj   r   rJ   r   r   r   test_S4  s    
zTestCommonNeighbors.test_S4c              	   C   s@   t tj* t }|ddg | |dd W 5 Q R X d S )Nr   r   r   r   )rU   rV   r   ZNetworkXNotImplementedr   rZ   r   rJ   r   r   r   test_digraph  s    z TestCommonNeighbors.test_digraphc                 C   sP   t d}tt jt j|dd tt jt j|dd tt jt j|dd d S )Nr
   r   r   )r   rf   rU   rV   rW   r   rJ   r   r   r   test_nonexistent_nodes  s    
z*TestCommonNeighbors.test_nonexistent_nodesc                 C   s*   t  }|ddg | |ddg  dS )zCase of no common neighbors.r   r   N)r   r   rX   r   rJ   r   r   r   test_custom1  s    z TestCommonNeighbors.test_custom1c                 C   s$   t d}| |dddddg dS )zCase of equal nodes.r   r   r   r   r   Nr   rJ   r   r   r   test_custom2  s    
z TestCommonNeighbors.test_custom2N)r   r   r   classmethodr   r   r   r   r   r   r   r   r   r   r   r   r     s   
	r   
graph_typec                 C   sl  t jd| d}d}d}t ||| |jd | |ks:t|jd | |ksPt|jd | |ksftt jd| d}ttt| tt	|}d}t ||| |jd | dkst|jd | dkst|jd | dkstt jd| d}dd	d
}t
| |}|d t || |jd i ks8t|jd d dksPt|jd d d	kshtd S )Nr   Zcreate_usingrd   hellor   r   r   hi   r   r   )r   r`   set_node_attributesr   r    dictzipr$   r   ri   rI   rl   )r   r   valsattrdr   r   r   test_set_node_attributes  s,    

r   )valuesr	   redr   r   r   c                 C   sH   t  }|d t || | |jd d dks6td|jksDtdS )z
    When `values` is a dict or dict-of-dict keyed by nodes, ensure that keys
    that correspond to nodes not in G are ignored.
    r   r   r   r   N)r   r   rO   r   r   r    r   r	   r   r   r   r   ,test_set_node_attributes_ignores_extra_nodes  s
    
r   c                 C   sF  t jd| d}d}d}t ||| |d d | |ks<t|d d | |ksTtt jd| d}d}dd	g}tt|tt|}t ||| |d d | dkst|d d | dkstt jd| d}dd
d}dg}t||}t || |d d d dkst|d d d d
ks,t|d d i ksBtd S )Nr   r   r   r   r   r   r   r   r   r   r   	r   r`   set_edge_attributesr    r   r   r   ri   rI   r   r   r   r   r#   r   r   r   r   test_set_edge_attributes  s*    
r   rA   r5   )r   r   r&   c                 C   sD   t dg}t || | |d d d dks2td|jks@tdS )If `values` is a dict or dict-of-dicts containing edges that are not in
    G, data associate with these edges should be ignored.
    r   r   r   r&   rA   r   N)r   r   r   r    r#   r   r   r   r   ,test_set_edge_attributes_ignores_extra_edges&  s    r   c                 C   sb  t jd| d}d}d}t ||| |d d d | |ks@t|d d d | |ks\tt jd| d}d}dd	g}tt|tt|}t ||| |d d d | dkst|d d d | dkstt jd| d}dd
d}dg}t||}t || |d d d d dks&t|d d d d d
ksDt|d d d i ks^td S )Nr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   test_set_edge_attributes_multi7  s*    
r   )r   r   r   r   c                 C   sd   t ddg}t || | |d d d d dks8t|d d d i ksPtd| ks`tdS )	r   r   r   r   r   r   r   r&   rA   r   N)r   
MultiGraphr   r    r#   r   r   r   r   2test_set_edge_attributes_multi_ignores_extra_edgesU  s
    r   c                  C   s   t  t  t  t  g} | D ]d}t jd|d}d}d}t ||| t ||}|d |ksdt|d |kstt|d |ks tq d S )Nr   r   r   rd   r   r   r   )	r   r   r   r   MultiDiGraphr`   r   Zget_node_attributesr    )graphsr   r   r   attrsr   r   r   test_get_node_attributesg  s    r   c            	   
   C   s0  t  t  t  t  g} | D ]}t jd|d}d}d}t ||| t ||}t|dksft	|
 rddg}|D ]P\}}}z||||f dkst	W qz tk
r   ||||f dkst	Y qzX qzq dd	g}|D ]N\}}z|||f dkst	W q tk
r&   |||f dks"t	Y qX qq d S )
Nr   r   r   rd   r   r   r   r   r   )r   r   r   r   r   r`   r   Zget_edge_attributesri   r    Zis_multigraphKeyError)	r   r   r   r   r   keysry   rz   kr   r   r   test_get_edge_attributest  s*    
 r   c                  C   sp   t  t  t  t  g} | D ]J}t |s2t|td t |sNt|	ddg t |r tq d S )Nr
   r   rw   )
r   r   r   r   r   Zis_emptyr    rX   r   rZ   )r   r   r   r   r   test_is_empty  s    r   c                 C   s|   t jd| d}|dd tt |dgs0ttt |dgsFttt j|ddddi fgsftt |dksxtd S )Nr   r   r   r   r   Tr6   r   )	r   rf   rQ   r   Znodes_with_selfloopsr    r   selfloop_edgesZnumber_of_selfloopsr   r   r   r   r   test_selfloops  s     r   c                 C   sv   t jd| d}|dd |jdddd tt j|ddddi fddd	difgsVttt j|d	dd
dgsrtd S )Nr   r   r   r   r   r'   Tr6   r&   )r   r   N)r   r   r   )r   rf   rQ   r   r   r    r   r   r   r   test_selfloop_edges_attr  s     r   c                  C   sR   t jdt jd} | jdddd | jdddd tt j| ddd	d
dgsNtd S )Nr   r   r   rp   r'   rd   r&   Tr7   r   )r   r   r   rp   )r   r   r   rd   )r   rf   r   rQ   r   r   r    )r   r   r   r   ,test_selfloop_edges_multi_with_data_and_keys  s     r   c                 C   st   t jd| d}|dd |t j|dd |dd |t j|dd |dd |t j|ddd d S )Nr   r   r   Tr   r6   )r   r7   )r   rf   rQ   r[   r   r   r   r   r   test_selfloops_removal  s    r   c              	   C   s  t jd| d}|dd |dd |t | d| ksFt|dd |dd tt	 |t j|dd W 5 Q R X |dd |dd tt
 |t j|dd W 5 Q R X |dd |dd tt	 |t j|ddd W 5 Q R X d	S )
z[test removing selfloops behavior vis-a-vis altering a dict while iterating.
    cf. gh-4068r   r   r   r   Tr   r6   r   N)r   rf   rQ   r[   r   r#   r    rU   rV   RuntimeError	TypeErrorr   r   r   r   test_selfloops_removal_multi  s"    r   c                  C   s   dddg} dddg}t  t  t  t  g}dddddfdddddfdddddfg}|D ]P}|| t || ddkstt || d	dkstt	t j
t j||d qbd S )
Nr   r   r   r
   r   )costdistr   r   r   )r   r   r   r   r   rZ   Zpath_weightr    rU   rV   ZNetworkXNoPath)
valid_pathinvalid_pathr   r#   rG   r   r   r   test_pathweight  s    


r   r   c                 C   sl   |  ddddg ddddg}ddddg}dddddg}t| |sHtt| |rXtt| |rhtd S )	Nr   ru   rw   r   r   r   r   r
   )rZ   r   Zis_pathr    )r   r   r   Zanother_invalid_pathr   r   r   test_ispath  s    r   c                 C   sl   |  ddddddg | d t| dd	d
gddg}t| dddhksRtt| dhkshtd S )Nr   r   r   r   r   r   r   r   r   r
   rw   r   r   rZ   rO   r   Zrestricted_viewsetr   r    r#   r   rD   r   r   r   test_restricted_view  s
    
r   c              	   C   sn   |  dddddddg | d t| d	d
dgddg}t| dddhksTtt| dhksjtd S )Nr   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   test_restricted_view_multi  s    
r   )!rg   rU   Znetworkxr   Znetworkx.utilsr   r   r   r   markZparametrizer   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      / 







 
	 

	


 


