o
    hx                     @   s   d dl Z d dlZd dlZd dlZd dlZd dlZd dlmZm	Z	m
Z
 G dd dZG dd deZG dd deZG d	d
 d
ZdS )    N)edges_equalgraphs_equalnodes_equalc                   @   s   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Zdd Z	dd Z
ejje dkdd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'S )(BaseGraphTesterz:Tests for data-structure independent graph class features.c                 C   sJ   | j }d|v s	J d|vsJ d|vsJ g |vsJ ddi|vs#J d S )N      b)K3selfG r   U/var/www/vscode/kcb/lib/python3.10/site-packages/networkx/classes/tests/test_graph.pytest_contains   s   zBaseGraphTester.test_containsc                 C   s:   | j }t|dksJ | dksJ | dksJ d S N   )r	   lenordernumber_of_nodesr
   r   r   r   
test_order   s   zBaseGraphTester.test_orderc                    s   | j  t j jsJ t j jsJ t fdd j D s%J t 	 | j
ks0J t j	dddi fdi fdi fgksEJ d S )Nc                 3   s    | ]	}t | jV  qd S N)
isinstanceadjlist_inner_dict_factory).0adjr   r   r   	<genexpr>!   s    
z-BaseGraphTester.test_nodes.<locals>.<genexpr>Tdatar   r      )r	   r   _nodenode_dict_factory_adjadjlist_outer_dict_factoryallvaluessortednodesk3nodesr   r   r   r   
test_nodes   s   .zBaseGraphTester.test_nodesc                 C   s   |   }tt |d  W d    n1 sw   Y  tt |d g W d    n1 s4w   Y  tt |dd  W d    n1 sOw   Y  tt |dg W d    d S 1 skw   Y  d S )Nr   r   N)Graphpytestraises
ValueErroradd_nodeadd_nodes_fromadd_edgeadd_edges_fromr
   r   r   r   test_none_node'   s   "zBaseGraphTester.test_none_nodec                 C   sF   | j }|ds
J |drJ |g rJ |ddir!J d S )Nr   r   )r	   has_noder
   r   r   r   test_has_node2   s
   zBaseGraphTester.test_has_nodec                 C   s*   | j }|ddsJ |ddrJ d S )Nr   r   )r	   has_edger
   r   r   r   test_has_edge9      zBaseGraphTester.test_has_edgec                 C   s\   | j }t|dddgksJ ttj |d W d    d S 1 s'w   Y  d S Nr   r   r   r7   )r	   r&   	neighborsr-   r.   nxNetworkXErrorr
   r   r   r   test_neighbors>   s
   "zBaseGraphTester.test_neighborsPyPyzPyPy gc is different)reasonc                 C   s   |   }dd }t  || j }|  t  || j }||ks$J G dd d| j }t  | }||}|  t  ||}||ksJJ d S )Nc                    s   t  fddt D S )Nc                 3   s*    | ]}t |tjst | rd V  qdS )r   N)r   weakref
ProxyTypes)r   obj_typer   r   r   S   s    

zRBaseGraphTester.test_memory_leak.<locals>.count_objects_of_type.<locals>.<genexpr>)sumgcget_objectsrE   r   rE   r   count_objects_of_typeJ   s   	z?BaseGraphTester.test_memory_leak.<locals>.count_objects_of_typec                   @   s   e Zd ZdS )z1BaseGraphTester.test_memory_leak.<locals>.MyGraphN)__name__
__module____qualname__r   r   r   r   MyGrapha   s    rN   )r,   rH   collectcopy)r   r   rJ   beforeafterrN   r   r   r   test_memory_leakD   s    

z BaseGraphTester.test_memory_leakc                 C   s   | j }t|j|jsJ t| g dsJ t|dddgs#J t|ddgg ds1J ttj	 |d W d    d S 1 sHw   Y  d S )Nr   r   r   r   r   r   r   rU   rV   r   r7   )
r	   r   r"   r#   r   edgesr-   r.   r=   r>   r
   r   r   r   
