a
    hd                     @   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g dg dg ddd| _ddddd	d
| _ttd| _g d| _t g dg dg d| _	ddddd	d
| _
ddd	d	d	d
| _ttd| _g d| _d S )N         r   r   r   r   r      ZTest)namer   r   r   r   )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   R/var/www/auris/lib/python3.9/site-packages/networkx/classes/tests/test_function.pysetup_method
   s     
zTestFunction.setup_methodc                 C   sD   t | j tt| js J t | j tt| js@J d S N)r   r   nodesr   r   r   r   r   r   r    
test_nodes   s     zTestFunction.test_nodesc                 C   s   t | j tt| js J t| j tt| jksBJ t | jjg ddttj| jg ddsrJ t| jjg ddttj| jg ddksJ d S )N)r   r   r   Znbunch)r   r   edgesr   r   sortedr   r   r   r   r    
test_edges   s     "&zTestFunction.test_edgesc                 C   s   t | j tt| js J t| j tt| jksBJ t | jjddgdttj| jddgdsrJ t| jjddgdttj| jddgdksJ t | jjddttj| jddsJ t| jjddttj| jddksJ d S )Nr   r   r%   weightr)   )r   r   Zdegreer   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&J t | jdt t| jdksLJ d S )Nr   )r   r   	neighborsr   r   r   r   r   r    test_neighbors3   s    &zTestFunction.test_neighborsc                 C   s8   | j  t| j ksJ | j t| jks4J d S r"   )r   Znumber_of_nodesr   r   r   r   r   r    test_number_of_nodes7   s    z!TestFunction.test_number_of_nodesc                 C   s8   | j  t| j ksJ | j t| jks4J d S r"   )r   Znumber_of_edgesr   r   r   r   r   r    test_number_of_edges;   s    z!TestFunction.test_number_of_edgesc                 C   s8   | j  t| j ksJ | j t| jks4J d S r"   )r   Zis_directedr   r   r   r   r   r    test_is_directed?   s    zTestFunction.test_is_directedc                 C   s  | j  }g d}t|| t||g ds6J | 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sJ | j  }dg}t|| t|t| j | sJ | j  }g }t|| t|j| j	sJ t|j| j jsJ d S )N            )r2   r3   )r2   r4   r2   r5          @r*   Tdatar2   r3   r)   r4   r5   )
r   copyr   Zadd_starr   r&   r   r   r#   r   r   r   nlistr   r   r    test_add_starC   s,    

	

