a
    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s6J ddi|vsFJ d S )N      b)K3selfG r   O/var/www/auris/lib/python3.9/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s6J d S N   )r	   lenorderZ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 sJJ t 	 | j
ks`J t j	dddi fdi fdi fgksJ 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_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 s20    Y  tt |d g W d    n1 sh0    Y  tt |dd  W d    n1 s0    Y  tt |dg W d    n1 s0    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 r0J |ddirBJ d S )Nr   r   )r	   Z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   s    zBaseGraphTester.test_has_edgec                 C   sZ   | j }t|dddgks J ttj |d W d    n1 sL0    Y  d S Nr   r   r   r3   )r	   r#   Z	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sHJ G dd d| j }t  | }||}|  t  ||}||ksJ 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   rG   )r)   rB   Zcollectcopy)r   r   rC   beforeafterrG   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sFJ t|ddgg dsbJ ttj	 |d W d    n1 s0    Y  d S )Nr   r   r   r   r   r   r   rM   rN   r   r3   )
r	   r   r   r    r   edgesr*   r+   r7   r8   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sLJ ttj |d W d    n1 sx0    Y  d S )N)rN   rO   )r   r   r   r   r   r   r   r3   )r	   r#   degreedictr*   r+   r7   r8   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	   sizeZnumber_of_edgesr
   r   r   r   	test_size}   s    zBaseGraphTester.test_sizec                 C   s  | j }t| | jsJ t|ddgs0J t|ddgddgsLJ t|dgg sbJ t|dg svJ |d}tjtjdd t| W d    n1 s0    Y  |dddi g}tjtjdd t| W d    n1 s0    Y  d S )	Nr   r   r3   foozis not a node or a sequence)matchr   z&in sequence nbunch is not a valid node)	r	   r   nbunch_iterr%   r*   r+   r7   r8   list)r   r   Zbunchr   r   r   test_nbunch_iter   s    
&z BaseGraphTester.test_nbunch_iterc                 C   sR   |   }dt fg}ttj t|| W d    n1 sD0    Y  d S )Nx)r)   setr*   r+   r7   r8   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*J t| ddiksBJ |ddksTJ t|dgdgksnJ |jddddksJ d S )Nr   rO   r   weightr`   )r)   r/   r#   rS   rT   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sBJ t|dksTJ |	dd |dd |
dg |dd |d |dd |dd |ddg d S )Nr   r   r   r   )r	   rH   r/   r   r7   Znodes_with_selfloopsr   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&J i |_t|jt|ksBJ |j}t|jt|ks^J i |_t|jt|kszJ d S r   )r	   rH   r   idr   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"J t|jt|jks:J t|jt|jksRJ t|jt|jksjJ d S r   )r	   rH   rj   r$   rP   rS   r   r
   r   r   r   test_attributes_cached   s
    