test_edgesl   s   "zBaseGraphTester.test_edgesc                 C   s   | j }t| g dksJ t| ddddksJ |ddks&J ttj |d W d    d S 1 s=w   Y  d S )N)rV   rW   )r   r   r   r   r   r   r   r7   )r	   r&   degreedictr-   r.   r=   r>   r
   r   r   r   test_degreeu   s   "zBaseGraphTester.test_degreec                 C   s*   | j }| dksJ | dksJ d S r   )r	   sizenumber_of_edgesr
   r   r   r   	test_size}   r:   zBaseGraphTester.test_sizec                 C   s  | j }t| | jsJ t|ddgsJ t|ddgddgs&J t|dgg s1J t|dg s;J |d}tjtjdd t| W d    n1 sWw   Y  |dddi g}tjtjdd t| W d    d S 1 s}w   Y  d S )	Nr   r   r7   foozis not a node or a sequence)matchr   z&in sequence nbunch is not a valid node)	r	   r   nbunch_iterr(   r-   r.   r=   r>   list)r   r   bunchr   r   r   test_nbunch_iter   s    


"z BaseGraphTester.test_nbunch_iterc                 C   sT   |   }dt fg}ttj t|| W d    d S 1 s#w   Y  d S )Nx)r,   setr-   r.   r=   r>   rd   rc   )r   r   nbunchr   r   r   "test_nbunch_iter_node_format_raise   s
   "z2BaseGraphTester.test_nbunch_iter_node_format_raisec                 C   s   |   }|dd t| dgksJ t| ddiks!J |ddks*J t|dgdgks7J |jddddksBJ d S )Nr   rW   r   weightrk   )r,   r2   r&   r[   r\   r
   r   r   r   test_selfloop_degree   s   z$BaseGraphTester.test_selfloop_degreec                 C   s   | j  }|dd tt|dgsJ tt|dgs!J t|dks*J |	dd |dd |
dg |dd |d |dd |dd |ddg d S )Nr   r   r   r   )r	   rP   r2   r   r=   nodes_with_selfloopsr   selfloop_edgesnumber_of_selfloopsremove_edgeremove_edges_fromremove_noderemove_nodes_fromr
   r   r   r   test_selfloops   s   

zBaseGraphTester.test_selfloopsc                 C   s~   | j  }|j}t|jt|ksJ i |_t|jt|ks!J |j}t|jt|ks/J i |_t|jt|ks=J d S r   )r	   rP   r   idr"   r'   r    )r   r   old_adj	old_nodesr   r   r   test_cache_reset   s   
z BaseGraphTester.test_cache_resetc                 C   sn   | j  }t|jt|jksJ t|jt|jksJ t|jt|jks)J t|jt|jks5J d S r   )r	   rP   rw   r'   rX   r[   r   r
   r   r   r   test_attributes_cached   s
   
