U
    9vfx                     @   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|kstd|kstd|ks*tg |ks6tddi|ksFtd S )N      b)K3AssertionErrorselfG r   E/tmp/pip-unpacked-wheel-_lngutwb/networkx/classes/tests/test_graph.pytest_contains   s    zBaseGraphTester.test_containsc                 C   s:   | j }t|dkst| dks&t| dks6td S N   )r	   lenr
   orderZnumber_of_nodesr   r   r   r   
test_order   s    zBaseGraphTester.test_orderc                    s   | j  t j jstt j js*tt fdd j D sJtt	 
 | jks`tt	 j
dddi fdi fdi fgkstd S )Nc                 3   s   | ]}t | jV  qd S N)
isinstanceZadjlist_inner_dict_factory).0adjr   r   r   	<genexpr>!   s    z-BaseGraphTester.test_nodes.<locals>.<genexpr>Tdatar   r      )r	   r   _nodeZnode_dict_factoryr
   _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 5 Q R X tt |d g W 5 Q R X tt |dd  W 5 Q R X tt |dg W 5 Q R X 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t|dr"t|g r0t|ddirBtd S )Nr   r   )r	   Zhas_noder
   r   r   r   r   test_has_node2   s
    zBaseGraphTester.test_has_nodec                 C   s*   | j }|ddst|ddr&td S )Nr   r   )r	   has_edger
   r   r   r   r   test_has_edge9   s    zBaseGraphTester.test_has_edgec              	   C   sF   | j }t|dddgks tttj |d W 5 Q R X d S Nr   r   r   r4   )r	   r$   Z	neighborsr
   r+   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sHtG dd d| j }t  | }||}|  t  ||}||kst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gcZget_objectsr@   r   r@   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   rH   )r*   rC   Zcollectcopyr
   )r   r   rD   beforeafterrH   r   r   r   test_memory_leakD   s     

z BaseGraphTester.test_memory_leakc              	   C   s   | j }t|j|jstt| dddgs0tt|dddgsHtt|ddgdddgsfttt	j
 |d W 5 Q R X d S )Nr   r   r   r   r   r   r   r   r4   )r	   r   r    r!   r
   r   edgesr+   r,   r8   r9   r   r   r   r   
test_edgesl   s    zBaseGraphTester.test_edgesc              	   C   st   | j }t| dddgks tt| ddddks<t|ddksNtttj |d W 5 Q R X d S )NrN   rO   )r   r   r   r   r   r   r   r4   )	r	   r$   degreer
   dictr+   r,   r8   r9   r   r   r   r   test_degreeu   s    zBaseGraphTester.test_degreec                 C   s*   | j }| dkst| dks&td S r   )r	   sizer
   Znumber_of_edgesr   r   r   r   	test_size}   s    zBaseGraphTester.test_sizec              	   C   s   | j }t| | jstt|ddgs0tt|ddgddgsLtt|dgg sbtt|dg svt|d}tjtjdd t	| W 5 Q R X |dddi g}tjtjdd t	| W 5 Q R X d S )	Nr   r   r4   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,   r8   r9   list)r   r   Zbunchr   r   r   test_nbunch_iter   s    
 z BaseGraphTester.test_nbunch_iterc              	   C   s>   |   }dt fg}ttj t|| W 5 Q R X d S )Nx)r*   setr+   r,   r8   r9   r[   rZ   )r   r   Z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*tt| ddiksBt|ddksTtt|dgdgksnt|jddddkstd S )Nr   rO   r   weightr`   )r*   r0   r$   rS   r
   rT   r   r   r   r   test_selfloop_degree   s    z$BaseGraphTester.test_selfloop_degreec                 C   s   | j  }|dd tt|dgs,ttt|dgsBtt	|dksTt|
dd |dd |dg |dd |d |dd |dd |ddg d S )Nr   r   r   r   )r	   rI   r0   r   r8   Znodes_with_selfloopsr
   r   selfloop_edgesZ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&ti |_t|jt|ksBt|j}t|jt|ks^ti |_t|jt|ksztd S r   )r	   rI   r   idr
   r    r%   r   )r   r   Zold_adjZ	old_nodesr   r   r   test_cache_reset   s    
z BaseGraphTester.test_cache_resetc                 C   sn   | j  }t|jt|jks"tt|jt|jks:tt|jt|jksRtt|jt|jksjtd S r   )r	   rI   rj   r%   r
   rP   rS   r   r   r   r   r   test_attributes_cached   s
    
