a
    h/                     @   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J |ddr&J d S Nr   r   )K3Zhas_successorselfG r   Q/var/www/auris/lib/python3.9/site-packages/networkx/classes/tests/test_digraph.pytest_has_successor   s    z$BaseDiGraphTester.test_has_successorc                 C   sZ   | j }t|dddgks J ttj |d W d    n1 sL0    Y  d S Nr   r      r
   )r   sorted
successorspytestraisesnxNetworkXErrorr   r   r   r   test_successors   s    z!BaseDiGraphTester.test_successorsc                 C   s*   | j }|ddsJ |ddr&J d S r	   )r   Zhas_predecessorr   r   r   r   test_has_predecessor   s    z&BaseDiGraphTester.test_has_predecessorc                 C   sZ   | j }t|dddgks J ttj |d W d    n1 sL0    Y  d S r   )r   r   predecessorsr   r   r   r   r   r   r   r   test_predecessors   s    z#BaseDiGraphTester.test_predecessorsc                 C   s   | j }t| g dksJ t|dddgks8J t|ddgg dksVJ ttj |d W d    n1 s0    Y  d S )Nr   r   r   r   r   r   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   
test_edges"   s    zBaseDiGraphTester.test_edgesc                 C   sr   | j }t| g dksJ t|dddgks8J ttj |d W d    n1 sd0    Y  d S )Nr   r   r   r    r
   )r   r   	out_edgesr   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J t|ddgks6J t|dg ksLJ d S Nr   r"   r   r   )P3r   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sJJ t|jdddddddifgkspJ t|jddddgksJ t|jddddgksJ d S Nr   r   dataTr-   )r   r   r   )r   r   N)r   DiGraphr   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J t|dg ks4J t|ddgksLJ d S r)   )r*   r   in_edgesr   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sJJ t|jdddddddifgkspJ t|jddddgksJ t|jddddgksJ d S r,   )r   r/   r   r1   r   r   r   r   test_in_edges_dataD   s
    ,&z$BaseDiGraphTester.test_in_edges_datac                 C   sn   | j }t| g dksJ t| ddddks:J |ddksLJ t|tdgdgksjJ d S )N)r      )r   r5   )r   r5   r5   r   r   r   r   r4   )r   r   Zdegreedictlistiterr   r   r   r   test_degreeK   s
    zBaseDiGraphTester.test_degreec                 C   sn   | j }t| g dksJ t| ddddks:J |ddksLJ t|tdgdgksjJ d S N)r    r"   r   r   r   r6   r   r    )r   r   	in_degreer7   r8   r9   r   r   r   r   test_in_degreeR   s
    z BaseDiGraphTester.test_in_degreec                 C   sn   | j }t| g dksJ t| ddddks:J |ddksLJ t|tdgdgksjJ d S r;   )r   r   
