
    ިsg3                         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
y)    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y)TestSubGraphViewc                 j    t        j                  d| j                               | _        h d| _        y )N	   create_using>         r      r      )nx
path_graphgraphGhide_edges_w_hide_nodes)clss    \/var/www/html/venv/lib/python3.12/site-packages/networkx/classes/tests/test_subgraphviews.pysetup_classzTestSubGraphView.setup_class   s"    aciik:&>#    c                 ~   g d}t         j                  j                  |      }| j                  } || j                  |      }| j                  j
                  |j
                  z
  ddhk(  sJ | j                  j                  |j                  z
  | j                  k(  sJ |j                         r't        |d         g k(  sJ t        |d         dgk(  s+J t        |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	       |j                  d      |j!                         rdndk(  sJ |j#                         |j!                         rd
ndk(  sJ y )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   sa    
ZZ**:6


$&&j1vv||agg%!Q///vv||agg%)E)EEEE==?!:###!:!$$$!:!$$$qt9A&&&hq1hs3hs3xx{AOO$5q1===vvx!2A:::r   c                 ~   g d}| j                  |      }| j                  } || j                  |      }| j                  j                  |j                  k(  sJ |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 |j                         dk(  sUJ | j                  j
                  |j
                  z
  ddhk(  sJ t        |d         dgk(  sJ |j                         d	k(  sJ t        |d         d
gk(  sJ t        j                  t        |j                  d       t        j                  t        |j                  d       |j                  d      dk(  sJ y )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%   sv   1
++J7


$&&j1vv||qww&&&==?66<<!'')fX555!:###q	?b(((q	?qc)))668q= =66<<!'')ff-====!:!$$$668q= =AaDzaS   hs3hs3xx{ar   c                    t         j                  j                  g d      }| j                  } || j                  |      }t        |j                        ddhk(  sJ |j                         rt        |d         g k(  sJ 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       |j                  d      |j                         rdndk(  sJ |j                         |j                         rdndk(  sJ y )	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:   s   ::00=

$&&&67177|1v%%%==?!:###!:!$$$AaDzaS   hq1hs3hs3xx{AOO$5q1===vvx!2A:::r   c                 D   g d}| j                  |      }| j                  | j                  |      }| j                  j                  |j                  k(  sJ |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 |j                         dk(  sRJ |j
                  ddhk(  sJ t        |d         dgk(  sJ t        |d         dgk(  sJ |j                         dk(  sJ t        j                  t        |j                  d       t        j                  t        |j                  d	       |j                  d      dk(  sJ y )
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   sq   1
..z:JJtvv=J9vv||qww&&&==?77vh&&&!:###!:!$$$q	?qc)))q	?b(((668q= =77vv....!:!$$$!:!$$$668q= =hs3hs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      sk    ))*EHHE$RZZ%:%:;$RZZ%:%:;? ?;& *;  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y)TestSubDiGraphViewr6   >   r7   r
   r   r   c                    | j                  | j                        }g d}t        j                  j	                  |      }| j                  | j                  ||      }| j                  j                  |j                  z
  | j                  k(  sJ | j                  j                  |j                  z
  | j                  k(  sJ y )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    ++DOO<
 
ZZ**:6
JJtvv::JNvv+t}}<<<vv!++->>>r   c                 2   | j                  | j                        }g d}t        j                  j	                  |      }| j                  | j                  ||      }t        |j                  d         dgk(  sJ t        |j                  d         g k(  sJ y )Nr   rY   r   r    r   )	r?   rA   r   r#   r$   r%   r   r)   r@   r]   s        r   	test_predzTestSubDiGraphView.test_predq   s}    ++DOO<
 
ZZ**:6
JJtvv::JNAFF1I1#%%%AFF1I"$$$r   c                 j   | j                  | j                        }g d}t        j                  j	                  |      }| j                  | j                  ||      }|j                  d      dk(  sJ |j                  d      dk(  sJ |j                  d      dk(  sJ |j                         dk(  sJ y )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       ++DOO<
 