z&BaseGraphTester.test_attributes_cachedN)rE   rF   rG   __doc__r   r   r(   r2   r3   r6   r:   r+   markZskipifplatformpython_implementationrL   rQ   rU   rW   r\   r_   rb   ri   rk   rl   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 ddd
gksTtt|jdd	dd
ddkstt|jddd	dkstt|jdgdd	dgsttdd |jdd	D dddgstt|jdd	ddddkst|jddd	dkstt|jdgdd	dgs"td S )Nr   r   r   )r`   otherr   c                 s   s   | ]\}}|V  qd S r   r   r   ndr   r   r   r      s     z;BaseAttrGraphTester.test_weighted_degree.<locals>.<genexpr>r`   ra      )r   r   r   rO   c                 s   s   | ]\}}|V  qd S r   r   rs   r   r   r   r      s     rr      )r   r   )r*   r0   r$   rS   r
   rT   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 )NrX   r   r   r   rX   )graphr%   re   r0   )r   r   Zllr   r   r   add_attributes   s    
z"BaseAttrGraphTester.add_attributesc                 C   s8   | j dd}|jdkst| j dd}|jdks4td S )N nametest)r*   r~   r
   r   r   r   r   	test_name   s    zBaseAttrGraphTester.test_namec                 C   s6   |   }|ddg t|t|j dks2td S )NrO   r   r   z with 3 nodes and 2 edgesr*   r1   strtyperE   r
   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s6td S )NrX   r}   rO   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ksBt||jksPt||jks^td S )	NrM   rO   TZas_viewr   r   F)rI   )r*   to_directedsubgraphreverse_graphr
   )r   r   ZDGZSDGZRSDGr   r   r   test_graph_chain   s    z$BaseAttrGraphTester.test_graph_chainc                 C   sX   |   }|d |dd | | | }| || | || | || d S Nr   r   r   )r*   r.   r0   r{   rI   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*   r.   r0   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^t
| rx|jd d d n|jd d }t|dkst
t|j	d dkst
| r|jd d d n|jd d }t|dkst
d S r   )r*   r.   r0   r{   r   r/   r1   rP   r   r%   r
   Zis_multigraphr   )r   r   r   Zddictr   r   r   test_fresh_copy  s    


((z#BaseAttrGraphTester.test_fresh_copyc                 C   s(   |  || | || | || d S r   )r   r   deep_copy_attrdictr   r   r   r   r   r   is_deepcopy'  s    zBaseAttrGraphTester.is_deepcopyc                 C   s(   |  || | || | || d S r   )deepcopy_graph_attrdeepcopy_node_attrdeepcopy_edge_attrr   r   r   r   r   ,  s    z&BaseAttrGraphTester.deep_copy_attrdictc                 C   sD   |j d |j d kst|j d d |j d |j d ks@td S NrX   r   rz   r
   appendr   r   r   r   r   1  s    z'BaseAttrGraphTester.deepcopy_graph_attrc                 C   sX   |j d d |j d d ks t|j d d d |j d d |j d d ksTtd S Nr   rX   r   r%   r
   r   r   r   r   r   r   6  s     z&BaseAttrGraphTester.deepcopy_node_attrc                 C   sb   |d d d |d d d ks$t |d d d d |d d d |d d d ks^t d S Nr   r   rX   r
   r   r   r   r   r   r   ;  s    $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   s(   |  || | || | || d S r   )shallow_copy_graph_attrshallow_copy_node_attrshallow_copy_edge_attrr   r   r   r   r   D  s    z)BaseAttrGraphTester.shallow_copy_attrdictc                 C   sD   |j d |j d kst|j d d |j d |j d ks@td S r   r   r   r   r   r   r   I  s    z+BaseAttrGraphTester.shallow_copy_graph_attrc                 C   sX   |j d d |j d d ks t|j d d d |j d d |j d d ksTtd S r   r   r   r   r   r   r   N  s     z*BaseAttrGraphTester.shallow_copy_node_attrc                 C   sb   |d d d |d d d ks$t |d d d d |d d d |d d d ks^t d S r   r   r   r   r   r   r   S  s    $z*BaseAttrGraphTester.shallow_copy_edge_attrc                 C   s   |d d d }d|j d d d< |j|jks2t||j d d d< |j|jksTt|jd d }d|jd d< |j|jkst||jd d< |j|jkstd S Nr   r   rX   bazr   )r   rP   r
   r%   r   r   r   Zold_foor   r   r   same_attrdictX  s    z!BaseAttrGraphTester.same_attrdictc                 C   s   |d d d }d|j d d d< |j|jks2t||j d d d< |j|jksTt|jd d }d|jd d< |j|jkst||jd d< |j|jkstd S r   )r   r    r
   r%   r   r   r   r   r   r   e  s    z&BaseAttrGraphTester.different_attrdictc                 C   s*  |j |j kst|j|jks t|j|jks0t|j|jks@t| s| s|j d d |j d d kspt|j d d |j d d kstn| s|j |_|j |_| s|j |_|j |_|j|jkst|j|jkst|jd d |jd d kst|jd d |jd d ks&td S )Nr   r   )r    r
   r   rz   r~   is_directedZ_predZ_succr   r   r   r   r   r  s"     ""z BaseAttrGraphTester.graphs_equalc                 C   sp   | j  }d|jd< t|j|js&t|jd dks8t|jd= |ji ksNt| jdd}|jd dksltd S )NbarrX   ry   )r	   rI   rz   r   Zgraph_attr_dict_factoryr
   r*   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:tt  ddd	gsRtt jdddi fdd
