
    Vhy                         d dl Z d dlZd dlZd dlZd dlZd dlZd dlmZm	Z	m
Z
 d Z G d d      Z G d de      Z G d d	e      Z G d
 d      Zy)    N)edges_equalgraphs_equalnodes_equalc                      t        j                  d      } t        j                  t         j                  d      5  | j                  d       ddd       y# 1 sw Y   yxY w)zSee gh-7740   zNode.*is not in the graphmatchd   N)nx
path_graphpytestraisesNetworkXErrordegree)Gs    Q/home/dcms/DCMS/lib/python3.12/site-packages/networkx/classes/tests/test_graph.py,test_degree_node_not_found_exception_messager      sE    
aA	r''/J	K 	  s   AAc                       e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
ej                  j                   ej                         d	k(  d
      d        Zd Zd Zd Zd Zd Zd Zd Zd Zd Zy)BaseGraphTesterz:Tests for data-structure independent graph class features.c                 \    | j                   }d|v sJ d|vsJ d|vsJ g |vsJ ddi|vsJ y )N      b)K3selfr   s     r   test_containszBaseGraphTester.test_contains   sJ    GGAvvzz!||{{1vQ    c                     | j                   }t        |      dk(  sJ |j                         dk(  sJ |j                         dk(  sJ y N   )r   lenordernumber_of_nodesr   s     r   
test_orderzBaseGraphTester.test_order   sD    GG1v{{wwyA~~  "a'''r   c                    | j                   t        j                  j                        sJ t        j                  j
                        sJ t        fdj                  j                         D              sJ t        j                               | j                  k(  sJ t        j                  d            di fdi fdi fgk(  sJ y )Nc              3   J   K   | ]  }t        |j                          y wN)
isinstanceadjlist_inner_dict_factory).0adjr   s     r   	<genexpr>z-BaseGraphTester.test_nodes.<locals>.<genexpr>(   s#      
>AJsA889
s    #Tdatar   r      )r   r)   _nodenode_dict_factory_adjadjlist_outer_dict_factoryallvaluessortednodesk3nodesr   s    @r   
test_nodeszBaseGraphTester.test_nodes$   s    GG!''1#6#6777!&&!">">??? 
EFVV]]_
 
 	
 
 aggi DLL000agg4g()q"g2wB-HHHHr   c                 "   | j                         }t        j                  t              5  |j	                  d        d d d        t        j                  t              5  |j                  d g       d d d        t        j                  t              5  |j                  dd        d d d        t        j                  t              5  |j                  dg       d d d        y # 1 sw Y   xY w# 1 sw Y   ~xY w# 1 sw Y   VxY w# 1 sw Y   y xY w)Nr   r   N)Graphr   r   
