U
    9vf/                     @   s   d dl Z d dlZd dlmZ ddlmZmZ ddlmZ	 ddlm
Z G dd deZG d	d
 d
eeZG dd deeZG dd de	ZdS )    N)nodes_equal   )BaseAttrGraphTesterBaseGraphTester)TestEdgeSubgraph)	TestGraphc                   @   s   e 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)S )*BaseDiGraphTesterc                 C   s*   | j }|ddst|ddr&td S Nr   r   )K3Zhas_successorAssertionErrorselfG r   G/tmp/pip-unpacked-wheel-_lngutwb/networkx/classes/tests/test_digraph.pytest_has_successor   s    z$BaseDiGraphTester.test_has_successorc              	   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
   )r   sorted
successorsr   pytestraisesnxNetworkXErrorr   r   r   r   test_successors   s    z!BaseDiGraphTester.test_successorsc                 C   s*   | j }|ddst|ddr&td S r	   )r   Zhas_predecessorr   r   r   r   r   test_has_predecessor   s    z&BaseDiGraphTester.test_has_predecessorc              	   C   sF   | j }t|dddgks tttj |d W 5 Q R X d S r   )r   r   predecessorsr   r   r   r   r   r   r   r   r   test_predecessors   s    z#BaseDiGraphTester.test_predecessorsc              	   C   s   | j }t| ddddddgks&tt|dddgks@tt|ddgddddgksbtttj |d	 W 5 Q R X d S )
Nr   r   r   r   r   r   r   r   r   r   r   r   r   r   r
   r   r   edgesr   r   r   r   r   r   r   r   r   
test_edges"   s     "zBaseDiGraphTester.test_edgesc              	   C   sf   | j }t| ddddddgks&tt|dddgks@tttj |d W 5 Q R X d S )	Nr   r    r!   r"   r#   r$   r   r
   )r   r   	out_edgesr   r   r   r   r   r   r   r   r   test_out_edges*   s
     z BaseDiGraphTester.test_out_edgesc                 C   sP   | j }t| ddgkstt|ddgks6tt|dg ksLtd S Nr   r"   r   r   )P3r   r(   r   r   r   r   r   test_out_edges_dir1   s    z$BaseDiGraphTester.test_out_edges_dirc                 C   s   t ddddifddi fg}t|jddddddifddi fgksJtt|jdddddddifgksptt|jddddgkstt|jddddgkstd S Nr   r   dataTr.   )r   r   r   )r   r   N)r   DiGraphr   r(   r   r   r   r   r   test_out_edges_data7   s
    ,&z%BaseDiGraphTester.test_out_edges_datac                 C   sP   | j }t| ddgkstt|dg ks4tt|ddgksLtd S r*   )r+   r   in_edgesr   r   r   r   r   test_in_edges_dir>   s    z#BaseDiGraphTester.test_in_edges_dirc                 C   s   t ddddifddi fg}t|jddddddifddi fgksJtt|jdddddddifgksptt|jddddgkstt|jddddgkstd S r-   )r   r0   r   r2   r   r   r   r   r   test_in_edges_dataD   s
    ,&z$BaseDiGraphTester.test_in_edges_datac                 C   sp   | j }t| dddgks tt| ddddks<t|ddksNtt|tdgdgksltd S )N)r      )r   r5   )r   r5   r5   r   r   r   r   )r   r   Zdegreer   dictlistiterr   r   r   r   test_degreeK   s
    zBaseDiGraphTester.test_degreec                 C   sp   | j }t| dddgks tt| ddddks<t|ddksNtt|tdgdgksltd S Nr    r"   r   r   r   r6   r   )r   r   	in_degreer   r7   r8   r9   r   r   r   r   test_in_degreeR   s
    z BaseDiGraphTester.test_in_degreec                 C   sp   | j }t| dddgks tt| ddddks<t|ddksNtt|tdgdgksltd S r;   )r   r   
