
    \Mhe5                         d dl Z d dlZd dlmZ  G d d          Z G d de          Z G d de          Z G d	 d
ee          Z G d d          Z	 G d d          Z
dS )    N)edges_equalc                       e Zd Z eej                  Zej        Z eej	        j
                  Z eej	        j                  Zed             Zd Zd Zd Zd ZdS )TestSubGraphViewc                 r    t          j        d|                                           | _        h d| _        d S )N	   create_using>         r      r      )nx
path_graphgraphGhide_edges_w_hide_nodes)clss    i/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/networkx/classes/tests/test_subgraphviews.pysetup_classzTestSubGraphView.setup_class   s4    aciikk:::&>&>&>###    c                    g d}t           j                            |          }| j        } || j        |          }| j        j        |j        z
  ddhk    sJ | j        j        |j        z
  | j        k    sJ |                                r8t          |d                   g k    sJ t          |d                   dgk    sJ n9t          |d                   dgk    sJ t          |d                   ddhk    sJ t          j        t          |j        d           t          j        t          |j        d           t          j        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   s        r   test_hidden_nodesz"TestSubGraphView.test_hidden_nodes   s    [[
Z**:66

E$&j111v|ag%!Q////v|ag%)EEEEE==?? 	'!::####!::!$$$$$!::!$$$$qt99A&&&&hq111hs333hs333xx{{AOO$5$5<qq1====vvxx!2!29AA::::::r   c                 v   g d}|                      |          }| j        } || j        |          }| j        j        |j        k    sJ |                                r| j        j        |j        z
  dhk    sJ t          |d                   g k    sJ t          |j        d                   g k    sJ t          |j        d                   dgk    sJ |                                dk    sJ nR| j        j        |j        z
  ddhk    sJ t          |d                   dgk    sJ |                                d	k    sJ t          |d                   d
gk    sJ t          j
        t          |j        d           t          j
        t          |j        d           |                    d          dk    sJ d S )Nr   r   )   r"   )      filter_edger7   r   r   r    r"   r"   r8   r   r      r9   )hide_edges_filterr%   r   r&   r(   r'   r)   predr1   r+   r,   r-   r.   r/   )r2   
hide_edges
edges_goner%   r   s        r   test_hidden_edgesz"TestSubGraphView.test_hidden_edges%   s   111
++J77

E$&j111v|qw&&&&==?? 		!6<!')fX5555!::####q	??b((((q	??qc))))6688q=====6<!')ff-=====!::!$$$$6688q====AaDzzaS    hs333hs333xx{{ar   c                    t           j                            g d          }| j        } || j        |          }t          |j                  ddhk    sJ |                                rt          |d                   g k    sJ nt          |d                   dgk    sJ t          |d                   dgk    sJ t          j
        t          |j        d           t          j
        t          |j        d           t          j
        t          |j        d           |                    d          |                                rdndk    sJ |                                |                                rdndk    sJ 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/   r0   r1   )r2   induced_subgraphr%   r   s       r   test_shown_nodez TestSubGraphView.test_shown_node:   sa   :00==
E$&&677717||1v%%%%==?? 	%!::#####!::!$$$$AaDzzaS    hq111hs333hs333xx{{AOO$5$5<qq1====vvxx!2!29AA::::::r   c                    g d}|                      |          }|                     | j        |          }| j        j        |j        k    sJ |                                r|j        dhk    sJ t          |d                   g k    sJ t          |d                   dgk    sJ t          |j        d                   dgk    sJ t          |j        d                   g k    sJ |                                dk    sJ na|j        ddhk    sJ t          |d                   dgk    sJ t          |d                   dgk    sJ |                                dk    sJ t          j
        t          |j        d           t          j
        t          |j        d	           |                    d          dk    sJ d S )
