U
    ¹mœdû/  ã                   @   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   ú\/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/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sŒt‚t|jddd�ƒdgks¨t‚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sŒt‚t|jddd�ƒdgks¨t‚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s�t‚i |_t|jƒt|ƒks¬t‚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s‚t‚t|j	ƒt|j	ƒksšt‚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sšt‚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sŽt‚t|jdd�ƒddddœks®t‚|jddd�dksÄt‚t|jtdgƒdd�ƒdgksæt‚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sŽt‚t|jdd�ƒddddœks®t‚|jddd�dksÄt‚t|jtdgƒdd�ƒdgksæt‚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s¤t‚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s†t‚|jdi ii dœksžt‚|ji di idœks¶t‚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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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s€t‚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