z&BaseGraphTester.test_attributes_cachedN)rK   rL   rM   __doc__r   r   r*   r4   r6   r9   r?   r-   markskipifplatformpython_implementationrS   rY   r]   r`   rf   rj   rm   rv   rz   r{   r   r   r   r   r      s,    

%		r   c                   @   s8  e Zd 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d0d1 Zd2d3 Zd4d5 Zd6d7 Zd8d9 Zd:d; Z d<d= Z!d>d? Z"d@dA Z#dBdC Z$dDdE Z%dFdG Z&dHdI Z'dJdK Z(dLS )MBaseAttrGraphTesterz(Tests of graph class attribute features.c                 C   s  |   }|jddddd |jddddd tdd |jdd	D g d
ks)J t|jdd	ddddks9J |jddd	dksDJ t|jdgdd	dgsRJ tdd |jdd	D g dsdJ t|jdd	ddddkstJ |jddd	dksJ t|jdgdd	dgsJ d S )Nr   r   r   )rk   otherr   c                 s       | ]\}}|V  qd S r   r   r   ndr   r   r   r          z;BaseAttrGraphTester.test_weighted_degree.<locals>.<genexpr>rk   rl   )r   r      r   )r   r   r   rW   c                 s   r   r   r   r   r   r   r   r      r   r   )r      r   r   )r   r   )r,   r2   r&   r[   r\   r   r   r
   r   r   r   test_weighted_degree   s   & $  z(BaseAttrGraphTester.test_weighted_degreec                 C   sL   g |j d< g |jd d< |dd g }|jdd|d |jdd|d d S )Nra   r   r   r   ra   )graphr'   rr   r2   )r   r   llr   r   r   add_attributes   s   
z"BaseAttrGraphTester.add_attributesc                 C   s8   | j dd}|jdksJ | j dd}|jdksJ d S )N nametest)r,   r   r
   r   r   r   	test_name   s   zBaseAttrGraphTester.test_namec                 C   s6   |   }|ddg t|t|j dksJ d S )NrW   r   r   z with 3 nodes and 2 edgesr,   r3   strtyperK   r
   r   r   r   test_str_unnamed   s    z$BaseAttrGraphTester.test_str_unnamedc                 C   s:   | j dd}|ddg t|t|j dksJ d S )Nra   r   rW   r   z% named 'foo' with 3 nodes and 2 edgesr   r
   r   r   r   test_str_named   s    z"BaseAttrGraphTester.test_str_namedc                 C   sb   |  ddg}|jdd}|ddg}|jdd}||ju s!J ||ju s(J ||ju s/J d S )	NrU   rW   Tas_viewr   r   F)rP   )r,   to_directedsubgraphreverse_graph)r   r   DGSDGRSDGr   r   r   test_graph_chain   s   z$BaseAttrGraphTester.test_graph_chainc                 C   sX   |   }|d |dd | | | }| || | || | || d S Nr   r   r   )r,   r0   r2   r   rP   r   different_attrdictshallow_copy_attrdictr   r   Hr   r   r   	test_copy  s   

zBaseAttrGraphTester.test_copyc                 C   sZ   |   }|d |dd | | ||}| || | || | || d S r   )r,   r0   r2   r   	__class__r   r   r   r   r   r   r   test_class_copy  s   


z#BaseAttrGraphTester.test_class_copyc                 C   s   |   }|d |dd | | | }|| ||  t|j	d dks/J |
 r<|jd d d n|jd d }t|dksKJ t|j	d dksVJ |
 rc|jd d d n|jd d }t|dksrJ d S r   )r,   r0   r2   r   r   r1   r3   rX   r   r'   is_multigraphr   )r   r   r   ddictr   r   r   test_fresh_copy  s   


((z#BaseAttrGraphTester.test_fresh_copyc                 C   (   |  || | || | || d S r   )r   r   deep_copy_attrdictr   r   r   r   r   r   is_deepcopy'     zBaseAttrGraphTester.is_deepcopyc                 C   r   r   )deepcopy_graph_attrdeepcopy_node_attrdeepcopy_edge_attrr   r   r   r   r   ,  r   z&BaseAttrGraphTester.deep_copy_attrdictc                 C   sD   |j d |j d ksJ |j d d |j d |j d ks J d S Nra   r   r   appendr   r   r   r   r   1     z'BaseAttrGraphTester.deepcopy_graph_attrc                 C   sX   |j d d |j d d ksJ |j d d d |j d d |j d d ks*J d S Nr   ra   r   r'   r   r   r   r   r   r   6      $z&BaseAttrGraphTester.deepcopy_node_attrc                 C   sb   |d d d |d d d ksJ |d d d  d |d d d |d d d ks/J d S Nr   r   ra   r   r   r   r   r   r   ;     $(z&BaseAttrGraphTester.deepcopy_edge_attrc                 C   s   |  || | || d S r   )r   r   r   r   r   r   is_shallow_copy@  s   z#BaseAttrGraphTester.is_shallow_copyc                 C   r   r   )shallow_copy_graph_attrshallow_copy_node_attrshallow_copy_edge_attrr   r   r   r   r   D  r   z)BaseAttrGraphTester.shallow_copy_attrdictc                 C   sD   |j d |j d ksJ |j d d |j d |j d ks J d S r   r   r   r   r   r   r   I  r   z+BaseAttrGraphTester.shallow_copy_graph_attrc                 C   sX   |j d d |j d d ksJ |j d d d |j d d |j d d ks*J d S r   r   r   r   r   r   r   N  r   z*BaseAttrGraphTester.shallow_copy_node_attrc                 C   sb   |d d d |d d d ksJ |d d d  d |d d d |d d d ks/J d S r   r   r   r   r   r   r   S  r   z*BaseAttrGraphTester.shallow_copy_edge_attrc                 C   s   |d d d }d|j d d d< |j|jksJ ||j d d d< |j|jks*J |jd d }d|jd d< |j|jks@J ||jd d< |j|jksOJ d S Nr   r   ra   bazr   )r   rX   r'   r   r   r   old_foor   r   r   same_attrdictX     z!BaseAttrGraphTester.same_attrdictc                 C   s   |d d d }d|j d d d< |j|jksJ ||j d d d< |j|jks*J |jd d }d|jd d< |j|jks@J ||jd d< |j|jksOJ d S r   )r   r"   r'   r    r   r   r   r   r   e  r   z&BaseAttrGraphTester.different_attrdictc                 C   s(  |j |j ksJ |j|jksJ |j|jksJ |j|jks J | sJ| sJ|j d d |j d d u s8J |j d d |j d d u sHJ d S | sV|j |_|j |_| sb|j |_|j |_|j|jksjJ |j|jksrJ |jd d |jd d u sJ |jd d |jd d u sJ d S )Nr   r   )r"   r    r   r   is_directed_pred_succr   r   r   r   r   r  s"    $ $z BaseAttrGraphTester.graphs_equalc                 C   sp   | j  }d|jd< t|j|jsJ |jd dksJ |jd= |ji ks'J | jdd}|jd dks6J d S )Nbarra   r   )r	   rP   r   r   graph_attr_dict_factoryr,   r   r   r   r   test_graph_attr  s   

z#BaseAttrGraphTester.test_graph_attrc                    s   | j    jddd t fdd jddD sJ t  g ds(J t jddd	i fdd
difdi fgs>J d jd d
< t jddd	i fdd
difdi fgs[J t jd
dg dshJ t jd
ddg dsvJ d S )Nr   r   r   c                 3   s     | ]\}}t | jV  qd S r   )r   node_attr_dict_factory)r   ur   r   r   r   r     s    
z5BaseAttrGraphTester.test_node_attr.<locals>.<genexpr>Tr   rZ   r   ra   r   r   )r+   r   r   )r   N)r   default))r   r   r   )r   r   )r	   rP   r0   r$   r'   r   r)   r   r   r   test_node_attr  s   

,,z"BaseAttrGraphTester.test_node_attrc                 C   sn   | j  }ddi}|jd
i | t| g dsJ t|jdddi fdi fd	i fdddifgs5J d S )Nra   r   r   r   r   r   r   Tr   r   r   r   )r   )r	   rP   r0   r   r'   )r   r   ar   r   r   test_node_attr2  s   
(z#BaseAttrGraphTester.test_node_attr2c                 C   s4   |   }|jdddd t|jd ddisJ d S )Nr   r   r   r   rW   ra   )r,   r2   r   rX   r
   r   r   r   test_edge_lookup  s   z$BaseAttrGraphTester.test_edge_lookupc                    sx   |     jdddd t fdd jddD sJ t jddddd	difgs.J t jd	dd
gs:J d S )Nr   r   r   r   c                 3   s"    | ]\}}}t | jV  qd S r   )r   edge_attr_dict_factory)r   r   vr   r   r   r   r     s    
z5BaseAttrGraphTester.test_edge_attr.<locals>.<genexpr>Tr   ra   )r   r   r   )r,   r2   r$   rX   r   r)   r   r   r   test_edge_attr  s   
"z"BaseAttrGraphTester.test_edge_attrc                 C   sf   |   }|jddgdd t|jddddddifd	d
ddifgs$J t|jddddgs1J d S )NrW   r   r   ra   r   Tr   r   r   r   r   )r   r   ra   )r   r   ra   )r,   r3   r   rX   r
   r   r   r   test_edge_attr2  s   $z#BaseAttrGraphTester.test_edge_attr2c                 C   s   |   }|jddddifddddifgdd	 t|jd
ddddddfdddddfgs0J |ddg |jdddddd t|jd
dddddddfgsTJ d S )Nr   r   rk       r   r   @   ra   r   Tr   )ra   rk   rW   r   r   r   r   spamr   )r,   r3   r   rX   rs   r2   r
   r   r   r   test_edge_attr3  s   &
z#BaseAttrGraphTester.test_edge_attr3c                 C   sB  |   }|jdddddd t|jddddddddfgs!J d	|d d d
< t|jddddd	dddfgs<J d|jd d d
< t|jddddddddfgsXJ d|jd d
< t|jddddddddfgsrJ ddg|jd d d< d|jd d d< dddddgdd}t|jdddd|fgsJ d S )Nr   r   r   r   ra   r   Tr   
   r         rW      listdatark   )r   r   r   r   rk   )r,   r2   r   rX   r   )r   r   ddr   r   r   test_edge_attr4  s4   "z#BaseAttrGraphTester.test_edge_attr4c                 C   J   | j }| | t|}| || | || | }| || d S r   )r	   r   r=   r,   r   r   to_undirectedr   r   r   r   r   test_to_undirected     

z&BaseAttrGraphTester.test_to_undirectedc                 C   s   t jd| jd}|jdd}||ju sJ |ddsJ |dds)| s)J tt j	|j
d tt j	|jdd |dd |ddsJJ |ddsV| sXJ d S d S Nr   )create_usingTr   r   r   r7   )r=   
path_graphr,   r   r   r8   r   r-   r.   r>   r0   r2   r   r   H2r   r   r   test_to_directed_as_view  s    z,BaseAttrGraphTester.test_to_directed_as_viewc                 C   s   t jd| jd}|jdd}||ju sJ |ddsJ |dds%J tt j|j	d tt j|j
dd |
dd |ddsFJ |ddsNJ d S r   )r=   r   r,   r   r   r8   r-   r.   r>   r0   r2   r   r   r   r   test_to_undirected_as_view  s   z.BaseAttrGraphTester.test_to_undirected_as_viewc                    s   |   }G  fddd| G  fddd|  | r%  n }| }t| s3J | }t|s>J d S )Nc                       $   e Zd Z fddZfddZdS )z9BaseAttrGraphTester.test_directed_class.<locals>.newGraphc                        S r   r   r)   
newDiGraphr   r   to_directed_class     zKBaseAttrGraphTester.test_directed_class.<locals>.newGraph.to_directed_classc                    r   r   r   r)   newGraphr   r   to_undirected_class  r   zMBaseAttrGraphTester.test_directed_class.<locals>.newGraph.to_undirected_classNrK   rL   rM   r   r   r   r   r   r   r   r         r   c                       r   )z;BaseAttrGraphTester.test_directed_class.<locals>.newDiGraphc                    r   r   r   r)   r   r   r   r     r   zMBaseAttrGraphTester.test_directed_class.<locals>.newDiGraph.to_directed_classc                    r   r   r   r)   r   r   r   r     r   zOBaseAttrGraphTester.test_directed_class.<locals>.newDiGraph.to_undirected_classNr   r   r   r   r   r     r  r   )r,   r   r   r   r   r   r   r   r   r   r   test_directed_class  s   z'BaseAttrGraphTester.test_directed_classc                 C   r   r   )r	   r   r=   DiGraphr   r   r   r   r   r   r   r   test_to_directed%  r   z$BaseAttrGraphTester.test_to_directedc                 C   s   | j }| | |g d}| || | || | || |d}|jdi iks/J |g }|ji ks;J |ji ksBJ d S )N)r   r   r   r   r   )r	   r   r   r   r   r   r   r   r   r   r   test_subgraph.  s   


z!BaseAttrGraphTester.test_subgraphc                 C   sr   | j  }|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s7J d S )
Nr   r   r   rl   Tr   rk   )r   r   N)r   r   r   )r	   rP   r2   r   r=   rp   r
   r   r   r   test_selfloops_attr<  s   
"z'BaseAttrGraphTester.test_selfloops_attrN))rK   rL   rM   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   r   r   r   r   r   r   r  r  r  r  r   r   r   r   r      sN    	
				r   c                   @   s   e Zd 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&S )'	TestGraphz;Tests specific to dict-of-dict-of-dict graph data structurec                 C   s   t j| _i i i }}}||d||d||dd| _g d| _g d| _|  | _| j| j_i | j_i | jjd< i | jjd< i | jjd< d S )	NrW   rV   rU   rZ   rT   r   r   r   )r=   r,   k3adjk3edgesr(   r	   r"   r    )r   ed1ed2ed3r   r   r   setup_methodK  s    



zTestGraph.setup_methodc                 C   sD   | j }tt|d}| || tt|}| || d S )Nr7   )r	   pickleloadsdumpsr   )r   r   pgr   r   r   test_pickleY  s
   zTestGraph.test_picklec                 C   sT   | j dgdgddd}|jdksJ t|j ddi ifddi ifgks(J d S )Nr   r   rW   r   r   )r,   r   r&   r   itemsr
   r   r   r   test_data_input`  s   .zTestGraph.test_data_inputc                 C   s8   | j }t| i i di i di i ddksJ d S )NrW   rV   rU   rZ   )r	   r\   	adjacencyr
   r   r   r   test_adjacencye  s   
