U
    ¹mœdˆ3  ã                   @   s|   d dl Z d dlZd dlmZ G dd„ dƒZG dd„ deƒZG dd„ deƒZG d	d
„ d
eeƒZG dd„ dƒZ	G dd„ dƒZ
dS )é    N)Úedges_equalc                   @   sb   e Zd ZeejjƒZejZ	eej
jƒZeej
jƒZedd„ ƒZdd„ Zdd„ Zdd„ Zd	d
„ ZdS )ÚTestSubGraphViewc                 C   s$   t jd|  ¡ d�| _dddh| _d S )Né	   ©Zcreate_using©é   é   ©r   é   ©r
   é   )ÚnxÚ
path_graphÚgraphÚGÚhide_edges_w_hide_nodes)Úcls© r   úb/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/networkx/classes/tests/test_subgraphviews.pyÚsetup_class   s    zTestSubGraphView.setup_classc                 C   s<  dddg}t j |¡}| j}t|ƒ || j|d�}| jj|j ddhksLt‚| jj|j | j	ksdt‚| 
¡ r˜t|d ƒg ks€t‚t|d ƒdgksÆt‚n.t|d ƒdgks®t‚t|d ƒddhksÆt‚t t|jd¡ t t|jd¡ t t|jd¡ | d¡| ¡ �rdndk�st‚| ¡ | ¡ �r,d	ndk�s8t‚d S )
Nr   r
   éo   ©Zfilter_noder   é   é   ép   é   )r   ÚfiltersÚ
hide_nodesÚgviewÚprintr   ÚnodesÚAssertionErrorÚedgesr   Úis_directedÚlistÚsetÚpytestÚraisesÚKeyErrorÚ__getitem__ÚdegreeÚis_multigraphÚsize)Úselfr   Ú
nodes_goner   r   r   r   r   Útest_hidden_nodes   s"    
"z"TestSubGraphView.test_hidden_nodesc                 C   s>  dddg}|   |¡}| j}|| j|d�}| jj|jks:t‚| ¡ r®| jj|j dhksZt‚t|d ƒg ksnt‚t|jd ƒg ks„t‚t|jd ƒdgksœt‚| 	¡ dksît‚n@| jj|j dd	hksÈt‚t|d ƒdgksÞt‚| 	¡ d
ksît‚t|d ƒdgk�st‚t
 t|jd¡ t
 t|jd¡ | d¡dk�s:t‚d S )N©r   r   ©é   r   ©éÞ   éß   ©Zfilter_edger   r   r   r   ©r   r2   r   r   éÝ   r4   )Úhide_edges_filterr   r   r    r!   r#   r"   r$   Úpredr,   r&   r'   r(   r)   r*   )r-   Ú
hide_edgesÚ
edges_goner   r   r   r   r   Útest_hidden_edges&   s$    

z"TestSubGraphView.test_hidden_edgesc                 C   sô   t j dddg¡}| j}|| j|d�}t|jƒddhks<t‚| ¡ rZt	|d ƒg kspt‚nt	|d ƒdgkspt‚t	|d ƒdgks†t‚t
 t|jd¡ t
 t|jd¡ t
 t|jd¡ | d¡| ¡ rÊdndksÔt‚| ¡ | ¡ rædndksðt‚d S )Nr   r   r   r   r   r   r   )r   r   Z
show_nodesr   r   r%   r    r!   r#   r$   r&   r'   r(   r)   r*   r+   r,   )r-   Úinduced_subgraphr   r   r   r   r   Útest_shown_node;   s    z TestSubGraphView.test_shown_nodec                 C   s@  dddg}|   |¡}| j| j|d�}| jj|jks6t‚| ¡ r¸|jdhksNt‚t|d ƒg ksbt‚t|d ƒdgksxt‚t|jd ƒdgks�t‚t|jd ƒg ks¦t‚| 	¡ dks¶t‚nP|jddhksÊt‚t|d ƒdgksàt‚t|d ƒdgksöt‚| 	¡ dk�st‚t
 t|jd	¡ t
 t|jd
