a
    h3                     @   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                   @   s`   e Zd Zee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| _h d| _d S )N	   Zcreate_using>         r         r   )nx
path_graphgraphGhide_edges_w_hide_nodes)cls r   W/var/www/auris/lib/python3.9/site-packages/networkx/classes/tests/test_subgraphviews.pysetup_class   s    zTestSubGraphView.setup_classc                 C   s2  g d}t j|}| j}|| j|d}| jj|j ddhksBJ | jj|j | jksZJ | rt	|d g ksvJ t	|d dgksJ n.t	|d dgksJ t
|d ddhksJ tt|jd tt|jd tt|jd	 |d| rdndksJ | | r"d
ndks.J d S )Nr   r   o   filter_noder   r   r         p   r      )r   filters
hide_nodesgviewr   nodes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<  g d}|  |}| j}|| j|d}| jj|jks8J | r| jj|j dhksXJ t|d g kslJ t|jd g ksJ t|jd dgksJ | dksJ n@| jj|j ddhksJ t|d dgksJ | d	ksJ t|d d
gksJ t	
t|jd t	
t|jd |ddks8J d S )Nr   r   )   r   )      filter_edger1   r   r   r   r   r   r2   r
   r      r3   )hide_edges_filterr    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g d}| j}|| j|d}t|jddhks:J | rXt|d g ksnJ nt|d dgksnJ t|d dgksJ t	
t|jd t	
t|jd t	
t|jd |d| rdndksJ | | rdndksJ d S )	N)r   r   r   r   r   r   r   r   r   r   )r   r   Z
show_nodesr    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>  g d}|  |}| j| j|d}| jj|jks4J | r|jdhksLJ t|d g ks`J t|d dgksvJ t|jd dgksJ t|jd g ksJ | dksJ nP|jddhksJ t|d dgksJ t|d dgksJ | dksJ t	
t|jd t	
t|jd	 |ddks:J d S )
Nr0   r5   r1   r   r   r   r7   r8   r3   )show_edges_filterr    r   r!   r#   r"   r$   r:   r,   r&   r'   r(   r)   r*   r-   
show_edgesedge_subgraphr   r   r   r   test_shown_edgesJ   s$    
z!TestSubGraphView.test_shown_edgesN)__name__
__module____qualname__staticmethodr   subgraph_viewr    ZGraphr   r   r;   r9   rB   r@   classmethodr   r/   r=   r?   rD   r   r   r   r   r      s   

r   c                   @   s\   e Zd ZeejZejZeej	j
Zeej	jZg dZh dZdd Zdd Zdd Zd	S )
TestSubDiGraphViewr0   >   r1   r   r	   r   c                 C   sf   |  | j}g d}tj|}| j| j||d}| jj|j | jksJJ | jj	|j	 | jksbJ d S )Nr   r   r6   )
r9   r;   r   r   r   r    r   Zin_edgesexcludedZ	out_edgesr-   r<   r   r.   r   r   r   r   test_inoutedgesh   s    z"TestSubDiGraphView.test_inoutedgesc                 C   sd   |  | j}g d}tj|}| j| j||d}t|jd dgksJJ t|jd g ks`J d S )Nr   rL   r   r   r
   )	r9   r;   r   r   r   r    r   r$   r:   rN   r   r   r   	test_predq   s    zTestSubDiGraphView.test_predc                 C   s|   |  | j}g d}tj|}| j| j||d}|ddksDJ |ddksVJ |	ddkshJ |
 dksxJ d S )Nr   rL   r   r   r   r   r9   r;   r   r   r   r    r   r*   Z