Nr6   r;   r7   r   r   r    r=   r>   r9   )show_edges_filterr%   r   r&   r(   r'   r)   r@   r1   r+   r,   r-   r.   r/   r2   
show_edgesedge_subgraphr   s       r   test_shown_edgesz!TestSubGraphView.test_shown_edgesJ   s   111
..z::JJtv=J99v|qw&&&&==?? 	!7vh&&&&!::####!::!$$$$q	??qc))))q	??b((((6688q=====7vv.....!::!$$$$!::!$$$$6688q====hs333hs333xx{{ar   N)__name__
__module____qualname__staticmethodr   subgraph_viewr%   Graphr   r#   rA   r?   rK   rI   classmethodr   r4   rC   rG   rM    r   r   r   r      s        L)**EHE$RZ%:;;$RZ%:;;? ? [?; ; ;&     *; ; ;          r   r   c                       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 Zd Zd ZdS )TestSubDiGraphViewr6   >   r7   r
   r   r   c                 6   |                      | j                  }g d}t          j                            |          }|                     | j        ||          }| j        j        |j        z
  | j        k    sJ | j        j	        |j	        z
  | j        k    sJ d S )Nr   r   r<   )
r?   rA   r   r#   r$   r%   r   in_edgesexcluded	out_edgesr2   rB   r$   r3   r   s        r   test_inoutedgesz"TestSubDiGraphView.test_inoutedgesh   s    ++DO<<
 [[
Z**:66
JJtv::JNNv+t}<<<<v!+->>>>>>r   c                 <   |                      | j                  }g d}t          j                            |          }|                     | j        ||          }t          |j        d                   dgk    sJ t          |j        d                   g k    sJ d S )Nr   rY   r   r    r   )	r?   rA   r   r#   r$   r%   r   r)   r@   r]   s        r   	test_predzTestSubDiGraphView.test_predq   s    ++DO<<
 [[
Z**:66
JJtv::JNNAF1I1#%%%%AF1I"$$$$$$r   c                    |                      | j                  }g d}t          j                            |          }|                     | j        ||          }|                    d          dk    sJ |                    d          dk    sJ |	                    d          dk    sJ |
                                dk    sJ d S )Nr   rY   r   r    r   r   r?   rA   r   r#   r$   r%   r   r/   
out_degree	in_degreer1   r]   s        r   test_inout_degreez$TestSubDiGraphView.test_inout_degreez       ++DO<<
 [[
Z**:66
JJtv::JNNxx{{a||A!####{{1~~""""vvxx1}}}}}}r   N)rN   rO   rP   rQ   r   rR   r%   DiGraphr   r#   hide_diedgesr?   show_diedgesrI   rA   r[   r^   r`   re   rU   r   r   rW   rW   `   s        L)**EJE$RZ%<==$RZ%<==---J///H? ? ?% % %	 	 	 	 	r   rW   c                       e Zd Z eej                  Zej        Z eej	        j
                  Z eej	        j                  Zed             Zd Zd ZdS )TestMultiGraphViewc                     t          j        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   
multiedgess     r   r   zTestMultiGraphView.setup_class   sT    aciikk:::+
Z(((&G&G&G###r   c                    g d}|                      |          }|                     | j        |          }| j        j        |j        k    sJ |                                r| j        j        |j        z
  dhk    sJ t          |d                   dgk    sJ t          |d                   dgk    sJ t          |j        d                   dgk    sJ t          |j        d                   dgk    sJ |                                dk    sJ np| j        j        |j        z
  dd	hk    sJ t          |d                   ddgk    sJ t          |d                   ddgk    sJ |                                d
k    sJ |	                    d          dk    sJ t          j        t          |j        d           t          j        t          |j        d           d S )Nrm   )r   r   r   r8   r"   r   r9   r:   r   r;   rm   r   r   r   r    r   r"   r8   r   r8   r>   r9   )r?   r%   r   r&   r(   r'   r)   r@   r1   r/   r+   r,   r-   r.   )r2   rA   rB   r   s       r   rC   z$TestMultiGraphView.test_hidden_edges   s   EEE
++J77
JJtv:J66v|qw&&&&==?? 	!6<!')i[8888!::!$$$$!::!$$$$q	??qc))))q	??qc))))6688q=====6<!')i-CCCCC!::!Q''''!::!Q''''6688q====xx{{ahs333hs33333r   c                 H   g d}|                      |          }|                     | j        |          }| j        j        |j        k    sJ |                                r|j        dhk    sJ t          |d                   g k    sJ t          |j        d                   dgk    sJ t          |j        d                   g k    sJ |                                dk    sJ nE|j        ddhk    sJ |                                dk    sJ t          |d                   dgk    sJ |	                    d          dk    sJ t          |d                   dgk    sJ t          j        t          |j        d           t          j        t          |j        d	           d S )
Nrt   r;   rm   r   r   r    rw   r>   r9   )rI   r%   r   r&   r(   r'   r)   r@   r1   r/   r+   r,   r-   r.   rJ   s       r   rM   z#TestMultiGraphView.test_shown_edges   s   EEE
..z::JJtv=J99v|qw&&&&==?? 		%7yk))))!::####q	??qc))))q	??b((((6688q=====7y)444446688q====!::!$$$$xx{{aAaDzzaS    hs333hs33333r   N)rN   rO   rP   rQ   r   rR   r%   
MultiGraphr   r#   hide_multiedgesr?   show_multiedgesrI   rT   r   rC   rM   rU   r   r   rk   rk      s        L)**EME$RZ%?@@$RZ%?@@H H [H4 4 4*4 4 4 4 4r   rk   c                       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 ZdS )TestMultiDiGraphView)r   r   r   ru   rv   >   r~   rn   ro   rp   c                    |                      | j                  }g d}t          j                            |          }|                     | j        ||          }|                    d          dk    sJ |                    d          dk    sJ |	                    d          dk    sJ |
                                dk    sJ d S )Nr   rY   r   r   r    r   rb   r]   s        r   re   z&TestMultiDiGraphView.test_inout_degree   rf   r   N)rN   rO   rP   rQ   r   rR   r%   MultiDiGraphr   r#   hide_multidiedgesr?   show_multidiedgesrI   rA   r[   re   rU   r   r   r}   r}      s|        L)**EOE$RZ%ABB$RZ%ABB666J;;;H	 	 	 	 	r   r}   c                   <    e Zd Zed             Zd Zd Zd Zd ZdS )TestInducedSubGraphc                     t          j        d          x| _        }g |j        d<   g |j        d         d<   |                    dd           g }|                    dd|           |                    dd|           d S )Nr   foor   r    r   )r   )r   complete_graphK3r   r&   remove_edgeadd_edge)r   r   lls      r   r   zTestInducedSubGraph.setup_class   s    &q)))
