
    ިsgx                         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
  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                       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selfGs     T/var/www/html/venv/lib/python3.12/site-packages/networkx/classes/tests/test_graph.py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)Graphpytestraises
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_node2   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_edge9   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	   r$   r>   )r   r+   	neighborsr2   r3   nxNetworkXErrorr   s     r   test_neighborszBaseGraphTester.test_neighbors>   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>S   s2      !#w'9'9:z#u?U s   25)sumgcget_objects)rO   s   `r   count_objects_of_typez?BaseGraphTester.test_memory_leak.<locals>.count_objects_of_typeJ   s&      >>+  r   c                       e Zd Zy)1BaseGraphTester.test_memory_leak.<locals>.MyGraphN)__name__
__module____qualname__ r   r   MyGraphrU   a   s    r   rZ   )r1   rQ   collectcopy)r   r   rS   beforeafterrZ   s         r   test_memory_leakz BaseGraphTester.test_memory_leakD   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   r$   r	   r$   r   rb   rc   r	   r>   )
r   r   r'   r(   r   edgesr2   r3   rD   rE   r   s     r   
test_edgeszBaseGraphTester.test_edgesl   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)rc   rd   )r$   r$   r$   r   r	   r$   r   r>   )r   r+   degreedictr2   r3   rD   rE   r   s     r   test_degreezBaseGraphTester.test_degreeu   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	   r>   foozis not a node or a sequence)matchr$   z&in sequence nbunch is not a valid node)	r   r   nbunch_iterr-   r2   r3   rD   rE   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++3PQ 	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)r1   setr2   r3   rD   rE   rt   rs   )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	   rd   r$   weightr}   )r1   r7   r+   ri   rj   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   r\   r7   r   rD   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   r\   r    idr'   r,   r%   )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   r\   r   r,   re   ri   r    r   s     r   test_attributes_cachedz&BaseGraphTester.test_attributes_cached   s    GGLLN!''{bk)))!''{bk)))!((|r!((|+++!%%yBquuI%%%r   N)rV   rW   rX   __doc__r   r   r.   r9   r<   r@   rF   r2   markskipifplatformpython_implementationr_   rf   rk   ro   rv   r{   r   r   r   r   rY   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	   r$   r   )r}   otherr
   c              3   &   K   | ]	  \  }}|  y wr   rY   r   nds      r   r!   z;BaseAttrGraphTester.test_weighted_degree.<locals>.<genexpr>   s     >DAqa>   r}   r~   )r$   r      r   )r	   r$   r   rd   c              3   &   K   | ]	  \  }}|  y wr   rY   r   s      r   r!   z;BaseAttrGraphTester.test_weighted_degree.<locals>.<genexpr>   s     C$!QACr   r   )r      r
   r   )r	   r   )r1   r7   r+   ri   rj   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 )Nrq   r   r	   r$   rq   )graphr,   r   r7   )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)r1   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 )Nrd   r$   r   z with 3 nodes and 2 edgesr1   r8   strtyperV   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 )Nrq   r   rd   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 )	Nrb   rd   Tas_viewr   r	   F)r\   )r1   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	   r$   )r1   r5   r7   r   r\   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   )r1   r5   r7   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   )r1   r5   r7   r   r   r6   r8   re   r   r,   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_attrdict,  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 Nrq   r	   r   appendr   s      r   r   z'BaseAttrGraphTester.deepcopy_graph_attr1  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   rq   r	   r,   r   r   s      r   r   z&BaseAttrGraphTester.deepcopy_node_attr6  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	   r$   rq   r   r   s      r   r   z&BaseAttrGraphTester.deepcopy_edge_attr;  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_copy@  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_attrdictD  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_attrI  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_attrN  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_attrS  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	   r$   rq   bazr   )r    re   r,   r   r   r   old_foos       r   same_attrdictz!BaseAttrGraphTester.same_attrdictX  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    r'   r,   r%   r   s       r   r   z&BaseAttrGraphTester.different_attrdicte  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	   r$   )r'   r%   r   r   is_directed_pred_succr   s      r   r   z BaseAttrGraphTester.graphs_equalr  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barrq   r   )r   r\   r   r   graph_attr_dict_factoryr1   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"   rh   r   rq   r$   r   )r0   r	   r   )r$   N)r#   default))r   r   r   )r$   r   )r   r\   r5   r)   r,   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 )Nrq   r   r   r   r	   r$   r   Tr"   r   r	   r$   )r   )r   r\   r5   r   r,   )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	   r$   r   r   rd   rq   )r1   r7   r   re   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	   r$   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"   rq   )r	   r$   r   )r1   r7   r)   re   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 )Nrd   r   r
   rq   r   Tr"   r	   r$   r   r
   )r	   r$   rq   )r   r
   rq   )r1   r8   r   re   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	   r$   r}       r   r
   @   rq   r   Tr"   )rq   r}   rd   r  r   r   r#   spamr   )r1   r8   r   re   r   r7   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	   r$   r   r   rq   r  Tr"   
   r#         rd      listdatar}   )r#   r  r   r  r}   )r1   r7   r   re   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   rD   r1   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 Nr$   )create_usingTr   r   r	   r>   )rD   
