o
    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	   create_using>         r	      r      )nx
path_graphgraphGhide_edges_w_hide_nodes)cls r   ]/var/www/vscode/kcb/lib/python3.10/site-packages/networkx/classes/tests/test_subgraphviews.pysetup_class   s   zTestSubGraphView.setup_classc                 C   s*  g d}t j|}| j}|| j|d}| jj|j ddhks!J | jj|j | jks-J | rGt	|d g ks;J t	|d dgksFJ nt	|d dgksRJ t
|d ddhks^J 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   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   s8  g d}|  |}| j}|| j|d}| jj|jksJ | rV| jj|j dhks,J t|d g ks6J t|jd g ksAJ t|jd dgksMJ | dksUJ n | jj|j ddhkscJ t|d dgksnJ | d	ksvJ t|d d
gksJ t	
t|jd t	
t|jd |ddksJ d S )Nr   r   )   r   )      filter_edger2   r   r   r   r   r   r3   r   r	      r4   )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 | r,t|d g ks+J nt|d dgks7J t|d dgksBJ t	
t|jd t	
t|jd t	
t|jd |d| rddndksiJ | | rrdndkswJ d S )	N)r   r   r   r   r   r   r	   r   r   r   )r   r   
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sJ | r[|jdhks&J t|d g ks0J t|d dgks;J t|jd dgksGJ t|jd g ksRJ | dksZJ n'|jddhksdJ t|d dgksoJ t|d dgkszJ | dksJ t	
t|jd t	
t|jd	 |ddksJ d S )
Nr1   r6   r2   r   r   r   r8   r9   r4   )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!   Graphr   r   r<   r:   rD   rB   classmethodr   r0   r>   rA   rF   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 )
TestSubDiGraphViewr1   >   r2   r   r
   r   c                 C   sf   |  | j}g d}tj|}| j| j||d}| jj|j | jks%J | jj	|j	 | jks1J d S )Nr   r   r7   )
r:   r<   r   r   r    r!   r   in_edgesexcluded	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s%J t|jd g ks0J d S )Nr   rO   r   r   r   )	r:   r<   r   r   r    r!   r   r%   r;   rS   r   r   r   	test_predq   s   zTestSubDiGraphView.test_predc                 C   s|   |  | j}g d}tj|}| j| j||d}|ddks"J |ddks+J |	ddks4J |
 dks<J d S )Nr   rO   r   r   r   r	   r:   r<   r   r   r    r!   r   r+   
out_degree	in_degreer-   rS   r   r   r   test_inout_degreez      z$TestSubDiGraphView.test_inout_degreeN)rG   rH   rI   rJ   r   rK   r!   DiGraphr   r   hide_diedgesr:   show_diedgesrB   r<   rQ   rT   rU   rY   r   r   r   r   rN   `   s    
		rN   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   add_edges_fromr   )r   
multiedgesr   r   r   r      s   zTestMultiGraphView.setup_classc                 C   sR  g d}|  |}| j| j|d}| jj|jksJ | ra| jj|j dhks*J t|d dgks5J t|d dgks@J t|jd dgksLJ t|jd dgksXJ | dks`J n-| jj|j dd	hksnJ t|d ddgkszJ t|d ddgksJ | d
ksJ |	ddksJ t
t|jd t
t|jd d S )Nr_   )r   r   r   r3   r   r   r4   r5   r   r6   r_   r   r	   r   r   r   r   r3   r   r3   r9   r4   )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$  g d}|  |}| j| j|d}| jj|jksJ | rP|jdhks&J t|d g ks0J t|jd dgks<J t|jd g ksGJ | dksOJ n|jddhksYJ | dksaJ t|d dgkslJ |	ddksuJ t|d dgksJ t
t|jd t
t|jd	 d S )
Nre   r6   r_   r   r   r   rh   r9   r4   )rB   r!   r   r"   r$   r#   r%   r;   r-   r+   r'   r(   r)   r*   rC   r   r   r   rF      s"   
z#TestMultiGraphView.test_shown_edgesN)rG   rH   rI   rJ   r   rK   r!   
MultiGraphr   r   hide_multiedgesr:   show_multiedgesrB   rM   r   r>   rF   r   r   r   r   r^      s    

r^   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   rf   rg   >   rm   r`   ra   rb   c                 C   s|   |  | j}g d}tj|}| j| j||d}|ddks"J |ddks+J |	ddks4J |
 dks<J d S )Nr   rO   r   r   r   r   rV   rS   r   r   r   rY      rZ   z&TestMultiDiGraphView.test_inout_degreeN)rG   rH   rI   rJ   r   rK   r!   MultiDiGraphr   r   hide_multidiedgesr:   show_multidiedgesrB   r<   rQ   rY   r   r   r   r   rl      s    
rl   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   )rr   )r   complete_graphK3r   r"   remove_edgeadd_edge)r   r   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   )rt   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s7J d S )Nr   r   r   r   )rt   r   r@   dictadjr{   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s&J |jd d }d|jd d< |j|jks<J ||jd d< |j|jksKJ d S )Nr   r   rr   baz)r   r   r   )r#   r"   )r.   r|   r   old_foor   r   r   rz      s   z!TestInducedSubGraph.same_attrdictc                 C   s(  |j |j ksJ |j|jksJ |j|jksJ |j|jks J | sJ| sJ|j d d |j d d u s8J |j d d |j d d u sHJ d S | sV|j |_|j |_| sb|j |_|j |_|j|jksjJ |j|jksrJ |jd d |jd d u sJ |jd d |jd d u sJ d S )Nr   r   )_adj_noder   rx   r$   _pred_succ)r.   r|   r   r   r   r   ry      s"    $ $z TestInducedSubGraph.graphs_equalN)	rG   rH   rI   rM   r   r}   r   rz   ry   r   r   r   r   rq      s    
		rq   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   noderx   edge01r~   edge34r   r   )	r   r   r   ranger"   r#   r   rE   r|   )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   node3)r	   node4rx   N)sortedr|   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   r   )r   r	   r   rx   N)r   r|   r#   r   r   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_noder   r|   r"   remove_noder   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	   r   )rx   r   r   N)r   r   r   r|   r"   r   rv   r   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s*J d| j jd d< | jjd | j jd ks@J 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.

        rr   r   rx   barr   r   r   N)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J qd| jjd d< | jjd d | j jd d ks6J d| j jd d< | jjd d | j jd d ksPJ 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.

        rr   r~   rx   r   r   r   r   N)r|   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   r|   r   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   NetworkXErrorr|   r   r   rv   ru   r   r   r   r   test_readonlye  s   zTestEdgeSubGraph.test_readonlyN)rG   rH   rI   rM   r   r   r   r   r   r   r   r   r   r   r   r   r   r     s    
	
r   )r'   networkxr   networkx.utilsr   r   rN   r^   rl   rq   r   r   r   r   r   <module>   s    Y'8=