5	a	

1aR
   	

1aR
     r   c                     | j         }t          j        |g d          }|j        |j        k    sJ |                     ||           |                     ||           d S )N)r   r    r   r   )r   r   rF   namegraphs_equalsame_attrdictr2   r   Hs      r   test_full_graphz#TestInducedSubGraph.test_full_graph   sf    G<<<00v!Q1a     r   c                    | j         }t          j        |d          }t          |j                  di ik    sJ t          |j                  di ik    sJ t          j        |ddg          }t          |j                  di idi idk    sJ d S )Nr   r    r   r    )r   r   rF   dictadjr   s      r   test_partial_subgraphz)TestInducedSubGraph.test_partial_subgraph   s    G1%%AE{{q"g%%%%AE{{q"g%%%%Aq6**AE{{1b'q"g66666666r   c                 d   |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    sJ d S )Nr    r   r   baz)r    r   r   )r'   r&   )r2   r   r   old_foos       r   r   z!TestInducedSubGraph.same_attrdict   s    A$q'%.$ew!'!!!!&ew!'!!!!'!*U#!
5w!'!!!!#
5w!'!!!!!!r   c                 "   |j         |j         k    sJ |j        |j        k    sJ |j        |j        k    sJ |j        |j        k    sJ |                                sf|                                sR|j         d         d         |j         d         d         u sJ |j         d         d         |j         d         d         u sJ d S |                                s|j         |_        |j         |_        |                                s|j         |_        |j         |_        |j        |j        k    sJ |j        |j        k    sJ |j        d         d         |j        d         d         u sJ |j        d         d         |j        d         d         u sJ d S )Nr    r   )_adj_noder   r   r(   _pred_succ)r2   r   r   s      r   r   z TestInducedSubGraph.graphs_equal   s   vw!'!!!!w!'!!!!v}} 	2q}} 	26!9Q<16!9Q<////6!9Q<16!9Q<//////==?? !&&==?? !&&7ag%%%%7ag%%%%71:a=AGAJqM111171:a=AGAJqM111111r   N)	rN   rO   rP   rT   r   r   r   r   r   rU   r   r   r   r      si        ! ! [!! ! !7 7 7
" 
" 
"2 2 2 2 2r   r   c                       e Zd Zed             Zd Zd Zd Zd Zd Z	d Z
d Zd	 Zej                            d
ej        ej        f          d             ZdS )TestEdgeSubGraphc                    t          j        d          x| _        }t          d          D ]}d| |j        |         d<   d|j        d         d<   d|j        d         d<   d|j        d<   t          j        |ddg          | _        d S )	Nr   noder   edge01r   edge34r
   r   )	r   r   r   ranger&   r'   r   rL   r   )r   r   is      r   r   zTestEdgeSubGraph.setup_class  s     M!$$$q 	, 	,A!+AGAJv (f (f! VV$455r   c                 n    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   node4r   N)sortedr   r&   datar2   s    r   test_correct_nodesz#TestEdgeSubGraph.test_correct_nodes  sL    GGG6FLf%%L
 L
 
 
 
 
 
 