¡ | d¡dk�s<t‚d S )Nr0   r1   r3   r6   r   r   r   r7   r8   r4   )Úshow_edges_filterr   r   r    r!   r#   r"   r$   r:   r,   r&   r'   r(   r)   r*   ©r-   Ú
show_edgesÚedge_subgraphr   r   r   r   Útest_shown_edgesK   s$    

z!TestSubGraphView.test_shown_edgesN)Ú__name__Ú
__module__Ú__qualname__Ústaticmethodr   Ú
graphviewsÚsubgraph_viewr   ZGraphr   r   r;   r9   rB   r@   Úclassmethodr   r/   r=   r?   rD   r   r   r   r   r      s   
r   c                   @   sd   e Zd ZeejjƒZejZ	eej
jƒZeej
jƒZdddgZddddhZdd„ Zd	d
„ Zdd„ ZdS )ÚTestSubDiGraphViewr0   r1   r3   r   r	   r   c                 C   sf   |   | j¡}dddg}tj |¡}|  | j||¡}| jj|j | jksJt	‚| jj
|j
 | jksbt	‚d S )Nr   r
   r   )r9   r;   r   r   r   r   r   Zin_edgesÚexcludedr!   Z	out_edges©r-   r<   r   r.   r   r   r   r   Útest_inoutedgesi   s    
z"TestSubDiGraphView.test_inoutedgesc                 C   sd   |   | j¡}dddg}tj |¡}|  | j||¡}t|jd ƒdgksJt	‚t|jd ƒg ks`t	‚d S )Nr   r
   r   r   r   r   )
r9   r;   r   r   r   r   r   r$   r:   r!   rN   r   r   r   Ú	test_predr   s    
zTestSubDiGraphView.test_predc                 C   s|   |   | j¡}dddg}tj |¡}|  | j||¡}| d¡dksDt‚| 	d¡dksVt‚| 
d¡dksht‚| ¡ dksxt‚d S )Nr   r
   r   r   r   r   ©r9   r;   r   r   r   r   r   r*   r!   Z
out_degreeZ	in_degreer,   rN   r   r   r   Útest_inout_degree{   s    
z$TestSubDiGraphView.test_inout_degreeN)rE   rF   rG   rH   r   rI   rJ   r   ZDiGraphr   r   Zhide_diedgesr9   Zshow_diedgesr@   r;   rM   rO   rP   rR   r   r   r   r   rL   a   s   
		rL   c                   @   sR   e Zd ZeejjƒZejZ	eej
jƒZeej
jƒZedd„ ƒZdd„ Zdd„ ZdS )ÚTestMultiGraphViewc                 C   s8   t jd|  ¡ d�| _ddh}| j |¡ dddh| _d S )Nr   r   ©r   r   r   )r   r   r
   ©r   r   r   ©r   r
   r   ©r
   r   r   )r   r   r   r   Zadd_edges_fromr   )r   Z
