o
    ]Zh/                     @   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   *   | j }|ddsJ |ddrJ d S Nr   r   )K3Zhas_successorselfG r   R/var/www/auris/lib/python3.10/site-packages/networkx/classes/tests/test_digraph.pytest_has_successor      z$BaseDiGraphTester.test_has_successorc                 C   \   | 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   )r   sorted
successorspytestraisesnxNetworkXErrorr   r   r   r   test_successors   
   "z!BaseDiGraphTester.test_successorsc                 C   r	   r
   )r   Zhas_predecessorr   r   r   r   test_has_predecessor   r   z&BaseDiGraphTester.test_has_predecessorc                 C   r   r   )r   r   predecessorsr   r   r   r   r   r   r   r   test_predecessors   r   z#BaseDiGraphTester.test_predecessorsc                 C   s   | j }t| g dksJ t|dddgksJ t|ddgg dks+J ttj |d W d    d S 1 sBw   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   st   | j }t| g dksJ t|dddgksJ ttj |d W d    d S 1 s3w   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sJ t|dg ks&J 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s%J t|jdddddddifgks8J t|jddddgksFJ t|jddddgksTJ d S Nr   r   dataTr1   )r   r   r   )r   r   N)r   DiGraphr   r+   r   r   r   r   test_out_edges_data7   
   ,& z%BaseDiGraphTester.test_out_edges_datac                 C   sP   | j }t| ddgksJ t|dg ksJ t|ddgks&J 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s%J t|jdddddddifgks8J t|jddddgksFJ t|jddddgksTJ d S r0   )r   r3   r   r6   r   r   r   r   test_in_edges_dataD   r5   z$BaseDiGraphTester.test_in_edges_datac                 C   n   | j }t| g dksJ t| ddddksJ |ddks&J t|tdgdgks5J d S )N)r      )r   r;   )r   r;   r;   r   r   r   r   r:   )r   r   Zdegreedictlistiterr   r   r   r   test_degreeK   
   "zBaseDiGraphTester.test_degreec                 C   r9   N)r$   r&   r   r   r   r<   r   r$   )r   r   	in_degreer=   r>   r?   r   r   r   r   test_in_degreeR   rA   z BaseDiGraphTester.test_in_degreec                 C   r9   rB   )r   r   
out_degreer=   r>   r?   r   r   r   r   test_out_degreeY   rA   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`   r   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s2J 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s(J t| ddgks4J d S )Nr#   r&   r%   r'   r   r   )r   r3   reverser   r)   remove_edger   r   Rr   r   r   test_reverse_copym   s   z#BaseDiGraphTester.test_reverse_copyc                 C   sp   t ddg}|jdd}t| ddgksJ tt j |dd W d    d S 1 s1w   Y  d S )	Nr#   r&   F)copyr%   r'   r   r   )	r   r3   rN   r   r)   r   r   r   rO   rP   r   r   r   test_reverse_nocopyu   s   "z%BaseDiGraphTester.test_reverse_nocopyc                 C   sj   G dd d}| }| }t  }||| t| |  s$J ||fgt|  ks3J 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    rX   )r   r3   rL   r   nodesrN   r>   r)   )r   rX   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s!J i |_t|jt|ks/J t|jt|ks:J |j}t|jt|ksHJ i |_t|jt|ksVJ d S N)r   rS   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s)J t|jt|jks5J t|jt|jksAJ t|jt|jksMJ d S r]   )	r   rS   r_   r6   r+   rD   rF   r^   rb   r   r   r   r   test_di_attributes_cached   s   
z+BaseDiGraphTester.test_di_attributes_cachedN)rU   rV   rW   r   r   r   r!   r*   r,   r/   r4   r7   r8   r@   rE   rG   rJ   rM   rR   rT   r\   rd   re   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s)J t|jddd|d d ks:J t|jddgdd|d d ksMJ ttj |dd W d    d S 1 sew   Y  d S )Nr   r   r   Tr2   r;   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sJ t|jddd	d
d	dks,J |jdddd
ks7J t|jddg dksEJ t|jddd	dd	dksUJ |jddddks`J t|jtdgdddgksqJ d S )Nr   r   333333?333333?weightotherrk   rk   )r$   )r   ?rC   r   rn   r<   rl   )r$   r   皙@rC   rp   ro   )r   rS   rL   r   rD   r=   r>   r?   r   r   r   r   test_in_degree_weighted      
  &z-BaseAttrDiGraphTester.test_in_degree_weightedc                 C   s   | j  }|jddddd t|jddg dksJ t|jddd	d
