
    h/                         S SK r S SKrS SKJr  SSKJrJr  SSKJr	  SSKJ
r   " S S\5      r " S	 S
\\5      r " S S\\5      r " S S\	5      rg)    N)nodes_equal   )BaseAttrGraphTesterBaseGraphTester)TestEdgeSubgraph)	TestGraphc                       \ rS rSrS rS rS rS rS rS r	S r
S	 rS
 rS rS rS rS rS rS rS rS rS rS rS rSrg)BaseDiGraphTester   c                     U R                   nUR                  SS5      (       d   eUR                  SS5      (       a   eg Nr   r   )K3has_successorselfGs     U/var/www/html/env/lib/python3.13/site-packages/networkx/classes/tests/test_digraph.pytest_has_successor$BaseDiGraphTester.test_has_successor   s<    GGq!$$$$??1b)))))    c                     U R                   n[        UR                  S5      5      SS/:X  d   e[        R                  " [
        R                  5         UR                  S5        S S S 5        g ! , (       d  f       g = fNr   r      r   )r   sorted
successorspytestraisesnxNetworkXErrorr   s     r   test_successors!BaseDiGraphTester.test_successors   sT    GGall1o&1a&000]]2++,LL -,,   A..
A<c                     U R                   nUR                  SS5      (       d   eUR                  SS5      (       a   eg r   )r   has_predecessorr   s     r   test_has_predecessor&BaseDiGraphTester.test_has_predecessor   s@    GG  A&&&&$$Q+++++r   c                     U R                   n[        UR                  S5      5      SS/:X  d   e[        R                  " [
        R                  5         UR                  S5        S S S 5        g ! , (       d  f       g = fr   )r   r   predecessorsr   r   r   r    r   s     r   test_predecessors#BaseDiGraphTester.test_predecessors   sU    GGannQ'(QF222]]2++,NN2 -,,r#   c                    U R                   n[        UR                  5       5      / SQ:X  d   e[        UR                  S5      5      SS/:X  d   e[        UR                  SS/5      5      / SQ:X  d   e[        R                  " [
        R                  5         UR                  S5        S S S 5        g ! , (       d  f       g = f)Nr   r   r   r   r   r   r   r   )r   r   r   r   r   r.   r/   r   )r.   r/   r0   r1   r   r   r   edgesr   r   r   r    r   s     r   
test_edges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   B33
Cc                 @   U R                   n[        UR                  5       5      / SQ:X  d   e[        UR                  S5      5      SS/:X  d   e[        R                  " [
        R                  5         UR                  S5        S S S 5        g ! , (       d  f       g = f)Nr-   r   r.   r/   r   )r   r   	out_edgesr   r   r   r    r   s     r   test_out_edges BaseDiGraphTester.test_out_edges*   sn    GGakkm$(XXXXakk!n%&&)9999]]2++,KKO -,,s   4B
Bc                     U R                   n[        UR                  5       5      SS/:X  d   e[        UR                  S5      5      S/:X  d   e[        UR                  S5      5      / :X  d   eg Nr.   r1   r   r   )P3r   r8   r   s     r   test_out_edges_dir$BaseDiGraphTester.test_out_edges_dir1   sa    GGakkm$(8888akk!n%&111akk!n%+++r   c                 ^   [         R                  " SSSS04SS0 4/5      n[        UR                  SS95      SSSS04SS0 4/:X  d   e[        UR                  SSS95      SSSS04/:X  d   e[        UR                  SS95      SS/:X  d   e[        UR                  SSS95      S/:X  d   eg Nr   r   dataTrB   )r   r   r   )r   r   N)r   DiGraphr   r8   r   s     r   test_out_edges_data%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                     U R                   n[        UR                  5       5      SS/:X  d   e[        UR                  S5      5      / :X  d   e[        UR                  S5      5      S/:X  d   eg r<   )r=   r   in_edgesr   s     r   test_in_edges_dir#BaseDiGraphTester.test_in_edges_dir>   sa    GGajjl#'7777ajjm$***ajjm$000r   c                 ^   [         R                  " SSSS04SS0 4/5      n[        UR                  SS95      SSSS04SS0 4/:X  d   e[        UR                  SSS95      SSSS04/:X  d   e[        UR                  SS95      SS/:X  d   e[        UR                  SSS95      S/:X  d   eg rA   )r   rD   r   rH   r   s     r   test_in_edges_data$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                 (   U R                   n[        UR                  5       5      / SQ:X  d   e[        UR                  5       5      SSSS.:X  d   eUR                  S5      S:X  d   e[	        UR                  [        S/5      5      5      S/:X  d   eg )N)r      )r   rP   )r   rP   rP   r   r   r   r   rO   )r   r   degreedictlistiterr   s     r   test_degreeBaseDiGraphTester.test_degreeK   s    GGahhj!%====AHHJqQ1#5555xx{aAHHT1#Y'(VH444r   c                 (   U R                   n[        UR                  5       5      / SQ:X  d   e[        UR                  5       5      SSSS.:X  d   eUR                  S5      S:X  d   e[	        UR                  [        S/5      5      5      S/:X  d   eg N)r/   r1   r   r   r   rQ   r   r/   )r   r   	in_degreerS   rT   rU   r   s     r   test_in_degree BaseDiGraphTester.test_in_degreeR   s    GGakkm$(@@@@AKKM"!a&8888{{1~"""AKKaS	*+x777r   c                 (   U R                   n[        UR                  5       5      / SQ:X  d   e[        UR                  5       5      SSSS.:X  d   eUR                  S5      S:X  d   e[	        UR                  [        S/5      5      5      S/:X  d   eg rY   )r   r   
out_degreerS   rT   rU   r   s     r   test_out_degree!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                 t    U R                   nUR                  5       S:X  d   eUR                  5       S:X  d   eg )N   )r   sizenumber_of_edgesr   s     r   	test_sizeBaseDiGraphTester.test_size`   s4    GGvvx1}}  "a'''r   c                 R   U R                  5       nUR                  SS5        UR                  5       R                  SS5      (       d   eUR                  SS9R                  SS5      (       a   eUR                  SS5        UR                  SS9R                  SS5      (       d   eg )Nr   r   T)
reciprocal)Graphadd_edgeto_undirectedhas_edger   s     r   test_to_undirected_reciprocal/BaseDiGraphTester.test_to_undirected_reciprocale   s    JJL	

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

1a$/88A>>>>r   c                 <   [         R                  " SS/5      nUR                  5       n[        UR	                  5       5      SS/:X  d   eUR                  SS5        [        UR	                  5       5      S/:X  d   e[        UR	                  5       5      SS/:X  d   eg )Nr.   r1   r0   r2   r   r   )r   rD   reverser   r4   remove_edger   r   Rs      r   test_reverse_copy#BaseDiGraphTester.test_reverse_copym   s    JJ'(IIKaggi VV$4444	aaggi VH,,,aggi VV$4444r   c                 4   [         R                  " SS/5      nUR                  SS9n[        UR	                  5       5      SS/:X  d   e[
        R                  " [         R                  5         UR                  SS5        S S S 5        g ! , (       d  f       g = f)	Nr.   r1   F)copyr0   r2   r   r   )	r   rD   rq   r   r4   r   r   r    rr   rs   s      r   test_reverse_nocopy%BaseDiGraphTester.test_reverse_nocopyu   so    JJ'(II5I!aggi VV$4444]]2++,MM!Q -,,s   -B		
Bc                 X    " S S5      nU" 5       nU" 5       n[         R                  " 5       nUR                  X#5        [        UR	                  5       UR                  5       R	                  5       5      (       d   eX24/[        UR                  5       R                  5       5      :X  d   eg )Nc                       \ rS rSrSrg)4BaseDiGraphTester.test_reverse_hashable.<locals>.Foo}    N)__name__
__module____qualname____firstlineno____static_attributes__r   r   r   Foor}   }   s    r   r   )r   rD   rk   r   nodesrq   rT   r4   )r   r   xyr   s        r   test_reverse_hashable'BaseDiGraphTester.test_reverse_hashable|   s    	 	 EEJJL	

11779aiik&7&7&9::::x4		 1 1 34444r   c                 L   U R                   R                  5       nUR                  n[        UR                  5      [        U5      :X  d   eUR                  n[        UR                  5      [        U5      :X  d   e0 Ul        [        UR                  5      [        U5      :w  d   e[        UR                  5      [        U5      :w  d   eUR                  n[        UR                  5      [        U5      :X  d   e0 Ul        [        UR                  5      [        U5      :w  d   eg N)r   rx   succidadj_succpred_pred)r   r   old_succold_adjold_preds        r   test_di_cache_reset%BaseDiGraphTester.test_di_cache_reset   s    GGLLN66!&&zR\)))%%!%%yBwK'''!&&zR\)))!%%yBwK'''66!&&zR\)))!&&zR\)))r   c                 `   U R                   R                  5       n[        UR                  5      [        UR                  5      :X  d   e[        UR                  5      [        UR                  5      :X  d   e[        UR
                  5      [        UR
                  5      :X  d   e[        UR                  5      [        UR                  5      :X  d   e[        UR                  5      [        UR                  5      :X  d   e[        UR                  5      [        UR                  5      :X  d   eg r   )	r   rx   r   rH   r8   r[   r_   r   r   r   s     r   test_di_attributes_cached+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   r   N)r   r   r   r   r   r!   r&   r*   r5   r9   r>   rE   rI   rL   rV   r\   r`   rf   rn   ru   ry   r   r   r   r   r   r   r   r
   r
      sh    *
,
,B1A589(
?5 	5* (r   r
   c                   &    \ rS rSrS rS rS rSrg)BaseAttrDiGraphTester   c                    U R                   nSS0 4SS0 4SS0 4SS0 4SS0 4SS0 4/n[        UR                  SS95      U:X  d   e[        UR                  SSS95      US S :X  d   e[        UR                  SS/SS95      US S :X  d   e[        R                  " [
        R                  5         UR                  SS5        S S S 5        g ! , (       d  f       g = f)Nr   r   r   TrC   rP   r   r3   )r   r   	all_edgess      r   test_edges_data%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   /C
Cc                    U R                   R                  5       nUR                  SSSSS9  [        UR	                  SS95      / SQ:X  d   e[        UR	                  SS95      S	S
S	S.:X  d   eUR	                  SSS9S
:X  d   e[        UR	                  SS95      / SQ:X  d   e[        UR	                  SS95      S	SS	S.:X  d   eUR	                  SSS9S:X  d   e[        UR	                  [        S/5      SS95      S/:X  d   eg )Nr   r   333333?333333?weightotherr   r   )r/   )r   ?rZ   r   r   rQ   r   )r/   r   皙@rZ   r   r   )r   rx   rk   r   r[   rS   rT   rU   r   s     r   test_in_degree_weighted-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                    U R                   R                  5       nUR                  SSSSS9  [        UR	                  SS95      / SQ:X  d   e[        UR	                  SS95      S	S
S
S.:X  d   eUR	                  SSS9S	:X  d   e[        UR	                  SS95      / SQ:X  d   e[        UR	                  SS95      SS
S
S.:X  d   eUR	                  SSS9S:X  d   e[        UR	                  [        S/5      SS95      S/:X  d   eg )Nr   r   r   r   r   r   r   ))r   r   r1   rZ   r   r   rQ   r   )r   r   r1   rZ   r   r   )r   rx   rk   r   r_   rS   rT   rU   r   s     r   test_out_degree_weighted.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   r   N)r   r   r   r   r   r   r   r   r   r   r   r   r      s     	J	Kr   r   c                   H    \ rS rSrSrS rS rS rS rS r	S r
S	 rS
 rSrg)TestDiGraph   z=Tests specific to dict-of-dict-of-dict digraph data structurec                 &   [         R                  U l        0 0 0 0 0 0 4u  pp4pVXS.X4S.XVS.S.U l        / SQU l        / SQU l        U R                  5       U l        U R                  U R                  l        X5S.XS.X$S.S.U R                  l        0 U R                  l	        0 U R                  R                  S'   0 U R                  R                  S'   0 U R                  R                  S'   0 0 p!U R                  5       U l
        SU0SU00 S.U R                  l        0 SU0SU0S.U R                  l        0 U R                  l	        0 U R                  R                  S'   0 U R                  R                  S'   0 U R                  R                  S'   g )	Nr1   r/   r.   rQ   )r.   r/   r1   r   r   r   )r   rD   rj   k3adjk3edgesk3nodesr   r   r   _noder=   )r   ed1ed2ed3ed4ed5ed6s          r   setup_methodTestDiGraph.setup_method   sL   ZZ
(*BBB'?$#C )#.>sCST
/ **,

 #,S1A#FVWaaaS**,H!Sb9As8C9aaar   c                    U R                  S/S/S.SS9nUR                  S:X  d   e[        UR                  R	                  5       5      SS0 04SS0 04/:X  d   e[        UR
                  R	                  5       5      SS0 04SS0 04/:X  d   e[        UR                  R	                  5       5      SS0 04SS0 04/:X  d   eg )Nr   r   r1   test)name)rj   r   r   r   itemsr   r   r   s     r   test_data_input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                 $   U R                  5       nUR                  SS5        UR                  S0 00 S.:X  d   eUR                  S0 00 S.:X  d   eUR                  0 S0 0S.:X  d   eU R                  5       nUR                  " S6   UR                  S0 00 S.:X  d   eUR                  S0 00 S.:X  d   eUR                  0 S0 0S.:X  d   e[
        R                  " [        SS9   UR                  S S5        S S S 5        g ! , (       d  f       g = f)Nr   r   r.   None cannot be a nodematch   )rj   rk   r   r   r   r   r   
ValueErrorr   s     r   test_add_edgeTestDiGraph.test_add_edge   s    JJL	

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

FuuQG++++vvaW,,,,vvRQG,,,,]]:-DEJJtQ FEEs   %D
Dc                 Z   U R                  5       nUR                  SSSSS04/SS9  UR                  SS0SS0S.0 0 S.:X  d   eUR                  SS0SS0S.0 0 S.:X  d   eUR                  0 SSS00SSS00S.:X  d   e[
        R                  " [        R                  5         UR                  S	/5        S S S 5        [
        R                  " [        R                  5         UR                  S
/5        S S S 5        [
        R                  " [        5         UR                  S/5        S S S 5        [
        R                  " [        SS9   UR                  SS/5        S S S 5        g ! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       Nf= f! , (       d  f       g = f)Nr.   r   r   rB   r   rC   r1   rQ   )r   )r   r   r   r   r   r   )Nr   )r   r   )rj   add_edges_fromr   r   r   r   r   r   r    	TypeErrorr   r   s     r   test_add_edges_from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i01 FE -,,,%%EEs0   $E)#E:FF)
E7:
F
F
F*c                 t   U R                   R                  5       nUR                  SS5        UR                  S0 00 0 S.0 0 S.S.:X  d   eUR                  0 0 S.S0 00 0 S.S.:X  d   e[
        R                  " [        R                  5         UR                  SS5        S S S 5        g ! , (       d  f       g = f)	Nr   r   r   r/   r.   rQ   r1   r   )	r   rx   rr   r   r   r   r   r   r    r   s     r   test_remove_edge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))
B7c                     U R                   R                  5       nUR                  S/5        UR                  S0 00 0 S.0 0 S.S.:X  d   eUR                  0 0 S.S0 00 0 S.S.:X  d   eUR                  S/5        g )Nr.   r   r/   rQ   r1   )r   r   )r   rx   remove_edges_fromr   r   r   s     r   test_remove_edges_from"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                     U R                   nSUR                  S'   UR                  5         [        UR                  5      / :X  d   eUR
                  0 :X  d   eUR                  0 :X  d   eUR                  0 :X  d   eg )Nr   r   )r   graphclearrT   r   r   r   r   s     r   
test_clearTestDiGraph.test_clear  sg    GG		AGG}"""vv||vv||ww"}}r   c                 n   U R                   nSUR                  S'   [        UR                  5      nUR	                  5         [        UR                  5      U:X  d   e0 0 0 S.nUR
                  U:X  d   eUR                  U:X  d   e[        UR                  5      / :X  d   eUR                  S   S:X  d   eg )Nr   r   rQ   )r   r   rT   r   clear_edgesr   r   r4   )r   r   r   expecteds       r   test_clear_edgesTestDiGraph.test_clear_edges"  s    GGQWW	AGG}%%%bR(vv!!!vv!!!AGG}"""wwv$&&&r   )rj   r   r=   r   r   r   N)r   r   r   r   __doc__r   r   r   r   r   r   r   r   r   r   r   r   r   r      s.    G2F 2 !&
'r   r   c                   $    \ rS rSrSrS rS rSrg)r   i/  z8Unit tests for the :meth:`DiGraph.edge_subgraph` method.c                 H   [         R                  " [         R                  " S5      5      n[        S5       H  nSU 3UR                  U   S'   M     SUR
                  S   S'   SUR
                  S   S'   SUR                  S'   Xl        UR                  SS/5      U l	        g )	N   noder   edge01r.   edge34)r   rP   r   )
r   rD   
path_graphranger   r4   r   r   edge_subgraphH)r   r   is      r   r   TestEdgeSubgraph.setup_method2  s    JJr}}Q'(qA#'sAGGAJv  (f (f!&&!12r   c                 z   [         R                  " 5       nUR                  SS5        UR                  S/5      n[	        UR                  S5      5      / :X  d   e[	        UR                  S5      5      S/:X  d   e[	        UR                  S5      5      S/:X  d   e[	        UR                  S5      5      / :X  d   eg)zjTest that nodes are added to predecessors and successors.

For more information, see GitHub issue #2370.

r   r   r.   N)r   rD   rk   r   rT   r)   r   )r   r   r   s      r   test_pred_succTestEdgeSubgraph.test_pred_succ?  s     JJL	

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