
    \Mh/                         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dS )    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dS )BaseDiGraphTesterc                 t    | j         }|                    dd          sJ |                    dd          rJ d S Nr   r   )K3has_successorselfGs     c/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/networkx/classes/tests/test_digraph.pytest_has_successorz$BaseDiGraphTester.test_has_successor   sC    Gq!$$$$$??1b)))))))    c                     | j         }t          |                    d                    ddgk    sJ t          j        t
          j                  5  |                    d           d d d            d S # 1 swxY w Y   d S Nr   r      r   )r   sorted
successorspytestraisesnxNetworkXErrorr   s     r   test_successorsz!BaseDiGraphTester.test_successors   s    Gall1oo&&1a&0000]2+,, 	 	LL	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	   A33A7:A7c                 t    | j         }|                    dd          sJ |                    dd          rJ d S r   )r   has_predecessorr   s     r   test_has_predecessorz&BaseDiGraphTester.test_has_predecessor   sG    G  A&&&&&$$Q+++++++r   c                     | j         }t          |                    d                    ddgk    sJ t          j        t
          j                  5  |                    d           d d d            d S # 1 swxY w Y   d S r   )r   r   predecessorsr   r   r   r   r   s     r   test_predecessorsz#BaseDiGraphTester.test_predecessors   s    GannQ''((QF2222]2+,, 	 	NN2	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	r    c                    | j         }t          |                                          g dk    sJ t          |                    d                    ddgk    sJ t          |                    ddg                    g dk    sJ t          j        t
          j                  5  |                    d           d d d            d S # 1 swxY w Y   d S )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   Gaggii  $T$T$TTTTTaggajj!!ff%55555aggq!foo&&*J*J*JJJJJ]2+,, 	 	GGBKKK	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   %CCCc                 R   | j         }t          |                                          g dk    sJ t          |                    d                    ddgk    sJ t          j        t
          j                  5  |                    d           d d d            d S # 1 swxY w Y   d S )Nr(   r   r)   r*   r   )r   r   	out_edgesr   r   r   r   r   s     r   test_out_edgesz BaseDiGraphTester.test_out_edges*   s    Gakkmm$$(X(X(XXXXXakk!nn%%&&)99999]2+,, 	 	KKOOO	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   9BB #B c                    | j         }t          |                                          ddgk    sJ t          |                    d                    dgk    sJ t          |                    d                    g k    sJ d S Nr)   r,   r   r   )P3r   r2   r   s     r   test_out_edges_dirz$BaseDiGraphTester.test_out_edges_dir1   s}    Gakkmm$$(88888akk!nn%%&1111akk!nn%%++++++r   c                    t          j        ddddifddi fg          }t          |                    d                    ddddifddi fgk    sJ t          |                    dd                    ddddifgk    sJ t          |                    d                    ddgk    sJ t          |                    dd                    dgk    sJ d S 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    JA{+aBZ899akktk,,--1a&!2E1bz1RRRRRakk!$k//00aVQK5H4IIIIIakkvk..//I|3LLLLLakk!&k1122ykAAAAAAr   c                    | j         }t          |                                          ddgk    sJ t          |                    d                    g k    sJ t          |                    d                    dgk    sJ d S r5   )r6   r   in_edgesr   s     r   test_in_edges_dirz#BaseDiGraphTester.test_in_edges_dir>   s}    Gajjll##'77777ajjmm$$****ajjmm$$000000r   c                    t          j        ddddifddi fg          }t          |                    d                    ddddifddi fgk    sJ t          |                    dd                    ddddifgk    sJ t          |                    d                    ddgk    sJ t          |                    dd                    dgk    sJ d S r9   )r   r<   r   r?   r   s     r   test_in_edges_dataz$BaseDiGraphTester.test_in_edges_dataD   s    JA{+aBZ899ajjdj++,,!Q1Dq!Rj0QQQQQajjj..//QFA;4G3HHHHHajjfj--..9l2KKKKKajjj0011i[@@@@@@r   c                 `   | j         }t          |                                          g dk    sJ t          |                                          ddddk    sJ |                    d          dk    sJ t	          |                    t          dg                              dgk    sJ d S )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    Gahhjj!!%=%=%=====AHHJJqQ1#5#55555xx{{aAHHT1#YY''((VH444444r   c                 `   | j         }t          |                                          g dk    sJ t          |                                          ddddk    sJ |                    d          dk    sJ t	          |                    t          dg                              dgk    sJ d S 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    Gakkmm$$(@(@(@@@@@AKKMM""!a&8&88888{{1~~""""AKKaS		**++x777777r   c                 `   | j         }t          |                                          g dk    sJ t          |                                          ddddk    sJ |                    d          dk    sJ t	          |                    t          dg                              dgk    sJ d S rM   )r   r   