ZZ**:6
JJtvv::JNxx{a||A!###{{1~"""vvx1}}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^    ))*EJJE$RZZ%<%<=$RZZ%<%<=-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y)TestMultiGraphViewc                     t        j                  d| j                               | _        ddh}| j                  j	                  |       h d| _        y )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   s>    aciik:+
Z(&G#r   c                    g d}| j                  |      }| j                  | j                  |      }| j                  j                  |j                  k(  sJ |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 |j                         dk(  skJ | 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 |j                         d
k(  sJ |j                  d      dk(  sJ t        j                  t        |j                  d       t        j                  t        |j                  d       y )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
++J7
JJtvv:J6vv||qww&&&==?66<<!'')i[888!:!$$$!:!$$$q	?qc)))q	?qc)))668q= =66<<!'')i-CCCC!:!Q'''!:!Q'''668q= =xx{ahs3hs3r   c                    g d}| j                  |      }| j                  | j                  |      }| j                  j                  |j                  k(  sJ |j	                         ru|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 |j                         dk(  s>J |j
                  ddhk(  sJ |j                         dk(  sJ t        |d         dgk(  sJ |j                  d      dk(  sJ t        |d         dgk(  sJ t        j                  t        |j                  d       t        j                  t        |j                  d	       y )
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   sY   E
..z:JJtvv=J9vv||qww&&&==?77yk)))!:###q	?qc)))q	?b(((668q= =77y)4444668q= =!:!$$$xx{aAaDzaS   hs3hs3r   N)rN   rO   rP   rQ   r   rR   r%   
MultiGraphr   r#   hide_multiedgesr?   show_multiedgesrI   rT   r   rC   rM   rU   r   r   rk   rk      sc    ))*EMME$RZZ%?%?@$RZZ%?%?@H H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y)TestMultiDiGraphView)r   r   r   ru   rv   >   r~   rn   ro   rp   c                 j   | j                  | j                        }g d}t        j                  j	                  |      }| j                  | j                  ||      }|j                  d      dk(  sJ |j                  d      dk(  sJ |j                  d      dk(  sJ |j                         dk(  sJ y )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}      sT    ))*EOOE$RZZ%A%AB$RZZ%A%AB6J;H	r   r}   c                   4    e Zd Zed        Zd Zd Zd Zd Zy)TestInducedSubGraphc                     t        j                  d      x| _        }g |j                  d<   g |j                  d   d<   |j                  dd       g }|j                  dd|       |j                  dd|       y )Nr   foor   r    r   )r   )r   complete_graphK3r   r&   remove_edgeadd_edge)r   r   lls      r   r   zTestInducedSubGraph.setup_class   so    &&q))
5	a	

1aR
 	

1aR
 r   c                     | j                   }t        j                  |g d      }|j                  |j                  k(  sJ | j	                  ||       | j                  ||       y )N)r   r    r   r   )r   r   rF   namegraphs_equalsame_attrdictr2   r   Hs      r   test_full_graphz#TestInducedSubGraph.test_full_graph   sS    GG<0vv!Q1a r   c                 *   | j                   }t        j                  |d      }t        |j                        di ik(  sJ t        |j                        di ik7  sJ t        j                  |ddg      }t        |j                        di idi idk(  sJ y )Nr   r    r   r    )r   r   rF   dictadjr   s      r   test_partial_subgraphz)TestInducedSubGraph.test_partial_subgraph   s    GG1%AEE{q"g%%%AEE{q"g%%%Aq6*AEE{1b'q"g6666r   c                    |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 y )Nr    r   r   baz)r    r   r   )r'   r&   )r2   r   r   old_foos       r   r   z!TestInducedSubGraph.same_attrdict   s    A$q'%.$eww!''!!!&eww!''!!!''!*U#!
5ww!''!!!#
5ww!''!!!r   c                    |j                   |j                   k(  sJ |j                  |j                  k(  sJ |j                  |j                  k(  sJ |j                  |j                  k(  sJ |j	                         s]|j	                         sM|j                   d   d   |j                   d   d   u sJ |j                   d   d   |j                   d   d   u sJ y |j	                         s"|j                   |_        |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 y )Nr    r   )_adj_noder   r   r(   _pred_succ)r2   r   r   s      r   r   z TestInducedSubGraph.graphs_equal   sm   vvww!''!!!ww!''!!!vv}}q}}66!9Q<166!9Q<///66!9Q<166!9Q<///==?&&&&==?&&&&77agg%%%77agg%%%771:a=AGGAJqM111771:a=AGGAJqM111r   N)	rN   rO   rP   rT   r   r   r   r   r   rU   r   r   r   r      s(    ! !!7
"2r   r   c                   L    e Zd Zed        Zd Zd Zd Zd Zd Z	d Z
d Zd	 Zy
)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      | _        y )	Nr   noder   edge01r   edge34r
   r   )	r   r   r   ranger&   r'   r   rL   r   )r   r   is      r   r   zTestEdgeSubGraph.setup_class  s     MM!$$q 	,A#'sAGGAJv	, (f (f!  VV$45r   c                 n    g dt        | j                  j                  j                  d            k(  sJ y)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  s2    G6FFLLf%L
 
 	
 
r   c                 j    t        ddg| j                  j                  j                  d            sJ y)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%  s2    /0$&&,,2C2CF2K
 	
 
r   c                     | j                   j                  d       g dt        | j                  j                        k(  sJ | j                   j                  d       y)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+  sA    
 	vdffll33331r   c                     | j                   j                  d       g dt        | j                  j                        k(  sJ | j                   j                  dd       | j                   j                  ddd       y)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  s[    
 	1F466<<0000(18,r   c                 D   | j                   D ]7  }| j                  j                  |   | j                   j                  |   k(  r7J  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<   y)	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    
  	6A66<<?dffll1o555	6 #(Qvv||A$&&,,q/111"'Qvv||A$&&,,q/111")Q")Qr   c                    | j                   j                         D ]>  \  }}| j                  j                  ||f   | j                   j                  ||f   k(  r>J  d| 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<   y)	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   
 FFLLN 	<DAq66<<1%ad);;;;	< &+T6"vv||D!&)TVV\\$-?-GGGG%*T6"vv||D!&)TVV\\$-?-GGGG%-T6"%-T6"r   c                 `    | j                   j                  | j                  j                  u sJ y)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"    
 vv||tvv||+++r   c                    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       y)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  s    b&&;b&&(:(:A>b&&A>b&&(:(:AqAr   N)rN   rO   rP   rT   r   r   r   r   r   r   r   r   r   rU   r   r   r   r     s=    
6 
6

-* . ,Br   r   )r+   networkxr   networkx.utilsr   r   rW   rk   r}   r   r   rU   r   r   <module>r      s`      &V  V r#) #N44) 44p-/A *92 92zYB YBr   