zTestFunction.test_add_starc                 C   s`  | j  }g d}t|| t||g ds6J | 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sJ | j  }dg}t|| t||g sJ t|t| j dg sJ | j  }tdg}t|| t|dgg sJ t|t| j dg s*J | j  }dg}t|| t||g s\J t|t| j dg sxJ | j  }tdg}t|| t|dgg sJ t|t| j dg sJ | j  }g }t|| t|j| j jsJ t|t| j sJ | j  }tg }t|| t|j| j jsFJ t|t| j s\J d S )Nr1   )r6   r3   r4   r4   r5   r8   r*   Tr9   r2   r3   r)   r4   r5   node)	r   r;   r   Zadd_pathr   r&   r   r   iterr<   r   r   r    test_add_path_   sV    

	







zTestFunction.test_add_pathc                 C   s^  | j  }g d}g dg dg}t|| t|||v sDJ | 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|v sJ | j  }dg}t|| t|t| j | sJ | j  }g }t|| t|j| j	sDJ t
|j| j jsZJ d S )Nr1   )r6   r7   r?   r@   )r6   r?   r@   )r5   r2   r2   r3   r)         ?r5   r4   r*   Tr9   )r   r;   r   Z	add_cycler'   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 g djt| j g djks*J | jg djt| jg djksTJ | j g djt| j g djks~J | jg djt| jg djksJ t| j g dg d}|j| j usJ |j| j g djksJ d S )N)r   r   r   r   r
   )r   Zsubgraphadjr   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*J | jddgjt| jddgjksTJ d S )Nr   r   )r   Zedge_subgraphrF   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$J |ji ks2J |ji | j i ksNJ |j	i | j i ksjJ t | j}t|t| jsJ |j| jjksJ |j| jjksJ |j	i | j i ksJ d S )NF)Z	with_data)
r   Zcreate_empty_copyr   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g dksJ d S )N)r   r   r   r   r   )r   Zdegree_histogramr   r   r   r   r    test_degree_histogram   s    z"TestFunction.test_degree_histogramc                 C   sP   t | jdksJ t | jdks(J t  }|d t |dksLJ d S )Ng      ?g333333?r           )r   densityr   r   r   add_noderM   r   r   r    test_density   s
    
zTestFunction.test_densityc                 C   sH   t  }|dd t |dks&J |dd t |dksDJ d S )Nr   rP   r   r8   )r   r   add_edgerQ   rM   r   r   r    test_density_selfloop   s
    z"TestFunction.test_density_selfloopc                 C   s   t | j}|jsJ 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   frozenpytestraisesNetworkXErrorrR   add_nodes_fromremove_nodeZremove_nodes_fromrT   add_edges_fromZremove_edgeremove_edges_fromZclear_edgesclearrM   r   r   r    test_freeze   s    
zTestFunction.test_freezec                 C   s@   t | jrJ t | j}|jt | jks2J |js<J d S r"   )r   	is_frozenr   rV   rW   rM   r   r   r    test_is_frozen  s    zTestFunction.test_is_frozenc                 C   s6   t t d}|jd }d|d< |d dks2J d S )Nr   r   TZnode_attribute)r   rV   
path_graphr#   )r   r   rA   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s2J d S )Nr   r   TZedge_attribute)r   rV   rc   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sFJ t d}tt|dd }tt ||}|dkr|dkrt|dksJ nt|dksJ t d}tt |d}t|dksJ d S )Nd   r   r   c   r   )	r   complete_graphrandomsampler   r,   lenrc   
star_graphr   rJ   popZnborsrA   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>J t d}tt|dd }tt ||}|dkr|dkrt|dksJ nt|dksJ t d}tt |d}t|dksJ t 	 }|
td tt |d}t|dksJ d S )	Nrg   r   r   rh   a   b   
   	   )r   ri   rj   rk   r   Znon_neighborsrl   rc   rm   r   r[   r   rn   r   r   r    test_non_neighbors)  s"    


zTestFunction.test_non_neighborsc                 C   s  t d}tt |}t|dks(J t d}g d}tt |}|D ]$\}}||f|v sL||f|v sLJ qLt d}g d}tt |}|D ]$\}}||f|v s||f|v sJ qt  }|g d g d}tt |}|D ]}||v sJ qd S )Nr   r   r   )r   r   r   r   )r   rv   r   r   r   r   r   r   r   r   )r   )r   r   )r   r   )r   r   r   )	r   ri   r   Z	non_edgesrl   rc   rm   r   r]   )r   rJ   Znedgesexpecteduver   r   r    test_non_edgesD  s&    


zTestFunction.test_non_edgesc                 C   s   t  }t |rJ t d}t |r.J t |dr>J |d |jdddd t |rfJ t |dsvJ t  }|g d t |sJ t |dsJ | }t |sJ t |dsJ t	
t jt j|d d S )	Nr   rx   r   r*   rz   )03r   r   1)r   r   r   r   2r   )r   r   r   r   r   r   r   r   r   )r   r   Zis_weightedrc   rR   rT   r   add_weighted_edges_fromZto_undirectedrX   rY   rZ   rM   r   r   r    test_is_weighted^  s&    


zTestFunction.test_is_weightedc                 C   s$  t  }t |rJ |d |g d t |r<J |jdddd t |dr\J |g d d|d d	 d
< t |rJ t |drJ d|d d d< t |dsJ t |sJ t  }|g d t |sJ t |drJ t |dsJ t	
t jt j|d d S )Nr   )r   r   r   r   r   r   r*   r   )rv   ry   )r      bluer   colorrv   r)   ry   )r   r   )r   r   r   r   )r   r   r   )r   r   r   rw   )r   r   Zis_negatively_weightedrR   r[   rT   r]   r   r   rX   rY   rZ   rM   r   r   r    test_is_negatively_weighted  s,    

z(TestFunction.test_is_negatively_weightedN)__name__
__module____qualname__r!   r$   r(   r+   r-   r.   r/   r0   r>   rC   rE   rH   rI   rN   rO   rS   rU   r`   rb   rd   rf   rp   ru   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J d S r"   )r'   func)r   r|   r}   r{   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g d d S )Nr   r   r   )r   r   r   r   ri   r   rM   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   rc   r   rM   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   rm   r   rM   r   r   r    test_S4  s    
zTestCommonNeighbors.test_S4c                 C   sT   t tj4 t }|ddg | |dd W d    n1 sF0    Y  d S )Nr   r   r   r   )rX   rY   r   ZNetworkXNotImplementedr   r]   r   rM   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   ri   rX   rY   rZ   r   rM   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   r[   r   rM   r   r   r    test_custom1  s    z TestCommonNeighbors.test_custom1c                 C   s"   t d}| |ddg d dS )zCase of equal nodes.r   r   r   Nr   rM   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:J |jd | |ksPJ |jd | |ksfJ t jd| d}ttt| tt|}d}t ||| |jd | dksJ |jd | dksJ |jd | dksJ t jd| d}dd	d
}t	| |}|
d t || |jd i ks8J |jd d dksPJ |jd d d	kshJ d S )Nr   Zcreate_usingrg   hellor   r   r   hi   r   r   )r   rc   set_node_attributesr#   dictzipr'   r   rl   rL   ro   )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s6J d|jvsDJ 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   rR   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<J |d d | |ksTJ t jd| d}d}dd	g}tt|tt|}t ||| |d d | dksJ |d d | dksJ t jd| d}dd
d}dg}t||}t || |d d d dksJ |d d d d
ks,J |d d i ksBJ d S )Nr   r   r   r   r   r   r   r   r   r   r   r   rc   set_edge_attributesr   r   r   rl   rL   r   r   r   r   r&   r   r   r   r    test_set_edge_attributes  s*    
r   rD   r8   )r   r   r)   c                 C   sD   t dg}t || | |d d d dks2J d|jvs@J 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)   rD   r   N)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@J |d d d | |ks\J t jd| d}d}dd	g}tt|tt|}t ||| |d d d | dksJ |d d d | dksJ t jd| d}dd
d}dg}t||}t || |d d d d dks&J |d d d d d
ksDJ |d d d i ks^J d S )Nr   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s8J |d d d i ksPJ d| vs`J dS )	r   r   r   r   r   r   r   r)   rD   r   N)r   
MultiGraphr   r&   r   r   r   r    2test_set_edge_attributes_multi_ignores_extra_edgesU  s
    r   c                  C   s   t  t  t  t  g} | D ]}t jd|d}d}d}t ||| t ||}|d |ksdJ |d |kstJ |d |ksJ d}|d t j|||d	}|d |ks J q d S )
Nr   r   r   rg   r   r   r   r   default)	r   r   r   r   MultiDiGraphrc   r   Zget_node_attributesrR   )graphsr   r   r   attrsdefault_valr   r   r    test_get_node_attributesg  s    
r   c                  C   s   t  t  t  t  g} | D ]}t jd|d}d}d}t ||| t ||}t|dksdJ |j	D ]}|| |ksjJ qj|}|
dd t j|||d}t|dksJ |j	D ]}|| |ksJ qq d S )	Nr   r   r   rg   r   r   r   r   )r   r   r   r   r   rc   r   Zget_edge_attributesrl   r&   rT   )r   r   r   r   r   re   r   Zdeafult_attrsr   r   r    test_get_edge_attributesx  s     

r   c                  C   sp   t  t  t  t  g} | D ]J}t |s2J |td t |sNJ |ddg t |r J q d S )Nr   r   rz   )	r   r   r   r   r   Zis_emptyr[   r   r]   )r   r   r   r   r    test_is_empty  s    r   c                 C   s|   t jd| d}|dd tt |dgs0J tt |dgsFJ tt j|ddddi fgsfJ t |dksxJ d S )Nr   r   r   r   r   Tr9   r   )r   ri   rT   r   Znodes_with_selfloopsr   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sVJ tt j|d	dd
dgsrJ d S )Nr   r   r   r   r   r*   Tr9   r)   )r   r   N)r   r   r   )r   ri   rT   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sNJ d S )Nr   r   r   rs   r*   rg   r)   Tr:   keys)r   r   r   rs   )r   r   r   rg   )r   ri   r   rT   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   r9   )r   r:   )r   ri   rT   r^   r   r   r   r   r    test_selfloops_removal  s    r   c                 C   sP  t jd| d}|dd |dd |t | d| vsFJ |dd |dd tt$ |t j|dd W d   n1 s0    Y  |dd |dd tt	$ |t j|dd W d   n1 s0    Y  |dd |dd tt& |t j|ddd	 W d   n1 sB0    Y  dS )
z[test removing selfloops behavior vis-a-vis altering a dict while iterating.
    cf. gh-4068r   r   r   r   Tr   Nr9   r   )
r   ri   rT   r^   r   r&   rX   rY   RuntimeError	TypeErrorr   r   r   r    test_selfloops_removal_multi  s"    22r   c                  C   s   g d} g d}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sJ t || ddksJ tt j	t j||d
 q^d S )Nr   )r   r   r   r   r   r   r   )costdistr   r   r   r   )
r   r   r   r   r   r]   Zpath_weightrX   rY   ZNetworkXNoPath)
valid_pathinvalid_pathr   r&   rJ   r   r   r    test_pathweight  s    
r   r   c                 C   sZ   |  g d g d}g d}g d}t| |s6J t| |rFJ t| |rVJ d S )N)r   rx   r   rz   )r   r   r   r   )r   r   r   r   )r   r   r   r   r   )r]   r   Zis_path)r   r   r   Zanother_invalid_pathr   r   r    test_ispath  s    r   c                 C   s`   |  g d | d t| g dddg}t| h dksFJ t| dhks\J d S )Nr   r   r   r   r   r   rz      r   r   r   r   r]   rR   r   Zrestricted_viewsetr#   r&   r   rG   r   r   r    test_restricted_view  s
    
r   c                 C   s`   |  g d | d t| g dddg}t| h dksFJ t| dhks\J d S )N)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   )!rj   rX   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|      /








	

	





