o
    ˷ef                     @   sH  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d0d1 Zej	
d2e e fd3d4 Zej	
d2e 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      Testnamer   r   r   r   r   r   r   r   r      r   r   r   r   r   r   r   r   r   r   r   r   )nxGraphGGdegreelistrangeGnodesGedgesDiGraphDGDGin_degreeDGout_degreeDGnodesDGedgesself r(   [/var/www/ideatree/venv/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   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r3   )r   r   degreer   r   r1   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   number_of_nodesr   r!   r&   r(   r(   r)   test_number_of_nodes7      z!TestFunction.test_number_of_nodesc                 C   r9   r+   )r   number_of_edgesr   r!   r&   r(   r(   r)   test_number_of_edges;   r<   z!TestFunction.test_number_of_edgesc                 C   r9   r+   )r   is_directedr   r!   r&   r(   r(   r)   test_is_directed?   r<   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            )rB   rC   )rB   rD   rB   rE          @r4   TdatarB   rC   r3   rD   rE   )
r   copyr   add_starr   r0   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 )NrA   )rF   rC   rD   rD   rE   rH   r4   TrI   rB   rC   r3   rD   rE   node)	r   rK   r   add_pathr   r0   r   r   iterrM   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 )NrA   )rF   rG   rP   rQ   )rF   rP   rQ   )rE   rB   rB   rC   r3         ?rE   rD   r4   TrI   )r   rK   r   	add_cycler1   r0   r   r   r,   r   r   )r'   r   rN   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   subgraphadjr   r!   induced_subgraph_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   edge_subgraphr[   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)	with_data)
r   create_empty_copyr   r   r   graph_nodefromkeysr,   _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   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_noderh   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   rl   r   rH   )r   r   add_edgerm   rh   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 d S )Nr   r   r   )r   freezer   frozenpytestraisesNetworkXErrorrn   add_nodes_fromremove_noderemove_nodes_fromrp   add_edges_fromremove_edgeremove_edges_fromclearrh   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   rr   rs   rh   r(   r(   r)   test_is_frozen  s   zTestFunction.test_is_frozenc                 C   sz   t d}d|_t |}d}||ksJ t j|dd}t|tks$J dg d}||ks1J tt j	t j|d d S )	Nr   path_graph(5)z4Graph named 'path_graph(5)' with 5 nodes and 4 edgesr   n
)$Node 1 has the following properties:	Degree: 2zNeighbors: 0 2i  )
r   
path_graphr   infotypestrjoinrt   ru   rv   r'   r   r   expected_graph_infoexpected_node_infor(   r(   r)   	test_info  s   

zTestFunction.test_infoc                 C   sx   t jdd}t |g d t |}d}||ksJ t j|dd}dg d}||ks/J tjt jt j|d	d d S )
Nr   r   r   z6DiGraph named 'path_graph(5)' with 5 nodes and 4 edgesr   r   r   )r   r   zNeighbors: 2)r   r    rS   r   r   rt   ru   rv   r   r(   r(   r)   test_info_digraph  s   
zTestFunction.test_info_digraphc                 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   r7   lenr   
star_graphr'   rd   popnborsrR   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 )	Nr   r   r   r   a   b   
   	   )r   r   r   r   r   non_neighborsr   r   r   r   rw   r   r   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   r   r   r   r   r   r   r   r   r   )r   )r   r   )r   r   )r   r   r   )	r   r   r   	non_edgesr   r   r   r    rz   )r'   rd   nedgesexpecteduver(   r(   r)   test_non_edgesW  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   r4   r   )03r   r   1)r   r   r   r   2r   )r   r   r   r   r   r   r   r   r   )r   r   is_weightedr   rn   rp   r    add_weighted_edges_fromto_undirectedrt   ru   rv   rh   r(   r(   r)   test_is_weightedq  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   r4   r   )r   r   )r      bluer   colorr   r3   r   )r   r   )r   r   r   r   )r   r   r   )r   r   r   r   )r   r   is_negatively_weightedrn   rw   rp   rz   r    r   rt   ru   rv   rh   r(   r(   r)   test_is_negatively_weighted  s,   

