o
    &?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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   e/home/www/facesmatcher.com/pyenv/lib/python3.10/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s!J t | jjg ddttj| jg dds9J t| jjg ddttj| jg ddksRJ 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s!J t | jjddgdttj| jddgds9J t| jjddgdttj| jddgdksRJ t | jjddttj| jddsfJ t| jjddttj| jddks{J 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s&J d S )Nr   )r   r   	neighborsr   r   r   r   r   r    test_neighbors3   s   &*zTestFunction.test_neighborsc                 C   8   | j  t| j ksJ | j t| jksJ d S r"   )r   Znumber_of_nodesr   r   r   r   r   r    test_number_of_nodes7      z!TestFunction.test_number_of_nodesc                 C   r.   r"   )r   Znumber_of_edgesr   r   r   r   r   r    test_number_of_edges;   r0   z!TestFunction.test_number_of_edgesc                 C   r.   r"   )r   Zis_directedr   r   r   r   r   r    test_is_directed?   r0   zTestFunction.test_is_directedc                 C   s  | j  }g d}t|| t||g dsJ | 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sFJ | j  }dg}t|| t|t| j | s`J | j  }g }t|| t|j| j	svJ t|j| j jsJ d S )N            )r4   r5   )r4   r6   r4   r7          @r*   Tdatar4   r5   r)   r6   r7   )
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   sR  | j  }g d}t|| t||g dsJ | 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sFJ | j  }dg}t|| t||g s^J t|t| j dg skJ | j  }tdg}t|| t|dgg sJ t|t| j dg sJ | j  }dg}t|| t||g sJ t|t| j dg sJ | 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sJ t|t| j s'J d S )Nr3   )r8   r5   r6   r6   r7   r:   r*   Tr;   r4   r5   r)   r6   r7   node)	r   r=   r   Zadd_pathr   r&   r   r   iterr>   r   r   r    test_add_path_   sV   


	