zTestGraph.test_adjacencyc                 C   s   | j }|jd i i dksJ |d i i dksJ tt |d W d    n1 s/w   Y  tt |dg W d    d S 1 sKw   Y  d S )Nr   rW   jA)r	   r   r-   r.   KeyError__getitem__	TypeErrorr
   r   r   r   test_getitemm  s   "zTestGraph.test_getitemc                 C   s   |   }|d |jdi iksJ |jddd |jddd |jddd |jd d dks2J |jd d dks=J |jd d dksHJ |jddd |jddd |jddd |jd d dkshJ |jd d dkssJ |jd d dks~J d S )	Nr   r   redcr   bluer   r  )r,   r0   r   r'   r
   r   r   r   test_add_nodev  s   
zTestGraph.test_add_nodec                 C   s  |   }|g d |ji i i dksJ |jg ddd |jd d dks*J |jd d dks5J |jd |jd usAJ |jg ddd |jd d dksUJ |jd d dks`J |jd |jd uslJ |   }||jd	d
 |jd d dksJ |jd d dksJ |jd |jd usJ |jddddifdddifgdd |jd d dksJ |jd d dksJ |jd d dksJ |jd d dksJ d S )NrZ   r  r  r   r  r   r   r   Tr   greenr   cyan)r,   r1   r   r'   r   r   r   r   test_add_nodes_from  s*   $zTestGraph.test_add_nodes_fromc                 C   sl   | j  }|d |jdi idi idksJ ttj |d W d    d S 1 s/w   Y  d S )Nr   r   r   rW   r7   )r	   rP   rt   r   r-   r.   r=   r>   r
   r   r   r   test_remove_node  s   

"zTestGraph.test_remove_nodec                 C   s:   | j  }|ddg |jdi iksJ |dg d S r;   )r	   rP   ru   r   r
   r   r   r   test_remove_nodes_from  s   
z TestGraph.test_remove_nodes_fromc                 C   s   |   }|dd |jdi idi idksJ |   }|jd  |jdi idi idks/J |   }tt |d d W d    d S 1 sJw   Y  d S )Nr   r   rU   anything)r,   r2   r   r-   r.   r/   r
   r   r   r   test_add_edge  s   
"zTestGraph.test_add_edgec                 C   s  |   }|dddddifg |ji ddiddi idddiidks&J |   }|jdddddifddd	d
ifgdd |jd	diddddd	did	d
iddddd	d
iddks`J ttj |dg W d    n1 sww   Y  ttj |dg W d    n1 sw   Y  tt |dg W d    n1 sw   Y  tt |ddg W d    d S 1 sw   Y  d S )NrU   r   r   rk   r   rW   rZ   r   r   r   r   )rk   r   rV   )r   r   r   )r   r   )	r,   r3   r   r-   r.   r=   r>   r  r/   r
   r   r   r   test_add_edges_from  s4   
