o
    ˷et                     @   s|   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   X/var/www/ideatree/venv/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_node1   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_edge8      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 | rd V  qdS )r   N)r   )r   obj_typer   r   r   J   s    zRBaseGraphTester.test_memory_leak.<locals>.count_objects_of_type.<locals>.<genexpr>)sumgcget_objectsrC   r   rC   r   count_objects_of_typeI   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   MyGraphT   s    rL   )r,   rF   collectcopy)r   r   rH   beforeafterrL   r   r   r   test_memory_leakC   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   rS   rT   r   r7   )
r	   r   r"   r#   r   edgesr-   r.   r=   r>   r
   r   r   r   
test_edges_   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)rT   rU   )r   r   r   r   r   r   r   r7   )r	   r&   degreedictr-   r.   r=   r>   r
   r   r   r   test_degreeh   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_sizep   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_iteru   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>   rb   ra   )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   rU   r   weightri   )r,   r2   r&   rY   rZ   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	   rN   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	   rN   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	   rN   ru   r'   rV   rY   r   r
   r   r   r   test_attributes_cached   s
   
z&BaseGraphTester.test_attributes_cachedN)rI   rJ   rK   __doc__r   r   r*   r4   r6   r9   r?   r-   markskipifplatformpython_implementationrQ   rW   r[   r^   rd   rh   rk   rt   rx   ry   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   )ri   otherr   c                 s       | ]\}}|V  qd S r   r   r   ndr   r   r   r          z;BaseAttrGraphTester.test_weighted_degree.<locals>.<genexpr>ri   rj   )r   r      r   )r   r   r   rU   c                 s   r   r   r   r   r   r   r   r      r   r   )r      r   r   )r   r   )r,   r2   r&   rY   rZ   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 )Nr_   r   r   r   r_   )graphr'   rp   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 )NrU   r   r   z with 3 nodes and 2 edgesr,   r3   strtyperI   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 )Nr_   r   rU   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 )	NrS   rU   Tas_viewr   r   F)rN   )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   rN   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   rV   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 Nr_   r   r   appendr   r   r   r   r   $     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   r_   r   r'   r   r   r   r   r   r   )      $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   r_   r   r   r   r   r   r   .     $(z&BaseAttrGraphTester.deepcopy_edge_attrc                 C   s   |  || | || d S r   )r   r   r   r   r   r   is_shallow_copy3  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   7  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   <  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   A  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   F  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   r_   bazr   )r   rV   r'   r   r   r   old_foor   r   r   same_attrdictK     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   X  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   e  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barr_   r   )r	   rN   r   r   graph_attr_dict_factoryr,   r   r   r   r   test_graph_attry  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   rX   r   r_   r   r   )r+   r   r   )r   N)r   default))r   r   r   )r   r   )r	   rN   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 )Nr_   r   r   r   r   r   r   Tr   r   r   r   )r   )r	   rN   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   rU   r_   )r,   r2   r   rV   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   r_   )r   r   r   )r,   r2   r$   rV   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 )NrU   r   r   r_   r   Tr   r   r   r   r   )r   r   r_   )r   r   r_   )r,   r3   r   rV   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   ri       r   r   @   r_   r   Tr   )r_   ri   rU   r   r   r   r   spamr   )r,   r3   r   rV   rq   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   r_   r   Tr   
   r         rU      listdatari   )r   r   r   r   ri   )r,   r2   r   rV   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rI   rJ   rK   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   rj   Tr   ri   )r   r   N)r   r   r   )r	   rN   r2   r   r=   rn   r
   r   r   r   test_selfloops_attr/  s   
"z'BaseAttrGraphTester.test_selfloops_attrN))rI   rJ   rK   rz   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 )	NrU   rT   rS   rX   rR   r   r   r   )r=   r,   k3adjk3edgesr(   r	   r"   r    )r   ed1ed2ed3r   r   r   setup_method>  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_pickleL  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   rU   r   r   )r,   r   r&   r   itemsr
   r   r   r   test_data_inputS  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 )NrU   rT   rS   rX   )r	   rZ   	adjacencyr
   r   r   r   test_adjacencyX  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   rU   jA)r	   r   r-   r.   KeyError__getitem__	TypeErrorr
   r   r   r   test_getitem`  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_nodei  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 )NrX   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   rU   r7   )r	   rN   rr   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	   rN   rs   r   r
   r   r   r   test_remove_nodes_from  s   
z TestGraph.test_remove_nodes_fromc                 C   sb   |   }|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 d S )Nr   r   rS   )r,   r2   r   r
   r   r   r   test_add_edge  s   
 zTestGraph.test_add_edgec                 C   sl  |   }|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    d S 1 sw   Y  d S )NrS   r   r   ri   r   rU   rX   r   r   r   r   )ri   r   rT   )r   r   )r,   r3   r   r-   r.   r=   r>   r  r
   r   r   r   test_add_edges_from  s.   
("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   rS   rX   r7   )r	   rN   rp   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 )NrS   r   rX   rl   )r	   rN   rq   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	   rN   r   clearrb   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   rX   )r	   rN   r   rb   r'   clear_edgesr   rV   )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   rV   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	   rN   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   ri   )r'   rV   r   r   r   r   r_   r   g      ?rj   )r'   r   )rV   )r	   rN   updater&   r'   r   r   rV   r   r,   r0   r2   r   rf   r\   r-   r.   r=   r>   )r   r   nlistelistGGr   r   r   r   test_update  sp   
(


&


 $zTestGraph.test_updateN)rI   rJ   rK   rz   r  r  r  r  r  r  r"  r#  r$  r%  r&  r'  r(  r*  r,  r.  r0  r6  r   r   r   r   r  ;  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   edge01rS   edge34r   r   )	r=   r   ranger'   rV   r   r   edge_subgraphr   )r   r   ir   r   r   r  B  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_nodesO  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   r9  )r   r   r:  r   r   N)r&   r   rV   r)   r   r   r   test_correct_edgesS  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   r>  N)r   r0   r&   r   r'   r)   r   r   r   r  W     zTestEdgeSubgraph.test_add_nodec                 C   rA  )ziTests that removing a node in the original graph does
        affect the nodes of the subgraph.

        r   )r   r   r   N)r   rr   r&   r   r'   r)   r   r   r   r#  _  rB  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.

        r_   r   r   r   r   N)r   r   r'   )r   r   r   r   r   test_node_attr_dictg  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.

        r_   rS   r   r   r   N)r   rV   r   )r   r   r   r   r   r   test_edge_attr_dictt  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)rI   rJ   rK   rz   r  r?  r@  r  r#  rC  rD  rE  r   r   r   r   r7  ?  s    r7  )rF   r  r}   r-   networkxr=   networkx.utilsr   r   r   r   r   r  r7  r   r   r   r   <module>   s     8  {  