multiedgesr   r   r   r   Ž   s    zTestMultiGraphView.setup_classc                 C   s\  ddddg}|   |¡}| j| j|d�}| jj|jks8t‚| ¡ rÆ| jj|j dhksXt‚t|d ƒdgksnt‚t|d ƒdgks„t‚t|jd ƒdgksœt‚t|jd ƒd	gks´t‚| 	¡ d
ksÄt‚n^| jj|j ddhksàt‚t|d ƒddgksøt‚t|d ƒd	dgk�st‚| 	¡ dk�s$t‚| 
d¡dk�s8t‚t t|jd¡ t t|jd¡ d S )NrT   ©r   r   r   ©r2   r   r   ©r4   r5   r   r6   r   r   r   r   r   ©r   r2   r   r2   r8   r4   )r9   r   r   r    r!   r#   r"   r$   r:   r,   r*   r&   r'   r(   r)   )r-   r;   r<   r   r   r   r   r=   •   s$    
z$TestMultiGraphView.test_hidden_edgesc                 C   s*  ddddg}|   |¡}| j| j|d�}| jj|jks8t‚| ¡ r¤|jdhksPt‚t|d ƒg ksdt‚t|jd ƒdgks|t‚t|jd ƒg ks’t‚| 	¡ dksÜt‚n8|jdd	hks¶t‚| 	¡ dksÆt‚t|d ƒdgksÜt‚| 
d¡dksît‚t|d ƒdgk�st‚t t|jd
¡ t t|jd¡ d S )NrT   rX   rY   rZ   r6   r   r   r   r[   r8   r4   )r@   r   r   r    r!   r#   r"   r$   r:   r,   r*   r&   r'   r(   r)   rA   r   r   r   rD   ª   s"    
z#TestMultiGraphView.test_shown_edgesN)rE   rF   rG   rH   r   rI   rJ   r   Z
MultiGraphr   r   Zhide_multiedgesr9   Zshow_multiedgesr@   rK   r   r=   rD   r   r   r   r   rS   ˆ   s   
rS   c                   @   sT   e Zd ZeejjƒZejZ	eej
jƒZeej
jƒZdddgZddddhZdd„ Zd	S )
ÚTestMultiDiGraphView)r   r   r   rY   rZ   rU   rV   rW   c                 C   s|   |   | j¡}dddg}tj |¡}|  | j||¡}| d¡dksDt‚| 	d¡dksVt‚| 
d¡dksht‚| ¡ dksxt‚d S )Nr   r
   r   r   r   r   r   rQ   rN   r   r   r   rR   È   s    
z&TestMultiDiGraphView.test_inout_degreeN)rE   rF   rG   rH   r   rI   rJ   r   ZMultiDiGraphr   r   Zhide_multidiedgesr9   Zshow_multidiedgesr@   r;   rM   rR   r   r   r   r   r\   À   s   
r\   c                   @   s8   e Zd Zedd„ ƒZdd„ Zdd„ Zdd„ Zd	d
„ ZdS )ÚTestInducedSubGraphc                 C   s\   t  d¡ | _}g |jd< g |jd d< | dd¡ g }|jdd|d� |jdd|d� d S )Nr   Úfoor   r   r   )r^   )r   Zcomplete_graphÚK3r   r    Úremove_edgeÚadd_edge)r   r   Úllr   r   r   r   Ö   s    
zTestInducedSubGraph.setup_classc                 C   sF   | j }t |ddddg¡}|j|jks*t‚|  ||¡ |  ||¡ d S )Nr   r   r   r
   )r_   r   r>   Únamer!   Úgraphs_equalÚsame_attrdict©r-   r   ÚHr   r   r   Útest_full_graphà   s
    z#TestInducedSubGraph.test_full_graphc                 C   sr   | j }t |d¡}t|jƒdi iks(t‚t|jƒdi iks>t‚t |ddg¡}t|jƒdi idi idœksnt‚d S )Nr   r   ©r   r   )r_   r   r>   ÚdictZadjr!   rf   r   r   r   Útest_partial_subgraphç   s    z)TestInducedSubGraph.test_partial_subgraphc                 C   sš   |d d d }d|j d d< |j |j ks.t‚||j d d< |j |j ksLt‚|jd d }d|jd d< |j|jksxt‚||jd d< |j|jks–t‚d S )Nr   r   r^   Zbaz)r   r   r   )r"   r!   r    )r-   rg   r   Zold_foor   r   r   re   ð   s    z!TestInducedSubGraph.same_attrdictc                 C   s*  |j |j kst‚|j|jks t‚|j|jks0t‚|j|jks@t‚| ¡ s’| ¡ s’|j d d |j d d kspt‚|j d d |j d d ks�t‚n”| ¡ sª|j |_|j |_| ¡ sÂ|j |_|j |_|j|jksÒt‚|j|jksât‚|jd d |jd d k�st‚|jd d |jd d k�s&t‚d S )Nr   r   )Z_adjr!   Ú_noder   rc   r#   Z_predZ_succ)r-   rg   r   r   r   r   rd   ü   s"     ""z TestInducedSubGraph.graphs_equalN)	rE   rF   rG   rK   r   rh   rk   re   rd   r   r   r   r   r]   Õ   s   
		r]   c                   @   sX   e Zd Ze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 )ÚTestEdgeSubGraphc                 C   sn   t  d¡ | _}tdƒD ]}d|› �|j| d< qd|jd d< d|jd d< d|jd< t  |ddg¡| _d S )	Nr
   Únoderc   Úedge01ri   Úedge34r   r   )	r   r   r   Úranger    r"   r   rC   rg   )r   r   Úir   r   r   r     s    