z&BaseGraphTester.test_attributes_cachedN)rD   rE   rF   __doc__r   r   r'   r1   r2   r5   r9   r*   markZskipifplatformpython_implementationrK   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 g d
ksRJ t|jdd	ddddksrJ |jddd	dksJ t|jdgdd	dgsJ tdd |jdd	D g dsJ t|jdd	ddddksJ |jddd	dksJ t|jdgdd	dgsJ d S )Nr   r   r   )r`   otherr   c                 s   s   | ]\}}|V  qd S r   r   r   ndr   r   r   r          z;BaseAttrGraphTester.test_weighted_degree.<locals>.<genexpr>r`   ra   )r   r      rw   )r   r   r   rO   c                 s   s   | ]\}}|V  qd S r   r   rs   r   r   r   r      rv   rr   )r      r   rx   )r   r   )r)   r/   r#   rS   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   r/   )r   r   Z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s4J 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s2J d S )NrO   r   r   z with 3 nodes and 2 edgesr)   r0   strtyperD   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s6J 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u sBJ ||ju sPJ ||ju s^J d S )	NrM   rO   TZas_viewr   r   F)rH   )r)   to_directedsubgraphreverse_graph)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-   r/   r|   rH   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-   r/   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 |
 rx|jd d d n|jd d }t|dksJ t|j	d dksJ |
 r|jd d d n|jd d }t|dksJ d S r   )r)   r-   r/   r|   r   r.   r0   rP   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J |j d d |j d |j d ks@J d S NrX   r   r{   appendr   r   r   r   r   1  s    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sTJ d S Nr   rX   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$J |d d d  d |d d d |d d d ks^J d S Nr   r   rX   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J |j d d |j d |j d ks@J 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 J |j d d d |j d d |j d d ksTJ 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$J |d d d  d |d d d |d d d ks^J 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s2J ||j d d d< |j|jksTJ |jd d }d|jd d< |j|jksJ ||jd d< |j|jksJ d S Nr   r   rX   bazr   )r   rP   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s2J ||j d d d< |j|jksTJ |jd d }d|jd d< |j|jksJ ||jd d< |j|jksJ d S r   )r   r   r$   r   r   r   r   r   r   e  s    z&BaseAttrGraphTester.different_attrdictc                 C   s*  |j |j ksJ |j|jks J |j|jks0J |j|jks@J | s| s|j d d |j d d u spJ |j d d |j d d u sJ n| s|j |_|j |_| s|j |_|j |_|j|jksJ |j|jksJ |jd d |jd d u sJ |jd d |jd d u s&J d S )Nr   r   )r   r   r{   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&J |jd dks8J |jd= |ji ksNJ | jdd}|jd dkslJ d S )NbarrX   rz   )r	   rH   r{   r   Z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sPJ 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sJ t jd
dg dsJ t jd
ddg dsJ d S )Nr   r   rz   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   rR   r   rX   r   r   )r(   r   r   )r   N)r   default))r   r   r   )r   r   )r	   rH   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
i | t| g ds8J t|jdddi fdi fd	i fdddifgsjJ d S )NrX   r   r   r   r   r   r   Tr   r   r   r   )r   )r	   rH   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s0J d S )Nr   r   r   rz   rO   rX   )r)   r/   r   rP   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stJ d S )Nr   r   r   rz   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)   r/   r!   rP   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sHJ t|jddddgsbJ d S )NrO   r   r   rX   rz   Tr   r   r   r   r   )r   r   rX   )r   r   rX   )r)   r0   r   rP   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`J |ddg |jdddddd t|jd
dddddddfgsJ d S )Nr   r   r`       r   r   @   rX   rz   Tr   )rX   r`   rO   r   rx   r   r   spamr   )r)   r0   r   rP   rf   r/   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sBJ d	|d d d
< t|jddddd	dddfgsxJ d|jd d d
< t|jddddddddfgsJ d|jd d
< t|jddddddddfgsJ 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@J d S )Nr   r   rx   r   rX   r   Tr   
   r         rO      listdatar`   )r   r   r   r   r`   )r)   r/   r   rP   r   )r   r   ddr   r   r   test_edge_attr4  s4    z#BaseAttrGraphTester.test_edge_attr4c                 C   sJ   | j }| | t|}| || | || | }| || d S r   )r	   r|   r7   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u s*J |dds:J |ddsR| sRJ tt j	|j
d tt j	|jdd |dd |ddsJ |dds| sJ d S Nr   )Zcreate_usingTr   r   r   r3   )r7   
path_graphr)   r   r   r4   r   r*   r+   r8   r-   r/   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u s*J |dds:J |ddsJJ tt j|j	d tt j|j
dd |
dd |ddsJ |ddsJ d S r   )r7   r   r)   r   r   r4   r*   r+   r8   r-   r/   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| sfJ | }t|s|J 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rD   rE   rF   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   test_directed_class  s    z'BaseAttrGraphTester.test_directed_classc                 C   sJ   | j }| | t|}| || | || | }| || d S r   )r	   r|   r7   ZDiGraphr   r   r   r   r   r   r   r   test_to_directed%  s    

z$BaseAttrGraphTester.test_to_directedc                 C   s   | j }| | |g d}| || | || | || |d}|jdi iks^J |g }|ji ksvJ |ji ksJ d S )N)r   r   r   rw   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sRJ ttj|dddd	gsnJ d S )
Nr   r   r   ra   Tr   r`   )r   r   N)r   r   r   )r	   rH   r/   r   r7   rd   r
   r   r   r   test_selfloops_attr<  s    
"z'BaseAttrGraphTester.test_selfloops_attrN))rD   rE   rF   rm   ry   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| _g d| _g d| _|  | _| j| j_i | j_i | jjd< i | jjd< i | jjd< d S )	NrO   rN   rM   rR   rL   r   r   r   )r7   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 )Nr3   )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&J t|j ddi ifddi ifgksPJ d S )Nr   r   rO   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s4J d S )NrO   rN   rM   rR   )r	   rT   Z	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s4J tt |d W d    n1 s^0    Y  tt |dg W d    n1 s0    Y  d S )Nr   rO   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sdJ |jd d dkszJ |jd d dksJ |jddd |jddd |jddd |jd d dksJ |jd d dksJ |jd d dksJ d S )	Nr   r   redcr   bluer   r   )r)   r-   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sTJ |jd d dksjJ |jd |jd usJ |jg ddd |jd d dksJ |jd d dksJ |jd |jd usJ |   }||jd	d
 |jd d dks