("zTestGraph.test_add_edges_fromc                 C   sx   | j  }|dd |jdi idi ii i ddksJ ttj |dd W d    d S 1 s5w   Y  d S )Nr   r   r   rU   rZ   r7   )r	   rP   rr   r   r-   r.   r=   r>   r
   r   r   r   test_remove_edge  s   
$"zTestGraph.test_remove_edgec                 C   sJ   | j  }|dg |jdi idi ii i ddksJ |dg d S )NrU   r   rZ   rn   )r	   rP   rs   r   r
   r   r   r   test_remove_edges_from  s   
$z TestGraph.test_remove_edges_fromc                 C   sN   | j  }d|jd< |  t|jg ksJ |ji ksJ |ji ks%J d S )Nr	   r   )r	   rP   r   clearrd   r'   r   r
   r   r   r   
test_clear  s   

zTestGraph.test_clearc                 C   sv   | j  }d|jd< t|j}|  t|j|ksJ |ji i i dks'J t|jg ks0J |jd dks9J d S )Nr	   r   rZ   )r	   rP   r   rd   r'   clear_edgesr   rX   )r   r   r'   r   r   r   test_clear_edges  s   


zTestGraph.test_clear_edgesc                 C   s   | j }ddi fddi fddi fg}t|jdd|sJ t|jdddddi fddi fgs0J t|jddgdd|s>J ttj |dd W d    d S 1 sVw   Y  d S )Nr   r   r   Tr   r7   )r	   r   rX   r-   r.   r=   r>   )r   r   	all_edgesr   r   r   test_edges_data  s   ("zTestGraph.test_edges_datac                 C   sv   | j  }|ddi ksJ |d d i ksJ |ddd u s#J |ddd u s-J |jdddddks9J d S )Nr   r   r   r   r7   )r   )r	   rP   get_edge_datar
   r   r   r   test_get_edge_data   s   
zTestGraph.test_get_edge_datac                 C   s  | j  }|jddddifgdddddifgd	 d
i fdi fdi fdi fdddifdi fdi fdi fg}t|j |ks@J | rid
di fd
di fdd
i fddi fdd
i fddi fddi fddddifg}nd
di fd
di fddi fddi fddddifg}t|j |ksJ |ji ksJ | j  }|dddddifgddddifg t|j |ksJ t|j |ksJ |ji ksJ | 	 }d|jd< |j
ddd |jd
ddd | }| 	 }|| t||sJ || t||sJ | 	 }|jddgd |jddhA t ksJ | d
ks#J | 	 }|jdgd t|j ddi fgks>J | dksGJ ttj t	   W d    d S 1 s`w   Y  d S )Nr   r   r^   r   )r   r      r   rk   )r'   rX   r   r   r   r   ra   r   g      ?rl   )r'   r   )rX   )r	   rP   updater&   r'   r   r   rX   r   r,   r0   r2   r   rh   r^   r-   r.   r=   r>   )r   r   nlistelistGGr   r   r   r   test_update  sp   
(


&


 $zTestGraph.test_updateN)rK   rL   rM   r|   r  r  r  r  r  r!  r$  r%  r&  r(  r)  r*  r+  r-  r/  r1  r3  r9  r   r   r   r   r  H  s(    		
	r  c                   @   sP   e Zd 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S )TestEdgeSubgraphz6Unit tests for the :meth:`Graph.edge_subgraph` method.c                 C   sl   t d}tdD ]}d| |j| d< q	d|jd d< d|jd d< d|jd< || _|ddg| _d S )	Nr   noder   edge01rU   edge34r   r   )	r=   r   ranger'   rX   r   r   edge_subgraphr   )r   r   ir   r   r   r  T  s   

