
    ިsgYI                         d dl mZ d dlZd dlZd dlmZ ddlmZ ddlm	Z
  G d de      Z G d	 d
ee
      Z G d d      Z G d de      Z G d dej                        Z G d de      Zy)    )UserDictN)edges_equal   )BaseAttrGraphTester)	TestGraphc                   `    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y)BaseMultiGraphTesterc                     | j                   }|j                  dd      sJ |j                  dd      rJ |j                  ddd      sJ |j                  ddd      rJ y )Nr   r   )K3has_edgeselfGs     Y/var/www/html/venv/lib/python3.12/site-packages/networkx/classes/tests/test_multigraph.pytest_has_edgez"BaseMultiGraphTester.test_has_edge   sb    GGzz!Q::a$$$zz!Q"""::aA&&&&    c                     | j                   }|j                  dd      di ik(  sJ |d   d   di ik(  sJ |d   d   d   i k(  sJ |j                  dd      J |j                  ddd      i k(  sJ y )Nr   r   
      )r   get_edge_datar   s     r   test_get_edge_dataz'BaseMultiGraphTester.test_get_edge_data   s    GGq!$B///tAw1b'!!!tAwqzRr2&...q!Q'2---r   c                     | j                   }t        |j                               di idi iddi idi iddi idi iddk(  sJ y )Nr   r      r   r   r   r   r   r   r   )r   dict	adjacencyr   s     r   test_adjacencyz#BaseMultiGraphTester.test_adjacency   s]    GGAKKM"r72w'r72w'r72w''
 
 	
 
r   c                     |d   d   d   d   |d   d   d   d   k(  sJ |d   d   d   d   j                  d       |d   d   d   d   |d   d   d   d   k7  sJ y Nr   r   r   fooappendr   Hr   s      r   deepcopy_edge_attrz'BaseMultiGraphTester.deepcopy_edge_attr$       tAwqz% AaDGAJu$5555	!Q
5  #tAwqz% AaDGAJu$5555r   c                     |d   d   d   d   |d   d   d   d   k(  sJ |d   d   d   d   j                  d       |d   d   d   d   |d   d   d   d   k(  sJ y r#   r%   r'   s      r   shallow_copy_edge_attrz+BaseMultiGraphTester.shallow_copy_edge_attr)   r*   r   c                    |j                   |j                   k(  sJ |j                  |j                  k(  sJ |j                  |j                  k(  sJ |j                  |j                  k(  sJ |j	                         si|j	                         sY|j                   d   d   d   |j                   d   d   d   u sJ |j                   d   d   d   |j                   d   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   d   |j
                  d   d   d   u sJ |j                  d   d   d   |j
                  d   d   d   u sJ y )Nr   r   r   )_adj_nodegraphnameis_directed_pred_succr'   s      r   graphs_equalz!BaseMultiGraphTester.graphs_equal.   s   vvww!''!!!ww!''!!!vv}}q}}66!9Q<?affQil1o55566!9Q<?affQil1o555==?&&&&==?&&&&77agg%%%77agg%%%771:a=#qwwqz!}Q'7777771:a=#qwwqz!}Q'7777r   c                    |d   d   d   d   }d|j                   d   d   d   d<   |j                  |j                  k(  sJ ||j                   d   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   r   r$   bazadjr.   nodesr/   r   r(   r   old_foos       r   same_attrdictz"BaseMultiGraphTester.same_attrdictB       A$q'!*U# %aAuvv 'aAuvv''!*U#!
5ww!''!!!#
5ww!''!!!r   c                    |d   d   d   d   }d|j                   d   d   d   d<   |j                  |j                  k7  sJ ||j                   d   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 r7   r9   r<   s       r   different_attrdictz'BaseMultiGraphTester.different_attrdictP   r?   r   c                     | j                   }| j                  |       t        j                  |      }| j	                  ||       |j                         }| j                  ||       y N)r   add_attributesnx
MultiGraphis_shallow_copyto_undirectedis_deepcopyr   r   r(   s      r   test_to_undirectedz'BaseMultiGraphTester.test_to_undirected^   sS    GGAMM!Q"OOAr   c                     | j                   }| j                  |       t        j                  |      }| j	                  ||       |j                         }| j                  ||       y rC   )r   rD   rE   MultiDiGraphrG   to_directedrI   rJ   s      r   test_to_directedz%BaseMultiGraphTester.test_to_directedf   sR    GGAOOAQ"MMOAr   c                 4   | j                   }|j                  dd       |j                  dd       |j                  ddd       |j                  ddd       |j                  dd      dk(  sJ |j                  dd       |j                  dd      dk(  sJ y )Nr   parallel edgekeyr   r   )r   add_edgeremove_edgenumber_of_edgesr   s     r   test_number_of_edges_selfloopsz3BaseMultiGraphTester.test_number_of_edges_selfloopsn   s    GG	

1a	

1a	

1a_
-	a0  A&!+++	a  A&!+++r   c                     | j                         }|j                  ddd       |j                  dddd       t        |j                  d   ddi      sJ t        |j                  d	   ddi      sJ y )
Nr   r   bar)r$   rS   bizr   r   r   r$   )r   r   rS   )GraphrT   r   edgesr   s     r   test_edge_lookupz%BaseMultiGraphTester.test_edge_lookupx   sm    JJL	

1aU
#	

1aE
*1777+eU^<<<177;/%@@@r   c           	         | j                         j                  dddd       j                  dddd       t        j                  dd      j                        sJ t        fdj                  d	
      D              sJ t        j                  d	d	      dddddifdddddifg      sJ t        j                  d	d      ddg      sJ y )Nr   r   k1rY   )rS   r$   k2r8   c              3   R   K   | ]  \  }}}t        |j                           y wrC   )
isinstanceedge_attr_dict_factory).0uvdr   s       r   	<genexpr>z6BaseMultiGraphTester.test_edge_attr.<locals>.<genexpr>   s)      
8?1aJq!223
s   $'Tdatakeysrk   r$   )r   r   r`   rY   )r   r   ra   r8   )r\   rT   rc   r   edge_key_dict_factoryallr]   r   r   s    @r   test_edge_attrz#BaseMultiGraphTester.test_edge_attr   s    JJL	