out_degreer   r7   r8   r9   r   r   r   r   test_out_degreeY   s
    z!BaseDiGraphTester.test_out_degreec                 C   s*   | j }| dkst| dks&td S )N   )r   sizer   Znumber_of_edgesr   r   r   r   	test_size`   s    zBaseDiGraphTester.test_sizec                 C   sh   |   }|dd | dds(t|jddddr@t|dd |jddddsdtd S )Nr   r   T)Z
reciprocal)Graphadd_edgeZto_undirectedZhas_edger   r   r   r   r   test_to_undirected_reciprocale   s    z/BaseDiGraphTester.test_to_undirected_reciprocalc                 C   sl   t ddg}| }t| ddgks.t|dd t| dgksPtt| ddgkshtd S )Nr   r"   r!   r$   r   r   )r   r0   reverser   r&   r   remove_edger   r   Rr   r   r   test_reverse_copym   s    z#BaseDiGraphTester.test_reverse_copyc              	   C   sZ   t ddg}|jdd}t| ddgks2ttt j |	dd W 5 Q R X d S )	Nr   r"   F)copyr!   r$   r   r   )
r   r0   rG   r   r&   r   r   r   r   rH   rI   r   r   r   test_reverse_nocopyu   s
    z%BaseDiGraphTester.test_reverse_nocopyc                 C   sj   G dd d}| }| }t  }||| t| |  sHt||fgt|  ksftd S )Nc                   @   s   e Zd ZdS )z4BaseDiGraphTester.test_reverse_hashable.<locals>.FooN)__name__
__module____qualname__r   r   r   r   Foo}   s   rQ   )	r   r0   rE   r   nodesrG   r   r8   r&   )r   rQ   xyr   r   r   r   test_reverse_hashable|   s    z'BaseDiGraphTester.test_reverse_hashablec                 C   s   | j  }|j}t|jt|ks&t|j}t|jt|ksBti |_t|jt|ks^tt|jt|kstt|j}t|jt|ksti |_t|jt|kstd S N)	r   rL   succidr   adj_succpred_pred)r   r   Zold_succZold_adjZold_predr   r   r   test_di_cache_reset   s    
z%BaseDiGraphTester.test_di_cache_resetc                 C   s   | 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t|jt|jkstt|j	t|j	kstd S rV   )
r   rL   rX   r2   r   r(   r=   r?   rW   r[   r   r   r   r   test_di_attributes_cached   s    
z+BaseDiGraphTester.test_di_attributes_cachedN)rN   rO   rP   r   r   r   r   r'   r)   r,   r1   r3   r4   r:   r>   r@   rC   rF   rK   rM   rU   r]   r^   r   r   r   r   r      s(   r   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )BaseAttrDiGraphTesterc              	   C   s   | j }ddi fddi fddi fddi fddi fddi fg}t|jdd|ksRtt|jddd|d d ksttt|jddgdd|d d kstttj |dd W 5 Q R X d S )Nr   r   r   Tr/   r5   r
   r%   )r   r   Z	all_edgesr   r   r   test_edges_data   s    "&z%BaseAttrDiGraphTester.test_edges_datac                 C   s   | j  }|jddddd t|jdddd	d
gks:tt|jddddddksZt|jddddksptt|jddddd
gkstt|jddddddkst|jddddkstt|jtdgdddgkstd S )Nr   r   333333?333333?weightotherrd   rd   r    )r   ?r<   r   rg   r6   re   )r   皙@rh   )	r   rL   rE   r   r=   r   r7   r8   r9   r   r   r   r   test_in_degree_weighted   s    
  z-BaseAttrDiGraphTester.test_in_degree_weightedc                 C   s   | j  }|jddddd t|jdddd	d
gks:tt|jddddddksZt|jddddksptt|jdddd	d
gkstt|jddddddkst|jddddkstt|jtdgdddgkstd S )Nr   r   ra   rb   rc   rd   rf   )r   rg   r"   r<   rg   r   r6   re   )r   rh   rh   )	r   rL   rE   r   r?   r   r7   r8   r9   r   r   r   r   test_out_degree_weighted   s    
  z.BaseAttrDiGraphTester.test_out_degree_weightedN)rN   rO   rP   r`   ri   rj   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 )TestDiGraphz=Tests specific to dict-of-dict-of-dict digraph data structurec                 C   s2  t j| _i i i i i i f\}}}}}}||d||d||dd| _dddg| _dddg| _|  | _| j| j_||d||d||dd| j_i | j_	i | jj	d< i | jj	d< i | jj	d< i i  }}|  | _