zTestEdgeSubgraph.setup_methodc                 C   s   g dt | j ksJ dS )z.Tests that the subgraph has the correct nodes.r   r   r   r   N)r&   r   r'   r)   r   r   r   test_correct_nodesa  s   z#TestEdgeSubgraph.test_correct_nodesc                 C   s"   ddgt | jjddksJ dS )z.Tests that the subgraph has the correct edges.)r   r   r<  )r   r   r=  r   r   N)r&   r   rX   r)   r   r   r   test_correct_edgese  s   "z#TestEdgeSubgraph.test_correct_edgesc                 C   *   | j d g dt| j ksJ dS )zkTests that adding a node to the original graph does not
        affect the nodes of the subgraph.

        r   rA  N)r   r0   r&   r   r'   r)   r   r   r   r!  i     zTestEdgeSubgraph.test_add_nodec                 C   rD  )ziTests that removing a node in the original graph does
        affect the nodes of the subgraph.

        r   )r   r   r   N)r   rt   r&   r   r'   r)   r   r   r   r%  q  rE  z!TestEdgeSubgraph.test_remove_nodec                 C   s   | j D ]}| jj| | j j| ksJ qd| jjd d< | jjd | j jd ks*J d| j jd d< | jjd | j jd ks@J dS )z`Tests that the node attribute dictionary of the two graphs is
        the same object.

        ra   r   r   r   r   N)r   r   r'   )r   r   r   r   r   test_node_attr_dicty  s   
 z$TestEdgeSubgraph.test_node_attr_dictc                 C   s   | j  D ]\}}| jj||f | j j||f ksJ qd| jjd d< | jjd d | j jd d ks6J d| j jd d< | jjd d | j jd d ksPJ dS )z`Tests that the edge attribute dictionary of the two graphs is
        the same object.

        ra   rU   r   r   r   N)r   rX   r   )r   r   r   r   r   r   test_edge_attr_dict  s   &$(z$TestEdgeSubgraph.test_edge_attr_dictc                 C   s   | j j| jju s
J dS )zaTests that the graph attribute dictionary of the two graphs
        is the same object.

        N)r   r   r   r)   r   r   r   test_graph_attr_dict  s   z%TestEdgeSubgraph.test_graph_attr_dictN)rK   rL   rM   r|   r  rB  rC  r!  r%  rF  rG  rH  r   r   r   r   r:  Q  s    r:  )rH   r  r   rB   r-   networkxr=   networkx.utilsr   r   r   r   r   r  r:  r   r   r   r   <module>   s      D  {  