path_graphr1   r   r   r?   r   r2   r3   rE   r5   r7   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#  )rD   r%  r1   r   r   r?   r2   r3   rE   r5   r7   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   rY   r   
newDiGraphs    r   to_directed_classzKBaseAttrGraphTester.test_directed_class.<locals>.newGraph.to_directed_class  	    !!r   c                     S r   rY   r   newGraphs    r   to_undirected_classzMBaseAttrGraphTester.test_directed_class.<locals>.newGraph.to_undirected_class      r   NrV   rW   rX   r1  r6  r0  r5  s   r   r5  r-        " r   r5  c                   "    e Zd Z fdZfdZy);BaseAttrGraphTester.test_directed_class.<locals>.newDiGraphc                     S r   rY   r/  s    r   r1  zMBaseAttrGraphTester.test_directed_class.<locals>.newDiGraph.to_directed_class  r2  r   c                     S r   rY   r4  s    r   r6  zOBaseAttrGraphTester.test_directed_class.<locals>.newDiGraph.to_undirected_class  r7  r   Nr8  r9  s   r   r0  r<    r:  r   r0  )r1   r6  r1  r   r   r   r   )r   r   r   r0  r5  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   rD   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	   r$   r   r   )r   r   r   r   r   r   r    r   s      r   test_subgraphz!BaseAttrGraphTester.test_subgraph.  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	   r$   r~   Tr"   r}   )r   r   N)r	   r	   r$   )r   r\   r7   r   rD   r   r   s     r   test_selfloops_attrz'BaseAttrGraphTester.test_selfloops_attr<  s    GGLLN	

1a	

1a
"ad+q!Rj1a(A:O-P
 	
 
 ah/,	1J
 	
 
r   N))rV   rW   rX   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?  rB  rD  rF  rY   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 )	Nrd   rc   rb   rh   ra   r   r	   r$   )rD   r1   k3adjk3edgesr-   r   r'   r%   )r   ed1ed2ed3s       r   setup_methodzTestGraph.setup_methodK  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 )Nr>   )r   pickleloadsdumpsr   )r   r   pgs      r   test_picklezTestGraph.test_pickleY  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 )Nr$   r	   rd   r   r   )r1   r   r+   r    itemsr   s     r   test_data_inputzTestGraph.test_data_input`  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 )Nrd   rc   rb   rh   )r   rj   	adjacencyr   s     r   test_adjacencyzTestGraph.test_adjacencye  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   rd   jA)r   r    r2   r3   KeyError__getitem__	TypeErrorr   s     r   test_getitemzTestGraph.test_getitemm  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cr$   bluer   rf  )r1   r5   r    r,   r   s     r   test_add_nodezTestGraph.test_add_nodev  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 )Nrh   rd  re  r   rf  r$   r	   rg  Tr"   greenr   cyan)r1   r6   r    r,   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   r$   r	   rd   r>   )r   r\   r   r    r2   r3   rD   rE   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 rB   )r   r\   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	   rb   anything)r1   r7   r    r2   r3   r4   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)Nrb   r   r$   r}   r   rd   rh   r	   r#   r
   r"   )r}   r#   rc   )r   r  r   )r   r$   )	r1   r8   r    r2   r3   rD   rE   ra  r4   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	   r$   rb   rh   r>   )r   r\   r   r    r2   r3   rD   rE   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 )Nrb   r$   rh   r   )r   r\   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   r\   r   clearrt   r,   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   rh   )r   r\   r   rt   r,   clear_edgesr    re   )r   r   r,   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	   r$   Tr"   r>   )r   r   re   r2   r3   rD   rE   )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  r>   )r  )r   r\   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
   rm   r$   )r
   r      r   r}   )r,   re   r   r	   r   r   rq   r"   g      ?r~   )r,   r  )re   )r   r\   updater+   r,   r#   r   re   r   r1   r5   r7   r   ry   rm   r2   r3   rD   rE   )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)rV   rW   rX   r   rO  rU  rX  r[  rb  rh  rl  rn  rp  rs  ru  rw  ry  r|  r  r  r  r  rY   r   r   rH  rH  H  sa    E!E

!)&)8"	)22!&'6F r   rH  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   edge01rb   edge34r  r   )	rD   r%  ranger,   re   r   r   edge_subgraphr   )r   r   is      r   rO  zTestEdgeSubgraph.setup_methodT  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)r+   r   r,   r   s    r   test_correct_nodesz#TestEdgeSubgraph.test_correct_nodesa  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)r+   r   re   r  s    r   test_correct_edgesz#TestEdgeSubgraph.test_correct_edgese  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   r5   r+   r   r,   r  s    r   rh  zTestEdgeSubgraph.test_add_nodei  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   r+   r   r,   r  s    r   rn  z!TestEdgeSubgraph.test_remove_nodeq  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.

        rq   r   r   r   r	   N)r   r   r,   )r   r  s     r   test_node_attr_dictz$TestEdgeSubgraph.test_node_attr_dicty  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.

        rq   rb   r   r   r  N)r   re   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)rV   rW   rX   r   rO  r  r  rh  rn  r  r  r  rY   r   r   r  r  Q  s/    @36Y632H,r   r  )rQ   rQ  r   rL   r2   networkxrD   networkx.utilsr   r   r   r   r   rH  r  rY   r   r   <module>r     sU    	      A A@& @&Fv
/ v
rF # F RG, G,r   