difd	i fgs~td jd d
< t jdddi fdd
difd	i fgstt jd
ddddgstt jd
dddddgstd S )Nr   r   ry   c                 3   s   | ]\}}t | jV  qd S r   )r   Znode_attr_dict_factory)r   uru   r   r   r   r     s    z5BaseAttrGraphTester.test_node_attr.<locals>.<genexpr>Tr   r   r   rX   r   r)   )r   r   )r   N)r   default)r   r   )r   r   )r	   rI   r.   r"   r%   r
   r   r'   r   r   r   test_node_attr  s    

,, z"BaseAttrGraphTester.test_node_attrc                 C   sn   | j  }ddi}|jd	| t| ddddgs8tt|jdddi fdi fdi fdddifgsjtd S )
NrX   r   r   r   r   r   Tr   )r   )r	   rI   r.   r   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s0td S )Nr   r   r   ry   rO   rX   )r*   r0   r   rP   r
   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:tt jddddd	difgs\tt jd	dd
gsttd S )Nr   r   r   ry   c                 3   s    | ]\}}}t | jV  qd S r   )r   Zedge_attr_dict_factory)r   r   vru   r   r   r   r     s    z5BaseAttrGraphTester.test_edge_attr.<locals>.<genexpr>Tr   rX   )r   r   r   )r*   r0   r"   rP   r
   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sHtt|jddddgsbtd S )NrO   r   r   rX   ry   Tr   r   r   r   r   )r   r   rX   )r   r   rX   )r*   r1   r   rP   r
   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s`t|ddg |jdddddd t|jd
dddddddfgstd S )Nr   r   r`       r   r   @   rX   ry   Tr   )rX   r`   rO   r   rw   r   r   spamr   )r*   r1   r   rP   r
   rf   r0   r   r   r   r   test_edge_attr3  s    &

 z#BaseAttrGraphTester.test_edge_attr3c                 C   sD  |   }|jdddddd t|jddddddddfgsBtd	|d d d
< t|jddddd	dddfgsxtd|jd d d
< t|jddddddddfgstd|jd d
< t|jddddddddfgst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s@td S )Nr   r   rw   r   rX   r   Tr   
   r         rO      listdatar`   )r   r   r   r   r`   )r*   r0   r   rP   r
   r   )r   r   ddr   r   r   test_edge_attr4  s<    
 
 
 
 z#BaseAttrGraphTester.test_edge_attr4c                 C   sJ   | j }| | t|}| || | || | }| || d S r   )r	   r{   r8   r*   r   r   to_undirectedr   r   r   r   r   test_to_undirected  s    

z&BaseAttrGraphTester.test_to_undirectedc                 C   s   t jd| jd}|jdd}||jks*t|dds:t|ddsR| sRtt	t j
|jd t	t j
|jdd |dd |ddst|dds| std S Nr   )Zcreate_usingTr   r   r   r4   )r8   
path_graphr*   r   r   r
   r5   r   r+   r,   r9   r.   r0   r   r   Z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ks*t|dds:t|ddsJttt j	|j
d tt j	|jdd |dd |ddst|ddstd S r   )r8   r   r*   r   r   r
   r5   r+   r,   r9   r.   r0   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|  | rJ  n }| }t| sft| }t|s|td S )Nc                       s$   e Zd Z fddZfddZdS )z9BaseAttrGraphTester.test_directed_class.<locals>.newGraphc                    s    S r   r   r'   
newDiGraphr   r   to_directed_class  s    zKBaseAttrGraphTester.test_directed_class.<locals>.newGraph.to_directed_classc                    s    S r   r   r'   newGraphr   r   to_undirected_class  s    zMBaseAttrGraphTester.test_directed_class.<locals>.newGraph.to_undirected_classNrE   rF   rG   r   r   r   r   r   r   r   r     s   r   c                       s$   e Zd Z fddZfddZdS )z;BaseAttrGraphTester.test_directed_class.<locals>.newDiGraphc                    s    S r   r   r'   r   r   r   r     s    zMBaseAttrGraphTester.test_directed_class.<locals>.newDiGraph.to_directed_classc                    s    S r   r   r'   r   r   r   r     s    zOBaseAttrGraphTester.test_directed_class.<locals>.newDiGraph.to_undirected_classNr   r   r   r   r   r     s   r   )r*   r   r   r   r   r   r
   r   r   r   r   r   test_directed_class  s    z'BaseAttrGraphTester.test_directed_classc                 C   sJ   | j }| | t|}| || | || | }| || d S r   )r	   r{   r8   ZDiGraphr   r   r   r   r   r   r   r   test_to_directed%  s    

z$BaseAttrGraphTester.test_to_directedc                 C   s   | j }| | |ddddg}| || | || | || |d}|jdi iksbt|g }|ji kszt|ji kstd S )Nr   r   r   rv   )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sRtttj|dddd	gsntd S )
Nr   r   r   ra   Tr   r`   )r   r   N)r   r   r   )r	   rI   r0   r   r8   rd   r
   r   r   r   r   test_selfloops_attr<  s    
  z'BaseAttrGraphTester.test_selfloops_attrN))rE   rF   rG   rm   rx   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   rq      sL   	
				rq   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| _dddg| _dddg| _|  | _| j| j_i | j_i | jjd< i | jjd< i | jjd< d S )NrO   rN   rM   rR   r   r   r   )r8   r*   Zk3adjZk3edgesr&   r	   r    r   )r   Zed1Zed2Zed3r   r   r   setup_methodK  s     