1aTu
-	

1aTu
-!//!Q/1H1HIII 
CD77PT7CU
 
 	
 
 GGDG)D5%.)Aq$+GH
 	
 
 GGEG*-@BU,V
 	
 
r   c                    | j                         }|j                  dddddd       t        |j                  d	      dddddd
fg      sJ d|d   d   d   d<   t        |j                  d	      dddddd
fg      sJ d|j                  d   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<   d|j                  d   d   d   d<   t        |j                  d	      dddddddgddfg      sJ y )Nr   r   r      rY   r$   )rS   rk   spamrY   Trj   )rk   rs   rY   r   rk   r      r[      listdataweight)rk   rs   rY   rv   rw   )r\   rT   r   r]   r:   r   s     r   test_edge_attr4z$BaseMultiGraphTester.test_edge_attr4   s   JJL	

1aQQU
>GGG!QE%(P!Q R
 	
 
  !Q
6GGG!QU5(Q!R S
 	
 
 "$aAvGGG!QU5(Q!R S
 	
 
 $& GGG!QU5(Q!R S
 	
 
 ')#YaAz"#%aAx GGG  " %$%'I"$

 	
 
r   N)__name__
__module____qualname__r   r   r!   r)   r,   r5   r>   rA   rK   rO   rW   r^   rp   rx    r   r   r	   r	      sI    '.
6
6
8("",A
 $
r   r	   c                      e Zd Zd Zd Zd ZdddZddd	Zeed
ZddeiiZ	ddeiiZ
ddeddiiZddgiZdddefdddefgZdddi fgZdddefgZdddefgZdddeddfgZe	defe	defe
defedefedefgZej(                  j+                  de      d        Ze	efe
efeefgZej(                  j+                  de      d        Ze
eegZej(                  j+                  de      d        Zd Zd Zd Zd Zd Zd Z d Z!d  Z"d! Z#y")#TestMultiGraphc                    t         j                  | _        di idi id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 )	Nr   r   r   r   r   r   r   r   r   r   )	rE   rF   r\   k3adjk3edgesk3nodesr   r.   r/   )r   ed1ed2ed3s       r   setup_methodzTestMultiGraph.setup_method   s    ]]
R1b'Ar7#S S)##.>ssCST
/ **,zzaaar   c                     | j                  dgdgdd      }|j                  dk(  sJ dddi iifdddi iifg}t        |j                  j	                               |k(  sJ y )Nr   r   r   test)r1   r   )r\   r1   sortedr:   items)r   r   expecteds      r   test_data_inputzTestMultiGraph.test_data_input   sp    JJA3A3'fJ5vvQG%A2w<'89aeekkm$000r   c                    ddd}ddd}||d}dd|ii}ddd	|fddd
|fg}ddd	|fg}| j                  |d      }t        |j                  dd            |k(  sJ | j                  |d       }t        |j                  dd            |k(  sJ | j                  |d      }t        |j                  dd            |k(  sJ | j                  |d      }| j                  t        j                  |            }t        j
                  ||      du sJ dD ]C  }	| j                  t        j                  |      |	      }t        j
                  ||      |	k(  rCJ  y )Nru   r$   ws   rY   r   abr   r   Tmultigraph_inputrl   F)TF)r\   listr]   rE   to_dict_of_dictsis_isomorphic)