z(TestFunction.test_is_negatively_weightedN)__name__
__module____qualname__r*   r-   r2   r6   r8   r;   r>   r@   rO   rU   rY   r_   ra   ri   rk   ro   rq   r~   r   r   r   r   r   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+   )r1   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   r   r   rh   r(   r(   r)   test_K5  s   
zTestCommonNeighbors.test_K5c                 C       t d}| |dddg d S )Nr   r   r   r   )r   r   r   rh   r(   r(   r)   test_P3     
zTestCommonNeighbors.test_P3c                 C   r   )Nr   r   r   r   )r   r   r   rh   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   )rt   ru   r   NetworkXNotImplementedr    rz   r   rh   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   r   rt   ru   rv   r   rh   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   rw   r   rh   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   rh   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   create_usingr   hellor   r   r   hi   r   r   )r   r   set_node_attributesr,   dictzipr1   r   r   rf   r   )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   rn   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   r   set_edge_attributesr   r   r   r   rf   r   r   r   r   r0   r   r(   r(   r)   test_set_edge_attributes  s*   
r   rV   rH   )r   r   r3   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   r3   rV   r   N)r   r   r   r0   r   r(   r(   r)   ,test_set_edge_attributes_ignores_extra_edges9  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_multiJ  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   r3   rV   r   N)r   
MultiGraphr   r0   r   r(   r(   r)   2test_set_edge_attributes_multi_ignores_extra_edgesh  s
   r   c                  C   s   t  t  t  t  g} | D ]2}t jd|d}d}d}t ||| t ||}|d |ks2J |d |ks:J |d |ksBJ qd S )Nr   r   r   r   r   r   r   )r   r   r    r   MultiDiGraphr   r   get_node_attributes)graphsr   r   r   attrsr(   r(   r)   test_get_node_attributesz  s   r   c            	   
   C   s"  t  t  t  t  g} | D ]~}t jd|d}d}d}t ||| t ||}t|dks2J |	 rdddg}|D ]&\}}}z||||f dksMJ W q< t
yb   ||||f dks`J Y q<w qdd	g}|D ]#\}}z|||f dksyJ W qj t
y   |||f dksJ Y qjw qd S )
Nr   r   r   r   r   r   r	   r   r   )r   r   r    r   r   r   r   get_edge_attributesr   is_multigraphKeyError)	r   r   r   r   r   keysr   r   kr(   r(   r)   test_get_edge_attributes  s4   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   is_emptyrw   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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   TrI   r   )r   r   rp   r   nodes_with_selfloopsr   selfloop_edges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   r4   TrI   r3   )r   r   N)r   r   r   )r   r   rp   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   r   r4   r   r3   TrJ   r  )r   r   r   r   )r   r   r   r   )r   r   r   rp   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  rI   )r  rJ   )r   r   rp   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  NrI   r  )
r   r   rp   r|   r
  r0   rt   ru   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tdddfddtdd	dfddtdddfg}|D ](}|| t || d
d	ksDJ t || ddksOJ t	t j
t j||d
 q2d S )Nr   )r   r   r   r   r   r   r   )costdistr   r   r  r  )r   r   r    r   r   r   rz   path_weightrt   ru   NetworkXNoPath
valid_pathinvalid_pathr   r0   rd   r(   r(   r)   test_pathweight  s   
r  c                  C   sl   g d} g d}t  t  t  t  g}g d}|D ]}|| t || s+J t ||r3J qd S )N)r   r   r   r   )r   r   r   r   )r   r   r   r   )r   r   r    r   r   rz   is_pathr  r(   r(   r)   test_ispath  s   
r  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   rz   rn   r   restricted_viewsetr,   r0   r   r^   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(  )!r   rt   networkxr   networkx.utilsr   r   r   r   mark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>   sx       2/





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