zTestFunction.test_add_pathc                 C   sX  | j  }g d}g dg dg}t|| t|||v s"J | 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 spJ | j  }dg}t|| t|t| j | sJ | j  }g }t|| t|j| j	sJ t
|j| j jsJ d S )Nr3   )r8   r9   rA   rB   )r8   rA   rB   )r7   r4   r4   r5   r)         ?r7   r6   r*   Tr;   )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s*J | j g djt| j g djks?J | jg djt| jg djksTJ t| j g dg d}|j| j usjJ |j| j g djksxJ 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s*J d S )Nr   r   )r   Zedge_subgraphrH   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sJ |ji | j i ks'J |j	i | j i ks5J t | j}t|t| jsEJ |j| jjksNJ |j| jjksWJ |j	i | j i kseJ 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s&J d S )Ng      ?g333333?r           )r   densityr   r   r   add_noderO   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s"J d S )Nr   rR   r   r:   )r   r   add_edgerS   rO   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NetworkXErrorrT   add_nodes_fromremove_nodeZremove_nodes_fromrV   add_edges_fromZremove_edgeremove_edges_fromZclear_edgesclearrO   r   r   r    test_freeze   s   
zTestFunction.test_freezec                 C   s@   t | jrJ t | j}|jt | jksJ |jsJ d S r"   )r   	is_frozenr   rX   rY   rO   r   r   r    test_is_frozen  s   zTestFunction.test_is_frozenc                 C   6   t t d}|jd }d|d< |d dksJ d S )Nr   r   TZnode_attribute)r   rX   
path_graphr#   )r   r   rC   r   r   r    6test_node_attributes_are_still_mutable_on_frozen_graph     
zCTestFunction.test_node_attributes_are_still_mutable_on_frozen_graphc                 C   re   )Nr   r   TZedge_attribute)r   rX   rf   r&   )r   r   edger   r   r    6test_edge_attributes_are_still_mutable_on_frozen_graph  rh   zCTestFunction.test_edge_attributes_are_still_mutable_on_frozen_graphc                 C   s   t d}tt|d}tt ||d }t|t|d ks#J t d}tt|dd }tt ||}|dkrK|dkrKt|dksJJ nt|dksSJ t d}tt |d}t|dkshJ d S )Nd   r   r   c   r   )	r   complete_graphrandomsampler   r,   lenrf   
star_graphr   rL   popZnborsrC   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rG|dkrGt|dksFJ nt|dksOJ t d}tt |d}t|dksdJ t 	 }|
td tt |d}t|dksJ d S )	Nrk   r   r   rl   a   b   
   	   )r   rm   rn   ro   r   Znon_neighborsrp   rf   rq   r   r]   r   rr   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 s8||f|v s8J q&t d}g d}tt |}|D ]\}}||f|v s]||f|v s]J qKt  }|g d g d}tt |}|D ]}||v s~J qvd S )Nr   r   r   )r   r   r   r   )r   rz   r   r   r   r   r   r   r   r   )r   )r   r   )r   r   )r   r   r   )	r   rm   r   Z	non_edgesrp   rf   rq   r   r_   )r   rL   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 |r3J t |ds;J t  }|g d t |sMJ t |dsUJ | }t |s`J t |dshJ t	
t jt j|d d S )	Nr   r|   r   r*   r~   )03r   r   1)r   r   r   r   2r   )r   r   r   r   r   r   r   r   r   )r   r   Zis_weightedrf   rT   rV   r   add_weighted_edges_fromZto_undirectedrZ   r[   r\   rO   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 |rDJ t |drLJ d|d d d< t |ds\J t |scJ t  }|g d t |suJ t |dr}J t |dsJ t	
t jt j|d d S )Nr   )r   r   r   r   r   r   r*   r   )rz   r}   )r      bluer   colorrz   r)   r}   )r   r   )r   r   r   r   )r   r   r   )r   r   r   r{   )r   r   Zis_negatively_weightedrT   r]   rV   r_   r   r   rZ   r[   r\   rO   r   r   r    test_is_negatively_weighted  s,   

z(TestFunction.test_is_negatively_weightedN)__name__
__module____qualname__r!   r$   r(   r+   r-   r/   r1   r2   r@   rE   rG   rJ   rK   rP   rQ   rU   rW   rb   rd   rg   rj   rt   ry   r   r   r   r   r   r   r    r   	   s6    
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   rm   r   rO   r   r   r    test_K5  s   
zTestCommonNeighbors.test_K5c                 C       t d}| |dddg d S )Nr   r   r   r   )r   rf   r   rO   r   r   r    test_P3     
zTestCommonNeighbors.test_P3c                 C   r   )Nr   r   r   r   )r   rq   r   rO   r   r   r    test_S4  r   zTestCommonNeighbors.test_S4c                 C   sV   t tj t }|ddg | |dd W d    d S 1 s$w   Y  d S )Nr   r   r   r   )rZ   r[   r   ZNetworkXNotImplementedr   r_   r   rO   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   rm   rZ   r[   r\   r   rO   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   rO   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   rO   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   sf  t jd| d}d}d}t ||| |jd | |ksJ |jd | |ks(J |jd | |ks3J t jd| d}ttt| tt|}d}t ||| |jd | dks]J |jd | dkshJ |jd | dkssJ t jd| d}dd	d
}t	| |}|
d t || |jd i ksJ |jd d dksJ |jd d d	ksJ d S )Nr   Zcreate_usingrk   hellor   r   r   hi   r   r   )r   rf   set_node_attributesr#   dictzipr'   r   rp   rN   rs   )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sJ d|jvs"J 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   rT   r   r#   r   r   r   r   r   r    ,test_set_node_attributes_ignores_extra_nodes  s
   
r   c                 C   s@  t jd| d}d}d}t ||| |d d | |ksJ |d d | |ks*J t jd| d}d}dd	g}tt|tt|}t ||| |d d | dksUJ |d d | dksaJ t jd| d}dd
d}dg}t||}t || |d d d dksJ |d d d d
ksJ |d d i ksJ d S )Nr   r   r   r   r   r   r   r   r   r   r   r   rf   set_edge_attributesr   r   r   rp   rN   r   r   r   r   r&   r   r   r   r    test_set_edge_attributes  s*   
r   rF   r:   )r   r   r)   c                 C   sD   t dg}t || | |d d d dksJ 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)   rF   r   N)r   r   r   r&   r   r   r   r    ,test_set_edge_attributes_ignores_extra_edges&  s   r   c                 C   s\  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s[J |d d d | dksiJ t jd| d}dd
d}dg}t||}t || |d d d d dksJ |d d d d d
ksJ |d d d i ksJ 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sJ |d d d i ks(J d| vs0J dS )	r   r   r   r   r   r   r   r)   rF   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 ]I}t jd|d}d}d}t ||| t ||}|d |ks2J |d |ks:J |d |ksBJ d}|d t j|||d	}|d |ksYJ qd S )
Nr   r   r   rk   r   r   r   r   default)	r   r   r   r   MultiDiGraphrf   r   Zget_node_attributesrT   )graphsr   r   r   attrsdefault_valr   r   r    test_get_node_attributesg  s   
r   c                  C   s   t  t  t  t  g} | D ]V}t jd|d}d}d}t ||| t ||}t|dks2J |j	D ]
}|| |ks?J q5|}|
dd t j|||d}t|dksXJ |j	D ]
}|| |kseJ q[qd S )	Nr   r   r   rk   r   r   r   r   )r   r   r   r   r   rf   r   Zget_edge_attributesrp   r&   rV   )r   r   r   r   r   ri   r   Zdeafult_attrsr   r   r    test_get_edge_attributesx  s$   

r   c                  C   sp   t  t  t  t  g} | D ]%}t |sJ |td t |s'J |ddg t |r5J qd S )Nr   r   r~   )	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sJ tt |dgs#J tt j|ddddi fgs3J t |dks<J d S )Nr   r   r   r   r   Tr;   r   )r   rm   rV   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s+J tt j|d	dd
dgs9J d S )Nr   r   r   r   r   r*   Tr;   r)   )r   r   N)r   r   r   )r   rm   rV   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s'J d S )Nr   r   r   rw   r*   rk   r)   Tr<   keys)r   r   r   rw   )r   r   r   rk   )r   rm   r   rV   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   r;   )r   r<   )r   rm   rV   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s#J |dd |dd tt |t j|dd W d   n1 sIw   Y  |dd |dd tt	 |t j|dd W d   n1 stw   Y  |dd |dd tt |t j|ddd	 W d   dS 1 sw   Y  dS )
z[test removing selfloops behavior vis-a-vis altering a dict while iterating.
    cf. gh-4068r   r   r   r   Tr   Nr;   r   )
r   rm   rV   r`   r   r&   rZ   r[   RuntimeError	TypeErrorr   r   r   r    test_selfloops_removal_multi  s(   "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 ](}|| t || d
d	ksAJ t || ddksLJ 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_weightrZ   r[   ZNetworkXNoPath)
valid_pathinvalid_pathr   r&   rL   r   r   r    test_pathweight  s   
r   r   c                 C   sZ   |  g d g d}g d}g d}t| |sJ t| |r#J t| |r+J d S )N)r   r|   r   r~   )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   `   |  g d | d t| g dddg}t| h dks#J t| dhks.J d S )Nr   r   r   r   r   r   r~      r   r   r   r   r_   rT   r   Zrestricted_viewsetr#   r&   r   rI   r   r   r    test_restricted_view  s
   
r   c                 C   r   )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   )!rn   rZ   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~       /





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




