o
    ]Zh3                     @   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   X/var/www/auris/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_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 | 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   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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 )
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s%J | jj	|j	 | jks1J 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s%J t|jd g ks0J 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s"J |ddks+J |	ddks4J |
 dks<J 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      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   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rU   )r   r   r   r2   r   r   r3   r4   r   r5   rU   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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 )
NrY   r5   rU   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   rT      s    

rT   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   rZ   r[   >   rV   rW   rX   r^   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   rL   r   r   r   r
   rQ   rN   r   r   r   rR      rS   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   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   )ra   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   )ra   r   r>   dictZadjrh   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   r`   Zbaz)r   r   r   )r"   r!   )r-   ri   r   Zold_foor   r   r   rg      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   )Z_adj_noder   re   r#   Z_predZ_succ)r-   ri   r   r   r   r   rf      s"    $ $z TestInducedSubGraph.graphs_equalN)	rE   rF   rG   rJ   r   rj   rm   rg   rf   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   nodere   edge01rk   edge34r   r   )	r   r   r   ranger!   r"   r   rC   ri   )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node4re   N)sortedri   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   rq   )r   r   rr   re   N)r   ri   r"   rx   ry   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_noderw   ri   r!   remove_nodery   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   ru   )re   r   rq   N)r   r}   rw   ri   r!   r|   rc   ry   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.

        r`   r   re   barr   ru   rv   N)ri   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.

        r`   rk   re   r   r   rq   rr   N)ri   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   ri   ry   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NetworkXErrorri   r|   r}   rc   rb   ry   r   r   r   test_readonlye  s   zTestEdgeSubGraph.test_readonlyN)rE   rF   rG   rJ   r   rz   r{   r~   r   r   r   r   r   r   r   r   r   ro     s    
	
ro   )r&   Znetworkxr   Znetworkx.utilsr   r   rK   rT   r]   r_   ro   r   r   r   r   <module>   s    Y'8=