out_degreerH   rI   rJ   r   s     r   test_out_degreez!BaseDiGraphTester.test_out_degreeY   s    Gallnn%%)A)A)AAAAAALLNN##1q'9'99999||A!####ALLqc++,,888888r   c                 |    | j         }|                                dk    sJ |                                dk    sJ d S )N   )r   sizenumber_of_edgesr   s     r   	test_sizezBaseDiGraphTester.test_size`   sA    Gvvxx1}}}}  ""a''''''r   c                    |                                  }|                    dd           |                                                    dd          sJ |                    d                              dd          rJ |                    dd           |                    d                              dd          sJ d S )Nr   r   T)
reciprocal)Graphadd_edgeto_undirectedhas_edger   s     r   test_to_undirected_reciprocalz/BaseDiGraphTester.test_to_undirected_reciprocale   s    JJLL	

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

1a$//88A>>>>>>>r   c                 z   t          j        ddg          }|                                }t          |                                          ddgk    sJ |                    dd           t          |                                          dgk    sJ t          |                                          ddgk    sJ d S )Nr)   r,   r+   r-   r   r   )r   r<   reverser   r/   remove_edger   r   Rs      r   test_reverse_copyz#BaseDiGraphTester.test_reverse_copym   s    J'((IIKKaggii  VV$44444	aaggii  VH,,,,aggii  VV$4444444r   c                 J   t          j        ddg          }|                    d          }t          |                                          ddgk    sJ t          j        t           j                  5  |                    dd           d d d            d S # 1 swxY w Y   d S )	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   s    J'((II5I!!aggii  VV$44444]2+,, 	  	 MM!Q	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	 s   4BBBc                     G d d          } |            } |            }t          j                    }|                    ||           t          |                                |                                                                          sJ ||fgt          |                                                                          k    sJ d S )Nc                       e Zd ZdS )4BaseDiGraphTester.test_reverse_hashable.<locals>.FooN)__name__
__module____qualname__ r   r   Foork   }   s        Dr   rp   )r   r<   r\   r   nodesra   rI   r/   )r   rp   xyr   s        r   test_reverse_hashablez'BaseDiGraphTester.test_reverse_hashable|   s    	 	 	 	 	 	 	 	 CEECEEJLL	

