U
    ¹mœdÂx  ã                   @   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   úZ/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/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sŠt‚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s”t‚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s„t‚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sŠt‚t|jdgdd	�dgƒs¦t‚tdd„ |jdd	�D ƒdddgƒsÌt‚t|jdd	�ƒddddœksìt‚|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   Ú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s–t
‚t|j	d ƒdks¬t
‚| ¡ rÆ|jd d d n|jd d }t|ƒdksät
‚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s€t‚||jd d< |j|jksžt‚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s€t‚||jd d< |j|jksžt‚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s�t‚n”| ¡ sª|j |_|j |_| ¡ sÂ|j |_|j |_|j|jksÒt‚|j|jksât‚|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ƒs¸t‚tˆ jd
d�dddgƒsÔt‚tˆ jd
dd�dddgƒsòt‚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ƒs¨t‚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ƒs°t‚d|jd d
< t|jdd�ddddddœfgƒsät‚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¡s”t‚| dd¡s¬| ¡ s¬t‚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¡sŒt‚| dd¡sœt‚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sˆt‚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s�t‚|jddd� |jddd� |jddd� |jd d dksÐt‚|jd d dksæt‚|jd d dksüt‚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	s†t‚|jdddgdd� |jd d dks°t‚|jd d dksÆt‚|jd |jd k	sÞt‚|   ¡ }| |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�s–t‚|jd d dk�s®t‚|jd d dk�sÆt‚d S )Nr   r   r   rR   rç   rè   ré   rê   Tr   Úgreenr   Ú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sÀt‚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s€t‚| ¡ rÒ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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�sŠt‚|j	i k�sšt‚|  
¡ }d|j	d< |jddd� |jd
ddd� | ¡ }|  
¡ }| |¡ t||ƒ�sôt‚| |¡ 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�sˆt‚| ¡ dk�sšt‚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s€t‚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s t‚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  {  