r   edata0edata1keydictdodododmultiple_edgesingle_edger   r(   mgis
             r   test_data_multigraph_inputz)TestMultiGraph.test_data_multigraph_input   s   ''(g'sAv.c1f0EFS!W-.JJwJ6AGGDG12mCCCJJwJ6AGGDG12mCCCJJwJ7AGGDG12kAAA JJwJ6JJr**1-.1%---  	1C

2..q1C
HA##Aq)S000	1r   ru   r$   r   bluebox)colorshape)traitsgraphicsr   r   )r   r   r   r   r   TFzdod, mgi, edgesc                     | j                  ||      }t        |j                  dd            |k(  sJ t        j                  || j                   |      }t        |j                  dd            |k(  sJ y )Nr   Trl   create_usingr   )r\   r   r]   rE   to_networkx_graph)r   dodr   r]   r   s        r   test_non_multigraph_inputz(TestMultiGraph.test_non_multigraph_input   sm    JJsSJ1AGGDG12e;;;  4::PSTAGGDG12e;;;r   z
dod, edgesc                 h    | j                  |      }t        |j                  dd            |k(  sJ y )NTrl   )r\   r   r]   )r   r   r]   r   s       r   "test_non_multigraph_input_mgi_nonez1TestMultiGraph.test_non_multigraph_input_mgi_none  s1     JJsOAGGDG12e;;;r   r   c                     t        j                  t        j                  | j                  |d       t        j                  t        j                  t        j
                  || j                  d       y )NTr   r   )pytestraisesrE   NetworkXErrorr\   r   )r   r   s     r   test_non_multigraph_input_raisez.TestMultiGraph.test_non_multigraph_input_raise  sK     	b&&

C$O  !	
r   c                 <   | j                   }|d   di i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   r   jA)r   r   r   KeyError__getitem__	TypeErrorr   s     r   test_getitemzTestMultiGraph.test_getitem  s    GGtAr72w////]]8$ 	MM#	]]9% 	!MM3% 	! 	!	 		! 	!s   B*BBBc                    | j                   }|j                  d       |j                  ddi iiddi 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   r   r   )r   remove_noder:   r   r   rE   r   r   s     r   test_remove_nodezTestMultiGraph.test_remove_node$  sq    GG	auuQBLa!R\::::]]2++, 	MM"	 	 	s   A88Bc                    | j                         }|j                  dd       |j                  ddi iiddi iidk(  sJ | j                         } |j                  d  |j                  ddi iiddi 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   r   anything)r\   rT   r:   r   r   
ValueErrorr   s     r   test_add_edgezTestMultiGraph.test_add_edge+  s    JJL	

1auuQBLa!R\::::JJL

FuuQBLa!R\::::JJL]]:& 	)JJtZ(	) 	) 	)s   #B??Cc                 4   | j                         }|j                  ddd       |j                  dd       |j                         dk(  sJ | j                         }|j                  dddi fg       |j                  dg       |j                         dk(  sJ y )Nr   r   rR   r   r   )r\   rT   rV   add_edges_fromr   s     r   test_add_edge_conflicting_keyz,TestMultiGraph.test_add_edge_conflicting_key6  s    JJL	

1aQ
	

