o
    ]Zhx                     @   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   P/var/www/auris/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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 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)
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 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	   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      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   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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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copy)r   r   rD   beforeafterrH   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   rN   rO   r   r3   )
r	   r   r   r    r   edgesr*   r+   r8   r9   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)rO   rP   )r   r   r   r   r   r   r   r3   )r	   r#   degreedictr*   r+   r8   r9   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}   r6   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   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+   r8   r9   list)r   r   Z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+   r8   r9   r\   r[   )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s!J |ddks*J t|dgdgks7J |jddddksBJ d S )Nr   rP   r   weightra   )r)   r/   r#   rT   rU   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	   rI   r/   r   r8   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s!J |j}t|jt|ks/J i |_t|jt|ks=J d S r   )r	   rI   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s)J t|jt|jks5J d S r   )r	   rI   rk   r$   rQ   rT   r   r
   r   r   r   test_attributes_cached   s
   
z&BaseGraphTester.test_attributes_cachedN)rE   rF   rG   __doc__r   r   r'   r1   r2   r5   r:   r*   markZskipifplatformpython_implementationrL   rR   rV   rX   r]   r`   rc   rj   rl   rm   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   )ra   otherr   c                 s       | ]\}}|V  qd S r   r   r   ndr   r   r   r          z;BaseAttrGraphTester.test_weighted_degree.<locals>.<genexpr>ra   rb   )r   r      ry   )r   r   r   rP   c                 s   rt   r   r   ru   r   r   r   r      rx   rs   )r      r   rz   )r   r   )r)   r/   r#   rT   rU   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 )NrY   r   r   r   rY   )graphr$   rf   r/   )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 )NrP   r   r   z with 3 nodes and 2 edgesr)   r0   strtyperE   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 )NrY   r   rP   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 )	NrN   rP   TZas_viewr   r   F)rI   )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   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-   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 |
 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)   r-   r/   r   r   r.   r0   rQ   r   r$   Zis_multigraphr   )r   r   r   Z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 NrY   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   rY   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   rY   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   rY   bazr   )r   rQ   r$   r   r   r   Z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_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sJ |jd= |ji ks'J | jdd}|jd dks6J d S )NbarrY   r|   )r	   rI   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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   Znode_attr_dict_factory)r   urw   r   r   r   r     s    
z5BaseAttrGraphTester.test_node_attr.<locals>.<genexpr>Tr   rS   r   rY   r   r   )r(   r   r   )r   N)r   default))r   r   r   )r   r   )r	   rI   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sJ t|jdddi fdi fd	i fdddifgs5J d S )NrY   r   r   r   r   r   r   Tr   r   r   r   )r   )r	   rI   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sJ d S )Nr   r   r   r|   rP   rY   )r)   r/   r   rQ   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   Zedge_attr_dict_factory)r   r   vrw   r   r   r   r     s    
z5BaseAttrGraphTester.test_edge_attr.<locals>.<genexpr>Tr   rY   )r   r   r   )r)   r/   r!   rQ   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 )NrP   r   r   rY   r|   Tr   r   r   r   r   )r   r   rY   )r   r   rY   )r)   r0   r   rQ   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   ra       r   r   @   rY   r|   Tr   )rY   ra   rP   r   rz   r   r   spamr   )r)   r0   r   rQ   rg   r/   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   rz   r   rY   r   Tr   
   r         rP      listdatara   )r   r   r   r   ra   )r)   r/   r   rQ   r   )r   r   ddr   r   r   test_edge_attr4  s4   "z#BaseAttrGraphTester.test_edge_attr4c                 C   J   | j }| | t|}| || | || | }| || d S r   )r	   r   r8   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   )Zcreate_usingTr   r   r   r3   )r8   
path_graphr)   r   r   r4   r   r*   r+   r9   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s%J tt j|j	d tt j|j
dd |
dd |ddsFJ |ddsNJ d S r   )r8   r   r)   r   r   r4   r*   r+   r9   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|  | 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rE   rF   rG   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   r8   Z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   ry   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   rb   Tr   ra   )r   r   N)r   r   r   )r	   rI   r/   r   r8   re   r
   r   r   r   test_selfloops_attr<  s   
"z'BaseAttrGraphTester.test_selfloops_attrN))rE   rF   rG   rn   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   rr      sN    	
				rr   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 )	NrP   rO   rN   rS   rM   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 )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s(J d S )Nr   r   rP   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 )NrP   rO   rN   rS   )r	   rU   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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   rP   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)   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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 )NrS   r   r   r   r   r   r   r   Tr   greenr   cyan)r)   r.   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   rP   r3   )r	   rI   rh   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J |dg d S r7   )r	   rI   ri   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   rN   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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 )NrN   r   r   ra   r   rP   rS   r   r   r   r   )ra   r   rO   )r   r   r   )r   r   )	r)   r0   r   r*   r+   r8   r9   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   rN   rS   r3   )r	   rI   rf   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J |dg d S )NrN   r   rS   rd   )r	   rI   rg   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	   rI   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sJ |ji i i dks'J t|jg ks0J |jd dks9J d S )Nr	   r   rS   )r	   rI   r}   r\   r$   Zclear_edgesr   rQ   )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   r3   )r	   r   rQ   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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   r3   )r   )r	   rI   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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   rW   r   )r   ry      rz   ra   )r$   rQ   r   r   ry   r   rY   r   g      ?rb   )r$   r   )rQ   )r	   rI   updater#   r$   r   r   rQ   r}   r)   r-   r/   r   r_   rW   r*   r+   r8   r9   )r   r   ZnlistZelistZGGr   r   r   r   test_update  sp   
(


&


 $zTestGraph.test_updateN)rE   rF   rG   rn   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 )	Nry   noder   edge01rN   edge34r   r}   )	r8   r   ranger$   rQ   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   rQ   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.

        ry   r  N)r   r-   r#   r   r$   r&   r   r   r   r   i     zTestEdgeSubgraph.test_add_nodec                 C   r  )ziTests that removing a node in the original graph does
        affect the nodes of the subgraph.

        r   )r   r   r   N)r   rh   r#   r   r$   r&   r   r   r   r   q  r  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.

        rY   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.

        rY   rN   r   r   r   N)r   rQ   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)rE   rF   rG   rn   r   r  r  r   r   r  r  r  r   r   r   r   r  Q  s    r  )rC   r   rp   r=   r*   Znetworkxr8   Znetworkx.utilsr   r   r   r   rr   r   r  r   r   r   r   <module>   s      D  {  