U
    9vf3                     @   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   M/tmp/pip-unpacked-wheel-_lngutwb/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|
 rt|d g kstt|d dgkstn.t|d dgkstt|d ddhkst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stt|jd dgkst|	 dkstn@| jj|j dd	hkstt|d dgkst|	 d
kst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stt
t|jd t
t|jd t
t|jd |d| rdndkst| | rdndkst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stt|jd g kst|	 dkstnP|jddhkstt|d dgkstt|d dgkst|	 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stt|jd dgkstt|jd d	gkst|	 d
kstn^| jj|j ddhkstt|d ddgkst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st|	 dkstn8|jdd	hkst|	 dkstt|d dgkst|
ddkst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   Z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!   re   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std S )Nr   r   r^   Zbaz)r   r   r   )r"   r!   r    )r-   rf   r   Zold_foor   r   r   rd      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stn| s|j |_|j |_| s|j |_|j |_|j|jkst|j|jkst|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   rb   r#   Z_predZ_succ)r-   rf   r   r   r   r   rc      s"     ""z TestInducedSubGraph.graphs_equalN)	rE   rF   rG   rK   r   rg   rj   rd   rc   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
   noderb   edge01rh   edge34r   r   )	r   r   r   ranger    r"   r   rC   rf   )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node4rb   N)sortedrf   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   rn   )r   r   ro   rb   N)r   rf   r"   ru   r!   rv   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_nodert   rf   r    r!   remove_noderv   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   rr   )rb   rn   N)r   rz   rt   rf   r    r!   ry   ra   rv   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st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   rb   barr   rr   rs   N)rf   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st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^   rh   rb   r}   r   rn   ro   N)rf   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   rf   r!   rv   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NetworkXErrorrf   ry   rz   ra   r`   rv   r   r   r   test_readonlyf  s    zTestEdgeSubGraph.test_readonlyN)rE   rF   rG   rK   r   rw   rx   r{   r|   r   r   r   r   r   r   r   r   rl     s   
	
rl   )r&   Znetworkxr   Znetworkx.utilsr   r   rL   rS   r\   r]   rl   r   r   r   r   <module>   s   Z'8=