out_degreeZ	in_degreer,   rN   r   r   r   test_inout_degreez   s    z$TestSubDiGraphView.test_inout_degreeN)rE   rF   rG   rH   r   rI   r    ZDiGraphr   r   Zhide_diedgesr9   Zshow_diedgesr@   r;   rM   rO   rP   rR   r   r   r   r   rK   `   s   
		rK   c                   @   sP   e Zd Zee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   s6   t jd|  d| _ddh}| j| h d| _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   sX  g d}|  |}| j| j|d}| jj|jks4J | r| jj|j dhksTJ t|d dgksjJ t|d dgksJ t|jd dgksJ t|jd dgksJ | dksJ n^| jj|j dd	hksJ t|d ddgksJ t|d ddgksJ | d
ks J |	ddks4J t
t|jd t
t|jd d S )NrT   )r   r   r   r2   r   r   r3   r4   r   r5   rT   r   r   r   r   r   r   r2   r   r2   r8   r3   )r9   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&  g d}|  |}| j| j|d}| jj|jks4J | r|jdhksLJ t|d g ks`J t|jd dgksxJ t|jd g ksJ | dksJ n8|jddhksJ | dksJ t|d dgksJ |	ddksJ t|d dgksJ t
t|jd t
t|jd	 d S )
NrX   r5   rT   r   r   r   r[   r8   r3   )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   r    Z
MultiGraphr   r   Zhide_multiedgesr9   Zshow_multiedgesr@   rJ   r   r=   rD   r   r   r   r   rS      s   

rS   c                   @   sL   e Zd ZeejZejZeej	j
Zeej	jZg dZh dZdd ZdS )TestMultiDiGraphView)r   r   r   rY   rZ   >   rU   rV   rW   r]   c                 C   s|   |  | j}g d}tj|}| j| j||d}|ddksDJ |ddksVJ |	ddkshJ |
 dksxJ d S )Nr   rL   r   r   r   r
   rQ   rN   r   r   r   rR      s    z&TestMultiDiGraphView.test_inout_degreeN)rE   rF   rG   rH   r   rI   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   sB   | j }t|g d}|j|jks&J | || | || d S )N)r   r   r   r   )r`   r   r>   name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(J t|jdi iks>J t|ddg}t|jdi idi idksnJ d S )Nr   r   r   r   )r`   r   r>   dictZadjrf   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.J ||j d d< |j |j ksLJ |jd d }d|jd d< |j|jksxJ ||jd d< |j|jksJ d S )Nr   r   r_   Zbaz)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J |j|jks J |j|jks0J |j|jks@J | s| s|j d d |j d d u spJ |j d d |j d d u sJ n| s|j |_|j |_| s|j |_|j |_|j|jksJ |j|jksJ |jd d |jd d u sJ |jd d |jd d u s&J d S )Nr   r   )Z_adj_noder   rc   r#   Z_predZ_succ)r-   rg   r   r   r   r   rd      s"     ""z TestInducedSubGraph.graphs_equalN)	rE   rF   rG   rJ   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"   g dt | jjdksJ dS )z.Tests that the subgraph has the correct nodes.))r   node0)r   node1)r   Znode3)r   Znode4rc   N)sortedrg   r!   datar-   r   r   r   test_correct_nodes  s    z#TestEdgeSubGraph.test_correct_nodesc                 C   s    t ddg| jjdsJ dS )z.Tests that the subgraph has the correct edges.)r   r   ro   )r   r   rp   rc   N)r   rg   r"   rv   rw   r   r   r   test_correct_edges%  s    z#TestEdgeSubGraph.test_correct_edgesc                 C   s4   | j d g dt| jjks$J | 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!   remove_noderw   r   r   r   test_add_node+  s    zTestEdgeSubGraph.test_add_nodec                 C   sJ   | j d g dt| jjks$J | 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   r   ro   N)r   r{   ru   rg   r!   rz   rb   rw   r   r   r   test_remove_node4  s    z!TestEdgeSubGraph.test_remove_nodec                 C   s   | j D ] }| jj| | j j| ksJ qd| jjd d< | jjd | j jd ksTJ d| j jd d< | jjd | j jd ksJ 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-   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
J q
d| jjd d< | jjd d | j jd d kslJ d| j jd d< | jjd d | j jd d ksJ 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-   ur   r   r   r   test_edge_attr_dictN  s    &$$z$TestEdgeSubGraph.test_edge_attr_dictc                 C   s   | j j| jju sJ dS )zaTests that the graph attribute dictionary of the two graphs
        is the same object.

        N)r   r   rg   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{   rb   ra   rw   r   r   r   test_readonlye  s    zTestEdgeSubGraph.test_readonlyN)rE   rF   rG   rJ   r   rx   ry   r|   r}   r   r   r   r   r   r   r   r   rm     s   
	
rm   )r&   Znetworkxr   Znetworkx.utilsr   r   rK   rS   r\   r^   rm   r   r   r   r   <module>   s   Y'8=