1a  "a'''JJL	1aB-)	&"  "a'''r   c                 n   | j                         }|j                  dddddifg       |j                  di ddididi ddididk(  sJ |j                  dddddifgd       |j                  di ddiddiddididi ddiddiddididk(  sJ | j                         }ddddifd	d
dg}|j                  |       ddiddii i d}|j                  d|id|i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        y # 1 sw Y   |xY w# 1 sw Y   JxY w# 1 sw Y   y xY w)Nr   r   r   rw      r   )rw   )r   r   r   r   )r   r   ))rw   r   )r   r      )r   r   r   )r   r   r   r   )r   )r   r   r   r      )	r\   r   r:   r.   r   r   rE   r   r   )r   r   r]   r   s       r   test_add_edges_fromz"TestMultiGraph.test_add_edges_from@  s   JJL	&1a(A"789uurxm,-rxm,-
 
 	
 
 	
&1a(A"78Cuurxm18Q-PQrxm18Q-PQ
 
 	
 
 JJLHa=!$	
 	
m1"2Fvva\q'l;;;; ]]2++, 	%dV$	% ]]2++, 	0o./	0 ]]9% 	"aS!	" 	"	% 	%	0 	0	" 	"s$   FF7F+FF(+F4c                     t        j                         }t        j                  t              5  |j                  ddddidfg       ddd       y# 1 sw Y   yxY w)zadd_edges_from expects 4-tuples of the format (u, v, key, data_dict).

        Ensure 4-tuples of form (u, v, data_dict, key) raise exception.
        r   r   r   redN)rE   rF   r   r   r   r   r   s     r   4test_multigraph_add_edges_from_four_tuple_misorderedzCTestMultiGraph.test_multigraph_add_edges_from_four_tuple_misordereda  sO    
 MMO]]9% 	<q!gu%5q9:;	< 	< 	<s   AAc                    | j                   }|j                  dd       |j                  ddi iiddi iidi idi iddk(  sJ t        j                  t
        j                        5  |j                  dd       d d d        t        j                  t
        j                        5  |j                  ddd       d d d        y # 1 sw Y   JxY w# 1 sw Y   y xY w)Nr   r   r   r   r   r   rR   )r   rU   r:   r   r   rE   r   r   s     r   test_remove_edgezTestMultiGraph.test_remove_edgek  s    GG	auuQBLa!R\1b'qRTg>VWWWW]]2++, 	!MM"a 	!]]2++, 	'MM!QAM&	' 	'	! 	!	' 	's   &C$CCCc                    | j                   j                         }|j                  dg       di i}|j                  d|id|i||ddk(  sJ |j                  dg       | j                   j	                  dd       | j                   j                         }|j                  t        |j                  dd                   |j                  i i i dk(  sJ | j                   j                         }|j                  t        |j                  d	d                   |j                  i i i dk(  sJ | j                   j                         }|j                  t        |j                  d	d	                   |j                  i i i dk(  sJ | j                   j                         }|j                  d
dddi fdg       |j                  ddi iiddi iii dk(  sJ y )Nr   r   r   r   )r   r   r   T)rk   rm   Fr   r   r   r   )r   copyremove_edges_fromr:   rT   r   r]   r   r   kds      r   test_remove_edges_fromz%TestMultiGraph.test_remove_edges_fromu  s   GGLLN	VH%WuuQGBrNCCCC	VH%AGGLLN	Dd!>?@uuB2"----GGLLN	De$!?@AuuB2"----GGLLN	De%!@ABuuB2"----GGLLN	YAq"v>?uuQBLa!R\bAAAAr   c                    | j                   }|j                  ddd       |j                  ddd       |j                  di idi iddi idi iddi idi iddk(  sJ |j                  dd       di i}|j                  d	|id	|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   rQ   rR   r   r   r   r   r   r   )r   rT   rU   r:   r   r   rE   r   r   s      r   test_remove_multiedgez$TestMultiGraph.test_remove_multiedge  s    GG	

1a_
-	a0uur72w'r72w'r72w'
 
 	
 

 	
aWuuQGBrNCCCC]]2++, 	!MM"a 	! 	! 	!s   4CCN)$ry   rz   r{   r   r   r   etraits	egraphicsedatadodod1dodod2dodod3dolr   r   single_edge1single_edge2single_edge3casesr   markparametrizer   mgi_none_casesr   raise_casesr   r   r   r   r   r   r   r   r   r   r|   r   r   r~   r~      s   114 e$G 51II6EC< FC>"FCG%89:F,C3'2S#z94UVMa$%K#q%()L#q'*+L#qW5"ABCL 
}%	%	%	%	e[!E [[.6< 7< 
		N [[\>:< ;<
 63'K[[UK0	
 1	
!	)("B<'B(!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y
)TestEdgeSubgraphz;Unit tests for the :meth:`MultiGraph.edge_subgraph` method.c                    t        j                         }t        j                  |t        d             t        j                  |t        d             t        d      D ]  }d| |j                  |   d<    d|j
                  d   d   d   d<   d|j
                  d   d   d   d<   d|j
                  d	   d
   d   d<   d|j
                  d	   d
   d   d<   d|j                  d<   || _        |j                  ddg      | _	        y )Nr   noder1   edge010r   r   edge011edge340r   r   edge341r0   r   )r   r   r   )