zTestEdgeSubGraph.setup_classc                 C   s&   ddddgt | jj d¡ƒks"t‚dS )z.Tests that the subgraph has the correct nodes.)r   Únode0)r   Únode1)r   Znode3)r   Znode4rc   N)Úsortedrg   r    Údatar!   ©r-   r   r   r   Útest_correct_nodes   s    ÿz#TestEdgeSubGraph.test_correct_nodesc                 C   s    t ddg| jj d¡ƒst‚dS )z.Tests that the subgraph has the correct edges.)r   r   ro   )r   r   rp   rc   N)r   rg   r"   rv   r!   rw   r   r   r   Útest_correct_edges&  s     ÿz#TestEdgeSubGraph.test_correct_edgesc                 C   s8   | j  d¡ ddddgt| jjƒks(t‚| j  d¡ dS )zkTests that adding a node to the original graph does not
        affect the nodes of the subgraph.

        r
   r   r   r   r   N)r   Úadd_noderu   rg   r    r!   Úremove_noderw   r   r   r   Útest_add_node,  s    zTestEdgeSubGraph.test_add_nodec                 C   sL   | j  d¡ dddgt| jjƒks&t‚| j jddd� | j jdddd� dS )	zeTests that removing a node in the original graph
        removes the nodes of the subgraph.

        r   r   r   r   rs   )rc   ro   N)r   r{   ru   rg   r    r!   rz   ra   rw   r   r   r   Útest_remove_node5  s    z!TestEdgeSubGraph.test_remove_nodec                 C   s¤   | j D ] }| jj| | j j| kst‚qd| jjd d< | jjd | j jd ksTt‚d| j jd d< | jjd | j jd ks€t‚d| jjd d< d| j jd d< dS )	z`Tests that the node attribute dictionary of the two graphs is
        the same object.

        r^   r   rc   Úbarr   rs   rt   N)rg   r   r    r!   )r-   Úvr   r   r   Útest_node_attr_dict?  s    
z$TestEdgeSubGraph.test_node_attr_dictc                 C   sÄ   | j  ¡ D ],\}}| jj||f | j j||f ks
t‚q
d| jjd d< | jjd d | j jd d kslt‚d| j jd d< | jjd d | j jd d ks t‚d| jjd d< d| j jd d< dS )	z`Tests that the edge attribute dictionary of the two graphs is
        the same object.

        r^   ri   rc   r~   r   ro   rp   N)rg   r"   r   r!   )r-   Úur   r   r   r   Útest_edge_attr_dictO  s    &$$z$TestEdgeSubGraph.test_edge_attr_dictc                 C   s   | j j| jjkst‚dS )zaTests that the graph attribute dictionary of the two graphs
        is the same object.

        N)r   r   rg   r!   rw   r   r   r   Útest_graph_attr_dict_  s    z%TestEdgeSubGraph.test_graph_attr_dictc                 C   sX   t  tj| jjd¡ t  tj| jjd¡ t  tj| jjdd¡ t  tj| jjdd¡ dS )z9Tests that the subgraph cannot change the graph structurer
   r   r   r   N)	r&   r'   r   ZNetworkXErrorrg   rz   r{   ra   r`   rw   r   r   r   Útest_readonlyf  s    zTestEdgeSubGraph.test_readonlyN)rE   rF   rG   rK   r   rx   ry   r|   r}   r€   r‚   rƒ   r„   r   r   r   r   rm     s   
	
rm   )r&   Znetworkxr   Znetworkx.utilsr   r   rL   rS   r\   r]   rm   r   r   r   r   Ú<module>   s   Z'8=