ValueErroradd_nodeadd_nodes_fromadd_edgeadd_edges_fromr   s     r   test_none_nodezBaseGraphTester.test_none_node.   s    JJL]]:& 	JJt	]]:& 	%dV$	%]]:& 	 JJq$	 ]]:& 	*i[)	* 	*	 		% 	%	  	 	* 	*s/   C!C-C9D!C*-C69DDc                     | j                   }|j                  d      sJ |j                  d      rJ |j                  g       rJ |j                  ddi      rJ y )Nr   r   )r   has_noder   s     r   test_has_nodezBaseGraphTester.test_has_node9   sV    GGzz!}}::a=  ::b>!!::q!f%%%%r   c                 l    | j                   }|j                  dd      sJ |j                  dd      rJ y )Nr   r   )r   has_edger   s     r   test_has_edgezBaseGraphTester.test_has_edge@   s6    GGzz!Q::a$$$$r   c                     | j                   }t        |j                  d            ddgk(  sJ t        j                  t
        j                        5  |j                  d       d d d        y # 1 sw Y   y xY wNr   r   r0   rH   )r   r7   	neighborsr   r   r   r   r   s     r   test_neighborszBaseGraphTester.test_neighborsE   s\    GGakk!n%!Q///]]2++, 	KKO	 	 	s   A,,A5PyPyzPyPy gc is different)reasonc                    | j                         }d }t        j                           || j                         }|j                          t        j                           || j                         }||k(  sJ  G d d| j                         }t        j                           |       } ||      }|j                          t        j                           ||      }||k(  sJ y )Nc                 P     t         fdt        j                         D              S )Nc              3   n   K   | ],  }t        |t        j                        st        |      rd  . yw)r   N)r)   weakref
ProxyTypes)r+   obj_types     r   r-   zRBaseGraphTester.test_memory_leak.<locals>.count_objects_of_type.<locals>.<genexpr>Z   s2      !#w'9'9:z#u?U s   25)sumgcget_objects)rW   s   `r   count_objects_of_typez?BaseGraphTester.test_memory_leak.<locals>.count_objects_of_typeQ   s&      >>+  r   c                       e Zd Zy)1BaseGraphTester.test_memory_leak.<locals>.MyGraphN)__name__
__module____qualname__ r   r   MyGraphr]   h   s    r   rb   )r=   rY   collectcopy)r   r   r[   beforeafterrb   s         r   test_memory_leakz BaseGraphTester.test_memory_leakK   s     JJL	 	

&tzz2	


%djj1	djj 	 	

I&w/	


%g.r   c                    | j                   }t        |j                  |j                        sJ t	        |j                         g d      sJ t	        |j                  d      ddg      sJ t	        |j                  ddg      g d      sJ t        j                  t        j                        5  |j                  d       d d d        y # 1 sw Y   y xY w)Nr   r   r   r0   r   r0   r   rj   rk   r   rH   )
r   r)   r3   r4   r   edgesr   r   r   r   r   s     r   
test_edgeszBaseGraphTester.test_edgess   s    GG!&&!">">???1779&>???1771:'7888177Aq6?,DEEE]]2++, 	GGBK	 	 	s   0CCc                 ^   | j                   }t        |j                               g dk(  sJ t        |j                               ddddk(  sJ |j                  d      dk(  sJ t	        j
                  t        j                        5  |j                  d       d d d        y # 1 sw Y   y xY w)N)rk   rl   )r0   r0   r0   r   r   r0   r   rH   )r   r7   r   dictr   r   r   r   r   s     r   test_degreezBaseGraphTester.test_degree|   s    GGahhj!%====AHHJqQ1#5555xx{a]]2++, 	HHRL	 	 	s   B##B,c                 p    | j                   }|j                         dk(  sJ |j                         dk(  sJ y r    )r   sizenumber_of_edgesr   s     r   	test_sizezBaseGraphTester.test_size   s4    GGvvx1}}  "a'''r   c                    | j                   }t        |j                         | j                        sJ t        |j                  d      dg      sJ t        |j                  ddg      ddg      sJ t        |j                  dg      g       sJ t        |j                  d      g       sJ |j                  d      }t	        j
                  t        j                  d      5  t        |       d d d        |j                  dddi g      }t	        j
                  t        j                  d      5  t        |       d d d        y # 1 sw Y   XxY w# 1 sw Y   y xY w)	Nr   r   rH   foozis not in the graphr   r0   z&in sequence nbunch is not a valid node)	r   r   nbunch_iterr9   r   r   r   r   list)r   r   bunchs      r   test_nbunch_iterz BaseGraphTester.test_nbunch_iter   s'   GG1==?DLL9991==+aS1111==!Q01a&9991==".3331==/444b!]]2++3HI 	K	 q!Qm,]]$L
 	 K	 		 	
	 	s   #E1EEEc                     | j                         }dt               fg}t        j                  t        j
                        5  t        |j                  |             d d d        y # 1 sw Y   y xY w)Nx)r=   setr   r   r   r   rz   ry   )r   r   nbunchs      r   "test_nbunch_iter_node_format_raisez2BaseGraphTester.test_nbunch_iter_node_format_raise   sT     JJL,]]2++, 	(v&'	( 	( 	(s   A%%A.c                 d   | j                         }|j                  dd       t        |j                               dgk(  sJ t	        |j                               ddik(  sJ |j                  d      dk(  sJ t        |j                  dg            dgk(  sJ |j                  dd      dk(  sJ y )Nr   rl   r0   weightr   )r=   rA   r7   r   rq   r   s     r   test_selfloop_degreez$BaseGraphTester.test_selfloop_degree   s    JJL	

1aahhj!fX---AHHJAq6)))xx{aahhsm$000xx(x+q000r   c                 8   | j                   j                         }|j                  dd       t        t	        j
                  |      dg      sJ t        t	        j                  |      dg      sJ t	        j                  |      dk(  sJ |j                  dd       |j                  dd       |j                  dg       |j                  dd       |j                  d       |j                  dd       |j                  dd       |j                  ddg       y )Nr   r   r   r   )r   rd   rA   r   r   nodes_with_selfloopsr   selfloop_edgesnumber_of_selfloopsremove_edgeremove_edges_fromremove_noderemove_nodes_fromr   s     r   test_selfloopszBaseGraphTester.test_selfloops   s    GGLLN	