d|id|ii d| j
_i d|id|id| j
_i | j
_	i | j
j	d< i | j
j	d< i | j
j	d< d S )Nr"   r    r   r6   r   r   r   )r   r0   rD   Zk3adjZk3edgesZk3nodesr   rZ   r\   _noder+   )r   Zed1Zed2Zed3Zed4Zed5Zed6r   r   r   setup_method   s(     

"

zTestDiGraph.setup_methodc                 C   s   | 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t|j ddi ifddi ifgksztt|j ddi ifddi ifgkstd S )Nr   r   r"   test)name)rD   ro   r   r   rY   itemsrW   r[   r   r   r   r   test_data_input   s
    **zTestDiGraph.test_data_inputc              	   C   s   |   }|dd |jdi ii dks,t|jdi ii dksDt|ji di idks\t|   }|jd  |jdi ii dkst|jdi ii dkst|ji di idksttjtdd |d d W 5 Q R X d S )Nr   r   r   None cannot be a nodematch   )	rD   rE   rY   r   rW   r[   r   r   
ValueErrorr   r   r   r   test_add_edge   s    
zTestDiGraph.test_add_edgec              	   C   s(  |   }|jdddddifgdd |jddiddidi i dksHt|jddiddidi i dkslt|ji dddiidddiidkstttj	 |d	g W 5 Q R X ttj	 |d
g W 5 Q R X tt
 |dg W 5 Q R X tjtdd |ddg W 5 Q R X d S )Nr   r   r   r.   ru   r/   r"   r6   )r   )r   r   r   ru   rr   rs   )Nru   )ru   r   )rD   Zadd_edges_fromrY   r   rW   r[   r   r   r   r   	TypeErrorrv   r   r   r   r   test_add_edges_from   s    $$&zTestDiGraph.test_add_edges_fromc              	   C   s   | j  }|dd |jdi ii i di i ddks<t|ji i ddi ii i ddksbtttj	 |dd W 5 Q R X d S )	Nr   r   r   r    r   r6   r"   r
   )
r   rL   rH   rW   r   r[   r   r   r   r   r   r   r   r   test_remove_edge
  s    
&&zTestDiGraph.test_remove_edgec                 C   sr   | j  }|dg |jdi ii i di i ddks<t|ji i ddi ii i ddksbt|dg d S )Nr   r   r    r6   r"   )r   r   )r   rL   Zremove_edges_fromrW   r   r[   r   r   r   r   test_remove_edges_from  s
    
&&z"TestDiGraph.test_remove_edges_fromc                 C   sX   | j }d|jd< |  t|jg ks*t|ji ks8t|ji ksFt|ji ksTtd S )Nr   ro   )r   graphclearr8   rR   r   rW   r[   r   r   r   r   
test_clear  s    
zTestDiGraph.test_clearc                 C   s   | j }d|jd< t|j}|  t|j|ks4ti i i d}|j|ksNt|j|ks\tt|jg ksnt|jd dkstd S )Nr   ro   r6   )	r   r|   r8   rR   Zclear_edgesr   rW   r[   r&   )r   r   rR   expectedr   r   r   test_clear_edges"  s    

zTestDiGraph.test_clear_edgesN)rN   rO   rP   __doc__rm   rq   rw   ry   rz   r{   r~   r   r   r   r   r   rk      s   	rk   c                   @   s    e Zd ZdZdd Zdd ZdS )r   z8Unit tests for the :meth:`DiGraph.edge_subgraph` method.c                 C   sr   t 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 )	N   nodero   Zedge01r   Zedge34)ru   r5   r|   )
r   r0   Z
path_graphrangerR   r&   r|   r   edge_subgraphH)r   r   ir   r   r   rm   2  s    
zTestEdgeSubgraph.setup_methodc                 C   s   t  }|dd |dg}t|dg ks6tt|ddgksNtt|ddgksftt|dg ks|tdS )zzTest that nodes are added to predecessors and successors.

        For more information, see GitHub issue #2370.

        r   r   r   N)r   r0   rE   r   r8   r   r   r   )r   r   r   r   r   r   test_pred_succ?  s    zTestEdgeSubgraph.test_pred_succN)rN   rO   rP   r   rm   r   r   r   r   r   r   /  s   r   )r   Znetworkxr   Znetworkx.utilsr   Z
test_graphr   r   r   Z_TestGraphEdgeSubgraphr   Z
_TestGraphr   r_   rk   r   r   r   r   <module>   s    (f