J |jd d dks"J |jd |jd us<J |jddddifdddifgdd |jd d dksxJ |jd d dksJ |jd d dksJ |jd d dksJ d S )NrR   r   r   r   r   r   r   r   Tr   Zgreenr   Zcyan)r)   r.   r   r$   r   r   r   r   test_add_nodes_from  s*    $zTestGraph.test_add_nodes_fromc                 C   sj   | j  }|d |jdi idi idks0J ttj |d W d    n1 s\0    Y  d S )Nr   r   r   rO   r3   )r	   rH   rg   r   r*   r+   r7   r8   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 r6   )r	   rH   rh   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s0J |   }|jd  |jdi idi idks^J |   }tt |d d W d    n1 s0    Y  d S )Nr   r   rM   Zanything)r)   r/   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sLJ |   }|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sJ ttj |dg W d    n1 s0    Y  ttj |dg W d    n1 s(0    Y  tt |dg W d    n1 s`0    Y  tt |ddg W d    n1 s0    Y  d S )NrM   r   r   r`   r   rO   rR   r   r   r   r   )r`   r   rN   )r   r   r   )r   r   )	r)   r0   r   r*   r+   r7   r8   r   r,   r
   r   r   r   test_add_edges_from  s,    
(*,,zTestGraph.test_add_edges_fromc                 C   sv   | j  }|dd |jdi idi ii i ddks:J ttj |dd W d    n1 sh0    Y  d S )Nr   r   r   rM   rR   r3   )r	   rH   re   r   r*   r+   r7   r8   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 )NrM   r   rR   rc   )r	   rH   rf   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sJJ d S )Nr	   r   )r	   rH   r{   clearr[   r$   r   r
   r   r   r   
test_clear  s    

zTestGraph.test_clearc                 C   sv   | j  }d|jd< t|j}|  t|j|ks8J |ji i i dksNJ t|jg ks`J |jd dksrJ d S )Nr	   r   rR   )r	   rH   r{   r[   r$   Zclear_edgesr   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|s8J t|jdddddi fddi fgs`J t|jddgdd|s|J ttj |dd W d    n1 s0    Y  d S )Nr   r   r   Tr   r3   )r	   r   rP   r*   r+   r7   r8   )r   r   Z	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s2J |ddd u sFJ |ddd u sZJ |jdddddksrJ d S )Nr   r   r   r   r3   )r   )r	   rH   Z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sJ | 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J |ji ks*J | j  }|dddddifgddddifg t|j |ksrJ 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sRJ | 	 }|jdgd t|j ddi fgksJ | dksJ ttj t	   W d    n1 s0    Y  d S )Nr   r   rV   r   )r   rw      rx   r`   )r$   rP   r   r   rw   r   rX   r   g      ?ra   )r$   r   )rP   )r	   rH   updater#   r$   r   r   rP   r{   r)   r-   r/   r   r^   rV   r*   r+   r7   r8   )r   r   ZnlistZelistZGGr   r   r   r   test_update  sn    
(


&


 zTestGraph.test_updateN)rD   rE   rF   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 )	Nrw   noder   edge01rM   edge34r   r{   )	r7   r   ranger$   rP   r{   r   Z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   rP   r&   r   r   r   test_correct_edgese  s    z#TestEdgeSubgraph.test_correct_edgesc                 C   s*   | 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.

        rw   r  N)r   r-   r#   r   r$   r&   r   r   r   r   i  s    zTestEdgeSubgraph.test_add_nodec                 C   s*   | j d g dt| j ks&J 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   q  s    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sTJ d| j jd d< | jjd | j jd ksJ 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   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slJ d| j jd d< | jjd d | j jd d ksJ 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   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)rD   rE   rF   rm   r   r  r  r   r   r  r  r  r   r   r   r   r   Q  s   r   )rB   r   ro   r<   r*   Znetworkxr7   Znetworkx.utilsr   r   r   r   rq   r   r   r   r   r   r   <module>   s    D  {  