1a17799aiikk&7&7&9&9:::::Ax4		 1 1 3 344444444r   c                 R   | j                                         }|j        }t          |j                  t          |          k    sJ |j        }t          |j                  t          |          k    sJ i |_        t          |j                  t          |          k    sJ t          |j                  t          |          k    sJ |j        }t          |j                  t          |          k    sJ i |_        t          |j                  t          |          k    sJ d S 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    GLLNN6!&zzR\\))))%!%yyBwKK''''!&zzR\\))))!%yyBwKK''''6!&zzR\\))))!&zzR\\))))))r   c                 H   | 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 d S rv   )	r   rg   rx   r?   r2   rO   rR   rw   r{   r   s     r   test_di_attributes_cachedz+BaseDiGraphTester.test_di_attributes_cached   s    GLLNN!*~~AJ////!+"Q[//1111!+"Q[//1111!,2al#3#33333!&zzRZZ''''!&zzRZZ''''''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
      sF       * * *
  , , ,
      , , ,B B B1 1 1A A A5 5 58 8 89 9 9( ( (
? ? ?5 5 5     	5 	5 	5* * * ( ( ( ( (r   r
   c                        e Zd Zd Zd Zd ZdS )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          |                    d                    |k    sJ t          |                    dd                    |d d         k    sJ t          |                    ddgd                    |d d         k    sJ t          j        t
          j                  5  |                    dd           d d d            d S # 1 swxY w Y   d S )Nr   r   r   Tr;   rE   r   r.   )r   r   	all_edgess      r   test_edges_dataz%BaseAttrDiGraphTester.test_edges_data   s`   G2J2J2J2J2J2J
	 agg4g(())Y6666aggadg++,,	"1"====aggq!f4g0011Yrr]BBBB]2+,, 	 	GGB	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   C33C7:C7c                    | j                                         }|                    dddd           t          |                    d                    g dk    sJ t          |                    d                    d	d
d	dk    sJ |                    dd          d
k    sJ t          |                    d                    g dk    sJ t          |                    d                    d	dd	dk    sJ |                    dd          dk    sJ t          |                    t          dg          d                    dgk    sJ d S )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   sd   GLLNN	

1a3
///akkk22337Q7Q7QQQQQAKKxK0011sq5I5IIIII{{1X{..#5555akkk11226P6P6PPPPPAKKwK//00ca4H4HHHHH{{1W{--4444AKKaS		'K::;;zIIIIIIr   c                    | j                                         }|                    dddd           t          |                    d                    g dk    sJ t          |                    d                    d	d
d
dk    sJ |                    dd          d	k    sJ t          |                    d                    g dk    sJ t          |                    d                    dd
d
dk    sJ |                    dd          dk    sJ t          |                    t          dg          d                    dgk    sJ d S )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   sd   GLLNN	

1a3
///all(l33448R8R8RRRRRALLL1122#!6J6JJJJJ||Ah|//36666all'l22337Q7Q7QQQQQALLL0011q5I5IIIII||Ag|..#5555ALLqc7L;;<<
JJJJJJr   N)rl   rm   rn   r   r   r   ro   r   r   r   r      sI           	J 	J 	J	K 	K 	K 	K 	Kr   r   c                   B    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
S )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        _        ||d||d||dd| j        _        i | j        _	        i | j        j	        d<   i | j        j	        d<   i | j        j	        d<   i i }}|                                 | _
        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<   d S )	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   sk   Z
(*BBB'?$S#sC S))##.>.>ssCSCSTT
/// yy**,,
 #,,SS1A1A#RUFVFVWWaaaS**,,H!Sb99As8C99aaar   c                    |                      dgdgdd          }|j        dk    sJ t          |j                                                  ddi ifddi ifgk    sJ t          |j                                                  ddi ifddi ifgk    sJ t          |j                                                  ddi ifddi ifgk    sJ d S )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5vaekkmm$$!aWAr7|(DDDDDafllnn%%1q"g,QG)EEEEEafllnn%%1q"g,QG)EEEEEEEr   c                    |                                  }|                    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        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  |                    d d           d d d            d S # 1 swxY w Y   d S )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   JJLL	

1auQG++++++vaW,,,,,,vRQG,,,,,,JJLL
FuQG++++++vaW,,,,,,vRQG,,,,,,]:-DEEE 	  	 JJtQ	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	 s   C44C8;C8c                 P   |                                  }|                    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  |                    d	g           d d d            n# 1 swxY w Y   t          j        t          j                  5  |                    d
g           d d d            n# 1 swxY w Y   t          j        t                    5  |                    dg           d d d            n# 1 swxY w Y   t          j        t          d          5  |                    ddg           d d d            d S # 1 swxY w Y   d S )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   JJLL	&1a&!"56Q???u<<KKKKKKv&!&!=="LLLLLLvRQ$4!fa[9IJJJJJJ]2+,, 	% 	%dV$$$	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	%]2+,, 	- 	-l^,,,	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	-]9%% 	" 	"aS!!!	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	"]:-DEEE 	2 	2i0111	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2sH   B==CC&D		DD-EEE6FF"Fc                 b   | 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  |                    dd           d d d            d S # 1 swxY w Y   d S )	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
   GLLNN	avaWRBrNNKKKKKKv^^BrNNKKKKKK]2+,, 	! 	!MM"a   	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	!s    B$$B(+B(c                     | 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 |                    dg           d S )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    GLLNN	VH%%%vaWRBrNNKKKKKKv^^BrNNKKKKKK	VH%%%%%r   c                     | j         }d|j        d<   |                                 t          |j                  g k    sJ |j        i k    sJ |j        i k    sJ |j        i k    sJ d S )Nr   r   )r   graphclearrI   rq   rw   r{   r   s     r   
test_clearzTestDiGraph.test_clear  sk    G				AG}}""""v||||v||||w"}}}}}}r   c                 F   | j         }d|j        d<   t          |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 d S )Nr   r   rF   )r   r   rI   rq   clear_edgesrw   r{   r/   )r   r   rq   expecteds       r   test_clear_edgeszTestDiGraph.test_clear_edges"  s    GQW	AG}}%%%%bR((v!!!!v!!!!AG}}""""wv$&&&&&&r   N)rl   rm   rn   __doc__r   r   r   r   r   r   r   r   ro   r   r   r   r      s        GG  2F F F     2 2 2 ! ! !& & &  
' 
' 
' 
' 
'r   r   c                       e Zd ZdZd Zd ZdS )r   z8Unit tests for the :meth:`DiGraph.edge_subgraph` method.c                 6   t          j        t          j        d                    }t          d          D ]}d| |j        |         d<   d|j        d         d<   d|j        d         d<   d|j        d<   || _        |                    ddg          | _	        d S )	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    Jr}Q''((q 	, 	,A!+AGAJv (f (f!&&!122r   c                    t          j                    }|                    dd           |                    dg          }t	          |                    d                    g k    sJ t	          |                    d                    dgk    sJ t	          |                    d                    dgk    sJ t	          |                    d                    g k    sJ dS )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     JLL	

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