zTestGraph.setup_methodc                 C   sD   | j }tt|d}| || tt|}| || d S )Nr4   )r	   pickleloadsdumpsr   )r   r   Zpgr   r   r   test_pickleY  s
    zTestGraph.test_picklec                 C   sT   | j dgdgddd}|jdks&tt|j ddi ifddi ifgksPtd S )Nr   r   rO   r   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s4td S )NrO   rN   rM   rR   )r	   rT   Z	adjacencyr
   r   r   r   r   test_adjacencye  s    
zTestGraph.test_adjacencyc              	   C   sz   | j }|jd i i dkst|d i i dks4ttt |d W 5 Q R X tt |dg W 5 Q R X d S )Nr   rO   jA)r	   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$t|jddd |jddd |jddd |jd d dksdt|jd d dkszt|jd d dkst|jddd |jddd |jddd |jd d dkst|jd d dkst|jd d dkstd S )	Nr   r   redcr   bluer   r   )r*   r.   r   r
   r%   r   r   r   r   test_add_nodev  s    
zTestGraph.test_add_nodec                 C   s  |   }|dddg |ji i i dks.t|jdddgdd |jd d dksXt|jd d dksnt|jd |jd k	st|jdddgdd |jd d dkst|jd d dkst|jd |jd k	st|   }||jd	d
 |jd d dkst|jd d dks(t|jd |jd k	sBt|jddddifdddifgdd |jd d dks~t|jd d dkst|jd d dkst|jd d dkstd S )Nr   r   r   rR   r   r   r   r   Tr   Zgreenr   Zcyan)r*   r/   r   r
   r%   r   r   r   r   test_add_nodes_from  s*    $zTestGraph.test_add_nodes_fromc              	   C   sV   | j  }|d |jdi idi idks0tttj |d W 5 Q R X d S )Nr   r   r   rO   r4   )	r	   rI   rg   r   r
   r+   r,   r8   r9   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*t|dg d S r7   )r	   rI   rh   r   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s0t|   }|jd  |jdi idi idks^t|   }tt |d d W 5 Q R X d S )Nr   r   rM   Zanything)r*   r0   r   r
   r+   r,   r-   r   r   r   r   test_add_edge  s    
zTestGraph.test_add_edgec              	   C   sR  |   }|dddddifg |ji ddiddi idddiidksLt|   }|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stttj |dg W 5 Q R X ttj |dg W 5 Q R X tt |dg W 5 Q R X tt	 |ddg W 5 Q R X d S )NrM   r   r   r`   r   rO   rR   r   r   r   r   )r`   r   rN   )r   )r   r   r   r   r   )r   r   )
r*   r1   r   r
   r+   r,   r8   r9   r   r-   r   r   r   r   test_add_edges_from  s,    
