o
    ˷e/                     @   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   )K3has_successorselfG r   Z/var/www/ideatree/venv/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   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r3   )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/   )r0   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 r2   )r   r5   r   r8   r   r   r   r   test_in_edges_dataD   r7   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   degreedictlistiterr   r   r   r   test_degreeK   
   "zBaseDiGraphTester.test_degreec                 C   r;   N)r&   r(   r   r   r   r>   r   r&   )r   r   	in_degreer@   rA   rB   r   r   r   r   test_in_degreeR   rD   z BaseDiGraphTester.test_in_degreec                 C   r;   rE   )r   r   
out_degreer@   rA   rB   r   r   r   r   test_out_degreeY   rD   z!BaseDiGraphTester.test_out_degreec                 C   s*   | j }| dksJ | dksJ d S )N   )r   size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)
reciprocal)Graphadd_edgeto_undirected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   r5   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   r5   rU   r   r+   r   r   r   rV   rW   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    r_   )r   r5   rQ   r   nodesrU   rA   r+   )r   r_   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   rZ   succidadj_succpred_pred)r   r   old_succold_adj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 rd   )	r   rZ   rf   r8   r-   rG   rI   re   ri   r   r   r   r   test_di_attributes_cached   s   
z+BaseDiGraphTester.test_di_attributes_cachedN)r\   r]   r^   r   r   r!   r#   r,   r.   r1   r6   r9   r:   rC   rH   rJ   rN   rT   rY   r[   rc   rn   ro   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   Tr4   r=   r   r*   )r   r   	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otherrv   rv   )r&   )r   ?rF   r   ry   r>   rw   )r&   r   皙@rF   r{   rz   )r   rZ   rQ   r   rG   r@   rA   rB   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   rs   rt   ru   rv   rx   ))r   ry   r(   rF   ry   r   r>   rw   )r   r{   r(   rF   r{   r~   )r   rZ   rQ   r   rI   r@   rA   rB   r   r   r   r   test_out_degree_weighted   r}   z.BaseAttrDiGraphTester.test_out_degree_weightedN)r\   r]   r^   rr   r|   r   r   r   r   r   rp      s    rp   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   r5   rP   k3adjk3edgesk3nodesr   rh   rj   _noder0   )r   ed1ed2ed3ed4ed5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)rP   r   r   rg   itemsre   ri   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 d S )Nr   r   r%   )rP   rQ   rg   re   ri   r   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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    d S 1 sw   Y  d S )Nr%   r   r   r3      r4   r(   r>   )r   )r   r   r   r   )
rP   add_edges_fromrg   re   ri   r   r   r   r   	TypeErrorr   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   rZ   rV   re   ri   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   rZ   remove_edges_fromre   ri   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   r   )r   graphclearrA   r`   re   ri   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   r   r>   )r   r   rA   r`   clear_edgesre   ri   r+   )r   r   r`   expectedr   r   r   test_clear_edges  s   

zTestDiGraph.test_clear_edgesN)r\   r]   r^   __doc__r   r   r   r   r   r   r   r   r   r   r   r   r      s    	r   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   noder   edge01r%   edge34)r   r=   r   )
r   r5   
path_graphranger`   r+   r   r   edge_subgraphH)r   r   ir   r   r   r   .  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   r5   rQ   r   rA   r"   r   )r   r   r   r   r   r   test_pred_succ;  s   zTestEdgeSubgraph.test_pred_succN)r\   r]   r^   r   r   r   r   r   r   r   r   +  s    r   )r   networkxr   networkx.utilsr   
test_graphr   r   r   _TestGraphEdgeSubgraphr   
_TestGraphr   rp   r   r   r   r   r   <module>   s     (b