o
    ˷e3                     @   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| _h d| _d S )N	   create_using>         r	      r      )nx
path_graphgraphGhide_edges_w_hide_nodes)cls r   `/var/www/ideatree/venv/lib/python3.10/site-packages/networkx/classes/tests/test_subgraphviews.pysetup_class   s   zTestSubGraphView.setup_classc                 C   s2  g d}t j|}| j}t| || j|d}| jj|j ddhks%J | jj|j | jks1J |	 rKt
|d g ks?J t
|d dgksJJ nt
|d dgksVJ t|d ddhksbJ 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gviewprintr   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_edger3   r   r   r   r   r   r4   r   r	      r5   )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 )
Nr2   r7   r3   r   r   r   r9   r:   r5   )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_edgesK   s$   
z!TestSubGraphView.test_shown_edgesN)__name__
__module____qualname__staticmethodr   
graphviewssubgraph_viewr!   Graphr   r   r=   r;   rE   rC   classmethodr   r1   r?   rB   rG   r   r   r   r   r      s    
r   c                   @   s^   e Zd Zeej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 )
TestSubDiGraphViewr2   >   r3   r   r
   r   c                 C   sd   |  | j}g d}tj|}| | j||}| jj|j | jks$J | jj	|j	 | jks0J d S )Nr   )
r;   r=   r   r   r    r!   r   in_edgesexcluded	out_edgesr/   r>   r    r0   r   r   r   r   test_inoutedgesi   s   z"TestSubDiGraphView.test_inoutedgesc                 C   sb   |  | j}g d}tj|}| | j||}t|jd dgks$J t|jd g ks/J d S )Nr   r   r   r   )	r;   r=   r   r   r    r!   r   r&   r<   rT   r   r   r   	test_predr   s   zTestSubDiGraphView.test_predc                 C   sz   |  | j}g d}tj|}| | j||}|ddks!J |ddks*J |	ddks3J |
 dks;J d S )Nr   r   r   r   r	   r;   r=   r   r   r    r!   r   r,   
out_degree	in_degreer.   rT   r   r   r   test_inout_degree{      z$TestSubDiGraphView.test_inout_degreeN)rH   rI   rJ   rK   r   rL   rM   r!   DiGraphr   r   hide_diedgesr;   show_diedgesrC   r=   rR   rU   rV   rZ   r   r   r   r   rP   a   s    		rP   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   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   r4   r   r   r5   r6   r   r7   r`   r   r	   r   r   r   r   r4   r   r4   r:   r5   )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 )
Nrf   r7   r`   r   r   r   ri   r:   r5   )rC   r!   r   r#   r%   r$   r&   r<   r.   r,   r(   r)   r*   r+   rD   r   r   r   rG      s"   
z#TestMultiGraphView.test_shown_edgesN)rH   rI   rJ   rK   r   rL   rM   r!   
MultiGraphr   r   hide_multiedgesr;   show_multiedgesrC   rO   r   r?   rG   r   r   r   r   r_      s    
r_   c                   @   sN   e Zd Zeej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   rg   rh   >   rn   ra   rb   rc   c                 C   sz   |  | j}g d}tj|}| | j||}|ddks!J |ddks*J |	ddks3J |
 dks;J d S )Nr   r   r   r   r   rW   rT   r   r   r   rZ      r[   z&TestMultiDiGraphView.test_inout_degreeN)rH   rI   rJ   rK   r   rL   rM   r!   MultiDiGraphr   r   hide_multidiedgesr;   show_multidiedgesrC   r=   rR   rZ   r   r   r   r   rm      s    rm   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   )rs   )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   )ru   r   rA   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   )ru   r   rA   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   rs   baz)r   r   r   )r$   r#   )r/   r}   r   old_foor   r   r   r{      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   ry   r%   _pred_succ)r/   r}   r   r   r   r   rz      s"    $ $z TestInducedSubGraph.graphs_equalN)	rH   rI   rJ   rO   r   r~   r   r{   rz   r   r   r   r   rr      s    
		rr   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   nodery   edge01r   edge34r   r   )	r   r   r   ranger#   r$   r   rF   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	   node4ry   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   ry   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   )ry   r   r   N)r   r   r   r}   r#   r   rw   r   r   r   r   test_remove_node5  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.

        rs   r   ry   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.

        rs   r   ry   r   r   r   r   N)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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   rw   rv   r   r   r   r   test_readonlyf  s   zTestEdgeSubGraph.test_readonlyN)rH   rI   rJ   rO   r   r   r   r   r   r   r   r   r   r   r   r   r   r     s    
	
r   )r(   networkxr   networkx.utilsr   r   rP   r_   rm   rr   r   r   r   r   r   <module>   s    Z'8=