out_degreer7   r8   r9   r   r   r   r   test_out_degreeY   s
    z!BaseDiGraphTester.test_out_degreec                 C   s*   | j }| dksJ | dks&J d S )N   )r   sizeZnumber_of_edgesr   r   r   r   	test_size`   s    zBaseDiGraphTester.test_sizec                 C   sh   |   }|dd | dds(J |jddddr@J |dd |jddddsdJ d S )Nr   r   T)Z
reciprocal)Graphadd_edgeZto_undirectedZhas_edger   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.J |dd t| dgksPJ t| ddgkshJ d S )Nr   r"   r!   r#   r   r   )r   r/   reverser   r%   remove_edger   r   Rr   r   r   test_reverse_copym   s    z#BaseDiGraphTester.test_reverse_copyc                 C   sn   t ddg}|jdd}t| ddgks2J tt j |dd W d    n1 s`0    Y  d S )	Nr   r"   F)copyr!   r#   r   r   )	r   r/   rG   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| |  sHJ ||fgt|  ksfJ 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   r/   rE   r   nodesrG   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&J |j}t|jt|ksBJ i |_t|jt|ks^J t|jt|kstJ |j}t|jt|ksJ i |_t|jt|ksJ d S N)r   rL   succid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"J t|jt|jks:J t|jt|jksRJ t|jt|jksjJ t|jt|jksJ t|jt|jksJ d S rV   )	r   rL   rX   r1   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+   r0   r2   r3   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sRJ t|jddd|d d kstJ t|jddgdd|d d ksJ ttj |dd W d    n1 s0    Y  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g dks8J t|jddd	d
d	dksXJ |jdddd
ksnJ t|jddg dksJ t|jddd	dd	dksJ |jddddksJ t|jtdgdddgksJ d S )Nr   r   333333?333333?weightotherrd   rd   )r    )r   ?r<   r   rg   r6   re   )r    r   皙@r<   ri   rh   )r   rL   rE   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g dks8J t|jddd	d
d
dksXJ |jdddd	ksnJ t|jddg dksJ t|jdddd
d
dksJ |jddddksJ t|jtdgdddgksJ d S )Nr   r   ra   rb   rc   rd   rf   ))r   rg   r"   r<   rg   r   r6   re   )r   ri   r"   r<   ri   rk   )r   rL   rE   r   r?   r7   r8   r9   r   r   r   r   test_out_degree_weighted   s    
  z.BaseAttrDiGraphTester.test_out_degree_weightedN)rN   rO   rP   r`   rj   rl   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   s.  t j| _i i i i i i f\}}}}}}||d||d||dd| _g d| _g d| _|  | _| 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   r   r   )r   r/   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&J t|j ddi ifddi ifgksPJ t|j ddi ifddi ifgkszJ t|j ddi ifddi ifgksJ d S )Nr   r   r"   test)name)rD   rq   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,J |jdi ii dksDJ |ji di idks\J |   }|jd  |jdi ii dksJ |jdi ii dksJ |ji di idksJ tjtdd |d d W d    n1 s0    Y  d S )Nr   r   r   None cannot be a nodematch   )rD   rE   rY   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sHJ |jddiddidi i dkslJ |ji dddiidddiidksJ ttj |d	g W d    n1 s0    Y  ttj |d
g W d    n1 s0    Y  tt	 |dg W d    n1 s00    Y  tjt
dd |ddg W d    n1 sn0    Y  d S )Nr   r   r   r-   rw   r.   r"   r6   )r   )r   r   r   rw   rt   ru   )Nrw   )rw   r   )rD   Zadd_edges_fromrY   rW   r[   r   r   r   r   	TypeErrorrx   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<J |ji i ddi ii i ddksbJ ttj |dd W d    n1 s0    Y  d S )	Nr   r   r   r    r   r6   r"   r
   )	r   rL   rH   rW   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<J |ji i ddi ii i ddksbJ |dg d S )Nr   r   r    r6   r"   )r   r   )r   rL   Zremove_edges_fromrW   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*J |ji ks8J |ji ksFJ |ji ksTJ d S )Nr   rq   )r   graphclearr8   rR   rW   r[   r   r   r   r   
test_clear  s    
zTestDiGraph.test_clearc                 C   s   | j }d|jd< t|j}|  t|j|ks4J i i i d}|j|ksNJ |j|ks\J t|jg ksnJ |jd dksJ d S )Nr   rq   r6   )r   r~   r8   rR   Zclear_edgesrW   r[   r%   )r   r   rR   expectedr   r   r   test_clear_edges"  s    

zTestDiGraph.test_clear_edgesN)rN   rO   rP   __doc__ro   rs   ry   r{   r|   r}   r   r   r   r   r   r   rm      s   	rm   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   noderq   Zedge01r   Zedge34)rw   r5   r~   )
r   r/   Z
path_graphrangerR   r%   r~   r   edge_subgraphH)r   r   ir   r   r   ro   2  s    
zTestEdgeSubgraph.setup_methodc                 C   s   t  }|dd |dg}t|dg ks6J t|ddgksNJ t|ddgksfJ t|dg ks|J dS )zzTest that nodes are added to predecessors and successors.

        For more information, see GitHub issue #2370.

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