(zTestGraph.test_add_edges_fromc              	   C   sb   | j  }|dd |jdi idi ii i ddks:tttj |dd W 5 Q R X d S )Nr   r   r   rM   rR   r4   )	r	   rI   re   r   r
   r+   r,   r8   r9   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:t|dg d S )NrM   r   rR   rc   )r	   rI   rf   r   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.t|ji ks<t|ji ksJtd S )Nr	   r~   )r	   rI   rz   clearr[   r%   r
   r   r   r   r   r   
test_clear  s    

zTestGraph.test_clearc                 C   sv   | j  }d|jd< t|j}|  t|j|ks8t|ji i i dksNtt|jg ks`t|jd dksrtd S )Nr	   r~   rR   )	r	   rI   rz   r[   r%   Zclear_edgesr
   r   rP   )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|s8tt|jdddddi fddi fgs`tt|jddgdd|s|tttj |dd W 5 Q R X d S )Nr   r   r   Tr   r4   )r	   r   rP   r
   r+   r,   r8   r9   )r   r   Z	all_edgesr   r   r   test_edges_data  s    (zTestGraph.test_edges_datac                 C   sv   | j  }|ddi kst|d d i ks2t|ddd ksFt|ddd ksZt|jdddddksrtd S )Nr   r   r   r   r4   )r   )r	   rI   Zget_edge_datar
   r   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st| rd
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}n0d
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st|j	i ks*t| j  }|dddddifgddddifg t|j |ksrtt|j |kst|j	i kst| 
 }d|j	d< |jddd |jd
ddd | }| 
 }|| t||st|| t||st| 
 }|jddgd |jddhA t ks@t| d
ksRt| 
 }|jdgd t|j ddi fgkst| dkstttj t
   W 5 Q R X d S )Nr   r   rV   r   )r   rv      rw   r`   )r%   rP   r   r   rv   r   rX   r   g      ?ra   )r%   r   )rP   )r	   rI   updater$   r%   r   r
   r   rP   rz   r*   r.   r0   r   r^   rV   r+   r,   r8   r9   )r   r   ZnlistZelistZGGr   r   r   r   test_update  sn    
(


&


 zTestGraph.test_updateN)rE   rF   rG   rm   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   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 )	Nrv   noder~   edge01rM   edge34r   rz   )	r8   r   ranger%   rP   rz   r   Zedge_subgraphr   )r   r   ir   r   r   r   T  s    

zTestEdgeSubgraph.setup_methodc                 C   s"   ddddgt | j kstdS )z.Tests that the subgraph has the correct nodes.r   r   r   r   N)r$   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tdS )z.Tests that the subgraph has the correct edges.)r   r   r   )r   r   r   r~   r   N)r$   r   rP   r
   r'   r   r   r   test_correct_edgese  s    z#TestEdgeSubgraph.test_correct_edgesc                 C   s.   | j d ddddgt| j ks*tdS )zkTests that adding a node to the original graph does not
        affect the nodes of the subgraph.

        rv   r   r   r   r   N)r   r.   r$   r   r%   r
   r'   r   r   r   r   i  s    zTestEdgeSubgraph.test_add_nodec                 C   s,   | j d dddgt| j ks(tdS )ziTests that removing a node in the original graph does
        affect the nodes of the subgraph.

        r   r   r   r   N)r   rg   r$   r   r%   r
   r'   r   r   r   r   q  s    z!TestEdgeSubgraph.test_remove_nodec                 C   s   | j D ] }| jj| | j j| kstqd| jjd d< | jjd | j jd ksTtd| j jd d< | jjd | j jd kstdS )z`Tests that the node attribute dictionary of the two graphs is
        the same object.

        rX   r   r~   r   r   N)r   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
tq
d| jjd d< | jjd d | j jd d ksltd| j jd d< | jjd d | j jd d kstdS )z`Tests that the edge attribute dictionary of the two graphs is
        the same object.

        rX   rM   r~   r   r   N)r   rP   r   r
   )r   r   r   r   r   r   test_edge_attr_dict  s    &$z$TestEdgeSubgraph.test_edge_attr_dictc                 C   s   | j j| jjkstdS )zaTests that the graph attribute dictionary of the two graphs
        is the same object.

        N)r   rz   r   r
   r'   r   r   r   test_graph_attr_dict  s    z%TestEdgeSubgraph.test_graph_attr_dictN)rE   rF   rG   rm   r   r   r  r   r   r  r  r  r   r   r   r   r   Q  s   r   )rC   r   ro   r=   r+   Znetworkxr8   Znetworkx.utilsr   r   r   r   rq   r   r   r   r   r   r   <module>   s    D  {  