
    Gd3                         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        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    Ilib/python3.11/site-packages/networkx/classes/tests/test_subgraphviews.pysetup_classzTestSubGraphView.setup_class   s4    aciikk:::&>&>&>###    c                    g d}t           j                            |          }| j        }t	          |            || 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gviewprintr   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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_edger8   r   r   r    r"   r"   r9   r   r      r:   )hide_edges_filterr%   r   r'   r)   r(   r*   predr2   r,   r-   r.   r/   r0   )r3   
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/   r0   r1   r2   )r3   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 )
Nr7   r<   r8   r   r   r    r>   r?   r:   )show_edges_filterr%   r   r'   r)   r(   r*   rA   r2   r,   r-   r.   r/   r0   r3   
show_edgesedge_subgraphr   s       r   test_shown_edgesz!TestSubGraphView.test_shown_edgesK   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   
graphviewssubgraph_viewr%   Graphr   r#   rB   r@   rL   rJ   classmethodr   r5   rD   rH   rN    r   r   r   r      s        L455EHE$RZ%:;;$RZ%:;;? ? [?; ; ;(     *; ; ;          r   r   c                       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 Zd Zd ZdS )TestSubDiGraphViewr7   >   r8   r
   r   r   c                 4   |                      | 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@   rB   r   r#   r$   r%   r   in_edgesexcluded	out_edgesr3   rC   r$   r4   r   s        r   test_inoutedgesz"TestSubDiGraphView.test_inoutedgesi   s    ++DO<<
 [[
Z**:66
JJtvz:66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   r   r    r   )	r@   rB   r   r#   r$   r%   r   r*   rA   r^   s        r   	test_predzTestSubDiGraphView.test_predr   s    ++DO<<
 [[
Z**:66
JJtvz:66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   r   r    r   r   r@   rB   r   r#   r$   r%   r   r0   
out_degree	in_degreer2   r^   s        r   test_inout_degreez$TestSubDiGraphView.test_inout_degree{       ++DO<<
 [[
Z**:66
JJtvz:66xx{{a||A!####{{1~~""""vvxx1}}}}}}r   N)rO   rP   rQ   rR   r   rS   rT   r%   DiGraphr   r#   hide_diedgesr@   show_diedgesrJ   rB   r\   r_   ra   rf   rW   r   r   rY   rY   a   s        L455EJE$RZ%<==$RZ%<==---J///H? ? ?% % %	 	 	 	 	r   rY   c                       e Zd Z eej        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rn   )r   r   r   r9   r"   r   r:   r;   r   r<   rn   r   r   r   r    r   r"   r9   r   r9   r?   r:   )r@   r%   r   r'   r)   r(   r*   rA   r2   r0   r,   r-   r.   r/   )r3   rB   rC   r   s       r   rD   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 )
Nru   r<   rn   r   r   r    rx   r?   r:   )rJ   r%   r   r'   r)   r(   r*   rA   r2   r0   r,   r-   r.   r/   rK   s       r   rN   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)rO   rP   rQ   rR   r   rS   rT   r%   
MultiGraphr   r#   hide_multiedgesr@   show_multiedgesrJ   rV   r   rD   rN   rW   r   r   rl   rl      s        L455EME$RZ%?@@$RZ%?@@H H [H4 4 4*4 4 4 4 4r   rl   c                       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 ZdS )TestMultiDiGraphView)r   r   r   rv   rw   >   r   ro   rp   rq   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   r   r   r    r   rc   r^   s        r   rf   z&TestMultiDiGraphView.test_inout_degree   rg   r   N)rO   rP   rQ   rR   r   rS   rT   r%   MultiDiGraphr   r#   hide_multidiedgesr@   show_multidiedgesrJ   rB   r\   rf   rW   r   r   r~   r~      s~        L455E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   rG   namegraphs_equalsame_attrdictr3   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   rG   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'   )r3   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)r3   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)	rO   rP   rQ   rV   r   r   r   r   r   rW   r   r   r   r      si        ! ! [!! ! !7 7 7
" 
" 
"2 2 2 2 2r   r   c                   T    e Zd Zed             Zd Zd Zd Zd Zd Z	d Z
d Z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   rM   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r3   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_node5  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'   )r3   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   )r3   ur   s      r   test_edge_attr_dictz$TestEdgeSubGraph.test_edge_attr_dictO  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_readonlyf  sz    b&;;;b&(:A>>>b&A>>>b&(:AqAAAAAr   N)rO   rP   rQ   rV   r   r   r   r   r   r   r   r   r   rW   r   r   r   r     s        
6 
6 [
6
 
 

 
 
  - - -* * * . . . , , ,B B B B Br   r   )r,   networkxr   networkx.utilsr   r   rY   rl   r~   r   r   rW   r   r   <module>r      sR        & & & & & &W  W  W  W  W  W  W  W t# # # # #) # # #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YB YB YB YB YB YB YB YB YB YBr   