a
    d3                     @   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	   Zcreate_using>         r         r   )nx
path_graphgraphGhide_edges_w_hide_nodes)cls r   r/var/www/html/stable-diffusion-webui/venv/lib/python3.9/site-packages/networkx/classes/tests/test_subgraphviews.pysetup_class   s    zTestSubGraphView.setup_classc                 C   s:  g d}t j|}| j}t| || j|d}| jj|j ddhksJJ | jj|j | jksbJ |	 rt
|d g ks~J 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s6J d S )Nr   r   o   Z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   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   )      Z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   r6   r7   r3   )show_edges_filterr   r   r!   r#   r"   r$   r9   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:   r8   rA   r?   classmethodr   r/   r<   r>   rC   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 )
TestSubDiGraphViewr0   >   r1   r   r	   r   c                 C   sd   |  | j}g d}tj|}| | j||}| jj|j | jksHJ | jj	|j	 | jks`J d S )Nr   )
r8   r:   r   r   r   r   r   Zin_edgesexcludedZ	out_edgesr-   r;   r   r.   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sHJ t|jd g ks^J d S )Nr   r   r   r
   )	r8   r:   r   r   r   r   r   r$   r9   rM   r   r   r   	test_predr   s    zTestSubDiGraphView.test_predc                 C   sz   |  | j}g d}tj|}| | j||}|ddksBJ |ddksTJ |	ddksfJ |
 dksvJ d S )Nr   r   r   r   r   r8   r:   r   r   r   r   r   r*   Z
out_degreeZ	in_degreer,   rM   r   r   r   test_inout_degree{   s    z$TestSubDiGraphView.test_inout_degreeN)rD   rE   rF   rG   r   rH   rI   r   ZDiGraphr   r   Zhide_diedgesr8   Zshow_diedgesr?   r:   rL   rN   rO   rQ   r   r   r   r   rK   a   s   		rK   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   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rS   )r   r   r   r2   r   r   r3   r4   r   r5   rS   r   r   r   r   r   r   r2   r   r2   r7   r3   )r8   r   r   r!   r#   r"   r$   r9   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 )
NrW   r5   rS   r   r   r   rZ   r7   r3   )r?   r   r   r!   r#   r"   r$   r9   r,   r*   r&   r'   r(   r)   r@   r   r   r   rC      s"    
z#TestMultiGraphView.test_shown_edgesN)rD   rE   rF   rG   r   rH   rI   r   Z
MultiGraphr   r   Zhide_multiedgesr8   Zshow_multiedgesr?   rJ   r   r<   rC   r   r   r   r   rR      s   
rR   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   rX   rY   >   rT   rU   rV   r\   c                 C   sz   |  | j}g d}tj|}| | j||}|ddksBJ |ddksTJ |	ddksfJ |
 dksvJ d S )Nr   r   r   r   r
   rP   rM   r   r   r   rQ      s    z&TestMultiDiGraphView.test_inout_degreeN)rD   rE   rF   rG   r   rH   rI   r   ZMultiDiGraphr   r   Zhide_multidiedgesr8   Zshow_multidiedgesr?   r:   rL   rQ   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adjre   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-   rf   r   Zold_foor   r   r   rd      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   rb   r#   Z_predZ_succ)r-   rf   r   r   r   r   rc      s"     ""z TestInducedSubGraph.graphs_equalN)	rD   rE   rF   rJ   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   rB   rf   )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node4rb   N)sortedrf   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   rn   )r   r   ro   rb   N)r   rf   r"   ru   rv   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_nodert   rf   r!   remove_noderv   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   rr   )rb   r   rn   N)r   rz   rt   rf   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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   rb   barr   rr   rs   N)rf   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^   rh   rb   r}   r   rn   ro   N)rf   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   rf   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)rD   rE   rF   rJ   r   rw   rx   r{   r|   r   r   r   r   r   r   r   r   rl     s   
	
rl   )r&   Znetworkxr   Znetworkx.utilsr   r   rK   rR   r[   r]   rl   r   r   r   r   <module>   s   Z'8=