rE   rF   add_pathranger;   r:   r0   r   edge_subgraphr(   )r   r   is      r   r   zTestEdgeSubgraph.setup_method  s    MMO
AuQx 
AuQx q 	,A#'sAGGAJv	,!*aAv!*aAv!*aAv!*aAv! )Y!78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_nodes  s    vdfflln5555r   c                 ^    ddgt        | j                  j                  dd            k(  sJ y)z.Tests that the subgraph has the correct edges.)r   r   r   r   )r   r   r   r   Tr1   rl   N)r   r(   r]   r   s    r   test_correct_edgesz#TestEdgeSubgraph.test_correct_edges  s6    $&:;vFFLLdL0@
 
 	
 
r   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   add_noder   r(   r;   r   s    r   test_add_nodezTestEdgeSubgraph.test_add_node  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   r   z!TestEdgeSubgraph.test_remove_node  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.

        r$   r   r1   rY   r   N)r(   r   r;   )r   rg   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                 t   | j                   j                  d      D ]G  \  }}}| j                  j                  |   |   |   | j                   j                  |   |   |   k(  rGJ  d| j                  j                  d   d   d   d<   | j                  j                  d   d   d   d   | j                   j                  d   d   d   d   k(  sJ d| j                   j                  d   d	   d   d<   | j                  j                  d   d	   d   d   | j                   j                  d   d	   d   d   k(  sJ y
)z`Tests that the edge attribute dictionary of the two graphs is
        the same object.

        T)rm   r$   r   r   r1   rY   r   r   N)r(   r]   r   r.   )r   rf   rg   ks       r   test_edge_attr_dictz$TestEdgeSubgraph.test_edge_attr_dict  s.   
 vv|||. 	@GAq!66;;q>!$Q'466;;q>!+<Q+????	@ (-Aq!V$vv{{1~a #F+tvv{{1~a/@/CF/KKKK',Aq!V$vv{{1~a #F+tvv{{1~a/@/CF/KKKKr   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   r0   r(   r   s    r   test_graph_attr_dictz%TestEdgeSubgraph.test_graph_attr_dict  s"    
 vv||tvv||+++r   N)ry   rz   r{   __doc__r   r   r   r   r   r   r  r  r|   r   r   r   r     s.    E9$6
632L,r   r   c                       e Zd Zy)CustomDictClassN)ry   rz   r{   r|   r   r   r  r    s    r   r  c                   (    e Zd ZeZeZeZeZeZeZ	eZ
y)MultiGraphSubClassN)ry   rz   r{   r  node_dict_factorynode_attr_dict_factoryadjlist_outer_dict_factoryadjlist_inner_dict_factoryrn   rd   graph_attr_dict_factoryr|   r   r   r	  r	    s,    ',!0!0+,-r   r	  c                       e Zd Zd Zy)TestMultiGraphSubclassc                    t         | _        g d| _        g d| _        | j                         | _        | j                  j                  | j                  j                         | j                  j                         | j                  j                         d      | j                  _        i i i d| j                  _        | j                  D ]U  }| j                  D ]D  }||k7  s	di i}|| j                  j                  |   |<   || j                  j                  |   |<   F W | j                  j                         | j                  _
        | j                  j                         | j                  j                  d<   | j                  j                         | j                  j                  d<   | j                  j                         | j                  j                  d<   y )Nr   r   r   r   r   )r	  r\   r   r   r   r  r  r.   r3   r
  r/   r  )r   rf   rg   rh   s       r   r   z#TestMultiGraphSubclass.setup_method  s`   '
/ **,ww99775577755777557
 2"- 	+A\\ +6BA)*DGGLLOA&)*DGGLLOA&	+	+ 1137799;a7799;a7799;ar   N)ry   rz   r{   r   r|   r   r   r  r    s    <r   r  )collectionsr   r   networkxrE   networkx.utilsr   
test_graphr   r   
_TestGraphr	   r~   r   r  rF   r	  r  r|   r   r   <module>r     sn        & + /g
. g
T`!): `!FN, N,b	h 	. .<^ <r   