d
dks,J |jdddd	ks7J t|jddg dksEJ t|jdddd
d
dksUJ |jddddks`J t|jtdgdddgksqJ d S )Nr   r   rh   ri   rj   rk   rm   ))r   rn   r&   rC   rn   r   r<   rl   )r   rp   r&   rC   rp   rs   )r   rS   rL   r   rF   r=   r>   r?   r   r   r   r   test_out_degree_weighted   rr   z.BaseAttrDiGraphTester.test_out_degree_weightedN)rU   rV   rW   rg   rq   rt   r   r   r   r   rf      s    rf   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#   r<   )r#   r$   r&   r   r   r   )r   r3   rK   Zk3adjZk3edgesZk3nodesr   ra   rc   _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s(J t|j ddi ifddi ifgks=J t|j ddi ifddi ifgksRJ d S )Nr   r   r&   test)name)rK   ry   r   r`   itemsr^   rb   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s"J |ji di idks.J |   }|jd  |jdi ii dksCJ |jdi ii dksOJ |ji di idks[J tjtdd |d d W d    d S 1 stw   Y  d S )Nr   r   r#   None cannot be a nodematch   )rK   rL   r`   r^   rb   r   r   
ValueErrorr   r   r   r   test_add_edge   s   
"zTestDiGraph.test_add_edgec                 C   sz  |   }|jdddddifgdd |jddiddidi i dks$J |jddiddidi i dks6J |ji dddiidddiidksIJ ttj |d	g W d    n1 s`w   Y  ttj |d
g W d    n1 s|w   Y  tt	 |dg W d    n1 sw   Y  tjt
dd |ddg W d    d S 1 sw   Y  d S )Nr#   r   r   r1   r   r2   r&   r<   )r   )r   r   r   r   r|   r}   )Nr   )r   r   )rK   Zadd_edges_fromr`   r^   rb   r   r   r   r   	TypeErrorr   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s1J ttj |dd W d    d S 1 sIw   Y  d S )	Nr   r   r   r$   r#   r<   r&   r   )	r   rS   rO   r^   rb   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s1J |dg d S )Nr#   r   r$   r<   r&   )r   r   )r   rS   Zremove_edges_fromr^   rb   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sJ |ji ks#J |ji ks*J d S )Nr   ry   )r   graphclearr>   rY   r^   rb   r   r   r   r   
test_clear  s   
zTestDiGraph.test_clearc                 C   s   | j }d|jd< t|j}|  t|j|ksJ i i i d}|j|ks'J |j|ks.J t|jg ks7J |jd dks@J d S )Nr   ry   r<   )r   r   r>   rY   Zclear_edgesr^   rb   r)   )r   r   rY   expectedr   r   r   test_clear_edges"  s   

zTestDiGraph.test_clear_edgesN)rU   rV   rW   __doc__rw   r{   r   r   r   r   r   r   r   r   r   r   ru      s    	ru   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   nodery   Zedge01r#   Zedge34)r   r;   r   )
r   r3   Z
path_graphrangerY   r)   r   r   edge_subgraphH)r   r   ir   r   r   rw   2  s   
zTestEdgeSubgraph.setup_methodc                 C   s   t  }|dd |dg}t|dg ksJ t|ddgks'J t|ddgks3J 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   r3   rL   r   r>   r    r   )r   r   r   r   r   r   test_pred_succ?  s   zTestEdgeSubgraph.test_pred_succN)rU   rV   rW   r   rw   r   r   r   r   r   r   /  s    r   )r   Znetworkxr   Znetworkx.utilsr   Z
test_graphr   r   r   Z_TestGraphEdgeSubgraphr   Z
_TestGraphr   rf   ru   r   r   r   r   <module>   s     (f