r   c                 h    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   r   N)r   r   r'   r   r   s    r   test_correct_edgesz#TestEdgeSubGraph.test_correct_edges%  sE    /0$&,2C2CF2K2K
 
 	
 	
 	
 	
 	
r   c                     | 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   s    r   test_add_nodezTestEdgeSubGraph.test_add_node+  sU    
 	||vdfl3333331r   c                     | j                             d           g dt          | j        j                  k    sJ | j                             dd           | j                             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   )r   r    r   N)r   r   r   r   r&   r   r   r   s    r   test_remove_nodez!TestEdgeSubGraph.test_remove_node4  ss    
 	1yyF46<000000(((18,,,,,r   c                    | j         D ]*}| j        j        |         | j         j        |         k    sJ +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   r   barr    r   r   N)r   r   r&   )r2   vs     r   test_node_attr_dictz$TestEdgeSubGraph.test_node_attr_dict>  s    
  	6 	6A6<?dfl1o55555"'Qv|A$&,q/1111"'Qv|A$&,q/1111")Q")Qr   c                    | j                                         D ]1\  }}| j        j        ||f         | j         j        ||f         k    sJ 2d| j        j        d         d<   | j        j        d         d         | j         j        d         d         k    sJ d| j         j        d         d<   | j        j        d         d         | j         j        d         d         k    sJ 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   r   r   r   r
   r   r   N)r   r'   r   )r2   ur   s      r   test_edge_attr_dictz$TestEdgeSubGraph.test_edge_attr_dictN  s    
 FLLNN 	< 	<DAq6<1%ad);;;;;;%*T6"v|D!&)TV\$-?-GGGGG%*T6"v|D!&)TV\$-?-GGGGG%-T6"%-T6"""r   c                 :    | 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   s    r   test_graph_attr_dictz%TestEdgeSubGraph.test_graph_attr_dict^  s#    
 v|tv|++++++r   c                 Z   t          j        t          j        | j        j        d           t          j        t          j        | j        j        d           t          j        t          j        | j        j        dd           t          j        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   r   r   r   s    r   test_readonlyzTestEdgeSubGraph.test_readonlye  sz    b&;;;b&(:A>>>b&A>>>b&(:AqAAAAAr   
multigraphc                      |g d          }t          j        |ddg          }d|d         vsJ |                    dd          rJ dS )zaCheck edge visibility in FilterMultiInner on edge_subgraph's of
        multigraphs. See gh-7724.))ab)r   c)r   r   )r   r   r   )r   r   r   r   r   N)r   rL   has_edge)r2   r   r   r   s       r   test_multigraph_filtered_edgesz/TestEdgeSubGraph.test_multigraph_filtered_edgesl  sf     J;;;<<Q >??!C&    ::c3'''''''r   N)rN   rO   rP   rT   r   r   r   r   r   r   r   r   r   r+   markparametrizer   ry   r   r   rU   r   r   r   r     s        
6 
6 [
6
 
 

 
 
  - - -* * * . . . , , ,B B B [\BM2?+KLL( ( ML( ( (r   r   )r+   networkxr   networkx.utilsr   r   rW   rk   r}   r   r   rU   r   r   <module>r      sH        & & & & & &V  V  V  V  V  V  V  V r# # # # #) # # #N44 44 44 44 44) 44 44 44p    -/A   *92 92 92 92 92 92 92 92zb( b( b( b( b( b( b( b( b( b(r   