1a22215s;;;2,,Q/&:::%%a(A---	a	

1a	VH%	

1a	a	

1a	

1a	QF#r   c                    | j                   j                         }|j                  }t        |j                        t        |      k(  sJ i |_        t        |j                        t        |      k7  sJ |j
                  }t        |j
                        t        |      k(  sJ i |_        t        |j
                        t        |      k7  sJ y r(   )r   rd   r,   idr3   r8   r1   )r   r   old_adj	old_nodess       r   test_cache_resetz BaseGraphTester.test_cache_reset   s    GGLLN%%!%%yBwK'''!%%yBwK'''GG	!''{bm+++!''{bm+++r   c                    | j                   j                         }t        |j                        t        |j                        k(  sJ t        |j                        t        |j                        k(  sJ t        |j
                        t        |j
                        k(  sJ t        |j                        t        |j                        k(  sJ y r(   )r   rd   r   r8   rm   r   r,   r   s     r   test_attributes_cachedz&BaseGraphTester.test_attributes_cached   s    GGLLN!''{bk)))!''{bk)))!((|r!((|+++!%%yBquuI%%%r   N)r^   r_   r`   __doc__r   r%   r:   rC   rF   rJ   rN   r   markskipifplatformpython_implementationrg   rn   rr   rv   r|   r   r   r   r   r   ra   r   r   r   r      s    D(I	*&%
 [[&&&(F2;Q  ##J(
,	(1$
,&r   r   c                       e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z d Z!d  Z"d! Z#d" Z$d# Z%d$ Z&d% Z'd& Z(y')(BaseAttrGraphTesterz(Tests of graph class attribute features.c                    | j                         }|j                  dddd       |j                  dddd       t        d |j                  d      D              g d	k(  sJ t	        |j                  d            dd
ddk(  sJ |j                  dd      dk(  sJ t        |j                  dgd      dg      sJ t        d |j                  d      D        g d      sJ t	        |j                  d            ddddk(  sJ |j                  dd      dk(  sJ t        |j                  dgd      dg      sJ y )Nr   r0   r!   )r   otherr   c              3   &   K   | ]	  \  }}|  y wr(   ra   r+   nds      r   r-   z;BaseAttrGraphTester.test_weighted_degree.<locals>.<genexpr>   s     >DAqa>   r   r   )r0   r!   r   r   )r   r0   r!   rl   c              3   &   K   | ]	  \  }}|  y wr(   ra   r   s      r   r-   z;BaseAttrGraphTester.test_weighted_degree.<locals>.<genexpr>   s     C$!QACr   r   )r!      r   r   )r   r!   )r=   rA   r7   r   rq   r   r   r   s     r   test_weighted_degreez(BaseAttrGraphTester.test_weighted_degree   s<   JJL	

1a
+	

1a
+>AHHHH$=>>)KKKAHHHH-.aA!2DDDDxx(x+q000AHHaSH:fXFFFC!(('(*BCYOOOAHHGH,-Q11CCCCxx'x*a///AHHaSH9VHEEEr   c                     g |j                   d<   g |j                  d   d<   |j                  dd       g }|j                  dd|       |j                  dd|       y )Nrx   r   r   r0   rx   )graphr8   r   rA   )r   r   lls      r   add_attributesz"BaseAttrGraphTester.add_attributes   sX    
5	a	

1aR
 	

1aR
 r   c                     | j                  d      }|j                  dk(  sJ | j                  d      }|j                  dk(  sJ y )N nametest)r=   r   r   s     r   	test_namezBaseAttrGraphTester.test_name   sD    JJBJvv||JJFJ#vvr   c                     | j                         }|j                  ddg       t        |      t        |      j                   dk(  sJ y )Nrl   r0   r!   z with 3 nodes and 2 edgesr=   rB   strtyper^   r   s     r   test_str_unnamedz$BaseAttrGraphTester.test_str_unnamed   sE    JJL	&&)*1vDG,,--FGGGGr   c                     | j                  d      }|j                  ddg       t        |      t        |      j                   dk(  sJ y )Nrx   r   rl   r   z% named 'foo' with 3 nodes and 2 edgesr   r   s     r   test_str_namedz"BaseAttrGraphTester.test_str_named   sJ    JJEJ"	&&)*1vDG,,--RSSSSr   c                     | j                  ddg      }|j                  d      }|j                  ddg      }|j                  d      }||j                  u sJ ||j                  u sJ ||j                  u sJ y )	Nrj   rl   Tas_viewr   r   F)rd   )r=   to_directedsubgraphreverse_graph)r   r   DGSDGRSDGs        r   test_graph_chainz$BaseAttrGraphTester.test_graph_chain   s{    JJ'(]]4](kk1a&!{{{&BII~~SZZdkk!!!r   c                    | j                         }|j                  d       |j                  dd       | j                  |       |j	                         }| j                  ||       | j                  ||       | j                  ||       y Nr   r   r0   )r=   r?   rA   r   rd   r   different_attrdictshallow_copy_attrdictr   r   Hs      r   	test_copyzBaseAttrGraphTester.test_copy  so    JJL	

1	

1aAFFH!Q1%""1a(r   c                    | j                         }|j                  d       |j                  dd       | j                  |       |j	                  |      }| j                  ||       | j                  ||       | j                  ||       y r   )r=   r?   rA   r   	__class__r   r   r   r   s      r   test_class_copyz#BaseAttrGraphTester.test_class_copy  sq    JJL	

1	

1aAKKN!Q1%""1a(r   c                    | j                         }|j                  d       |j                  dd       | j                  |       |j	                         }|j                  |       |j                  |j                                t        |j                  d         dk(  sJ |j                         r|j                  d   d   d   n|j                  d   d   }t        |      dk(  sJ t        |j                  d         dk(  sJ |j                         r|j                  d   d   d   n|j                  d   d   }t        |      dk(  sJ y r   )r=   r?   rA   r   r   r@   rB   rm   r"   r8   is_multigraphr,   )r   r   r   ddicts       r   test_fresh_copyz#BaseAttrGraphTester.test_fresh_copy  s   JJL	

1	

1aAKKM		#1771:!###"#//"3aAq!5zQ1771:!###"#//"3aAq!5zQr   c                 p    | j                  ||       | j                  ||       | j                  ||       y r(   )r   r   deep_copy_attrdictr   r   r   s      r   is_deepcopyzBaseAttrGraphTester.is_deepcopy.  s2    !Q1%1%r   c                 p    | j                  ||       | j                  ||       | j                  ||       y r(   )deepcopy_graph_attrdeepcopy_node_attrdeepcopy_edge_attrr   s      r   r   z&BaseAttrGraphTester.deep_copy_attrdict3  s2      A&1%1%r   c                     |j                   d   |j                   d   k(  sJ |j                   d   j                  d       |j                   d   |j                   d   k7  sJ y Nrx   r   r   appendr   s      r   r   z'BaseAttrGraphTester.deepcopy_graph_attr8  T    wwu~///	a wwu~///r   c                     |j                   d   d   |j                   d   d   k(  sJ |j                   d   d   j                  d       |j                   d   d   |j                   d   d   k7  sJ y Nr   rx   r   r8   r   r   s      r   r   z&BaseAttrGraphTester.deepcopy_node_attr=  m    wwqz% AGGAJu$5555	
5  #wwqz% AGGAJu$5555r   c                     |d   d   d   |d   d   d   k(  sJ |d   d   d   j                  d       |d   d   d   |d   d   d   k7  sJ y Nr   r0   rx   r   r   s      r   r   z&BaseAttrGraphTester.deepcopy_edge_attrB  h    tAwu~1a///	!Qa tAwu~1a///r   c                 L    | j                  ||       | j                  ||       y r(   )r   r   r   s      r   is_shallow_copyz#BaseAttrGraphTester.is_shallow_copyG  s"    !Q""1a(r   c                 p    | j                  ||       | j                  ||       | j                  ||       y r(   )shallow_copy_graph_attrshallow_copy_node_attrshallow_copy_edge_attrr   s      r   r   z)BaseAttrGraphTester.shallow_copy_attrdictK  s2    $$Q*##Aq)##Aq)r   c                     |j                   d   |j                   d   k(  sJ |j                   d   j                  d       |j                   d   |j                   d   k(  sJ y r   r   r   s      r   r   z+BaseAttrGraphTester.shallow_copy_graph_attrP  r   r   c                     |j                   d   d   |j                   d   d   k(  sJ |j                   d   d   j                  d       |j                   d   d   |j                   d   d   k(  sJ y r   r   r   s      r   r   z*BaseAttrGraphTester.shallow_copy_node_attrU  r   r   c                     |d   d   d   |d   d   d   k(  sJ |d   d   d   j                  d       |d   d   d   |d   d   d   k(  sJ y r   r   r   s      r   r   z*BaseAttrGraphTester.shallow_copy_edge_attrZ  r   r   c                    |d   d   d   }d|j                   d   d   d<   |j                  |j                  k(  sJ ||j                   d   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   r0   rx   bazr   )r,   rm   r8   r   r   r   old_foos       r   same_attrdictz!BaseAttrGraphTester.same_attrdict_  s    A$q'%."aEww!''!!!$aEww!''!!!''!*U#!
5ww!''!!!#
5ww!''!!!r   c                    |d   d   d   }d|j                   d   d   d<   |j                  |j                  k7  sJ ||j                   d   d   d<   |j                  |j                  k(  sJ |j                  d   d   }d|j                  d   d<   |j                  |j                  k7  sJ ||j                  d   d<   |j                  |j                  k(  sJ y r   )r,   r3   r8   r1   r   s       r   r   z&BaseAttrGraphTester.different_attrdictl  s    A$q'%."aEvv$aEvv''!*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   r0   )r3   r1   r   r   is_directed_pred_succr   s      r   r   z BaseAttrGraphTester.graphs_equaly  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   c                 J   | j                   j                         }d|j                  d<   t        |j                  |j                        sJ |j                  d   dk(  sJ |j                  d= |j                  i k(  sJ | j                  d      }|j                  d   dk(  sJ y )Nbarrx   r   )r   rd   r   r)   graph_attr_dict_factoryr=   r   s      r   test_graph_attrz#BaseAttrGraphTester.test_graph_attr  s    GGLLN!''1#<#<===wwu~&&&GGENww"}}JJ5J!wwu~&&&r   c                 2   | j                   j                         j                  dd       t        fdj	                  d      D              sJ t        j	                         g d      sJ t        j	                  d      di fdd	difd
i fg      sJ dj                  d   d	<   t        j	                  d      di fdd	difd
i fg      sJ t        j	                  d	      g d      sJ t        j	                  d	d      g d      sJ y )Nr   r   r   c              3   P   K   | ]  \  }}t        |j                          y wr(   )r)   node_attr_dict_factory)r+   ur   r   s      r   r-   z5BaseAttrGraphTester.test_node_attr.<locals>.<genexpr>  s'      
8<1Jq!223
s   #&Tr.   rp   r   rx   r0   r   )r<   r   r   )r0   N)r/   default))r   r   r  )r0   r   )r   rd   r?   r5   r8   r   r   s    @r   test_node_attrz"BaseAttrGraphTester.test_node_attr  s   GGLLN	

1%
  
@AT@R
 
 	
 
 1779i0001777-B!eU^9LqRTg/VWWW!
51777-B!eU^9LqRTg/VWWW1777.0RSSSGGG.0T
 	
 
r   c           	          | j                   j                         }ddi} |j                  d
i | t        |j	                         g d      sJ t        |j	                  d      di fdi fd	i fdddifg      sJ y )Nrx   r   r!   r   r   r0   r!   Tr.   r   r   r0   )r!   )r   rd   r?   r   r8   )r   r   as      r   test_node_attr2z#BaseAttrGraphTester.test_node_attr2  s    GGLLNEN

1779l333GGG!R1b'Ar7Q<O P
 	
 
r   c                     | j                         }|j                  ddd       t        |j                  d   ddi      sJ y )Nr   r0   r   r   rl   rx   )r=   rA   r   rm   r   s     r   test_edge_lookupz$BaseAttrGraphTester.test_edge_lookup  s;    JJL	

1aU
#1774=5%.999r   c                     | j                         j                  ddd       t        fdj                  d      D              sJ t	        j                  d      ddddifg      sJ t	        j                  d      d	g      sJ y )
Nr   r0   r   r   c              3   R   K   | ]  \  }}}t        |j                           y wr(   )r)   edge_attr_dict_factory)r+   r  vr   r   s       r   r-   z5BaseAttrGraphTester.test_edge_attr.<locals>.<genexpr>  s)      
8?1aJq!223
s   $'Tr.   rx   )r   r0   r   )r=   rA   r5   rm   r   r   s    @r   test_edge_attrz"BaseAttrGraphTester.test_edge_attr  s    JJL	

1aU
# 
CD77PT7CU
 
 	
 
 1777-Au~0F/GHHH1777.@@@r   c                     | j                         }|j                  ddgd       t        |j                  d      ddddifd	d
ddifg      sJ t        |j                  d      ddg      sJ y )Nrl   r!   r   rx   r   Tr.   r   r0   r!   r   )r   r0   rx   )r!   r   rx   )r=   rB   r   rm   r   s     r   test_edge_attr2z#BaseAttrGraphTester.test_edge_attr2  s    JJL	&&)u5GGG!Q!7!Q9O P
 	
 
 1777.0NOOOr   c           	      X   | j                         }|j                  ddddifddddifgd	       t        |j                  d
      dddddfdddddfg      sJ |j	                  ddg       |j                  ddddd       t        |j                  d
      ddddddfg      sJ y )Nr   r0   r       r!   r   @   rx   r   Tr.   )rx   r   rl   r  r   r   r/   spamr   )r=   rB   r   rm   r   rA   r   s     r   test_edge_attr3z#BaseAttrGraphTester.test_edge_attr3  s    JJL	1a(B01a(B2HIuUGGGAu34Au34
 	
 
 	
VV,-	

1aae
7GGG!QE%(P!Q R
 	
 
r   c           	         | j                         }|j                  ddddd       t        |j                  d      ddddddfg      sJ d	|d   d   d
<   t        |j                  d      ddd	dddfg      sJ d|j                  d   d   d
<   t        |j                  d      ddddddfg      sJ d|j                  d   d
<   t        |j                  d      ddddddfg      sJ ddg|j                  d   d   d<   d|j                  d   d   d<   dddddgdd}t        |j                  d      dd|fg      sJ y )Nr   r0   r   r   rx   r  Tr.   
   r/         rl      listdatar   )r/   r  r   r!  r   )r=   rA   r   rm   r,   )r   r   dds      r   test_edge_attr4z#BaseAttrGraphTester.test_edge_attr4  s   JJL	

1aae
7GGG!QE%(P!Q R
 	
 
 !QGGG!QU5(Q!R S
 	
 
 !aFGGG!QU5(Q!R S
 	
 
 !#fGGG!QU5(Q!R S
 	
 
 $&s)aJ "aHS	
 1777-Ar
|<<<r   c                     | j                   }| j                  |       t        j                  |      }| j	                  ||       | j                  ||       |j                         }| j                  ||       y r(   )r   r   r   r=   r   r   to_undirectedr   r   s      r   test_to_undirectedz&BaseAttrGraphTester.test_to_undirected  sb    GGAHHQKQ"1%OOAr   c                 N   t        j                  d| j                        }|j                  d      }||j                  u sJ |j                  dd      sJ |j                  dd      s|j                         sJ t        j                  t         j                  |j                  d       t        j                  t         j                  |j                  dd       |j                  dd       |j                  dd      sJ |j                  dd      s|j                         sJ y y Nr0   )create_usingTr   r   r   rH   )r   r   r=   r   r   rI   r   r   r   r   r?   rA   r   r   H2s      r   test_to_directed_as_viewz,BaseAttrGraphTester.test_to_directed_as_view  s    MM!$**5]]4](BII~~{{1a   {{1a AMMO33b&&R8b&&Q:	

1a{{1a   {{1a AMMO33O r   c                    t        j                  d| j                        }|j                  d      }||j                  u sJ |j                  dd      sJ |j                  dd      sJ t        j                  t         j                  |j                  d       t        j                  t         j                  |j                  dd       |j                  dd       |j                  dd      sJ |j                  dd      sJ y r(  )r   r   r=   r%  r   rI   r   r   r   r?   rA   r*  s      r   test_to_undirected_as_viewz.BaseAttrGraphTester.test_to_undirected_as_view	  s    MM!$**5__T_*BII~~{{1a   {{1a   b&&R8b&&Q:	

1a{{1a   {{1a   r   c                 L   | j                         } G fdd|j                                G fdd|j                               |j                         r        n        }|j	                         }t        |      sJ |j                         }t        |      sJ y )Nc                   "    e Zd Z fdZfdZy)9BaseAttrGraphTester.test_directed_class.<locals>.newGraphc                     S r(   ra   r   
newDiGraphs    r   to_directed_classzKBaseAttrGraphTester.test_directed_class.<locals>.newGraph.to_directed_class  	    !!r   c                     S r(   ra   r   newGraphs    r   to_undirected_classzMBaseAttrGraphTester.test_directed_class.<locals>.newGraph.to_undirected_class      r   Nr^   r_   r`   r5  r:  r4  r9  s   r   r9  r1        " r   r9  c                   "    e Zd Z fdZfdZy);BaseAttrGraphTester.test_directed_class.<locals>.newDiGraphc                     S r(   ra   r3  s    r   r5  zMBaseAttrGraphTester.test_directed_class.<locals>.newDiGraph.to_directed_class   r6  r   c                     S r(   ra   r8  s    r   r:  zOBaseAttrGraphTester.test_directed_class.<locals>.newDiGraph.to_undirected_class#  r;  r   Nr<  r=  s   r   r4  r@    r>  r   r4  )r=   r:  r5  r   r   r)   r%  )r   r   r   r4  r9  s      @@r   test_directed_classz'BaseAttrGraphTester.test_directed_class  s    JJL	 q,,. 	 	 ,,. 	  MMOJLMMO!Z(((OO!X&&&r   c                     | j                   }| j                  |       t        j                  |      }| j	                  ||       | j                  ||       |j                         }| j                  ||       y r(   )r   r   r   DiGraphr   r   r   r   r   s      r   test_to_directedz$BaseAttrGraphTester.test_to_directed,  sa    GGAJJqMQ"1%MMOAr   c                 ~   | j                   }| j                  |       |j                  g d      }| j                  ||       | j	                  ||       | j                  ||       |j                  d      }|j                  di ik(  sJ |j                  g       }|j                  i k(  sJ |j                  i k7  sJ y )N)r   r   r0   r   r   )r   r   r   r   r   r   r,   r   s      r   test_subgraphz!BaseAttrGraphTester.test_subgraph5  s    GGAJJ|$!Q1a ""1a(JJqMuuBJJrNuu{{uu{{r   c                 (   | j                   j                         }|j                  dd       |j                  ddd       t        t	        j
                  |d      ddi fddddifg      sJ t        t	        j
                  |d      dd	g      sJ y )
Nr   r   r0   r   Tr.   r   )r   r   N)r   r   r0   )r   rd   rA   r   r   r   r   s     r   test_selfloops_attrz'BaseAttrGraphTester.test_selfloops_attrC  s    GGLLN	

1a	

1a
"ad+q!Rj1a(A:O-P
 	
 
 ah/,	1J
 	
 
r   N))r^   r_   r`   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r  r#  r&  r,  r.  rC  rF  rH  rJ  ra   r   r   r   r      s    2F! H
T
"	)	) &
&
0
6
0
)*
0
6
0
""2('

:
AP
"=<
4
!'.	
r   r   c                   |    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zy)	TestGraphz;Tests specific to dict-of-dict-of-dict graph data structurec                    t         j                  | _        i i i }}}||d||d||dd| _        g d| _        g d| _        | j                         | _        | j                  | j
                  _        i | j
                  _        i | j
                  j                  d<   i | j
                  j                  d<   i | j
                  j                  d<   y )	Nrl   rk   rj   rp   ri   r   r   r0   )r   r=   k3adjk3edgesr9   r   r3   r1   )r   ed1ed2ed3s       r   setup_methodzTestGraph.setup_methodR  s    XX
R#S S)##.>ssCST
/ **,zzaaar   c                    | j                   }t        j                  t        j                  |d            }| j	                  ||       t        j                  t        j                  |            }| j	                  ||       y )NrH   )r   pickleloadsdumpsr   )r   r   pgs      r   test_picklezTestGraph.test_pickle`  sZ    GG\\&,,q"-."a \\&,,q/*"a r   c                     | j                  dgdgdd      }|j                  dk(  sJ t        |j                  j	                               ddi ifddi ifgk(  sJ y )Nr0   r   rl   r   r   )r=   r   r7   r,   itemsr   s     r   test_data_inputzTestGraph.test_data_inputg  sa    JJA3A3'fJ5vvaeekkm$!aWAr7|(DDDDr   c                 r    | j                   }t        |j                               i i di i di i ddk(  sJ y )Nrl   rk   rj   rp   )r   rq   	adjacencyr   s     r   test_adjacencyzTestGraph.test_adjacencyl  sB    GGAKKM""~"~"~'
 
 	
 
r   c                 b   | j                   }|j                  d   i i dk(  sJ |d   i i dk(  sJ t        j                  t              5  |j                  d       d d d        t        j                  t              5  |j                  dg       d d d        y # 1 sw Y   >xY w# 1 sw Y   y xY w)Nr   rl   jA)r   r,   r   r   KeyError__getitem__	TypeErrorr   s     r   test_getitemzTestGraph.test_getitemt  s    GGuuQxrb>)))t2"~%%%]]8$ 	MM#	]]9% 	!MM3% 	! 	!	 		! 	!s   
B=B%B"%B.c                 d   | j                         }|j                  d       |j                  di ik(  sJ |j                  dd       |j                  dd       |j                  dd       |j                  d   d   dk(  sJ |j                  d   d   dk(  sJ |j                  d   d   dk(  sJ |j                  dd       |j                  dd       |j                  dd       |j                  d   d   dk(  sJ |j                  d   d   dk(  sJ |j                  d   d   dk(  sJ y )	Nr   r   redcr0   bluer!   rj  )r=   r?   r,   r8   r   s     r   test_add_nodezTestGraph.test_add_node}  s*   JJL	

1uuB	

1
	

1
	

1
wwqz#%'''wwqz#&(((wwqz#%'''	

1
	

1
	

1
wwqz#&(((wwqz#%'''wwqz#&(((r   c                    | j                         }|j                  g d       |j                  i i i dk(  sJ |j                  g dd       |j                  d   d   dk(  sJ |j                  d   d   dk(  sJ |j                  d   |j                  d   usJ |j                  g dd       |j                  d   d   dk(  sJ |j                  d   d   dk(  sJ |j                  d   |j                  d   usJ | j                         }|j                  |j                  d	
             |j                  d   d   dk(  sJ |j                  d   d   dk(  sJ |j                  d   |j                  d   usJ |j                  ddddifdddifgd       |j                  d   d   dk(  sJ |j                  d   d   dk(  sJ |j                  d   d   dk(  sJ |j                  d   d   dk(  sJ y )Nrp   rh  ri  r   rj  r0   r   rk  Tr.   greenr!   cyan)r=   r@   r,   r8   r   s      r   test_add_nodes_fromzTestGraph.test_add_nodes_from  s   JJL	#uuB2"----	e,wwqz#%'''wwqz#%'''wwqz+++	f-wwqz#&(((wwqz#&(((wwqz+++JJL	d+,wwqz#&(((wwqz#&(((wwqz+++	!a#w01sFm2DEOwwqz#%'''wwqz#')))wwqz#&(((wwqz#&(((r   c                    | j                   j                         }|j                  d       |j                  di idi idk(  sJ t	        j
                  t        j                        5  |j                  d       d d d        y # 1 sw Y   y xY w)Nr   r0   r   rl   rH   )r   rd   r   r,   r   r   r   r   r   s     r   test_remove_nodezTestGraph.test_remove_node  so    GGLLN	auuQGB0000]]2++, 	MM"	 	 	s   'BBc                     | j                   j                         }|j                  ddg       |j                  di ik(  sJ |j                  dg       y rL   )r   rd   r   r,   r   s     r   test_remove_nodes_fromz TestGraph.test_remove_nodes_from  sI    GGLLN	QF#uuB	RD!r   c                    | j                         }|j                  dd       |j                  di idi idk(  sJ | j                         } |j                  d  |j                  di idi idk(  sJ | j                         }t        j                  t
              5  |j                  d d       d d d        y # 1 sw Y   y xY w)Nr   r   rj   anything)r=   rA   r,   r   r   r>   r   s     r   test_add_edgezTestGraph.test_add_edge  s    JJL	

1auuQGB0000JJL

FuuQGB0000JJL]]:& 	)JJtZ(	) 	) 	)s   B77C c                 v   | j                         }|j                  dddddifg       |j                  i ddiddi idddiidk(  sJ | j                         }|j                  dddddifddd	d
ifgd       |j                  d	diddddd	did	d
iddddd	d
iddk(  sJ t        j                  t
        j                        5  |j                  dg       d d d        t        j                  t
        j                        5  |j                  dg       d d d        t        j                  t              5  |j                  dg       d d d        t        j                  t              5  |j                  ddg       d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   WxY w# 1 sw Y   y xY w)Nrj   r   r0   r   r!   rl   rp   r   r/   r   r.   )r   r/   rk   )r   r	  r    )r!   r0   )	r=   rB   r,   r   r   r   r   re  r>   r   s     r   test_add_edges_fromzTestGraph.test_add_edges_from  s   JJL	&1a(A"789uu8Q-(2wHa=!
 
 	
 

 JJL	&1a(A"7!Q9LMTUVuuA;a#;<A;FA;/+<
 
 	
 
 ]]2++, 	%dV$	%]]2++, 	-l^,	-]]9% 	"aS!	"]]:& 	2i01	2 	2	% 	%	- 	-	" 	"	2 	2s0   FF:F#.F/FF #F,/F8c                 (   | j                   j                         }|j                  dd       |j                  di idi ii i ddk(  sJ t	        j
                  t        j                        5  |j                  dd       d d d        y # 1 sw Y   y xY w)Nr   r   r0   rj   rp   rH   )r   rd   r   r,   r   r   r   r   r   s     r   test_remove_edgezTestGraph.test_remove_edge  sy    GGLLN	auuQGBrNCCCC]]2++, 	!MM"a 	! 	! 	!s   ,BBc                     | j                   j                         }|j                  dg       |j                  di idi ii i ddk(  sJ |j                  dg       y )Nrj   r0   rp   r   )r   rd   r   r,   r   s     r   test_remove_edges_fromz TestGraph.test_remove_edges_from  sV    GGLLN	VH%uuQGBrNCCCC	VH%r   c                     | j                   j                         }d|j                  d<   |j                          t	        |j
                        g k(  sJ |j                  i k(  sJ |j                  i k(  sJ y )Nr   r   )r   rd   r   clearrz   r8   r,   r   s     r   
test_clearzTestGraph.test_clear  s]    GGLLN		AGG}"""uu{{ww"}}r   c                 Z   | j                   j                         }d|j                  d<   t        |j                        }|j                          t        |j                        |k(  sJ |j                  i i i dk(  sJ t        |j                        g k(  sJ |j                  d   dk(  sJ y )Nr   r   rp   )r   rd   r   rz   r8   clear_edgesr,   rm   )r   r   r8   s      r   test_clear_edgeszTestGraph.test_clear_edges  s    GGLLNQWW	AGG}%%%uuB2"----AGG}"""wwv$&&&r   c                    | j                   }ddi fddi fddi fg}t        |j                  d      |      sJ t        |j                  dd      ddi fddi fg      sJ t        |j                  ddgd      |      sJ t        j                  t
        j                        5  |j                  dd       d d d        y # 1 sw Y   y xY w)Nr   r   r0   Tr.   rH   )r   r   rm   r   r   r   r   )r   r   	all_edgess      r   test_edges_datazTestGraph.test_edges_data  s    GGBZ!QaBZ8	1777-y9991771470Aq":1bz2JKKK177Aq675yAAA]]2++, 	GGB	 	 	s   $C  C	c                    | j                   j                         }|j                  dd      i k(  sJ |d   d   i k(  sJ |j                  dd      J |j                  dd      J |j                  ddd      dk(  sJ y )Nr   r   r  r  rH   )r  )r   rd   get_edge_datar   s     r   test_get_edge_datazTestGraph.test_get_edge_data  s    GGLLNq!$***tAw"}}r2&...r1%---r1a0A555r   c                    | j                   j                         }|j                  ddddifgdddddifg	       d
i fdi fdi fdi fdddifdi fdi fdi fg}t        |j                  j                               |k(  sJ |j                         r%d
di fd
di fdd
i fddi fdd
i fddi fddi fddddifg}nd
di fd
di fddi fddi fddddifg}t        |j                  j                               |k(  sJ |j                  i k(  sJ | j                   j                         }|j                  dddddifgddddifg       t        |j                  j                               |k(  sJ t        |j                  j                               |k(  sJ |j                  i k(  sJ | j                         }d|j                  d<   |j                  dd       |j                  d
dd       |j                         }| j                         }|j                  |       t        ||      sJ |j                  |       t        ||      sJ | j                         }|j                  ddg       |j                  ddhz  t               k(  sJ |j                         d
k(  sJ | j                         }|j                  dg       t        |j                  j                               ddi fgk(  sJ |j                         dk(  sJ t        j                   t"        j$                        5  t#        j                         j                          d d d        y # 1 sw Y   y xY w)Nr!   r   rt   r0   )r   r      r   r   )r8   rm   r   r   r   r   rx   r.   g      ?r   )r8   r  )rm   )r   rd   updater7   r8   r/   r   rm   r   r=   r?   rA   r   r   rt   r   r   r   r   )r   r   nlistelistGGr   s         r   test_updatezTestGraph.test_update  sU   GGLLN	A{+,VaXqM=R4STGGGGGGG	
 agglln%...==?Ar
Ar
Ar
Ar
Ar
Ar
Ar
A!}%	E Ar
Ar
Ar
Ar
A!}%E agglln%...ww"}} GGLLN	&1a(A/01q61+6F2GHagglln%...agglln%...ww"}} JJL	

11
	

1a
$VVXJJL
		!Ar"""	Aq!!! JJL	1vww!Q35(((vvx1}} JJL	x agglln%1a*555vvx1}} ]]2++, 	 HHJ	  	  	 s   !#MMN)r^   r_   r`   r   rS  rY  r\  r_  rf  rl  rp  rr  rt  rw  ry  r{  r}  r  r  r  r  r  ra   r   r   rL  rL  O  sa    E!E

!)&)8"	)22!&'6F r   rL  c                   @    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zy
)TestEdgeSubgraphz6Unit tests for the :meth:`Graph.edge_subgraph` method.c                    t        j                  d      }t        d      D ]  }d| |j                  |   d<    d|j                  d   d<   d|j                  d   d<   d|j
                  d<   || _        |j                  ddg      | _        y )	Nr   noder   edge01rj   edge34r  r   )	r   r   ranger8   rm   r   r   edge_subgraphr   )r   r   is      r   rS  zTestEdgeSubgraph.setup_method[  s    MM!q 	,A#'sAGGAJv	, (f (f!&&!12r   c                 X    g dt        | j                  j                               k(  sJ y)z.Tests that the subgraph has the correct nodes.r   r   r!   r   N)r7   r   r8   r   s    r   test_correct_nodesz#TestEdgeSubgraph.test_correct_nodesh  s    vdfflln5555r   c                 \    ddgt        | j                  j                  d            k(  sJ y)z.Tests that the subgraph has the correct edges.)r   r   r  )r!   r   r  r   r.   N)r7   r   rm   r  s    r   test_correct_edgesz#TestEdgeSubgraph.test_correct_edgesl  s+     "23vdffllPVl>W7XXXXr   c                     | j                   j                  d       g dt        | j                  j	                               k(  sJ y)zkTests that adding a node to the original graph does not
        affect the nodes of the subgraph.

        r   r  N)r   r?   r7   r   r8   r  s    r   rl  zTestEdgeSubgraph.test_add_nodep  s1    
 	vdfflln5555r   c                     | j                   j                  d       g dt        | j                  j	                               k(  sJ y)ziTests that removing a node in the original graph does
        affect the nodes of the subgraph.

        r   )r   r!   r   N)r   r   r7   r   r8   r  s    r   rr  z!TestEdgeSubgraph.test_remove_nodex  s3    
 	1F466<<>2222r   c                    | 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 y)z`Tests that the node attribute dictionary of the two graphs is
        the same object.

        rx   r   r   r   r   N)r   r   r8   )r   r  s     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1r   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 y)z`Tests that the edge attribute dictionary of the two graphs is
        the same object.

        rx   rj   r   r   r  N)r   rm   r   )r   r  r  s      r   test_edge_attr_dictz$TestEdgeSubgraph.test_edge_attr_dict  s    
 FFLLN 	<DAq66<<1%ad);;;;	< &+T6"vv||D!&)TVV\\$-?-GGGG%*T6"vv||D!&)TVV\\$-?-GGGGr   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   N)r^   r_   r`   r   rS  r  r  rl  rr  r  r  r  ra   r   r   r  r  X  s/    @36Y632H,r   r  )rY   rU  r   rT   r   networkxr   networkx.utilsr   r   r   r   r   r   rL  r  ra   r   r   <module>r     sZ    	      A A@& @&Fv
/ v
rF # F RG, G,r   