
    ިsg/                         d dl Z d dlZd dlmZ ddlmZ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ee      Z G d de	      Zy)    N)nodes_equal   )BaseAttrGraphTesterBaseGraphTester)TestEdgeSubgraph)	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d Zd Zd Zd Zd Zd Zy)BaseDiGraphTesterc                 l    | j                   }|j                  dd      sJ |j                  dd      rJ y Nr   r   )K3has_successorselfGs     V/var/www/html/venv/lib/python3.12/site-packages/networkx/classes/tests/test_digraph.pytest_has_successorz$BaseDiGraphTester.test_has_successor   s6    GGq!$$$??1b))))    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   sorted
successorspytestraisesnxNetworkXErrorr   s     r   test_successorsz!BaseDiGraphTester.test_successors   s]    GGall1o&1a&000]]2++, 	LL	 	 	   A,,A5c                 l    | j                   }|j                  dd      sJ |j                  dd      rJ y r   )r   has_predecessorr   s     r   test_has_predecessorz&BaseDiGraphTester.test_has_predecessor   s:    GG  A&&&$$Q++++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r   )r   r   predecessorsr   r   r   r   r   s     r   test_predecessorsz#BaseDiGraphTester.test_predecessors   s^    GGannQ'(QF222]]2++, 	NN2	 	 	r    c                 v   | j                   }t        |j                               g dk(  sJ t        |j                  d            ddgk(  sJ t        |j                  ddg            g dk(  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   r   )r   r   r   r   r   r)   r*   r   )r)   r*   r+   r,   r   r   r   edgesr   r   r   r   r   s     r   
test_edgeszBaseDiGraphTester.test_edges"   s    GGaggi $TTTTaggaj!ff%5555aggq!fo&*JJJJ]]2++, 	GGBK	 	 	s   B//B8c                 0   | j                   }t        |j                               g dk(  s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   r   	out_edgesr   r   r   r   r   s     r   test_out_edgesz BaseDiGraphTester.test_out_edges*   sw    GGakkm$(XXXXakk!n%&&)9999]]2++, 	KKO	 	 	s   1BBc                     | j                   }t        |j                               ddgk(  sJ t        |j                  d            dgk(  sJ t        |j                  d            g k(  sJ y Nr)   r,   r   r   )P3r   r2   r   s     r   test_out_edges_dirz$BaseDiGraphTester.test_out_edges_dir1   sa    GGakkm$(8888akk!n%&111akk!n%+++r   c                 l   t        j                  ddddifddi fg      }t        |j                  d            ddddifddi fgk(  sJ t        |j                  dd            ddddifgk(  sJ t        |j                  d            ddgk(  sJ t        |j                  dd            dgk(  sJ y Nr   r   dataTr:   )r   r   r   )r   r   N)r   DiGraphr   r2   r   s     r   test_out_edges_dataz%BaseDiGraphTester.test_out_edges_data7   s    JJA{+aBZ89akktk,-1a&!2E1bz1RRRRakk!$k/0aVQK5H4IIIIakkvk./I|3LLLLakk!&k12ykAAAr   c                     | j                   }t        |j                               ddgk(  sJ t        |j                  d            g k(  sJ t        |j                  d            dgk(  sJ y r5   )r6   r   in_edgesr   s     r   test_in_edges_dirz#BaseDiGraphTester.test_in_edges_dir>   sa    GGajjl#'7777ajjm$***ajjm$000r   c                 l   t        j                  ddddifddi fg      }t        |j                  d            ddddifddi fgk(  sJ t        |j                  dd            ddddifgk(  sJ t        |j                  d            ddgk(  sJ t        |j                  dd            dgk(  sJ y r9   )r   r<   r   r?   r   s     r   test_in_edges_dataz$BaseDiGraphTester.test_in_edges_dataD   s    JJA{+aBZ89ajjdj+,!Q1Dq!Rj0QQQQajjj./QFA;4G3HHHHajjfj-.9l2KKKKajjj01i[@@@r   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        dg                  dgk(  sJ y )N)r      )r   rE   )r   rE   rE   r   r   r   r   rD   )r   r   degreedictlistiterr   s     r   test_degreezBaseDiGraphTester.test_degreeK   s    GGahhj!%====AHHJqQ1#5555xx{aAHHT1#Y'(VH444r   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        dg                  dgk(  sJ y N)r*   r,   r   r   r   rF   r   r*   )r   r   	in_degreerH   rI   rJ   r   s     r   test_in_degreez BaseDiGraphTester.test_in_degreeR   s    GGakkm$(@@@@AKKM"!a&8888{{1~"""AKKaS	*+x777r   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        dg                  dgk(  sJ y rM   )r   r   
out_degreerH   rI   rJ   r   s     r   test_out_degreez!BaseDiGraphTester.test_out_degreeY   s    GGalln%)AAAAALLN#1q'9999||A!###ALLqc+,888r   c                 p    | j                   }|j                         dk(  sJ |j                         dk(  sJ y )N   )r   sizenumber_of_edgesr   s     r   	test_sizezBaseDiGraphTester.test_size`   s4    GGvvx1}}  "a'''r   c                 @   | j                         }|j                  dd       |j                         j                  dd      sJ |j                  d      j                  dd      rJ |j                  dd       |j                  d      j                  dd      sJ y )Nr   r   T)
reciprocal)Graphadd_edgeto_undirectedhas_edger   s     r   test_to_undirected_reciprocalz/BaseDiGraphTester.test_to_undirected_reciprocale   s    JJL	

1a ))!Q///??d?3<<QBBB	

1a$/88A>>>r   c                 4   t        j                  ddg      }|j                         }t        |j	                               ddgk(  sJ |j                  dd       t        |j	                               dgk(  sJ t        |j	                               ddgk(  sJ y )Nr)   r,   r+   r-   r   r   )r   r<   reverser   r/   remove_edger   r   Rs      r   test_reverse_copyz#BaseDiGraphTester.test_reverse_copym   s    JJ'(IIKaggi VV$4444	aaggi VH,,,aggi VV$4444r   c                 *   t        j                  ddg      }|j                  d      }t        |j	                               ddg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,   F)copyr+   r-   r   r   )	r   r<   ra   r   r/   r   r   r   rb   rc   s      r   test_reverse_nocopyz%BaseDiGraphTester.test_reverse_nocopyu   sx    JJ'(II5I!aggi VV$4444]]2++, 	 MM!Q	  	  	 s   -B		Bc                 N    G d d      } |       } |       }t        j                         }|j                  ||       t        |j	                         |j                         j	                               sJ ||fgt        |j                         j                               k(  sJ y )Nc                       e Zd Zy)4BaseDiGraphTester.test_reverse_hashable.<locals>.FooN)__name__
__module____qualname__ r   r   Foork   }   s    r   rp   )r   r<   r\   r   nodesra   rI   r/   )r   rp   xyr   s        r   test_reverse_hashablez'BaseDiGraphTester.test_reverse_hashable|   s    	 	 EEJJL	

1a1779aiik&7&7&9:::Ax4		 1 1 34444r   c                 @   | j                   j                         }|j                  }t        |j                        t        |      k(  sJ |j                  }t        |j                        t        |      k(  sJ i |_        t        |j                        t        |      k7  sJ t        |j                        t        |      k7  sJ |j                  }t        |j                        t        |      k(  sJ i |_        t        |j                        t        |      k7  sJ y N)r   rg   succidadj_succpred_pred)r   r   old_succold_adjold_preds        r   test_di_cache_resetz%BaseDiGraphTester.test_di_cache_reset   s    GGLLN66!&&zR\)))%%!%%yBwK'''!&&zR\)))!%%yBwK'''66!&&zR\)))!&&zR\)))r   c                 T   | 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 t        |j                        t        |j                        k(  sJ t        |j                        t        |j                        k(  sJ y rv   )	r   rg   rx   r?   r2   rO   rR   rw   r{   r   s     r   test_di_attributes_cachedz+BaseDiGraphTester.test_di_attributes_cached   s    GGLLN!**~AJJ///!++"Q[[/111!++"Q[[/111!,,2all#3333!&&zRZ'''!&&zRZ'''r   N)rl   rm   rn   r   r   r#   r&   r0   r3   r7   r=   r@   rB   rK   rP   rS   rX   r_   re   rh   rt   r   r   ro   r   r   r
   r
      sh    *
,
,B1A589(
?5 	5* (r   r
   c                       e Zd Zd Zd Zd Zy)BaseAttrDiGraphTesterc                    | j                   }ddi fddi fddi fddi fddi fddi fg}t        |j                  d            |k(  sJ t        |j                  dd            |d d k(  sJ t        |j                  ddgd            |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   Tr;   rE   r   r.   )r   r   	all_edgess      r   test_edges_dataz%BaseAttrDiGraphTester.test_edges_data   s    GG2J2J2J2J2J2J
	 agg4g()Y666aggadg+,	"1===aggq!f4g01Yr]BBB]]2++, 	GGB	 	 	s   4CCc                 2   | j                   j                         }|j                  dddd       t        |j	                  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k(  sJ t        |j	                  d            d	dd	dk(  sJ |j	                  dd      dk(  sJ t        |j	                  t        dg      d            dgk(  sJ y )Nr   r   333333?333333?weightotherr   r   )r*   )r   ?rN   r   r   rF   r   )r*   r   皙@rN   r   r   )r   rg   r\   r   rO   rH   rI   rJ   r   s     r   test_in_degree_weightedz-BaseAttrDiGraphTester.test_in_degree_weighted   s   GGLLN	

1a3
/akkk237QQQQAKKxK01sq5IIII{{1X{.#555akkk126PPPPAKKwK/0ca4HHHH{{1W{-444AKKaS	'K:;zIIIr   c                 2   | j                   j                         }|j                  dddd       t        |j	                  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k(  sJ t        |j	                  d            dd
d
dk(  sJ |j	                  dd      dk(  sJ t        |j	                  t        dg      d            dgk(  sJ y )Nr   r   r   r   r   r   r   ))r   r   r,   rN   r   r   rF   r   )r   r   r,   rN   r   r   )r   rg   r\   r   rR   rH   rI   rJ   r   s     r   test_out_degree_weightedz.BaseAttrDiGraphTester.test_out_degree_weighted   s   GGLLN	

1a3
/all(l348RRRRALLL12#!6JJJJ||Ah|/3666all'l237QQQQALLL01q5IIII||Ag|.#555ALLqc7L;<
JJJr   N)rl   rm   rn   r   r   r   ro   r   r   r   r      s     	J	K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
)TestDiGraphz=Tests specific to dict-of-dict-of-dict digraph data structurec                 :   t         j                  | _        i i i i i i f\  }}}}}}||d||d||dd| _        g d| _        g d| _        | j                         | _        | j                  | j                  _        ||d||d||dd| j                  _        i | j                  _	        i | j                  j                  d<   i | j                  j                  d<   i | j                  j                  d<   i i }}| j                         | _
        d|id|ii d| j                  _        i d|id|id| j                  _        i | j                  _	        i | j                  j                  d<   i | j                  j                  d<   i | j                  j                  d<   y )	Nr,   r*   r)   rF   )r)   r*   r,   r   r   r   )r   r<   r[   k3adjk3edgesk3nodesr   rz   r|   _noder6   )r   ed1ed2ed3ed4ed5ed6s          r   setup_methodzTestDiGraph.setup_method   sa   ZZ
(*BBB'?$S#sC S)##.>ssCST
/ **,

 #,SS1A#RUFVWaaaS**,H!Sb9As8C9aa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 t        |j
                  j	                               ddi ifddi ifgk(  sJ t        |j                  j	                               ddi ifddi ifgk(  sJ y )Nr   r   r,   test)name)r[   r   r   ry   itemsrw   r{   r   s     r   test_data_inputzTestDiGraph.test_data_input   s    JJA3A3'fJ5vvaeekkm$!aWAr7|(DDDDafflln%1q"g,QG)EEEEafflln%1q"g,QG)EEEEr   c                    | j                         }|j                  dd       |j                  di ii dk(  sJ |j                  di ii dk(  sJ |j                  i di idk(  sJ | j                         } |j                  d  |j                  di ii dk(  sJ |j                  di ii dk(  sJ |j                  i di idk(  sJ t        j                  t        d      5  |j                  d d       d d d        y # 1 sw Y   y xY w)Nr   r   r)   None cannot be a nodematch   )r[   r\   ry   rw   r{   r   r   
ValueErrorr   s     r   test_add_edgezTestDiGraph.test_add_edge   s   JJL	

1auuQG++++vvaW,,,,vvRQG,,,,JJL

FuuQG++++vvaW,,,,vvRQG,,,,]]:-DE 	 JJtQ	  	  	 s   !C==Dc                 0   | j                         }|j                  dddddifgd       |j                  ddiddidi i dk(  sJ |j                  ddiddidi i dk(  sJ |j                  i dddiidddi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        t        j                  t        d      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   YxY w# 1 sw Y   y xY w)Nr)   r   r   r:   r   r;   r,   rF   )r   )r   r   r   r   r   r   )Nr   )r   r   )r[   add_edges_fromry   rw   r{   r   r   r   r   	TypeErrorr   r   s     r   test_add_edges_fromzTestDiGraph.test_add_edges_from   s   JJL	&1a&!"56Q?uu<KKKKvv&!&!="LLLLvvRQ$4!fa[9IJJJJ]]2++, 	%dV$	%]]2++, 	-l^,	-]]9% 	"aS!	"]]:-DE 	2i01	2 	2	% 	%	- 	-	" 	"	2 	2s0   #E(!E4F F(E14E= F	Fc                 d   | j                   j                         }|j                  dd       |j                  di ii i di i ddk(  sJ |j                  i i d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   r*   r)   rF   r,   r   )	r   rg   rb   rw   r{   r   r   r   r   r   s     r   test_remove_edgezTestDiGraph.test_remove_edge
  s    GGLLN	avvaWRBrNKKKKvv^BrNKKKK]]2++, 	!MM"a 	! 	! 	!s   
B&&B/c                     | j                   j                         }|j                  dg       |j                  di ii i di i ddk(  sJ |j                  i i ddi ii i ddk(  sJ |j                  dg       y )Nr)   r   r*   rF   r,   )r   r   )r   rg   remove_edges_fromrw   r{   r   s     r   test_remove_edges_fromz"TestDiGraph.test_remove_edges_from  s{    GGLLN	VH%vvaWRBrNKKKKvv^BrNKKKK	VH%r   c                     | j                   }d|j                  d<   |j                          t        |j                        g k(  sJ |j
                  i k(  sJ |j                  i k(  sJ |j                  i k(  sJ y )Nr   r   )r   graphclearrI   rq   rw   r{   r   s     r   
test_clearzTestDiGraph.test_clear  sg    GG		AGG}"""vv||vv||ww"}}r   c                 d   | j                   }d|j                  d<   t        |j                        }|j	                          t        |j                        |k(  sJ i i i d}|j
                  |k(  sJ |j                  |k(  sJ t        |j                        g k(  sJ |j                  d   dk(  sJ y )Nr   r   rF   )r   r   rI   rq   clear_edgesrw   r{   r/   )r   r   rq   expecteds       r   test_clear_edgeszTestDiGraph.test_clear_edges"  s    GGQWW	AGG}%%%bR(vv!!!vv!!!AGG}"""wwv$&&&r   N)rl   rm   rn   __doc__r   r   r   r   r   r   r   r   ro   r   r   r   r      s.    G2F 2 !&
'r   r   c                       e Zd ZdZd Zd Zy)r   z8Unit tests for the :meth:`DiGraph.edge_subgraph` method.c                 B   t        j                  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 )	N   noder   edge01r)   edge34)r   rE   r   )
r   r<   
path_graphrangerq   r/   r   r   edge_subgraphH)r   r   is      r   r   zTestEdgeSubgraph.setup_method2  s    JJr}}Q'(q 	,A#'sAGGAJv	, (f (f!&&!12r   c                 p   t        j                         }|j                  dd       |j                  dg      }t	        |j                  d            g k(  sJ t	        |j                  d            dgk(  sJ t	        |j                  d            dgk(  sJ t	        |j                  d            g k(  sJ y)zzTest that nodes are added to predecessors and successors.

        For more information, see GitHub issue #2370.

        r   r   r)   N)r   r<   r\   r   rI   r%   r   )r   r   r   s      r   test_pred_succzTestEdgeSubgraph.test_pred_succ?  s     JJL	

1aOOVH%ANN1%&",,,ALLO$+++ANN1%&1#---ALLO$***r   N)rl   rm   rn   r   r   r   ro   r   r   r   r   /  s    B3+r   r   )r   networkxr   networkx.utilsr   
test_graphr   r   r   _TestGraphEdgeSubgraphr   
_TestGraphr
   r   r   ro   r   r   <module>r      sX      & < B /S( S(l%K-/B %KPc'' c'L+- +r   